summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/modules
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/modules')
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-abbreviations-logos.tex6
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-obsolete-tokens.mkiv346
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-catchword.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua28
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi18
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-examn.mkiv577
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-gnuplot.mkxl97
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv50
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi40
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-system-aliasing.mkiv120
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-system-readers.mkxl148
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-tikz.mkiv75
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkxl113
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv10
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-article-titlepage.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua12
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-variable.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi38
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua25
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-magazine-basic.mkiv7
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-maps.mkiv7
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-module-basic.mkiv45
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-balls.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-bars.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-boring.mkiv143
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-colorful.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-funny.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-fuzzy.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-green.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-organic.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-original.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-split.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-stack.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-stepper.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-weird.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-windows.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv84
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-system-macros.mkxl311
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-system-tokens.mkxl84
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-system-visual.mkiv94
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-tugboat.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua6
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.lmt30
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.mkxl61
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-colors-show.mkxl276
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl658
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-layout-show.mkxl243
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-publications-show.mkxl84
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-symbols-show.mkxl110
68 files changed, 3888 insertions, 256 deletions
diff --git a/Master/texmf-dist/tex/context/modules/common/s-abbreviations-logos.tex b/Master/texmf-dist/tex/context/modules/common/s-abbreviations-logos.tex
index 11c5b9725d2..dfac57f0af6 100644
--- a/Master/texmf-dist/tex/context/modules/common/s-abbreviations-logos.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-abbreviations-logos.tex
@@ -11,6 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% avoid two character abbreviations
+
\startmodule[abbreviations-logos]
\logo [MKI] {MkI} % joke
@@ -27,7 +29,7 @@
\logo [MPVI] {MpVI}
\logo [MPLX] {MpLX}
\logo [MPXL] {MpXL}
-\logo [LMTX] {lmtx}
+\logo [LMTX] {LMTX}
\logo [ACROBAT] {Acro\-bat}
\logo [AFM] {afm}
@@ -369,6 +371,6 @@
\logo [KB] {KB}
\logo [MB] {MB}
\logo [GB] {GB}
-\logo [TB] {TB}
+% \logo [TB] {TB}
\stopmodule
diff --git a/Master/texmf-dist/tex/context/modules/common/s-obsolete-tokens.mkiv b/Master/texmf-dist/tex/context/modules/common/s-obsolete-tokens.mkiv
new file mode 100644
index 00000000000..0d055049c24
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/common/s-obsolete-tokens.mkiv
@@ -0,0 +1,346 @@
+%D \module
+%D [ file=toks-tra, % was toks-ini
+%D version=2007.03.03,
+%D title=\CONTEXT\ Obsolete Modules,
+%D subtitle=Tokens,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The code here used to be in the \type {toks-tra} files which were made in
+%D the real early days of \LUATEX\ and used in articles and presentations
+%D about this engine. Because the code is used in manuals we keep it around
+%D as module.
+
+\writestatus{loading}{ConTeXt Obsolete Modules / Tokens}
+
+%D This used to be in \type {toks-tra.lua}:
+
+\startluacode
+
+if not modules then modules = { } end modules ['s-obsolete-tokens'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local utfbyte, utfchar, utfvalues = utf.byte, utf.char, utf.values
+local format, gsub = string.format, string.gsub
+local tostring = tostring
+
+local tokens = tokens
+local token = token -- the built in one
+local tex = tex
+local context = context
+local commands = commands
+
+tokens.collectors = tokens.collectors or { }
+local collectors = tokens.collectors
+
+collectors.data = collectors.data or { }
+local collectordata = collectors.data
+
+collectors.registered = collectors.registered or { }
+local registered = collectors.registered
+
+local report = logs.reporter("tokens","collectors")
+
+-- todo:
+--
+-- register : macros that will be expanded (only for demo-ing)
+-- flush : print back to tex
+-- test : fancy stuff
+
+local get_next = token.scan_next or token.get_next
+local create_token = token.create
+
+function collectors.install(tag,end_cs)
+ local data, d = { }, 0
+ collectordata[tag] = data
+ end_cs = gsub(end_cs,"^\\","")
+ while true do
+ local t = get_next()
+ if t.csname == end_cs then
+ context[end_cs]()
+ return
+ else
+ d = d + 1
+ data[d] = t
+ end
+ end
+end
+
+local simple = { letter = "letter", other_char = "other" }
+
+function collectors.show(data)
+ -- We no longer have methods as we only used (in demos) method a
+ -- so there is no need to burden the core with this. We have a
+ -- different table anyway.
+ if type(data) == "string" then
+ data = collectordata[data]
+ end
+ if not data then
+ return
+ end
+ local ctx_NC = context.NC
+ local ctx_NR = context.NR
+ local ctx_bold = context.bold
+ local ctx_verbatim = context.verbatim
+ local function show(data)
+ for i=1,#data do
+ local token = data[i]
+ if type(token) == "table" then
+ show(token)
+ else
+ local cmdname = token.cmdname
+ local simple = simple[cmdname]
+ ctx_NC()
+ ctx_verbatim(simple or cmdname)
+ ctx_NC()
+ ctx_verbatim(simple and utfchar(token.index) or token.csname)
+ ctx_NC()
+ if token.active then context("active ") end
+ if token.expandable then context("expandable ") end
+ if token.protected then context("protected ") end
+ ctx_NC()
+ ctx_NR()
+ end
+ end
+ end
+ context.starttabulate { "|Tl|Tc|Tl|" }
+ ctx_NC() ctx_bold("cmd")
+ ctx_NC() ctx_bold("meaning")
+ ctx_NC() ctx_bold("properties")
+ ctx_NC() ctx_NR()
+ context.HL()
+ show(data)
+ context.stoptabulate()
+end
+
+local function printlist(data)
+ if data and #data > 0 then
+ report("not supported (yet): printing back to tex")
+ end
+end
+
+tokens.printlist = printlist -- will change to another namespace
+
+function collectors.flush(tag)
+ printlist(collectordata[tag])
+end
+
+function collectors.test(tag,handle)
+ report("not supported (yet): testing")
+end
+
+function collectors.register(name)
+ report("not supported (yet): registering")
+end
+
+-- -- old token code
+--
+-- -- 1 = command, 2 = modifier (char), 3 = controlsequence id
+--
+-- local create = token.create
+-- local csname_id = token.csname_id
+-- local command_id = token.command_id
+-- local command_name = token.command_name
+-- local get_next = token.get_next
+-- local expand = token.expand
+-- local csname_name = token.csname_name
+--
+-- local function printlist(data)
+-- if data and #data > 0 then
+-- callbacks.push('token_filter', function ()
+-- callbacks.pop('token_filter') -- tricky but the nil assignment helps
+-- return data
+-- end)
+-- end
+-- end
+--
+-- tokens.printlist = printlist -- will change to another namespace
+--
+-- function collectors.flush(tag)
+-- printlist(collectordata[tag])
+-- end
+--
+-- function collectors.register(name)
+-- registered[csname_id(name)] = name
+-- end
+--
+-- local call = command_id("call")
+-- local letter = command_id("letter")
+-- local other = command_id("other_char")
+--
+-- function collectors.install(tag,end_cs)
+-- local data, d = { }, 0
+-- collectordata[tag] = data
+-- end_cs = gsub(end_cs,"^\\","")
+-- local endcs = csname_id(end_cs)
+-- while true do
+-- local t = get_next()
+-- local a, b = t[1], t[3]
+-- if b == endcs then
+-- context[end_cs]()
+-- return
+-- elseif a == call and registered[b] then
+-- expand()
+-- else
+-- d = d + 1
+-- data[d] = t
+-- end
+-- end
+-- end
+--
+-- function collectors.show(data)
+-- -- We no longer have methods as we only used (in demos) method a
+-- -- so there is no need to burden the core with this.
+-- if type(data) == "string" then
+-- data = collectordata[data]
+-- end
+-- if not data then
+-- return
+-- end
+-- local ctx_NC = context.NC
+-- local ctx_NR = context.NR
+-- local ctx_bold = context.bold
+-- local ctx_verbatim = context.verbatim
+-- context.starttabulate { "|T|Tr|cT|Tr|T|" }
+-- ctx_NC() ctx_bold("cmd")
+-- ctx_NC() ctx_bold("chr")
+-- ctx_NC()
+-- ctx_NC() ctx_bold("id")
+-- ctx_NC() ctx_bold("name")
+-- ctx_NC() ctx_NR()
+-- context.HL()
+-- for i=1,#data do
+-- local token = data[i]
+-- local cmd = token[1]
+-- local chr = token[2]
+-- local id = token[3]
+-- local name = command_name(token)
+-- ctx_NC()
+-- ctx_verbatim(name)
+-- ctx_NC()
+-- if tonumber(chr) >= 0 then
+-- ctx_verbatim(chr)
+-- end
+-- ctx_NC()
+-- if cmd == letter or cmd == other then
+-- ctx_verbatim(utfchar(chr))
+-- end
+-- ctx_NC()
+-- if id > 0 then
+-- ctx_verbatim(id)
+-- end
+-- ctx_NC()
+-- if id > 0 then
+-- ctx_verbatim(csname_name(token) or "")
+-- end
+-- ctx_NC() ctx_NR()
+-- end
+-- context.stoptabulate()
+-- end
+--
+-- function collectors.test(tag,handle)
+-- local t, w, tn, wn = { }, { }, 0, 0
+-- handle = handle or collectors.defaultwords
+-- local tagdata = collectordata[tag]
+-- for k=1,#tagdata do
+-- local v = tagdata[k]
+-- if v[1] == letter then
+-- wn = wn + 1
+-- w[wn] = v[2]
+-- else
+-- if wn > 0 then
+-- handle(t,w)
+-- wn = 0
+-- end
+-- tn = tn + 1
+-- t[tn] = v
+-- end
+-- end
+-- if wn > 0 then
+-- handle(t,w)
+-- end
+-- collectordata[tag] = t
+-- end
+
+-- Interfacing:
+
+commands.collecttokens = collectors.install
+commands.showtokens = collectors.show
+commands.flushtokens = collectors.flush
+commands.testtokens = collectors.test
+commands.registertoken = collectors.register
+
+-- Redundant:
+
+-- function collectors.test(tag)
+-- printlist(collectordata[tag])
+-- end
+
+-- For old times sake:
+
+collectors.dowithwords = collectors.test
+
+-- This is only used in old articles ... will move to a module:
+
+tokens.vbox = create_token("vbox")
+tokens.hbox = create_token("hbox")
+tokens.vtop = create_token("vtop")
+tokens.bgroup = create_token(utfbyte("{"),1)
+tokens.egroup = create_token(utfbyte("}"),2)
+
+tokens.letter = function(chr) return create_token(utfbyte(chr),11) end
+tokens.other = function(chr) return create_token(utfbyte(chr),12) end
+
+tokens.letters = function(str)
+ local t, n = { }, 0
+ for chr in utfvalues(str) do
+ n = n + 1
+ t[n] = create_token(chr, 11)
+ end
+ return t
+end
+
+function collectors.defaultwords(t,str)
+ if t then
+ local n = #t
+ n = n + 1 ; t[n] = tokens.bgroup
+ n = n + 1 ; t[n] = create_token("red")
+ for i=1,#str do
+ n = n + 1 ; t[n] = tokens.other('*')
+ end
+ n = n + 1 ; t[n] = tokens.egroup
+ end
+end
+
+\stopluacode
+
+%D This used to be in \type {toks-tra.mkiv}:
+
+% used to be: \registerctxluafile{toks-tra}{}
+
+\unprotect
+
+%D Handy for manuals \unknown\ but not really used in practice, so it might
+%D become a runtime loaded module instead.
+
+\unexpanded\def\starttokens [#1]{\ctxcommand{collecttokens("#1","stoptokens")}}
+ \let\stoptokens \relax
+\unexpanded\def\flushtokens [#1]{\ctxcommand{flushtokens("#1")}}
+\unexpanded\def\showtokens [#1]{\ctxcommand{showtokens("#1")}}
+\unexpanded\def\testtokens [#1]{\ctxcommand{testtokens("#1")}}
+\unexpanded\def\registertoken #1{\ctxcommand{registertoken("#1")}}
+
+\let\toks_show\showtokens % we also support the primitive
+
+\unexpanded\def\showtokens{\doifelsenextoptional\toks_show\normalshowtokens}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-catchword.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-catchword.mkiv
index 70d713e44c1..86a3a2d55f8 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-catchword.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-catchword.mkiv
@@ -27,7 +27,7 @@ local hlist_code = nodecodes.hlist
local fontkern_code = kerncodes.fontkern
local function set_catchword(t)
- local nextpage = tex.lists.contrib_head
+ local nextpage = tex.lists.contribute_head or tex.lists.contrib_head
if not nextpage then
return
end
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua
index 1cdfd9f65d8..df769067a0e 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua
@@ -323,7 +323,7 @@ implement {
implement {
name = "flow_set_text",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(align,str)
temp.texts[#temp.texts+1] = {
align = align,
@@ -358,7 +358,7 @@ implement {
implement {
name = "flow_set_label",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(location,text)
temp.labels[#temp.labels+1] = {
location = location,
@@ -369,7 +369,7 @@ implement {
implement {
name = "flow_set_comment",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(location,text)
local connections = temp.connections
if connections then
@@ -389,7 +389,7 @@ implement {
implement {
name = "flow_set_exit",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(location,text)
temp.exits[#temp.exits+1] = {
location = location,
@@ -582,7 +582,7 @@ implement {
implement {
name = "flow_set_connection",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(location,displacement,name)
local dx, dy = lpegmatch(splitter,displacement)
dx = tonumber(dx)
@@ -718,8 +718,8 @@ local function process_connections(g,chart,xoffset,yoffset)
end
end
-local f_texttemplate_t = formatters["\\setvariables[flowcell:text][x=%s,y=%s,n=%i,align={%s},figure={%s},overlay={%s},destination={%s}]"]
-local f_texttemplate_l = formatters["\\doFLOWlabel{%i}{%i}{%i}"]
+local f_texttemplate_t = formatters["\\setvariables[flowcell:text][x=%s,y=%s,n=%i,align={%s},figure={%s},overlay={%s},destination={%s},realx=%s,realy=%s]"]
+local f_texttemplate_l = formatters["\\doFLOWlabel{%i}{%i}{%i}{%i}{%i}"]
local splitter = lpeg.splitat(":")
local charttexts = { } -- permits " etc in mp
@@ -751,6 +751,8 @@ local function process_texts(g,chart,xoffset,yoffset)
local destination = cell.destination or ""
local texts = cell.texts
local noftexts = #texts
+ local realx = cell.realx or x
+ local realy = cell.realy or y
if noftexts > 0 then
for i=1,noftexts do
local text = texts[i]
@@ -758,7 +760,7 @@ local function process_texts(g,chart,xoffset,yoffset)
local align = text.align or ""
local align = validlabellocations[align] or align
charttexts[#charttexts+1] = data
- ctx_tographic(g,'flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,#charttexts,align,figure,overlay,destination))
+ ctx_tographic(g,'flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,#charttexts,align,figure,overlay,destination,realx,realy))
if i == 1 then
figure = ""
overlay = ""
@@ -766,7 +768,7 @@ local function process_texts(g,chart,xoffset,yoffset)
end
end
elseif figure ~= "" or overlay ~= "" or destination ~= "" then
- ctx_tographic(g,'flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,0,"",figure,overlay,destination))
+ ctx_tographic(g,'flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,0,"",figure,overlay,destination,realx,realy))
end
local labels = cell.labels
for i=1,#labels do
@@ -776,7 +778,7 @@ local function process_texts(g,chart,xoffset,yoffset)
local location = validlabellocations[location] or location
if text and text ~= "" then
charttexts[#charttexts+1] = text
- ctx_tographic(g,'flow_chart_draw_label(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts))
+ ctx_tographic(g,'flow_chart_draw_label(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts,realx,realy))
end
end
local exits = cell.exits
@@ -792,7 +794,7 @@ local function process_texts(g,chart,xoffset,yoffset)
location == "t" and y == chart.to_y - 1 or
location == "b" and y == chart.from_y + 1 then
charttexts[#charttexts+1] = text
- ctx_tographic(g,'flow_chart_draw_exit(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts))
+ ctx_tographic(g,'flow_chart_draw_exit(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts,realx,realy))
end
end
end
@@ -821,7 +823,7 @@ local function process_texts(g,chart,xoffset,yoffset)
end
if text and text ~= "" then
charttexts[#charttexts+1] = text
- ctx_tographic(g,'flow_chart_draw_comment(%s,%s,%s,"%s",%s,textext("%s")) ;',x,y,i,location,length,f_texttemplate_l(x,y,#charttexts))
+ ctx_tographic(g,'flow_chart_draw_comment(%s,%s,%s,"%s",%s,textext("%s")) ;',x,y,i,location,length,f_texttemplate_l(x,y,#charttexts,realx,realy))
end
end
end
@@ -1014,7 +1016,7 @@ local function makechart_indeed(chart)
--
end
--- We need to wrap because of tex.runtoks!
+-- We need to wrap because of tex.runlocal!
local function makechart(chart)
context.hbox()
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi
index a9d3dfdd931..4dee9c7ef1f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi
@@ -46,7 +46,7 @@
\let\setupFLOWcharts\setupFLOWchart
\let\setupFLOWlines \setupFLOWline
\let\setupFLOWshapes\setupFLOWshape
-\let\setupFLOWsets \setupFLOWset
+%let\setupFLOWset \setupFLOWsets
\setupFLOWcharts
[\c!width=12\bodyfontsize,
@@ -276,7 +276,7 @@
\let\location \FLOW_location
\let\text \FLOW_text
\let\label \FLOW_label
- \let\comment \FLOW_comment
+ \overloaded\let\comment \FLOW_comment
\let\exit \FLOW_exit
\let\connection \FLOW_connection
\let\include \FLOW_include
@@ -285,7 +285,7 @@
\let\connect \FLOW_connection
\let\locate \FLOW_location
%
- \let\includeFLOWchart\include
+ \overloaded\let\includeFLOWchart\include
\to \everyFLOWchart
\unexpanded\def\FLOW_name #name{\clf_flow_set_name{#name}\ignorespaces}
@@ -322,12 +322,16 @@
[n=0,
x=1,
y=1,
+ realx=1,
+ realy=1,
text=,
align=,
set=\setups{flowcell:text:place}]
-\def\FLOWx{\getvariable{flowcell:text}{x}} % compatibility (for Willi)
-\def\FLOWy{\getvariable{flowcell:text}{y}} % compatibility (for Willi)
+\def\FLOWx {\getvariable{flowcell:text}{x}} % compatibility (for Willi)
+\def\FLOWy {\getvariable{flowcell:text}{y}} % compatibility (for Willi)
+\def\FLOWrealx{\getvariable{flowcell:text}{realx}} % compatibility (for Willi)
+\def\FLOWrealy{\getvariable{flowcell:text}{realy}} % compatibility (for Willi)
\defineoverlay
[flowcell:figure]
@@ -380,10 +384,12 @@
\endgroup
\stopsetups
-\unexpanded\def\doFLOWlabel#1#2#3%
+\unexpanded\def\doFLOWlabel#1#2#3#4#5%
{\begingroup
\def\FLOWx{#1}%
\def\FLOWy{#2}%
+ \def\FLOWrealx{#4}%
+ \def\FLOWrealy{#5}%
\strut
\getFLOWtext{#3}%
\endgroup}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv
index e39738e99a9..215bf31167a 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv
@@ -71,7 +71,7 @@
\vbox{\hsize\wd\scratchbox\thinrule
\ifcase\scratchcounter\else
\setbox\scratchbox=\hbox{\space}%
- \nobreak\hskip\zeropoint \!!minus \wd\scratchbox
+ \nobreak\hskip\zeropoint \s!minus \wd\scratchbox
\vbox{\hsize\wd\scratchbox\thinrule}%
\fi}}%
\processisolatedwords{#2}\processisolatedword
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-examn.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-examn.mkiv
new file mode 100644
index 00000000000..3a98e53b1b3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-examn.mkiv
@@ -0,0 +1,577 @@
+%D \module
+%D [ file=m-examn,
+%D version=2000.01.29,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Testing and Examination,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a pretty old style, written in 2000 so after 20 years it's time to check
+%D if it works with \MKIV. The original version looks mostly the same as below and
+%D runs ok with \MKII. The differences are in not using percent sign triggered
+%D comments in the \JAVASCRIPT\ section (that was dropped), using \type {Yes}
+%D instead of \type {On} as field value (because in those decades the \type {On}
+%D value has proven to be fragile (maybe because of some hard coded \type {Yes}
+%D checking). The macros lost \type {\long}, became \type {\unexpanded} and were
+%D reformatted.
+%D
+%D If there is really demand for this I'll do a more major update. I see no reason
+%D to change the 2000 \MKII\ logic now.
+
+% n number of permitted answers
+% answer (set of) right answer(s) (one or list)
+% weight weight of the answer(s) (one or list)
+% method calculation method, for the moment 1
+
+% hidden = true -> display = display.hidden
+
+% disguise methods, numbers and meaning secret
+% randomizing answers
+% allert will be a properly typeset message
+% all checkfields instead of radio, gives more control
+
+\unprotect
+
+\def\c!answer {answer}
+\def\c!question{question}
+\def\c!weight {weight}
+
+\startJSpreamble {mpc} used now
+
+ var RealTimeMode = false ;
+ var FeedBackMode = false ;
+ var CurrentFeedback = -1 ;
+
+ var MPCnames = new Array() ;
+ var MPCanswers = new Array() ;
+ var MPCnumbers = new Array() ;
+ var MPCweights = new Array() ;
+ var MPCmethods = new Array() ;
+ var MPCerrors = new Array() ;
+
+ function Warning (str) {
+ app.alert("warning: " + str)
+ }
+
+ function FieldYN (name,n) {
+ return this.getField(name + ":" + n + ":yn")
+ }
+
+ function FieldRW (name,n) {
+ return this.getField(name + ":" + n + ":rw")
+ }
+
+ function NOfFields (name) {
+ var nof = 1 ;
+ while (FieldYN(name,nof)) {
+ ++nof
+ }
+ return --nof
+ }
+
+ function SetScore (score,total) {
+ mpcs = this.getField("mpc-score") ;
+ mpct = this.getField("mpc-total") ;
+ mpcp = this.getField("mpc-percent") ;
+ if (RealTimeMode) {
+ var percent = 0 ;
+ if (Number(total) > 0) {
+ percent = Math.round(100.0 * (Number(score) / Number(total)))
+ }
+ if (mpcs) {
+ mpcs.value = score
+ }
+ if (mpct) {
+ mpct.value = total
+ }
+ if (mpcp) {
+ mpcp.value = percent
+ }
+ } else {
+ if (mpcs) {
+ mpcs.value = ""
+ }
+ if (mpct) {
+ mpct.value = ""
+ }
+ if (mpcp) {
+ mpcp.value = ""
+ }
+ }
+ this.dirty = false
+ }
+
+ function CheckMPCmode () {
+ mpcr = this.getField("mpc-realtime") ;
+ if (mpcr) {
+ RealTimeMode = (mpcr.value == "Yes")
+ }
+ CheckScore() ;
+ this.dirty = false
+ }
+
+ function DefineMPC (name, answer, number, weight, method) {
+ SetScore(0,0) ;
+ MPCnames[MPCnames.length] = name ;
+ if (answer=="") {
+ MPCanswers[name] = "0"
+ } else {
+ MPCanswers[name] = answer
+ }
+ if (number=="") {
+ MPCnumbers[name] = "0"
+ } else {
+ MPCnumbers[name] = number
+ }
+ if (weight=="") {
+ MPCweights[name] = "0"
+ } else {
+ MPCweights[name] = weight
+ }
+ if (method=="") {
+ MPCmethods[name] = "0"
+ } else {
+ MPCmethods[name] = method
+ }
+ }
+
+ function CheckScore () {
+ var score = 0 ;
+ var total = 0 ;
+ var ok = false ;
+ for (var i=0;i<MPCnames.length;i++) {
+ var name = MPCnames[i] ;
+ var answer = MPCanswers[name] ;
+ var number = Number(MPCnumbers[name]) ;
+ var weight = MPCweights[name] ;
+ var method = MPCmethods[name] ;
+ var fields = Number(NOfFields(name)) ;
+ var answers = answer.split(",") ;
+ var weights = weight.split(",") ;
+ var sorted = weight.split(",") ;
+ sorted = sorted.sort() ;
+ sorted = sorted.reverse() ;
+ for (var k = 0; k < number; k++) {
+ if (weights.length < answers.length) {
+ total += Number(weight)
+ } else {
+ total += Number(sorted[k])
+ }
+ }
+ for (var j = 1; j <= fields; j++) {
+ if (FeedBackMode) {
+ ok = (! FieldRW(name,j).hidden && (FieldRW(name,j).value == "Yes"))
+ } else {
+ ok = (FieldYN(name,j).value == "Yes")
+ }
+ if (ok) {
+ for (var k = 0; k < answers.length; k++) {
+ if (Number(answers[k]) == j) {
+ if (weights.length < answers.length) {
+ score += Number(weight)
+ } else {
+ score += Number(weights[k])
+ }
+ }
+ }
+ }
+ }
+ }
+ CurrentFeedback = -1 ;
+ SetScore(score,total)
+ }
+
+ function CalculateItems () {
+ CheckScore() ;
+ for (var i = 0;i < MPCnames.length; i++) {
+ var name = MPCnames[i] ;
+ var answer = MPCanswers[name] ;
+ var fields = Number(NOfFields(name)) ;
+ var answers = answer.split(",") ;
+ for (var j = 1; j <= fields; j++) {
+ FieldRW(name,j).hidden = true ;
+ FieldRW(name,j).readonly = true ;
+ FieldRW(name,j).value = "Off" ;
+ FieldYN(name,j).readonly = true ;
+ if (FieldYN(name,j).value=="Off") {
+ for (var k = 0; k < answers.length; k++) {
+ if (Number(answers[k]) == j) {
+ FieldYN(name,j).value = "Yes"
+ }
+ }
+ } else {
+ FieldRW(name,j).hidden = false ;
+ for (var k = 0; k < answers.length; k++) {
+ if (Number(answers[k]) == j) {
+ FieldRW(name,j).value = "Yes"
+ }
+ }
+ }
+ }
+ var SomeW = false ;
+ var SomeRW = false ;
+ for (var j = 1; j <= fields; j++) {
+ if (! FieldRW(name,j).hidden) {
+ SomeRW = true ;
+ if (FieldRW(name,j).value == "Off") {
+ SomeW = true
+ }
+ }
+ }
+ MPCerrors[name] = (SomeW || (! SomeRW)) ;
+ }
+ CurrentFeedback = -1 ;
+ FeedBackMode = true ;
+ this.dirty = false
+ }
+
+ function ResetItems () {
+ for (var i = 0; i < MPCnames.length; i++) {
+ var name = MPCnames[i] ;
+ var fields = Number(NOfFields(name)) ;
+ for (var j = 1; j <= fields; j++) {
+ FieldRW(name,j).hidden = true ;
+ FieldYN(name,j).hidden = false ;
+ FieldYN(name,j).readonly = false ;
+ FieldYN(name,j).value = "Off" ;
+ SetScore(0,0)
+ }
+ }
+ CurrentFeedback = -1 ;
+ FeedBackMode = false ;
+ this.dirty = false
+ }
+
+ function CheckMPCone (name, number) {
+ nofitems = Number(NOfFields(name)) ;
+ for (var i = 1; i <= nofitems; i++) {
+ if (i != Number(number)) {
+ FieldYN(name,i).value = "Off"
+ }
+ }
+ }
+
+ function CheckMPCmore (name, number) {
+ var nofitems = Number(NOfFields(name)) ;
+ var currentnumber = 0 ;
+ for (var i = 1; i <= nofitems; i++) {
+ if (FieldYN(name,i).value == "Yes") {
+ ++currentnumber
+ }
+ }
+ if (currentnumber>Number(MPCnumbers[name])) {
+ Warning("only " + MPCnumbers[name] + " choices permitted") ;
+ var v = FieldYN(name,number) ;
+ if (v.value == "Yes") {
+ v.value = "Off"
+ }
+ }
+ }
+
+ function CheckMPC (name, number) {
+ if (! FeedBackMode) {
+ if (MPCnumbers[name] == 1) {
+ CheckMPCone(name,number)
+ } else {
+ CheckMPCmore(name,number)
+ }
+ if (RealTimeMode) {
+ CheckScore()
+ } else {
+ SetScore(0,0)
+ }
+ } else {
+ SetScore(0,0)
+ }
+ }
+
+ function GoneToFeedback () {
+ var name = MPCnames[CurrentFeedback] ;
+ if (MPCerrors[name]) {
+ console.println("feedback:" + name) ;
+ this.gotoNamedDest("feedback:" + name) ;
+ return true
+ } else {
+ return false
+ }
+ }
+
+ function NextFeedback () {
+ ++CurrentFeedback ;
+ while (CurrentFeedback < MPCnames.length) {
+ if (GoneToFeedback()) {
+ return
+ } else {
+ ++CurrentFeedback
+ }
+ }
+ CurrentFeedback = 0 ;
+ while (CurrentFeedback < MPCnames.length) {
+ if (GoneToFeedback()) {
+ return
+ } else {
+ ++CurrentFeedback
+ }
+ }
+ CurrentFeedback = -1
+ }
+
+ function PreviousFeedback () {
+ --CurrentFeedback ;
+ while (CurrentFeedback >= 0) {
+ if (GoneToFeedback()) {
+ return
+ } else {
+ --CurrentFeedback
+ }
+ }
+ CurrentFeedback = MPCnames.length ;
+ while (CurrentFeedback >= 0) {
+ if (GoneToFeedback()) {
+ return
+ } else {
+ --CurrentFeedback
+ }
+ }
+ CurrentFeedback = MPCnames.length + 1
+ }
+
+\stopJSpreamble
+
+\definecolor[clickMPCcolor][blue]
+\definecolor[rightMPCcolor][green]
+\definecolor[wrongMPCcolor][red]
+
+\definecolor[MPCcolor][clickMPCcolor]
+
+\appendtoks
+ \definesymbol [mpc-y] [\mathematics{\color[clickMPCcolor]{\star}}] % yes
+ \definesymbol [mpc-n] [\hphantom{\symbol[mpc-y]}] % no
+ \definesymbol [mpc-r] [\mathematics{\color[rightMPCcolor]{\star}}] % right
+ \definesymbol [mpc-w] [\mathematics{\color[wrongMPCcolor]{\star}}] % wrong
+\to \everystarttext
+
+\definereference [ResetItems] [JS(ResetItems)]
+\definereference [CalculateItems] [JS(CalculateItems)]
+\definereference [PreviousFeedback] [JS(PreviousFeedback)]
+\definereference [NextFeedback] [JS(NextFeedback)]
+
+\setupfield
+ [mpc-field-yn]
+ [%\c!frame=\v!off,
+ \c!height=.8em,
+ \c!width=.8em,
+ \c!background=\v!color,
+ \c!backgroundcolor=gray]
+
+\setupfield
+ [mpc-field-rw]
+ [%\c!frame=\v!off,
+ \c!height=.8em,
+ \c!width=.8em,
+ \c!background=\v!color,
+ \c!background=gray]
+
+\setupfield
+ [mpc-data]
+ [%\c!frame=\v!off,
+ \c!height=3ex,
+ \c!location=\v!low,
+ \c!align=\v!middle,
+ \c!color=MPCcolor,
+ \c!background=\v!color,
+ \c!background=gray,
+ \c!option=\v!readonly]
+
+\setupfield
+ [mpc-mode]
+ [%\c!frame=\v!off,
+ \c!height=3ex,
+ \c!width=3ex,
+ \c!location=\v!low,
+ \c!color=MPCcolor,
+ \c!background=\v!color,
+ \c!background=gray,
+ \c!clickout=JS(CheckMPCmode)]
+
+\appendtoks
+ \definemainfield[mpc-score] [line] [mpc-data][][]
+ \definemainfield[mpc-total] [line] [mpc-data][][]
+ \definemainfield[mpc-percent] [line] [mpc-data][][]
+ \definemainfield[mpc-realtime][check][mpc-mode][mpc-y,mpc-n][mpc-n]
+\to \everystarttext
+
+\newif\iftraceitems % \traceitemstrue
+
+\unexpanded\def\startMPCitems
+ {\dotripleempty\dostartMPCitems}
+
+\let\stopMPCitems\relax
+\let\startMPCitem\relax
+\let\stopMPCitem \relax
+
+\unexpanded\def\dostartMPCitems[#1][#2][#3]#4\stopMPCitems
+ {\bgroup
+ \getgparameters
+ [mpc:#1:]
+ [\c!answer=1,
+ \c!n=1,
+ \c!weight=1,
+ \c!method=1,
+ #2]%
+ \doglobal\newcounter\MPCitems
+ \unexpanded\def\startMPCitem##1\stopMPCitem
+ {\doglobal\increment\MPCitems
+ \edef\MPCitem{MPC:\MPCitems}%
+ \expandafter\setvalue\expandafter\MPCitem\expandafter
+ {\expandafter\handleMPCitem\expandafter{\MPCitems}{##1}}}
+ #4\relax
+ \unexpanded\def\handleMPCitem##1##2%
+ {\setJSpreamble{mpc:#1}
+ {DefineMPC
+ ("mpc:#1",%
+ "\getvalue{mpc:#1:\c!answer}",%
+ "\getvalue{mpc:#1:\c!n}",%
+ "\getvalue{mpc:#1:\c!weight}",%
+ "\getvalue{mpc:#1:\c!method}");}%
+ \definefield[mpc:#1:##1:rw][check][mpc-field-rw][mpc-r,mpc-w][mpc-r]
+ \definefield[mpc:#1:##1:yn][check][mpc-field-yn][mpc-y,mpc-n][mpc-n]
+ \setupfield[mpc-field-rw][\c!option={\v!readonly,\v!hidden}]
+ \setupfield[mpc-field-yn][\c!clickout=JS(CheckMPC{mpc:#1,##1})]
+ \mar{\iftraceitems{\txx##1}\hskip.5em\fi
+ %\fitfield[mpc:#1:##1:rw]\hskip.25em
+ %\fitfield[mpc:#1:##1:yn]}
+ \field[mpc:#1:##1:rw]\hskip.25em
+ \field[mpc:#1:##1:yn]}
+ ##2\par}%
+ \global\let\MPCdone\MPCitems
+ \global\unexpanded\def\fetchMPCitems
+ {\getrandomnumber\MPCitem{1}{\MPCitems}%
+ \doifdefined{MPC:\MPCitem}
+ {\getvalue{MPC:\MPCitem}
+ \doglobal\decrement\MPCdone
+ \global\letbeundefined{MPC:\MPCitem}}%
+ \ifcase\MPCdone\else
+ \expandafter\fetchMPCitems
+ \fi}
+ \startitemize[#3]
+ \fetchMPCitems
+ \stopitemize
+ \egroup}
+
+% \setupsystem
+% [\c!random=\v!small]
+
+\protect
+
+\continueifinputfile{m-examn.mkiv}
+
+% \nopdfcompression
+
+\setupbodyfont[pagella,10pt]
+
+% \usemodule[m][examn]
+
+\setupinteraction
+ [state=start,
+ color=MPCcolor,
+ menu=on]
+
+\setupinteractionmenu
+ [right]
+ [state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=15pt,
+ backspace=40pt,
+ header=0pt,
+ footer=0pt,
+ height=middle,
+ rightmargin=0pt,
+ leftmargin=20pt,
+ leftmargindistance=5pt,
+ rightedge=100pt,
+ rightedgedistance=15pt,
+ width=430pt]
+
+\setupbackgrounds
+ [text][rightedge]
+ [frame=on,
+ frameoffset=5pt,
+ framecolor=MPCcolor]
+
+\startinteractionmenu[right]
+ \startalignment[middle]
+ \dontleavehmode \gotobox{\strut example test} [examplepage] \blank
+ \dontleavehmode \gotobox{\strut next feedback}[NextFeedback] \blank
+ \dontleavehmode \gotobox{\strut prev feedback}[PreviousFeedback] \blank
+ \dontleavehmode \gotobox{\strut submit} [SubmitForm{mailto:pragma@wxs.nl}] \blank
+ \dontleavehmode \gotobox{\strut reset} [ResetItems] \blank
+ \dontleavehmode \gotobox{\strut calculate} [CalculateItems] \blank
+ \vfill
+ score \blank[small] \dontleavehmode \field[mpc-score] \blank
+ max score \blank[small] \dontleavehmode \field[mpc-total] \blank
+ percentage \blank[small] \dontleavehmode \field[mpc-percent] \blank
+ realtime \blank[small] \dontleavehmode \field[mpc-realtime] \blank
+ \kern0pt
+ \stopalignment
+\stopinteractionmenu
+
+\starttext
+
+\title [examplepage] {A simple MPC demo (toggle mode)}
+
+\startMPCitems[mpc-1][answer=3][a,packed]
+
+ \startMPCitem this is alpha \stopMPCitem
+ \startMPCitem and this is beta \stopMPCitem
+ \startMPCitem but how about gamma (ok) \stopMPCitem
+
+\stopMPCitems
+
+\startMPCitems[mpc-5][answer={2,3,4},n=2][n,packed]
+
+ \startMPCitem this is alpha \stopMPCitem
+ \startMPCitem and this is beta (ok, 2 ok's permitted) \stopMPCitem
+ \startMPCitem but how about gamma (ok, 2 ok's permitted) \stopMPCitem
+ \startMPCitem or delta (ok, 2 ok's permitted) \stopMPCitem
+ \startMPCitem or epsilon \stopMPCitem
+
+\stopMPCitems
+
+\startMPCitems[mpc-6][answer={2,3,4},weight={2,1,3},n=2][g,packed]
+
+ \startMPCitem this is alpha \stopMPCitem
+ \startMPCitem and this is beta (ok, 2 ok's permitted, weight is 2) \stopMPCitem
+ \startMPCitem but how about gamma (ok, 2 ok's permitted, weight is 1) \stopMPCitem
+ \startMPCitem or delta (ok, 2 ok's permitted, weight is 3) \stopMPCitem
+ \startMPCitem or epsilon \stopMPCitem
+
+\stopMPCitems
+
+\startMPCitems[mpc-8][answer=1,weight=2][packed]
+
+ \startMPCitem this is alpha (ok, weight is 2) \stopMPCitem
+ \startMPCitem and this is beta \stopMPCitem
+ \startMPCitem but how about gamma \stopMPCitem
+ \startMPCitem or delta \stopMPCitem
+
+\stopMPCitems
+
+\title [feedback:mpc:mpc-1] {Feedback on MPC 1} whatever
+\title [feedback:mpc:mpc-5] {Feedback on MPC 5} whatever
+\title [feedback:mpc:mpc-6] {Feedback on MPC 6} whatever
+\title [feedback:mpc:mpc-8] {Feedback on MPC 8} whatever
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv
index 3a0a5bebd51..083f6ed63fe 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv
@@ -190,7 +190,7 @@
{\placeformatlinecounter}}}}
{\let\doplaceformatlinecounter\relax}%
\global\setfalse\formatforcedbreak
- \def\\{\break\global\settrue\formatforcedbreak}%
+ \enforced\def\\{\break\global\settrue\formatforcedbreak}%
\hsize\formatwidth
\doglobal\increment\formatlinecounter
\par
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-gnuplot.mkxl b/Master/texmf-dist/tex/context/modules/mkiv/m-gnuplot.mkxl
new file mode 100644
index 00000000000..e844edd1bb3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-gnuplot.mkxl
@@ -0,0 +1,97 @@
+%D \module
+%D [ file=m-gnuplot,
+%D version=2020.02.10,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Gnuplot,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a variant on the \GNUPLOT\ terminal code. At some point (when there is a
+%D reason) I will make a proper environment that can be used for embedded code.
+
+\permanent\protected\def\includegnuplotsvgfile[#1]%
+ {\hbox\bgroup
+ \ctxlua{metapost.startsvghashing()}%
+ \includesvgfile[#1]%
+ \ctxlua{metapost.stopsvghashing()}%
+ \egroup}
+
+\startluacode
+
+local modificationtime = lfs.modification
+local longtostring = string.longtostring
+local formatters = string.formatters
+local expandfilename = dir.expandname
+local isfile = lfs.isfile
+
+local runner = sandbox.registerrunner {
+ name = "gnuplot to svg",
+ program = "gnuplot",
+ template = longtostring [[
+ -e "set output '%newname%'; set terminal svg"
+ "%oldname%"
+ ]],
+ checkers = {
+ oldname = "readable",
+ newname = "writable",
+ },
+}
+
+figures.programs.gnuplot = {
+ runner = runner,
+}
+
+local function remap(specification)
+ local oldname = specification.fullname
+ if oldname then
+ local newname = file.replacesuffix(oldname,"svg")
+ local oldtime = modificationtime(oldname) or 0
+ local newtime = modificationtime(newname) or 0
+ if newtime == 0 or oldtime > newtime then
+ runner {
+ newname = expandfilename(newname),
+ oldname = expandfilename(oldname),
+ }
+ end
+ if isfile(newname) then
+ local only = file.nameonly(newname)
+ local name = formatters["svg-%s-inclusion"](only)
+ local code = formatters["\\includegnuplotsvgfile[%s]\\resetbuffer[%s]"](newname,name)
+ buffers.assign(name,code)
+ specification.format = "buffer"
+ specification.fullname = name
+ end
+ end
+ return specification
+end
+
+figures.remappers.gp = { svg = remap }
+
+\stopluacode
+
+\continueifinputfile{m-gnuplot.mkxl}
+
+\startluacode
+io.savedata("m-gnuplot-demo.gp", [[
+set format xy "$%g$"
+
+set title 'This is a plot of $y=\\sin(x)$'
+set xlabel 'This is the $x$ axis'
+set ylabel 'This is the $y$ axis'
+
+plot [0:6.28] [0:1] sin(x)
+]])
+\stopluacode
+
+\starttext
+
+ \externalfigure[m-gnuplot-demo.gp][conversion=svg,width=4cm]
+
+ \externalfigure[m-gnuplot-demo.gp][conversion=svg,width=8cm]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv
index 7ba78ee2eaf..7b5074a49cf 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv
@@ -101,6 +101,23 @@ function moduledata.ipsum.direct(settings)
end
end
+interfaces.implement {
+ name = "ipsum",
+ protected = true,
+ actions = moduledata.ipsum.typeset,
+ arguments = { {
+ { "alternative" },
+ { "filename" },
+ { "n" },
+ { "left" },
+ { "right" },
+ { "before" },
+ { "after" },
+ { "inbetween" },
+ { "separator" },
+ } },
+}
+
\stopluacode
\unprotect
@@ -129,26 +146,25 @@ end
\useipsumstyleandcolor\c!style\c!color
% hm, also changes dates
\uselanguageparameter\ipsumparameter
- \ctxlua{moduledata.ipsum.typeset {
- alternative = "\ipsumparameter\c!alternative",
- filename = "\ipsumparameter\c!file",
- n = "\ipsumparameter\c!n",
- left = "\luaescapestring{\ipsumparameter\c!left}",
- right = "\luaescapestring{\ipsumparameter\c!right}",
- before = "\luaescapestring{\ipsumparameter\c!before}",
- after = "\luaescapestring{\ipsumparameter\c!after}",
- inbetween = "\luaescapestring{\ipsumparameter\c!inbetween}",
- }}
+ \clf_ipsum
+ alternative {\ipsumparameter\c!alternative}
+ filename {\ipsumparameter\c!file}
+ n {\ipsumparameter\c!n}
+ left {\ipsumparameter\c!left}
+ right {\ipsumparameter\c!right}
+ before {\ipsumparameter\c!before}
+ after {\ipsumparameter\c!after}
+ inbetween {\ipsumparameter\c!inbetween}
+ \relax
\stopsetups
\def\directipsum#1% only one argument, expanded
- {\ctxlua{moduledata.ipsum.typeset {
- alternative = "\namedipsumparameter{#1}\c!alternative",
- filename = "\namedipsumparameter{#1}\c!file",
- n = "\namedipsumparameter{#1}\c!n",
- separator = "\luaescapestring{\ipsumparameter\c!separator}",
- }}
-}
+ {\clf_ipsum
+ alternative {\namedipsumparameter{#1}\c!alternative}
+ filename {\namedipsumparameter{#1}\c!file}
+ n {\namedipsumparameter{#1}\c!n}
+ separator {\ipsumparameter\c!separator}
+ \relax}
\protect
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi
index a2c20dff745..a80b3d56fc1 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi
@@ -227,8 +227,8 @@ end
\def\MorseHeight {0.2em}
%def\MorseShort {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=\dimexpr\MorseWidth]}
%def\MorseLong {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=3\dimexpr\MorseWidth]}
-\def\MorseShort {\dontleavehmode\vrule\!!width \dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax}
-\def\MorseLong {\dontleavehmode\vrule\!!width3\dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax}
+\def\MorseShort {\dontleavehmode\vrule\s!width \dimexpr\MorseWidth\s!height\MorseHeight\s!depth\zeropoint\relax}
+\def\MorseLong {\dontleavehmode\vrule\s!width3\dimexpr\MorseWidth\s!height\MorseHeight\s!depth\zeropoint\relax}
\def\MorseBetweenCharacters {\kern\MorseWidth}
\def\MorseBetweenWords {\hskip3\dimexpr\MorseWidth\relax}
\def\MorseSpace {\hskip7\dimexpr\MorseWidth\relax}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua
index 8273f365a91..98e09f4b518 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua
@@ -62,8 +62,8 @@ function formatters.dir(n,comment)
return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"dir",n.dir)
end
-function formatters.localpar(n,comment)
- return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"localpar",n.dir)
+function formatters.par(n,comment)
+ return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"par",n.dir)
end
-- I will make a dedicated set of shapes for this.
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv
index 55b4ab25926..d48191ebc3d 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv
@@ -1,4 +1,8 @@
-\loadmkvifile{tabl-xnt}
+\ifcase\contextlmtxmode
+ \loadmkvifile{tabl-xnt}
+\else
+ \loadmklxfile{tabl-xnt}
+\fi
\mapTABLEtoxtable
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv
index 7ec779c41cb..f20d7d8e961 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv
@@ -648,7 +648,7 @@
\dontcomplain
\setuptolerance[\v!verytolerant]% == \tolerance4500
\hsize#1%
- \def\\{\softbreak}%
+ \enforced\def\\{\softbreak}%
\!!heighta#4%
\!!heightb#2%
\doloop
@@ -690,8 +690,8 @@
\advance\scratchdimen#2\relax
\NormalizeFontWidth
#1%
- {\def\+{\global\settrue\NFSpread\gobbleuntil\relax}%
- \def\\{\gobbleuntil\relax}% newline
+ {\enforced\def\+{\global\settrue\NFSpread\gobbleuntil\relax}%
+ \enforced\def\\{\gobbleuntil\relax}% newline
\setupspacing
#6\relax}%
{\scratchdimen}%
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv
index a240cdb58c3..5109cca1225 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv
@@ -109,7 +109,7 @@
{\mbox{\grabdigit#1\relax}} % adding $ $ goes wrong in tabulate
\def\grabdigit
- {\futurelet\next\scandigit}
+ {\futurelet\nexttoken\scandigit}
%D Watch the test for \type {\nextobeyedline}, because the
%D endofline token can be \type {\def'd}, not \type {\let}'d,
@@ -119,15 +119,15 @@
\ifx\normalmathshift\undefined \let\normalmathshift=$ \fi
\unexpanded\def\scandigit
- {\ifx\next\blankspace
+ {\ifx\nexttoken\blankspace
\let\next\handledigits
- \else\ifx\next\nextobeyedline % the indirect one
+ \else\ifx\nexttoken\nextobeyedline % the indirect one
\let\next\handledigits
- \else\ifx\next\bgroup
+ \else\ifx\nexttoken\bgroup
\let\next\handledigits
- \else\ifx\next\egroup
+ \else\ifx\nexttoken\egroup
\let\next\handledigits
- \else\ifx\next\normalmathshift
+ \else\ifx\nexttoken\normalmathshift
\let\next\handledigits
\else
\let\next\collectdigit
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv
index 47f1a0177ff..9eb7411babb 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv
@@ -17,6 +17,11 @@
%D https://www.youtube.com/watch?v=g5c2Htj8Vtw
%D \stoptyping
+\ifcase\contextlmtxmode\else
+ \writestatus{punk}{use metapost library punk instead}
+ \endinput
+\fi
+
\startluacode
local concat = table.concat
local round = math.round
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv
index 315cb3bed8b..659d5f58dfd 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv
@@ -311,13 +311,16 @@ moduledata.scite = scite
\stopluacode
-\definetyping[TEX] [option=cld]
-\definetyping[LUA] [option=lua]
+%definetyping[TEX] [option=cld]
+\setuptyping [TEX] [option=cld]
+%definetyping[LUA] [option=lua]
+\setuptyping [LUA] [option=lua]
\definetyping[BTX] [option=bibtex]
\definetyping[MPS] [option=mps]
-\definetyping[MP] [option=mp]
+%definetyping[MP] [option=mp]
+\setuptyping [MP] [option=mp]
\definetyping[PDF] [option=pdf]
-\definetyping[CPP] [option=web]
+\definetyping[CPP] [option=cpp] % Which is kind of like the web one.
\definetyping[WEB] [option=web]
\definetyping[TXT] [option=txt]
\definetyping[BNF] [option=bnf] % I might use this in the metafun manual.
@@ -336,7 +339,7 @@ moduledata.scite = scite
\unexpanded\def\buff_scite_slxb#1%
{% we can have a side float
\advance\hangindent\numexpr#1+2\relax\scitespaceskip
- \begstrut\hskip#1\scitespaceskip
+ \begstrut\hskip#1\scitespaceskip\relax
\ifcase\hangafter
\hangafter\plusone\relax
\fi}
@@ -378,7 +381,7 @@ moduledata.scite = scite
\let\slxT \lettertilde
\let\slxS \fixedspace
-\let\slxS \buff_scite_slxs
+%let\slxS \buff_scite_slxs
\let\slxF \buff_scite_slxf
\def\module_scite_inherit_typing
@@ -397,6 +400,14 @@ moduledata.scite = scite
{\scitebuffer[\ifx\currentscitelexer\empty tex\else\currentscitelexer\fi][@scite@]%
\endgroup}
+\definelines
+ [scitelines]
+
+\setuplines
+ [scitelines]
+ [\c!before=,
+ \c!after=]
+
\unexpanded\def\scitefile
{\dosingleargument\module_scite_file}
@@ -410,9 +421,9 @@ moduledata.scite = scite
\dontcomplain
\raggedright
\startcontextcode
- \startlines
+ \startscitelines
\getbuffer[lex]
- \stoplines
+ \stopscitelines
\stopcontextcode
\endgroup}
@@ -432,9 +443,9 @@ moduledata.scite = scite
\module_scite_inherit_typing
\dontcomplain
\raggedright
- \startlines
+ \startscitelines
\getbuffer[lex]
- \stoplines
+ \stopscitelines
\endgroup}
\unexpanded\def\sciteinlinebuffer
@@ -476,14 +487,14 @@ moduledata.scite = scite
\tt
\installscitecommandsdisplay
\dontcomplain
-\buff_verbatim_initialize_typing_one
-\buff_verbatim_set_line_margin
+ \buff_verbatim_initialize_typing_one
+ \buff_verbatim_set_line_margin
\raggedright
- \startlines
+ \startscitelines
\clf_getbuffer{lex}}
\unexpanded\def\stopDisplayScite
- {\stoplines
+ {\stopscitelines
\endgroup}
\unexpanded\def\slxbreak
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv
index ed9dae99a4e..bb62610ea13 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv
@@ -17,8 +17,8 @@
\registerctxluafile{util-sql}{}
\ifcase\contextlmtxmode\else
- \registerctxluafile{libs-imp-mysql}{}
- \registerctxluafile{libs-imp-sqlite}{}
+ \registerctxluafile{libs-imp-mysql}{autosuffix}
+ \registerctxluafile{libs-imp-sqlite}{autosuffix}
\fi
\setupmodule
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua
index ce84866a4d5..bbc267274ae 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua
@@ -399,7 +399,7 @@ end
interfaces.implement {
name = "step_start_chart",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = step_start_chart,
}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi
index 873015fd659..fb2000d40d2 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi
@@ -428,12 +428,16 @@
\startxmlsetups xml:step:define
\xmlsetsetup
{#1}
- {stepchart|steptable|stepaligntable|cells|texts|stepcell|cell|text}
+ {stepchart|steptable|stepaligntable|cells|texts|stepcell|cell|text|br}
{xml:step:*}
\stopxmlsetups
\xmlregistersetup{xml:step:define}
+\startxmlsetups xml:step:br
+ \crlf
+\stopxmlsetups
+
\startxmlsetups xml:step:stepchart
\startSTEPchart[\c!category=\xmlatt{#1}{class}]
\xmlflush{#1}
@@ -492,9 +496,17 @@
\stopxmlsetups
\startxmlsetups xml:step:text
- \text
- [\xmlatt{#1}{class}]
- {\xmlflush{#1}}
+ \doifelse {\xmlatt{#1}{option}} {paragraph} {
+ \text
+ [\xmlatt{#1}{class}]
+ {\framed
+ [\c!location=\v!middle,\c!align={\v!lohi,\v!flushleft},\c!offset=0pt,\c!frame=\v!no]
+ {\ignorespaces\xmlflush{#1}\removeunwantedspaces}}
+ } {
+ \text
+ [\xmlatt{#1}{class}]
+ {\xmlflush{#1}}
+ }
\stopxmlsetups
\protect
@@ -519,11 +531,21 @@
\startbuffer
<steptable>
- <cell> some cell </cell>
- <text> some text </text>
- <cell> some cell </cell>
- <text> some text </text>
- <cell> some cell </cell>
+ <cell> some cell A</cell>
+ <text> some text 1</text>
+ <cell> some cell B</cell>
+ <text> some text 2</text>
+ <cell> some cell C</cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<steptable>
+ <cell> some cell A</cell>
+ <text option="paragraph"> some more<br/>text 1</text>
+ <cell> some cell B</cell>
</steptable>
\stopbuffer
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-system-aliasing.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-system-aliasing.mkiv
new file mode 100644
index 00000000000..4661cc503a1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-system-aliasing.mkiv
@@ -0,0 +1,120 @@
+%D \module
+%D [ file=m-system-aliasing,
+%D version=2020.07.08,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Loading generic stuff,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[system-aliasing]
+
+\startluacode
+ local next = next
+ local find, topattern = string.find, string.topattern
+
+ local aliases = { }
+ local replacer = false
+ local filenames = false
+ local wildcards = false
+ local enabled = false
+
+ local report = logs.reporter("system", "aliasing")
+
+ -- This is not yet perfect as we actually need to quit at a non token.
+
+ interfaces.implement {
+ name = "registeralias",
+ public = true,
+ arguments = { "csname", "csname" },
+ actions = function(old,new)
+ aliases[old] = new
+ replacer = false
+ end
+ }
+
+ interfaces.implement {
+ name = "registeraliasfile",
+ public = true,
+ arguments = "string",
+ actions = function(name)
+ if find(name,"%*") then
+ name = topattern(name)
+ if wildcards then wildcards[name] = true else wildcards = { [name] = true } end
+ else
+ if filenames then filenames[name] = true else filenames = { [name] = true } end
+ end
+ if not enabled then
+ utilities.sequencers.appendaction(
+ resolvers.openers.helpers.textfileactions,
+ "system","resolvers.macros.processgeneric"
+ )
+ utilities.sequencers.enableaction(
+ resolvers.openers.helpers.textfileactions,
+ "resolvers.macros.processgeneric"
+ )
+ enabled = true
+ end
+ end
+ }
+
+ local function found(name)
+ if filenames and filenames[name] then
+ return true
+ end
+ if wildcards then
+ for k, v in next, wildcards do
+ if find(name,k) then
+ return true
+ end
+ end
+ end
+ return false
+ end
+
+ local Cs, lpegmatch = lpeg.Cs, lpeg.match
+
+ local utfchartabletopattern = lpeg.utfchartabletopattern
+ local utf8character = lpeg.patterns.utf8character
+ local escapecharacter = lpeg.P("\\")
+ local terminal = lpeg.S([[`"'~@#$%^&_-+/*=(){}[]<>:;,.!?|\\]])
+ + lpeg.P(-1)
+ local lpegmatch = lpeg.match
+
+ function resolvers.macros.processgeneric(str,name)
+ if found(name) then
+ report("file %a",name)
+ if not replacer then
+ replacer = Cs( (
+ escapecharacter
+ * (utfchartabletopattern(aliases) / aliases)
+ * terminal
+ + utf8character
+ )^0 )
+ end
+ str = lpegmatch(replacer,str) or str
+ end
+ return str
+ end
+
+\stopluacode
+
+\registeralias \protected \normalprotected
+\registeralias \unexpanded \normalunexpanded
+\registeralias \expanded \normalexpanded
+
+%D \starttyping
+%D \registeraliasfile{rubish.tex}
+%D \registeraliasfile{generic/*.tex}
+%D
+%D % e.g. \def\foo{\unexpanded{test}}
+%D
+%D \input rubish.tex
+%D \input generic/foo.tex
+%D \stoptyping
+
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-system-readers.mkxl b/Master/texmf-dist/tex/context/modules/mkiv/m-system-readers.mkxl
new file mode 100644
index 00000000000..a077b20a313
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-system-readers.mkxl
@@ -0,0 +1,148 @@
+%D \module
+%D [ file=m-system-readers,
+%D version=2021.02.13,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Reading from files,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[system-readers]
+
+% \unprotect
+%
+% \installcorenamespace {markedlines}
+%
+% \permanent\protected\def\startmarkedlines[#1]%
+% {\edef\scratchstring{#1}%
+% \scratchcounter\numexpr\inputlineno+\plusone\relax
+% \gobbleuntilandfinalize\stopmarkedlines}
+%
+% \permanent\protected\def\stopmarkedlines
+% {\edefcsname\??markedlines\scratchstring\endcsname
+% {{\the\scratchcounter}{\the\numexpr\inputlineno+\minusone\relax}}}
+%
+% \protected\def\firstmarkedline#1%
+% {\numexpr
+% \ifcsname\??markedlines#1\endcsname
+% \normalexpanded{\noexpand\firstoftwoarguments\lastnamedcs}%
+% \else
+% \zerocount
+% \fi
+% \relax}
+%
+% \protected\def\lastmarkedline#1%
+% {\numexpr
+% \ifcsname\??markedlines#1\endcsname
+% \normalexpanded{\noexpand\secondoftwoarguments\lastnamedcs}%
+% \else
+% \zerocount
+% \fi
+% \relax}
+%
+% \protected\def\markedlines#1%
+% {\ifcsname\??markedlines\scratchstring\endcsname\lastnamedcs\else{0}{0}\fi}
+%
+% \protect
+
+\startluacode
+
+ local createtoken = token.create
+ local gobbletoken = token.gobble
+ local integer_value = tokens.values.integer
+
+ local marked = { }
+
+ interfaces.implement {
+ name = "startmarkedlines",
+ public = true,
+ protected = true,
+ arguments = "optional",
+ actions = function(tag)
+ local start = status.readstate.linenumber + 1
+ gobbletoken(createtoken("startmarkedlines"),createtoken("stopmarkedlines"))
+ local state = status.readstate
+ marked[tag] = { state.filename, start, state.linenumber - 1 }
+ end
+ }
+
+
+ interfaces.implement {
+ name = "markedfilename",
+ public = true,
+ -- usage = "value",
+ arguments = "string",
+ actions = function(tag)
+ local m = marked[tag]
+ -- return m and m[1] or ""
+ context(m and m[1] or "")
+ end
+ }
+
+ interfaces.implement {
+ name = "firstmarkedline",
+ public = true,
+ usage = "value",
+ arguments = "string",
+ actions = function(tag)
+ local m = marked[tag]
+ return integer_value, m and m[2] or 0
+ end
+ }
+
+ interfaces.implement {
+ name = "lastmarkedline",
+ public = true,
+ usage = "value",
+ arguments = "string",
+ actions = function(tag)
+ local m = marked[tag]
+ return integer_value, m and m[3] or 0
+ end
+ }
+
+\stopluacode
+
+\continueifinputfile{m-system-readers.mkxl}
+
+\starttext
+
+\startmarkedlines[test]
+SOME LINE 1
+SOME LINE 2
+SOME LINE 3
+SOME LINE 4
+\stopmarkedlines
+
+\startmarkedlines[more]
+SOME MORE 1
+SOME MORE 2
+SOME MORE 3
+SOME MORE 4
+\stopmarkedlines
+
+\begingroup
+ \newlocalread\myreada
+ \immediate\openin\myreada {\markedfilename{test}}
+ \dostepwiserecurse{\lastmarkedline{test}}{\firstmarkedline{test}}{-1}{
+ \readline\myreada line #1 to \scratchstring #1 : \scratchstring \par
+ }
+ \immediate\closein\myreada
+\endgroup
+
+\blank
+
+\begingroup
+ \newlocalread\myreada
+ \immediate\openin\myreada {\markedfilename{more}}
+ \dostepwiserecurse{\firstmarkedline{more}}{\lastmarkedline{more}}{1}{
+ \read \myreada line #1 to \scratchstring #1 : \scratchstring \par
+ }
+ \immediate\closein\myreada
+\endgroup
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-tikz.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-tikz.mkiv
new file mode 100644
index 00000000000..9267f90d49b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-tikz.mkiv
@@ -0,0 +1,75 @@
+%D A fixed variant if the t-tikz module distributed with tikz.
+
+\ifdefined\pdflastxpos \else
+ \unprotect
+ \frozen\overloaded\protected\def\pdflastxpos{\numexpr\clf_lastxpos\relax}
+ \frozen\overloaded\protected\def\pdflastypos{\numexpr\clf_lastypos\relax}
+ \protect
+\fi
+
+
+\pushoverloadmode
+
+ \pushcatcodetable
+
+ \setcatcodetable\texcatcodes
+
+ \catcode`\@=11
+ \catcode`\|=12
+ \catcode`\!=12
+
+ \input t-pgf.tex
+ \input t-pgffor.tex
+ \input tikz.code.tex
+
+ \popcatcodetable
+
+\popoverloadmode
+
+\permanent\protected\def\tikzerrormessage#1#2#3%
+ {\writestatus{#1}{#2}}
+
+\ifcase\contextlmtxmode
+
+ \let\starttikzsettings\relax
+ \let\stoptikzsettings \relax
+
+ \protected\def\starttikzpicture
+ {% \dontleavehmode
+ \begingroup
+ \ifdefined\PackageError\else \let\PackageError\tikzerrormessage \fi
+ \tikzpicture}
+
+ \protected\def\stoptikzpicture
+ {\endtikzpicture
+ \endgroup}
+
+\else
+
+ % for now:
+
+ \overloadmode\zerocount
+
+ % but this will be mandate for settings outside the start .. stop
+
+ \permanent\protected\def\starttikzsettings
+ {\pushoverloadmode}
+
+ \permanent\protected\def\stoptikzsettings
+ {\popoverloadmode}
+
+ \permanent\protected\def\starttikzpicture
+ {\dontleavehmode
+ \hcontainer\bgroup
+ % \pushoverloadmode
+ \ifdefined\PackageError\else \let\PackageError\tikzerrormessage \fi
+ \tikzpicture}
+
+ \permanent\protected\def\stoptikzpicture
+ {\endtikzpicture
+ % \popoverloadmode
+ \egroup}
+
+\fi
+
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkxl b/Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkxl
new file mode 100644
index 00000000000..3edfd14e235
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkxl
@@ -0,0 +1,113 @@
+%D \module
+%D [ file=m-timing,
+%D version=2007.12.23,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Timing,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Todo: adapt to latest metafun magic.
+
+\ifdefined\ShowNamedUsage \endinput \fi
+
+%D Written at the end of 2007, this module is dedicated to Taco. Reaching this
+%D point in \LUATEX\ was a non trivial effort. By visualizing a bit what happens
+%D when pages come out of \LUATEX, you may get an idea what is involved. It took
+%D much time an dedication to reach this point in the development. Add to that
+%D those daily Skype intense discussion, testing and debugging moments. Time flies
+%D but progress is impressive. The motto of this module could be: what you see
+%D is what you get. An there is much more to come \unknown.
+
+% \usemodule[timing]
+% \setupcolors[state=start]
+% \starttext
+% \dorecurse{200}{\input tufte \par} \ShowUsage{}
+% \stoptext
+
+\definecolor[usage:line] [darkred]
+\definecolor[usage:time] [darkblue]
+\definecolor[usage:frame][darkgray]
+
+\ctxloadluafile{trac-tim.lmt}
+
+\startluacode
+local progress = moduledata.progress
+
+function progress.show(filename,names,other)
+ if not filename or filename == "" then
+ filename = progress.defaultfilename or ""
+ end
+ for n, name in pairs(progress.names(filename)) do
+ if string.find(name,names) and name ~= other and name ~= "variables: lasttime" then
+ context.ShowNamedUsage(filename,name or "",other or "")
+ end
+ end
+end
+\stopluacode
+
+\startnotmode[no-timing]
+ \appendtoks\ctxlua{moduledata.progress.store()}\to\everystarttext
+ \appendtoks\ctxlua{moduledata.progress.store()}\to\everyshipout
+ \ctxlua{luatex.registerstopactions(function() moduledata.progress.save() end)}
+\stopnotmode
+
+\permanent\protected\def\ShowNamedUsage#1#2#3%
+ {\setbox\scratchbox\vbox\bgroup
+ \startMPcode{doublefun}
+ begingroup ; save p, q, b, h, w ;
+ path p, q, b ; numeric h, w ;
+ p := \cldcontext{moduledata.progress.path("#1","#2")} ;
+ % p := p shifted -llcorner p ;
+ if bbwidth(p) > 0 :
+ h := 100 ; w := 2 * h ;
+ w := \the\textwidth-3pt ; % correct for pen
+ p := p xstretched w ;
+ b := boundingbox (llcorner p -- llcorner p shifted (w,h)) ;
+ pickup pencircle scaled 3pt ; linecap := butt ;
+ draw b withcolor \MPcolor{usage:frame} ;
+ draw p withcolor \MPcolor{usage:line} ;
+ if ("#3" <> "") and ("#3" <> "#2") :
+ q := \cldcontext{moduledata.progress.path("#1","#3")} ;
+ % q := q shifted -llcorner q ;
+ if bbwidth(q) > 1 :
+ q := q xstretched w ;
+ pickup pencircle scaled 1.5pt ; linecap := butt ;
+ draw q withcolor \MPcolor{usage:time} ;
+ fi ;
+ fi ;
+ fi ;
+ endgroup ;
+ \stopMPcode
+ \egroup
+ \scratchdimen\wd\scratchbox
+ \ifdim\scratchdimen>\zeropoint
+ \startlinecorrection[blank]
+ \box\scratchbox \endgraf
+ \hbox to \scratchdimen\bgroup
+ \tttf\strut\detokenize{#2}\hss
+ \scratchcounter =\cldcontext{moduledata.progress.set("#1","\detokenize{#2}")}\relax
+ \scratchcounterone =\cldcontext{moduledata.progress.bot("#1","\detokenize{#2}")}\relax
+ \scratchcountertwo =\cldcontext{moduledata.progress.top("#1","\detokenize{#2}")}\relax
+ \scratchcounterthree=\numexpr\scratchcountertwo-\scratchcounterone\relax
+ \ifnum\scratchcounter >\zerocount set:\the\scratchcounter \quad\fi
+ \ifnum\scratchcounterthree>\zerocount inc:\the\scratchcounterthree\quad\fi
+ \ifnum\scratchcounterone >\zerocount min:\the\scratchcounterone \quad\fi
+ \ifnum\scratchcountertwo >\zerocount max:\the\scratchcountertwo \quad\fi
+ pages:\cldcontext{moduledata.progress.pages("#1")}%
+ \egroup
+ \stoplinecorrection
+ \fi}
+
+\permanent\protected\def\LoadUsage #1{\ctxlua{moduledata.progress.convert("#1")}}
+\permanent\protected\def\ShowUsage #1{\ctxlua{moduledata.progress.show("#1",".*", "variables: elapsed")}}
+\permanent\protected\def\ShowMemoryUsage #1{\ctxlua{moduledata.progress.show("#1","memory:.*","variables: elapsed")}}
+\permanent\protected\def\ShowNodeUsage #1{\ctxlua{moduledata.progress.show("#1","nodes:.*", "variables: elapsed")}}
+\permanent\protected\def\ShowFilteredUsage#1#2{\ctxlua{moduledata.progress.show("#1","#2", "variables: elapsed")}}
+\permanent\protected\def\ShowSimpleUsage #1#2{\ctxlua{moduledata.progress.show("#1","#2")}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv
index 6ec0a52b0af..8a49861cdbe 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv
@@ -56,9 +56,7 @@
\unexpanded\def\fakelines#1#2% min max / 3 10
{\fakeparindent
\scratchdimen\hsize
- \ifindentation
- \advance\scratchdimen -\parindent
- \fi
+ \advance\scratchdimen -\parindent
\fakerule\scratchdimen\break
\getrandomcount\scratchcounter{\ifcase0#1 3\else#1\fi}{\ifcase0#2 10\else#2\fi}%
\dorecurse\scratchcounter{\fakerule\hsize}%
@@ -128,7 +126,7 @@
\unexpanded\def\fakeparindent
{\noindent
- \ifindentation
+ \ifzeropt\parindent\else
\ifx\dofakedroppedcaps\relax
{\fakeparindentcolor
\vrule
@@ -653,10 +651,10 @@
\appendtoks\dontshowwhatsits\to\everystoptext}
\unexpanded\def\immediatewhatsit
- {\bgroup\futurelet\next\doimmediatewhatsit}
+ {\bgroup\futurelet\nexttoken\doimmediatewhatsit}
\unexpanded\def\doimmediatewhatsit
- {\ifx\next\write
+ {\ifx\nexttoken\write
\egroup\immediatewritetrue
\else
\egroup\expandafter\normalimmediate
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-article-titlepage.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-article-titlepage.mkiv
index abfb957c2fa..7579d421fa8 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-article-titlepage.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-article-titlepage.mkiv
@@ -16,7 +16,7 @@
\unprotect
% \startalignment[middle]
-% \let\\=\par
+% \enforced\let\\\par
% \bfb
% \setupinterlinespace
% \documentvariable {subject}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv
index 98a5c00a495..2d18708421b 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv
@@ -100,7 +100,7 @@
% list = {
% "cambria.ttc(Cambria Math)",
% "xits-math.otf",
- % -- "stixmath-regular.otf",
+ % -- "stixtwomath-regular.otf", -- watch out: the name changes
% "latinmodern-math.otf",
% -- "lucidabrightmathot.otf",
% -- "lucidabrightmathot-demi.otf",
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv
index 90b9c1f6496..7dd39c07d0c 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv
@@ -106,8 +106,8 @@
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{file:stix2math.otf}{20bp}{0x1D44A}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{file:stix2math.otf}{20bp}{0x1D44C}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua
index d9d7205dec1..8673ef398cc 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua
@@ -27,6 +27,8 @@ local setlink = nodes.setlink
local hpack = nodes.hpack
local applyvisuals = nodes.applyvisuals
+local lefttoright_code = nodes.dirvalues.lefttoright
+
local handle_positions = fonts.handlers.otf.datasetpositionprocessor
local handle_injections = nodes.injections.handler
@@ -285,17 +287,9 @@ function tabletracers.showpositionings(specification)
if resources then
- local direction = "TLT"
-
+ local direction = lefttoright_code -- not that relevant probably
local sequences = resources.sequences
local marks = resources.marks
-
- if tonumber(direction) == -1 or direction == "TRT" then
- direction = "TRT"
- else
- direction = "TLT"
- end
-
local visuals = "fontkern,glyph,box"
local datasets = fonts.handlers.otf.dataset(tfmdata,fontid,0)
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-variable.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-variable.mkiv
index 5336f602472..6e4b1773f0f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-variable.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-variable.mkiv
@@ -103,6 +103,12 @@
% \showfontvariations
% [font=file:sourcecode-regular.otf]
+% \showfontvariations
+% [font=file:sourcecodevariable-roman.otf]
+
+% \showfontvariations
+% [font=file:sourcecodevariable-italic.otf]
+
% \showfontvariations
% [font=file:AmstelvarAlpha-VF.ttf]
@@ -112,4 +118,14 @@
% \showfontvariations
% [font=file:sitka.ttc]
+% For Alan:
+
+% \usemodule[article-basic]
+% \usemodule[fonts-variable]
+% \starttext
+% \showfontvariations[font=file:goldmansansitvf_wght.ttf]
+% \showfontvariations[font=file:goldmansansvf_wght.ttf]
+% \showfontvariations[font=file:goldmansanscdvf_wght.ttf]
+% \stoptext
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi
index 67fc45d46fc..7cebfd9bb5f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi
@@ -31,7 +31,6 @@
local list = { }
local size = { }
local comp = { }
- local used = setmetatableindex("table")
local nope = setmetatableindex("number")
local omit = {
@@ -44,7 +43,7 @@
"colo%-pan.tex", ".*test.*"
}
local types = {
- "tex", "mkii", "mkiv", "mkvi", "mkxl", "mklx", "lua", -- "mpiv"
+ "tex", "mkii", "mkiv", "mkvi", "lua", "mkxl", "mklx", "lmt" -- "mpiv"
}
local patterns = {
"^([a-z][a-z][a-z][a-z])%-[a-z0-9%-]+%.[a-z]+",
@@ -90,7 +89,7 @@
end
local data = io.loaddata(name)
if data then
- if suffix == "lua" then
+ if suffix == "lua" or suffix == "lmt" then
data = gsub(data,"%-%-%[%[.-%]%]%-%-","")
data = gsub(data,"%-%-.-[\n\r]","")
else
@@ -120,15 +119,6 @@
for i=1,#types do
collect(list,types[i],i)
end
- for category in next, list do
- pattern ="{"..category.."%-"
- for suffix, t in next, used do
- local data = io.loaddata(resolvers.find_file("context."..suffix))
- if data and find(data,pattern) then
- t[category] = true
- end
- end
- end
end
local max, what = 0, (what == "size" and size) or list
for k, v in table.sortedpairs(what) do
@@ -141,9 +131,9 @@
function document.context_state_1(what)
local max, what, norm = prepare(what)
- context.starttabulate { "|Tl|T|T|T|T|T|T|T|" }
+ context.starttabulate { "|Tl|T|T|T|T|T|T|T|T|" }
context.NC()
- context(category)
+ context("category")
context.NC()
for i=1,#types do
local n, m = 0, 0
@@ -156,20 +146,13 @@
context.Top(types[i],norm(max),n,m)
context.NC()
end
- context.NC()
+ -- context.NC()
context.NR()
context.HL()
for k, v in table.sortedpairs(what) do
local c = what == size and comp[k] or nope
context.NC()
- context("\\bf %s~%s~~%s~~%s~~%s~~%s",
- (used.mkii[k] and "ii") or "~~",
- (used.mkiv[k] and "iv") or "~~",
- (used.mkvi[k] and "vi") or "~~",
- (used.mkiv[k] and "xl") or "~~",
- (used.mkvi[k] and "lx") or "~~",
- k
- )
+ context(k)
context.NC()
for i=1,#types do
context.Bar(types[i],v[i],c[i],f_norm(norm(v[i])))
@@ -201,13 +184,14 @@
\definecolor[bar:mkxl][middlemagenta]
\definecolor[bar:mklx][middlecyan]
\definecolor[bar:lua] [middlegray]
+\definecolor[bar:lmt] [middleorange]
\newcount\UpCounter
\starttexdefinition Top #what#fraction#total#bigones
\hbox to 7em{\hss#total}%
\enspace
- \hbox {{\bf#what}\ifnum#total=#bigones\else~#bigones\rlap{~+}\fi\hss}%
+ \hbox to 4em{{{\bf#what}\ifnum#total=#bigones\else\ifnum#bigones>0~#bigones\rlap{~+}\fi\fi\hss}}%
\stoptexdefinition
\starttexdefinition Bar #color#size#nobigones#fraction
@@ -215,6 +199,8 @@
\hbox to 7em{\hss\ifcase#nobigones\else\llap{-~}\fi#size}%
\enspace
\blackrule[color=bar:#color,width=#fraction\dimexpr 20em\relax,height=.8\strutht]%
+% \quad
+% \quad
\fi
\stoptexdefinition
@@ -269,9 +255,9 @@
{The size of (core) files used in ConTeXt (- : large data files excluded; + : large data files included; comment and spaces removed)}
{1}{size}
\Show
- {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua).}
+ {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).}
{2}{number}
\Show
- {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua).}
+ {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).}
{2}{size}
\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua
index 65fd1ab1443..2ba265b5354 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua
@@ -40,8 +40,8 @@ local getdisc = nuts.getdisc
local getattr = nuts.getattr
local getfont = nuts.getfont
local getfield = nuts.getfield
-local getlang = nuts.getlang
-local setlang = nuts.setlang
+local getlanguage = nuts.getlanguage
+local setlanguage = nuts.setlanguage
local setlink = nuts.setlink
local setdisc = nuts.setdisc
local setfield = nuts.setfield
@@ -63,10 +63,12 @@ local states = table.setmetatableindex(function(t,k)
}
end)
+local currentlanguage = language.current or function() return tex.language end
+
interfaces.implement {
name = "storelanguagestate",
actions = function()
- states[tex.language] = {
+ states[currentlanguage()] = {
lefthyphenmin = tex.lefthyphenmin,
righthyphenmin = tex.righthyphenmin,
hyphenationmin = tex.hyphenationmin,
@@ -128,17 +130,6 @@ local function mark(head,marked,w,h,d,how)
end
end
-local function getlanguage(head,l,left,right)
- local t = { }
- for n in nextglyph, tonut(head) do
- t[n] = {
- getlang(n),
- getfield(n,"left"),
- getfield(n,"right"),
- }
- end
-end
-
local langs = { }
local tags = { }
local noflanguages = 0
@@ -151,7 +142,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
-- somehow assigning -1 fails
for n in nextglyph, tonut(head) do
cached[n] = {
- getlang(n),
+ getlanguage(n),
getfield(n,"left"),
getfield(n,"right")
}
@@ -164,7 +155,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
local lmin = s.lefthyphenmin
local rmin = s.righthyphenmin
for n in next, cached do
- setlang(n,l)
+ setlanguage(n,l)
setfield(n,"left",lmin)
setfield(n,"right",rmin)
end
@@ -176,7 +167,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
mark(head,marked[i],1/16,l/2,l/4,"hyphenation:"..(colorbytag and tags[i] or i))
end
for n, d in next, cached do
- setlang(n,d[1])
+ setlanguage(n,d[1])
setfield(n,"left",d[2])
setfield(n,"right",d[3])
end
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-magazine-basic.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-magazine-basic.mkiv
index d45fe6f601a..c5995162a4f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-magazine-basic.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-magazine-basic.mkiv
@@ -110,8 +110,9 @@
\doifoddpageelse {
\reuseMPgraphic{rightpaper}
} {
- \reuseMPgraphic{leftpaper}}
+ \reuseMPgraphic{leftpaper}
}
+ }
\stopsetups
@@ -459,8 +460,8 @@
\definetyping[xtyping] [style=\ttx]
\definetyping[xxtyping][style=\ttxx]
-\definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt]
-\definetype [ntype] \setuptype [ntype] [style=\narrowtt]
+% \definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt]
+% \definetype [ntype] \setuptype [ntype] [style=\narrowtt]
\setupdocument
[main={\doifelsemode{atpragma}{This Way}{My Way}},
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-maps.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-maps.mkiv
index af646b2e1ee..8775f565e5a 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-maps.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-maps.mkiv
@@ -363,8 +363,8 @@
\def\doarticleheader
{\startbaselinecorrection
\bgroup
- \hsize = 457pt
- \let\\\crlf
+ \hsize= 457pt
+ \enforced\let\\\crlf
\blank[35pt,force]
\switchtobodyfont[24pt]
\startalign[flushleft,verytolerant,extremestretch]
@@ -419,7 +419,8 @@
\def\signArticle
{\doifnothing
{\MapsSkipFooter}
- {\blank[line]\let\\\crlf
+ {\blank[line]%
+ \enforced\let\\\crlf
\noindent\switchtobodyfont[ss,9pt]%
\MapsAuthor
\doifsomething{\MapsAddress}{\\\MapsAddress}%
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-module-basic.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-module-basic.mkiv
index 74621b2a3a8..7024cd91a0f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-module-basic.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-module-basic.mkiv
@@ -25,8 +25,6 @@
%D him when you run into problems. Bugs in this style can be sent to
%D Hans.
-\showframe
-
\usemodule[abbreviations-words]
\startmodule[modules-basics]
@@ -45,20 +43,24 @@
\let\module\setupdocument
-\definepalet [module:unknown] [localone=black,localtwo=white]
+\definepalet [module:unknown] [locallocalone=darkyellow,localtwo=darkred,localthree=white,localfour=darkgray]
-\definepalet [module:tex] [localone=blue,localtwo=green]
-\definepalet [module:mkii] [localone=blue,localtwo=green]
-\definepalet [module:mkiv] [localone=blue,localtwo=green]
-\definepalet [module:mkvi] [localone=blue,localtwo=green]
+\definepalet [module:tex] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:mkii] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:mkiv] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:mkvi] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:mkxl] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:mklx] [localone=darkblue,localtwo=darkgreen,localthree=white,localfour=darkgray]
-\definepalet [module:lua] [localone=red,localtwo=green]
-\definepalet [module:cld] [localone=red,localtwo=green]
+\definepalet [module:lua] [localone=darkred,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:lmt] [localone=darkred,localtwo=darkgreen,localthree=white,localfour=darkgray]
+\definepalet [module:cld] [localone=darkred,localtwo=darkgreen,localthree=white,localfour=darkgray]
-\definepalet [module:mp] [localone=red,localtwo=blue]
-\definepalet [module:mpii] [localone=red,localtwo=blue]
-\definepalet [module:mpiv] [localone=red,localtwo=blue]
-\definepalet [module:metapost][localone=red,localtwo=blue]
+\definepalet [module:mp] [localone=darkred,localtwo=darkblue,localthree=white,localfour=darkgray]
+\definepalet [module:mpii] [localone=darkred,localtwo=darkblue,localthree=white,localfour=darkgray]
+\definepalet [module:mpiv] [localone=darkred,localtwo=darkblue,localthree=white,localfour=darkgray]
+\definepalet [module:mpxl] [localone=darkred,localtwo=darkblue,localthree=white,localfour=darkgray]
+\definepalet [module:metapost][localone=darkred,localtwo=darkblue,localthree=white,localfour=darkgray]
\setuppalet
[module:unknown]
@@ -67,12 +69,10 @@
StartPage ;
- color local_white ; local_white := .8white ;
- color local_one ; local_one := \MPcolor{localone} randomized (.6,.8) ;
- color local_two ; local_two := \MPcolor{localtwo} randomized (.3,.4) ;
-
- color local_one ; local_one := .75[\MPcolor{localone},white] ;
- color local_two ; local_two := .75[\MPcolor{localtwo},white] ;
+ color local_one ; local_one := .6 * \MPcolor{localone} ;
+ color local_two ; local_two := .6 * \MPcolor{localtwo} ;
+ color local_three ; local_three := \MPcolor{localthree} ;
+ color local_four ; local_four := \MPcolor{localfour} ;
numeric width ; width := bbwidth Page ;
numeric height ; height := bbheight Page ;
@@ -84,12 +84,13 @@
ddy := 0 ; sx := 60u ;
for i=1 upto (4 randomized 2) :
sy := 7u randomized 3u ;
- fill unitsquare xyscaled(sx,sy) shifted (0,ddy) withcolor local_two ;
+ fill unitsquare xyscaled(sx,sy) shifted (0,ddy)
+ withcolor local_two ;
ddy := ddy + sy + 4u ;
endfor ;
) ;
p := p shifted (dx,dy) shifted - center p ;
- fill boundingbox p enlarged 8u withcolor local_white ;
+ fill boundingbox p enlarged 8u withcolor local_four ;
fill boundingbox p enlarged 4u withcolor local_one ;
draw p ;
enddef ;
@@ -111,7 +112,7 @@
draw anchored.urt(textext("\bf\strut\documentvariable{subtitle}") ysized 1.5cm,urcorner Page shifted (-1cm,-10cm)) ;
draw anchored.urt(textext("\bf\strut\documentvariable{author}") ysized 1.5cm,lrcorner Page shifted (-1cm, 5cm)) ;
draw anchored.urt(textext("\bf\strut\currentdate") ysized 1.5cm,lrcorner Page shifted (-1cm, 3cm)) ;
- ) withcolor .25white ;
+ ) withcolor local_three ;
StopPage ;
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-balls.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-balls.mkiv
index 6774b83407f..14b33f30389 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-balls.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-balls.mkiv
@@ -156,7 +156,7 @@
\unexpanded\def\StartTitlePage
{\startstandardmakeup
\setupalign[middle]
- \unexpanded\def\\{\vfil\bfb\setupinterlinespace}
+ \enforced\protected\def\\{\vfil\bfb\setupinterlinespace}
\bfd\setupinterlinespace
\vfil}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-bars.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-bars.mkiv
index 13c09ff3b80..37f18ffca8d 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-bars.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-bars.mkiv
@@ -68,7 +68,7 @@
\setupheadertexts
[Breskens 2012]
- [\getvariable{document}{title}]
+ [\documentvariable{title}]
\setupbackgrounds
[page]
@@ -99,9 +99,9 @@
\startsetups document:setup
- \doifsomething {\getvariable{document}{color}} {
+ \doifsomething {\documentvariable{color}} {
- \definecolor[maincolor][\getvariable{document}{color}]
+ \definecolor[maincolor][\documentvariable{color}]
}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-boring.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-boring.mkiv
new file mode 100644
index 00000000000..334d6216d5d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-boring.mkiv
@@ -0,0 +1,143 @@
+%D \module
+%D [ file=s-present-boring, % s-pre-15,
+%D version=2020.07.10,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Boring,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Because I use a mupdf based viewer and acrobat is not always reliable I nowadays
+%D tend to go for simple presentation styles. They mostly serve as a reminder for
+%D myself of what I'm supposed to talk about. Just demoing often makes more sense,
+%D especially at meetings where there is some interaction.
+
+\startmodule[present-boring]
+
+\setupbodyfont
+ [plex]
+
+\setuppapersize
+ [S6]
+
+\setuplayout
+ [backspace=20pt,
+ topspace=20pt,
+ bottomspace=20pt,
+ header=0pt,
+ footer=0pt,
+ bottom=20pt,
+ bottomdistance=30pt,
+ width=middle,
+ height=fit]
+
+\definecolor[maincolor] [darkblue]
+\definecolor[extracolor][darkyellow]
+\definecolor[darkcolor] [darkgray]
+
+\setupbackgrounds
+ [page]
+ [backgroundoffset=10pt,
+ background=color,
+ backgroundcolor=darkcolor]
+
+\setupbackgrounds
+ [text] [text]
+ [backgroundoffset=10pt,
+ background=color,
+ backgroundcolor=maincolor]
+
+\setupbackgrounds
+ [bottom] [text]
+ [backgroundoffset=10pt,
+ background=color,
+ backgroundcolor=extracolor]
+
+\setupcolors
+ [textcolor=white]
+
+\setuphead
+ [chapter]
+ [style=\bfc,
+ after={\blank[line,fixed]}]
+
+\setupwhitespace
+ [halfline]
+
+\setupblank
+ [halfline,fixed]
+
+% \setupblank
+% [fixed]
+
+\setuplinenumbering
+ [typing]
+ [style=\txx,
+ color=middlegray]
+
+\setuptyping
+ [numbering=line,
+ location=left,
+ blank=halfline]
+
+\startsetups document:start
+
+ \startpagemakeup
+ \raggedcenter
+ \vfill
+ \dontleavehmode \scale [
+ width=\textwidth
+ ] {
+ \space
+ {\bf \documentvariable{title}}
+ \space
+ }
+ \vfill
+ \dontleavehmode \scale [
+ width=.8\textwidth
+ ] {
+ \space
+ {\bf \documentvariable{banner}}
+ \space
+ }
+ \vfill
+ \vfill
+ \dontleavehmode \scale [
+ width=\textwidth
+ ] {
+ \qquad
+ \color[darkcolor]{\documentvariable{location}}
+ \qquad
+ }
+ \vfill
+ \stoppagemakeup
+
+ \setupbottomtexts [
+ {
+ \words {
+ \documentvariable{title}
+ \quad\emdash\quad
+ \documentvariable{location}
+ \quad\emdash\quad
+ \getmarking[title]
+ }
+ }
+ ]
+
+\stopsetups
+
+\startsetups document:stop
+ %
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-boring.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{context/2020/context-2020-tokens.tex}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-colorful.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-colorful.mkiv
index ed4b5f7c487..f71a297d778 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-colorful.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-colorful.mkiv
@@ -231,7 +231,7 @@
\bfd\setupinterlinespace
\setupalign[middle]
\vfil
- \let\\=\vfil
+ \enforced\let\\\vfil
\scale
[factor=max]\bgroup
\framed
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-funny.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-funny.mkiv
index 4948766adca..3788f94f037 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-funny.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-funny.mkiv
@@ -190,7 +190,7 @@
\bfd\setupinterlinespace
\setupalign[middle]
\vfil
- \def\\{\vfil\bfb\setupinterlinespace}}
+ \enforced\protected\def\\{\vfil\bfb\setupinterlinespace}}
\unexpanded\def\StopTitlePage
{\vfil\vfil\vfil
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-fuzzy.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-fuzzy.mkiv
index ee029b0e605..312cf1ce73e 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-fuzzy.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-fuzzy.mkiv
@@ -125,7 +125,7 @@
\bfd\setupinterlinespace
\setupalign[middle]
\vfil
- \let\\=\vfil}
+ \enforced\let\\\vfil}
\unexpanded\def\StopTitlePage
{\vfil\vfil\vfil
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-green.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-green.mkiv
index e62257ff383..5a57742576d 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-green.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-green.mkiv
@@ -261,7 +261,7 @@
\bfd\setupinterlinespace
\setupalign[middle]
\vfil
- \let\\=\vfil}
+ \enforced\let\\\vfil}
\unexpanded\def\StopTitlePage
{\vfil\vfil\vfil
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-organic.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-organic.mkiv
index 657b786f229..7994205a1ab 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-organic.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-organic.mkiv
@@ -289,7 +289,7 @@
\unexpanded\def\StartTitlePage
{\startstandardmakeup
\switchtobodyfont[big]
- \def\\{\vfill\bfb\let\\=\par}
+ \enforced\protected\def\\{\vfill\bfb\enforced\let\\\par}%
\bfd\setupinterlinespace\gray
\vskip.5cm\relax}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-original.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-original.mkiv
index 1c5e94c8579..50cd6f9ba65 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-original.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-original.mkiv
@@ -213,7 +213,7 @@
\setupinterlinespace
\setupalign[middle]
\vfil
- \let\\=\vfil}
+ \enforced\let\\\vfil}
\unexpanded\def\StopTitlePage
{\vfil\vfil\vfil
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-split.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-split.mkiv
index 48be7ca8199..186075c58dc 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-split.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-split.mkiv
@@ -154,7 +154,7 @@
\unexpanded\def\StartTitlePage
{\startstandardmakeup
\setupalign[middle]
- \unexpanded\def\\{\vfil\bfb\setupinterlinespace}
+ \enforced\protected\def\\{\vfil\bfb\setupinterlinespace}
\bfd\setupinterlinespace
\vfil}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-stack.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-stack.mkiv
index 4cc75404f2e..cda03ae1257 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-stack.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-stack.mkiv
@@ -98,7 +98,7 @@
\unexpanded\def\TitlePage#1%
{\startstandardmakeup
\setupalign[middle]
- \def\\{\vfil\bfb\setupinterlinespace}
+ \enforced\protected\def\\{\vfil\bfb\setupinterlinespace}
\bfd\setupinterlinespace
\vfil#1\vfil\vfil
\stopstandardmakeup}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-stepper.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-stepper.mkiv
index 3dd8d9dcd42..c2f3c018a51 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-stepper.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-stepper.mkiv
@@ -189,7 +189,7 @@
{\setups[fonts:normalize]
\resetsetups[fonts:normalize]
\startstandardmakeup[headerstate=high]
- \def\\{\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}%
+ \enforced\protected\def\\{\enforced\protected\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}%
#1\setstrut\setupinterlinespace\vfil#3\vfil\vfil
\stopstandardmakeup}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv
index 566a610a4f9..900d8edc605 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv
@@ -259,12 +259,12 @@
\switchtobodyfont[\measure{titlepagefont}]
- \let\\=\crlf
+ \enforced\let\\\crlf
\startalignment[flushleft]
\bf
\setupinterlinespace
- \begstrut\getvariable{document}{title}\endstrut\par
+ \begstrut\documentvariable{title}\endstrut\par
\stopalignment
\vfill
@@ -272,7 +272,7 @@
\startalignment[flushright]
\bf
\setupinterlinespace
- \begstrut\getvariable{document}{subtitle}\endstrut\par
+ \begstrut\documentvariable{subtitle}\endstrut\par
\stopalignment
\stoptopicmakeup
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-weird.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-weird.mkiv
index 27ef7b2c26d..641c3d979c4 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-weird.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-weird.mkiv
@@ -288,7 +288,7 @@
\starttexdefinition TitlePage #1
\begingroup
- \def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}}
+ \enforced\protected\def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}}
\enablemode[SpreadPage]
\StartPage{#1}
\StopPage
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-present-windows.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-windows.mkiv
index 22d6fdba15c..422e238016a 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-present-windows.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-windows.mkiv
@@ -320,7 +320,7 @@
align=middle]
\startSampleText[middle]
\bfd\setupinterlinespace
- \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}}
+ \enforced\protected\def\\{\bfb\setupinterlinespace\vfil\enforced\protected\def\\{\vfil}}}
\unexpanded\def\StopTitlePage
{\stopSampleText
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv
index 72cccce54f1..a693fbc4417 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv
@@ -21,7 +21,7 @@
\enablehiddenbackground % trick
-\edef\hiddenbackgroundlist{\hiddenbackgroundlist,trace-references}
+\appendhiddenbackground{trace-references}
\defineoverlay
[trace-references]
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv
index d9492af3e54..658343ac560 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv
@@ -42,49 +42,49 @@
\unexpanded\def\StartSyntax
{\startlines
% formatters
- \let\Indent \module_syntax_Indent
- \let\Sugar \module_syntax_Sugar
- \let\Something \module_syntax_Something
- \let\Lbrace \module_syntax_Lbrace
- \let\Rbrace \module_syntax_Rbrace
- \let\Lparent \module_syntax_Lparent
- \let\Rparent \module_syntax_Rparent
- \let\Lbracket \module_syntax_Lbracket
- \let\Rbracket \module_syntax_Rbracket
- \let\Or \module_syntax_Or
- \let\Optional \module_syntax_Optional
- \let\Means \module_syntax_Means
- \let\Tex \module_syntax_Tex
- \let\Literal \module_syntax_Literal
- \let\Syntax \module_syntax_Syntax
- \let\Next \module_syntax_Next
- \let\Whatever \module_syntax_Whatever
- \let\Quote \module_syntax_Quote
- \let\Or \module_syntax_Or
- \let\Means \module_syntax_Means
- \let\FlaggedLiteral \module_syntax_FlaggedLiteral
- \let\FlaggedSomething\module_syntax_FlaggedSomething
+ \enforced\let\Indent \module_syntax_Indent
+ \enforced\let\Sugar \module_syntax_Sugar
+ \enforced\let\Something \module_syntax_Something
+ \enforced\let\Lbrace \module_syntax_Lbrace
+ \enforced\let\Rbrace \module_syntax_Rbrace
+ \enforced\let\Lparent \module_syntax_Lparent
+ \enforced\let\Rparent \module_syntax_Rparent
+ \enforced\let\Lbracket \module_syntax_Lbracket
+ \enforced\let\Rbracket \module_syntax_Rbracket
+ \enforced\let\Or \module_syntax_Or
+ \enforced\let\Optional \module_syntax_Optional
+ \enforced\let\Means \module_syntax_Means
+ \enforced\let\Tex \module_syntax_Tex
+ \enforced\let\Literal \module_syntax_Literal
+ \enforced\let\Syntax \module_syntax_Syntax
+ \enforced\let\Next \module_syntax_Next
+ \enforced\let\Whatever \module_syntax_Whatever
+ \enforced\let\Quote \module_syntax_Quote
+ \enforced\let\Or \module_syntax_Or
+ \enforced\let\Means \module_syntax_Means
+ \enforced\let\FlaggedLiteral \module_syntax_FlaggedLiteral
+ \enforced\let\FlaggedSomething\module_syntax_FlaggedSomething
% shortcuts
- \let\FL \module_syntax_FlaggedLiteral
- \let\FS \module_syntax_FlaggedSomething
- \let\L \module_syntax_Literal
- \let\S \module_syntax_Something
- \let\M \module_syntax_Means
- \let\N \module_syntax_Next
- \let\O \module_syntax_Or
- \let\Q \module_syntax_Quote
- \let\LB \module_syntax_Lbrace
- \let\RB \module_syntax_Rbrace
- \let\LP \module_syntax_Lparent
- \let\RP \module_syntax_Rparent
- \let\LS \module_syntax_Lbracket
- \let\RS \module_syntax_Rbracket
- \let\{ \module_syntax_Lbrace
- \let\} \module_syntax_Rbrace
- \let\( \module_syntax_Lparent
- \let\) \module_syntax_Rparent
- \let\[ \module_syntax_Lbracket
- \let\] \module_syntax_Rbracket
+ \enforced\let\FL \module_syntax_FlaggedLiteral
+ \enforced\let\FS \module_syntax_FlaggedSomething
+ \enforced\let\L \module_syntax_Literal
+ \enforced\let\S \module_syntax_Something
+ \enforced\let\M \module_syntax_Means
+ \enforced\let\N \module_syntax_Next
+ \enforced\let\O \module_syntax_Or
+ \enforced\let\Q \module_syntax_Quote
+ \enforced\let\LB \module_syntax_Lbrace
+ \enforced\let\RB \module_syntax_Rbrace
+ \enforced\let\LP \module_syntax_Lparent
+ \enforced\let\RP \module_syntax_Rparent
+ \enforced\let\LS \module_syntax_Lbracket
+ \enforced\let\RS \module_syntax_Rbracket
+ \enforced\let\{ \module_syntax_Lbrace
+ \enforced\let\} \module_syntax_Rbrace
+ \enforced\let\( \module_syntax_Lparent
+ \enforced\let\) \module_syntax_Rparent
+ \enforced\let\[ \module_syntax_Lbracket
+ \enforced\let\] \module_syntax_Rbracket
% precaution
\catcode`\#\othercatcode}
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-system-macros.mkxl b/Master/texmf-dist/tex/context/modules/mkiv/s-system-macros.mkxl
new file mode 100644
index 00000000000..0f26444037b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-system-macros.mkxl
@@ -0,0 +1,311 @@
+%D \module
+%D [ file=s-system-tokens.mkxl,
+%D version=2020.06.02,
+%D title=\CONTEXT\ Style File,
+%D subtitle=System Tokens Checking,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This file is for Wolfgang and Hans and it's used in the transition from \MKIV\
+%D to the more robust \LMTX.
+
+% todo: \permanent\protected\let\select\directselect : same value (add ref)
+%
+% todo: when mutable, remove immutable, decide on how immutable it really is
+%
+% todo: just for the fun of it we can compare the table generated here to mkiv but it
+% needs the same hash exposure as we use in luametatex so i'll do that after all lmtx
+% macros are checked (maybe i need to backport some more but it has a low priority)
+%
+% todo: do we need something similar for lua functions etc (problem: performance hit)
+%
+% todo: and how about metapost ... i need a mp.hashtokens in order to do that and I also
+% need to think about protection there (tricky as we use an avl hash there)
+%
+% public undefined : SmallCaps scitebuffer sciteinlinebuffer
+% single todos : \ \- \\ \_
+
+\enablemode[texmacros]
+\enablemode[metapostmacros]
+% \enablemode[notmarked]
+\enablemode[everything]
+
+\startmodule[system-macros]
+
+\continueifinputfile{s-system-macros.mkxl}
+
+% \usemodule[article-basic] \setuplayout[tight] \setupbodyfont[7pt,tt]
+\usemodule[article-basic] \setuplayout[tight] \setupbodyfont[5pt,tt]
+
+\setupbackgrounds[page][background=color,backgroundcolor=darkgray] \setupcolors[textcolor=white]
+
+\setuppapersize
+ [A4,landscape]
+ [A4,landscape]
+
+\starttext
+
+\startluacode
+
+ if tex.modes.texmacros then
+
+ local context = context
+ local ctx_NC = context.NC
+ local ctx_NR = context.NR
+ local ctx_bold = context.bold
+ local ctx_verb = context.verbatim
+
+ local find = string.find
+ local gsub = string.gsub
+ local create = token.create
+
+ local crap = "[$>%|%&%#" .. string.char(0xEF) .. "]"
+
+ local basefile = resolvers.findfile("context.mkxl")
+ local swapnames = { }
+
+ local pattern = file.join(file.pathpart(basefile),"/*.mk*")
+ local filenames = dir.glob(pattern)
+ for i=1,#filenames do
+ swapnames[file.basename(filenames[i])] = true
+ end
+
+ local pattern = file.join(file.pathpart(basefile),"/*.l**")
+ local filenames = dir.glob(pattern)
+ for i=1,#filenames do
+ swapnames[file.basename(filenames[i])] = true
+ end
+
+ local hashnames = table.setmetatableindex(function(t,k)
+ local s = file.suffix(k)
+ local v = k
+ if s == "mkiv" then
+ local n = file.replacesuffix(k,"mkxl")
+ if swapnames[n] then
+ v = n
+ end
+ elseif s == "mkvi" then
+ local n = file.replacesuffix(k,"mklx")
+ if swapnames[n] then
+ v = n
+ end
+ elseif s == "lua" then
+ local n = file.replacesuffix(k,"lmt")
+ if swapnames[n] then
+ v = n
+ end
+ end
+ t[k] = v
+ return v
+ end)
+
+ require("mtx-interface")
+
+ local data = scripts.interface.editor("data")
+ local files = data and data.common and data.common.filenames or { }
+ local flagged = 0
+ local total = 0
+ local list = tex.hashtokens()
+ local all = not tex.modes.notmarked
+ local everything = tex.modes.everything
+
+ table.sort(list)
+
+ local function show(visible, check)
+ -- context.starttabulate { "|l|l|l|lj2|l|l|l|l|l|l|l|l|" }
+ context.starttabulate { "|l|l|l|lj2|l|l|l|l|l|l|l|l|" }
+ for i=1,#list do
+ local k = list[i]
+ if check(k) then
+ local v = create(k)
+ local mutable = v.mutable and "mutable"
+ local immutable = v.immutable and "immutable"
+ local frozen = v.frozen and "frozen"
+ local permanent = v.permanent and "permanent"
+ local primitive = v.primitive and "primitive"
+ local instance = v.instance and "instance"
+ local dealtwith = mutable or immutable or mutable or frozen or permanent or primitive -- beware: we can have combinations
+ local whatever = find(k,"^[a-z][a-z][a-z]+_")
+ local cscommand = gsub(v.cmdname or "","_"," ")
+ local undefined = cscommand == "undefined cs"
+ local marked = (dealtwith and "+") or (whatever and "-") or (instance and "!")
+ if everything or ((all or not marked) and not find(k,"^[pvm]_") and not find(k,"^![tT]")) then
+ local parameters = v.parameters
+ local noaligned = v.noaligned and "noaligned"
+ local filename = files[k]
+ local csname = context.escape(k)
+ if undefined then
+ marked = "?"
+ end
+ ctx_NC() if marked then context(marked) end
+ ctx_NC() if primitive then ctx_bold(csname) else
+ ctx_verb(csname) end
+ ctx_NC() if parameters then context(parameters > 0 and parameters or "-") end
+ ctx_NC() if undefined then context.red(false) end
+ context(cscommand)
+ ctx_NC() if primitive then context(primitive) end
+ ctx_NC() if permanent then context(permanent) end
+ ctx_NC() if immutable then context(immutable) end
+ ctx_NC() if frozen then context(frozen) end
+ ctx_NC() if mutable then context(mutable) end
+ ctx_NC() if instance then context(instance) end
+ ctx_NC() if noaligned then context(noaligned) end
+ ctx_NC() if filename then context(hashnames[filename]) end
+ ctx_NC() ctx_NR()
+ end
+ if visible then
+ total = total + 1
+ if dealtwith then
+ flagged = flagged + 1
+ end
+ end
+ end
+ end
+ context.stoptabulate()
+ end
+
+ context.starttitle { title = "Public \\TEX\\ commands" }
+ show(true, function(k) return find(k,"^[a-zA-Z]+$") end)
+ context.stoptitle()
+
+ context.starttitle { title = "Private \\TEX\\ commands" }
+ show(false, function(k) return not find(k,"^[a-zA-Z]+$") and not find(k,crap) end)
+ context.stoptitle()
+
+ tokens.setters.macro("NumberOfVisible", total)
+ tokens.setters.macro("NumberOfFlagged", flagged)
+
+ end
+
+\stopluacode
+
+\startmode[texmacros]
+
+ \page
+
+ \starttabulate[|c|l|]
+ \HL
+ \NC \type {+} \NC mutable, immutable, frozen, permanent, primitive \NC \NR
+ \NC \type {-} \NC protected by obscurity (underscores) \NC \NR
+ \NC \type {!} \NC instance (can be frozen) \NC \NR
+ \NC \type {0-9} \NC the number of arguments (argument grabbing can be delegated) \NC \NR
+ \HL
+ \stoptabulate
+
+ \start \hsize 15cm \veryraggedright
+ Often frozen commands are redefined on demand and they can be overloaded. Mutable
+ doesn't mean that a user can change it without consequences, for instance the
+ \type {\current...} ones. Primitives come with the engine, permanent macros are
+ the core of \CONTEXT. Noaligned macros are special and dealt deep down when
+ scanning for alignment specific primitives.
+ \par \stop
+
+ \starttabulate[||r|]
+ \BC number of visible macros \NC \NumberOfVisible \NC \NR
+ \BC number of flagged macros \NC \NumberOfFlagged \NC \NR
+ \stoptabulate
+
+\stopmode
+
+\page
+
+\startluacode
+
+ if tex.modes.metapostmacros then
+
+ local context = context
+ -- local ctx_NC = context.NC
+ -- local ctx_NR = context.NR
+ -- local ctx_bold = context.bold
+
+ local find = string.find
+ local gsub = string.gsub
+ local create = token.create
+
+ context.starttitle { title = "\\METAFUN\\ commands" }
+
+ metapost.simple("prestine")
+
+ local mptotal = 0
+ local codes = metapost.codes
+ local types = metapost.types
+ local parameters = metapost.knownparameters
+ local procodes = mplib.propertycodes
+ local everything = tex.modes.everything
+
+ context.startcolumns { n = 5, distance = "1em" }
+ context.nohyphens(false)
+ context.obeyspaces(false)
+ local t = metapost.gethashentries("prestine",true) -- prestine:1
+ if t then
+ table.sort(t,function(a,b) return a[3] < b[3] end)
+ mptotal = #t
+ for i=1,mptotal do
+ local ti = t[i]
+ local code = codes[ti[1]]
+ local property = procodes[ti[2]]
+ local name = ti[3]
+ local vtype = ti[4]
+ local vardef = vtype and types[vtype] == "unsuffixedmacro"
+ context.bgroup()
+ -- context("%-15s\\quad",vardef and "(vardef) tag" or code)
+ context("%s %-15s\\quad",parameters[name] and "+" or "\\nbsp",vardef and "(vardef) tag" or code)
+ if property == "primitive" then
+ context.bf(false)
+ context.blue(false)
+ elseif property == "permanent" then
+ context.bf(false)
+ context.lightgreen(false)
+ elseif property == "immutable" then
+ context.bf(false)
+ context.lightcyan(false)
+ elseif property == "mutable" then
+ context.bf(false)
+ context.lightmagenta(false)
+ elseif everything or not find(name,"^%a+_") then
+ -- todo:
+ if vardef then
+ context.bf(false)
+ context.lightred(false)
+ end
+ end
+ context.verbatim(name)
+ context.egroup()
+ context.par()
+ end
+ end
+ context.stopcolumns()
+
+ context.stoptitle()
+
+ tokens.setters.macro("NumberOfMetafun", mptotal)
+
+ end
+\stopluacode
+
+\startmode [metapostmacros]
+
+ \page
+
+ \starttabulate[|c|l|]
+ \HL
+ \NC \type {-3} \NC \bf \lightmagenta mutable \NC \NR
+ \NC \type {1} \NC \bf \blue primitive \NC \NR
+ \NC \type {2} \NC \bf \lightgreen permanent \NC \NR
+ \NC \type {3} \NC \bf \lightcyan immutable \NC \NR
+ \NC \type {+} \NC \bf (also) used as key \NC \NR
+ \HL
+ \stoptabulate
+
+ \starttabulate[||r|]
+ \BC number of metafun entries \NC \NumberOfMetafun \NC \NR
+ \stoptabulate
+
+\stopmode
+
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-system-tokens.mkxl b/Master/texmf-dist/tex/context/modules/mkiv/s-system-tokens.mkxl
new file mode 100644
index 00000000000..b83a4f47b6c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-system-tokens.mkxl
@@ -0,0 +1,84 @@
+%D \module
+%D [ file=s-system-tokens.mkxl,
+%D version=2020.06.02,
+%D title=\CONTEXT\ Style File,
+%D subtitle=System Tokens Checking,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[system-tokens]
+
+\registerctxluafile{s-system-tokens}{}
+
+\permanent\protected\def\showsystemtokens{\ctxlua{moduledata.system.tokens.showlist()}} % can be public implementor
+
+\stopmodule
+
+\continueifinputfile{s-system-tokens.mkxl}
+
+\usemodule[article-basic]
+
+\setuppapersize[A4,landscape]
+
+\setuplayout[tight]
+
+\setupbodyfont[8pt]
+
+\starttext
+
+ \showsystemtokens
+
+ Some tokens cannot be created yet because they are more complex but eventually the creator will
+ deal with them. The indices are sometimes the same as internal but in most cases nicely start
+ at zero. When they start at another value, then there is an internal token or state that is not
+ user accessible. You always need to use symbolic constants as the numbers can change.
+
+ The first column is a classifier (which is experimental and categories might change when we feel
+ the need).
+
+ \startcolumns[n=5]
+ \starttabulate[|T||]
+ \NC 0 \NC unused \NC \NR
+ \NC 1 \NC regular \NC \NR
+ \NC 2 \NC character \NC \NR
+ \NC 3 \NC register \NC \NR
+ \NC 4 \NC internal \NC \NR
+ \NC 5 \NC reference \NC \NR
+ \NC 6 \NC data \NC \NR
+ \NC 7 \NC token \NC \NR
+ \NC 8 \NC node \NC \NR
+ \stoptabulate
+ \stopcolumns
+
+ \page
+
+ Here is a typeset table of \type {\startframed} using \type {\luatokentable\startframed}:
+
+ \luatokentable\startframed
+
+ which calls \type {\pack_framed_start_framed} where \type {\luatokentable\pack_framed_start_framed} gives:
+
+
+ \unprotect
+ \luatokentable\pack_framed_start_framed
+ \protect
+
+ So you can guess what generates this:
+
+ \unprotect
+ \luatokentable\pack_framed_start_framed_nop
+ \protect
+
+ And this:
+
+ \unprotect
+ \luatokentable\pack_framed_start_framed_yes
+ \protect
+
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-system-visual.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-system-visual.mkiv
new file mode 100644
index 00000000000..5b5107a2d12
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-system-visual.mkiv
@@ -0,0 +1,94 @@
+%D \module
+%D [ file=s-system-visual.mkxl,
+%D version=2020.07.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=System Visual Debugger Legend,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[system-visual]
+
+\starttexdefinition unexpanded visuallegend
+ \begingroup
+ \switchtobodyfont[10pt]
+ \setuptabulate[before=,after=]
+ \hsize24cm
+ \scale
+ [width=\textwidth]
+ \bgroup
+ \forgetall
+ \startboxedcolumns[n=3,strut=no]
+ \starttabulate[|lT|l|]
+ \NC L__ \NC line box \NC \NR
+ \NC H__ \NC horizontal box \NC \NR
+ \NC _T_ \NC vertical top box \NC \NR
+ \NC __V \NC vertical box \NC \NR
+ \TB
+ \NC VK \NC vertical kern \NC \NR
+ \NC HK \NC horizontal kern \NC \NR
+ \NC MK \NC math kern \NC \NR
+ \NC MK \NC margin kern \NC \NR
+ \NC LK \NC math list kern \NC \NR
+ \TB
+ \NC VP \NC vertical penalty \NC \NR
+ \NC HP \NC horizontal penalty \NC \NR
+ \TB
+ \NC LI \NC line skip \NC \NR
+ \NC BS \NC baseline skip \NC \NR
+ \NC PS \NC par skip \NC \NR
+ \NC DA \NC abovedisplay skip \NC \NR
+ \NC DB \NC belowdisplay skip \NC \NR
+ \NC SA \NC above display short skip \NC \NR
+ \NC SB \NC below display short skip \NC \NR
+ \NC TS \NC top skip \NC \NR
+ \NC ST \NC split top skip \NC \NR
+ \NC AS \NC tab skip \NC \NR
+ \NC LH \NC left hang skip \NC \NR
+ \NC RH \NC right hang skip \NC \NR
+ \NC MS \NC thin mu skip \NC \NR
+ \NC MM \NC med mu skip \NC \NR
+ \NC ML \NC thick mu skip \NC \NR
+ \NC IM \NC inter math skip \NC \NR
+ \NC MT \NC math skip \NC \NR
+ \NC LS \NC left skip \NC \NR
+ \NC RS \NC right skip \NC \NR
+ \NC SP \NC space skip \NC \NR
+ \NC XS \NC x space skip \NC \NR
+ \NC ZS \NC zero space skip \NC \NR
+ \NC PF \NC par fill skip \NC \NR
+ \NC IN \NC indent skip \NC \NR
+ \NC CS \NC correction skip \NC \NR
+ \NC VS \NC vertical user skip \NC \NR
+ \NC HS \NC horizontal user skip \NC \NR
+ \NC IC \NC italic correcection \NC \NR
+ \TB
+ \NC NL \NC leaders \NC \NR
+ \NC CL \NC c leaders \NC \NR
+ \NC XL \NC x leaders \NC \NR
+ \NC GL \NC g leaders \NC \NR
+ \TB
+ \NC M:B \NC math begin \NC \NR
+ \NC M:E \NC math end \NC \NR
+ \NC W:* \NC whatsit \NC \NR
+ \stoptabulate
+ \stopboxedcolumns
+ \egroup
+ \endgroup
+\stoptexdefinition
+
+\stopmodule
+
+\continueifinputfile{s-system-visual.mkiv}
+
+\usemodule[article-basic]
+
+\startTEXpage[width=20cm,offset=5mm]
+
+ \visuallegend
+
+\stopTEXpage
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv
index f8cace1e98e..317c5196ff4 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv
@@ -320,7 +320,7 @@
\startsetups tugboat:introduction:article
\start
- \unexpanded\def\\{\unskip\space\&\space\ignorespaces}
+ \enforced\protected\def\\{\unskip\space\&\space\ignorespaces}
\hbox{\indent\getvariable{tugboat}{author}}
\par
\stop
@@ -333,14 +333,14 @@
\start
\switchtobodyfont[12pt]
- \def\\{\unskip\space\&\space\ignorespaces}
+ \enforced\protected\def\\{\unskip\space\&\space\ignorespaces}
\getvariable{tugboat}{author}
\par
\stop
\start
\switchtobodyfont[9pt]
- \unexpanded\def\\{\unskip,\space\ignorespaces}
+ \enforced\protected\def\\{\unskip,\space\ignorespaces}
\getvariable{tugboat}{address}
\par
\start
@@ -380,7 +380,7 @@
\hrule height .6pt
\blank[halfline]
\start
- \let\\=\par
+ \enforced\let\\\par
\start
\bf
\getvariable{tugboat}{title}
@@ -393,7 +393,7 @@
\blank[line]
\doiftext {\getbuffer[abstract]} {
- \let\\=\endgraf
+ \enforced\let\\\endgraf
\setups[tugboat:abstract:setup]
\startsubject[title={Abstract}]
\getbuffer[abstract]
@@ -421,7 +421,7 @@
\start
\switchtobodyfont[14.4pt]
- \let\\=\par
+ \enforced\let\\\par
\getvariable{tugboat}{title}
\par
\stop
@@ -430,7 +430,7 @@
\blank[tugmedium]
- \let\\=\par
+ \enforced\let\\\par
\setups[tugboat:abstract:setup]
@@ -458,7 +458,7 @@
\leftskip=\dimexpr\textwidth-\signaturewidth\relax
- \let\\=\par
+ \enforced\let\\\par
\dontleavehmode\llap {
$\diamond$\enspace
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat.mkiv
index e243dc4879b..14d751fcd53 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat.mkiv
@@ -393,7 +393,7 @@
% \blank[halfline]
\start
- \def\\{\unskip\space\&\space\ignorespaces}
+ \enforced\protected\def\\{\unskip\space\&\space\ignorespaces}
\hbox{\indent\getvariable{tugboat}{author}}
\par
\stop
@@ -431,7 +431,7 @@
\hrule height .6pt
\blank[halfline]
\start
- \let\\=\par
+ \enforced\let\\\par
{\bf\getvariable{tugboat}{title}}
\par
\blank[halfline]
@@ -441,7 +441,7 @@
\blank[line]
\doiftext {\getbuffer[abstract]} {
- \let\\=\endgraf
+ \enforced\let\\\endgraf
\setups{tugboat:abstract:setup}
\subject{Abstract}
\getbuffer[abstract]
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua
index 8a628816773..818c7ad8434 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua
@@ -35,10 +35,10 @@ local pagedata = { }
local statusname = "x-math-svg-status.lua"
local pdfname = "x-math-svg.pdf"
-local pdftosvg = os.which("mudraw")
+local pdftosvg = os.which("mutool")
local f_make_tex = formatters[ [[context --global kpse:x-math-svg.mkvi --inputfile="%s" --svgstyle="%s" --batch --noconsole --once --purgeall]] ]
-local f_make_svg = formatters[ [[mudraw -o "math-%%d.svg" "%s" 1-9999]] ]
+local f_make_svg = formatters[ [[mutool draw -o "math-%%d.svg" "%s" 1-9999]] ]
----- f_inline = formatters[ [[<div class='math-inline' style='vertical-align:%p'></div>]] ]
local f_inline = formatters[ [[<div class='math-inline'></div>]] ]
@@ -101,7 +101,7 @@ function svgmath.convert(filename,svgstyle)
-- invalid filename
return false, "invalid filename"
elseif not pdftosvg then
- return false, "mudraw is not installed"
+ return false, "mutool is not installed"
end
os.execute(f_make_tex(filename,svgstyle))
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv
index e166995b0c8..bb119f5144f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv
@@ -6,7 +6,7 @@
% this can become a core helper
-% bwe could do all of them in lua
+% we could do all of them in lua
\startluacode
local find = string.find
@@ -87,11 +87,11 @@ end
}
\stoptexdefinition
-\starttexdefinition mtext #1
- \text {
- #1
- }
-\stoptexdefinition
+% \starttexdefinition mtext #1
+% \text {
+% #1
+% }
+% \stoptexdefinition
% mover
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv
index adc49431407..bd55196f9d3 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv
@@ -1890,8 +1890,6 @@
\fi
\stoptexdefinition
-\newsignal\mmltextsignal % not used
-
\starttexdefinition applymmlsometext #1#2
\applymmlmathbackground {#1} {
\applymmlmathcolor {#1} {
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv
index 4e960f4287c..67912b8d76f 100644
--- a/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv
@@ -90,7 +90,9 @@
\pushmacro\setuptext
-\defineframedtext
+\ifcase\contextlmtxmode \else \pushoverloadmode \let\setuptext\setuptext \popoverloadmode \fi
+
+\defineframedtext % todo commands=no
[setuptext]
[\c!width=\hsize,
\c!height=\v!fit,
@@ -492,9 +494,15 @@
\unexpanded\def\basicsetup{\c_cmd_kind\zerocount\cmd_show_setup}
\unexpanded\def\shortsetup{\c_cmd_kind\plusone \cmd_show_setup}
-\unexpanded\def\setup {\c_cmd_kind\plustwo \cmd_show_setup}
+%unexpanded\def\setup {\c_cmd_kind\plustwo \cmd_show_setup}
\unexpanded\def\showsetup {\c_cmd_kind\plustwo \cmd_show_setup}
+\ifcase\contextlmtxmode \else
+ \pushoverloadmode
+ \unexpanded\def\setup{\c_cmd_kind\plustwo\cmd_show_setup}
+ \popoverloadmode
+\fi
+
\unexpanded\def\showsetupinlist#1#2#3%
{%(#1)(#2)(#3)\par
\edef\m_cmd_instance{\secondoftwoarguments#3}%
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.lmt b/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.lmt
new file mode 100644
index 00000000000..be318eb38bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.lmt
@@ -0,0 +1,30 @@
+if not modules then modules = { } end modules ['s-characters-properties'] = {
+ version = 1.001,
+ comment = "companion to s-characters-properties.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.characters = moduledata.characters or { }
+moduledata.characters.combinations = moduledata.characters.combinations or { }
+
+local context = context
+local ctx_NC = context.NC
+local ctx_NR = context.NR
+local ctx_MR = context.MR
+local ctx_ML = context.ML
+
+function moduledata.characters.combinations.showcombinations(settings)
+ context.starttabulate { "|l|T|cTw(1em)|T|" }
+ for k, v in table.sortedhash(characters.verbosemarks) do
+ local m = "with" .. string.gsub(k," ","")
+ ctx_NC() context(k)
+ ctx_NC() context("%U",v)
+ ctx_NC() context("%s",v)
+ ctx_NC() if token.is_defined(m) then context("\\string\\%s",m) end
+ ctx_NC() ctx_NR()
+ end
+ context.stoptabulate()
+end
+
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.mkxl
new file mode 100644
index 00000000000..aef466f8484
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-characters-combinations.mkxl
@@ -0,0 +1,61 @@
+%D \module
+%D [ file=s-characters-combinations,
+%D version=2021.02.08
+%D title=\CONTEXT\ Style File,
+%D subtitle=Character combinations,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[characters-combinations]
+
+\registerctxluafile{s-characters-combinations}{autosuffix}
+
+\installmodulecommandluasingle \showcharactercombinations {moduledata.characters.combinations.showcombinations}
+
+\stopmodule
+
+\continueifinputfile{s-characters-combinations.mkxl}
+
+\usemodule[art-01]
+
+\setupbodyfont[dejavu]
+
+\starttext
+
+ \showcharactercombinations
+
+ \page
+
+ \startlines
+ \chr {a acute } á \withacute a
+ \chr {o double acute } ő \withdoubleacute o
+ \chr {a grave } à \withgrave a
+ \chr {o double grave } ȍ \withdoublegrave o
+ \chr {a circumflex } â \withcircumflex a
+ \chr {e circumflex below} ḙ \withcircumflexbelow e
+ \chr {a diaeresis } ä \withdiaeresis a
+ \chr {a tilde } ã \withtilde a
+ \chr {i tilde below } ḭ \withtildebelow i
+ \chr {a macron } ā \withmacron a
+ \chr {k line below } ḵ \withlinebelow k
+ \chr {c cedilla } ç \withcedilla c
+ \chr {s comma below } ş \withcommabelow s
+ \chr {z hook below } ȥ \withhookbelow z
+ \chr {a hook } ả \withhook a
+ \chr {a ring } å \withring a
+ \chr {a ring below } ḁ \withringbelow a
+ \chr {m dot } ṁ \withdot m
+ \chr {l middle dot } ŀ \withmiddledot l
+ \chr {m dot below } ṃ \withdotbelow m
+ \chr {a breve } ă \withbreve a
+ \chr {a inverted breve } ȃ \withinvertedbreve a
+ \chr {k caron } ǩ \withcaron k
+ \chr {o stroke } ø \withstroke o
+ \stoplines
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-colors-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-colors-show.mkxl
new file mode 100644
index 00000000000..aa0e3227eb6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-colors-show.mkxl
@@ -0,0 +1,276 @@
+%D \module
+%D [ file=colo-run,
+%D version=1997.04.01,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Runtime loaded commands,
+%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.
+
+\registerctxluafile{colo-run}{}
+
+\unprotect
+
+%D Colors
+
+%D These are nicer in \LUA\ code than in \TEX\ code but not more efficient.
+
+\permanent\protected\gdef\showcolorbar[#1]%
+ {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}
+
+\permanent\protected\tolerant\gdef\showcolorset[#1]%
+ {\ctxcommand{showcolorset("#1")}}
+
+\permanent\protected\tolerant\gdef\showcolorcomponents[#1]%
+ {\ctxcommand{showcolorcomponents("#1")}}
+
+\permanent\protected\tolerant\gdef\showcolor[#1]%
+ {\ifparameter#1\or
+ \usecolors [#1]% delayed and we can only ask for the set if
+ \showcolorset[#1]% loading has happened
+ \fi}
+
+%D The rest might also be done in \LUA\ although there is not much beauty to gain
+%D here (too much typesetting specific). Also, these macros are pretty old and
+%D hardly used so best keep them as they are. But we keep them because they always
+%D worked and it doesn't hurt to see some \MKII|-|code every now and then.
+
+%D Palets
+
+\permanent\protected\tolerant\gdef\showpalet[#1]#*[#2]%
+ {\doifelsecolorpalet{#1}
+ {\doifelseinset\v!vertical{#2}\colo_palets_show_vertical\colo_palets_show_horizontal{#1}{#2}}%
+ {}}
+
+\gdef\colo_palets_show_vertical#1#2%
+ {\begingroup
+ \forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet[#1]
+ \tabskip\zeropoint
+ \def\colo_palets_show_palet##1%
+ {\doifelseinset\v!number{#2}{##1\hskip.5\emwidth}{}%
+ \aligntab
+ \color [##1]{\vrule\s!width3\emwidth\s!height\strutht\s!depth\strutdp}%
+ \graycolor[##1]{\vrule\s!width3\emwidth\s!height\strutht\s!depth\strutdp}%
+ \aligntab
+ \doifinset\v!value{#2}{\hskip.5\emwidth\colorvalue{##1}}%
+ \crcr}
+ \halign
+ {\hss\alignmark\alignmark\aligntab\hss\alignmark\alignmark\hss\aligntab\alignmark\alignmark\cr
+ \aligntab\doifinset\v!name{#2}{\strut#1}\aligntab\cr
+ \colo_palets_process[#1]\colo_palets_show_palet\crcr}%
+ \endgroup}
+
+\gdef\colo_palets_show_horizontal#1#2% todo: bTABLE etc
+ {\vbox
+ {\forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet[#1]
+ \tabskip\zeropoint
+ \scratchwidth\zeropoint
+ \doifinset\v!number{#2}
+ {\def\colo_palets_show_palet##1%
+ {\setbox\scratchbox\hbox{##1}%
+ \ifdim\scratchwidth<\wd\scratchbox
+ \scratchwidth\wd\scratchbox
+ \fi}%
+ \colo_palets_process[#1]\colo_palets_show_palet}%
+ \advance\scratchwidth\emwidth
+ \ifdim\scratchwidth<5\emwidth
+ \scratchwidth5\emwidth
+ \fi
+ \halign
+ {\alignmark\alignmark\aligntab\aligntab\hbox to \scratchwidth{\hss\alignmark\alignmark\hss}\cr
+ \doifinset\v!number{#2}
+ {\def\colo_palets_show_palet##1{\aligntab\strut##1}%
+ \colo_palets_process[#1]\colo_palets_show_palet}\cr
+ \doifinset\v!name{#2}{#1\hskip.5\emwidth}%
+ \def\colo_palets_show_palet##1%
+ {\aligntab\strut\color[##1]{\vrule\s!width\scratchwidth\s!height\strutht\s!depth\zeropoint}}%
+ \colo_palets_process[#1]\colo_palets_show_palet\crcr
+ \noalign{\vskip-\strutdepth}%
+ \def\colo_palets_show_palet##1%
+ {\aligntab\graycolor[##1]{\vrule\s!width\scratchwidth\s!height\zeropoint\s!depth\strutdp}}%
+ \colo_palets_process[#1]\colo_palets_show_palet\crcr
+ \doifinset\v!value{#2}
+ {\def\colo_palets_show_palet##1%
+ {\aligntab\vbox
+ {\hsize\scratchwidth
+ \vskip.25\exheight
+ \everypar{\strut}
+ \veryraggedcenter
+ \let\colorformatseparator\endgraf
+ \colorvalue{##1}}}%
+ \colo_palets_process[#1]\colo_palets_show_palet}%
+ \crcr}}}
+
+\gdef\colo_palets_process[#1]%
+ {\getpaletlist[#1]%
+ \normalexpanded{\globalprocesscommalist[\paletlist]}}
+
+\permanent\protected\tolerant\gdef\comparepalet[#1]%
+ {\doifelsecolorpalet{#1}%
+ {\hbox
+ {\colo_palets_compare_indeed\color{#1}%
+ \quad
+ \colo_palets_compare_indeed\graycolor{#1}}}%
+ {}}
+
+\gdef\colo_palets_compare_indeed#1#2%
+ {\vbox
+ {\forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet[#2]
+ \getpaletsize[#2]%
+ \getpaletlist[#2]%
+ \scratchwidth2\emwidth\relax
+ \hsize\paletsize\scratchwidth
+ \def\colo_palets_compare##1%
+ {\hbox
+ {\setbox0\hbox
+ {#1[##1]{\vrule\s!width\hsize\s!height3ex}}%
+ \wd0\zeropoint
+ \box0
+ \hbox to \hsize
+ {\def\colo_palets_compare####1%
+ {\hbox to \scratchwidth
+ {\hss#1[####1]{\vrule\s!width.5\scratchwidth\s!height2.25\exheight\s!depth-.75\exheight}\hss}}%
+ \processcommacommand[\paletlist]\colo_palets_compare}}
+ \endgraf}
+ \processcommacommand[\paletlist]\colo_palets_compare}}
+
+%D Groups
+
+\permanent\protected\tolerant\gdef\showcolorgroup[#1]#*[#2]%
+ {\doifcolor{#1:1}
+ {\doifelseinset\v!vertical{#2}\colo_groups_show_vertical\colo_groups_show_horizontal{#1}{#2}}}
+
+\gdef\colo_groups_show_horizontal#1#2%
+ {\vbox
+ {\forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet
+ \tabskip\zeropoint
+ \def\colorformatseparator{\strut\cr}
+ \def\colo_groups_show_group##1%
+ {\doifcolor{#1:##1}{\vbox
+ {\halign
+ {\hss\alignmark\alignmark\alignmark\alignmark\hss\cr
+ \doifinset\v!number{#2}{\strut##1}\cr
+ \color [#1:##1]{\vrule\s!width4\emwidth\s!height\strutht \s!depth\zeropoint}\cr
+ \graycolor[#1:##1]{\vrule\s!width4\emwidth\s!height\zeropoint\s!depth\strutdp }\cr
+ \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}}}%
+ \hbox
+ {\doifinset\v!name{#2}
+ {\strut
+ \doifelseinset\v!value{#2}
+ {\raise3\lineheight\hbox{#1\hskip.5\emwidth}}
+ {#1}%
+ \hskip.5\emwidth}%
+ \colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4%
+ \colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}}
+
+\gdef\colo_groups_show_vertical#1#2%
+ {\vbox
+ {\forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet
+ \tabskip\zeropoint
+ \def\colo_groups_show_group##1%
+ {\doifcolor{#1:##1}
+ {\doifinset\v!number{#2}
+ {##1\hskip.5\emwidth}%
+ \aligntab
+ \color [#1:##1]{\vrule\s!width2.5\emwidth\s!height\strutht\s!depth\strutdp}%
+ \graycolor[#1:##1]{\vrule\s!width2.5\emwidth\s!height\strutht\s!depth\strutdp}
+ \aligntab
+ \doifinset\v!value{#2}{\hskip.5\emwidth\colorvalue{#1:##1}}%
+ \crcr}}%
+ \halign
+ {\hss\alignmark\alignmark\aligntab\hss\alignmark\alignmark\hss\aligntab\alignmark\alignmark\hss\cr
+ \aligntab\doifinset\v!name{#2}{\strut#1}\aligntab\crcr
+ \colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4%
+ \colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}}
+
+\permanent\protected\tolerant\gdef\comparecolorgroup[#1]%
+ {\doifcolor{#1:1}
+ {\hbox
+ {\colo_groups_compare_indeed\color {#1}\quad
+ \colo_groups_compare_indeed\graycolor{#1}}}}
+
+\gdef\colo_groups_compare_indeed#1#2%
+ {\vbox
+ {\forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \scratchcounter\zerocount
+ \dorecurse{15}{\doifcolor{#2:\recurselevel}{\advance\scratchcounter\plusone}}
+ \scratchwidth2\emwidth\relax
+ \hsize\scratchcounter\scratchwidth
+ \dorecurse\scratchcounter{\colo_groups_compare_step{#1}{#2}\recurselevel}}}
+
+\def\colo_groups_compare_step#1#2#3%
+ {\hbox to \hsize
+ {\setbox\scratchbox\hbox
+ {#1[#2:#3]{\vrule\s!width\hsize\s!height3\exheight}}%
+ \wd\scratchbox\zeropoint
+ \box\scratchbox
+ \hbox to \hsize
+ {\hss
+ \dorecurse\scratchcounter
+ {#1[#2:\recurselevel]{\vrule\s!width.5\scratchwidth\s!height2.25\exheight\s!depth-.75\exheight}%
+ \hss}}}
+ \endgraf}
+
+\protect
+
+\continueifinputfile{s-colors-show.mkxl}
+
+\setupwhitespace[big]
+
+\usecolors[dem]
+
+\starttext
+
+\startsubject[title=\type{\showpalet}]
+ \showpalet [alfa] [horizontal,name,number,value]
+\stopsubject
+
+\startsubject[title=\type{\showcolorcomponents}]
+ \showcolorcomponents[red,green,blue]
+\stopsubject
+
+\startsubject[title=\type{\comparepalet}]
+ \comparepalet[alfa]
+\stopsubject
+
+\startsubject[title=\type{\showcolor}]
+ \showcolor[rgb]
+\stopsubject
+
+\startsubject[title=\type{\showcolorgroup}]
+ \showcolorgroup[magenta]
+ \showcolorgroup[cyan]
+ \showcolorgroup[yellow]
+\stopsubject
+
+\startsubject[title=\type{\comparecolorgroup}]
+ \comparecolorgroup[magenta]
+\stopsubject
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
new file mode 100644
index 00000000000..42b5af125f7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
@@ -0,0 +1,658 @@
+%D \module
+%D [ file=font-run,
+%D version=1998.09.11, % (second)
+%D version=2001.02.20, % (third)
+%D title=\CONTEXT\ Font Macros,
+%D subtitle=Runtime Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D [This code is hooked into the core macros and saves some format
+%D space. It needs a cleanup as it's real old derioved \MKII\ code]
+%D
+%D Better use \type{\bTABLE...\eTABLE}.
+
+\unprotect
+
+\gdef\module_fonts_show_prepare#1%
+ {\iftok{#1}\emptytoks
+ \edef\m_module_fonts_show_title{\the\bodyfontsize}%
+ \else
+ \switchtobodyfont[#1]%
+ \edef\m_module_fonts_show_title{#1}%
+ \fi
+ \ifempty\fontclass
+ \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
+ \orelse\ifx\fontclass\m_module_fonts_show_title
+ \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
+ \else
+ \edef\m_module_fonts_show_title{[\fontclass]\space[\m_module_fonts_show_title]}%
+ \fi}
+
+\permanent\protected\tolerant\gdef\showbodyfont[#1]%
+ {\ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox
+ {\module_fonts_show_prepare{#1}%
+ \def\next##1##2##3##4%
+ {\bTR
+ \bTD{##4}\type{##1}\eTD
+ \bTD{##4}##1##3{\tf ##2}\eTD
+ \bTD{##4}##1##3{\tf ##2}\eTD
+ \bTD{##4}##1##3{\bf ##2}\eTD
+ \bTD{##4}##1##3{\sl ##2}\eTD
+ \bTD{##4}##1##3{\it ##2}\eTD
+ \bTD{##4}##1##3{\bs ##2}\eTD
+ \bTD{##4}##1##3{\bi ##2}\eTD
+ \bTD{##4}##1##3{\tfx ##2}\eTD
+ \bTD{##4}##1##3{\tfxx ##2}\eTD
+ \bTD{##4}##1##3{\tfa ##2}\eTD
+ \bTD{##4}##1##3{\tfb ##2}\eTD
+ \bTD{##4}##1##3{\tfc ##2}\eTD
+ \bTD{##4}##1##3{\tfd ##2}\eTD
+ \eTR}%
+ \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
+ \bTR\bTD[\c!nx=14,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
+ \next{}{}\type{}%
+ \next\rm{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\ss{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\tt{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\mr{\languageparameter\c!text}\mathematics{\tfd\setstrut\strut}%
+ \eTABLE}%
+ \ifinsidefloat\else\stopbaselinecorrection\fi}
+
+\permanent\protected\tolerant\gdef\showbodyfontenvironment[#1]%
+ {\ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox
+ {\module_fonts_show_prepare{#1}%
+ \def\next##1##2%
+ {\bTR
+ \bTD##1\bodyfontsizevariable{##2}\s!text\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!script\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!scriptscript\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!x\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!xx\eTD
+ \bTD##1\bodyfontsizevariable{##2}\v!small\eTD
+ \bTD##1\bodyfontsizevariable{##2}\v!big\eTD
+ %\bTD##1\bodyfontsizevariable{##2}\c!interlinespace\eTD
+ \eTR}%
+ \def\nextone{\next\relax}%
+ \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
+ \bTR\bTD[\c!nx=7,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
+ \next{\tttf\thirdofthreearguments}\relax
+ \processbodyfontenvironmentlist{nextone}
+ \eTABLE}%
+ \ifinsidefloat\else\stopbaselinecorrection\fi}
+
+\permanent\protected\tolerant\gdef\showfont[#1]#*[#2]%
+ {\bgroup
+ \iftok{#1}\emptytoks\else
+ \definedfont[#1]%
+ \ifdim40\emwidth>\hsize
+ \glyphscale750\relax
+ \fi
+ \fi
+ \integerdef\c_module_fonts_font_id\fontid\font
+ \doifelsenothing{#2}
+ {\module_fonts_show_font_indeed{#1}\zerocount}
+ {\doifelse{#2}\v!all
+ {\dostepwiserecurse\zerocount{255}\plusone
+ {\scratchcounterone \recurselevel
+ \scratchcountertwo \numexpr\scratchcounterone*256\relax
+ \scratchcounterthree\numexpr\scratchcountertwo+255\relax
+ \doloop
+ {\iffontchar\font\scratchcountertwo
+ \module_fonts_show_font_indeed{#1}\scratchcounterone
+ \exitloop
+ \orelse\ifnum\scratchcountertwo=\scratchcounterthree
+ \exitloop
+ \else
+ \advance\scratchcountertwo\plusone
+ \fi}}}
+ {\processcommalist[#2]{\module_fonts_show_font_indeed{#1}}}}%
+ \egroup}
+
+\gdef\module_fonts_show_font_indeed#1#2% made some 50% faster but still slow
+ {\bgroup
+ \ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox\bgroup
+ \scratchdimenone 2.5\emwidth
+ \scratchdimentwo 2.4\emwidth
+ \scratchdimenthree2.3\emwidth
+ \scratchcounterfour#2\relax
+ \forgetall
+ \startoverlay % easier in cld
+ {\vbox
+ {\tf
+ \setstrut
+ \setfontid\c_module_fonts_font_id
+ \offinterlineskip
+ \unexpanded\def\wrapbox##1%
+ {\vpack to \scratchdimenone
+ {\vss
+ \hpack to \scratchdimenone
+ {\setfontid\c_module_fonts_font_id
+ \ifzeropt\interwordspace
+ \setbox##1\hpack{\raise.5\dp##1\hpack{\lower.5\ht##1\copy##1}}%
+ \ht##1\zeropoint
+ \dp##1\zeropoint
+ \else
+ \ht##1\strutht
+ \dp##1\strutdp
+ \strut
+ \fi
+ \hss\copy##1\hss}
+ \vss}}%
+ \unexpanded\def\textbox##1%
+ {\vpack to \scratchdimentwo
+ {\hsize\scratchdimenthree
+ ##1%
+ \par}}%
+ \unexpanded\def\scratchnum
+ {\blue
+ \tinyfont
+ \hfill
+ \number\scratchcounter
+ \vfill
+ \octnumber\scratchcounter
+ \hfill
+ \lchexnumbers\scratchcounter}%
+ \setbox\scratchboxone\hpack{\tf\textbox{}}%
+ \setbox\scratchboxtwo\hpack{\tf\gray\vrule\s!width\exheight\s!height.5\exheight\s!depth.5\exheight}%
+ \setbox\scratchboxtwo\wrapbox\scratchboxtwo
+ \setbox\scratchboxthree\hpack
+ {\startoverlay
+ {\box\scratchboxtwo}
+ {\box\scratchboxone}
+ \stopoverlay}%
+ \dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcounterone\recurselevel
+ \hpack
+ {\dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcountertwo \recurselevel
+ \scratchcounterthree\numexpr\scratchcounterone*16+\scratchcountertwo\relax
+ \scratchcounterthree\numexpr\scratchcounterfour*256+\scratchcounterthree\relax
+ \iffontchar\font\scratchcounterthree
+ \setbox\scratchbox\ruledhpack{\char\scratchcounterthree}%
+ \bgroup
+ \tf
+ \startoverlay
+ {\wrapbox\scratchbox}
+ {\textbox\scratchnum}
+ \stopoverlay
+ \egroup
+ \else
+ \copy\scratchboxthree
+ \fi}}}%
+ \par}}
+ {\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]}
+ \stopoverlay
+ \nointerlineskip
+ \vskip2\points
+ % the \noexpand before \blank is needed for non etex
+ \edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \the\scratchcounterfour\enspace"\hexnumber\scratchcounterfour}%
+ \tf % also sets em
+ \hbox to 40\emwidth{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
+ \egroup
+ \ifinsidefloat\else\stopbaselinecorrection\fi
+ \egroup}
+
+% \showfontstyle[modern][rm][tf][all] % #2, #3 and #4 can be 'all'
+%
+% no lists any more, so no 'all' any longer
+% no need to clean this up
+
+\permanent\protected\tolerant\gdef\showfontstyle[#1]#*[#2]#*[#3]#*[#4]
+ {\bgroup
+ \edef\m_module_fonts_show_styles {\iftok{#2}\emptytoks\s!rm,\s!ss,\s!tt,\s!mm\else#2\fi}%
+ \edef\m_module_fonts_show_alternatives{\iftok{#3}\emptytoks\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi\else#3\fi}%
+ \iftok{#1}\emptytoks\else
+ \switchtobodyfont[#1]
+ \fi
+ \raggedright
+ \protected\def\dododocommand##1%
+ {\dostepwiserecurse\zerocount{255}\plusone
+ {\scratchcounter\numexpr##1*256+\recurselevel\relax
+ \iffontchar\font\scratchcounter\relax
+ \char\scratchcounter
+ \space
+ \fi}}%
+ \protected\def\dodocommand##1##2%
+ {\starttextrule{\tttf #1 ##1 ##2}
+ \nobreak\getvalue{##2}%
+ \doifelsenothing{#4}
+ {\dododocommand\zerocount}
+ {\doifelse{#4}\v!all
+ {\dostepwiserecurse\zerocount{255}\plusone{\normalexpanded{\dododocommand{\recurselevel}}}}
+ {\processcommalist[#4]{\dododocommand}}}%
+ \par \nobreak
+ \stoptextrule}
+ \protected\def\docommand##1%
+ {\getvalue{##1}%
+ \processcommacommand[\m_module_fonts_show_alternatives]{\dodocommand{##1}}}
+ \processcommacommand[\m_module_fonts_show_styles]\docommand
+ \egroup}
+
+\permanent\protected\gdef\showligature#1%
+ {\hbox{\type{#1}\enspace\showglyphs#1}}
+
+\permanent\protected\tolerant\gdef\showligatures[#1]% we keep it around for compatibility reasons
+ {\bgroup
+ \def\module_fonts_show_ligature##1{\hbox{\showglyphs##1}}%
+ \doifsomething{#1}{\definedfont[#1*default]}%
+ \starttabulate[|*{7}{c|}]
+ \NC\type{ff}
+ \NC\type{fi}
+ \NC\type{fl}
+ \NC\type{ffi}
+ \NC\type{ffl}
+ \NC\type{--}
+ \NC\type{---}
+ \NC\NR
+ \NC\module_fonts_show_ligature{ff}
+ \NC\module_fonts_show_ligature{fi}
+ \NC\module_fonts_show_ligature{fl}
+ \NC\module_fonts_show_ligature{ffi}
+ \NC\module_fonts_show_ligature{ffl}
+ \NC\module_fonts_show_ligature{--}
+ \NC\module_fonts_show_ligature{---}
+ \NC\NR
+ \stoptabulate
+ \egroup}
+
+\permanent\protected\gdef\showkerning
+ {\groupedcommandcs\showfontkerns\relax}
+
+\permanent\gdef\module_fonts_char_ratio#1#2%
+ {\ifzeropt\nextboxhtdp\else
+ \cldcontext{\number#1/\number\nextboxhtdp}%
+ \fi}
+
+\permanent\protected\gdef\showcharratio
+ {\dowithnextboxcontent
+ {\switchtobodyfont[10pt]}%
+ {\starttabulate[|l|l|l|]
+ \NC height \NC \the\nextboxht \NC \module_fonts_char_ratio\nextboxht \NC \NR
+ \NC depth \NC \the\nextboxdp \NC \module_fonts_char_ratio\nextboxdp \NC \NR
+ \stoptabulate}
+ \hbox}
+
+\permanent\protected\gdef\showfontparameters
+ {\starttabulate[|tl|l|]
+ \NC \type {\slantperpoint} \NC \the\fontslantperpoint \font \NC\NR
+ \NC \type {\interwordspace} \NC \the\fontinterwordspace \font \NC\NR
+ \NC \type {\interwordstretch} \NC \the\fontinterwordstretch\font \NC\NR
+ \NC \type {\interwordshrink} \NC \the\fontinterwordshrink \font \NC\NR
+ \NC \type {\exheight} \NC \the\fontexheight \font \NC\NR
+ \NC \type {\emwidth} \NC \the\fontemwidth \font \NC\NR
+ \NC \type {\extraspace} \NC \the\fontextraspace \font \NC\NR
+ \stoptabulate}
+
+\unexpanded\gdef\module_fonts_show_minimal_baseline#1% to be used in a 10 column tabulate
+ {\setbox\scratchbox\ruledhbox{#1}%
+ \normalexpanded {
+ \NC \ruledhbox{#1}%
+ \NC ->
+ \NC \the\htdp\scratchbox
+ \NC =
+ \NC \the\ht\scratchbox
+ \NC +
+ \NC \the\dp\scratchbox
+ \NC \ifcmpdim\htdp\scratchbox\baselineskip <\or=\or>\fi
+ \NC \the\baselineskip
+ \NC (\ifdim\htdp\scratchbox>\baselineskip not \fi ok)
+ \NC \NR}}
+
+\permanent\protected\gdef\showminimalbaseline
+ {\starttabulate[|l|T|T|T|T|T|T|T|T|T|]
+ \module_fonts_show_minimal_baseline{\hbox to \emwidth{\hss\showstruts\strut\hss}}%
+ \module_fonts_show_minimal_baseline{(/)}%
+ \module_fonts_show_minimal_baseline{\normalstartimath\frac{1}{2}x\normalsuperscript2\normalsubscript3\normalstopimath}
+ \stoptabulate}
+
+\permanent\protected\tolerant\gdef\showfontstrip[#1]%
+ {\bgroup
+ \def\module_fonts_show_strip_a##1##2%
+ {\tttf\string##1}
+ \def\module_fonts_show_strip_b##1##2%
+ {\ruledhbox{\switchtobodyfont[#1]##1{##2}}}
+ \def\module_fonts_show_strip_c##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\ht\scratchbox}%
+ \def\module_fonts_show_strip_d##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\wd\scratchbox}%
+ \def\module_fonts_show_strip_indeed##1##2##3%
+ {\NC##2\rm{##3}\NC
+ ##2\ss{##3}\NC
+ ##2\tt{##3}\NC
+ ##2\mathematics{##3}\NC
+ \tttf##1\NR}
+ \starttabulate[|c|c|c|c|c|]
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_a\empty
+ \TB
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{xxxx}
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{12345}
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{(Agw)}
+ \TB
+ \module_fonts_show_strip_indeed{(x height)}\module_fonts_show_strip_c{x}
+ \module_fonts_show_strip_indeed{(m width)}\module_fonts_show_strip_d{m}
+ \stoptabulate
+ \egroup}
+
+%D This is now moved here as there is no reason to have it in the core. Some of
+%D the helpers might move to a more protected namespace.
+
+\newbox\otfcollector
+
+\permanent\protected\gdef\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}}
+\permanent\protected\gdef\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}}
+\permanent\protected\gdef\resetotfcollecting{\ctxlua{nodes.tracers.steppers.reset()}}
+
+% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{الضَّرَّ} \page
+% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{لِلّٰهِ} \page
+
+\permanent\protected\gdef\showotfstepglyphs#1%
+ {\ctxlua{nodes.tracers.steppers.glyphs(\number\otfcollector,#1)}%
+ \unhbox\otfcollector}
+
+\permanent\protected\gdef\otfstepspace
+ {\removeunwantedspaces
+ \hskip.5\emwidth \s!plus .125\emwidth \s!minus .125\emwidth\relax}
+
+\permanent\protected\gdef\otfstepcharcommand#1#2#3% font char class
+ {\otfstepspace
+ \doif{#3}{mark}{\underbar}{U+\hexnumber{#2}}:%
+ \setbox\scratchbox\hbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}%
+ \ifzeropt\wd\scratchbox
+ \scratchwidth.125\onepoint
+ \scratchdistance\dimexpr(\emwidth/2-\scratchwidth)\relax
+ \kern\scratchdistance
+ \ruledhbox to \scratchwidth{\hss\box\scratchbox\hss}%
+ \kern-\scratchwidth
+ \hskip\scratchdistance
+ \else
+ \ruledhbox{\box\scratchbox}%
+ \fi
+ \otfstepspace}
+
+\permanent\protected\gdef\otfstepfontcommand#1#2#3% id font size
+ {\begingroup
+ \tttf #1: #2 @ \the\dimexpr#3\scaledpoint\relax
+ \endgroup}
+
+\permanent\protected\gdef\otfstepmessagecommand#1#2%
+ {\begingroup
+ \tttf\language\minusone
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar
+ \hangindent\emwidth
+ \hangafter\plusone
+ \dontleavehmode\detokenize{#1}\removeunwantedspaces
+ \doifsomething{#2}{,\space\detokenize{#2}}\endgraf
+ \endgroup
+ \blank}
+
+\permanent\protected\gdef\showotfstepfont
+ {\ctxlua{nodes.tracers.steppers.font("otfstepfontcommand")}}
+
+\permanent\protected\gdef\showotfstepchars#1%
+ {\ctxlua{nodes.tracers.steppers.codes(#1,"otfstepcharcommand","otfstepspace")}}
+
+\permanent\protected\gdef\showotfstepmessages#1%
+ {\ctxlua{nodes.tracers.steppers.messages(#1,"otfstepmessagecommand",true)}}
+
+\permanent\protected\gdef\showotfstepfeatures
+ {\ctxlua{nodes.tracers.steppers.features()}}
+
+\permanent\protected\gdef\otfnoffeaturesteps
+ {\ctxlua{nodes.tracers.steppers.nofsteps()}}
+
+\newconstant\showotfstepsmode \showotfstepsmode\plusfour
+
+\protected\gdef\showotfsteps_n
+ {\blank
+ \begingroup
+ \advance\leftskip6\emwidth
+ \showotfstepmessages\recurselevel
+ \par
+ \endgroup
+ \blank
+ \dontleavehmode
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth \bgroup
+ \bf
+ \ifnum\recurselevel=\scratchcounter result\else step \recurselevel\fi
+ \hss
+ \egroup
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \resetallattributes
+ \lefttoright
+ \dontleavehmode
+ \ifnum\recurselevel=\scratchcounter
+ \ruledhbox{\box\otfcompositionbox}%
+ \else
+ \ruledhbox{\showotfstepglyphs\recurselevel}%
+ \fi
+ \quad
+ \showotfstepchars\recurselevel
+ \hfill
+ \par
+ \egroup
+ \egroup
+ \blank}
+
+\permanent\protected\gdef\showotfsteps
+ {\begingroup
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar
+ \tt
+ \lefttoright
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth{\bf font\hss}%
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \language\minusone
+ \bf
+ \showotfstepfont
+ \egroup
+ \egroup
+ \blank
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth{\bf features\hss}%
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \language\minusone
+ \showotfstepfeatures
+ \egroup
+ \egroup
+ \blank
+ \scratchcounter\otfnoffeaturesteps\relax
+ \dorecurse\scratchcounter
+ {\ifcase\showotfstepsmode
+ \or % 1 = only first
+ \ifnum\recurselevel=\plusone
+ \showotfsteps_n
+ \fi
+ \or % 2 = only last
+ \ifnum\recurselevel=\scratchcounter
+ \showotfsteps_n
+ \fi
+ \or % 3 = first and last
+ \ifnum\recurselevel=\plusone
+ \showotfsteps_n
+ \orelse\ifnum\recurselevel=\scratchcounter
+ \showotfsteps_n
+ \fi
+ \else % everything
+ \showotfsteps_n
+ \fi}%
+ \endgroup}
+
+\permanent\protected\gdef\startotfsample
+ {\enabletrackers[otf.sample.silent]% beware, kind of global
+ \startotfcollecting
+ \begingroup
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar}
+
+\permanent\protected\gdef\stopotfsample
+ {\endgroup
+ \stopotfcollecting
+ \disabletrackers[otf.sample]% beware, kind of global: otf.sample
+ \showotfsteps
+ \resetotfcollecting}
+
+\newbox\otfcompositionbox
+
+% this should go in spac-ali:
+
+\installcorenamespace{otfcompositiondir}
+
+\gletcsname\??otfcompositiondir -1\endcsname\righttoleft
+\gletcsname\??otfcompositiondir r2l\endcsname\righttoleft
+\gletcsname\??otfcompositiondir l2r\endcsname\lefttoright
+\gletcsname\??otfcompositiondir +1\endcsname\lefttoright
+\gletcsname\??otfcompositiondir 1\endcsname\lefttoright
+
+\permanent\protected\gdef\setotfcompositiondirection#1%
+ {\begincsname\??otfcompositiondir#1\endcsname}
+
+\permanent\protected\gdef\showotfcomposition#1#2#3% {font*features at size}, rl=-1, text
+ {\begingroup
+ \forgetparindent
+ \forgeteverypar
+ % \setupcolors[\c!state=\v!start]%
+ \setupalign[\v!verytolerant,\v!flushleft]%
+ \startotfsample
+ \nohyphens
+ \global\setbox\otfcompositionbox\hbox{\definedfont[#1]\relax\setotfcompositiondirection{#2}\relax#3}%
+ \stopotfsample
+ \endgroup}
+
+%D \startbuffer
+%D \startotfcompositionlist{Serif*default @ 11pt}{l2r}%
+%D \showotfcompositionsample{effe}
+%D \stopotfcompositionlist
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\permanent\protected\gdef\showotfcompositionlist#1#2#3%
+ {\begingroup
+ \definedfont[#1]%
+ \setbox\scratchbox\hbox\bgroup
+ \setotfcompositiondirection{#2}%
+ #3%
+ \egroup
+ \strut
+ \def|##1|{\kern\onepoint\string|\kern\onepoint##1\kern\onepoint\string|\kern\onepoint}%
+ \cldcontext{nodes.listtoutf(tex.box[\number\scratchbox].list,"{\\kern\\onepoint}",true)}%
+ \endgroup}
+
+\mutable\glet\showotfcompositionsample\gobbleoneargument
+
+\permanent\protected\gdef\startotfcompositionlist#1#2#3\stopotfcompositionlist
+ {\begingroup
+ \protected\def\showotfcompositionsample##1%
+ {\NC\type{##1}%
+ \NC\showotfcompositionlist{Mono}{#2}{##1}%
+ \NC\showotfcompositionlist{#1}{#2}{##1}%
+ \NC\definedfont[#1]##1%
+ \NC\NR}%
+ \starttabulate[|||||]%
+ #3%
+ \stoptabulate
+ \endgroup}
+
+\aliased\glet\stopotfcompositionlist\relax
+
+%D Till here.
+
+\permanent\protected\def\showbodyfontstate
+ {\dontleavehmode
+ \start
+ \infofont
+ [fontclass: \fontclass,\space
+ fontbody: \fontbody ,\space
+ fontface: \fontface ,\space
+ fontsize: \fontsize ]%
+ \stop}
+
+\protect
+
+\continueifinputfile{s-fonts-show.mkxl}
+
+\setupwhitespace[big]
+
+\dontcomplain
+
+\starttext
+
+\startsubject[title=\type{\showkerning}]
+ \showkerning{Just a small sentence with hopefully some kerns.}
+\stopsubject
+
+\startsubject[title=\type{\showcharratio}]
+ \showcharratio{testg}
+\stopsubject
+
+\startsubject[title=\type{\showfontparameters}]
+ \showfontparameters
+\stopsubject
+
+\startsubject[title=\type{\showminimalbaseline}]
+ \showminimalbaseline
+\stopsubject
+
+\startsubject[title=\type{\showfontstrip}]
+ \showfontstrip
+\stopsubject
+
+\startsubject[title=\type{\showbodyfont}]
+ \showbodyfont
+\stopsubject
+
+\startsubject[title=\type{\showbodyfontenvironment}]
+ \showbodyfontenvironment
+\stopsubject
+
+\startsubject[title=\type{\showligature}]
+ \showligature{fi}
+ \showligature{fx}
+\stopsubject
+
+\startsubject[title=\type{\showligatures}]
+ \showligatures
+\stopsubject
+
+\startsubject[title=\type{\showfontstyle}]
+ \showfontstyle[][rm][tf][all]
+\stopsubject
+
+\startsubject[title=\type{\showfont}]
+ \showfont
+\stopsubject
+
+\startsubject[title=\type{\showbodyfontstate}]
+ \showbodyfontstate
+\stopsubject
+
+\page
+
+\startsubject[title=\type{\showotfcomposition}]
+ \showotfcomposition{arabtype*arabic at 48pt}{-1}{الضَّرَّ}
+ \page
+ \showotfcomposition{arabtype*arabic at 48pt}{-1}{لِلّٰهِ}
+ \page
+\stopsubject
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-layout-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-layout-show.mkxl
new file mode 100644
index 00000000000..95a6d3371c1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-layout-show.mkxl
@@ -0,0 +1,243 @@
+%D \module
+%D [ file=page-run,
+%D version=2000.10.20,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Runtime Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Page Macros / Runtime Macros}
+
+\registerctxluafile{page-run}{} % maybe rename this one
+
+\unprotect
+
+\permanent\protected\tolerant\gdef\showprint[#1]#*[#2]#*[#3]% only english
+ {\setbuffer[crap]%
+ \unprotect
+ \definepapersize[X][\c!width=4em, \c!height=6em]
+ \definepapersize[Y][\c!width=12em,\c!height=14em]
+ \setuppapersize[X,#1][Y,#2]
+ \setuplayout[#3]
+ \setuplayout[\v!page]
+ \framed
+ [\c!offset=\v!overlay,\c!strut=\v!no,
+ \c!width=\paperwidth,\c!height=\paperheight]
+ {\ss ABC\par DEF}%
+ \protect
+ \endbuffer
+ \framed[\c!offset=\v!overlay,\c!strut=\v!no]{\typesetbuffer[crap]}}
+
+% \switchtobodyfont[8pt]
+%
+% \startcombination[4*4]
+% {\showprint} {\strut}
+% {\showprint[][][location=middle]} {\type{location=middle}}
+% {\showprint[][][location=middle,marking=on]} {\type{markering=aan}\break\type{location=middle}}
+% {\showprint[][][location=middle,marking=on,nx=2]} {\type{markering=aan}\break\type{location=middle}\break\type{nx=2}}
+% {\showprint[][][location=left]} {\type{location=left}}
+% {\showprint[][][location=right]} {\type{location=right}}
+% {\showprint[][][location={left,bottom}]} {\type{location={left,bottom}}}
+% {\showprint[][][location={right,bottom}]} {\type{location={right,bottom}}}
+% {\showprint[][][nx=2,ny=1]} {\type{nx=2,ny=1}}
+% {\showprint[][][nx=1,ny=2]} {\type{nx=1,ny=2}}
+% {\showprint[][][nx=2,ny=2]} {\type{nx=2,ny=2}}
+% {\showprint[][][nx=2,ny=2,location=middle]} {\type{nx=2,ny=2}\break\type{location=middle}}
+% {\showprint[][][backoffset=3pt]} {\type{rugoffset=.5cm}}
+% {\showprint[][][topoffset=3pt]} {\type{kopoffset=.5cm}}
+% {\showprint[][][scale=1.5]} {\type{schaal=1.5}}
+% {\showprint[][][scale=0.8]} {\type{schaal=0.8}}
+% \stopcombination
+%
+% \startcombination[3*4]
+% {\showprint[landscape][] [location=middle]} {\type{landscape}}
+% {\showprint[] [landscape][location=middle]} {\strut\break\type{landscape}}
+% {\showprint[landscape][landscape][location=middle]} {\type{landscape}\break\type{landscape}}
+% {\showprint[90] [] [location=middle]} {\type{90}}
+% {\showprint[] [90] [location=middle]} {\strut\break\type{90}}
+% {\showprint[90] [90] [location=middle]} {\type{90}\break\type{90}}
+% {\showprint[180] [] [location=middle]} {\type{180}}
+% {\showprint[] [180] [location=middle]} {\strut\break\type{180}}
+% {\showprint[180] [180] [location=middle]} {\type{180}\break\type{180}}
+% {\showprint[mirrored] [] [location=middle]} {\type{mirrored}}
+% {\showprint[] [mirrored] [location=middle]} {\strut\break\type{mirrored}}
+% {\showprint[mirrored] [mirrored] [location=middle]} {\type{mirrored}\break\type{mirrored}}
+% \stopcombination
+
+\permanent\protected\tolerant\gdef\showframe[#1]#*[#2]%
+ {\ifarguments
+ \showframe
+ [\v!top,\v!header,
+ \v!text,
+ \v!footer,\v!bottom]
+ [\v!leftedge,\v!leftmargin,
+ \v!text,
+ \v!rightmargin,\v!rightedge]
+ \or
+ \showframe
+ [\v!header,\v!text,\v!footer]
+ [#1]
+ \or
+ \setupbackgrounds
+ [\v!page]
+ [\c!frame=\v!on,
+ \c!corner=\v!rectangular,
+ \c!frameoffset=\zeropoint,
+ \c!framedepth=\zeropoint,
+ \c!framecolor=layout:page]
+ \setupbackgrounds
+ [#1][#2]
+ [\c!background=,
+ \c!frame=\v!on,
+ \c!corner=\v!rectangular,
+ \c!frameoffset=\zeropoint,
+ \c!framedepth=\zeropoint,
+ \c!framecolor=]
+ \fi
+ \setupbackgrounds
+ [\c!state=\v!repeat]}
+
+\permanent\protected\tolerant\gdef\showsetups[#1]%
+ {\ctxcommand{showlayoutvariables("#1")}}
+
+\permanent\protected\tolerant\gdef\showlayout[#1]%
+ {\ctxcommand{showlayout("#1")}}
+
+\permanent\protected\gdef\showmargins
+ {\starttabulate
+ \NC asynchrone \NC \doifelseoddpage {odd} {even} \NC \NR
+ \NC synchrone \NC \doifelserightpage {right} {left} \NC \NR
+ \NC right margin \NC \the\rightmarginwidth \NC \NR
+ \NC left margin \NC \the\leftmarginwidth \NC \NR
+ \NC outer margin \NC \the\outermarginwidth \NC \NR
+ \NC inner margin \NC \the\innermarginwidth \NC \NR
+ \stoptabulate}
+
+%D Page grids:
+
+\newconstant\c_page_grids_location
+\newconstant\c_page_grids_line_mode
+\newconstant\c_page_grids_lineno_mode
+\newconstant\c_page_grids_columns_mode
+
+\permanent\protected\tolerant\gdef\showgrid[#1]%
+ {\c_page_grids_location \plusone % downward compatible default
+ \c_page_grids_line_mode \plusone
+ \c_page_grids_lineno_mode \plusone
+ \c_page_grids_columns_mode\plusone
+ \processallactionsinset
+ [#1]%
+ [ \v!reset=>\c_page_grids_location \zerocount
+ \c_page_grids_columns_mode\zerocount,
+ \v!bottom=>\c_page_grids_location \plusone,
+ \v!top=>\c_page_grids_location \plustwo,
+ \v!none=>\c_page_grids_line_mode \zerocount,
+ \v!all=>\c_page_grids_line_mode \plusone,
+ \v!lines=>\c_page_grids_line_mode \plustwo,
+ \v!frame=>\c_page_grids_line_mode \plusthree,
+ \v!nonumber=>\c_page_grids_lineno_mode \zerocount,
+ \v!right=>\c_page_grids_lineno_mode \plusone,
+ \v!left=>\c_page_grids_lineno_mode \plustwo,
+ \v!outer=>\c_page_grids_lineno_mode \plusthree,
+ \v!inner=>\c_page_grids_lineno_mode \plusfour,
+ \v!columns=>\c_page_grids_columns_mode\plusone]% new option
+ \ifcase\c_page_grids_location
+ \let\page_grids_add_to_box\gobbleoneargument
+ \else % 1=bottom 2=top
+ \let\page_grids_add_to_box\page_grids_add_to_box_indeed
+ \fi
+ \ifcase\c_page_grids_columns_mode
+ \let\page_grids_add_to_one\gobbleoneargument
+ \let\page_grids_add_to_mix\gobbleoneargument
+ \else
+ \let\page_grids_add_to_one\page_grids_add_to_one_indeed
+ \let\page_grids_add_to_mix\page_grids_add_to_mix_indeed
+ \fi}
+
+% if really needed for speed we can cache the grid
+
+\glet\page_grids_add_to_box\gobbleoneargument
+\glet\page_grids_add_to_one\gobbleoneargument
+\glet\page_grids_add_to_mix\gobbleoneargument
+
+\gdef\page_grids_add_to_box_indeed#1% to be checked for color and layer ..... use mp
+ {\startcolor[layout:grid]%
+ \resetvisualizers
+ \gridboxlinemode \c_page_grids_line_mode
+ \gridboxlinenomode\c_page_grids_lineno_mode
+ \setgridbox\scratchbox\makeupwidth\textheight % todo: check color
+ \global\setbox#1\hpack % global ?
+ {\ifcase\c_page_grids_location\or\or\box#1\hskip-\makeupwidth\fi
+ \begingroup % color
+ \ifcase\layoutcolumns\else
+ \gray
+ \setlayoutcomponentattribute{\v!grid:\v!columns}%
+ \hpack \layoutcomponentboxattribute to \makeupwidth
+ {\dorecurse\layoutcolumns
+ {\hskip\layoutcolumnwidth
+ \ifnum\recurselevel<\layoutcolumns
+ \vrule
+ \s!height\ht\scratchbox
+ \s!depth \dp\scratchbox
+ \s!width \layoutcolumndistance
+ \fi}}%
+ \hskip-\makeupwidth
+ \fi
+ \setlayoutcomponentattribute{\v!grid:\v!lines}%
+ \hpack \layoutcomponentboxattribute{\box\scratchbox}%
+ \endgroup
+ \ifcase\c_page_grids_location\or\hskip-\makeupwidth\box#1\fi}%
+ \stopcolor}
+
+\gdef\page_grids_add_to_one_indeed#1%
+ {\begingroup
+ \resetvisualizers
+ \global\setbox#1\vpack{\noindent\backgroundline[layout:one]{\box#1}}%
+ \endgroup}
+
+\gdef\page_grids_add_to_mix_indeed#1%
+ {\begingroup
+ \resetvisualizers
+ \global\setbox#1\vpack{\noindent\backgroundline[layout:mix]{\box#1}}%
+ \endgroup}
+
+\protect
+
+\continueifinputfile{s-layout-show.mkxl}
+
+\setupwhitespace[big]
+
+\setuphead[section][page=yes]
+
+\starttext
+
+\startsubject[title=\type{\showprint}]
+ \showprint
+\stopsubject
+
+\startsubject[title=\type{\showframe}]
+ \showframe
+\stopsubject
+
+\startsubject[title=\type{\showlayout}]
+ \showlayout
+\stopsubject
+
+\startsubject[title=\type{\showsetups}]
+ \showsetups
+\stopsubject
+
+\startsubject[title=\type{\showmargins}]
+ \showmargins
+\stopsubject
+
+\startsubject[title=\type{\showgrid}]
+ \showgrid
+\stopsubject
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-publications-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-publications-show.mkxl
new file mode 100644
index 00000000000..9f4098489ae
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-publications-show.mkxl
@@ -0,0 +1,84 @@
+%D \module
+%D [ file=publ-tra,
+%D version=2013.12.24,
+%D title=\CONTEXT\ Publication Support,
+%D subtitle=Tracing,
+%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.
+
+% todo: make this a runtime module
+% todo: use the module interface
+
+\writestatus{loading}{ConTeXt Publication Support / Tracing}
+
+\registerctxluafile{publ-tra}{}
+
+\unprotect
+
+\permanent\protected\gdef\showbtxdatasetfields {\publ_show_dataset_whatever{showbtxdatasetfields}}
+\permanent\protected\gdef\showbtxdatasetcompleteness{\publ_show_dataset_whatever{showbtxdatasetcompleteness}}
+\permanent\protected\gdef\showbtxdatasetauthors {\publ_show_dataset_whatever{showbtxdatasetauthors}}
+
+\tolerant\gdef\publ_show_dataset_whatever#1[#2]%
+ {\begingroup
+ \letdummyparameter\c!specification\currentbtxspecification
+ \setdummyparameter\c!dataset {\currentbtxdataset}%
+ \letdummyparameter\c!field \empty
+ \ifparameter#2\or
+ \ifhastok={#2}%
+ \getdummyparameters[#2]%
+ \else
+ \setdummyparameter\c!dataset{#2}%
+ \fi
+ \fi
+ \ctxcommand{#1{
+ dataset = "\dummyparameter\c!dataset",
+ specification = "\dummyparameter\c!specification",
+ field = "\dummyparameter\c!field",
+ }}%
+ \endgroup}
+
+\permanent\tolerant\protected\gdef\showbtxfields[#1]%
+ {\begingroup
+ \setdummyparameter\c!rotation{90}%
+ \ifparameter#1\or
+ \ifhastok={#1}%
+ \letdummyparameter\c!specification\currentbtxspecification
+ \getdummyparameters[#1]%
+ \else
+ \setdummyparameter\c!specification{#1}%
+ \fi
+ \else
+ \letdummyparameter\c!specification\currentbtxspecification
+ \fi
+ \ctxcommand{showbtxfields{
+ rotation = "\dummyparameter\c!rotation",
+ specification = "\dummyparameter\c!specification"
+ }}%
+ \endgroup}
+
+\permanent\tolerant\protected\gdef\showbtxtables[#1]%
+ {\begingroup
+ \ctxcommand{showbtxtables{}}%
+ \endgroup}
+
+\permanent\tolerant\protected\gdef\showbtxhashedauthors[#1]%
+ {\ctxcommand{showbtxhashedauthors{}}}
+
+\protect
+
+\continueifinputfile{s-publications-show.mkxl}
+
+\starttext
+
+ \showbtxfields[rotation=85] \page
+ \showbtxfields[rotation=90] \page
+
+ \showbtxtables \page
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-symbols-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-symbols-show.mkxl
new file mode 100644
index 00000000000..37d42fe0079
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-symbols-show.mkxl
@@ -0,0 +1,110 @@
+%D \module
+%D [ file=symb-run,
+%D version=2010.12.08, % 1998.07.20,
+%D title=\CONTEXT\ Symbol Libraries,
+%D subtitle=Runtime Macros,
+%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.
+
+% todo: implementor
+
+\startluacode
+ function commands.showsymbolset(collection,symbols,fontid)
+ if type(symbols) == "string" then
+ symbols = utilities.parsers.settings_to_array(symbols)
+ end
+ local options = { framecolor = "orange", rulethickness = ".8pt", offset = interfaces.variables.overlay }
+ local list = table.tohash(symbols)
+ local alsofont = fontid > 0
+ local defined = #symbols > 0
+ local byname = false
+ if alsofont then
+ local is_symbol = characters.is_symbol
+ local chardata = characters.data
+ local resources = fonts.hashes.resources [fontid]
+ local characters = fonts.hashes.characters[fontid]
+ if resources and characters then
+ local unicodes = resources.unicodes
+ if unicodes then
+ for name, unicode in next, unicodes do
+ if not list[name] and name ~= ".notdef" then
+ local c = rawget(chardata,unicode)
+ if not c or is_symbol[c.category] then
+ list[name] = false
+ byname = true
+ end
+ end
+ end
+ end
+ end
+ end
+ local detail = defined and byname
+ context.start()
+ context.setupsymbolset { collection }
+ context.starttabulate { detail and "|lT|l|l|lT|" or "|lT|l|l|"}
+ for symbol, how in table.sortedhash(list) do
+ if detail and how then
+ context.BC()
+ else
+ context.NC()
+ end
+ context(symbol)
+ context.NC()
+ context.symbol(symbol)
+ context.NC()
+ context.framed(options,context.nested.symbol(symbol))
+ if detail and how then
+ context.BC()
+ context("defined")
+ else
+ context.NC()
+ end
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+ context.stop()
+ end
+\stopluacode
+
+\unprotect
+
+\permanent\protected\tolerant\gdef\showsymbolset[#1]%
+ {\begingroup
+ \edef\p_font{\begincsname\??symboldefault#1\endcsname}%
+ \begingroup
+ \ifx\p_font\empty
+ \global\globalscratchcounter\zerocount
+ \else
+ \definedfont[\p_font]%
+ \global\globalscratchcounter\fontid\font\relax
+ \fi
+ \endgroup
+ \ctxcommand {
+ showsymbolset (
+ "#1",
+ "\symbolset{#1}",
+ \the\globalscratchcounter
+ ) }%
+ \endgroup}
+
+\protect
+
+\continueifinputfile{s-symbols-show.mkxl}
+
+\usesymbols[cc]
+
+\starttext
+
+ \showsymbolset[cc]
+
+ \symbol[cc][cc-by-sa-nc]
+
+\stoptext
+
+