summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/context/documents/general/manuals/luametatex.pdfbin0 -> 32529 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin858506 -> 858509 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin858367 -> 858370 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin865367 -> 865366 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin857031 -> 857026 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin862431 -> 862435 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin348785 -> 348789 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-de.pdfbin433379 -> 433024 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin346040 -> 346044 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin348957 -> 348968 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin347383 -> 347388 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin346720 -> 346723 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin510443 -> 510448 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin851968 -> 851971 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin856011 -> 856014 bytes
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-contents.tex19
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-firstpage.tex36
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex82
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-logos.tex21
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-style.tex451
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex-titlepage.tex53
-rw-r--r--doc/context/sources/general/manuals/luametatex/luametatex.tex51
-rw-r--r--scripts/context/lua/mtxrun.lua28
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua28
-rw-r--r--scripts/context/stubs/unix/mtxrun28
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua28
-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/mkiv/buff-ini.mkiv9
-rw-r--r--tex/context/base/mkiv/catc-sym.mkiv8
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/data-use.lua27
-rw-r--r--tex/context/base/mkiv/font-cff.lua4
-rw-r--r--tex/context/base/mkiv/font-dsp.lua159
-rw-r--r--tex/context/base/mkiv/font-shp.lua2
-rw-r--r--tex/context/base/mkiv/luat-cod.lua4
-rw-r--r--tex/context/base/mkiv/luat-ini.lua2
-rw-r--r--tex/context/base/mkiv/math-ali.mkiv10
-rw-r--r--tex/context/base/mkiv/mult-aux.mkiv240
-rw-r--r--tex/context/base/mkiv/mult-chk.mkiv2
-rw-r--r--tex/context/base/mkiv/page-cst.lua26
-rw-r--r--tex/context/base/mkiv/page-cst.mkiv11
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26573 -> 26596 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin269122 -> 269171 bytes
-rw-r--r--tex/context/base/mkiv/strc-itm.mkvi10
-rw-r--r--tex/context/base/mkiv/syst-aux.mkiv62
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv5
-rw-r--r--tex/context/base/mkiv/tabl-ntb.mkiv11
-rw-r--r--tex/context/base/mkiv/trac-inf.lua3
-rw-r--r--tex/context/base/mkiv/trac-tex.mkiv27
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin865367 -> 865366 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin61161 -> 61165 bytes
-rw-r--r--tex/context/modules/common/s-abbreviations-logos.tex8
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua50
55 files changed, 1264 insertions, 249 deletions
diff --git a/doc/context/documents/general/manuals/luametatex.pdf b/doc/context/documents/general/manuals/luametatex.pdf
new file mode 100644
index 000000000..36a74997f
--- /dev/null
+++ b/doc/context/documents/general/manuals/luametatex.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index b887b4831..f673ee4aa 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ 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
index 34e60e948..1af23a26b 100644
--- a/doc/context/documents/general/qrcs/setup-de.pdf
+++ 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
index 70a537ece..3d5205666 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ 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
index 3f93a0acb..5b95012b1 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ 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
index fe1785cfa..f34275741 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index 63bac99e1..07f1c20b0 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
index 3c42dfc12..b875ceda0 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index 3c9cc5c91..90b48a548 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index 0d3d3e5f4..cffb11e0a 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index d71b622f8..6adbc87f9 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index d5d39473b..64f60b163 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index a2759e931..696e122fe 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 463d707ba..5edd20cc6 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ 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
index a00eb0ca1..c335a9998 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-contents.tex b/doc/context/sources/general/manuals/luametatex/luametatex-contents.tex
new file mode 100644
index 000000000..d55b7f15b
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-contents.tex
@@ -0,0 +1,19 @@
+\environment luametatex-style
+
+\startcomponent luametatex-contents
+
+\starttitle[title=Contents]
+
+\start
+
+ \definecolor[maincolor][black]
+
+ \placelist
+ [chapter,section,subsection]
+ [criterium=text]
+
+\stop
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-firstpage.tex b/doc/context/sources/general/manuals/luametatex/luametatex-firstpage.tex
new file mode 100644
index 000000000..83fb40df1
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-firstpage.tex
@@ -0,0 +1,36 @@
+\environment luametatex-style
+
+\startcomponent luametatex-firstpage
+
+\startstandardmakeup
+
+ \start
+ \raggedleft
+ \definedfont[Bold*default at 48pt]
+ \setupinterlinespace
+ \blue \documentvariable{manual} \endgraf Reference \endgraf Manual \endgraf
+ \stop
+
+ \vfill
+
+ \definedfont[Bold*default at 12pt]
+
+ \starttabulate[|l|l|]
+ \NC copyright \EQ Lua\TeX\ development team \NC \NR
+ \NC \EQ \CONTEXT\ development team \NC \NR
+ \NC more info \EQ www.luatex.org \NC \NR
+ \NC \EQ contextgarden.net \NC \NR
+ \NC version \EQ \currentdate \doifsomething{\documentvariable{snapshot}}{(snapshot \documentvariable{snapshot})} \NC \NR
+ \stoptabulate
+
+\stopstandardmakeup
+
+\setupbackgrounds
+ [leftpage]
+ [setups=pagenumber:left]
+
+\setupbackgrounds
+ [rightpage]
+ [setups=pagenumber:right]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex b/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex
new file mode 100644
index 000000000..5c68b3123
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex
@@ -0,0 +1,82 @@
+% language=uk
+
+\environment luametatex-style
+
+\startcomponent luametatex-introduction
+
+\startchapter[title=Introduction]
+
+Around 2005 we started the \LUATEX\ projects and it took about a decade to reach
+a state where we could consider the experiments to have reached a stable state.
+Already for a while one could use \LUATEX\ in production but some of the
+interfaces evolved. In 2018 the functionality was more or less frozen. Of course
+we might add some features in due time but nothing fundamental will change as we
+consider version 1.10 to be reasonable feature complete. Among the reasons is
+that this engine is now used outside \CONTEXT\ too which means that we cannot
+simply change much without affecting other macro packages.
+
+However, in reaching that state some decisions were delayed because they didn't
+go well with a current stable version. This is why at the 2018 \CONTEXT\ meeting
+those present agreed that we could move on with a follow up tagged \METATEX, a
+name we already had in mind for a while, but as \LUA\ is an important component,
+it got expanded to \LUAMETATEX. This follow up is a lightweight companion to
+\LUATEX\ that will be maintained alongside. More about the reasons for this
+follow up as well as the philosophy behind it can be found on the document(s)
+describing the development. During \LUATEX\ development I kept track of what
+happened in a series of documents, parts of which were published as articles in
+user group journals, but all are in the \CONTEXT\ distribution. I did the same
+with the development of \LUAMETATEX.
+
+The \LUAMETATEX\ engine is, as said, a lightweight version of \LUATEX, that for
+now targets \CONTEXT. We will use it for possibly drastic experiments but without
+affecting \LUATEX. As we can easily adapt \CONTEXT\ to support both, no other
+macro package will be harmed when (for instance) interfaces change as part of an
+experiment. Of course, when we consider something to be useful, it can be back
+ported to \LUATEX, but only when there are good reasons for doing so. When
+considering this follow up one consideration was that a lean and mean version
+with an extension mechanism is a bit closer to original \TEX. Of course, because
+we have new primitives, this is not entirely true.
+
+This manual currently has quite a bit of overlap with the \LUATEX\ manual but
+some chapters are removed, others added and the rest has been adapted. We also
+discusses the (main) differences. Some of the new primitives or functions that
+show up in \LUAMETATEX\ might show up in \LUATEX\ at some point, others might
+not. For now it is an experimental engine in which we can change things at will
+but with \CONTEXT\ in tandem so it will keep working.
+
+For \CONTEXT\ users the \LUAMETATEX\ engine will become the default. Because we
+can keep both \LUAMETATEX\ and \CONTEXT\ in sync. The \CONTEXT\ variant is tagged
+\LMTX. The pair can be used in production, just as with \LUATEX\ and \MKIV. In
+fact, most users will probably not really notice the difference.
+
+As this follow up is closely related to \CONTEXT\ development, and because we
+expect stock \LUATEX\ to be used outside the \CONTEXT\ proper, there will be no
+special mailing list nor coverage (or polution) on the \LUATEX\ related mailing
+lists. We have the \CONTEXT\ mailing lists for that. In due time the source code
+will be part of the regular \CONTEXT\ distribution.
+
+% \testpage[8]
+
+This manual refers to \LUATEX, when we talk of features common to both engine, as
+well as \LUAMETATEX, when it is more specific to the follow up.
+
+\blank[big]
+
+Hans Hagen
+
+% \blank[2*big]
+\page
+
+\starttabulate[|||]
+\NC Version \EQ \currentdate \NC \NR
+\NC \LUAMETATEX \EQ \cldcontext{LUATEXENGINE} %
+ \cldcontext{LUATEXVERSION} / %
+ \cldcontext{LUATEXFUNCTIONALITY}
+ \NC \NR
+\NC \CONTEXT \EQ MkIV \contextversion \NC \NR
+\NC \LUATEX\ Team \EQ Hans Hagen, Hartmut Henkel, Taco Hoekwater, Luigi Scarso \NC \NR
+\stoptabulate
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-logos.tex b/doc/context/sources/general/manuals/luametatex/luametatex-logos.tex
new file mode 100644
index 000000000..be75971d8
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-logos.tex
@@ -0,0 +1,21 @@
+\startenvironment luametatex-logos
+
+\usemodule[abr-02]
+
+\logo[DFONT] {dfont}
+\logo[CFF] {cff}
+\logo[CMAP] {CMap}
+\logo[PATGEN] {patgen}
+\logo[MP] {MetaPost}
+\logo[METAPOST] {MetaPost}
+\logo[MPLIB] {MPlib}
+\logo[COCO] {coco}
+\logo[SUNOS] {SunOS}
+\logo[BSD] {bsd}
+\logo[SYSV] {sysv}
+\logo[DPI] {dpi}
+\logo[DLL] {dll}
+\logo[OPENOFFICE]{OpenOffice}
+\logo[OCP] {OCP}
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-style.tex b/doc/context/sources/general/manuals/luametatex/luametatex-style.tex
new file mode 100644
index 000000000..ceb3f1a39
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-style.tex
@@ -0,0 +1,451 @@
+\startenvironment luametatex-style
+
+% \environment luatex-style
+
+% \logo[LUAMETATEX] {\Lua Meta\TeX}
+
+% todo: use \useMPlibrary[lua]
+
+\enabletrackers[fonts.usage]
+
+\usemodule[fonts-statistics]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ backspace=2cm,
+ topspace=10mm,
+ bottomspace=10mm,
+ header=10mm,
+ footer=10mm,
+ footerdistance=10mm,
+ headerdistance=10mm]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setuptolerance
+ [stretch,tolerant]
+
+\setuptype
+ [lines=hyphenated]
+
+\setuptyping
+ [lines=hyphenated]
+
+\setupitemize
+ [each]
+ [packed]
+
+\definesymbol[1][\Uchar"2023]
+\definesymbol[2][\endash]
+\definesymbol[3][\wait] % we want to catch it
+
+\setupitemize
+ [each]
+ [headcolor=maincolor,
+ symbolcolor=maincolor,
+ color=maincolor]
+
+\setupwhitespace
+ [medium]
+
+\setuptabulate
+ [blank={small,samepage},
+ headstyle=bold,
+ rulecolor=maincolor,
+ rulethickness=1pt,
+ foregroundcolor=white,
+ foregroundstyle=\ss\bfx\WORD,
+ backgroundcolor=maincolor]
+
+\setupcaptions
+ [headcolor=darkblue]
+
+\startluacode
+ local skipped = table.tohash { 'id', 'subtype', 'next', 'prev' }
+
+ function document.functions.showfields(s)
+ local t = string.split(s,',')
+ local f = node.fields(t[1],t[2])
+ if f then
+ local d = false
+ for i=1,#f do
+ local fi = f[i]
+ if skipped[fi] then
+ -- okay
+ elseif d then
+ context(', {\tttf %s}', fi)
+ else
+ context('{\tttf %s}', fi)
+ d = true
+ end
+ end
+ end
+ end
+
+ function document.functions.showid(s)
+ local t = string.split(s,',')
+ context('{tttf %s}',node.id(t[1]))
+ if t[2] then
+ context(', {tttf %s}',node.subtype(t[2]))
+ end
+ end
+
+ function document.functions.showsubtypes(s)
+ local s = node.subtypes(s)
+ local d = false
+ for k, v in table.sortedhash(s) do
+ if d then
+ context(', %s = {\\tttf %s}',k,v)
+ else
+ context('%s = {\\tttf %s}',k,v)
+ d = true
+ end
+ end
+ end
+\stopluacode
+
+\unexpanded\def\showfields #1{\ctxlua{document.functions.showfields("#1")}}
+\unexpanded\def\showid #1{\ctxlua{document.functions.showid("#1")}}
+\unexpanded\def\showsubtypes#1{\ctxlua{document.functions.showsubtypes("#1")}}
+
+\definecolor[blue] [b=.5]
+\definecolor[red] [r=.5]
+\definecolor[green] [g=.5]
+%definecolor[maincolor] [b=.5]
+%definecolor[keptcolor] [b=.5]
+%definecolor[othercolor][r=.5,g=.5]
+
+\definecolor[maincolor] [b=.5]
+\definecolor[keptcolor] [b=.5]
+\definecolor[othercolor][s=.5]
+
+\writestatus{luametatex manual}{}
+\writestatus{luametatex manual}{defining lucodaot} \usebodyfont [lucidaot]
+\writestatus{luametatex manual}{defining pagella} \usebodyfont [pagella]
+\writestatus{luametatex manual}{defining cambria} \usebodyfont [cambria]
+\writestatus{luametatex manual}{defining modern} \usebodyfont [modern]
+\writestatus{luametatex manual}{defining dejavu} \setupbodyfont[dejavu,10pt]
+\writestatus{luametatex manual}{}
+
+\setuphead [chapter] [align={flushleft,broad},style=\bfd]
+\setuphead [section] [align={flushleft,broad},style=\bfb]
+\setuphead [subsection] [align={flushleft,broad},style=\bfa]
+\setuphead [subsubsection][align={flushleft,broad},style=\bf]
+
+\setuphead [chapter] [color=maincolor]
+\setuphead [section] [color=maincolor]
+\setuphead [subsection] [color=maincolor]
+\setuphead [subsubsection][color=maincolor]
+
+\setupfloats
+ [ntop=4]
+
+\definehead
+ [remark]
+ [subsubsubject]
+
+\setupheadertexts
+ []
+
+% \setuplayout
+% [style=bold,
+% color=maincolor]
+
+\definemixedcolumns
+ [twocolumns]
+ [n=2,
+ balance=yes,
+ before=\blank,
+ after=\blank]
+
+\definemixedcolumns
+ [threecolumns]
+ [twocolumns]
+ [n=3]
+
+\definemixedcolumns
+ [fourcolumns]
+ [threecolumns]
+ [n=4]
+
+% if we do this we also need to do it in table cells
+%
+% \setuptyping
+% [color=maincolor]
+%
+% \setuptype
+% [color=maincolor]
+
+\definetyping
+ [functioncall]
+
+\startMPdefinitions
+
+ color luaplanetcolor ; luaplanetcolor := \MPcolor{maincolor} ;
+ color luaholecolor ; luaholecolor := white ;
+ numeric luaextraangle ; luaextraangle := 0 ;
+ numeric luaorbitfactor ; luaorbitfactor := .25 ;
+
+ vardef lualogo = image (
+
+ % Graphic design by A. Nakonechnyj. Copyright (c) 1998, All rights reserved.
+
+ save d, r, p ; numeric d, r, p ;
+
+ d := sqrt(2)/4 ; r := 1/4 ; p := r/8 ;
+
+ fill fullcircle scaled 1
+ withcolor luaplanetcolor ;
+ draw fullcircle rotated 40.5 scaled (1+r)
+ dashed evenly scaled p
+ withpen pencircle scaled (p/2)
+ withcolor (luaorbitfactor * luaholecolor) ;
+ fill fullcircle scaled r shifted (d+1/8,d+1/8)
+ rotated - luaextraangle
+ withcolor luaplanetcolor ;
+ fill fullcircle scaled r shifted (d-1/8,d-1/8)
+ withcolor luaholecolor ;
+ luaorbitfactor := .25 ;
+ ) enddef ;
+
+\stopMPdefinitions
+
+\startuseMPgraphic{luapage}
+ StartPage ;
+
+ fill Page withcolor \MPcolor{othercolor} ;
+
+ luaorbitfactor := 1 ;
+
+ picture p ; p := lualogo ysized (5*\measure{paperheight}/10) ;
+ draw p
+ shifted - center p
+ shifted (
+ \measure{spreadwidth} - .5*\measure{paperwidth} + \measure{spinewidth},
+ .375*\measure{paperheight}
+ )
+ ;
+
+ StopPage ;
+\stopuseMPgraphic
+
+% \starttexdefinition luaextraangle
+% % we can also just access the last page and so in mp directly
+% \ctxlua {
+% context(\lastpage == 0 and 0 or \realfolio*360/\lastpage)
+% }
+% \stoptexdefinition
+
+\startuseMPgraphic{luanumber}
+ % luaextraangle := \luaextraangle;
+ luaextraangle := if (LastPageNumber < 10) : 10 else : (RealPageNumber / LastPageNumber) * 360 fi;
+ luaorbitfactor := 0.25 ;
+ picture p ; p := lualogo ;
+ setbounds p to boundingbox fullcircle ;
+ draw p ysized 1cm ;
+\stopuseMPgraphic
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\setupbackgrounds
+ [leftpage]
+ [background=page]
+
+\setupbackgrounds
+ [rightpage]
+ [background=page]
+
+\definemeasure[banneroffset][\bottomspace-\footerheight-\footerdistance+2cm]
+
+\startsetups pagenumber:right
+ \setlayerframed
+ [page]
+ [preset=rightbottom,x=1.0cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,offset=overlay]
+ {\strut\useMPgraphic{luanumber}}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,x=2.5cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,width=1cm,offset=overlay,
+ foregroundstyle=bold,foregroundcolor=maincolor]
+ {\strut\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,x=3.5cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,offset=overlay,
+ foregroundstyle=bold,foregroundcolor=maincolor]
+ {\strut\getmarking[chapter]}
+\stopsetups
+
+\startsetups pagenumber:left
+ \setlayerframed
+ [page]
+ [preset=leftbottom,x=3.5cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,offset=overlay,
+ foregroundstyle=bold,foregroundcolor=maincolor]
+ {\strut\getmarking[chapter]}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,x=2.5cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,width=1cm,offset=overlay,
+ foregroundstyle=bold,foregroundcolor=maincolor]
+ {\strut\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,x=1.0cm,y=\measure{banneroffset}]
+ [frame=off,height=1cm,offset=overlay]
+ {\strut\useMPgraphic{luanumber}}
+\stopsetups
+
+\unexpanded\def\nonterminal#1>{\mathematics{\langle\hbox{\rm #1}\rangle}}
+
+% taco's brainwave -) .. todo: create a typing variant so that we can avoid the !crlf
+
+\newcatcodetable\syntaxcodetable
+
+\unexpanded\def\makesyntaxcodetable
+ {\begingroup
+ \catcode`\<=13 \catcode`\|=12
+ \catcode`\!= 0 \catcode`\\=12
+ \savecatcodetable\syntaxcodetable
+ \endgroup}
+
+\makesyntaxcodetable
+
+\unexpanded\def\startsyntax {\begingroup\catcodetable\syntaxcodetable \dostartsyntax}
+\unexpanded\def\syntax {\begingroup\catcodetable\syntaxcodetable \dosyntax}
+ \let\stopsyntax \relax
+
+\unexpanded\def\syntaxenvbody#1%
+ {\par
+ \tt
+ \startnarrower
+ % \maincolor
+ #1
+ \stopnarrower
+ \par}
+
+\unexpanded\def\syntaxbody#1%
+ {\begingroup
+ % \maincolor
+ \tt #1%
+ \endgroup}
+
+\bgroup \catcodetable\syntaxcodetable
+
+!gdef!dostartsyntax#1\stopsyntax{!let<!nonterminal!syntaxenvbody{#1}!endgroup}
+!gdef!dosyntax #1{!let<!nonterminal!syntaxbody{#1}!endgroup}
+
+!egroup
+
+\definetyping
+ [texsyntax]
+% [color=maincolor]
+
+% end of wave
+
+\setupinteraction
+ [state=start,
+ focus=standard,
+ style=,
+ color=,
+ contrastcolor=]
+
+\placebookmarks
+ [chapter,section,subsection]
+
+\setuplist
+ [chapter,section,subsection,subsubsection]
+ [interaction=all,
+ width=4em]
+
+\setuplist
+ [chapter]
+ [style=bold,
+ before={\testpage[4]\blank},
+ color=keptcolor]
+
+\setuplist
+ [section]
+ [before={\testpage[3]}]
+
+\setuplist
+ [subsection,subsubsection]
+ [margin=4em,
+ width=5em]
+
+\definestartstop
+ [notabene]
+ [style=slanted]
+
+\definestartstop
+ [preamble]
+ [style=normal,
+ before=\blank,
+ after=\blank]
+
+% Hans doesn't like the bookmarks opening by default so we comment this:
+%
+% \setupinteractionscreen
+% [option=bookmark]
+
+\startbuffer[stylecalculations]
+
+ \normalexpanded{\definemeasure[spinewidth] [0pt]}
+ \normalexpanded{\definemeasure[paperwidth] [\the\paperwidth ]}
+ \normalexpanded{\definemeasure[paperheight][\the\paperheight]}
+ \normalexpanded{\definemeasure[spreadwidth][\measure{paperwidth}]}
+
+\stopbuffer
+
+\getbuffer[stylecalculations]
+
+\dontcomplain
+
+\environment luametatex-logos
+
+\defineregister[topicindex]
+\defineregister[primitiveindex]
+\defineregister[callbackindex]
+\defineregister[nodeindex]
+\defineregister[libraryindex]
+
+\unexpanded\def\lpr#1{\doifmode{*bodypart}{\primitiveindex[#1]{\bf\tex {#1}}}\tex {#1}}
+\unexpanded\def\prm#1{\doifmode{*bodypart}{\primitiveindex[#1]{\tex {#1}}}\tex {#1}}
+\unexpanded\def\orm#1{\doifmode{*bodypart}{\primitiveindex[#1]{\tex {#1}}}\tex {#1}}
+\unexpanded\def\cbk#1{\doifmode{*bodypart}{\callbackindex [#1]{\type {#1}}}\type{#1}}
+\unexpanded\def\nod#1{\doifmode{*bodypart}{\nodeindex [#1]{\bf\type{#1}}}\type{#1}}
+\unexpanded\def\whs#1{\doifmode{*bodypart}{\nodeindex [#1]{\type {#1}}}\type{#1}}
+\unexpanded\def\noa#1{\doifmode{*bodypart}{\nodeindex [#1]{\type {#1}}}\type{#1}}
+
+\hyphenation{sub-nodes}
+
+\def\currentlibraryindex{\namedstructureuservariable{section}{library}}
+
+\setupregister
+ [libraryindex]
+ [indicator=no,before=]
+
+\setupregister
+ [libraryindex]
+ [1]
+ [textstyle=\ttbf]
+
+\setupregister
+ [libraryindex]
+ [2]
+ [textstyle=\tttf]
+
+\unexpanded\def\lib #1{\doifmode{*bodypart}{\expanded{\libraryindex{\currentlibraryindex+#1}}\type{\currentlibraryindex.#1}}}
+\unexpanded\def\libindex#1{\doifmode{*bodypart}{\expanded{\libraryindex{\currentlibraryindex+#1}}}}
+\unexpanded\def\libidx#1#2{\doifmode{*bodypart}{\expanded{\libraryindex{#1+#2}}\type{#1.#2}}}
+\unexpanded\def\lix #1#2{\doifmode{*bodypart}{\expanded{\libraryindex{#1+#2}}}}
+
+% \setstructurepageregister[][keys:1=,entries:1=]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-titlepage.tex b/doc/context/sources/general/manuals/luametatex/luametatex-titlepage.tex
new file mode 100644
index 000000000..6f7a6f9a5
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex-titlepage.tex
@@ -0,0 +1,53 @@
+\environment luametatex-style
+
+\startcomponent luametatex-titlepage
+
+\startstandardmakeup
+
+ \switchtobodyfont
+ [mainfacemedium]
+
+ \definedfont[Bold*default at \the\dimexpr.06\paperheight\relax] \setupinterlinespace
+
+ \setlayer
+ [page]
+ {\useMPgraphic{luapage}}
+
+ \setlayerframed
+ [page]
+ [preset=righttop,
+ location=middletop,
+ hoffset=.500\measured{paperwidth},
+ voffset=.175\measured{paperheight}]
+ [align=middle,
+ foregroundcolor=white,
+ frame=off]
+ {\documentvariable{manual}\crlf Reference\crlf Manual}
+
+ \definedfont[Bold*default at 14pt] \setupinterlinespace
+
+ \setlayerframed
+ [page]
+ [preset=rightbottom,
+ offset=.025\measured{paperheight}]
+ [align=flushright,
+ foregroundcolor=white,
+ frame=off]
+ {\doifsomething{\documentvariable{status}}{\documentvariable{status}\par}
+ \currentdate[month,space,year]\par
+ Version \documentvariable{version}}
+
+ \setlayerframed
+ [page]
+ [preset=middle,
+ hoffset=-.5\dimexpr\measured{paperwidth}-\measured{spinewidth}\relax]
+ [width=.7\measured{paperwidth},
+ align=normal,
+ foregroundstyle=\bf,
+ foregroundcolor=white,
+ frame=off]
+ {\getbuffer[backpage]}
+
+\stopstandardmakeup
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luametatex/luametatex.tex b/doc/context/sources/general/manuals/luametatex/luametatex.tex
new file mode 100644
index 000000000..3021984f9
--- /dev/null
+++ b/doc/context/sources/general/manuals/luametatex/luametatex.tex
@@ -0,0 +1,51 @@
+% language=uk
+
+\environment luametatex-style
+\environment luametatex-private
+
+\startdocument
+ [manual=LuaMeta\TeX,
+ status=experimental,
+ version=2.00]
+
+\component luametatex-titlepage
+\component luametatex-firstpage
+
+\startfrontmatter
+ % \component luametatex-contents
+ \component luametatex-introduction
+\stopfrontmatter
+
+\startbodymatter
+
+ \startparagraph \em
+ This is a placholder for the \LUAMETATEX\ manual. On my system I already
+ have most of it wrapped up, but it will probably take till late 2019 or
+ sometime 2020 before I will decide to add the whole manual to the
+ \CONTEXT\ distribution.
+ \stopparagraph
+
+ % \component luametatex-preamble
+ % \component luametatex-differences
+ % \component luametatex-modifications
+ % \component luametatex-lua
+ % \component luametatex-enhancements
+ % \component luametatex-fonts
+ % \component luametatex-math
+ % \component luametatex-nodes
+ % \component luametatex-callbacks
+ % \component luametatex-tex
+ % \component luametatex-metapost
+ % \component luametatex-pdf
+ % \component luametatex-libraries
+ % \component luametatex-additions
+ % \component luametatex-primitives
+
+\stopbodymatter
+
+\startbackmatter
+% \component luametatex-registers
+% \component luametatex-statistics
+\stopbackmatter
+
+\stopdocument
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 75e94efa0..b1b661066 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -13679,7 +13679,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 9682, stripped down to: 6526
+-- original size: 9777, stripped down to: 6605
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -13824,7 +13824,8 @@ function statistics.show()
end)
if LUATEXENGINE=="luametatex" then
register("used engine",function()
- return format("%s version %s",LUATEXENGINE,LUATEXVERSION)
+ return format("%s version %s, functionality level %s, format id %s",
+ LUATEXENGINE,LUATEXVERSION,LUATEXFUNCTIONALITY,LUATEXFORMATID)
end)
else
register("used engine",function()
@@ -23900,7 +23901,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4434, stripped down to: 3180
+-- original size: 5203, stripped down to: 3765
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -23955,6 +23956,8 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
sourcefile=sourcefile,
luaversion=LUAVERSION,
+ formatid=LUATEXFORMATID,
+ functionality=LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
@@ -23984,8 +23987,19 @@ function statistics.checkfmtstatus(texname)
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion=luv.luaversion or 0
- if luvluaversion~=LUAVERSION then
- return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,LUAVERSION)
+ local engluaversion=LUAVERSION or 0
+ if luvluaversion~=engluaversion then
+ return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
+ end
+ local luvfunctionality=luv.functionality or 0
+ local engfunctionality=status.development_id or 0
+ if luvfunctionality~=engfunctionality then
+ return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
+ end
+ local luvformatid=luv.formatid or 0
+ local engformatid=status.format_id or 0
+ if luvformatid~=engformatid then
+ return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
@@ -25639,8 +25653,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.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-sha.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 util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.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 util-zip.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 : 1022171
--- stripped bytes : 404918
+-- original bytes : 1023035
+-- stripped bytes : 405118
-- end library merge
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 75e94efa0..b1b661066 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -13679,7 +13679,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 9682, stripped down to: 6526
+-- original size: 9777, stripped down to: 6605
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -13824,7 +13824,8 @@ function statistics.show()
end)
if LUATEXENGINE=="luametatex" then
register("used engine",function()
- return format("%s version %s",LUATEXENGINE,LUATEXVERSION)
+ return format("%s version %s, functionality level %s, format id %s",
+ LUATEXENGINE,LUATEXVERSION,LUATEXFUNCTIONALITY,LUATEXFORMATID)
end)
else
register("used engine",function()
@@ -23900,7 +23901,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4434, stripped down to: 3180
+-- original size: 5203, stripped down to: 3765
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -23955,6 +23956,8 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
sourcefile=sourcefile,
luaversion=LUAVERSION,
+ formatid=LUATEXFORMATID,
+ functionality=LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
@@ -23984,8 +23987,19 @@ function statistics.checkfmtstatus(texname)
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion=luv.luaversion or 0
- if luvluaversion~=LUAVERSION then
- return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,LUAVERSION)
+ local engluaversion=LUAVERSION or 0
+ if luvluaversion~=engluaversion then
+ return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
+ end
+ local luvfunctionality=luv.functionality or 0
+ local engfunctionality=status.development_id or 0
+ if luvfunctionality~=engfunctionality then
+ return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
+ end
+ local luvformatid=luv.formatid or 0
+ local engformatid=status.format_id or 0
+ if luvformatid~=engformatid then
+ return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
@@ -25639,8 +25653,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.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-sha.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 util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.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 util-zip.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 : 1022171
--- stripped bytes : 404918
+-- original bytes : 1023035
+-- stripped bytes : 405118
-- end library merge
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 75e94efa0..b1b661066 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -13679,7 +13679,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 9682, stripped down to: 6526
+-- original size: 9777, stripped down to: 6605
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -13824,7 +13824,8 @@ function statistics.show()
end)
if LUATEXENGINE=="luametatex" then
register("used engine",function()
- return format("%s version %s",LUATEXENGINE,LUATEXVERSION)
+ return format("%s version %s, functionality level %s, format id %s",
+ LUATEXENGINE,LUATEXVERSION,LUATEXFUNCTIONALITY,LUATEXFORMATID)
end)
else
register("used engine",function()
@@ -23900,7 +23901,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4434, stripped down to: 3180
+-- original size: 5203, stripped down to: 3765
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -23955,6 +23956,8 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
sourcefile=sourcefile,
luaversion=LUAVERSION,
+ formatid=LUATEXFORMATID,
+ functionality=LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
@@ -23984,8 +23987,19 @@ function statistics.checkfmtstatus(texname)
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion=luv.luaversion or 0
- if luvluaversion~=LUAVERSION then
- return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,LUAVERSION)
+ local engluaversion=LUAVERSION or 0
+ if luvluaversion~=engluaversion then
+ return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
+ end
+ local luvfunctionality=luv.functionality or 0
+ local engfunctionality=status.development_id or 0
+ if luvfunctionality~=engfunctionality then
+ return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
+ end
+ local luvformatid=luv.formatid or 0
+ local engformatid=status.format_id or 0
+ if luvformatid~=engformatid then
+ return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
@@ -25639,8 +25653,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.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-sha.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 util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.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 util-zip.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 : 1022171
--- stripped bytes : 404918
+-- original bytes : 1023035
+-- stripped bytes : 405118
-- end library merge
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 75e94efa0..b1b661066 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -13679,7 +13679,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 9682, stripped down to: 6526
+-- original size: 9777, stripped down to: 6605
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -13824,7 +13824,8 @@ function statistics.show()
end)
if LUATEXENGINE=="luametatex" then
register("used engine",function()
- return format("%s version %s",LUATEXENGINE,LUATEXVERSION)
+ return format("%s version %s, functionality level %s, format id %s",
+ LUATEXENGINE,LUATEXVERSION,LUATEXFUNCTIONALITY,LUATEXFORMATID)
end)
else
register("used engine",function()
@@ -23900,7 +23901,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4434, stripped down to: 3180
+-- original size: 5203, stripped down to: 3765
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -23955,6 +23956,8 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
sourcehash=md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
sourcefile=sourcefile,
luaversion=LUAVERSION,
+ formatid=LUATEXFORMATID,
+ functionality=LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
@@ -23984,8 +23987,19 @@ function statistics.checkfmtstatus(texname)
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion=luv.luaversion or 0
- if luvluaversion~=LUAVERSION then
- return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,LUAVERSION)
+ local engluaversion=LUAVERSION or 0
+ if luvluaversion~=engluaversion then
+ return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
+ end
+ local luvfunctionality=luv.functionality or 0
+ local engfunctionality=status.development_id or 0
+ if luvfunctionality~=engfunctionality then
+ return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
+ end
+ local luvformatid=luv.formatid or 0
+ local engformatid=status.format_id or 0
+ if luvformatid~=engformatid then
+ return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
@@ -25639,8 +25653,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.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-sha.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 util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.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 util-zip.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 : 1022171
--- stripped bytes : 404918
+-- original bytes : 1023035
+-- stripped bytes : 405118
-- end library merge
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 02e45fa51..9a66b4b07 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{2019.05.12 19:05}
+\newcontextversion{2019.05.18 10:42}
%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 3c43d0529..e54769554 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{2019.05.12 19:05}
+\edef\contextversion{2019.05.18 10:42}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/buff-ini.mkiv b/tex/context/base/mkiv/buff-ini.mkiv
index 4e12271dd..8e71c9865 100644
--- a/tex/context/base/mkiv/buff-ini.mkiv
+++ b/tex/context/base/mkiv/buff-ini.mkiv
@@ -185,6 +185,15 @@
{\processcommalist[#1]\buff_get_stored_indeed}%
\namedbufferparameter\empty\c!after\relax}
+% \installcommalistprocessorcommand \buff_get_stored_list \empty \buff_get_stored_indeed
+%
+% \unexpanded\def\buff_get[#1]% [name]
+% {\namedbufferparameter\empty\c!before\relax
+% \doifelsenothing{#1}
+% {\buff_get_stored_indeed\empty}
+% {\buff_get_stored_list[#1]}%
+% \namedbufferparameter\empty\c!after\relax}
+
\unexpanded\def\buff_get_stored#1#2%
{\namedbufferparameter{#1}\c!before\relax
\buff_get_stored_indeed{#2}%
diff --git a/tex/context/base/mkiv/catc-sym.mkiv b/tex/context/base/mkiv/catc-sym.mkiv
index 64604ba35..5cda010fe 100644
--- a/tex/context/base/mkiv/catc-sym.mkiv
+++ b/tex/context/base/mkiv/catc-sym.mkiv
@@ -60,10 +60,10 @@
\catcode`_=\lettercatcode
%xdef\_n_u_l_{\expandafter\string\Uchar1} % nul(l)
-%xdef\_s_o_h_{\expandafter\string\Uchar1} % start of header
-\xdef\_s_t_x_{\expandafter\string\Uchar2} % start of text
-\xdef\_e_t_x_{\expandafter\string\Uchar3} % end of text
-\xdef\_e_o_t_{\expandafter\string\Uchar4} % end of transmission
+%xdef\_s_o_h_{\expandafter\string\Uchar1} % start of header ^^^^0001
+\xdef\_s_t_x_{\expandafter\string\Uchar2} % start of text ^^^^0002
+\xdef\_e_t_x_{\expandafter\string\Uchar3} % end of text ^^^^0003
+\xdef\_e_o_t_{\expandafter\string\Uchar4} % end of transmission ^^^^0004
%xdef\_e_n_q_{\expandafter\string\Uchar5} % enquiry
%xdef\_a_c_k_{\expandafter\string\Uchar6} % aknowledgement
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 91e76c307..fa1a405b7 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{2019.05.12 19:05}
+\newcontextversion{2019.05.18 10:42}
%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/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 42af8904e..f05092fe9 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -42,7 +42,7 @@
%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.05.12 19:05}
+\edef\contextversion{2019.05.18 10:42}
\edef\contextkind {beta}
%D Kind of special:
diff --git a/tex/context/base/mkiv/data-use.lua b/tex/context/base/mkiv/data-use.lua
index 5985a2eac..ccd44007c 100644
--- a/tex/context/base/mkiv/data-use.lua
+++ b/tex/context/base/mkiv/data-use.lua
@@ -61,11 +61,13 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner) -
if formatbanner and enginebanner and sourcefile then
local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv
local luvdata = {
- enginebanner = enginebanner,
- formatbanner = formatbanner,
- sourcehash = md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
- sourcefile = sourcefile,
- luaversion = LUAVERSION,
+ enginebanner = enginebanner,
+ formatbanner = formatbanner,
+ sourcehash = md5.hex(io.loaddata(resolvers.findfile(sourcefile)) or "unknown"),
+ sourcefile = sourcefile,
+ luaversion = LUAVERSION,
+ formatid = LUATEXFORMATID,
+ functionality = LUATEXFUNCTIONALITY,
}
io.savedata(luvname,table.serialize(luvdata,true))
lua.registerfinalizer(function()
@@ -100,8 +102,19 @@ function statistics.checkfmtstatus(texname)
return format("source mismatch (luv: %s <> bin: %s)",luvhash,sourcehash)
end
local luvluaversion = luv.luaversion or 0
- if luvluaversion ~= LUAVERSION then
- return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,LUAVERSION)
+ local engluaversion = LUAVERSION or 0
+ if luvluaversion ~= engluaversion then
+ return format("lua mismatch (luv: %s <> bin: %s)",luvluaversion,engluaversion)
+ end
+ local luvfunctionality = luv.functionality or 0
+ local engfunctionality = status.development_id or 0
+ if luvfunctionality ~= engfunctionality then
+ return format("functionality mismatch (luv: %s <> bin: %s)",luvfunctionality,engfunctionality)
+ end
+ local luvformatid = luv.formatid or 0
+ local engformatid = status.format_id or 0
+ if luvformatid ~= engformatid then
+ return format("formatid mismatch (luv: %s <> bin: %s)",luvformatid,engformatid)
end
else
return "invalid status file"
diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua
index 46deedb5f..86ae448cc 100644
--- a/tex/context/base/mkiv/font-cff.lua
+++ b/tex/context/base/mkiv/font-cff.lua
@@ -2428,8 +2428,8 @@ function readers.cff(f,fontdata,specification)
if private then
local data = private.data
if type(data) == "table" then
- cffinfo.defaultwidth = data.defaultwidth or cffinfo.defaultwidth
- cffinfo.nominalwidth = data.nominalwidth or cffinfo.nominalwidth
+ cffinfo.defaultwidth = data.defaultwidthx or cffinfo.defaultwidth
+ cffinfo.nominalwidth = data.nominalwidthx or cffinfo.nominalwidth
cffinfo.bluevalues = data.bluevalues
cffinfo.otherblues = data.otherblues
cffinfo.familyblues = data.familyblues
diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua
index e6679fda2..79749741c 100644
--- a/tex/context/base/mkiv/font-dsp.lua
+++ b/tex/context/base/mkiv/font-dsp.lua
@@ -1478,6 +1478,118 @@ end
-- [false] = { [true] = { false, true }, [false] = { false } },
-- }
+-- function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+-- 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,mainoffset,getdelta)
+-- coverage = readcoverage(f,tableoffset + coverage)
+-- local shared = { } -- partial sparse, when set also needs to be handled in the packer
+-- for index, newindex in next, coverage do
+-- local set = sets[newindex+1]
+-- local hash = { }
+-- for i=1,#set do
+-- local value = set[i]
+-- if value then
+-- local other = value[1]
+-- if shared then
+-- local s = shared[value]
+-- if s == nil then
+-- local first = value[2]
+-- local second = value[3]
+-- if first or second then
+-- s = { first, second or nil } -- needs checking
+-- else
+-- s = false
+-- end
+-- shared[value] = s
+-- end
+-- hash[other] = s or nil
+-- else
+-- local first = value[2]
+-- local second = value[3]
+-- if first or second then
+-- hash[other] = { first, second or nil } -- needs checking
+-- else
+-- hash[other] = nil -- what if set, maybe warning
+-- end
+-- end
+-- end
+-- end
+-- coverage[index] = hash
+-- end
+-- return {
+-- shared = shared and true or nil,
+-- format = "pair",
+-- coverage = coverage,
+-- }
+-- elseif subtype == 2 then
+-- local coverage = readushort(f)
+-- local format1 = readushort(f)
+-- local format2 = readushort(f)
+-- local classdef1 = readushort(f)
+-- local classdef2 = readushort(f)
+-- local nofclasses1 = readushort(f) -- incl class 0
+-- local nofclasses2 = readushort(f) -- incl class 0
+-- local classlist = readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,tableoffset,getdelta)
+-- coverage = readcoverage(f,tableoffset+coverage)
+-- classdef1 = readclassdef(f,tableoffset+classdef1,coverage)
+-- classdef2 = readclassdef(f,tableoffset+classdef2,nofglyphs)
+-- local usedcoverage = { }
+-- local shared = { } -- partial sparse, when set also needs to be handled in the packer
+-- for g1, c1 in next, classdef1 do
+-- if coverage[g1] then
+-- local l1 = classlist[c1]
+-- if l1 then
+-- local hash = { }
+-- for paired, class in next, classdef2 do
+-- local offsets = l1[class]
+-- if offsets then
+-- local first = offsets[1]
+-- local second = offsets[2]
+-- if first or second then
+-- if shared then
+-- local s1 = shared[first]
+-- if s1 == nil then
+-- s1 = { }
+-- shared[first] = s1
+-- end
+-- local s2 = s1[second]
+-- if s2 == nil then
+-- s2 = { first, second or nil }
+-- s1[second] = s2
+-- end
+-- hash[paired] = s2
+-- else
+-- hash[paired] = { first, second or nil }
+-- end
+-- else
+-- -- upto the next lookup for this combination
+-- end
+-- end
+-- end
+-- usedcoverage[g1] = hash
+-- end
+-- end
+-- end
+-- return {
+-- shared = shared and true or nil,
+-- format = "pair",
+-- coverage = usedcoverage,
+-- }
+-- elseif subtype == 3 then
+-- report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+-- else
+-- report("unsupported subtype %a in %a positioning",subtype,"pair")
+-- end
+-- end
+
function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
@@ -1490,25 +1602,32 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local sets = readarray(f)
sets = readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
coverage = readcoverage(f,tableoffset + coverage)
+ local shared = { } -- partial sparse, when set also needs to be handled in the packer
for index, newindex in next, coverage do
local set = sets[newindex+1]
local hash = { }
for i=1,#set do
local value = set[i]
if value then
- local other = value[1]
- local first = value[2]
- local second = value[3]
- if first or second then
- hash[other] = { first, second or nil } -- needs checking
- else
- hash[other] = nil -- what if set, maybe warning
+ local other = value[1]
+ local share = shared[value]
+ if share == nil then
+ local first = value[2]
+ local second = value[3]
+ if first or second then
+ share = { first, second or nil } -- needs checking
+ else
+ share = false
+ end
+ shared[value] = share
end
+ hash[other] = share or nil -- really overload ?
end
end
coverage[index] = hash
end
return {
+ shared = shared and true or nil,
format = "pair",
coverage = coverage,
}
@@ -1537,23 +1656,17 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local first = offsets[1]
local second = offsets[2]
if first or second then
- if shared then
- local s1 = shared[first]
- if s1 == nil then
- s1 = { }
- shared[first] = s1
- end
- local s2 = s1[second]
- if s2 == nil then
- s2 = { first, second or nil }
- s1[second] = s2
- end
- hash[paired] = s2
- else
- hash[paired] = { first, second or nil }
+ local s1 = shared[first]
+ if s1 == nil then
+ s1 = { }
+ shared[first] = s1
end
- else
- -- upto the next lookup for this combination
+ local s2 = s1[second]
+ if s2 == nil then
+ s2 = { first, second or nil }
+ s1[second] = s2
+ end
+ hash[paired] = s2
end
end
end
diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua
index e14146c36..a6788bc62 100644
--- a/tex/context/base/mkiv/font-shp.lua
+++ b/tex/context/base/mkiv/font-shp.lua
@@ -17,7 +17,7 @@ local pfb = fonts.handlers.pfb
local hashes = fonts.hashes
local identifiers = hashes.identifiers
-local version = 0.007
+local version = 0.008
local shapescache = containers.define("fonts", "shapes", version, true)
local streamscache = containers.define("fonts", "streams", version, true)
diff --git a/tex/context/base/mkiv/luat-cod.lua b/tex/context/base/mkiv/luat-cod.lua
index b863bf9a4..6f79a54e1 100644
--- a/tex/context/base/mkiv/luat-cod.lua
+++ b/tex/context/base/mkiv/luat-cod.lua
@@ -152,6 +152,10 @@ if LUATEXFUNCTIONALITY == nil then
LUATEXFUNCTIONALITY = status.development_id or 6346
end
+if LUATEXFORMATID == nil then
+ LUATEXFORMATID = status.format_id or 0
+end
+
if JITSUPPORTED == nil then
JITSUPPORTED = LUATEXENGINE == "luajittex" or jit
end
diff --git a/tex/context/base/mkiv/luat-ini.lua b/tex/context/base/mkiv/luat-ini.lua
index 3d6df530e..332980013 100644
--- a/tex/context/base/mkiv/luat-ini.lua
+++ b/tex/context/base/mkiv/luat-ini.lua
@@ -33,6 +33,8 @@ LUATEXENGINE = status.luatex_engine and string.lower(status.luatex_engine
LUATEXFUNCTIONALITY = status.development_id or 6346
+LUATEXFORMATID = status.format_id or 0
+
JITSUPPORTED = LUATEXENGINE == "luajittex" or jit
INITEXMODE = status.ini_version
diff --git a/tex/context/base/mkiv/math-ali.mkiv b/tex/context/base/mkiv/math-ali.mkiv
index 4ca713bbc..123fcda90 100644
--- a/tex/context/base/mkiv/math-ali.mkiv
+++ b/tex/context/base/mkiv/math-ali.mkiv
@@ -713,6 +713,8 @@
\let\math_cases_NR\math_align_NR_generic
+\installmacrostack\math_cases_NC
+
\unexpanded\def\math_cases_start_indeed[#1]%
{\iffirstargument
\setupcurrentmathcases[#1]%
@@ -725,7 +727,7 @@
\fi
\mathcasesparameter\c!left
\vcenter\bgroup
- \pushmacro\math_cases_NC
+ \push_macro_math_cases_NC
\let\endmath\relax
\let\NC\math_cases_NC_zero
\let\MC\math_cases_MC_zero
@@ -744,7 +746,7 @@
\hfil
\aligntab
\hskip\mathcasesparameter\c!distance\relax
- \popmacro\math_cases_NC
+ \pop_macro_math_cases_NC
\math_cases_strut % looks better
\alignmark\alignmark
\hfil
@@ -972,9 +974,11 @@
\newcount\c_math_eqalign_column_saved
\newcount\c_math_eqalign_first_saved
+% \installglobalmacrostack\c_math_matrix_first
+
\unexpanded\def\math_matrix_start#1%
{\begingroup
- \globalpushmacro\c_math_matrix_first
+ \globalpushmacro\c_math_matrix_first % hm, does that work?
\c_math_eqalign_column_saved\c_math_eqalign_column
\c_math_eqalign_first_saved \c_math_eqalign_first
\edef\currentmathmatrix{#1}%
diff --git a/tex/context/base/mkiv/mult-aux.mkiv b/tex/context/base/mkiv/mult-aux.mkiv
index a0839d9f1..6a2fd9fef 100644
--- a/tex/context/base/mkiv/mult-aux.mkiv
+++ b/tex/context/base/mkiv/mult-aux.mkiv
@@ -101,7 +101,7 @@
\fi#2}
\def\mult_interfaces_get_parameters_indeed#1]% namespace already set
- {\mult_interfaces_get_parameters_item#1,],\_e_o_t_}
+ {\mult_interfaces_get_parameters_item#1,],^^^^0004}
\def\mult_interfaces_get_parameters_item#1,#2% #2 takes space before ,
{\if,#1,% dirty trick for testing #1=empty
@@ -109,7 +109,7 @@
\else\if]#1%
\doubleexpandafter\gobbleoneargument
\else
- \mult_interfaces_get_parameters_assign#1==\empty\_e_o_t_
+ \mult_interfaces_get_parameters_assign#1==\empty^^^^0004%
% \doubleexpandafter\mult_interfaces_get_parameters_item % saves skipping when at end
\fi\fi#2}
@@ -120,7 +120,7 @@
\def\mult_interfaces_get_parameters_error_indeed#1#2%
{\showassignerror{#2}{\the\inputlineno\space(#1)}}
-\def\mult_interfaces_get_parameters_assign#1=#2=#3#4\_e_o_t_
+\def\mult_interfaces_get_parameters_assign#1=#2=#3#4^^^^0004%
{\ifx\empty#1\empty
\expandafter\mult_interfaces_get_parameters_error
\else\ifx#3\empty
@@ -143,7 +143,7 @@
\def\mult_interfaces_get_parameters_error_two#1\csname#2#3\endcsname#4%
{\mult_interfaces_get_parameters_error_indeed{#2}{#3}}
- \def\mult_interfaces_get_parameters_assign#1=#2=#3#4\_e_o_t_
+ \def\mult_interfaces_get_parameters_assign#1=#2=#3#4^^^^0004%
{\ifx\empty#1\empty
\mult_interfaces_get_parameters_error_one
\else\ifx#3\empty
@@ -161,7 +161,7 @@
% \def\mult_interfaces_get_parameters_error_two#1\m_mult_interfaces_namespace#2\fi\fi%
% {\mult_interfaces_get_parameters_error_indeed\m_mult_interfaces_namespace{#2}\m_mult_interfaces_namespace\s!dummy\fi\fi}
%
- % \def\mult_interfaces_get_parameters_assign#1=#2=#3#4\_e_o_t_
+ % \def\mult_interfaces_get_parameters_assign#1=#2=#3#4^^^^0004%
% {\expandafter\def\csname
% \ifx\empty#1\empty
% \mult_interfaces_get_parameters_error_one
@@ -177,14 +177,14 @@
\newif\ifassignment
-\def\mult_check_for_assignment_indeed#1=#2#3\_e_o_t_
- {\if#2\_e_t_x_\assignmentfalse\else\assignmenttrue\fi}
+\def\mult_check_for_assignment_indeed#1=#2#3^^^^0004%
+ {\if#2^^^^0003\assignmentfalse\else\assignmenttrue\fi}
-\def\mult_check_for_assignment_indeed_begin_#1=#2#3\_e_o_t_
- {\if#2\_e_t_x_}
+\def\mult_check_for_assignment_indeed_begin_#1=#2#3^^^^0004%
+ {\if#2^^^^0003}
\def\mult_check_for_assignment#1%
- {\expandafter\mult_check_for_assignment_indeed\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_}
+ {\expandafter\mult_check_for_assignment_indeed\detokenize{#1}=^^^^0003^^^^0003^^^^0004}
% End of experimental code.
@@ -373,7 +373,7 @@
% \mult_interfaces_get_parameters{#1#4:}[##3]%
% \else\ifsecondargument
% \the#6% predefine
-% \expandafter\mult_check_for_assignment_indeed\detokenize{##2}=\_e_t_x_\_e_t_x_\_e_o_t_
+% \expandafter\mult_check_for_assignment_indeed\detokenize{##2}=^^^^0003^^^^0003^^^^0004%
% \ifassignment
% \let#8\empty
% \expandafter\edef\csname#1#4:\s!chain\endcsname{##1}%
@@ -411,7 +411,7 @@
\mult_interfaces_get_parameters{#1#4:}[##3]%
\else\ifsecondargument
\the#6% predefine
- \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##2}=\_e_t_x_\_e_t_x_\_e_o_t_
+ \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##2}=^^^^0003^^^^0003^^^^0004%
\edef#8{##2}%
\mult_check_for_parent{#1}{#3}#4#8%
\expandafter\edef\csname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}%
@@ -508,7 +508,7 @@
% \let#3#7%
% \else\iffirstargument
% % \mult_check_for_assignment{##1}%
-% \expandafter\mult_check_for_assignment_indeed\detokenize{##1}=\_e_t_x_\_e_t_x_\_e_o_t_
+% \expandafter\mult_check_for_assignment_indeed\detokenize{##1}=^^^^0003^^^^0003^^^^0004%
% \ifassignment
% % \setuplayout[key=value]
% \let#7#3%
@@ -557,7 +557,7 @@
\let#3#7%
\else\iffirstargument
% \mult_check_for_assignment{##1}%
- \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=\_e_t_x_\_e_t_x_\_e_o_t_
+ \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=^^^^0003^^^^0003^^^^0004%
% \setuplayout[whatever]
\let#6#3% % previous becomes current
\edef#3{##1}% this will catch reset so one needs to test for it
@@ -829,7 +829,7 @@
\edef#2{##1}%
#3[##2]%
\else\iffirstargument
- \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=\_e_t_x_\_e_t_x_\_e_o_t_
+ \ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=^^^^0003^^^^0003^^^^0004%
\edef#2{##1}%
\else
\let#2\empty
@@ -1347,23 +1347,23 @@
\unexpanded\def\syst_helpers_install_macro_stack#1#2#3%
{\xdef\m_syst_helpers_push_macro{\csstring#1}%
- \expandafter\newcount\csname#3\m_syst_helpers_push_macro\endcsname
- \expandafter\edef\csname push_macro_\m_syst_helpers_push_macro\endcsname
- {\noexpand\expandafter\glet
- \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname
- \noexpand#1%
- \global\advance\csname#3\m_syst_helpers_push_macro\endcsname\plusone}%
- \expandafter\edef\csname pop_macro_\m_syst_helpers_push_macro\endcsname
- {\global\advance\csname#3\m_syst_helpers_push_macro\endcsname\minusone
- \noexpand\expandafter#2%
- \noexpand\expandafter\noexpand#1%
- \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname}}
+ \ifcsname#3\m_syst_helpers_push_macro\endcsname\else
+ \expandafter\newcount\csname#3\m_syst_helpers_push_macro\endcsname
+ \expandafter\edef\csname push_macro_\m_syst_helpers_push_macro\endcsname
+ {\noexpand\expandafter\glet
+ \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname
+ \noexpand#1%
+ \global\advance\csname#3\m_syst_helpers_push_macro\endcsname\plusone}%
+ \expandafter\edef\csname pop_macro_\m_syst_helpers_push_macro\endcsname
+ {\global\advance\csname#3\m_syst_helpers_push_macro\endcsname\minusone
+ \noexpand\expandafter#2%
+ \noexpand\expandafter\noexpand#1%
+ \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname}%
+ \fi}
\unexpanded\def\installmacrostack #1{\syst_helpers_install_macro_stack#1\let \??localpushedmacro }
\unexpanded\def\installglobalmacrostack#1{\syst_helpers_install_macro_stack#1\glet\??globalpushedmacro}
-\protect
-
% \unprotect
%
% \installcorenamespace {test} \installcommandhandler \??test {test} \??test
@@ -1385,87 +1385,123 @@
%
% \starttext
% \definetest[foo] \definetest[bar][foo] \setuptest[bar][before=indeed]
-% \resettimer \dorecurse{100000}{\TestMeA[bar]} A:\elapsedtime \par % 0.502
-% \resettimer \dorecurse{100000}{\TestMeB[bar]} B:\elapsedtime \par % 0.530
-% \resettimer \dorecurse{100000}{\TestMeC[bar]} C:\elapsedtime \par % 0.487
-% \resettimer \dorecurse{100000}{\TestMeD[bar]} D:\elapsedtime \par % 0.493
+% \testfeatureonce{100000}{\TestMeA[bar]} A:\elapsedtime \par % 0.502
+% \testfeatureonce{100000}{\TestMeB[bar]} B:\elapsedtime \par % 0.530
+% \testfeatureonce{100000}{\TestMeC[bar]} C:\elapsedtime \par % 0.487
+% \testfeatureonce{100000}{\TestMeD[bar]} D:\elapsedtime \par % 0.493
% \stoptext
-% There is no real demand for this ... even if this is twice as fast we only gain
-% a few milliseconds:
-%
-% \unexpanded\def\foo#1{[foo:#1]}
+% There is no real demand for this ... even if this is two to three times as fast we
+% only gain a few milliseconds:
%
-% \installcommalistprocessor {foo} \foo
-% \installcommalistprocessorcommand \processfoolist {foo} \foo
+% \starttyping
+% \unexpanded\def\foo#1{[foo:#1]}
%
-% \commalistprocessor{foo}[a,b,c,d]
-% \processfoolist [a, b, c, d]
+% \installcommalistprocessor {foo} \foo
+% \installcommalistprocessorcommand \processfoolist \foo
%
-% \testfeatureonce{30000}{} \elapsedtime\par % 0.01 -> 0.00
-% \testfeatureonce{30000}{\processfoolist [fixed,middle]} \elapsedtime\par % 0.07 -> 0.06
-% \testfeatureonce{30000}{\commalistprocessor{foo}[fixed,middle]} \elapsedtime\par % 0.09 -> 0.08
-% \testfeatureonce{30000}{\processcommalist [fixed,middle]\foo} \elapsedtime\par % 0.13 -> 0.12
+% \infofont
%
-% For instance the luatex manual only has some 3000 calls. But I keep this around as one
-% never knows when we might need it.
+% \commalistprocessor{foo}[a,b,c,{x,y,z},d]\par
+% \processfoolist[a, b, c, {x,y,z}, d]\par
+% \processcommalist[{x,y,z}]\foo\blank
%
-% \installcorenamespace{commalistprocessor}
-% \installcorenamespace{commalistprocessorcheck}
-% \installcorenamespace{commalistprocessorwrap}
-% \installcorenamespace{commalistprocessorfirst}
-% \installcorenamespace{commalistprocessorcheckspace}
-% \installcorenamespace{commalistprocessorcheckfinish}
-% \installcorenamespace{commalistprocessoraction}
-% \installcorenamespace{commalistprocessorgobblespace}
+% \commalistprocessor{foo}[{x,y,z},a]\par
+% \commalistprocessor{foo}[{x,y,z}]\par
+% \processfoolist[{x,y,z},a]\par
+% \processfoolist[{x,y,z}]\par
+% \processcommalist[{x,y,z}]\foo\blank
%
-% \unexpanded\def\installcommalistprocessor#1#2% 7 macro names overhead
-% {\let\nexttoken\relax
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessor#1\endcsname[%
-% {\futurelet\nexttoken\csname\??commalistprocessorcheck#1\endcsname}%
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessorcheck#1\endcsname
-% {\noexpand\ifx\nexttoken]%
-% \noexpand\expandafter\noexpand\gobblethreearguments
-% \noexpand\else
-% \noexpand\expandafter\csname\??commalistprocessorwrap#1\endcsname
-% \noexpand\fi
-% \relax}% this one preserved the next {}
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessorwrap#1\endcsname##1]%
-% {\csname\??commalistprocessorfirst#1\endcsname##1,]\relax}%
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessorfirst#1\endcsname##1% picks up \relax
-% {\csname\??commalistprocessorcheckspace#1\endcsname}%
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessorcheckspace#1\endcsname
-% {\noexpand\ifx\nexttoken\noexpand\blankspace
-% \noexpand\expandafter\csname\??commalistprocessorgobblespace#1\endcsname
-% \noexpand\else
-% \noexpand\expandafter\csname\??commalistprocessorcheckfinish#1\endcsname
-% \noexpand\fi}%
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessorcheckfinish#1\endcsname
-% {\noexpand\ifx\nexttoken]%
-% \noexpand\expandafter\noexpand\gobbleoneargument
-% \noexpand\else
-% \noexpand\expandafter\csname\??commalistprocessoraction#1\endcsname
-% \noexpand\fi}%
-% %
-% \unexpanded\expandafter\edef\csname\??commalistprocessoraction#1\endcsname##1,%
-% {\noexpand#2{##1}%
-% \futurelet\nexttoken\csname\??commalistprocessorcheckspace#1\endcsname}%
-% %
-% \let\next\:%
-% \unexpanded\edef \:{\csname\??commalistprocessorgobblespace#1\endcsname}%
-% \unexpanded\expandafter\edef\: {\futurelet\nexttoken\csname\??commalistprocessorcheckspace#1\endcsname}%
-% \let\:\next
-% %
-% }
+% \unexpanded\def\foo#1{}
%
-% \unexpanded\def\installcommalistprocessorcommand#1#2#3%
-% {\installcommalistprocessor{#2}{#3}%
-% \expandafter\let\expandafter#1\csname\??commalistprocessor#2\endcsname}
+% \testfeatureonce{400000}{\processfoolist [fixed,middle,bar]} \elapsedtime\quad
+%%\testfeatureonce{400000}{\commalistprocessor{foo}[fixed,middle,bar]} \elapsedtime\quad
+% \testfeatureonce{400000}{\processcommalist [fixed,middle,bar]\foo} \elapsedtime\quad
+% \stoptyping
%
-% \unexpanded\def\commalistprocessor#1{\csname\??commalistprocessor#1\endcsname}
+% For instance the luatex manual only has some 3000 calls. But I keep this around as one
+% never knows when we might need it.
+
+\installcorenamespace{commalistprocessor}
+\installcorenamespace{commalistprocessorwrap}
+\installcorenamespace{commalistprocessorfirst}
+\installcorenamespace{commalistprocessornext}
+\installcorenamespace{commalistprocessoraction}
+
+\startmkivmode
+
+ \installcorenamespace{commalistprocessorcheck}
+ \installcorenamespace{commalistprocessorspace}
+ \installcorenamespace{commalistprocessorpickup}
+ \installcorenamespace{commalistprocessorfinish}
+
+ \unexpanded\def\installcommalistprocessor#1#2% 8 macro names overhead
+ {\let\nexttoken\relax
+ \unexpanded\expandafter\edef\csname\??commalistprocessor#1\endcsname[%
+ {\futurelet\nexttoken\csname\??commalistprocessorcheck#1\endcsname}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessorcheck#1\endcsname
+ {\noexpand\ifx\nexttoken]%
+ \noexpand\expandafter\noexpand\gobblethreearguments
+ \noexpand\else
+ \noexpand\expandafter\csname\??commalistprocessorwrap#1\endcsname
+ \noexpand\fi
+ \relax}% this one preserved the next {}
+ \unexpanded\expandafter\edef\csname\??commalistprocessorwrap#1\endcsname##1]%
+ {\csname\??commalistprocessorfirst#1\endcsname##1,]\relax}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessorfirst#1\endcsname##1% picks up \relax
+ {\csname\??commalistprocessornext#1\endcsname}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessornext#1\endcsname
+ {\noexpand\ifx\nexttoken\noexpand\blankspace
+ \noexpand\expandafter\csname\??commalistprocessorspace#1\endcsname
+ \noexpand\else
+ \noexpand\expandafter\csname\??commalistprocessorfinish#1\endcsname
+ \noexpand\fi}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessorfinish#1\endcsname
+ {\noexpand\ifx\nexttoken]%
+ \noexpand\expandafter\noexpand\gobbleoneargument
+ \noexpand\else
+ \noexpand\expandafter\csname\??commalistprocessoraction#1\endcsname
+ \noexpand\fi}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessoraction#1\endcsname##1,%
+ {\noexpand#2{##1}%
+ \futurelet\nexttoken\csname\??commalistprocessornext#1\endcsname}%
+ \let\next\:%
+ \unexpanded\edef \:{\csname\??commalistprocessorspace#1\endcsname}%
+ \unexpanded\expandafter\edef\: {\futurelet\nexttoken\csname\??commalistprocessornext#1\endcsname}%
+ \let\:\next}
+
+\stopmkivmode
+
+\startlmtxmode
+
+ %installcorenamespace{commalistprocessorpickup}
+
+ \unexpanded\def\installcommalistprocessor#1#2% 5 macro names overhead
+ {\unexpanded\expandafter\edef\csname\??commalistprocessor#1\endcsname[%
+ % {\noexpand\futureexpandis]%
+ % \noexpand\gobbleoneargument
+ % \csname\??commalistprocessorpickup#1\endcsname}
+ %\unexpanded\expandafter\edef\csname\??commalistprocessorpickup#1\endcsname
+ {\csname\??commalistprocessorwrap#1\endcsname\relax}% \relax preserves {}
+ \unexpanded\expandafter\edef\csname\??commalistprocessorwrap#1\endcsname##1]%
+ {\csname\??commalistprocessorfirst#1\endcsname##1,]}
+ \unexpanded\expandafter\edef\csname\??commalistprocessorfirst#1\endcsname\relax
+ {\csname\??commalistprocessornext#1\endcsname}%
+ \unexpanded\expandafter\edef\csname\??commalistprocessornext#1\endcsname
+ {\noexpand\futureexpandis]%
+ \noexpand\gobbleoneargument
+ \csname\??commalistprocessoraction#1\endcsname}
+ \unexpanded\expandafter\edef\csname\??commalistprocessoraction#1\endcsname##1,%
+ {\noexpand#2{##1}%
+ \csname\??commalistprocessornext#1\endcsname}}
+
+\stoplmtxmode
+
+\unexpanded\def\installcommalistprocessorcommand#1#2% \processor \action
+ {\edef\p_name{\csstring#2}%
+ \installcommalistprocessor\p_name{#2}%
+ \expandafter\let\expandafter#1\csname\??commalistprocessor\p_name\endcsname}
+
+\unexpanded\def\commalistprocessor#1{\csname\??commalistprocessor#1\endcsname}
+
+\protect \endinput
diff --git a/tex/context/base/mkiv/mult-chk.mkiv b/tex/context/base/mkiv/mult-chk.mkiv
index 8869f7dcb..83b82242e 100644
--- a/tex/context/base/mkiv/mult-chk.mkiv
+++ b/tex/context/base/mkiv/mult-chk.mkiv
@@ -62,7 +62,7 @@
\def\mult_checkers_get_checked_parameters_nop_indeed#1#2]% needs checking with adapted syst-aux.mkiv
{\def\syst_helpers_get_parameters_assign{\syst_helpers_get_parameters_assign_indeed#1}% will change
- \syst_helpers_process_comma_item#2,],\_e_o_t_}
+ \syst_helpers_process_comma_item#2,],^^^^0004}
\unexpanded\def\disablecheckparameters{\let\getcheckedparameters\mult_checkers_get_checked_parameters_nop}
\unexpanded\def\enablecheckparameters {\let\getcheckedparameters\mult_checkers_get_checked_parameters_yes}
diff --git a/tex/context/base/mkiv/page-cst.lua b/tex/context/base/mkiv/page-cst.lua
index 1c2f5fc0b..49a60c903 100644
--- a/tex/context/base/mkiv/page-cst.lua
+++ b/tex/context/base/mkiv/page-cst.lua
@@ -442,11 +442,13 @@ local function here(c,r,nr,nofcolumns,nofrows,cells,width,spans)
return c, r, nc
end
+-- we use c/r as range limiters
+
local methods = {
[v_here] = here,
[v_fixed] = here,
tblr = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
- for j=1,nofrows-nr+1 do
+ for j=r,nofrows-nr+1 do
for i=c,nofcolumns do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
@@ -459,7 +461,7 @@ local methods = {
end,
lrtb = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
for i=c,nofcolumns do
- for j=1,nofrows-nr+1 do
+ for j=r,nofrows-nr+1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
if c then
@@ -470,7 +472,7 @@ local methods = {
end
end,
tbrl = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
- for j=1,nofrows-nr+1 do
+ for j=r,nofrows-nr+1 do
for i=nofcolumns,c,-1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
@@ -483,7 +485,7 @@ local methods = {
end,
rltb = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
for i=nofcolumns,c,-1 do
- for j=1,nofrows-nr+1 do
+ for j=r,nofrows-nr+1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
if c then
@@ -494,7 +496,8 @@ local methods = {
end
end,
btlr = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
- for j=nofrows-nr+1,1,-1 do
+ -- for j=nofrows-nr+1,1,-1 do
+ for j=nofrows-nr+1-r+1,1,-1 do
for i=c,nofcolumns do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
@@ -507,7 +510,8 @@ local methods = {
end,
lrbt = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
for i=c,nofcolumns do
- for j=nofrows-nr+1,1,-1 do
+ -- for j=nofrows-nr+1,1,-1 do
+ for j=nofrows-nr+1-r+1,1,-1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
if c then
@@ -518,7 +522,8 @@ local methods = {
end
end,
btrl = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
- for j=nofrows-nr+1,1,-1 do
+ -- for j=nofrows-nr+1,1,-1 do
+ for j=nofrows-nr+1-r+1,1,-1 do
for i=nofcolumns,c,-1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
@@ -531,7 +536,8 @@ local methods = {
end,
rlbt = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
for i=nofcolumns,c,-1 do
- for j=nofrows-nr+1,1,-1 do
+ -- for j=nofrows-nr+1,1,-1 do
+ for j=nofrows-nr+1-r+1,1,-1 do
if not cells[i][j] then
local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
if c then
@@ -1318,6 +1324,7 @@ interfaces.implement {
{ "r", "integer" },
{ "nc", "integer" },
{ "nr", "integer" },
+ { "method", "string" },
{ "box", "integer" },
} }
}
@@ -1330,6 +1337,7 @@ interfaces.implement {
{ "method", "string" },
{ "c", "integer" },
{ "r", "integer" },
+ { "method", "string" },
{ "box", "integer" },
{ "width", "dimension" },
{ "height", "dimension" },
@@ -1344,6 +1352,7 @@ interfaces.implement {
{ "name", "string" },
{ "c", "integer" },
{ "r", "integer" },
+ { "method", "string" },
{ "box", "integer" },
} }
}
@@ -1415,6 +1424,7 @@ interfaces.implement {
{ "name", "string" },
{ "c", "integer" },
{ "r", "integer" },
+ { "method", "string" },
{ "box", "integer" },
} }
}
diff --git a/tex/context/base/mkiv/page-cst.mkiv b/tex/context/base/mkiv/page-cst.mkiv
index 37df4e8b1..8fd02c870 100644
--- a/tex/context/base/mkiv/page-cst.mkiv
+++ b/tex/context/base/mkiv/page-cst.mkiv
@@ -221,6 +221,7 @@
{\begingroup
\letdummyparameter\c!c\zerocount
\letdummyparameter\c!r\zerocount
+ \letdummyparameter\c!method\v!here
\letdummyparameter\c!option\v!none
\getdummyparameters[#1]%
\dowithnextboxcs\page_grd_set_indeed\hbox}
@@ -231,6 +232,7 @@
c \dummyparameter\c!c
r \dummyparameter\c!r
box \nextbox
+ method {\dummyparameter\c!method}
option {\dummyparameter\c!option}
}%
\ifcase\c_page_grd_reserved_state
@@ -250,6 +252,7 @@
\fi
\endgroup}
+
\unexpanded\def\page_grd_command_set_vsize
{\clf_setvsizecolumnset{\currentpagegrid}%
\ifdim\d_page_grd_gap_height<\lineheight
@@ -640,11 +643,12 @@
\edef\currentpagegridspan{#1}%
\clf_sethsizecolumnspan{\currentpagegrid}\pagegridspanparameter\c!n\relax
\setbox\scratchbox\hbox\bgroup\inheritedpagegridspanframed\bgroup
+ \def\page_grd_span_stop{\page_grd_span_stop_indeed{#2}}%
\usepagegridspanstyleandcolor\c!style\c!color
\pagegridspanparameter\c!before
\ignorespaces}
-\unexpanded\def\stoppagegridspan
+\unexpanded\def\page_grd_span_stop_indeed#1%
{\removeunwantedspaces
\par
\verticalstrut
@@ -653,11 +657,14 @@
\endgraf
\pagegridspanparameter\c!after
\egroup\egroup
- \setpagegrid{\box\scratchbox}%
+ \setpagegrid[#1]{\box\scratchbox}%
% todo: push into slot
\egroup
\endgraf}
+\unexpanded\def\stoppagegridspan % indirectness permits aliasing
+ {\page_grd_span_stop}
+
\def\pagegridspanwidth#1% assumes equal distances
{\the\dimexpr
#1\d_page_grd_column_width
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 24636e090..0547dc574 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 3a16e2d66..63e611ca1 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/strc-itm.mkvi b/tex/context/base/mkiv/strc-itm.mkvi
index 13e400c0e..7895b7968 100644
--- a/tex/context/base/mkiv/strc-itm.mkvi
+++ b/tex/context/base/mkiv/strc-itm.mkvi
@@ -390,6 +390,11 @@
\unexpanded\def\strc_itemgroups_process_options#options%
{\processcommacommand[#options]\strc_itemgroups_process_option} % expansion of options is handy for xml
+% \installcommalistprocessorcommand \strc_itemgroups_process_option_list \strc_itemgroups_process_option
+%
+% \unexpanded\def\strc_itemgroups_process_options#options%
+% {\normalexpanded{\strc_itemgroups_process_option_list[#options]}} % expansion of options is handy for xml
+
\def\strc_itemgroups_process_option#option%
{\edef\itemgroupconstantvalue{#option}%
\ifx\itemgroupconstantvalue\empty\else
@@ -526,6 +531,11 @@
\def\strc_itemgroups_preset_stage_one#options%
{\processcommacommand[#options]\strc_itemgroups_preset_stage_one_indeed}
+% \installcommalistprocessorcommand \strc_itemgroups_preset_stage_one_list \strc_itemgroups_preset_stage_one_indeed
+%
+% \def\strc_itemgroups_preset_stage_one#options%
+% {\normalexpanded{\strc_itemgroups_preset_stage_one_list[#options]}}
+
\def\strc_itemgroups_preset_stage_one_indeed#option%
{\ifcsname\??itemgroupfirst#option\endcsname
\lastnamedcs
diff --git a/tex/context/base/mkiv/syst-aux.mkiv b/tex/context/base/mkiv/syst-aux.mkiv
index 5decc5886..4fbcbd0e6 100644
--- a/tex/context/base/mkiv/syst-aux.mkiv
+++ b/tex/context/base/mkiv/syst-aux.mkiv
@@ -1606,8 +1606,8 @@
\unexpanded\def\syst_helpers_do_if_in_string_else#1#2% ##2 can be {abc}
{\expandafter\def\expandafter\syst_helpers_do_do_if_in_string_else
- \expandafter##\expandafter1#1##2##3\_e_o_s_{\unless\if##2@}% expand #1 here
- \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}@@\_e_o_s_} % expand #2 here
+ \expandafter##\expandafter1#1##2##3^^^^0004{\unless\if##2@}% expand #1 here
+ \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}@@^^^^0004} % expand #2 here
%D The next alternative proved to be upto twice as fast on tasks like checking
%D reserved words in pretty verbatim typesetting! This is mainly due to the fact
@@ -1621,9 +1621,9 @@
%D alternative does minimal (one level) expansion.
\unexpanded\def\syst_helpers_do_if_in_csname_else#1#2%
- {\def\syst_helpers_do_do_if_in_csname_else##1#1##2##3\_e_o_s_
+ {\def\syst_helpers_do_do_if_in_csname_else##1#1##2##3^^^^0004%
{\unless\if##2@}%
- \expandafter\syst_helpers_do_do_if_in_csname_else#2#1@@\_e_o_s_}
+ \expandafter\syst_helpers_do_do_if_in_csname_else#2#1@@^^^^0004}
\unexpanded\def\doifelseincsname#1#2%
{\normalexpanded{\syst_helpers_do_if_in_csname_else{#1}}{#2}%
@@ -1821,11 +1821,11 @@
%D Some more raw material:
\def\syst_helpers_do_raw_process_action[#1][#2]%
- {\def\syst_helpers_do_do_raw_process_action##1,#1=>##2,##3\_e_o_s_
+ {\def\syst_helpers_do_do_raw_process_action##1,#1=>##2,##3^^^^0004%
{\if##3@\else
\def\m_syst_helpers_process_action{##2}%
\fi}%
- \syst_helpers_do_do_raw_process_action,#2,#1=>,@\_e_o_s_}
+ \syst_helpers_do_do_raw_process_action,#2,#1=>,@^^^^0004}
\unexpanded\def\rawprocessaction[#1]#2[#3]%
{\edef\m_syst_string_one{#1}%
@@ -2014,7 +2014,7 @@
\fi#4}
\def\syst_helpers_get_parameters#1]%
- {\xprocesscommaitem#1,],\_e_o_t_}
+ {\xprocesscommaitem#1,],^^^^0004}
\def\syst_helpers_process_comma_item#1,#2% #2 takes space before ,
{\if,#1,% dirty trick for testing #1=empty
@@ -2022,14 +2022,14 @@
\else\if]#1%
\doubleexpandafter\gobbleoneargument
\else
- \syst_helpers_get_parameters_assign\_e_o_t_#1==\empty\_e_o_t_
+ \syst_helpers_get_parameters_assign^^^^0004#1==\empty^^^^0004%
\doubleexpandafter\syst_helpers_process_comma_item
\fi\fi#2}
\def\syst_helpers_assign_error#1#2#3%
{\showassignerror{#2}{\the\inputlineno\space(#1)}}
-\def\syst_helpers_get_parameters_assign_normal#1\_e_o_t_#2=#3=#4#5\_e_o_t_
+\def\syst_helpers_get_parameters_assign_normal#1^^^^0004#2=#3=#4#5^^^^0004%
{\ifx\empty#2\empty
\expandafter\syst_helpers_assign_error
\else\ifx#4\empty
@@ -2039,7 +2039,7 @@
\fi\fi
{#1}{#2}{#3}}
-\def\syst_helpers_get_parameters_assign_error#1\_e_o_t_#2=#3=#4#5\_e_o_t_
+\def\syst_helpers_get_parameters_assign_error#1^^^^0004#2=#3=#4#5^^^^0004%
{\ifx\empty#2\empty
\expandafter\syst_helpers_assign_error
\else\ifx#4\empty
@@ -2056,9 +2056,9 @@
\let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_normal
-\unexpanded\def\doassign [#1][#2]{\let\setsomevalue\dosetvalue \syst_helpers_get_parameters_assign_indeed#1\_e_o_t_#2==\empty\_e_o_t_}
-\unexpanded\def\doeassign [#1][#2]{\let\setsomevalue\dosetevalue \syst_helpers_get_parameters_assign_indeed#1\_e_o_t_#2==\empty\_e_o_t_}
-\unexpanded\def\undoassign[#1][#2]{\let\setsomevalue\doresetvalue\syst_helpers_get_parameters_assign_indeed#1\_e_o_t_#2==\empty\_e_o_t_}
+\unexpanded\def\doassign [#1][#2]{\let\setsomevalue\dosetvalue \syst_helpers_get_parameters_assign_indeed#1^^^^0004#2==\empty^^^^0004}
+\unexpanded\def\doeassign [#1][#2]{\let\setsomevalue\dosetevalue \syst_helpers_get_parameters_assign_indeed#1^^^^0004#2==\empty^^^^0004}
+\unexpanded\def\undoassign[#1][#2]{\let\setsomevalue\doresetvalue\syst_helpers_get_parameters_assign_indeed#1^^^^0004#2==\empty^^^^0004}
%D \macros
%D {processassignmentlist,processassignmentcommand,
@@ -2124,14 +2124,14 @@
%D Here we hook in the code (beware, this is the optimized get **):
\def\syst_helpers_get_parameters_normal#1]%
- {\syst_helpers_process_comma_item#1,],\_e_o_t_}
+ {\syst_helpers_process_comma_item#1,],^^^^0004}
\def\syst_helpers_get_parameters_expanded#1]%
{\let\dosetnvalue\setsomevalue
\let\setsomevalue\dosetevalue
\let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_error
\let\setsomevalue\dosetevalue
- \syst_helpers_process_comma_item#1,],\_e_o_t_
+ \syst_helpers_process_comma_item#1,],^^^^0004%
\let\syst_helpers_get_parameters_assign_indeed\syst_helpers_get_parameters_assign_normal
\let\setsomevalue\dosetnvalue
\let\syst_helpers_get_parameters\syst_helpers_get_parameters_normal
@@ -2205,11 +2205,11 @@
\newif\ifparameters
-\def\syst_helpers_check_parameters#1=#2#3\_e_o_s_
- {\if#2\_e_t_x_\parametersfalse\else\parameterstrue\fi}
+\def\syst_helpers_check_parameters#1=#2#3^^^^0004%
+ {\if#2^^^^0003\parametersfalse\else\parameterstrue\fi}
\unexpanded\def\checkparameters[#1]%
- {\syst_helpers_check_parameters#1=\_e_t_x_\_e_t_x_\_e_o_s_}
+ {\syst_helpers_check_parameters#1=^^^^0003^^^^0003^^^^0004}
%D \macros
%D {getfromcommalist,getfromcommacommand,
@@ -5366,18 +5366,18 @@
%D \doifassignmentelse {...} {then ...} {else ...}
%D \stoptyping
-\def\syst_helpers_check_if_assignment_else#1=#2#3\_e_o_t_{\if#2\_e_t_x_}%
-\def\syst_helpers_check_else_assignment_if#1=#2#3\_e_o_t_{\unless\if#2\_e_t_x_}%
+\def\syst_helpers_check_if_assignment_else#1=#2#3^^^^0004{\if#2^^^^0003}%
+\def\syst_helpers_check_else_assignment_if#1=#2#3^^^^0004{\unless\if#2^^^^0003}%
\unexpanded\def\doifelseassignment#1%
- {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_
+ {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=^^^^0003^^^^0003^^^^0004%
\expandafter\secondoftwoarguments
\else
\expandafter\firstoftwoarguments
\fi}
\unexpanded\def\doifelseassignmentcs#1#2#3%
- {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_
+ {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=^^^^0003^^^^0003^^^^0004%
\expandafter#3%
\else
\expandafter#2%
@@ -5389,7 +5389,7 @@
\newif\ifassignment
\unexpanded\def\docheckassignment#1%
- {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_
+ {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=^^^^0003^^^^0003^^^^0004%
\assignmentfalse
\else
\assignmenttrue
@@ -5398,10 +5398,10 @@
%D These can be used for cases where we want less tracing noise.
\unexpanded\def\validassignment#1%
- {\expandafter\syst_helpers_check_else_assignment_if\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_}
+ {\expandafter\syst_helpers_check_else_assignment_if\detokenize{#1}=^^^^0003^^^^0003^^^^0004}
\unexpanded\def\novalidassignment#1%
- {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=\_e_t_x_\_e_t_x_\_e_o_t_}
+ {\expandafter\syst_helpers_check_if_assignment_else\detokenize{#1}=^^^^0003^^^^0003^^^^0004}
%D In \ETEX\ we can use \type {\detokenize} and gain some speed, but in general far
%D less that 1\% for \type {\convertargument} and nil for \type {\convertcommand}.
@@ -6255,9 +6255,9 @@
\fi}
\def\doifelsestringinstring#1#2%
- {\expandafter\def\expandafter\syst_helpers_if_instring_else\expandafter##\expandafter1#1##2##3\_e_o_s_
+ {\expandafter\def\expandafter\syst_helpers_if_instring_else\expandafter##\expandafter1#1##2##3^^^^0004%
{\syst_helpers_if_instring_else_indeed##2}%
- \expandafter\expandafter\expandafter\syst_helpers_if_instring_else\expandafter#2#1@@\_e_o_s_}
+ \expandafter\expandafter\expandafter\syst_helpers_if_instring_else\expandafter#2#1@@^^^^0004}
\let\doifstringinstringelse\doifelsestringinstring
@@ -6435,10 +6435,10 @@
% {\scratchtoks{a\relax b} \removetoks \relax\from\scratchtoks [\showthe\scratchtoks]}
\unexpanded\def\removetoks#1\from#2%
- {\def\syst_helpers_remove_toks##1#1##2\empty\empty\empty##3\_e_o_t_
+ {\def\syst_helpers_remove_toks##1#1##2\empty\empty\empty##3^^^^0004%
{\def\m_syst_string_one{##3}%
\ifx\m_syst_string_one\empty#2{##1}\else#2{##1##2}\fi}%
- \expandafter\syst_helpers_remove_toks\the#2\empty\empty\empty#1\empty\empty\empty\_e_o_t_}
+ \expandafter\syst_helpers_remove_toks\the#2\empty\empty\empty#1\empty\empty\empty^^^^0004}
%D Also:
@@ -7435,10 +7435,10 @@
%D Is this one still needed?
-\def\syst_helpers_if_some_space_else#1 #2#3\_e_o_s_{\if\noexpand#2@}
+\def\syst_helpers_if_some_space_else#1 #2#3^^^^0004{\if\noexpand#2@}
\def\doifelsesomespace#1% % #2#3%
- {\syst_helpers_if_some_space_else#1 @ @\_e_o_s_ % #3\else#2\fi}
+ {\syst_helpers_if_some_space_else#1 @ @^^^^0004% #3\else#2\fi}
\expandafter\secondoftwoarguments
\else
\expandafter\firstoftwoarguments
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index 7c77ec97e..2a2d48311 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -720,6 +720,11 @@
\tracingcommands \zerocount
\tracingonline \zerocount}
+%D When we want to see a box we can as well show all of it.
+
+\showboxdepth \maxdimen
+\showboxbreadth\maxdimen
+
%D Just for tracing purposes we set:
\tracingstats\plusone
diff --git a/tex/context/base/mkiv/tabl-ntb.mkiv b/tex/context/base/mkiv/tabl-ntb.mkiv
index 4bc39da97..1cf5ad3dc 100644
--- a/tex/context/base/mkiv/tabl-ntb.mkiv
+++ b/tex/context/base/mkiv/tabl-ntb.mkiv
@@ -208,20 +208,23 @@
\newcount\c_tabl_level
+\installglobalmacrostack\m_tabl_ntb_saved_row
+\installglobalmacrostack\m_tabl_ntb_saved_col
+
\unexpanded\def\tabl_ntb_table_push
{\ifnum\m_tabl_tbl_level>\plusone
\tabl_ntb_parameters_reset
% we need a proper count push/pop
- \xdef\m_tabl_ntb_saved_row{\the\c_tabl_ntb_row}\globalpushmacro\m_tabl_ntb_saved_row
- \xdef\m_tabl_ntb_saved_col{\the\c_tabl_ntb_col}\globalpushmacro\m_tabl_ntb_saved_col
+ \xdef\m_tabl_ntb_saved_row{\the\c_tabl_ntb_row}\push_macro_m_tabl_ntb_saved_row
+ \xdef\m_tabl_ntb_saved_col{\the\c_tabl_ntb_col}\push_macro_m_tabl_ntb_saved_col
\else
\global\intabletrue
\fi}
\unexpanded\def\tabl_ntb_table_pop
{\ifnum\m_tabl_tbl_level>\plusone
- \globalpopmacro\m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row
- \globalpopmacro\m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col
+ \pop_macro_m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row
+ \pop_macro_m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col
\else
\global\intablefalse
\fi}
diff --git a/tex/context/base/mkiv/trac-inf.lua b/tex/context/base/mkiv/trac-inf.lua
index d3e348ce4..0a4537e31 100644
--- a/tex/context/base/mkiv/trac-inf.lua
+++ b/tex/context/base/mkiv/trac-inf.lua
@@ -211,7 +211,8 @@ function statistics.show()
-- end)
if LUATEXENGINE == "luametatex" then
register("used engine", function()
- return format("%s version %s", LUATEXENGINE, LUATEXVERSION)
+ return format("%s version %s, functionality level %s, format id %s",
+ LUATEXENGINE, LUATEXVERSION, LUATEXFUNCTIONALITY, LUATEXFORMATID)
end)
else
register("used engine", function()
diff --git a/tex/context/base/mkiv/trac-tex.mkiv b/tex/context/base/mkiv/trac-tex.mkiv
index d659f4bab..c69f3febb 100644
--- a/tex/context/base/mkiv/trac-tex.mkiv
+++ b/tex/context/base/mkiv/trac-tex.mkiv
@@ -39,4 +39,31 @@
\unexpanded\def\nomkivstatistics{\enabledirectives[system.nostatistics]}
+%D This is not really a tracker but for decades it lived in my \type {cont-loc}
+%D file. I moved it here because I wanted someone else to use it. This macro is not
+%D really useful for users. I kept the \LUA\ variant in \type {cont-loc.mkiv}.
+
+\installcorenamespace{profilemacrocount}
+\installcorenamespace{profilemacromacro}
+
+\newtoks\t_syst_profile
+
+\appendtoks
+ \the\t_syst_profile
+\to \everystoptext
+
+\unexpanded\def\profilemacro#1% an oldie, but modernized a bit
+ {\edef\p_name{\csstring#1}%
+ \ifcsname\??profilemacrocount\p_name\endcsname \else
+ \expandafter\newcount\csname\??profilemacrocount\p_name\endcsname
+ \expandafter\let\csname\??profilemacromacro\p_name\endcsname#1%
+ \xtoksapp\t_syst_profile
+ {\writestatus
+ {profile}%
+ {\string#1: \noexpand\the\csname\??profilemacrocount\p_name\endcsname}}%
+ \unexpanded\xdef#1%
+ {\global\advance\csname\??profilemacrocount\p_name\endcsname\plusone
+ \expandafter\noexpand\csname\??profilemacromacro\p_name\endcsname}%
+ \fi}
+
\protect \endinput
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 70a537ece..3d5205666 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-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index 8fccc9173..7b6a077ef 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/modules/common/s-abbreviations-logos.tex b/tex/context/modules/common/s-abbreviations-logos.tex
index e394157d7..54a969593 100644
--- a/tex/context/modules/common/s-abbreviations-logos.tex
+++ b/tex/context/modules/common/s-abbreviations-logos.tex
@@ -164,10 +164,10 @@
\logo [LMX] {lmx}
\logo [LPEG] {lpeg}
\logo [LUA] {Lua}
-\logo [LUAJIT] {LuaJIT}
-\logo [LUAJITTEX] {Luajit\TeXsuffix}
-\logo [LUAMETATEX] {\Lua Meta\TeXsuffix}
-\logo [LUATEX] {Lua\TeXsuffix}
+\logo [LUAJIT] {Lua\wordboundary JIT}
+\logo [LUAJITTEX] {Lua\wordboundary jit\TeXsuffix}
+\logo [LUAMETATEX] {\Lua\wordboundary Meta\wordboundary\TeXsuffix}
+\logo [LUATEX] {Lua\wordboundary\TeXsuffix}
\logo [LUATOOLS] {luatools}
\logo [MACOSX] {MacOSX}
%logo [MACROTEX] {Macro\TeXsuffix}
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index f5f9653de..8a940cc22 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/12/19 19:05:50
+-- merge date : 05/18/19 10:42:24
do -- begin closure to overcome local limits and interference
@@ -15391,8 +15391,8 @@ function readers.cff(f,fontdata,specification)
if private then
local data=private.data
if type(data)=="table" then
- cffinfo.defaultwidth=data.defaultwidth or cffinfo.defaultwidth
- cffinfo.nominalwidth=data.nominalwidth or cffinfo.nominalwidth
+ cffinfo.defaultwidth=data.defaultwidthx or cffinfo.defaultwidth
+ cffinfo.nominalwidth=data.nominalwidthx or cffinfo.nominalwidth
cffinfo.bluevalues=data.bluevalues
cffinfo.otherblues=data.otherblues
cffinfo.familyblues=data.familyblues
@@ -17881,6 +17881,7 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local sets=readarray(f)
sets=readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
coverage=readcoverage(f,tableoffset+coverage)
+ local shared={}
for index,newindex in next,coverage do
local set=sets[newindex+1]
local hash={}
@@ -17888,18 +17889,24 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local value=set[i]
if value then
local other=value[1]
- local first=value[2]
- local second=value[3]
- if first or second then
- hash[other]={ first,second or nil }
- else
- hash[other]=nil
+ local share=shared[value]
+ if share==nil then
+ local first=value[2]
+ local second=value[3]
+ if first or second then
+ share={ first,second or nil }
+ else
+ share=false
+ end
+ shared[value]=share
end
+ hash[other]=share or nil
end
end
coverage[index]=hash
end
return {
+ shared=shared and true or nil,
format="pair",
coverage=coverage,
}
@@ -17928,22 +17935,17 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local first=offsets[1]
local second=offsets[2]
if first or second then
- if shared then
- local s1=shared[first]
- if s1==nil then
- s1={}
- shared[first]=s1
- end
- local s2=s1[second]
- if s2==nil then
- s2={ first,second or nil }
- s1[second]=s2
- end
- hash[paired]=s2
- else
- hash[paired]={ first,second or nil }
+ local s1=shared[first]
+ if s1==nil then
+ s1={}
+ shared[first]=s1
end
- else
+ local s2=s1[second]
+ if s2==nil then
+ s2={ first,second or nil }
+ s1[second]=s2
+ end
+ hash[paired]=s2
end
end
end