summaryrefslogtreecommitdiff
path: root/tex/context
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-06-19 15:50:29 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-06-19 15:50:29 +0200
commitd11a1200ed28c6e0058990a621d7404f821ac7fd (patch)
treea433002a97225266abf1f925beb0ed699dbee41c /tex/context
parent008292817580eba8a0f0cf83d8e2d08df8fc8c3f (diff)
downloadcontext-d11a1200ed28c6e0058990a621d7404f821ac7fd.tar.gz
2017-06-19 15:35:00
Diffstat (limited to 'tex/context')
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-con.lua76
-rw-r--r--tex/context/base/mkiv/font-otl.lua4
-rw-r--r--tex/context/base/mkiv/font-oto.lua95
-rw-r--r--tex/context/base/mkiv/math-ini.mkiv69
-rw-r--r--tex/context/base/mkiv/mult-prm.lua333
-rw-r--r--tex/context/base/mkiv/mult-prm.mkiv61
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin25695 -> 25686 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin424912 -> 423550 bytes
-rw-r--r--tex/context/base/mkiv/strc-mat.mkiv7
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv4
-rw-r--r--tex/context/base/mkiv/util-lib.lua17
-rw-r--r--tex/context/base/mkiv/util-sql-imp-sqlite.lua158
-rw-r--r--tex/context/base/mkiv/util-sql-loggers.lua22
-rw-r--r--tex/context/base/mkiv/util-sql.lua16
-rw-r--r--tex/context/fonts/mkiv/lm-math.lfg6
-rw-r--r--tex/context/fonts/mkiv/unifraktur.lfg2
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin847898 -> 847882 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin60772 -> 60772 bytes
-rw-r--r--tex/context/modules/mkiv/s-math-repertoire.mkiv4
-rw-r--r--tex/context/modules/mkiv/s-tugboat.mkiv681
24 files changed, 1136 insertions, 427 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 739813901..bcb4ce13f 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2017.06.15 22:10}
+\newcontextversion{2017.06.19 15:30}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index d5240d162..8c3ea1acc 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2017.06.15 22:10}
+\edef\contextversion{2017.06.19 15:30}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index d8924d37a..395edf527 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2017.06.15 22:10}
+\newcontextversion{2017.06.19 15:30}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index ab9a40429..229e59916 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -41,7 +41,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2017.06.15 22:10}
+\edef\contextversion{2017.06.19 15:30}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/font-con.lua b/tex/context/base/mkiv/font-con.lua
index 7287fe017..16dc3c05e 100644
--- a/tex/context/base/mkiv/font-con.lua
+++ b/tex/context/base/mkiv/font-con.lua
@@ -554,10 +554,31 @@ function constructors.scale(tfmdata,specification)
local chr, description, index
if changed then
local c = changed[unicode]
- if c then
- description = descriptions[c] or descriptions[unicode] or character
- character = characters[c] or character
- index = description.index or c
+ if c and c ~= unicode then
+ while true do
+ local cc = changed[c]
+ if not cc then
+ -- we're done, no (futher) chain
+ break
+ elseif cc == unicode then
+ -- we probably have a bidi swap
+ break
+ elseif cc == c then
+ -- we have a self reference, shouldn't happen
+ c = nil
+ break
+ else
+ c = cc
+ end
+ end
+ if c then
+ description = descriptions[c] or descriptions[unicode] or character
+ character = characters[c] or character
+ index = description.index or c
+ else
+ description = descriptions[unicode] or character
+ index = description.index or unicode
+ end
else
description = descriptions[unicode] or character
index = description.index or unicode
@@ -1255,11 +1276,13 @@ do
if not enhancers then
- local actions = allocate()
- local before = allocate()
- local after = allocate()
- local order = allocate()
- local patches = { before = before, after = after }
+ local actions = allocate() -- no need to allocate thee
+ local before = allocate()
+ local after = allocate()
+ local order = allocate()
+ local known = { }
+ local nofsteps = 0
+ local patches = { before = before, after = after }
local trace = false
local report = logs.reporter("fonts",format .. " enhancing")
@@ -1285,7 +1308,7 @@ do
report("%s enhancing file %a","start",filename)
end
ioflush() -- we want instant messages
- for e=1,#order do
+ for e=1,nofsteps do
local enhancer = order[e]
local b = before[enhancer]
if b then
@@ -1295,7 +1318,7 @@ do
end
end
end
- enhance(enhancer,data,filename,raw)
+ enhance(enhancer,data,filename,raw) -- we have one installed: check extra features
local a = after[enhancer]
if a then
for pattern, action in next, a do
@@ -1317,7 +1340,9 @@ do
if actions[what] then
-- overloading, e.g."check extra features"
else
- order[#order+1] = what
+ nofsteps = nofsteps + 1
+ order[nofsteps] = what
+ known[what] = nofsteps
end
actions[what] = action
else
@@ -1325,7 +1350,19 @@ do
end
end
- -- fonts.constructors.otf.enhancers.patch("before","migrate metadata","cambria",function() end)
+ -- We used to have a lot of enhancers but no longer with the new font loader. The order of enhancers
+ -- is the order of definition. The before/after patches are there for old times sake and happen
+ -- before or after a (named) enhancer. An example of a set enhancer is "check extra features" so one
+ -- one set patches before or after that is applied. Unknown enhancers are auto-registered. It's a bit
+ -- messy but we keep it for compatibility reasons.
+ --
+ -- fonts.handlers.otf.enhancers.patches.register("before","some patches","somefont",function(data,filename)
+ -- print("!!!!!!!") -- before | after
+ -- end)
+ --
+ -- fonts.handlers.otf.enhancers.register("more patches",function(data,filename)
+ -- print("???????") -- enhance
+ -- end)
local function patch(what,where,pattern,action)
local pw = patches[what]
@@ -1334,7 +1371,12 @@ do
if ww then
ww[pattern] = action
else
- pw[where] = { [pattern] = action}
+ pw[where] = { [pattern] = action }
+ if not known[where] then
+ nofsteps = nofsteps + 1
+ order[nofsteps] = where
+ known[where] = nofsteps
+ end
end
end
end
@@ -1343,7 +1385,11 @@ do
register = register,
apply = apply,
patch = patch,
- patches = { register = patch }, -- for old times sake
+ report = report,
+ patches = {
+ register = patch,
+ report = report,
+ }, -- for old times sake
}
handler.enhancers = enhancers
diff --git a/tex/context/base/mkiv/font-otl.lua b/tex/context/base/mkiv/font-otl.lua
index c8006316f..a338f85a8 100644
--- a/tex/context/base/mkiv/font-otl.lua
+++ b/tex/context/base/mkiv/font-otl.lua
@@ -200,12 +200,12 @@ function otf.load(filename,sub,instance)
otfreaders.expand(data) -- inline tables
otfreaders.addunicodetable(data) -- only when not done yet
--
- otfenhancers.apply(data,filename,data)
+ otfenhancers.apply(data,filename,data) -- in context one can also use treatments
--
-- constructors.addcoreunicodes(data.resources.unicodes) -- still needed ?
--
if applyruntimefixes then
- applyruntimefixes(filename,data)
+ applyruntimefixes(filename,data) -- e.g. see treatments.lfg
end
--
data.metadata.math = data.resources.mathconstants
diff --git a/tex/context/base/mkiv/font-oto.lua b/tex/context/base/mkiv/font-oto.lua
index 9c42a54bd..22bb1d74e 100644
--- a/tex/context/base/mkiv/font-oto.lua
+++ b/tex/context/base/mkiv/font-oto.lua
@@ -67,21 +67,32 @@ local function cref(feature,sequence)
return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
end
-
-local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
- report_prepare("%s: base alternate %s => %s (%S => %S)",
- cref(feature,sequence),
- gref(descriptions,unicode),
- replacement and gref(descriptions,replacement),
- value,
- comment)
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
+ if unicode == substitution then
+ report_prepare("%s: base substitution %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base substitution %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,substitution))
+ end
end
-local function report_substitution(feature,sequence,descriptions,unicode,substitution)
- report_prepare("%s: base substitution %s => %S",
- cref(feature,sequence),
- gref(descriptions,unicode),
- gref(descriptions,substitution))
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
+ if unicode == replacement then
+ report_prepare("%s: base alternate %s maps onto itself",
+ cref(feature,sequence),
+ gref(descriptions,unicode))
+ else
+ report_prepare("%s: base alternate %s => %s (%S => %S)",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ replacement and gref(descriptions,replacement),
+ value,
+ comment)
+ end
end
local function report_ligature(feature,sequence,descriptions,unicode,ligature)
@@ -221,6 +232,9 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
local trace_alternatives = trace_baseinit and trace_alternatives
local trace_ligatures = trace_baseinit and trace_ligatures
+ -- A chain of changes is handled in font-con which is clesner because
+ -- we can have shared changes and such.
+
if not changed then
changed = { }
tfmdata.changed = changed
@@ -233,39 +247,44 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
if kind == "gsub_single" then
for i=1,#steps do
for unicode, data in next, steps[i].coverage do
- -- if not changed[unicode] then -- fails for multiple subs in some math fonts
- if trace_singles then
- report_substitution(feature,sequence,descriptions,unicode,data)
- end
+ if unicode ~= data then
changed[unicode] = data
- -- end
+ end
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
end
end
elseif kind == "gsub_alternate" then
for i=1,#steps do
for unicode, data in next, steps[i].coverage do
- if not changed[unicode] then
- local replacement = data[alternate]
- if replacement then
+ local replacement = data[alternate]
+ if replacement then
+ if unicode ~= replacement then
changed[unicode] = replacement
- if trace_alternatives then
- report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
- end
- elseif defaultalt == "first" then
- replacement = data[1]
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt == "first" then
+ replacement = data[1]
+ if unicode ~= replacement then
changed[unicode] = replacement
- if trace_alternatives then
- report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
- end
- elseif defaultalt == "last" then
- replacement = data[#data]
- if trace_alternatives then
- report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
- end
- else
- if trace_alternatives then
- report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
- end
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt == "last" then
+ replacement = data[#data]
+ if unicode ~= replacement then
+ changed[unicode] = replacement
+ end
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
end
end
end
diff --git a/tex/context/base/mkiv/math-ini.mkiv b/tex/context/base/mkiv/math-ini.mkiv
index c7f75fdc7..6fdf32531 100644
--- a/tex/context/base/mkiv/math-ini.mkiv
+++ b/tex/context/base/mkiv/math-ini.mkiv
@@ -289,31 +289,52 @@
% e.g.: \definemathematics[i:mp][setups=i:tight,openup=yes]
-\newmuskip\defaultthickmuskip \defaultthickmuskip 5mu plus 5mu
-\newmuskip\defaultmedmuskip \defaultmedmuskip 4mu plus 2mu minus 4mu
-\newmuskip\defaultthinmuskip \defaultthinmuskip 3mu
+\newmuskip\defaultthickmuskip \defaultthickmuskip 5mu plus 5mu
+\newmuskip\defaultmedmuskip \defaultmedmuskip 4mu plus 2mu minus 4mu
+\newmuskip\defaultthinmuskip \defaultthinmuskip 3mu
-\newmuskip\halfthickmuskip \halfthickmuskip 2.5mu plus 2.5mu
-\newmuskip\halfmedmuskip \halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu
-\newmuskip\halfthinmuskip \halfthinmuskip 1.5mu
+\newmuskip\halfthickmuskip \halfthickmuskip 2.5mu plus 2.5mu
+\newmuskip\halfmedmuskip \halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu
+\newmuskip\halfthinmuskip \halfthinmuskip 1.5mu
-\newcount \defaultrelpenalty \defaultrelpenalty 500
-\newcount \defaultbinoppenalty \defaultbinoppenalty 700
+\newcount \defaultrelpenalty \defaultrelpenalty 500
+\newcount \defaultbinoppenalty \defaultbinoppenalty 700
+\newcount \defaultprerelpenalty \defaultprerelpenalty -100
+\newcount \defaultprebinoppenalty \defaultprebinoppenalty -100
+
+% we need to control these otherwise:
+%
+% \prerelpenalty \defaultprerelpenalty
+% \prebinoppenalty\defaultprebinoppenalty
\startsetups math:spacing:default
- \thickmuskip \defaultthickmuskip
- \medmuskip \defaultmedmuskip
- \thinmuskip \defaultthinmuskip
- \relpenalty \defaultrelpenalty
- \binoppenalty \defaultbinoppenalty
+ \thickmuskip \defaultthickmuskip
+ \medmuskip \defaultmedmuskip
+ \thinmuskip \defaultthinmuskip
+ \relpenalty \defaultrelpenalty
+ \binoppenalty \defaultbinoppenalty
+ \prebinoppenalty\maxdimen
+ \prerelpenalty \maxdimen
+\stopsetups
+
+\startsetups math:spacing:split
+ \thickmuskip \defaultthickmuskip
+ \medmuskip \defaultmedmuskip
+ \thinmuskip \defaultthinmuskip
+ \relpenalty \defaultrelpenalty
+ \binoppenalty \defaultbinoppenalty
+ \prebinoppenalty\defaultprebinoppenalty
+ \prerelpenalty \defaultprerelpenalty
\stopsetups
\startsetups math:spacing:half
- \thickmuskip \halfthickmuskip
- \medmuskip \halfmedmuskip
- \thinmuskip \halfthinmuskip
- \relpenalty \defaultrelpenalty
- \binoppenalty \defaultbinoppenalty
+ \thickmuskip \halfthickmuskip
+ \medmuskip \halfmedmuskip
+ \thinmuskip \halfthinmuskip
+ \relpenalty \defaultrelpenalty
+ \binoppenalty \defaultbinoppenalty
+ \prebinoppenalty\maxdimen
+ \prerelpenalty \maxdimen
\stopsetups
\startsetups math:spacing:tight
@@ -326,8 +347,10 @@
\medmuskip 1\halfmedmuskip
\thinmuskip 1\halfthinmuskip
\fi
- \relpenalty \defaultrelpenalty
- \binoppenalty \maxdimen
+ \relpenalty \defaultrelpenalty
+ \binoppenalty \maxdimen
+ \prebinoppenalty\maxdimen
+ \prerelpenalty \maxdimen
\stopsetups
\startsetups math:spacing:fixed
@@ -340,8 +363,10 @@
\medmuskip 1\halfmedmuskip
\thinmuskip 1\halfthinmuskip
\fi
- \relpenalty \maxdimen
- \binoppenalty \maxdimen
+ \relpenalty \maxdimen
+ \binoppenalty \maxdimen
+ \prebinoppenalty\maxdimen
+ \prerelpenalty \maxdimen
\stopsetups
% \dorecurse{80}{test \m[i:tight]{\red \fakeformula} test }
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index b55ac229d..69221db12 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -1,17 +1,9 @@
--- the tex table has overlap
-
return {
["aleph"]={
"AlephVersion",
"Alephminorversion",
"Alephrevision",
"Alephversion",
- "Omegaminorversion",
- "Omegarevision",
- "Omegaversion",
- "boxdir",
- "pagebottomoffset",
- "pagerightoffset",
},
["etex"]={
"botmarks",
@@ -85,9 +77,7 @@ return {
"Udelimiterover",
"Udelimiterunder",
"Uhextensible",
- "Uleft",
"Umathaccent",
---"Umathaccents",
"Umathaxis",
"Umathbinbinspacing",
"Umathbinclosespacing",
@@ -97,7 +87,6 @@ return {
"Umathbinordspacing",
"Umathbinpunctspacing",
"Umathbinrelspacing",
---"Umathbotaccent",
"Umathchar",
"Umathcharclass",
"Umathchardef",
@@ -115,7 +104,6 @@ return {
"Umathcloserelspacing",
"Umathcode",
"Umathcodenum",
- "Umathcodenumdef",
"Umathconnectoroverlapmin",
"Umathfractiondelsize",
"Umathfractiondenomdown",
@@ -137,6 +125,8 @@ return {
"Umathlimitbelowbgap",
"Umathlimitbelowkern",
"Umathlimitbelowvgap",
+ "Umathnolimitsubfactor",
+ "Umathnolimitsupfactor",
"Umathopbinspacing",
"Umathopclosespacing",
"Umathopenbinspacing",
@@ -210,12 +200,10 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
- "Umathnolimitsupfactor",
- "Umathnolimitsubfactor",
- "Umiddle",
+ "Unosubscript",
+ "Unosuperscript",
"Uoverdelimiter",
"Uradical",
- "Uright",
"Uroot",
"Uskewed",
"Uskewedwithdelims",
@@ -226,8 +214,6 @@ return {
"Ustopmath",
"Usubscript",
"Usuperscript",
- "Unosubscript",
- "Unosuperscript",
"Uunderdelimiter",
"Uvextensible",
"adjustspacing",
@@ -235,14 +221,11 @@ return {
"aligntab",
"attribute",
"attributedef",
- "hyphenpenaltymode",
+ "automaticdiscretionary",
"automatichyphenmode",
"automatichyphenpenalty",
- "automaticdiscretionary",
- "explicithyphenpenalty",
- "explicitdiscretionary",
+ "begincsname",
"bodydir",
- "boundary",
"boxdir",
"catcodetable",
"clearmarks",
@@ -256,19 +239,27 @@ return {
"dvifeedback",
"dvivariable",
"efcode",
- "hjcode",
- "firstvalidlanguage",
+ "etoksapp",
+ "etokspre",
+ "expanded",
+ "expandglyphsinfont",
+ "explicitdiscretionary",
+ "explicithyphenpenalty",
"fontid",
"formatname",
"gleaders",
- "hyphenationmin",
+ "hjcode",
"hyphenationbounds",
+ "hyphenationmin",
+ "hyphenpenaltymode",
"ifabsdim",
"ifabsnum",
+ "ifincsname",
"ifprimitive",
"ignoreligaturesinfont",
"initcatcodetable",
"insertht",
+ "lastnamedcs",
"lastsavedboxresourceindex",
"lastsavedimageresourceindex",
"lastsavedimageresourcepages",
@@ -286,34 +277,34 @@ return {
"localrightbox",
"lpcode",
"luaescapestring",
+ "luafunction",
"luatexbanner",
"luatexrevision",
"luatexversion",
- "luafunction",
"mathdir",
"mathdisplayskipmode",
"matheqnogapstep",
"mathitalicsmode",
"mathnolimitsmode",
"mathoption",
+ "mathpenaltiesmode",
+ "mathrulesfam",
+ "mathrulesmode",
"mathscriptsmode",
"mathstyle",
- "mathsurroundskip",
"mathsurroundmode",
- "mathrulesmode",
- "mathrulesfam",
- "noboundary",
- "nokerns",
+ "mathsurroundskip",
"nohrule",
+ "nokerns",
"noligs",
+ "normaldeviate",
"nospaces",
"novrule",
- "normaldeviate",
"outputbox",
"outputmode",
+ "pagebottomoffset",
"pagedir",
"pageheight",
- "pagebottomoffset",
"pageleftoffset",
"pagerightoffset",
"pagetopoffset",
@@ -322,15 +313,17 @@ return {
"pdfextension",
"pdffeedback",
"pdfvariable",
+ "postdisplaypenalty",
"postexhyphenchar",
"posthyphenchar",
"predisplaygapfactor",
+ "predisplaypenalty",
"preexhyphenchar",
"prehyphenchar",
"primitive",
"protrudechars",
- "protrusionboundary",
"pxdimen",
+ "quitvmode",
"randomseed",
"rightghost",
"rightmarginkern",
@@ -346,41 +339,22 @@ return {
"suppressfontnotfounderror",
"suppressifcsnameerror",
"suppresslongerror",
- "suppressoutererror",
"suppressmathparerror",
+ "suppressoutererror",
"synctex",
"tagcode",
"textdir",
+ "toksapp",
+ "tokspre",
"tracingfonts",
"uniformdeviate",
"useboxresource",
"useimageresource",
- "wordboundary",
- --
- "vpack",
- "hpack",
- "tpack",
- "csstring",
- "begincsname",
- "lastnamedcs",
- "toksapp",
- "tokspre",
- "etoksapp",
- "etokspre",
},
["omega"]={
- "OmegaVersion",
- "bodydir",
- "chardp",
- "charht",
- "charit",
- "charwd",
- "leftghost",
- "localbrokenpenalty",
- "localinterlinepenalty",
- "localleftbox",
- "localrightbox",
- "mathdir",
+ "Omegaminorversion",
+ "Omegarevision",
+ "Omegaversion",
"odelcode",
"odelimiter",
"omathaccent",
@@ -388,23 +362,11 @@ return {
"omathchardef",
"omathcode",
"oradical",
- "pagedir",
- "pageheight",
- "pagewidth",
- "pardir",
- "rightghost",
- "textdir",
},
["pdftex"]={
- "efcode",
- "expanded",
- "ifincsname",
"ifpdfabsdim",
"ifpdfabsnum",
"ifpdfprimitive",
- "leftmarginkern",
- "letterspacefont",
- "lpcode",
"pdfadjustspacing",
"pdfannot",
"pdfcatalog",
@@ -417,8 +379,8 @@ return {
"pdfdest",
"pdfdestmargin",
"pdfdraftmode",
- "pdfeachlineheight",
"pdfeachlinedepth",
+ "pdfeachlineheight",
"pdfendlink",
"pdfendthread",
"pdffirstlineheight",
@@ -427,24 +389,22 @@ return {
"pdffontname",
"pdffontobjnum",
"pdffontsize",
- "pdfxformmargin",
"pdfgamma",
"pdfgentounicode",
"pdfglyphtounicode",
"pdfhorigin",
"pdfignoreddimen",
+ "pdfignoreunknownimages",
+ "pdfimageaddfilename",
"pdfimageapplygamma",
"pdfimagegamma",
"pdfimagehicolor",
"pdfimageresolution",
"pdfincludechars",
"pdfinclusioncopyfonts",
- "pdfignoreunknownimages",
"pdfinclusionerrorlevel",
- "pdfignoreunknownimages",
"pdfinfo",
"pdfinfoomitdate",
- "pdftrailerid",
"pdfinsertht",
"pdflastannot",
"pdflastlinedepth",
@@ -474,9 +434,9 @@ return {
"pdfpageresources",
"pdfpagesattr",
"pdfpagewidth",
+ "pdfpkfixeddpi",
"pdfpkmode",
"pdfpkresolution",
- "pdfpkfixeddpi",
"pdfprimitive",
"pdfprotrudechars",
"pdfpxdimen",
@@ -493,39 +453,31 @@ return {
"pdfsetrandomseed",
"pdfstartlink",
"pdfstartthread",
+ "pdfsuppressoptionalinfo",
+ "pdfsuppressptexinfo",
"pdftexbanner",
"pdftexrevision",
"pdftexversion",
- "pdfsuppressptexinfo",
- "pdfsuppressoptionalinfo",
"pdfthread",
"pdfthreadmargin",
"pdftracingfonts",
"pdftrailer",
+ "pdftrailerid",
"pdfuniformdeviate",
"pdfuniqueresname",
"pdfvorigin",
"pdfxform",
"pdfxformattr",
+ "pdfxformmargin",
"pdfxformname",
"pdfxformresources",
"pdfximage",
- "quitvmode",
- "rightmarginkern",
- "rpcode",
- "tagcode",
},
["tex"]={
+ " ",
"-",
"/",
- "AlephVersion",
- "Alephminorversion",
- "Alephrevision",
- "Alephversion",
- "OmegaVersion",
- "Omegaminorversion",
- "Omegarevision",
- "Omegaversion",
+ "Uchar",
"Udelcode",
"Udelcodenum",
"Udelimiter",
@@ -534,7 +486,6 @@ return {
"Uhextensible",
"Uleft",
"Umathaccent",
---"Umathaccents",
"Umathaxis",
"Umathbinbinspacing",
"Umathbinclosespacing",
@@ -544,7 +495,6 @@ return {
"Umathbinordspacing",
"Umathbinpunctspacing",
"Umathbinrelspacing",
---"Umathbotaccent",
"Umathchar",
"Umathcharclass",
"Umathchardef",
@@ -562,7 +512,6 @@ return {
"Umathcloserelspacing",
"Umathcode",
"Umathcodenum",
- "Umathcodenumdef",
"Umathconnectoroverlapmin",
"Umathfractiondelsize",
"Umathfractiondenomdown",
@@ -584,6 +533,8 @@ return {
"Umathlimitbelowbgap",
"Umathlimitbelowkern",
"Umathlimitbelowvgap",
+ "Umathnolimitsubfactor",
+ "Umathnolimitsupfactor",
"Umathopbinspacing",
"Umathopclosespacing",
"Umathopenbinspacing",
@@ -657,9 +608,9 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
- "Umathnolimitsupfactor",
- "Umathnolimitsubfactor",
"Umiddle",
+ "Unosubscript",
+ "Unosuperscript",
"Uoverdelimiter",
"Uradical",
"Uright",
@@ -673,8 +624,6 @@ return {
"Ustopmath",
"Usubscript",
"Usuperscript",
- "Unosubscript",
- "Unosuperscript",
"Uunderdelimiter",
"Uvextensible",
"above",
@@ -683,6 +632,7 @@ return {
"abovewithdelims",
"accent",
"adjdemerits",
+ "adjustspacing",
"advance",
"afterassignment",
"aftergroup",
@@ -692,15 +642,13 @@ return {
"atopwithdelims",
"attribute",
"attributedef",
- "hyphenpenaltymode",
+ "automaticdiscretionary",
"automatichyphenmode",
"automatichyphenpenalty",
- "automaticdiscretionary",
- "explicithyphenpenalty",
- "explicitdiscretionary",
"badness",
"baselineskip",
"batchmode",
+ "begincsname",
"begingroup",
"belowdisplayshortskip",
"belowdisplayskip",
@@ -717,10 +665,6 @@ return {
"catcodetable",
"char",
"chardef",
---"chardp",
---"charht",
---"charit",
---"charwd",
"cleaders",
"clearmarks",
"closein",
@@ -738,6 +682,7 @@ return {
"crampedtextstyle",
"crcr",
"csname",
+ "csstring",
"currentgrouplevel",
"currentgrouptype",
"currentifbranch",
@@ -767,6 +712,7 @@ return {
"divide",
"doublehyphendemerits",
"dp",
+ "draftmode",
"dump",
"dviextension",
"dvifeedback",
@@ -777,7 +723,6 @@ return {
"eTeXversion",
"edef",
"efcode",
- "hjcode",
"else",
"emergencystretch",
"end",
@@ -791,6 +736,8 @@ return {
"errorcontextlines",
"errorstopmode",
"escapechar",
+ "etoksapp",
+ "etokspre",
"everycr",
"everydisplay",
"everyeof",
@@ -804,11 +751,14 @@ return {
"expandafter",
"expanded",
"expandglyphsinfont",
+ "explicitdiscretionary",
+ "explicithyphenpenalty",
"fam",
"fi",
"finalhyphendemerits",
"firstmark",
"firstmarks",
+ "firstvalidlanguage",
"floatingpenalty",
"font",
"fontchardp",
@@ -816,7 +766,6 @@ return {
"fontcharic",
"fontcharwd",
"fontdimen",
- "firstvalidlanguage",
"fontid",
"fontname",
"formatname",
@@ -840,18 +789,21 @@ return {
"hfill",
"hfilneg",
"hfuzz",
+ "hjcode",
"hoffset",
"holdinginserts",
+ "hpack",
"hrule",
"hsize",
"hskip",
"hss",
"ht",
"hyphenation",
+ "hyphenationbounds",
+ "hyphenationmin",
"hyphenchar",
"hyphenpenalty",
- "hyphenationmin",
- "hyphenationbounds",
+ "hyphenpenaltymode",
"if",
"ifabsdim",
"ifabsnum",
@@ -870,9 +822,6 @@ return {
"ifmmode",
"ifnum",
"ifodd",
- "ifpdfabsdim",
- "ifpdfabsnum",
- "ifpdfprimitive",
"ifprimitive",
"iftrue",
"ifvbox",
@@ -887,6 +836,7 @@ return {
"input",
"inputlineno",
"insert",
+ "insertht",
"insertpenalties",
"interactionmode",
"interlinepenalties",
@@ -897,6 +847,7 @@ return {
"lastbox",
"lastkern",
"lastlinefit",
+ "lastnamedcs",
"lastnodetype",
"lastpenalty",
"lastsavedboxresourceindex",
@@ -932,6 +883,7 @@ return {
"lowercase",
"lpcode",
"luaescapestring",
+ "luafunction",
"luatexbanner",
"luatexrevision",
"luatexversion",
@@ -955,15 +907,16 @@ return {
"mathopen",
"mathoption",
"mathord",
+ "mathpenaltiesmode",
"mathpunct",
"mathrel",
- "mathrulesmode",
"mathrulesfam",
+ "mathrulesmode",
"mathscriptsmode",
"mathstyle",
- "mathsurroundskip",
- "mathsurroundmode",
"mathsurround",
+ "mathsurroundmode",
+ "mathsurroundskip",
"maxdeadcycles",
"maxdepth",
"meaning",
@@ -984,36 +937,30 @@ return {
"noalign",
"noboundary",
"noexpand",
+ "nohrule",
"noindent",
"nokerns",
- "nohrule",
"noligs",
- "nospaces",
- "novrule",
"nolimits",
"nolocaldirs",
"nolocalwhatsits",
"nonscript",
"nonstopmode",
"normaldeviate",
+ "nospaces",
+ "novrule",
"nulldelimiterspace",
"nullfont",
"number",
"numexpr",
- "odelcode",
- "odelimiter",
- "omathaccent",
- "omathchar",
- "omathchardef",
- "omathcode",
"omit",
"openin",
"openout",
"or",
- "oradical",
"outer",
"output",
"outputbox",
+ "outputmode",
"outputpenalty",
"over",
"overfullrule",
@@ -1046,123 +993,21 @@ return {
"parskip",
"patterns",
"pausing",
- "pdfadjustspacing",
- "pdfannot",
- "pdfcatalog",
- "pdfcolorstack",
- "pdfcolorstackinit",
- "pdfcompresslevel",
- "pdfcopyfont",
- "pdfcreationdate",
- "pdfdecimaldigits",
- "pdfdest",
- "pdfdestmargin",
- "pdfdraftmode",
- "pdfeachlineheight",
- "pdfeachlinedepth",
- "pdfendlink",
- "pdfendthread",
"pdfextension",
+ "pdffeedback",
"pdfvariable",
- "pdffirstlineheight",
- "pdffontattr",
- "pdffontexpand",
- "pdffontname",
- "pdffontobjnum",
- "pdffontsize",
- "pdfxformmargin",
- "pdfgamma",
- "pdfgentounicode",
- "pdfglyphtounicode",
- "pdfhorigin",
- "pdfignoreddimen",
- "pdfimageaddfilename",
- "pdfimageapplygamma",
- "pdfimagegamma",
- "pdfimagehicolor",
- "pdfimageresolution",
- "pdfincludechars",
- "pdfinclusioncopyfonts",
- "pdfinclusionerrorlevel",
- "pdfignoreunknownimages",
- "pdfinfo",
- "pdfinfoomitdate",
- "pdftrailerid",
- "pdfinsertht",
- "pdflastannot",
- "pdflastlinedepth",
- "pdflastlink",
- "pdflastobj",
- "pdflastxform",
- "pdflastximage",
- "pdflastximagepages",
- "pdflastxpos",
- "pdflastypos",
- "pdflinkmargin",
- "pdfliteral",
- "pdfmapfile",
- "pdfmapline",
- "pdfminorversion",
- "pdfnames",
- "pdfnoligatures",
- "pdfnormaldeviate",
- "pdfobj",
- "pdfobjcompresslevel",
- "pdfoutline",
- "pdfoutput",
- "pdfpageattr",
- "pdfpagebox",
- "pdfpageheight",
- "pdfpageref",
- "pdfpageresources",
- "pdfpagesattr",
- "pdfpagewidth",
- "pdfpkmode",
- "pdfpkresolution",
- "pdfpkfixeddpi",
- "pdfprimitive",
- "pdfprotrudechars",
- "pdfpxdimen",
- "pdfrandomseed",
- "pdfrefobj",
- "pdfrefxform",
- "pdfrefximage",
- "pdfreplacefont",
- "pdfrestore",
- "pdfretval",
- "pdfsave",
- "pdfsavepos",
- "pdfsetmatrix",
- "pdfsetrandomseed",
- "pdfstartlink",
- "pdfstartthread",
- "pdftexbanner",
- "pdftexrevision",
- "pdftexversion",
- "pdfsuppressptexinfo",
- "pdfsuppressoptionalinfo",
- "pdfthread",
- "pdfthreadmargin",
- "pdftracingfonts",
- "pdftrailer",
- "pdfuniformdeviate",
- "pdfuniqueresname",
- "pdfvorigin",
- "pdfxform",
- "pdfxformattr",
- "pdfxformname",
- "pdfxformresources",
- "pdfximage",
"penalty",
"postdisplaypenalty",
"postexhyphenchar",
"posthyphenchar",
+ "prebinoppenalty",
"predisplaydirection",
"predisplaygapfactor",
"predisplaypenalty",
"predisplaysize",
"preexhyphenchar",
"prehyphenchar",
+ "prerelpenalty",
"pretolerance",
"prevdepth",
"prevgraf",
@@ -1187,9 +1032,9 @@ return {
"romannumeral",
"rpcode",
"saveboxresource",
+ "savecatcodetable",
"saveimageresource",
"savepos",
- "savecatcodetable",
"savinghyphcodes",
"savingvdiscards",
"scantextokens",
@@ -1204,8 +1049,8 @@ return {
"setfontid",
"setlanguage",
"setrandomseed",
- "shapemode",
"sfcode",
+ "shapemode",
"shipout",
"show",
"showbox",
@@ -1219,7 +1064,6 @@ return {
"skewchar",
"skip",
"skipdef",
---"skipexpr",
"spacefactor",
"spaceskip",
"span",
@@ -1235,8 +1079,8 @@ return {
"suppressfontnotfounderror",
"suppressifcsnameerror",
"suppresslongerror",
- "suppressoutererror",
"suppressmathparerror",
+ "suppressoutererror",
"synctex",
"tabskip",
"tagcode",
@@ -1248,11 +1092,14 @@ return {
"thinmuskip",
"time",
"toks",
+ "toksapp",
"toksdef",
+ "tokspre",
"tolerance",
"topmark",
"topmarks",
"topskip",
+ "tpack",
"tracingassigns",
"tracingcommands",
"tracingfonts",
@@ -1294,6 +1141,7 @@ return {
"vfilneg",
"vfuzz",
"voffset",
+ "vpack",
"vrule",
"vsize",
"vskip",
@@ -1309,19 +1157,8 @@ return {
"xleaders",
"xspaceskip",
"year",
- --
- "vpack",
- "hpack",
- "tpack",
- "csstring",
- "begincsname",
- "lastnamedcs",
- "toksapp",
- "tokspre",
- "etoksapp",
- "etokspre",
},
["xetex"]={
"XeTeXversion",
},
-}
+} \ No newline at end of file
diff --git a/tex/context/base/mkiv/mult-prm.mkiv b/tex/context/base/mkiv/mult-prm.mkiv
index e385341c2..308606d7e 100644
--- a/tex/context/base/mkiv/mult-prm.mkiv
+++ b/tex/context/base/mkiv/mult-prm.mkiv
@@ -13,6 +13,20 @@
%D This file is only a helper for generating files that can be used in an
%D editor for syntax highlighting.
+% local all = table.load("mult-prm.lua")
+% local tex = table.tohash(all.tex)
+% for k, v in next, all do
+% if k ~= "tex" then
+% local h = table.tohash(v)
+% for k, v in next, h do
+% tex[k] = nil
+% end
+% all[k] = table.sortedkeys(h)
+% end
+% end
+% all.tex = table.sortedkeys(tex)
+% print((string.gsub(table.serialize(all,true),' "','\n "')))
+
\startluacode
context.starttext()
@@ -33,6 +47,35 @@
"savingvdiscards",
},
pdftex = {
+ "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing",
+ "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit",
+ "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate",
+ "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode",
+ "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink",
+ "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand",
+ "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma",
+ "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin",
+ "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename",
+ "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor",
+ "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts",
+ "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate",
+ "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink",
+ "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages",
+ "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral",
+ "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames",
+ "pdfnoligatures", "pdfnormaldeviate", "pdfobj",
+ "pdfobjcompresslevel", "pdfoutline", "pdfoutput", "pdfpageattr",
+ "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources",
+ "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode",
+ "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen",
+ "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage",
+ "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos",
+ "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread",
+ "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner",
+ "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin",
+ "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate",
+ "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr",
+ "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage",
},
luatex = {
},
@@ -41,10 +84,10 @@
},
omega = {
"Omegaminorversion", "Omegarevision", "Omegaversion",
- "omathcode", "odelcode", "omathchardef", "omathchar", "omathaccent", "odelimiter", "oradical",
+ "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "oradical",
},
xetex = {
- "XeTeXversion",
+ "XeTeXversion", -- probably some more
},
plain = {
"TeX",
@@ -63,13 +106,13 @@
}
local primitives = {
- tex = table.sorted( table.merged( missing.tex , table.fromhash(tex.primitives()) ) ),
- etex = table.sorted( table.merged( missing.etex , tex.extraprimitives('etex') ) ),
- pdftex = table.sorted( table.merged( missing.pdftex, tex.extraprimitives('pdftex') ) ),
- luatex = table.sorted( table.merged( missing.luatex, tex.extraprimitives('luatex') ) ),
- aleph = table.sorted( table.merged( missing.aleph , tex.extraprimitives('aleph') ) ),
- omega = table.sorted( table.merged( missing.omega , tex.extraprimitives('omega') ) ),
- xetex = table.sorted( table.merged( missing.xetex , { } ) ),
+ tex = table.sorted( table.merged( missing.tex , tex.primitives() ) ),
+ etex = table.sorted( table.merged( missing.etex , tex.extraprimitives('etex') ) ),
+ pdftex = table.sorted( table.merged( missing.pdftex, { } ) ),
+ luatex = table.sorted( table.merged( missing.luatex, tex.extraprimitives('luatex') ) ),
+ aleph = table.sorted( table.merged( missing.aleph , { } ) ),
+ omega = table.sorted( table.merged( missing.omega , { } ) ),
+ xetex = table.sorted( table.merged( missing.xetex , { } ) ),
}
-- table.remove(primitives.tex,1) -- get rid of \-
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index e88315d6b..61de37d39 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 9ae6f503b..ffe955c1c 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-mat.mkiv b/tex/context/base/mkiv/strc-mat.mkiv
index 8f3d2cc11..7ba652818 100644
--- a/tex/context/base/mkiv/strc-mat.mkiv
+++ b/tex/context/base/mkiv/strc-mat.mkiv
@@ -752,6 +752,11 @@
\setformulaparameter\c!grid{\v!math:-\v!halfline}%
\fi}
+% when we have 1.0.6 we wil use \mathpenaltiesmode
+%
+% \prebinoppenalty -100
+% \prerelpenalty -100
+
\def\strc_math_set_split
{\edef\p_split{\formulaparameter\c!split}%
\ifx\p_split\v!yes
@@ -762,9 +767,11 @@
\global\c_strc_math_vertical\zerocount
\fi\fi
\ifcase\c_strc_math_vertical
+ % \mathpenaltiesmode \zerocount
\clf_setmathpenalties\zerocount
\clf_resetmathhang
\else
+ % \mathpenaltiesmode \plusone
\clf_setmathpenalties\plusone
\edef\p_hang{\formulaparameter\c!hang}%
\ifx\p_hang\v!none
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index 63108feb7..380f94e6d 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -1195,4 +1195,8 @@
\ifdefined\explicitdiscretionary \else \let\explicitdiscretionary \- \fi
\ifdefined\automaticdiscretionary \else \def\automaticdiscretionary{\Uchar\exhyphenchar} \fi
+\ifdefined\mathpenaltiesmode \else \newcount\mathpenaltiesmode \fi
+\ifdefined\prebinoppenalty \else \newcount\prebinoppenalty \fi
+\ifdefined\prerelpenalty \else \newcount\prerelpenalty \fi
+
\protect \endinput
diff --git a/tex/context/base/mkiv/util-lib.lua b/tex/context/base/mkiv/util-lib.lua
index 817ac2753..ab26afe46 100644
--- a/tex/context/base/mkiv/util-lib.lua
+++ b/tex/context/base/mkiv/util-lib.lua
@@ -229,10 +229,12 @@ local function locate(required,version,trace,report,action)
report("load error: message %a, library %a",tostring(message or "unknown"),found_library or "no library")
end
end
- if not library then
- report("unknown library: %a",required)
- elseif trace then
- report("stored library: %a",required)
+ if trace then
+ if not library then
+ report("unknown library: %a",required)
+ else
+ report("stored library: %a",required)
+ end
end
return library
end
@@ -341,6 +343,8 @@ We use the same lookup logic for ffi loading.
local trace_ffilib = false
local savedffiload = ffi.load
+ -- ffi.savedload = savedffiload
+
trackers.register("resolvers.ffilib", function(v) trace_ffilib = v end)
local function locateindeed(name)
@@ -366,10 +370,11 @@ We use the same lookup logic for ffi loading.
local library = ffilib(name)
if type(library) == "userdata" then
return library
- else
+ end
+ if trace_ffilib then
report_ffilib("trying to load %a using normal loader",name)
- return savedffiload(name)
end
+ return savedffiload(name)
end
end
diff --git a/tex/context/base/mkiv/util-sql-imp-sqlite.lua b/tex/context/base/mkiv/util-sql-imp-sqlite.lua
index 1a960c1c3..85ef83d45 100644
--- a/tex/context/base/mkiv/util-sql-imp-sqlite.lua
+++ b/tex/context/base/mkiv/util-sql-imp-sqlite.lua
@@ -6,16 +6,9 @@ if not modules then modules = { } end modules ['util-sql-imp-sqlite'] = {
license = "see context related readme files"
}
-local next = next
+local next, tonumber = next, tonumber
-local sql = require("util-sql")
------ sql = utilities.sql
-local sqlite = require("swiglib.sqlite.core")
-local swighelpers = require("swiglib.helpers.core")
-
--- sql.sqlite = sqlite -- maybe in the module itself
-
--- inspect(table.sortedkeys(sqlite))
+local sql = utilities.sql or require("util-sql")
local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end)
local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end)
@@ -25,26 +18,94 @@ local helpers = sql.helpers
local methods = sql.methods
local validspecification = helpers.validspecification
local preparetemplate = helpers.preparetemplate
-local splitdata = helpers.splitdata
-local serialize = sql.serialize
-local deserialize = sql.deserialize
-local getserver = sql.getserver
local setmetatable = setmetatable
local formatters = string.formatters
-local get_list_item = sqlite.char_p_array_getitem
-local is_okay = sqlite.SQLITE_OK
-local execute_query = sqlite.sqlite3_exec_lua_callback
-local error_message = sqlite.sqlite3_errmsg
+----- sqlite = require("swiglib.sqlite.core")
+----- swighelpers = require("swiglib.helpers.core")
+-----
+----- get_list_item = sqlite.char_p_array_getitem
+----- is_okay = sqlite.SQLITE_OK
+----- execute_query = sqlite.sqlite3_exec_lua_callback
+----- error_message = sqlite.sqlite3_errmsg
+-----
+----- new_db = sqlite.new_sqlite3_p_array
+----- open_db = sqlite.sqlite3_open
+----- get_db = sqlite.sqlite3_p_array_getitem
+----- close_db = sqlite.sqlite3_close
+----- dispose_db = sqlite.delete_sqlite3_p_array
+
+local ffi = require("ffi")
+
+ffi.cdef [[
+
+ typedef struct sqlite3 sqlite3;
+
+ int sqlite3_initialize (
+ void
+ ) ;
+
+ int sqlite3_open (
+ const char *filename,
+ sqlite3 **ppDb
+ ) ;
+
+ int sqlite3_close (
+ sqlite3 *
+ ) ;
+
+ int sqlite3_exec (
+ sqlite3*,
+ const char *sql,
+ int (*callback)(void*,int,char**,char**),
+ void *,
+ char **errmsg
+ ) ;
+
+ const char *sqlite3_errmsg (
+ sqlite3*
+ );
+]]
+
+local ffi_tostring = ffi.string
+
+local sqlite = ffi.load("sqlite3")
+
+sqlite.sqlite3_initialize();
+
+local c_errmsg = sqlite.sqlite3_errmsg
+local c_open = sqlite.sqlite3_open
+local c_close = sqlite.sqlite3_close
+local c_exec = sqlite.sqlite3_exec
+
+local is_okay = 0
+local open_db = c_open
+local close_db = c_close
+local execute_query = c_exec
+
+local function error_message(db)
+ return ffi_tostring(c_errmsg(db))
+end
-local new_db = sqlite.new_sqlite3_p_array
-local open_db = sqlite.sqlite3_open
-local get_db = sqlite.sqlite3_p_array_getitem
-local close_db = sqlite.sqlite3_close
-local dispose_db = sqlite.delete_sqlite3_p_array
+local function new_db(n)
+ return ffi.new("sqlite3*["..n.."]")
+end
-local cache = { }
+local function dispose_db(db)
+end
+
+local function get_db(db,n)
+ return db[n]
+end
+
+-- local function execute_query(dbh,query,callback)
+-- local c = ffi.cast("int (*callback)(void*,int,char**,char**)",callback)
+-- c_exec(dbh,query,c,nil,nil)
+-- c:free()
+-- end
+
+local cache = { }
setmetatable(cache, {
__gc = function(t)
@@ -135,30 +196,31 @@ local function execute(specification)
query = preamble .. query -- only needed in open
end
if converter then
- converter = converter.sqlite
+ local convert = converter.sqlite
+ local column = { }
callback = function(data,nofcolumns,values,fields)
- local column = { }
- for i=0,nofcolumns-1 do
- column[i+1] = get_list_item(values,i)
+ for i=1,nofcolumns do
+ -- column[i] = get_list_item(values,i-1)
+ column[i] = ffi_tostring(values[i-1])
end
- nofrows = nofrows + 1
- result[nofrows] = converter(column)
+ nofrows = nofrows + 1
+ result[nofrows] = convert(column)
return is_okay
end
- --
- -- callback = converter.sqlite
else
+ local column = { }
callback = function(data,nofcolumns,values,fields)
- local column = { }
for i=0,nofcolumns-1 do
local field
if keysdone then
field = keys[i+1]
else
- field = get_list_item(fields,i)
+ -- field = get_list_item(fields,i)
+ field = ffi_tostring(fields[i])
keys[i+1] = field
end
- column[field] = get_list_item(values,i)
+ -- column[field] = get_list_item(values,i)
+ column[field] = ffi_tostring(values[i])
end
nofrows = nofrows + 1
keysdone = true
@@ -201,34 +263,6 @@ end
local celltemplate = "cells[%s]"
--- todo: how to deal with result ... pass via temp global .. bah .. or
--- also pass the execute here ... not now
---
--- local wraptemplate = [[
--- local converters = utilities.sql.converters
--- local deserialize = utilities.sql.deserialize
---
--- local tostring = tostring
--- local tonumber = tonumber
--- local booleanstring = string.booleanstring
---
--- local get_list_item = utilities.sql.sqlite.char_p_array_getitem
--- local is_okay = utilities.sql.sqlite.SQLITE_OK
---
--- %s
---
--- return function(data,nofcolumns,values,fields)
--- -- no %s (data) needed
--- -- no %s (i) needed
--- local cells = { }
--- for i=0,nofcolumns-1 do
--- cells[i+1] = get_list_item(values,i)
--- end
--- result[#result+1] = { %s }
--- return is_okay
--- end
--- ]]
-
methods.sqlite = {
execute = execute,
usesfiles = false,
diff --git a/tex/context/base/mkiv/util-sql-loggers.lua b/tex/context/base/mkiv/util-sql-loggers.lua
index 4473f8971..7e64a435a 100644
--- a/tex/context/base/mkiv/util-sql-loggers.lua
+++ b/tex/context/base/mkiv/util-sql-loggers.lua
@@ -53,16 +53,16 @@ loggers.totype = totype
loggers.fromtype = fromtype
local template = [[
- CREATE TABLE IF NOT EXISTS %basename% (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `time` int(11) NOT NULL,
- `type` int(11) NOT NULL,
- `action` varchar(15) NOT NULL,
- `data` longtext,
- PRIMARY KEY (`id`),
- UNIQUE KEY `id_unique_key` (`id`)
- )
- DEFAULT CHARSET = utf8 ;
+CREATE TABLE IF NOT EXISTS %basename% (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `time` int(11) NOT NULL,
+ `type` int(11) NOT NULL,
+ `action` varchar(15) NOT NULL,
+ `data` longtext,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `id_unique_key` (`id`)
+)
+DEFAULT CHARSET = utf8 ;
]]
local sqlite_template = [[
@@ -79,7 +79,7 @@ function loggers.createdb(presets,datatable)
local db = checkeddb(presets,datatable)
db.execute {
- template = db.usedmethod == "sqlite" and sqlite_template or template,
+ template = (db.usedmethod == "sqlite" or db.usedmethod == "sqlffi") and sqlite_template or template,
variables = {
basename = db.basename,
},
diff --git a/tex/context/base/mkiv/util-sql.lua b/tex/context/base/mkiv/util-sql.lua
index 0eff25130..d01a2267c 100644
--- a/tex/context/base/mkiv/util-sql.lua
+++ b/tex/context/base/mkiv/util-sql.lua
@@ -110,10 +110,14 @@ local defaults = { __index =
}
setmetatableindex(sql.methods,function(t,k)
- report_state("start loading method %a",k)
- require("util-sql-imp-"..k)
- report_state("loading method %a done",k)
- return rawget(t,k)
+ if type(k) == "string" then
+ report_state("start loading method %a",k)
+ require("util-sql-imp-"..k)
+ report_state("loading method %a done",k)
+ return rawget(t,k)
+ else
+ report_state("invalid method %a",tostring(k))
+ end
end)
-- converters
@@ -332,6 +336,10 @@ function sql.usedatabase(presets,datatable)
if not method then
usedmethod = sql.methods.client
method = usedmethod and sqlmethods[usedmethod]
+ if not method then
+ report_state("invalid method")
+ return
+ end
end
local base = presets.database or "test"
local basename = format("`%s`.`%s`",base,name)
diff --git a/tex/context/fonts/mkiv/lm-math.lfg b/tex/context/fonts/mkiv/lm-math.lfg
index b8c996979..a0fd2c21c 100644
--- a/tex/context/fonts/mkiv/lm-math.lfg
+++ b/tex/context/fonts/mkiv/lm-math.lfg
@@ -30,9 +30,9 @@
-- end
-- end
--
--- patches.register("after","prepare glyphs","^lmroman", patch)
--- patches.register("after","prepare glyphs","^lmsans", patch)
--- patches.register("after","prepare glyphs","^lmtypewriter",patch)
+-- patches.register("before","check extra features","^lmroman", patch)
+-- patches.register("before","check extra features","^lmsans", patch)
+-- patches.register("before","check extra features","^lmtypewriter",patch)
-- rm-lmr5 : LMMathRoman5-Regular
-- rm-lmbx5 : LMMathRoman5-Bold ]
diff --git a/tex/context/fonts/mkiv/unifraktur.lfg b/tex/context/fonts/mkiv/unifraktur.lfg
index 32ffed928..4bae0be7e 100644
--- a/tex/context/fonts/mkiv/unifraktur.lfg
+++ b/tex/context/fonts/mkiv/unifraktur.lfg
@@ -1,6 +1,6 @@
-- moved to treatments.lfg
--
--- fonts.handlers.otf.enhancers.patches.register("after","check metadata","unifraktur*", function(data,filename)
+-- fonts.handlers.otf.enhancers.patches.register("before","check extra features","unifraktur*", function(data,filename)
-- data.metadata.pfminfo.os2_xheight = nil
-- end)
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 111a63128..d2eecaba4 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index d63e87ed2..b3b355a38 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/context/modules/mkiv/s-math-repertoire.mkiv b/tex/context/modules/mkiv/s-math-repertoire.mkiv
index 91af45dfc..90d0b09d3 100644
--- a/tex/context/modules/mkiv/s-math-repertoire.mkiv
+++ b/tex/context/modules/mkiv/s-math-repertoire.mkiv
@@ -265,7 +265,7 @@
\unexpanded\def\showmathcharacterssetbodyfonts#1%
{\edef\showmathcharactersbodyfonts{#1}%
- \def\doshowmathcharacterssetbodyfonts##1{\setupbodyfont[##1,12pt]}%
+ \def\doshowmathcharacterssetbodyfonts##1{\setupbodyfont[##1,12pt]}% \usebodyfont[##1,12pt]%
\processcommacommand[\showmathcharactersbodyfonts]\doshowmathcharacterssetbodyfonts}
\unexpanded\def\showmathcharactersbodyfontschars#1%
@@ -453,7 +453,7 @@
\continueifinputfile{s-math-repertoire.mkiv}
-\showmathcharacterssetbodyfonts{lucidaot,cambria,xits,modern,pagella,termes,bonum,schola,dejavu}
+\showmathcharacterssetbodyfonts{lucidaot,cambria,xits,stixtwo,modern,pagella,termes,bonum,schola,dejavu}
\starttext
diff --git a/tex/context/modules/mkiv/s-tugboat.mkiv b/tex/context/modules/mkiv/s-tugboat.mkiv
new file mode 100644
index 000000000..2b3b07d11
--- /dev/null
+++ b/tex/context/modules/mkiv/s-tugboat.mkiv
@@ -0,0 +1,681 @@
+%D \module
+%D [ file=t-tugboat
+%D version=$Id: t-tugboat.tex 111 2013-02-25 17:56:22Z bnb $
+%D title=\CONTEXT\ Style File,
+%D subtitle=\TUGBOAT\ base style,
+%D author=Aditya Mahajan,
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+%D This file is derived from \filename{s-tug-02} written by Hans Hagen
+%D and Steve Grathwohl. Karl Berry asked me for some changes in the
+%D \TUGBOAT\ style files. The original file had an option of typesetting
+%D on a grid. That was too clever for me to understand, and hence to
+%D modify. Since \TUGBOAT\ usually does not typeset on a grid, I redid the
+%D style, borrowing parts from \filename{s-tug-02} and redoing some
+%D parts from scratch.
+
+%D \section Variables %<<<1
+%D
+%D We store the information about the article in variables.
+
+\setvariables
+ [tugboat]
+ [type=article,
+ columns=no,
+ grid=yes
+ ]
+
+\setvariables
+ [tugboat]
+ [year=1900,
+ volume=0,
+ number=0,
+ page=900]
+
+\setvariables
+ [tugboat]
+ [title=ConTeXt style for TUGboat,
+ subtitle=,
+ keywords=,
+ author=T. Boat,
+ address=Pragmatically Advanced tugboats \\
+ 314 Pi Ave. \\
+ 8061GH Hasselt NL,
+ email={tugboat@tug.org}]
+
+%D \section Font Setup %<<<1
+%D
+%D \TUGBOAT\ uses slightly different interline space than the default.
+%D So we change the interline space.
+
+\definebodyfontenvironment [8pt] [interlinespace=9.5pt, big=9pt, small=7pt]
+\definebodyfontenvironment [9pt] [interlinespace=11pt, big=10pt, small=8pt]
+\definebodyfontenvironment [10pt] [interlinespace=12pt, big=12pt, small=9pt]
+\definebodyfontenvironment [12pt] [interlinespace=14pt,big=14.4pt,small=10pt]
+\definebodyfontenvironment [14.4pt] [interlinespace=18pt,big=14.4pt,small=12pt]
+\definebodyfontenvironment [9.8pt] % Because 9.8pt is used in typing environments
+
+%D \TUGBOAT\ uses Computer Modern fonts, and \CONTEXT\ uses Latin Modern
+%D by default. So, we just specify the font size.
+
+\setupbodyfont [10pt]
+
+% Italic rather than slanted for emphasis.
+\setupbodyfontenvironment[default][em=italic]
+
+% Break after these chars in urls, not before.
+\sethyphenatedurlafter /
+\sethyphenatedurlafter .
+\sethyphenatedurlafter _
+
+%D \section Layout Setup %<<<1
+%D
+%D The original layout used in the \LATEX\ style for \TUGBOAT\ is a bit
+%D ambiguous. It uses low|-|level \TEX\ syntax, rather than changing the
+%D layout in a human understandable way (for example, by using the
+%D \mono{geometry} package. I have tried to translate it to \CONTEXT\ as
+%D far as I understand.
+
+\setuppapersize[letter][letter]
+
+\setuplayout
+ [topspace=3.8pc,% was 3.5pc
+ header=1pc,
+ headerdistance=1.5pc,
+ height=middle,
+ footerdistance=2pc,
+ footer=1pc,
+ bottomspace=3pc,
+ %
+ backspace=6pc,
+ width=middle,
+ cutspace=6pc,
+ %
+ margin=4pc,
+ margindistance=1pc,
+ ]
+
+\setupcolumns[distance=1.5pc]
+
+\setuppagenumbering
+ [location=,
+ alternative=doublesided]
+
+%D In \TUGBOAT\ different articles are glued together to form the final
+%D journal, so we do not want each article to occupy even number of
+%D pages.
+
+\installpagebreakhandler {last} {}
+
+%D \section Indentation %<<<1
+%D
+%D We use automatic indentation control, that is: no
+%D indentation after titles and skips.
+
+\setupindenting[20pt,yes]
+
+%D We do not want indentation after lists.
+
+\setupenumerations [indentnext=no]
+
+\setupdescriptions [indentnext=no]
+
+%D \section Itemize
+%D
+%D And these. We typeset itemizations ragged right.
+
+\setupitemgroup
+ [itemize]
+ [indentnext=no,
+ align=right]
+
+%D We align them at the paragraph indentation and
+%D pack them by default.
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [margin=1pc,
+ width=1em,
+ distance=0pt]
+
+\setupitemgroup
+ [itemize]
+ [1]
+ [packed]
+
+%D \section Section Headings %<<<1
+%D
+%D We follow the \TUGBOAT\ style for sections. I do not know if
+%D \type{align=right} also disables hyphenation. Lets wait and see on
+%D this. Rest all is straight forward. It took me a while to realize
+%D that in \LATEX\ \type{\@startsection} the absolute value of before
+%D skip (fourth argument) is important and not the sign.
+
+\setuphead
+ [section,subsection, subsubsection,
+ subject, subsubject, subsubsubject]
+ [style=bold,
+ align=right,
+ before={\blank[8pt]},
+ after={\blank[4pt]}]
+
+%D \section Spacing <<<1
+%D
+%D We define a logical skip. This is equal to the \tex{topsep} in latex,
+%D and most environments should have this skip.
+
+\defineblank[tugblank][3pt]
+\setupblank[3pt]
+
+
+\setupitemize[1][before={\blank[tugblank]},after={\blank[tugblank]},
+ inbetween={\blank[tugblank]}]
+
+\setuplines[before={\blank[tugblank]},after={\blank[tugblank]},
+ inbetween={\blank[tugblank]}]
+
+%D \section Typing %<<<1
+%D
+%D \TUGBOAT\ uses a smaller font size for verbatim typesetting.
+
+\setuptyping
+ [option=none,
+ % mkiv arbitrarily scales lm somehow randomly; 10pt gets 9pt back,
+ % we make it a little smaller.
+ bodyfont=9.8pt,
+ before={\blank[nowhite]}, % AM: If this is too small, use \blank[nowhite,tugblank]}
+ after={\blank[back,nowhite,tugblank]}]
+
+%D \section Footnotes %<<<1
+%D
+%D Not entirely a la \TUGBOAT:
+
+\setupfootnotes
+ [bodyfont=9pt,
+ location=columns%,
+% rule={\hrule width 5pc height .4pt depth 0pt\relax \kern \strutdepth}
+]
+
+\setupnotation[footnote]
+ [location=joinedup,
+ width=fit,
+ headstyle=normal,
+ distance=.5em]
+
+%>>>
+%D \section List %<<<
+%D
+%D We define a standard description and enumeration
+%D environment.
+
+\definedescription
+ [description]
+ [location=hanging,
+ width=broad,
+ before={\blank[tugblank]},
+ after={\blank[tugblank]}]
+
+\defineenumeration
+ [enumeration]
+ [location=hanging,
+ width=broad,
+ before={\blank[tugblank]},
+ after={\blank[tugblank]}]
+
+
+% >>>
+%D \section References %<<<
+%D
+%D The bib does not handle urls nicely. So we provide a stop gap solution.
+
+\definereferenceformat[cite][left={[},right={]}]
+\defineitemgroup [bibliography] [levels=1]
+\setupitemgroup [bibliography]
+ [symbol=n,
+ left={[},
+ right={]},
+ width=1.5em,
+ stopper=,
+ itemalign=flushright,
+ inbetween={\blank[small]}]
+
+%D Instead of color, we use weighted gray scales:
+\setupcolors
+ [conversion=always]
+
+%D English it is.
+\mainlanguage
+ [en]
+
+%D We define some logical skips
+
+\defineblank [tugbefore] [big]
+\defineblank [tuginbetween][big]
+\defineblank [tugafter] [tugbefore]
+
+%D Some real macros: <<<
+
+\def\StartAbstract
+ {\dostartbuffer[abstract][StartAbstract][StopAbstract]}
+
+\startsetups tugboat:abstract:setup
+
+ \setuptolerance
+ [horizontal, tolerant]
+
+ \setupnarrower
+ [before={\blank[.5\baselineskip]},
+% after={\blank[10pt plus4pt minus4pt]},
+ after={\blank[10pt]},
+ middle=4.875pc]
+
+\stopsetups
+
+%D Headers and footers are different for normal issues
+%D and proceedings.
+
+\startsetups tugboat:banner:text:article
+
+ {\sl TUGboat},\space
+ Volume \getvariable{tugboat}{volume}\space
+ (\getvariable{tugboat}{year}),\space
+ No.\space\getvariable{tugboat}{number}
+
+\stopsetups
+
+\def\postissno{Proceedings of the \tubyear\ Annual Meeting}
+
+\startsetups tugboat:banner:text:proceedings
+
+ \setups{tugboat:banner:text:article}
+ \thinspace---\thinspace
+ \postissno
+
+\stopsetups
+
+\startsetups tugboat:banner:setup:article
+
+ \setupheadertexts
+ [\setups{tugboat:banner:text:article}]
+ [\pagenumber]
+
+% no footer in regular articles
+% \setupfootertexts
+% [][\getvariable{tugboat}{author}]
+% [\getvariable{tugboat}{title}][]
+
+\stopsetups
+
+\startsetups tugboat:banner:setup:proceedings
+
+ \setupheadertexts
+ [][\getvariable{tugboat}{title}]
+ [\getvariable{tugboat}{author}][]
+
+ \setupfootertexts
+ [\setups{tugboat:banner:text:proceedings}]
+ [\pagenumber]
+
+\stopsetups
+
+%D article is default so,
+
+\setups{tugboat:banner:setup:article}
+
+%D It all starts here:
+
+\def\StartArticle{\setups{tugboat:\getvariable{tugboat}{type}:start}}
+\def\StopArticle {\setups{tugboat:article:stop}}
+
+\startsetups tugboat:grid:setup:settings:yes
+
+ \setupblank
+ [line]
+
+ \defineblank [tugbefore] [halfline]
+ \defineblank [tuginbetween] [halfline]
+
+\stopsetups
+
+\startsetups tugboat:grid:setup:no
+
+% \setupblank
+% [halfline]
+
+% \defineblank [medium] [halfline]
+% \defineblank [tugbefore] [halfline]
+% \defineblank [tuginbetween] [halfline]
+
+\stopsetups
+
+\startsetups tugboat:introduction:article
+
+% \blank[halfline]
+
+ \start
+ \def\\{\unskip\space\&\space\ignorespaces}
+ \hbox{\indent\getvariable{tugboat}{author}}
+ \par
+ \stop
+
+
+\stopsetups
+
+\startsetups tugboat:introduction:proceedings
+
+ \blank[20pt]
+
+ \start
+ \switchtobodyfont[12pt]
+ \def\\{\unskip\space\&\space\ignorespaces}
+ \getvariable{tugboat}{author}
+ \par
+ \stop
+
+ \start
+ \switchtobodyfont[9pt]
+ \def\\{\unskip,\space\ignorespaces}
+ \getvariable{tugboat}{address}
+ \par
+ {\tt\getvariable{tugboat}{email}}
+ \par
+ \stop
+
+
+\stopsetups
+
+\startsetups tugboat:article:start
+
+ \starttext
+
+ \setups{tugboat:columns:\getvariable{tugboat}{columns}}
+ \setups{tugboat:banner:setup:\getvariable{tugboat}{type}}
+
+ \doif{\getvariable{tugboat}{columns}}{yes}{\startcolumns}
+
+
+ % AM: Why set these again?
+ % \setupheadertexts
+ % [\setups{tugboat:banner:text:article}]
+ % [pagenumber]
+
+ % \setuppagenumber
+ % [number=\getvariable{tugboat}{page}]
+ \setcounter[userpage][\getvariable{tugboat}{page}]
+
+ % \setuplayout
+ % [grid=\getvariable{tugboat}{grid}]
+
+ % % instead of \startmode [*grid] ... \stopmode
+ % % instead of \startnotmode[*grid] ... \stopnotmode
+
+ \setups{tugboat:grid:setup:\getvariable{tugboat}{grid}}
+
+ \snaptogrid \vbox \bgroup
+
+ \forgetall
+\hrule height .6pt
+\blank[halfline]
+ \start
+ \let\\=\par
+ {\bf\getvariable{tugboat}{title}}
+ \par
+ \blank[halfline]
+ \hskip20pt\getvariable{tugboat}{author}
+ \stop
+
+% \setups{tugboat:introduction:\getvariable{tugboat}{type}}
+
+ \blank[line]
+
+ \doiftext{\getbuffer[abstract]}
+ {\let\\=\endgraf
+ \setups{tugboat:abstract:setup}
+ \subject{Abstract}
+ \getbuffer[abstract]}
+ \egroup
+\stopsetups
+
+\startsetups tugboat:proceedings:start
+
+ \starttext
+
+ \setups{tugboat:columns:\getvariable{tugboat}{columns}}
+ \setups{tugboat:banner:setup:\getvariable{tugboat}{type}}
+
+ \setupheader
+ [state=empty]
+
+ \setuppagenumber
+ [number=\getvariable{tugboat}{page}]
+
+ \setuplayout
+ [grid=\getvariable{tugboat}{grid}]
+
+ % instead of \startmode [*grid] ... \stopmode
+ % instead of \startnotmode[*grid] ... \stopnotmode
+ \doifmodeelse{*grid}{\setups{tugboat:grid:setup:yes}}{\setups{tugboat:grid:setup:no}}
+% \setups{tugboat:grid:setup:\systemmodevalue{grid}{yes}{no}}
+
+ \snaptogrid \vbox \bgroup
+
+ \forgetall
+
+ \start
+ \switchtobodyfont[14.4pt]
+ \let\\=\par
+ \getvariable{tugboat}{title}
+ \par
+ \stop
+
+ \setups{tugboat:introduction:\getvariable{tugboat}{type}}
+
+ \blank[9pt]% plus3pt minus3pt]
+
+ \let\\=\par
+ \setups{tugboat:abstract:setup}
+ \midaligned{\bf Abstract}
+
+ \startnarrower[middle]
+ \getbuffer[abstract]
+ \stopnarrower
+
+ % \blank[10pt plus4pt minus4pt]
+
+ \egroup
+
+ \doif{\getvariable{tugboat}{columns}}{yes}{\startcolumns}
+
+\stopsetups
+
+\def\signaturewidth{13pc}
+
+\definefontsynonym[LMSY][lmsy10]
+\def\mydiamond{\getglyph{LMSY}{\char5}}
+
+\startsetups tugboat:affiliation:article
+
+ \blank[line]
+
+ \snaptogrid \vbox \bgroup
+
+ \forgetall
+
+ \leftskip=\textwidth \advance\leftskip by -\signaturewidth
+
+ \let\\=\par
+ \leavevmode\llap{\mydiamond\enspace}\getvariable{tugboat}{author}
+ \par
+ \getvariable{tugboat}{address}
+ \par
+ {\tt\getvariable{tugboat}{email}}
+
+ \egroup
+
+\stopsetups
+
+\startsetups tugboat:affiliation:proceedings
+
+ % nothing fancy at the end
+
+\stopsetups
+
+\startsetups tugboat:article:stop
+
+ \setups{tugboat:affiliation:\getvariable{tugboat}{type}}
+
+ \doif{\getvariable{tugboat}{columns}}{yes}{\stopcolumns}
+
+ \page
+
+ \stoptext
+
+\stopsetups
+
+%D Normal word spacing, please.
+
+\setuptolerance
+ [strict]
+
+%D One can use the following setups (in the article) to
+%D collect settings specific to normal and/or multi
+%D column typesetting.
+
+\startsetups tugboat:columns:yes
+
+\stopsetups
+
+\startsetups tugboat:columns:no
+
+\stopsetups
+
+% >>> Logos, abbreviations: TODO: Clean up <<<
+\font\mflogo = logo10
+\def\MF{{\mflogo META\-FONT}}
+
+\def\ALEPH{Aleph}
+\def\API{\acro{API}}
+\def\CCODE{C}
+\def\CD{\acro{CD}}
+\def\CMYK{\acro{CMYK}}
+\def\CONTEXT{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
+\def\CPU{\acro{CPU}}
+\def\DVI{\acro{DVI}}
+\def\DVIPDFMX{dvipdfmx}
+\def\DVIPS{dvips}
+\def\ETEX{$\varepsilon$-\kern-.125em\TeX}
+\def\FTP{\acro{FTP}}
+\def\HTTP{\acro{HTTP}}
+\def\IO{\acro{I/O}}
+\def\ISO{\acro{ISO}}
+\def\KPSEWHICH{kpsewhich}
+\def\KPSE{\acro{KPSE}}
+\newcount\TestCount
+\newbox\TestBox
+\def\La{\TestCount=\the\fam \leavevmode L%
+ \setbox\TestBox=\hbox{$\fam\TestCount\scriptstyle A$}%
+ \kern-.5\wd\TestBox\raise.42ex\box\TestBox}
+\def\LATEX{\La\kern-.15em\TeX}
+\def\LATEXE{\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$}
+\def\LINUX{Linux}
+\def\LPEG{Lpeg}
+\def\LUAJIT{Lua\acro{JIT}}
+\def\LUATEX{Lua\-\TeX}
+\def\LUATOOLS{lua\-tools}
+\def\LUA{Lua}
+\def\MATHML{Math\acro{ML}}
+\def\METAFUN{Metafun}
+\def\METAPOST{MetaPost}
+\def\METATEX{Meta\TeX{}}
+\def\MKII{Mk\acro{II}}
+\def\MKIV{Mk\acro{IV}}
+\def\MPLIB{\acro{MP}lib}
+\def\MPTOPDF{mp\-to\-pdf}
+\def\MSWINDOWS{Windows}
+\def\MTXTOOLS{mtx\-tools}
+\def\NFSS{\acro{NFSS}}
+\def\OPENMATH{Open\-Math}
+\def\OPENTYPE{Open\-Type}
+\def\PASCAL{Pascal}
+\def\PDFTEX{pdf\/\-\TeX}
+\def\PDF{\acro{PDF}}
+\def\POSIX{\acro{POSIX}}
+\def\PRAGMA{Pragma \acro{ADE}}
+\def\POSTSCRIPT{Post\-Script}
+\def\RGB{\acro{RGB}}
+\def\RUBY{Ruby}
+\def\SCITE{Sci\acro{TE}}
+\def\TDS{\acro{TDS}}
+\def\TEXBOOK{{\sl The \TeX book}}
+\def\TEXEXEC{\TeX exec}
+\def\TEX{\TeX}
+\def\TFM{\acro{TFM}}
+\def\TRUETYPE{True\-Type}
+\def\TYPEONE{Type~1}
+\def\UTF{\acro{UTF}}
+\def\WEBC{Web2C}
+\def\XETEX{X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX}
+\def\XML{\acro{XML}}
+\def\XPATH{\acro{XP}ath}
+\def\XSLT{\acro{XSLT}}
+\def\XSLTPROC{\acro{XSLTPROC}}
+\def\ZIP{zip}
+
+\def\Dash{\unskip\thinspace---\thinspace\ignorespaces}
+\def\slash{/\penalty0 \hskip0pt \relax}
+
+\definefont[AcroFont][Serif sa .91]
+\def\acro#1{{\AcroFont #1}}
+
+\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
+
+\hyphenation{Post-Script data-base data-bases}
+
+% hack to read tugboat.dates settings.
+\def\vol#1, #2.{\def\tubvol{#1}\def\tubnum{#2}}
+\def\issyear#1.{\def\tubyear{#1}}
+\newcount\issueseqno
+
+% >>>
+%D Good bye. <<<
+
+\doifnotmode{demo}{\endinput}
+
+\showgrid
+
+\starttext
+
+\StartArticle
+
+\StartAbstract
+ \input bryson
+\StopAbstract
+
+\dorecurse{30}{\input ward \endgraf} \page
+
+\startitemize
+\item \input ward
+\item \input ward
+\stopitemize
+
+\StopArticle
+
+\setvariables[tugboat][columns=yes]
+
+\StartArticle
+
+\StartAbstract
+ \input bryson
+\StopAbstract
+
+\dorecurse{30}{\input ward \endgraf} \page
+
+\StopArticle
+
+\stoptext
+
+% >>>
+
+% vim: foldmethod=marker foldmarker=<<<,>>>