summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex')
-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
23 files changed, 270 insertions, 91 deletions
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