summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2023-01-05 20:22:55 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2023-01-05 20:22:55 +0100
commit659b8f28e591006b6d0669c05d809d6ccf60cec0 (patch)
tree287a360fe83cfb90ccf7507c46022771fc11da4e
parent705b807c950a697d3c8be592c452a6fb3e561c7e (diff)
downloadcontext-659b8f28e591006b6d0669c05d809d6ccf60cec0.tar.gz
2023-01-05 17:46:00
-rw-r--r--doc/context/sources/general/manuals/luametafun/luametafun-mesh.tex2
-rw-r--r--doc/context/sources/general/manuals/math/math-mkiv.tex1
-rw-r--r--doc/context/sources/general/manuals/math/math-notdone.tex139
-rw-r--r--metapost/context/base/mpxl/mp-mlib.mpxl26
-rw-r--r--scripts/context/lua/mtxrun.lua6
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua6
-rw-r--r--scripts/context/stubs/unix/mtxrun6
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua6
-rw-r--r--source/luametatex/source/luarest/lmtbasexxlib.c2
-rw-r--r--source/luametatex/source/tex/texmaincontrol.c17
-rw-r--r--source/luametatex/source/tex/texmath.c64
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-fr.mkii1
-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/grph-raw.lua7
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin24596 -> 24606 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin264787 -> 264792 bytes
-rw-r--r--tex/context/base/mkiv/util-tab.lua2
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/lpdf-grp.lmt201
-rw-r--r--tex/context/base/mkxl/lpdf-lmt.lmt5
-rw-r--r--tex/context/base/mkxl/meta-ini.mkxl2
-rw-r--r--tex/context/base/mkxl/mlib-pps.lmt25
-rw-r--r--tex/context/base/mkxl/mlib-pps.mkxl17
-rw-r--r--tex/context/base/mkxl/spac-chr.lmt9
-rw-r--r--tex/context/base/mkxl/syst-aux.mkxl14
-rw-r--r--tex/context/base/mkxl/tabl-tbl.mkxl5
-rw-r--r--tex/context/interface/mkii/keys-fr.xml1
-rw-r--r--tex/context/modules/mkxl/m-tikz-pgfplots.tex46
-rw-r--r--tex/context/modules/mkxl/m-tikz-pgfplotstable.tex12
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
34 files changed, 475 insertions, 161 deletions
diff --git a/doc/context/sources/general/manuals/luametafun/luametafun-mesh.tex b/doc/context/sources/general/manuals/luametafun/luametafun-mesh.tex
index 98b9a86b7..e70514dba 100644
--- a/doc/context/sources/general/manuals/luametafun/luametafun-mesh.tex
+++ b/doc/context/sources/general/manuals/luametafun/luametafun-mesh.tex
@@ -3,6 +3,8 @@
\environment luametafun-style
\environment luametafun-mesh-examples
+% runtime
+
\doiffileelse{luatex-mesh-examples.pdf} {
% okay
} {
diff --git a/doc/context/sources/general/manuals/math/math-mkiv.tex b/doc/context/sources/general/manuals/math/math-mkiv.tex
index ad842a618..a816b7915 100644
--- a/doc/context/sources/general/manuals/math/math-mkiv.tex
+++ b/doc/context/sources/general/manuals/math/math-mkiv.tex
@@ -47,6 +47,7 @@
\component math-grouping
\ifcase \contextlmtxmode \else
\component math-fun
+ % \component math-notdone
\fi
\stopbodymatter
diff --git a/doc/context/sources/general/manuals/math/math-notdone.tex b/doc/context/sources/general/manuals/math/math-notdone.tex
new file mode 100644
index 000000000..757cebbe2
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-notdone.tex
@@ -0,0 +1,139 @@
+% language=us runpath=texruns:manuals/math
+
+\environment math-layout
+
+% goes to oddities
+
+\startcomponent math-notdone
+
+\startchapter[title=Why we don't do this]
+
+The \TEX\ engine has two math modes: inline and display. What exactly happens
+before we do that depends on what mode we are in.
+
+\startitemize
+ \startitem
+ When we are in horizontal mode, single dollar signs makes us go into
+ inline math mode. Double dollars on the other hand trigger display math
+ and one of the first things that does is flush the current vertical list
+ contributions. As we are in horizontal mode it is likely that something
+ shows up.
+ \stopitem
+ \startitem
+ When we are in vertical mode the engine will trigger a new paragraph in
+ the hard way: the initial par state node gets added as well as the
+ indentation and everything that \type {\everypar} likes to inject. Inline
+ math then stays inline but display math starts out with flushing the
+ current paragraph and that happens to be the state, indentation and
+ everything else injected at the beginning. Often nothing is sees, just
+ an empty line sits there.
+ \stopitem
+ \startitem
+ In math mode the engine will check if we ended the right way and then
+ render and inject the formula.
+ \stopitem
+\stopitemize
+
+Especially the second case is tricky. The \quote {empty} line is placed with
+proper \type {\parskip}, \type {\parindent} and whatever. That can end up with a
+lot of supposedly whitespace of which is not really clear (for the user) what
+comes from where: interline space, whitespace, line height, display spacing, etc.
+To that you can add that empty lines are special themselves: in \MKII\ we relax
+\type {\par}, in \MKIV\ we setup {\LUATEX} to accept \type {\par} equivalents and
+\LUAMETATEX\ has no checks at all. \footnote {The same can be told about \type
+{\outer}.}
+
+Before We show some examples of this we have to make clear that \CONTEXT\ users
+don't do this have to worry about all this. We don't follow the (Plain and
+\LATEX) \AMS\ policy of \quotation {no empty lines before display math} and
+\quotation {no empty lines in display math}. We don't even use the display skip
+parameters and we do compensate for these empty line issues. The basics haven't
+changed between \MKII, \MKIV\ and \LMTX\ but it has become leaner and meaner deep
+down. We could actually remove display mode (not to be confused with \type
+{\displaystyle}) from the engine but then we could not show the examples below.
+
+\startbuffer[zero]
+\dorecurse{10}{test #1 }
+\startformula
+ x = \the\mathdisplayskipmode + \the\mathdisplaymode
+\stopformula
+\dorecurse{10}{test #1 }
+\stopbuffer
+
+\startbuffer[one]
+\dorecurse{10}{test #1 } \par
+$$ x = \the\mathdisplayskipmode + \the\mathdisplaymode $$ \par
+\dorecurse{10}{test #1 } \par
+\stopbuffer
+
+\startbuffer[two]
+\dorecurse{10}{test #1 }
+$$ x = \the\mathdisplayskipmode + \the\mathdisplaymode $$
+\dorecurse{10}{test #1 }
+\stopbuffer
+
+We use this as example:
+
+\typebuffer[one]
+
+as well as this:
+
+\typebuffer[two]
+
+In \CONTEXT\ one does this:
+
+\typebuffer[zero]
+
+and get:
+
+{\showmakeup[line] \getbuffer[zero]}
+
+% \predisplaysize
+
+For the examples with dollars we use this setup:
+
+\startbuffer[setup]
+\everypar {!}
+\mathdisplaymode 0
+\normalizelinemode 0
+\parindent 30pt
+\parskip 40pt
+\abovedisplayskip 20pt
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \abovedisplayskip
+\belowdisplayshortskip \abovedisplayshortskip
+\stopbuffer
+
+\typebuffer[setup]
+
+We make sure that we get something typeset when we start a paragraph, just in
+order that we don't necessarily get empty lines: there can be many. The two modes
+make sure that we operate in regular \TEX\ mode, the way other macro packages do.
+
+First we show what we get with \typ {\mathdisplayskipmode 1}. This makes the
+engine behave like other engines. We don't show what we get with \typ
+{\mathdisplayskipmode 2} where zero skips are ignored but we don't have these
+here. Last we show what we get with \typ {\mathdisplayskipmode 3}. In this
+example the math specific skips are completely ignored.
+
+In both shown cases you will notice that the \type {\parskip} and \type
+{\baselineskip} interfere which in turn demonstrates why in \CONTEXT\ we always
+did things differently. It is possible to enhance the engine to deal with this
+but because in \CONTEXT\ we don't need it and because it is unlikely that other
+macro packages will use it no time will be wasted on this.
+
+\startbuffer
+\page
+\start
+\showmakeup[line]
+\getbuffer[setup,one,two]
+\stop
+\page
+\stopbuffer
+
+{\mathdisplayskipmode 1 \getbuffer}
+{\mathdisplayskipmode 3 \getbuffer}
+
+\stopchapter
+
+\stopcomponent
diff --git a/metapost/context/base/mpxl/mp-mlib.mpxl b/metapost/context/base/mpxl/mp-mlib.mpxl
index 411095e5d..26aacb35d 100644
--- a/metapost/context/base/mpxl/mp-mlib.mpxl
+++ b/metapost/context/base/mpxl/mp-mlib.mpxl
@@ -1371,13 +1371,25 @@ permanent verbatim ;
% New
-def bitmapimage(expr xresolution, yresolution, data) =
- image (
- addto currentpicture doublepath unitsquare
- withprescript "bm_xresolution=" & decimal xresolution
- withprescript "bm_yresolution=" & decimal yresolution
- withpostscript data ;
- )
+% def bitmapimage(expr xresolution, yresolution, data) =
+% image (
+% addto currentpicture doublepath unitsquare
+% withprescript "bm_xresolution=" & decimal xresolution
+% withprescript "bm_yresolution=" & decimal yresolution
+% withpostscript data ;
+% )
+% enddef ;
+
+vardef bitmapimage(expr xresolution, yresolution, data) =
+ save p ; picture p ; p := nullpicture ;
+ addto p doublepath unitsquare
+% xscaled xresolution
+% yscaled yresolution
+ withprescript "bm_xresolution=" & decimal xresolution
+ withprescript "bm_yresolution=" & decimal yresolution
+ withpostscript data
+ ;
+ p
enddef ;
permanent bitmapimage ;
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 4cd71b7a1..179111edf 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -7499,7 +7499,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 34149, stripped down to: 18420
+-- original size: 34148, stripped down to: 18419
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -7837,7 +7837,7 @@ else
local v=t[0]
if v then
m=m+1
- r[m]="[0]='"
+ r[m]="[0]="
if type(v)=="table" then
fastserialize(v)
else
@@ -26070,7 +26070,7 @@ 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 libs-ini.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1034829
+-- original bytes : 1034828
-- stripped bytes : 407834
-- end library merge
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 4cd71b7a1..179111edf 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -7499,7 +7499,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 34149, stripped down to: 18420
+-- original size: 34148, stripped down to: 18419
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -7837,7 +7837,7 @@ else
local v=t[0]
if v then
m=m+1
- r[m]="[0]='"
+ r[m]="[0]="
if type(v)=="table" then
fastserialize(v)
else
@@ -26070,7 +26070,7 @@ 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 libs-ini.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1034829
+-- original bytes : 1034828
-- stripped bytes : 407834
-- end library merge
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 4cd71b7a1..179111edf 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -7499,7 +7499,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 34149, stripped down to: 18420
+-- original size: 34148, stripped down to: 18419
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -7837,7 +7837,7 @@ else
local v=t[0]
if v then
m=m+1
- r[m]="[0]='"
+ r[m]="[0]="
if type(v)=="table" then
fastserialize(v)
else
@@ -26070,7 +26070,7 @@ 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 libs-ini.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1034829
+-- original bytes : 1034828
-- stripped bytes : 407834
-- end library merge
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 4cd71b7a1..179111edf 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -7499,7 +7499,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 34149, stripped down to: 18420
+-- original size: 34148, stripped down to: 18419
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -7837,7 +7837,7 @@ else
local v=t[0]
if v then
m=m+1
- r[m]="[0]='"
+ r[m]="[0]="
if type(v)=="table" then
fastserialize(v)
else
@@ -26070,7 +26070,7 @@ 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 libs-ini.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1034829
+-- original bytes : 1034828
-- stripped bytes : 407834
-- end library merge
diff --git a/source/luametatex/source/luarest/lmtbasexxlib.c b/source/luametatex/source/luarest/lmtbasexxlib.c
index fca7fcef8..9a723060e 100644
--- a/source/luametatex/source/luarest/lmtbasexxlib.c
+++ b/source/luametatex/source/luarest/lmtbasexxlib.c
@@ -14,7 +14,7 @@
First I had a mix of own code and LHF code (base64 and base85) but in the end I decided to reuse
some of pplibs code. Performance is ok, although we can speed up the base16 coders. When needed,
- we can have a few more bur normally pure \LUA\ is quite ok for our purpose.
+ we can have a few more but normally pure \LUA\ is quite ok for our purpose.
*/
diff --git a/source/luametatex/source/tex/texmaincontrol.c b/source/luametatex/source/tex/texmaincontrol.c
index a5f3b5334..8b9250444 100644
--- a/source/luametatex/source/tex/texmaincontrol.c
+++ b/source/luametatex/source/tex/texmaincontrol.c
@@ -3487,8 +3487,8 @@ static int tex_aux_valid_arithmic(int cmd, int *index, int *level, int *varcmd,
*original = eq_value(*index);
return 1;
case register_cmd:
- *index = tex_aux_get_register_index(*level);
*level = cur_chr;
+ *index = tex_aux_get_register_index(cur_chr);
*original = eq_value(*index);
return 1;
case integer_cmd:
@@ -3603,30 +3603,30 @@ static void tex_aux_arithmic_register(int a, int code)
halfword original = 0;
if (tex_aux_valid_arithmic(cmd, &index, &level, &varcmd, &simple, &original)) {
halfword value = null;
- lmt_scanner_state.arithmic_error = 0;
+ // lmt_scanner_state.arithmic_error = 0;
switch (code) {
case advance_code:
tex_scan_optional_keyword("by");
case advance_by_code:
{
- value = tex_aux_get_register_value(level, 0);
+ halfword amount = tex_aux_get_register_value(level, 0);
switch (level) {
case int_val_level:
case attr_val_level:
case dimen_val_level:
- if (value) {
- value += original;
+ if (amount) {
+ value = original + amount;
break;
} else {
return;
}
case glue_val_level:
case mu_val_level:
- if (tex_glue_is_zero(value)) {
+ if (tex_glue_is_zero(amount)) {
return;
} else {
/* Compute the sum of two glue specs */
- halfword newvalue = tex_new_glue_spec_node(value);
+ halfword newvalue = tex_new_glue_spec_node(amount);
tex_flush_node(value);
glue_amount(newvalue) += glue_amount(original);
if (glue_stretch(newvalue) == 0) {
@@ -3667,9 +3667,11 @@ static void tex_aux_arithmic_register(int a, int code)
case multiply_by_code:
{
halfword amount = tex_scan_int(0, NULL);
+ halfword value = 0;
if (amount == 1) {
return;
} else {
+ lmt_scanner_state.arithmic_error = 0;
switch (level) {
case int_val_level:
case attr_val_level:
@@ -3710,6 +3712,7 @@ static void tex_aux_arithmic_register(int a, int code)
if (amount == 1) {
return;
} else {
+ lmt_scanner_state.arithmic_error = 0;
switch (level) {
case int_val_level:
case attr_val_level:
diff --git a/source/luametatex/source/tex/texmath.c b/source/luametatex/source/tex/texmath.c
index 134399c53..d2c0ff413 100644
--- a/source/luametatex/source/tex/texmath.c
+++ b/source/luametatex/source/tex/texmath.c
@@ -1233,7 +1233,7 @@ static void tex_aux_push_math(quarterword group, int style)
update_tex_math_right_class(unset_noad_class);
}
-static void tex_aux_enter_ordinary_math(int style)
+static void tex_aux_enter_inline_math(int style)
{
tex_aux_push_math(math_shift_group, style);
update_tex_family(0, unused_math_family);
@@ -1264,16 +1264,16 @@ void tex_run_math_initialize(void)
tex_aux_enter_display_math(math_shift_cmd);
} else {
tex_back_input(cur_tok);
- tex_aux_enter_ordinary_math(text_style);
+ tex_aux_enter_inline_math(text_style);
}
break;
case math_shift_cs_cmd:
if (cur_chr == begin_math_mode_code) {
- tex_aux_enter_ordinary_math(tex_scan_math_style_identifier(0, 0));
+ tex_aux_enter_inline_math(tex_scan_math_style_identifier(0, 0));
} else if (cur_chr == begin_display_math_code && cur_list.mode > nomode) {
tex_aux_enter_display_math(begin_display_math_code);
} else if (cur_chr == begin_inline_math_code) {
- tex_aux_enter_ordinary_math(text_style);
+ tex_aux_enter_inline_math(text_style);
} else {
tex_you_cant_error("math shift 1");
}
@@ -1298,7 +1298,7 @@ void tex_run_math_equation_number(void) {
if (cur_group == math_shift_group) {
tex_set_saved_record(saved_equation_number_item_location, equation_number_location_save_type, 0, cur_chr);
lmt_save_state.save_stack_data.ptr += saved_equation_number_n_of_items;
- tex_aux_enter_ordinary_math(text_style);
+ tex_aux_enter_inline_math(text_style);
} else {
tex_off_save();
}
@@ -4285,49 +4285,26 @@ static void tex_aux_resume_after_display(void)
*/
-inline static void tex_aux_inject_display_skip_before(quarterword param, quarterword subtype)
+static void tex_aux_inject_display_skip(quarterword param, quarterword subtype)
{
if (param > 0) {
switch (display_skip_mode_par) {
case display_skip_default :
case display_skip_always :
- tex_tail_append(tex_new_param_glue_node(param, subtype));
break;
case display_skip_non_zero:
- if (! tex_glue_is_zero(glue_parameter(param))) {
- tex_tail_append(tex_new_param_glue_node(param, subtype));
- }
- break;
- case display_skip_ignore:
- break;
- default:
- /*tex > 3 reserved for future use */
- tex_tail_append(tex_new_param_glue_node(param, subtype));
- break;
- }
- }
-}
-
-inline static void tex_aux_inject_display_skip_after(quarterword param, quarterword subtype)
-{
- if (param > 0) {
- switch (display_skip_mode_par) {
- case display_skip_default :
- case display_skip_always :
- tex_tail_append(tex_new_param_glue_node(param, subtype));
- break;
- case display_skip_non_zero:
- if (! tex_glue_is_zero(glue_parameter(param))) {
- tex_tail_append(tex_new_param_glue_node(param, subtype));
+ if (tex_glue_is_zero(glue_parameter(param))) {
+ return;
+ } else {
+ break;
}
- break;
case display_skip_ignore:
- break;
+ return;
default:
/*tex > 3 reserved for future use */
- tex_tail_append(tex_new_param_glue_node(param, subtype));
break;
}
+ tex_tail_append(tex_new_param_glue_node(param, subtype));
}
}
@@ -4478,7 +4455,7 @@ static void tex_aux_finish_displayed_math(int atleft, halfword eqnumber, halfwor
tex_append_to_vlist(eqnumber, lua_key_index(equation_number), NULL);
tex_tail_append(tex_new_penalty_node(infinite_penalty, equation_number_penalty_subtype));
} else {
- tex_aux_inject_display_skip_before(glue_above, subtype_above);
+ tex_aux_inject_display_skip(glue_above, subtype_above);
}
if (number_width != 0) {
scaled shift = line_width - equation_width - number_width - displacement;
@@ -4542,7 +4519,7 @@ static void tex_aux_finish_displayed_math(int atleft, halfword eqnumber, halfwor
box_shift_amount(equation_box) = indent + displacement;
}
/*tex check for prev: */
- tex_append_to_vlist(equation_box, lua_key_index(equation), NULL);
+ tex_append_to_vlist(equation_box, lua_key_index(equation), NULL); /* eqbox has the formula */
if (eqnumber && number_width == 0 && ! atleft) {
tex_tail_append(tex_new_penalty_node(infinite_penalty, equation_number_penalty_subtype));
/* if (math_direction_par == dir_lefttoright) { */
@@ -4575,7 +4552,7 @@ static void tex_aux_finish_displayed_math(int atleft, halfword eqnumber, halfwor
cur_list.tail = pre_migrate_tail;
}
tex_tail_append(tex_new_penalty_node(post_display_penalty_par, after_display_penalty_subtype));
- tex_aux_inject_display_skip_after(glue_below, subtype_below);
+ tex_aux_inject_display_skip(glue_below, subtype_below);
tex_aux_resume_after_display();
}
@@ -4591,7 +4568,8 @@ static void tex_aux_finish_displayed_math(int atleft, halfword eqnumber, halfwor
*/
-void tex_run_math_shift(void) {
+void tex_run_math_shift(void)
+{
if (cur_group == math_shift_group) {
/*tex box containing equation number */
halfword eqnumber = null;
@@ -4613,7 +4591,7 @@ void tex_run_math_shift(void) {
break;
}
}
- if (cur_list.mode == -mode) {
+ if (cur_list.mode == -mode) { // todo: symbolic
/*tex end of equation number */
AGAIN:
switch (cur_cmd) {
@@ -4641,7 +4619,7 @@ void tex_run_math_shift(void) {
tex_confusion("after math");
}
}
- if (mode < 0) {
+ if (mode < 0) { // mode == inline_mmode
/*tex
The |unsave| is done after everything else here; hence an appearance of |\mathsurround|
@@ -4780,13 +4758,13 @@ void tex_finish_display_alignment(halfword head, halfword tail, halfword prevdep
}
tex_pop_nest();
tex_tail_append(tex_new_penalty_node(pre_display_penalty_par, before_display_penalty_subtype));
- tex_aux_inject_display_skip_before(above_display_skip_code, above_display_skip_glue);
+ tex_aux_inject_display_skip(above_display_skip_code, above_display_skip_glue);
node_next(cur_list.tail) = head;
if (head && tail) {
cur_list.tail = tail;
}
tex_tail_append(tex_new_penalty_node(post_display_penalty_par, after_display_penalty_subtype));
- tex_aux_inject_display_skip_after(below_display_skip_code, below_display_skip_glue);
+ tex_aux_inject_display_skip(below_display_skip_code, below_display_skip_glue);
cur_list.prev_depth = prevdepth;
tex_aux_resume_after_display();
}
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index e0d82c85c..7a8df6ecd 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{2023.01.04 11:32}
+\newcontextversion{2023.01.05 17:43}
%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 d238a096c..5d3930dec 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{2023.01.04 11:32}
+\edef\contextversion{2023.01.05 17:43}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-fr.mkii b/tex/context/base/mkii/mult-fr.mkii
index c78135316..aa5c33391 100644
--- a/tex/context/base/mkii/mult-fr.mkii
+++ b/tex/context/base/mkii/mult-fr.mkii
@@ -591,6 +591,7 @@
\setinterfacevariable{temporary}{temporaire}
\setinterfacevariable{test}{test}
\setinterfacevariable{text}{texte}
+\setinterfacevariable{textdisplay}{textdisplay}
\setinterfacevariable{textnote}{notetexte}
\setinterfacevariable{three}{trois}
\setinterfacevariable{thursday}{jeudi}
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 4d1a5f344..a05a08583 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2023.01.04 11:32}
+\newcontextversion{2023.01.05 17:43}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 6df85ce83..e9ae230e4 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -49,7 +49,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2023.01.04 11:32}
+\edef\contextversion{2023.01.05 17:43}
%D Kind of special:
diff --git a/tex/context/base/mkiv/grph-raw.lua b/tex/context/base/mkiv/grph-raw.lua
index 62e96fcc9..73f0d5175 100644
--- a/tex/context/base/mkiv/grph-raw.lua
+++ b/tex/context/base/mkiv/grph-raw.lua
@@ -22,7 +22,8 @@ function figures.bitmapimage(t)
local xresolution = tonumber(t.xresolution)
local yresolution = tonumber(t.yresolution)
if data and xresolution and yresolution then
- local width, height = t.width or "", t.height or ""
+ local width = t.width or ""
+ local height = t.height or ""
local n = backends.nodeinjections.injectbitmap {
xresolution = xresolution,
yresolution = yresolution,
@@ -30,9 +31,11 @@ function figures.bitmapimage(t)
height = height ~= "" and texsp(height) or nil,
data = data,
colorspace = t.colorspace,
+ format = t.format,
}
if n then
- context.hbox(n)
+ -- context.hpack(n)
+ context(nodes.hpack(n))
else
report_bitmap("format no supported by backend")
end
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index f634b088d..0b5d11035 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 e46cc1d23..ee5dbae6e 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/util-tab.lua b/tex/context/base/mkiv/util-tab.lua
index 64fa1af4f..58ca3bcb1 100644
--- a/tex/context/base/mkiv/util-tab.lua
+++ b/tex/context/base/mkiv/util-tab.lua
@@ -432,7 +432,7 @@ else
local v = t[0]
if v then
m = m + 1
- r[m] = "[0]='"
+ r[m] = "[0]="
if type(v) == "table" then
fastserialize(v)
else
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 1a0c93600..c6fec2f2e 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2023.01.04 11:32}
+\newcontextversion{2023.01.05 17:43}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index af85d279a..b84e3b86d 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2023.01.04 11:32}
+\immutable\edef\contextversion{2023.01.05 17:43}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/lpdf-grp.lmt b/tex/context/base/mkxl/lpdf-grp.lmt
index 7c4001467..48853ab83 100644
--- a/tex/context/base/mkxl/lpdf-grp.lmt
+++ b/tex/context/base/mkxl/lpdf-grp.lmt
@@ -106,70 +106,155 @@ end
-- we could derive the colorspace if we strip the data
-- and divide by x*y
-local template = "q BI %s ID %s > EI Q"
-local factor = 72/300
+-- todo: map onto png
-function nodeinjections.injectbitmap(t)
- -- encoding is ascii hex, no checking here
- local xresolution, yresolution = t.xresolution or 0, t.yresolution or 0
- if xresolution == 0 or yresolution == 0 then
- return -- fatal error
- end
- local colorspace = t.colorspace
- if colorspace ~= "rgb" and colorspace ~= "cmyk" and colorspace ~= "gray" then
- -- not that efficient but ok
- local d = gsub(t.data,"[^0-9a-f]","")
- local b = math.round(#d / (xresolution * yresolution))
- if b == 2 then
- colorspace = "gray"
- elseif b == 6 then
- colorspace = "rgb"
- elseif b == 8 then
- colorspace = "cmyk"
+
+do
+
+ local template = "q BI %s ID %s > EI Q"
+ local factor = 72/300
+
+ local methods = { }
+
+ methods.hex = function(t)
+ -- encoding is ascii hex, no checking here
+ local xresolution, yresolution = t.xresolution or 0, t.yresolution or 0
+ if xresolution == 0 or yresolution == 0 then
+ return -- fatal error
+ end
+ local colorspace = t.colorspace
+ if colorspace ~= "rgb" and colorspace ~= "cmyk" and colorspace ~= "gray" then
+ -- not that efficient but ok
+ local d = gsub(t.data,"[^0-9a-f]","")
+ local b = round(#d / (xresolution * yresolution))
+ if b == 2 then
+ colorspace = "gray"
+ elseif b == 6 then
+ colorspace = "rgb"
+ elseif b == 8 then
+ colorspace = "cmyk"
+ end
+ end
+ colorspace = lpdf.colorspaceconstants[colorspace]
+ if not colorspace then
+ return -- fatal error
end
+ --the original length L is required for pdf 2.0 (4096 max)
+ local d = pdfdictionary {
+ W = xresolution,
+ H = yresolution,
+ CS = colorspace,
+ BPC = 8,
+ F = pdfconstant("AHx"),
+ -- CS = nil,
+ -- BPC = 1,
+ -- IM = true,
+ }
+ -- for some reasons it only works well if we take a 1bp boundingbox
+ local urx, ury = 1/basepoints, 1/basepoints
+ -- urx = (xresolution/300)/basepoints
+ -- ury = (yresolution/300)/basepoints
+ local width, height = t.width or 0, t.height or 0
+ if width == 0 and height == 0 then
+ width = factor * xresolution / basepoints
+ height = factor * yresolution / basepoints
+ elseif width == 0 then
+ width = height * xresolution / yresolution
+ elseif height == 0 then
+ height = width * yresolution / xresolution
+ end
+ local a = pdfdictionary {
+ BBox = pdfarray { 0, 0, round(urx * basepoints), round(ury * basepoints) }
+ }
+ local image = createimage {
+ stream = formatters[template](d(),t.data),
+ width = width,
+ height = height,
+ bbox = { 0, 0, round(urx), round(ury) },
+ attr = a(),
+ nobbox = true,
+ }
+ return wrapimage(image)
end
- colorspace = lpdf.colorspaceconstants[colorspace]
- if not colorspace then
- return -- fatal error
+
+ local zlibcompress = xzip.compress
+ local lpegmatch = lpeg.match
+ local compresslevel = 3
+ local pattern = lpeg.Cs((lpeg.patterns.space/"" + lpeg.patterns.hextobyte)^0)
+
+ methods.png = function(t)
+ -- encoding is ascii hex, no checking here
+ local xresolution = t.xresolution or 0
+ local yresolution = t.yresolution or 0
+ local data = t.data or ""
+ if xresolution == 0 or yresolution == 0 or data == "" then
+ return -- fatal error
+ end
+ local colorspace = t.colorspace
+ local colordepth = 8
+ local colors = 1
+ if colorspace ~= "rgb" and colorspace ~= "gray" then
+ -- not that efficient but ok
+ local d = gsub(t.data,"[^0-9a-f]","")
+ local b = round(#d / (xresolution * yresolution))
+ if b == 2 then
+ colorspace = "gray"
+ colors = 1
+ elseif b == 6 then
+ colorspace = "rgb"
+ colors = 3
+ elseif b == 8 then
+ return -- for now, todo: convert
+ end
+ end
+ colorspace = lpdf.colorspaceconstants[colorspace]
+ if not colorspace then
+ return -- fatal error
+ end
+ local width = t.width
+ local height = t.height
+ if width == 0 and height == 0 then
+ width = factor * xresolution / basepoints
+ height = factor * yresolution / basepoints
+ elseif width == 0 then
+ width = height * xresolution / yresolution
+ elseif height == 0 then
+ height = width * yresolution / xresolution
+ end
+ data = zlibcompress(lpegmatch(pattern,data),compresslevel)
+ local xobject = pdfdictionary {
+ Type = pdfconstant("XObject"),
+ Subtype = pdfconstant("Image"),
+ Width = xresolution,
+ Height = yresolution,
+ BitsPerComponent = 8,
+ ColorSpace = colorspace,
+ Length = #data,
+ Filter = pdfconstant("FlateDecode"),
+ }
+ local image = createimage {
+-- bbox = { 0, 0, round(width/xresolution), round(height/yresolution) }, -- mandate
+ bbox = { 0, 0, round(width), round(height) }, -- mandate
+ width = round(width),
+ height = round(height),
+ nolength = true,
+ nobbox = true,
+ notype = true,
+ stream = data,
+ attr = xobject(),
+ }
+ return wrapimage(image)
end
- local d = pdfdictionary {
- W = xresolution,
- H = yresolution,
- CS = colorspace,
- BPC = 8,
- F = pdfconstant("AHx"),
- -- CS = nil,
- -- BPC = 1,
- -- IM = true,
- }
- -- for some reasons it only works well if we take a 1bp boundingbox
- local urx, ury = 1/basepoints, 1/basepoints
- -- urx = (xresolution/300)/basepoints
- -- ury = (yresolution/300)/basepoints
- local width, height = t.width or 0, t.height or 0
- if width == 0 and height == 0 then
- width = factor * xresolution / basepoints
- height = factor * yresolution / basepoints
- elseif width == 0 then
- width = height * xresolution / yresolution
- elseif height == 0 then
- height = width * yresolution / xresolution
+
+ function nodeinjections.injectbitmap(t)
+ if t.colorspace == "cmyk" then
+ return methods.hex(t)
+ else
+ return (methods[t.format or "hex"] or methods.hex)(t)
+ end
end
- local a = pdfdictionary {
- BBox = pdfarray { 0, 0, urx * basepoints, ury * basepoints }
- }
- local image = createimage {
- stream = formatters[template](d(),t.data),
- width = width,
- height = height,
- bbox = { 0, 0, urx, ury },
- attr = a(),
- nobbox = true,
- }
- return wrapimage(image)
-end
--- general graphic helpers
+end
function codeinjections.setfigurealternative(data,figure)
local request = data.request
diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt
index 57f5b6037..a8608cc7b 100644
--- a/tex/context/base/mkxl/lpdf-lmt.lmt
+++ b/tex/context/base/mkxl/lpdf-lmt.lmt
@@ -1268,8 +1268,8 @@ local flushimage do
usedxforms[objnum] = true
pdf_goto_pagemode()
calc_pdfpos(pos_h,pos_v)
- tx = cmtx * bpfactor
- ty = cmty * bpfactor
+ local tx = cmtx * bpfactor
+ local ty = cmty * bpfactor
b = b + 1 ; buffer[b] = s_b
-- b = b + 1 ; buffer[b] = f_cm(rx,0,0,ry,tx,ty)
b = b + 1 ; buffer[b] = f_cz(rx, ry,tx,ty)
@@ -1456,7 +1456,6 @@ local flushimage do
-- to be sorted out
-- local ty = pos_v - depth
local ty = pos_v -- we assume that depth is dealt with in the caller (for now)
-
usedximages[index] = objnum
pdf_goto_pagemode()
diff --git a/tex/context/base/mkxl/meta-ini.mkxl b/tex/context/base/mkxl/meta-ini.mkxl
index 9a8b3f7f7..16b97e8cc 100644
--- a/tex/context/base/mkxl/meta-ini.mkxl
+++ b/tex/context/base/mkxl/meta-ini.mkxl
@@ -850,7 +850,7 @@
\expandafter\startMPoverlaydata_yes
\fi}
-\permanent\protected\def\startMPoverlaydata_nop#0\stopMPoverlaydata
+\permanent\protected\def\startMPoverlaydata_nop#-\stopMPoverlaydata
{}
\permanent\protected\def\startMPoverlaydata_yes#1\stopMPoverlaydata
diff --git a/tex/context/base/mkxl/mlib-pps.lmt b/tex/context/base/mkxl/mlib-pps.lmt
index 209656fbe..b8f448964 100644
--- a/tex/context/base/mkxl/mlib-pps.lmt
+++ b/tex/context/base/mkxl/mlib-pps.lmt
@@ -1339,18 +1339,25 @@ end
local function bm_process(object,prescript,before,after)
local bm_xresolution = prescript.bm_xresolution
+ local bm_yresolution = prescript.bm_yresolution
if bm_xresolution then
- before[#before+1] = f_cm_b(cm(object))
+-- before[#before+1] = f_cm_b(cm(object))
+local sx, rx, ry, sy, tx, ty = cm(object)
+local postscript = object.postscript
before[#before+1] = function()
- figures.bitmapimage {
- xresolution = tonumber(bm_xresolution),
- yresolution = tonumber(prescript.bm_yresolution),
- width = 1/basepoints,
- height = 1/basepoints,
- data = object.postscript
- }
+context.MPLIBscaledcm(function()
+ figures.bitmapimage {
+ xresolution = tonumber(bm_xresolution),
+ yresolution = tonumber(bm_yresolution),
+ width = 1/basepoints,
+ height = 1/basepoints,
+ data = postscript,
+ format = "png",
+ }
+ end
+, sx, rx, ry, sy, tx, ty)
end
- before[#before+1] = s_cm_e
+-- before[#before+1] = s_cm_e
object.path = false
object.color = false
object.grouped = true
diff --git a/tex/context/base/mkxl/mlib-pps.mkxl b/tex/context/base/mkxl/mlib-pps.mkxl
index 39dafb2f6..521865e08 100644
--- a/tex/context/base/mkxl/mlib-pps.mkxl
+++ b/tex/context/base/mkxl/mlib-pps.mkxl
@@ -172,6 +172,23 @@
\box\MPbox
\endgroup}
+\permanent\protected\def\MPLIBscaledcm#1#2#3#4#5#6#7% 2-7: sx,rx,ry,sy,tx,ty
+ {\begingroup
+% \setbox\MPbox
+ \hpack\bgroup
+ \dotransformnextbox{#2}{#3}{#4}{#5}{#6}{#7}%
+ %\dotransformnextbox{\luaexpr{#2/10}}{\luaexpr{#3/10}}{\luaexpr{#4/10}}{\luaexpr{#5/10}}{\luaexpr{#6/10}}{\luaexpr{#7/10}}%
+ \vpack to \zeropoint\bgroup
+ \vss
+ \hcontainer to \zeropoint \bgroup
+ #1\hss % used for mp bitmaps
+ %\fastsxsy{10}{10}{#1}\hss
+ \egroup
+ \egroup
+ \egroup
+% \smashbox\MPbox\box\MPbox
+ \endgroup}
+
\permanent\protected\def\MPLIBgraphictext#1% use at mp end
{\startTEXpage[\c!scale=10000]#1\stopTEXpage}
diff --git a/tex/context/base/mkxl/spac-chr.lmt b/tex/context/base/mkxl/spac-chr.lmt
index 7c8e02fb6..58071c431 100644
--- a/tex/context/base/mkxl/spac-chr.lmt
+++ b/tex/context/base/mkxl/spac-chr.lmt
@@ -193,6 +193,7 @@ local methods = {
[0x001E] = function(head,current) -- kind of special
local next = getnext(current)
if next and getid(next) == glue_code and getsubtype(next) == spaceskip_code then
+ -- remove when no valid character following
local nextnext = getnext(next)
if nextnext then
local char, font = isglyph(nextnext)
@@ -200,6 +201,14 @@ local methods = {
remove_node(head,next,true)
end
end
+ else
+ -- insert when valid character following
+ local char, font = isglyph(next)
+ if char and canhavespace[char] then
+ local p = fontparameters[font]
+ head, current = insertnodebefore(head,current,new_glue(p.space,p.spacestretch,p.spaceshrink))
+ end
+
end
return head, current
end,
diff --git a/tex/context/base/mkxl/syst-aux.mkxl b/tex/context/base/mkxl/syst-aux.mkxl
index cf39c1cf8..2b87f4b3d 100644
--- a/tex/context/base/mkxl/syst-aux.mkxl
+++ b/tex/context/base/mkxl/syst-aux.mkxl
@@ -876,9 +876,9 @@
\popmacro\commalistcommand}
% \let\syst_helpers_process_comma_item_next_a \syst_helpers_process_comma_item_next
-% \def\syst_helpers_process_comma_item_next_b#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
-% \def\syst_helpers_process_comma_item_next_c#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
-% \def\syst_helpers_process_comma_item_gobble#0\ignorearguments{}
+% \def\syst_helpers_process_comma_item_next_b#-\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
+% \def\syst_helpers_process_comma_item_next_c#-\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
+% \def\syst_helpers_process_comma_item_gobble#-\ignorearguments{}
\let\syst_helpers_process_comma_item_next_a \syst_helpers_process_comma_item_next
\def\syst_helpers_process_comma_item_next_b#-\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
@@ -1237,7 +1237,7 @@
% \fi}%
% \normalexpanded{\syst_helpers_do_do_if_not_in_string#1}\s!e_o_t_token\ignorearguments\ignorearguments}
%
-% \def\syst_helpers_do_if_in_string_else_yes#0\ignorearguments\ignorearguments#2#0{#2}
+% \def\syst_helpers_do_if_in_string_else_yes#0\ignorearguments\ignorearguments#2#0{#2} % of #- and #1
% \def\syst_helpers_do_if_in_string_else_nop#0\ignorearguments#0#3{#3}
% \def\syst_helpers_do_if_in_string_yes #0\ignorearguments\ignorearguments#2{#2}
% \def\syst_helpers_do_if_in_string_nop #0\ignorearguments#0{}
@@ -3360,7 +3360,7 @@
{\normalexpanded{\recurseaction{\recurselevel}{\the\outerrecurse}}%
\endofloop}
-\protected\def\syst_helpers_loop_nop#0%
+\protected\def\syst_helpers_loop_nop#-%
{\enforced\let\endofloop\syst_helpers_loop
\globalpopmacro\recurselevel
\globalpopmacro\recurseaction
@@ -3369,7 +3369,7 @@
\permanent\protected\def\exitloop % \exitloop quits at end
{\enforced\let\endofloop\syst_helpers_loop_nop}
-\permanent\protected\def\exitloopnow#0\endofloop % \exitloopnow quits directly
+\permanent\protected\def\exitloopnow#-\endofloop % \exitloopnow quits directly
{\syst_helpers_loop_nop}
%D The loop is executed at least once, so beware of situations like:
@@ -6854,7 +6854,7 @@
%D
%D \typebuffer \startpacked \getbuffer \stoppacked
-\def\syst_helpers_wipe_tokens_nop#0^^04{}%
+\def\syst_helpers_wipe_tokens_nop#-^^04{}%
\permanent\def\wipetokens#1#2%
{\beginlocalcontrol
diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl
index 253d3c411..eec1edf9c 100644
--- a/tex/context/base/mkxl/tabl-tbl.mkxl
+++ b/tex/context/base/mkxl/tabl-tbl.mkxl
@@ -2704,12 +2704,11 @@
{}
\appendtoks
- \enforced\let\TB\tabl_tabulate_TB_yes
+ \enforced\let\TB\tabl_tabulate_TB_nop
\to \t_tabl_tabulate_initializers_first
-
\appendtoks
- \enforced\let\TB\tabl_tabulate_TB_nop
+ \enforced\let\TB\tabl_tabulate_TB_yes
\to \t_tabl_tabulate_initializers_second
% %D Between alignment lines certain rules apply, and even a simple test can mess
diff --git a/tex/context/interface/mkii/keys-fr.xml b/tex/context/interface/mkii/keys-fr.xml
index 89a549482..f5474769a 100644
--- a/tex/context/interface/mkii/keys-fr.xml
+++ b/tex/context/interface/mkii/keys-fr.xml
@@ -594,6 +594,7 @@
<cd:variable name='temporary' value='temporaire'/>
<cd:variable name='test' value='test'/>
<cd:variable name='text' value='texte'/>
+ <cd:variable name='textdisplay' value='textdisplay'/>
<cd:variable name='textnote' value='notetexte'/>
<cd:variable name='three' value='trois'/>
<cd:variable name='thursday' value='jeudi'/>
diff --git a/tex/context/modules/mkxl/m-tikz-pgfplots.tex b/tex/context/modules/mkxl/m-tikz-pgfplots.tex
new file mode 100644
index 000000000..1dd06b8b2
--- /dev/null
+++ b/tex/context/modules/mkxl/m-tikz-pgfplots.tex
@@ -0,0 +1,46 @@
+%D See m-tikz.mkxl for comments.
+
+\startmodule [pgfplots]
+
+\writestatus{loading}{ConTeXt User Module / Pgfplots}
+
+\tikzinputfile{pgfplots.revision.tex}
+
+\usetikzlibrary[plotmarks]
+
+\tikzinputfile{pgfplots.code.tex}
+
+\def\pgfplotsincludegraphics[#1]#2%
+ {\externalfigure[#2][#1]}
+
+\starttikzsettings
+ \pgfkeys{/pgfplots/plot graphics/includegraphics cmd=\pgfplotsincludegraphics}
+\stoptikzsettings
+
+\unprotect
+
+\let\pgfplots@ORIG@tikz@installcommands@before@context\tikz@installcommands
+
+\def\tikz@installcommands{%
+ \pgfplots@ORIG@tikz@installcommands@before@context
+ %
+ \let\startaxis=\pgfplots@environment@axis
+ \let\stopaxis=\endpgfplots@environment@axis
+ %
+ \let\startsemilogxaxis=\pgfplots@environment@semilogxaxis
+ \let\stopsemilogxaxis=\endpgfplots@environment@semilogxaxis
+ %
+ \let\startsemilogyaxis=\pgfplots@environment@semilogyaxis
+ \let\stopsemilogyaxis=\endpgfplots@environment@semilogyaxis
+ %
+ \let\startloglogaxis=\pgfplots@environment@loglogaxis
+ \let\stoploglogaxis=\endpgfplots@environment@loglogaxis
+ %
+ \def\startpgfplotsinterruptdatabb{\pgfplotsinterruptdatabb}%
+ \def\stoppgfplotsinterruptdatabb{\endpgfplotsinterruptdatabb}%
+}
+
+\protect
+
+\stopmodule
+
diff --git a/tex/context/modules/mkxl/m-tikz-pgfplotstable.tex b/tex/context/modules/mkxl/m-tikz-pgfplotstable.tex
new file mode 100644
index 000000000..acc3309a1
--- /dev/null
+++ b/tex/context/modules/mkxl/m-tikz-pgfplotstable.tex
@@ -0,0 +1,12 @@
+%D See m-tikz.mkxl for comments.
+
+\startmodule [pgfplotstable]
+
+\writestatus{loading}{ConTeXt User Module / Pgfplotstable}
+
+\usemodule[pgfplots]
+
+\tikzinputfile{pgfplotstable.code.tex}%
+
+\stopmodule
+
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index df0e9399b..ee3ab219c 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 : 2023-01-04 11:32
+-- merge date : 2023-01-05 17:43
do -- begin closure to overcome local limits and interference