From 21898810cf14ff6fedfb47a00704173bf668e49b Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 27 Mar 2021 20:06:16 +0100 Subject: 2021-03-27 19:06:00 --- metapost/context/base/mpxl/mp-mlib.mpxl | 2 +- scripts/context/lua/mtx-context.lua | 13 ++-- scripts/context/lua/mtxrun.lua | 67 ++++++++++------- scripts/context/stubs/mswin/mtxrun.lua | 67 ++++++++++------- scripts/context/stubs/unix/mtxrun | 67 ++++++++++------- scripts/context/stubs/win64/mtxrun.lua | 67 ++++++++++------- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/luat-cnf.lua | 2 +- tex/context/base/mkiv/mtx-context-setters.tex | 32 +++++++++ tex/context/base/mkiv/status-files.pdf | Bin 25398 -> 25395 bytes tex/context/base/mkiv/status-lua.pdf | Bin 257165 -> 257329 bytes tex/context/base/mkiv/trac-set.lua | 62 ++++++++++------ tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/font-ots.lmt | 23 +++++- tex/context/base/mkxl/lang-hup.lmt | 42 +++++++---- tex/context/base/mkxl/lang-ini.lmt | 80 ++++++++++++++++++++- tex/context/base/mkxl/luat-cod.lmt | 2 +- tex/context/base/mkxl/mlib-svg.lmt | 9 +-- tex/context/base/mkxl/trac-vis.lmt | 3 + tex/context/modules/mkiv/x-mathml.mkiv | 4 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 25 files changed, 389 insertions(+), 167 deletions(-) create mode 100644 tex/context/base/mkiv/mtx-context-setters.tex diff --git a/metapost/context/base/mpxl/mp-mlib.mpxl b/metapost/context/base/mpxl/mp-mlib.mpxl index ed3f79be5..753fdff74 100644 --- a/metapost/context/base/mpxl/mp-mlib.mpxl +++ b/metapost/context/base/mpxl/mp-mlib.mpxl @@ -1447,7 +1447,7 @@ permanent asgroup ; pair mfun_pattern_s ; mfun_pattern_s := origin ; % auto scale to fraction of shape (svg) boolean mfun_pattern_f ; mfun_pattern_f := false ; % anchor or not (normally we do that) -def withpatternscale primary s = hide (mfun_pattern_s := s ;) enddef ; +def withpatternscale primary s = hide (mfun_pattern_s := paired s ;) enddef ; def withpatternfloat primary s = hide (mfun_pattern_f := s ;) enddef ; primarydef t withpattern p = diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index 7ae350111..1f315e007 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -1637,19 +1637,16 @@ end -- todo: we need to do a dummy run -function scripts.context.trackers() - environment.files = { resolvers.findfile("m-trackers.mkiv") } +local function showsetter() + environment.files = { resolvers.findfile("mtx-context-setters.tex") } multipass_nofruns = 1 setargument("purgeall",true) scripts.context.run() end -function scripts.context.directives() - environment.files = { resolvers.findfile("m-directives.mkiv") } - multipass_nofruns = 1 - setargument("purgeall",true) - scripts.context.run() -end +scripts.context.trackers = showsetter +scripts.context.directives = showsetter +scripts.context.experiments = showsetter function scripts.context.logcategories() environment.files = { resolvers.findfile("m-logcategories.mkiv") } diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 1320e2600..33cad61b1 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -12809,7 +12809,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 13901, stripped down to: 9175 +-- original size: 14562, stripped down to: 9638 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -12952,6 +12952,9 @@ local function register_setter(t,what,...) end local s=fnc fnc=function(value) set(t,s,value) end + elseif typ=="table" then + functions.values=fnc + fnc=nil elseif typ~="function" then fnc=nil end @@ -12996,35 +12999,42 @@ local function list_setter(t) end return user,system end -local function show_setter(t) +local function show_setter(t,pattern) local list=list_setter(t) t.report() for k=1,#list do local name=list[k] - local functions=t.data[name] - if functions then - local value=functions.value - local default=functions.default - local modules=#functions - if default==nil then - default="unset" - elseif type(default)=="table" then - default=concat(default,"|") - else - default=tostring(default) + if not pattern or find(name,pattern) then + local functions=t.data[name] + if functions then + local value=functions.value + local default=functions.default + local values=functions.values + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + if values then + local v={} for i=1,#values do v[i]=tostring(values[i]) end + t.report(" values : % t",v) end - if value==nil then - value="unset" - elseif type(value)=="table" then - value=concat(value,"|") - else - value=tostring(value) + t.report() end - t.report(name) - t.report(" modules : %i",modules) - t.report(" default : %s",default) - t.report(" value : %s",value) - t.report() end end end @@ -13043,6 +13053,10 @@ local function setter_value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end +local function setter_values(setter,name) + local d=setter.data[name] + return d and d.values +end local function new_setter(name) local setter setter={ @@ -13057,6 +13071,7 @@ local function new_setter(name) show=function(...) show_setter (setter,...) end, default=function(...) return setter_default (setter,...) end, value=function(...) return setter_value (setter,...) end, + values=function(...) return setter_values (setter,...) end, } data[name]=setter return setter @@ -25842,8 +25857,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 libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1025906 --- stripped bytes : 405610 +-- original bytes : 1026567 +-- stripped bytes : 405808 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 1320e2600..33cad61b1 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -12809,7 +12809,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 13901, stripped down to: 9175 +-- original size: 14562, stripped down to: 9638 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -12952,6 +12952,9 @@ local function register_setter(t,what,...) end local s=fnc fnc=function(value) set(t,s,value) end + elseif typ=="table" then + functions.values=fnc + fnc=nil elseif typ~="function" then fnc=nil end @@ -12996,35 +12999,42 @@ local function list_setter(t) end return user,system end -local function show_setter(t) +local function show_setter(t,pattern) local list=list_setter(t) t.report() for k=1,#list do local name=list[k] - local functions=t.data[name] - if functions then - local value=functions.value - local default=functions.default - local modules=#functions - if default==nil then - default="unset" - elseif type(default)=="table" then - default=concat(default,"|") - else - default=tostring(default) + if not pattern or find(name,pattern) then + local functions=t.data[name] + if functions then + local value=functions.value + local default=functions.default + local values=functions.values + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + if values then + local v={} for i=1,#values do v[i]=tostring(values[i]) end + t.report(" values : % t",v) end - if value==nil then - value="unset" - elseif type(value)=="table" then - value=concat(value,"|") - else - value=tostring(value) + t.report() end - t.report(name) - t.report(" modules : %i",modules) - t.report(" default : %s",default) - t.report(" value : %s",value) - t.report() end end end @@ -13043,6 +13053,10 @@ local function setter_value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end +local function setter_values(setter,name) + local d=setter.data[name] + return d and d.values +end local function new_setter(name) local setter setter={ @@ -13057,6 +13071,7 @@ local function new_setter(name) show=function(...) show_setter (setter,...) end, default=function(...) return setter_default (setter,...) end, value=function(...) return setter_value (setter,...) end, + values=function(...) return setter_values (setter,...) end, } data[name]=setter return setter @@ -25842,8 +25857,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 libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1025906 --- stripped bytes : 405610 +-- original bytes : 1026567 +-- stripped bytes : 405808 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 1320e2600..33cad61b1 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -12809,7 +12809,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 13901, stripped down to: 9175 +-- original size: 14562, stripped down to: 9638 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -12952,6 +12952,9 @@ local function register_setter(t,what,...) end local s=fnc fnc=function(value) set(t,s,value) end + elseif typ=="table" then + functions.values=fnc + fnc=nil elseif typ~="function" then fnc=nil end @@ -12996,35 +12999,42 @@ local function list_setter(t) end return user,system end -local function show_setter(t) +local function show_setter(t,pattern) local list=list_setter(t) t.report() for k=1,#list do local name=list[k] - local functions=t.data[name] - if functions then - local value=functions.value - local default=functions.default - local modules=#functions - if default==nil then - default="unset" - elseif type(default)=="table" then - default=concat(default,"|") - else - default=tostring(default) + if not pattern or find(name,pattern) then + local functions=t.data[name] + if functions then + local value=functions.value + local default=functions.default + local values=functions.values + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + if values then + local v={} for i=1,#values do v[i]=tostring(values[i]) end + t.report(" values : % t",v) end - if value==nil then - value="unset" - elseif type(value)=="table" then - value=concat(value,"|") - else - value=tostring(value) + t.report() end - t.report(name) - t.report(" modules : %i",modules) - t.report(" default : %s",default) - t.report(" value : %s",value) - t.report() end end end @@ -13043,6 +13053,10 @@ local function setter_value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end +local function setter_values(setter,name) + local d=setter.data[name] + return d and d.values +end local function new_setter(name) local setter setter={ @@ -13057,6 +13071,7 @@ local function new_setter(name) show=function(...) show_setter (setter,...) end, default=function(...) return setter_default (setter,...) end, value=function(...) return setter_value (setter,...) end, + values=function(...) return setter_values (setter,...) end, } data[name]=setter return setter @@ -25842,8 +25857,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 libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1025906 --- stripped bytes : 405610 +-- original bytes : 1026567 +-- stripped bytes : 405808 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 1320e2600..33cad61b1 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -12809,7 +12809,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 13901, stripped down to: 9175 +-- original size: 14562, stripped down to: 9638 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -12952,6 +12952,9 @@ local function register_setter(t,what,...) end local s=fnc fnc=function(value) set(t,s,value) end + elseif typ=="table" then + functions.values=fnc + fnc=nil elseif typ~="function" then fnc=nil end @@ -12996,35 +12999,42 @@ local function list_setter(t) end return user,system end -local function show_setter(t) +local function show_setter(t,pattern) local list=list_setter(t) t.report() for k=1,#list do local name=list[k] - local functions=t.data[name] - if functions then - local value=functions.value - local default=functions.default - local modules=#functions - if default==nil then - default="unset" - elseif type(default)=="table" then - default=concat(default,"|") - else - default=tostring(default) + if not pattern or find(name,pattern) then + local functions=t.data[name] + if functions then + local value=functions.value + local default=functions.default + local values=functions.values + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + if values then + local v={} for i=1,#values do v[i]=tostring(values[i]) end + t.report(" values : % t",v) end - if value==nil then - value="unset" - elseif type(value)=="table" then - value=concat(value,"|") - else - value=tostring(value) + t.report() end - t.report(name) - t.report(" modules : %i",modules) - t.report(" default : %s",default) - t.report(" value : %s",value) - t.report() end end end @@ -13043,6 +13053,10 @@ local function setter_value(setter,name) local d=setter.data[name] return d and (d.value or d.default) end +local function setter_values(setter,name) + local d=setter.data[name] + return d and d.values +end local function new_setter(name) local setter setter={ @@ -13057,6 +13071,7 @@ local function new_setter(name) show=function(...) show_setter (setter,...) end, default=function(...) return setter_default (setter,...) end, value=function(...) return setter_value (setter,...) end, + values=function(...) return setter_values (setter,...) end, } data[name]=setter return setter @@ -25842,8 +25857,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 libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1025906 --- stripped bytes : 405610 +-- original bytes : 1026567 +-- stripped bytes : 405808 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 160f34997..8fd36b843 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{2021.03.25 13:59} +\newcontextversion{2021.03.27 19:03} %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 99edd79c5..4f3ab902a 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{2021.03.25 13:59} +\edef\contextversion{2021.03.27 19:03} %D For those who want to use this: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index b05ae7ee2..cd9476787 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{2021.03.25 13:59} +\newcontextversion{2021.03.27 19:03} %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 b1d8cad34..5e957e8bf 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.03.25 13:59} +\edef\contextversion{2021.03.27 19:03} %D Kind of special: diff --git a/tex/context/base/mkiv/luat-cnf.lua b/tex/context/base/mkiv/luat-cnf.lua index 16448c429..f61ec43d2 100644 --- a/tex/context/base/mkiv/luat-cnf.lua +++ b/tex/context/base/mkiv/luat-cnf.lua @@ -24,7 +24,7 @@ texconfig.expand_depth = 10000 texconfig.half_error_line = 125 texconfig.max_print_line = 100000 texconfig.max_strings = 500000 -texconfig.hash_extra = 200000 +texconfig.hash_extra = 250000 texconfig.function_size = 32768 texconfig.properties_size = 10000 diff --git a/tex/context/base/mkiv/mtx-context-setters.tex b/tex/context/base/mkiv/mtx-context-setters.tex new file mode 100644 index 000000000..3201ae3ba --- /dev/null +++ b/tex/context/base/mkiv/mtx-context-setters.tex @@ -0,0 +1,32 @@ +%D \module +%D [ file=mtx-context-setters, +%D version=0000.00.00, +%D title=\CONTEXT\ Extra Trickry, +%D subtitle=Show Trackers, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +% begin help +% +% usage: context --extra=setters [--pattern=] [trackers|directives|experiments] +% +% --pattern : filter by pattern +% --trackers : show trackers +% --directives : show directives +% --experiments : show experiments +% +% end help + +\starttext + +\doifdocumentargument {trackers} { \ctxlua {trackers .show(environment.arguments.pattern) } } +\doifdocumentargument {directives} { \ctxlua {directives .show(environment.arguments.pattern) } } +\doifdocumentargument {experiments} { \ctxlua {experiments.show(environment.arguments.pattern) } } + +\stoptext + diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 68e0cd0a1..3f6d1a605 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 378081cf9..880d4b9c3 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/trac-set.lua b/tex/context/base/mkiv/trac-set.lua index 3974830fa..4edb5d129 100644 --- a/tex/context/base/mkiv/trac-set.lua +++ b/tex/context/base/mkiv/trac-set.lua @@ -165,6 +165,9 @@ local function register_setter(t,what,...) end local s = fnc -- else wrong reference fnc = function(value) set(t,s,value) end + elseif typ == "table" then + functions.values = fnc + fnc = nil elseif typ ~= "function" then fnc = nil end @@ -216,35 +219,42 @@ local function list_setter(t) -- pattern return user, system end -local function show_setter(t) +local function show_setter(t,pattern) local list = list_setter(t) t.report() for k=1,#list do local name = list[k] - local functions = t.data[name] - if functions then - local value = functions.value - local default = functions.default - local modules = #functions - if default == nil then - default = "unset" - elseif type(default) == "table" then - default = concat(default,"|") - else - default = tostring(default) + if not pattern or find(name,pattern) then + local functions = t.data[name] + if functions then + local value = functions.value + local default = functions.default + local values = functions.values + local modules = #functions + if default == nil then + default = "unset" + elseif type(default) == "table" then + default = concat(default,"|") + else + default = tostring(default) + end + if value == nil then + value = "unset" + elseif type(value) == "table" then + value = concat(value,"|") + else + value = tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + if values then + local v = { } for i=1,#values do v[i] = tostring(values[i]) end + t.report(" values : % t",v) end - if value == nil then - value = "unset" - elseif type(value) == "table" then - value = concat(value,"|") - else - value = tostring(value) + t.report() end - t.report(name) - t.report(" modules : %i",modules) - t.report(" default : %s",default) - t.report(" value : %s",value) - t.report() end end end @@ -272,6 +282,11 @@ local function setter_value(setter,name) return d and (d.value or d.default) end +local function setter_values(setter,name) + local d = setter.data[name] + return d and d.values +end + local function new_setter(name) -- we could use foo:bar syntax (but not used that often) local setter -- we need to access it in setter itself setter = { @@ -286,6 +301,7 @@ local function new_setter(name) -- we could use foo:bar syntax (but not used tha show = function(...) show_setter (setter,...) end, default = function(...) return setter_default (setter,...) end, value = function(...) return setter_value (setter,...) end, + values = function(...) return setter_values (setter,...) end, } data[name] = setter return setter diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index b79c1fe25..c09bfb8dc 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{2021.03.25 13:59} +\newcontextversion{2021.03.27 19:03} %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 09a0d8dff..3bb67e070 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{2021.03.25 13:59} +\immutable\edef\contextversion{2021.03.27 19:03} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index 6d9ee1a00..d9ff6635c 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -544,9 +544,9 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou setchar(start,char) return head, start end - if inhibited(start,stop) then - return head, start - end +-- if inhibited(start,stop) then +-- return head, start +-- end local prev = getprev(start) local next = getnext(stop) local comp = start @@ -777,7 +777,12 @@ end -- simplified. Anyway, it can be way messier: marks that get removed as well as -- marks that are kept. +-- Blocking is nasty: (ff\zwj l) vs (ff\zwj l) vs (ffl) vs (f\zwj fl} + function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skiphash) +if start and has_glyph_option(start,no_right_ligature_code) then + return head, start, false, false +end local current = getnext(start) if not current then return head, start, false, nil @@ -786,6 +791,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local startchar = getchar(start) if skiphash and skiphash[startchar] then while current do +if current and has_glyph_option(current,no_left_ligature_code) then + break +end local nxt, char = isnextchar(current,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char then local lg = ligature[char] @@ -819,6 +827,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local discfound = false local hasmarks = marks[startchar] while current do +if current and has_glyph_option(current,no_left_ligature_code) then + break +end local nxt, char, id = isnextchar(current,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char then if skiphash and skiphash[char] then @@ -1475,6 +1486,9 @@ assume rather stupid ligatures (no complex disc nodes).

-- compare to handlers.gsub_ligature which is more complex ... why function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) +if start and has_glyph_option(start,no_right_ligature_code) then + return head, start, false, 0, false +end local mapping = currentlookup.mapping if mapping == nil then mapping = getmapping(dataset,sequence,currentlookup) @@ -1493,6 +1507,9 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup local last = stop local nofreplacements = 1 while current do +if current and has_glyph_option(current,no_left_ligature_code) then + break +end -- todo: ischar ... can there really be disc nodes here? -- local id = getid(current) -- if id == disc_code then diff --git a/tex/context/base/mkxl/lang-hup.lmt b/tex/context/base/mkxl/lang-hup.lmt index 41548d84d..c42f0ffd8 100644 --- a/tex/context/base/mkxl/lang-hup.lmt +++ b/tex/context/base/mkxl/lang-hup.lmt @@ -56,7 +56,7 @@ local function collect(head) while head do local nxt, char, id = isnextglyph(head) if char then - local u = characters[id][char].unicode + local u = characters[id][char].unicode -- we could cache it if type(u) == "table" then for i=1,#u do -- word[#word+1] = utfchar(u[i]) @@ -196,19 +196,36 @@ trackers.register("hyphenation.applied.console", function(v) end end) +-- local c, f = isglyph(current) +-- local char = chardata[f][c] +-- if char and type(char.unicode) == "table" then -- hackery test + +local ligature_code = 0x8000 + nodes.glyphcodes.ligature +local ligature_mode = false + +local color_n = { "red", "green", "blue" } +local color_l = { "darkred", "darkgreen", "darkblue" } + function nodes.handlers.visualizehyphenation(head) for current, id, subtype, list in nexthlist, head do if list and subtype == line_code then - for n in nextglyph, list do - local d = getdiscpart(n) - if d == 0 then - -- nothing - elseif d == 1 then - setcolor(n,"red") -- pre - elseif d == 2 then - setcolor(n,"blue") -- post - elseif d == 3 then - setcolor(n,"green") -- replace + if ligature_mode then + for n in nextglyph, list do + local d = getdiscpart(n) + if d > 0 and d < 4 then + if getsubtype(n) == ligature_code then + setcolor(n,color_l[d]) + else + setcolor(n,color_n[d]) + end + end + end + else + for n in nextglyph, list do + local d = getdiscpart(n) + if d > 0 and d < 4 then + setcolor(n,color_n[d]) + end end end end @@ -216,6 +233,7 @@ function nodes.handlers.visualizehyphenation(head) return head end -trackers.register("hyphenation.applied.visualize", function(v) +trackers.register("hyphenation.applied.visualize", { true, false, "ligatures" }, function(v) setaction("finalizers","nodes.handlers.visualizehyphenation",v) + ligature_mode = v == "ligatures" end) diff --git a/tex/context/base/mkxl/lang-ini.lmt b/tex/context/base/mkxl/lang-ini.lmt index 5f2dd1a55..2e2d5e57d 100644 --- a/tex/context/base/mkxl/lang-ini.lmt +++ b/tex/context/base/mkxl/lang-ini.lmt @@ -524,7 +524,7 @@ function languages.postexhyphenchar(what) return postexhyphenchar(tolang(what)) -- e['user-friendly'] = 'user=friend-ly' -- e['exceptionally-friendly'] = 'excep-tionally=friend-ly' -local invalid = { "{", "}", "-" } +local invalid = { "{", "}", "(", ")", "-", " " } local function collecthjcodes(data,str) local found = data.extras and data.extras.characters or { } @@ -564,6 +564,15 @@ function languages.setexceptions(tag,str) end end +local function setwordhandler(tag,action) + local data, instance = resolve(tag) + if data then + instance:setwordhandler(action) + end +end + +languages.setwordhandler = setwordhandler + function languages.hyphenate(tag,str) -- todo: does this still work? local data, instance = resolve(tag) @@ -574,6 +583,75 @@ function languages.hyphenate(tag,str) end end +-- This code is here for some testing (and discussion) but it might end up in its +-- own module. I wrote it after listening to the end March 2021 live concert of +-- Mandoki Soulmates: Hungarian Pictures (music is the greatest unifier) with his +-- usual incredible international lineup. After that, and realizing that we needed +-- to deal better with some language issues as follow up on a mailing list thread, I +-- needed only a few loops of relistening the concert to implement it. In +-- restrospect this was a language feature that should have been there a while ago. + +do + + local nuts = nodes.nuts + local nextglyph = nuts.traversers.glyph + local setoptions = nuts.setoptions + local glyphoptioncodes = tex.glyphoptioncodes + + local cache = table.setmetatableindex(function(t,k) + local v = 0 + for s in gmatch(k,"%w+") do + local o = glyphoptioncodes[s] + if o then + v = v | o + end + end + t[k] = v + return v + end) + + local function checkglyphoptions(options) + for word, list in next, options do + if type(list) == "string" then + options[word] = options[list] + else + for index, option in next, list do + if type(option) == "string" then + list[index] = cache[option] + end + end + end + end + end + + function languages.setoptionhandler(tag,options) + if type(options) == "table" then + checkglyphoptions(options) -- checks in place! + setwordhandler(tag, + function(n,word,length,first,last) + local o = options[word] + if o then + local index = 0 + for g, c in nextglyph, first do + index = index + 1 + local t = o[index] + if t then + setoptions(g,t) + end + if g == last then + break + end + end + end + return false + end) + else + setwordhandler(tag) + end + end + +end + -- hyphenation.define ("zerolanguage") -- hyphenation.loadpatterns ("zerolanguage") -- else bug -- hyphenation.loadexceptions("zerolanguage") -- else bug diff --git a/tex/context/base/mkxl/luat-cod.lmt b/tex/context/base/mkxl/luat-cod.lmt index 71f03c0e2..9a74e4238 100644 --- a/tex/context/base/mkxl/luat-cod.lmt +++ b/tex/context/base/mkxl/luat-cod.lmt @@ -33,7 +33,7 @@ texconfig.max_print_line = 100000 texconfig.max_strings = 500000 texconfig.max_pool = 10000000 -texconfig.hash_extra = 200000 +texconfig.hash_extra = 250000 texconfig.expand_depth = 10000 texconfig.function_size = 32768 diff --git a/tex/context/base/mkxl/mlib-svg.lmt b/tex/context/base/mkxl/mlib-svg.lmt index 8409be11b..885d2cd77 100644 --- a/tex/context/base/mkxl/mlib-svg.lmt +++ b/tex/context/base/mkxl/mlib-svg.lmt @@ -1677,12 +1677,13 @@ do local f_rotation_stop = formatters[") rotatedaround((0,0),-angle((%N,%N))) ;"] local f_rotation_angle = formatters[") rotatedaround((0,0),-%N) ;"] + local s_offset_start = "draw image ( " + local f_offset_stop = formatters[") shifted (%N,%N) ;"] + local s_size_start = "draw image ( " + local f_size_stop = formatters[") xysized (%N,%N) ;"] + local handleoffset, handlesize do - local s_offset_start = "draw image ( " - local f_offset_stop = formatters[") shifted (%N,%N) ;"] - local s_size_start = "draw image ( " - local f_size_stop = formatters[") xysized (%N,%N) ;"] handleoffset = function(at) local x = asnumber_vx(rawget(at,"x")) diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index 44723e38f..8b2380b70 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -889,6 +889,8 @@ local ruledglyph do -- have a frozen color anyway or i need a more detailed cache .. below is a more -- texie approach + -- local ligature_code = 0x8000 + nodes.glyphcodes.ligature + ruledglyph = function(head,current,previous) -- wrong for vertical glyphs local wd = getwidth(current) if wd ~= 0 then @@ -905,6 +907,7 @@ local ruledglyph do line = linewidth, type = "box", },new_kern(-wd)) + -- if getsubtype(n) == ligature_code then local c, f = isglyph(current) local char = chardata[f][c] if char and type(char.unicode) == "table" then -- hackery test diff --git a/tex/context/modules/mkiv/x-mathml.mkiv b/tex/context/modules/mkiv/x-mathml.mkiv index 7bfc75c50..58669eb2a 100644 --- a/tex/context/modules/mkiv/x-mathml.mkiv +++ b/tex/context/modules/mkiv/x-mathml.mkiv @@ -797,7 +797,7 @@ \startxmlsetups mml:apply:inverse \settrue\xmlinversefunction - \xmlsetup{#1}{mml:\xmlfilter{#1}{/mml:apply/*[2]/name()}} + \xmlsetup{#1}{mml:\xmlfilter{#1}{/mml:apply/*[2]/tag()}} \stopxmlsetups % condition @@ -1219,7 +1219,7 @@ \startxmlsetups mml:factorof \xmlsetup{#1}{mml:relation} \stopxmlsetups \startxmlsetups mml:relation - \edef\mmlapplyaction{\xmlfilter{#1}{/*/name()}} + \edef\mmlapplyaction{\xmlfilter{#1}{/*/tag()}} \MMLcreset \xmlsetup{#1}{mml:relation:\xmlattdef{#1}{align}{\MMLrelationalign}} \stopxmlsetups diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c616a4e68..c981601b9 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 : 2021-03-25 13:59 +-- merge date : 2021-03-27 19:03 do -- begin closure to overcome local limits and interference -- cgit v1.2.3