summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tex/context/base/back-exp.lua8
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4075 -> 4074 bytes
-rw-r--r--tex/context/base/context-version.pngbin106436 -> 105820 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/font-con.lua77
-rw-r--r--tex/context/base/font-otf.lua2
-rw-r--r--tex/context/base/font-otn.lua5
-rw-r--r--tex/context/base/font-tra.mkiv17
-rw-r--r--tex/context/base/m-chart.lua7
-rw-r--r--tex/context/base/node-ini.lua46
-rw-r--r--tex/context/base/page-mis.lua10
-rw-r--r--tex/context/base/page-mis.mkiv14
-rw-r--r--tex/context/base/page-one.mkiv16
-rw-r--r--tex/context/base/s-abr-01.tex1
-rw-r--r--tex/context/base/s-fnt-20.mkiv20
-rw-r--r--tex/context/base/s-fnt-35.mkiv341
-rw-r--r--tex/context/base/s-fonts-tables.lua288
-rw-r--r--tex/context/base/s-fonts-tables.mkiv30
-rw-r--r--tex/context/base/s-mod-01.mkiv69
-rw-r--r--tex/context/base/spac-ali.mkiv11
-rw-r--r--tex/context/base/spac-chr.lua26
-rw-r--r--tex/context/base/spac-chr.mkiv41
-rw-r--r--tex/context/base/spac-hor.mkiv6
-rw-r--r--tex/context/base/status-files.pdfbin23819 -> 23826 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin163940 -> 165294 bytes
-rw-r--r--tex/context/base/strc-ref.lua19
-rw-r--r--tex/context/base/supp-vis.mkiv2
-rw-r--r--tex/context/base/syst-aux.mkiv708
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua86
32 files changed, 926 insertions, 932 deletions
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index dd6e13515..4fd5aa32d 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -2131,10 +2131,12 @@ local function cleanxhtmltree(xmltree)
for e in xml.collected(xmltree,"link") do
local at = e.at
local href
- if at.url then
+ if at.location then
+ href = "#" .. gsub(at.location,":","_")
+ elseif at.url then
href = at.url
- elseif at.location then
- at.href = "#" .. gsub(at.location,":","_")
+ elseif at.file then
+ href = at.file
end
if href then
wrapper.at.href = href
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 13dad229b..f3d979a4b 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.10.20 15:49}
+\newcontextversion{2011.10.26 15:10}
%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/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index f4840be48..94e082a36 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.10.20 15:49}
+\newcontextversion{2011.10.26 15:10}
%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/context-version.pdf b/tex/context/base/context-version.pdf
index 71af8f3f7..2f6eed468 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index c1279e9d8..7ef6208ce 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index f7fe26995..d489e30b6 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.10.20 15:49}
+\edef\contextversion{2011.10.26 15:10}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 9147474d8..76056b772 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.10.20 15:49}
+\edef\contextversion{2011.10.26 15:10}
%D For those who want to use this:
diff --git a/tex/context/base/font-con.lua b/tex/context/base/font-con.lua
index 75d90f136..93567cb2d 100644
--- a/tex/context/base/font-con.lua
+++ b/tex/context/base/font-con.lua
@@ -7,6 +7,8 @@ if not modules then modules = { } end modules ['font-con'] = {
}
+-- some names of table entries will be changed (no _)
+
local utf = unicode.utf8
local next, tostring, rawget = next, tostring, rawget
@@ -51,7 +53,80 @@ constructors.cache = containers.define("fonts", "constructors", constr
constructors.privateoffset = 0xF0000 -- 0x10FFFF
--- This might become an interface;
+-- Some experimental helpers (handy for tracing):
+
+constructors.keys = {
+ properties = {
+ encodingbytes = "number",
+ embedding = "number",
+ cidinfo = {
+ },
+ format = "string",
+ fontname = "string",
+ fullname = "string",
+ filename = "filename",
+ psname = "string",
+ name = "string",
+ virtualized = "boolean",
+ italic_correction = "boolean",
+ auto_italic_correction = "boolean",
+ no_stackmath = "boolean",
+ noglyphnames = "boolean",
+ mode = "string",
+ has_math = "boolean",
+ no_math_italics = "boolean",
+ no_text_italics = "boolean",
+ finalized = "boolean",
+ },
+ parameters = {
+ mathsize = "scaledpoints",
+ scriptpercentage = "float",
+ scriptscriptpercentage = "float",
+ units = "cardinal",
+ designsize = "scalespoints",
+ expansion = {
+ stretch = "integerscale", -- might become float
+ shrink = "integerscale", -- might become float
+ step = "integerscale", -- might become float
+ auto = "boolean",
+ },
+ protrusion = {
+ auto = "boolean",
+ },
+ expand_factor = "float",
+ slant_factor = "float",
+ factor = "float",
+ hfactor = "float",
+ vfactor = "float",
+ size = "scaledpoints",
+ units = "scaledpoints",
+ scaledpoints = "scaledpoints",
+ slant = "float",
+ space = "scaledpoints",
+ space_stretch = "scaledpoints",
+ space_shrink = "scaledpoints",
+ x_height = "scaledpoints",
+ quad = "scaledpoints",
+ extra_space = "scaledpoints",
+ ascender = "scaledpoints",
+ descender = "scaledpoints",
+ },
+ description = {
+ width = "basepoints",
+ height = "basepoints",
+ depth = "basepoints",
+ boundingbox = { },
+ },
+ character = {
+ width = "scaledpoints",
+ height = "scaledpoints",
+ depth = "scaledpoints",
+ italic = "scaledpoints",
+ },
+
+}
+
+-- This might become an interface:
local designsizes = allocate()
constructors.designsizes = designsizes
diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua
index cab6fae2b..cb309a39f 100644
--- a/tex/context/base/font-otf.lua
+++ b/tex/context/base/font-otf.lua
@@ -12,6 +12,8 @@ if not modules then modules = { } end modules ['font-otf'] = {
-- to_table -> totable
-- ascent descent
+-- more checking against low level calls of functions
+
local utf = unicode.utf8
local utfbyte = utf.byte
diff --git a/tex/context/base/font-otn.lua b/tex/context/base/font-otn.lua
index beb3ae740..af8264939 100644
--- a/tex/context/base/font-otn.lua
+++ b/tex/context/base/font-otn.lua
@@ -399,6 +399,11 @@ local function toligature(kind,lookupname,start,stop,char,markflag,discfound) --
start = start.next
end
end
+ -- we do need components in funny kerning mode but maybe I can better reconstruct then
+ -- as we do have the font components info available; removing components makes the
+ -- previous code much simpler
+ --
+ -- flush_node_list(head.components)
return head
end
end
diff --git a/tex/context/base/font-tra.mkiv b/tex/context/base/font-tra.mkiv
index 8344b7658..0f16dbc43 100644
--- a/tex/context/base/font-tra.mkiv
+++ b/tex/context/base/font-tra.mkiv
@@ -50,6 +50,7 @@
{\begingroup
\tttf\language\minusone
\veryraggedright
+ \forgetparindent
\hangindent1em
\hangafter\plusone
\dontleavehmode\hbox{\detokenize{#1}}\removeunwantedspaces
@@ -67,7 +68,10 @@
{\ctxlua{nodes.tracers.steppers.features()}}
\def\showotfsteps
- {\dontleavehmode\bgroup\tttf \language\minusone features: \showotfstepfeatures\egroup
+ {\begingroup
+ \veryraggedright
+ \forgetparindent
+ \dontleavehmode\bgroup\tttf \language\minusone features: \showotfstepfeatures\egroup
\blank
\dontleavehmode\bgroup\tttf result:\egroup
\blank
@@ -84,14 +88,17 @@
\blank
\startlinecorrection
\ruledhbox % can be mode
- \bgroup\resetallattributes\showotfstepglyphs\recurselevel\egroup % reset is new, we don't want additional processing
+ \bgroup\resetallattributes\showotfstepglyphs\recurselevel\egroup % reset is new, we don't want additional processing
\stoplinecorrection
- \blank}}
+ \blank}%
+ \endgroup}
\unexpanded\def\startotfsample
{\enabletrackers[*otf.sample]% beware, kind of global
\startotfcollecting
- \begingroup}
+ \begingroup
+ \veryraggedright
+ \forgetparindent}
\unexpanded\def\stopotfsample
{\endgroup
@@ -104,6 +111,8 @@
\def\showotfcomposition#1#2#3% {font*features at size}, rl=-1, text
{\begingroup
+ \veryraggedright
+ \forgetparindent
\setupcolors[\c!state=\v!start]% can be option
\startotfsample
\global\setbox\otfcompositionbox\hbox{\definedfont[#1]\ifnum#2<0 \textdir TRT\else\ifnum#2>0 \textdir TLT\fi\fi\relax#3}%
diff --git a/tex/context/base/m-chart.lua b/tex/context/base/m-chart.lua
index 943e6be63..0000d28e5 100644
--- a/tex/context/base/m-chart.lua
+++ b/tex/context/base/m-chart.lua
@@ -711,6 +711,8 @@ local function getchart(settings)
if miny == 0 or y > maxy then maxy = y end
end
end
+-- print("1>",x,y,nx,ny)
+-- print("2>",minx, miny, maxx, maxy)
-- check of window should be larger (maybe autofocus + nx/ny?)
if autofocus then
-- x and y are ignored
@@ -725,15 +727,16 @@ local function getchart(settings)
minx = x
end
if y and y > 0 then
- minx = y
+ miny = y
end
if nx and nx > 0 then
maxx = minx + nx - 1
end
if ny and ny > 0 then
- miny = miny + ny - 1
+ maxy = miny + ny - 1
end
end
+-- print("3>",minx, miny, maxx, maxy)
--
local nx = maxx - minx + 1
local ny = maxy - miny + 1
diff --git a/tex/context/base/node-ini.lua b/tex/context/base/node-ini.lua
index a27efe0cf..0ed17a1b5 100644
--- a/tex/context/base/node-ini.lua
+++ b/tex/context/base/node-ini.lua
@@ -94,6 +94,12 @@ local skipcodes = allocate {
[18] = "thickmuskip",
}
+local penaltycodes = allocate { -- unfortunately not used
+ [ 0] = "userpenalty",
+}
+
+table.setmetatableindex(penaltycodes,function(t,k) return "userpenalty" end) -- not used anyway
+
local noadcodes = allocate {
[ 0] = "ord",
[ 1] = "opdisplaylimits",
@@ -158,25 +164,27 @@ end
local nodecodes = simplified(node.types())
local whatcodes = simplified(node.whatsits())
-skipcodes = allocate(swapped(skipcodes, skipcodes ))
-noadcodes = allocate(swapped(noadcodes, noadcodes ))
-nodecodes = allocate(swapped(nodecodes, nodecodes ))
-whatcodes = allocate(swapped(whatcodes, whatcodes ))
-listcodes = allocate(swapped(listcodes, listcodes ))
-glyphcodes = allocate(swapped(glyphcodes,glyphcodes))
-kerncodes = allocate(swapped(kerncodes, kerncodes ))
-mathcodes = allocate(swapped(mathcodes, mathcodes ))
-fillcodes = allocate(swapped(fillcodes, fillcodes ))
-
-nodes.skipcodes = skipcodes nodes.gluecodes = skipcodes -- more official
-nodes.noadcodes = noadcodes
-nodes.nodecodes = nodecodes
-nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes -- more official
-nodes.listcodes = listcodes
-nodes.glyphcodes = glyphcodes
-nodes.kerncodes = kerncodes
-nodes.mathcodes = mathcodes
-nodes.fillcodes = fillcodes
+skipcodes = allocate(swapped(skipcodes, skipcodes ))
+noadcodes = allocate(swapped(noadcodes, noadcodes ))
+nodecodes = allocate(swapped(nodecodes, nodecodes ))
+whatcodes = allocate(swapped(whatcodes, whatcodes ))
+listcodes = allocate(swapped(listcodes, listcodes ))
+glyphcodes = allocate(swapped(glyphcodes, glyphcodes))
+kerncodes = allocate(swapped(kerncodes, kerncodes ))
+penaltycodes = allocate(swapped(penaltycodes, penaltycodes ))
+mathcodes = allocate(swapped(mathcodes, mathcodes ))
+fillcodes = allocate(swapped(fillcodes, fillcodes ))
+
+nodes.skipcodes = skipcodes nodes.gluecodes = skipcodes -- more official
+nodes.noadcodes = noadcodes
+nodes.nodecodes = nodecodes
+nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes -- more official
+nodes.listcodes = listcodes
+nodes.glyphcodes = glyphcodes
+nodes.kerncodes = kerncodes
+nodes.penaltycodes = kerncodes
+nodes.mathcodes = mathcodes
+nodes.fillcodes = fillcodes
listcodes.row = listcodes.alignment
listcodes.column = listcodes.alignment
diff --git a/tex/context/base/page-mis.lua b/tex/context/base/page-mis.lua
index 21c122fa2..d32eb8a00 100644
--- a/tex/context/base/page-mis.lua
+++ b/tex/context/base/page-mis.lua
@@ -23,7 +23,15 @@ local function flush(page)
end
local function setnextpage()
- tex.setcount("global","postponed_page_blocks_next_page",next(cache) and sortedkeys(cache)[1] or -1)
+ local n = next(cache) and sortedkeys(cache)[1]
+ if not n then
+ n = 0 -- nothing in the cache
+ elseif n == 0 then
+ n = -1 -- generic buffer (0)
+ elseif n > 0 then
+ -- upcoming page (realpageno)
+ end
+ tex.setcount("global","postponed_page_blocks_next_page",n)
end
function commands.flushpostponedblocks(page)
diff --git a/tex/context/base/page-mis.mkiv b/tex/context/base/page-mis.mkiv
index 808f42aa6..d3c1e5051 100644
--- a/tex/context/base/page-mis.mkiv
+++ b/tex/context/base/page-mis.mkiv
@@ -207,21 +207,23 @@
\restoreglobalbodyfont % otherwise problems inside split verbatim
\ctxcommand{flushpostponedblocks()}%
\relax
- \doflushfloats % new but potential dangerous
- \egroup}
+ \doflushfloats % new but potential dangerous, maybe we need a classification
+ \egroup} % of blocks: with and without flush
\def\doflushpostponedblocks
{\ifinpostponing
% probably a nested flush
\else\ifnum\postponed_page_blocks_next_page=\zerocount
+ % nothing in cache
+ \else\ifnum\postponed_page_blocks_next_page<\zerocount
+ % generic cache
\postponed_page_block_flush
- %\doflushpostponedblocks
\else\ifnum\postponed_page_blocks_next_page>\realpageno
- % not yet
+ % future content
\else
+ % pending content
\postponed_page_block_flush
- %\doflushpostponedblocks
- \fi\fi\fi}
+ \fi\fi\fi\fi}
\def\doflushpostponedcontent % called in page-one
{\bgroup
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv
index 6156ab8b1..b1ee82302 100644
--- a/tex/context/base/page-one.mkiv
+++ b/tex/context/base/page-one.mkiv
@@ -50,12 +50,14 @@
\ifdim\oldvsize=\vsize
% let's assume that the layout didn't change
\else
- \bgroup
- \global\oldvsize\vsize
- \advance\vsize-\topinserted
- \advance\vsize-\botinserted
- \global\pagegoal\vsize
- \egroup
+ \global\oldvsize\vsize
+ \global\pagegoal\dimexpr\vsize-\topinserted-\botinserted\relax
+% \bgroup
+% \global\oldvsize\vsize
+% \advance\vsize-\topinserted
+% \advance\vsize-\botinserted
+% \global\pagegoal\vsize
+% \egroup
\fi
\fi}
@@ -354,7 +356,7 @@
\dofloatscollect\s!text{\hsize}{1em}%
%% no longer (interferes with footnotes):
%%
- %% \OTRONEsetvsize / test 2011.06.24.001
+ %% \OTRONEsetvsize % test 2011.06.24.001
%%
\global\setbox\floatbox\hbox to \hsize
{\hfil
diff --git a/tex/context/base/s-abr-01.tex b/tex/context/base/s-abr-01.tex
index a180876a5..a0d8ba2ca 100644
--- a/tex/context/base/s-abr-01.tex
+++ b/tex/context/base/s-abr-01.tex
@@ -179,6 +179,7 @@
\logo [OVF] {ovf}
\logo [PASCAL] {Pascal}
\logo [PCTEX] {pc\TeX}
+\logo [PFA] {pfa}
\logo [PFB] {pfb}
\logo [PDF] {pdf}
\logo [PDFETEX] {pdfe\TeX}
diff --git a/tex/context/base/s-fnt-20.mkiv b/tex/context/base/s-fnt-20.mkiv
index 5ea740c0a..a78f62555 100644
--- a/tex/context/base/s-fnt-20.mkiv
+++ b/tex/context/base/s-fnt-20.mkiv
@@ -138,3 +138,23 @@
{\getvariable{otftracker}{sample}}
\stoptext
\stopsetups
+
+\continueifinputfile{s-fnt-20.mkiv}
+
+\usemodule[art-01]
+
+\setupbodyfont
+% [cambria]
+ [dejavu]
+
+\starttext
+
+\setvariables
+ [otftracker]
+ [font=Serif,
+ size=48pt,
+ figure=,
+ title=Feature Check,
+ sample={affiliation}]
+
+\stoptext
diff --git a/tex/context/base/s-fnt-35.mkiv b/tex/context/base/s-fnt-35.mkiv
deleted file mode 100644
index 157d3062c..000000000
--- a/tex/context/base/s-fnt-35.mkiv
+++ /dev/null
@@ -1,341 +0,0 @@
-%D \module
-%D [ file=s-fnt-35,
-%D version=2011.10.10,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Feature List,
-%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.
-
-% we already have a way to show character tables
-
-\startluacode
-
--- the table will move to a font-* file
-
-moduledata.fonts = moduledata.fonts or { }
-
-local digits = {
- dflt = {
- dflt = "1234567890 1/2",
- },
-}
-
-local punctuation = {
- dflt = {
- dflt = ". , : ; ? !",
- },
-}
-
-local symbols = {
- dflt = {
- dflt = "@ # $ % & * () [] {} <> + - = / |",
- },
-}
-
-local uppercase = {
- latn = {
- dflt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- },
- grek = {
- dftl = "ΑΒΓΔΕΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ",
- },
- cyrl= {
- dflt = "АБВГДЕЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯѲ"
- },
-}
-
-local lowercase = {
- latn = {
- dftl = "abcdefghijklmnopqrstuvwxyz",
- },
- grek = {
- dftl = "αβγδεηθικλμνξοπρστυφχψω",
- },
- cyrl= {
- dflt = "абвгдежзиійклмнопрстуфхцчшщъыьѣэюяѳ"
- },
-}
-
-local samples = {
- digits = digits,
- punctuation = punctuation,
- symbols = symbols,
- uppercase = uppercase,
- lowercase = lowercase,
-}
-
-fonts.tracers.samples = samples
-
-table.setmetatableindex(uppercase, function(t,k) return rawget(t,"latn") end)
-table.setmetatableindex(lowercase, function(t,k) return rawget(t,"latn") end)
-table.setmetatableindex(digits, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(symbols, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(punctuation, function(t,k) return rawget(t,"dflt") end)
-
-table.setmetatableindex(uppercase.latn, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(uppercase.grek, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(uppercase.cyrl, function(t,k) return rawget(t,"dflt") end)
-
-table.setmetatableindex(lowercase.latn, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(lowercase.grek, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(lowercase.cyrl, function(t,k) return rawget(t,"dflt") end)
-
-table.setmetatableindex(digits.dflt, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(symbols.dflt, function(t,k) return rawget(t,"dflt") end)
-table.setmetatableindex(punctuation.dflt, function(t,k) return rawget(t,"dflt") end)
-
-fonts.constructors.keys = {
- properties = {
- encodingbytes = "number",
- embedding = "number",
- cidinfo = "table",
- format = "string",
- fontname = "string",
- fullname = "string",
- filename = "filename",
- psname = "string",
- name = "string",
- virtualized = "boolean",
- italic_correction = "boolean",
- auto_italic_correction = "boolean",
- no_stackmath = "boolean",
- noglyphnames = "boolean",
- mode = "string",
- has_math = "boolean",
- no_math_italics = "boolean",
- no_text_italics = "boolean",
- finalized = "boolean",
- },
- parameters = {
- mathsize = "scaledpoints",
- scriptpercentage = "float",
- scriptscriptpercentage = "float",
- units = "cardinal",
- designsize = "basepoints",
- expansion = "table",
- protrusion = "table",
- expand_factor = "float",
- slant_factor = "float",
- factor = "float",
- hfactor = "float",
- vfactor = "float",
- size = "scaledpoints",
- units = "scaledpoints",
- scaledpoints = "scaledpoints",
- slant = "float",
- space = "scaledpoints",
- space_stretch = "scaledpoints",
- space_shrink = "scaledpoints",
- x_height = "scaledpoints",
- quad = "scaledpoints",
- extra_space = "scaledpoints",
- ascender = "scaledpoints",
- descender = "scaledpoints",
- },
-}
-
--- parameters.expansion = {
--- stretch = tfmdata.stretch or 0,
--- shrink = tfmdata.shrink or 0,
--- step = tfmdata.step or 0,
--- auto = tfmdata.auto_expand or false,
--- }
--- parameters.protrusion = {
--- auto = auto_protrude
--- }
-
-local function showtable(t,keys)
- if t then
- context.starttabulate { "|Tl|Tl|" }
- for k, v in table.sortedhash(keys) do
- context.NC()
- context(k)
- context.NC()
- local tk = t[k]
- if not tk then
- context("<unset>")
- elseif v == "filename" then
- context(file.basename(tk))
- elseif v == "boolean" then
- context(tostring(tk or false))
- elseif v == "scaledpoints" or v == "basepoints" then
- context(number.points(tk))
- elseif v == "table" then
- -- todo
- context("<table>")
- else
- context(tostring(tk))
- end
- context.NC()
- context.NR()
- end
- context.stoptabulate()
- end
-end
-
-function moduledata.fonts.show_properties()
- local tfmdata = fonts.hashes.identifiers[font.current()]
- showtable(tfmdata.properties,fonts.constructors.keys.properties)
-end
-
-function moduledata.fonts.show_parameters()
- local tfmdata = fonts.hashes.identifiers[font.current()]
- showtable(tfmdata.parameters,fonts.constructors.keys.parameters)
-end
-
-function moduledata.fonts.show_positional_features()
- local tfmdata = fonts.hashes.identifiers[font.current()]
- local resources = tfmdata.resources
- if resources then
- local features = resources.features
- if features then
- local gpos = features.gpos
- if gpos and next(gpos) then
- context.starttabulate { "|Tl|Tl|Tlp|" }
- for feature, scripts in table.sortedpairs(gpos) do
- for script, languages in table.sortedpairs(scripts) do
- context.NC()
- context(feature)
- context.NC()
- context(script)
- context.NC()
- context(table.concat(table.sortedkeys(languages)," "))
- context.NC()
- context.NR()
- end
- end
- context.stoptabulate()
- else
- context("no entries")
- context.par()
- end
- end
- end
-end
-
-local dynamics = true
-
-function moduledata.fonts.show_substitution_features()
- local tfmdata = fonts.hashes.identifiers[font.current()]
- local resources = tfmdata.resources
- if resources then
- local features = resources.features
- if features then
- local gsub = features.gsub
- if gsub then
- local makes_sense = { }
- for feature, scripts in table.sortedpairs(gsub) do
- for script, languages in table.sortedpairs(scripts) do
- for language in table.sortedpairs(languages) do
- local tag = string.format("dummy-%s-%s-%s",feature,script,language)
- local fnt = string.format("file:%s*%s",file.basename(tfmdata.properties.filename),tag)
- context.definefontfeature (
- { tag },
- {
- mode = "node",
- script = script,
- language = language,
- [feature] = "yes"
- }
- )
- if not dynamics then
- context.definefont( { fnt }, { fnt } )
- end
- makes_sense[#makes_sense+1] = {
- feature = feature,
- tag = tag,
- script = script,
- language = language,
- fontname = fnt,
- }
- end
- end
- end
- if #makes_sense > 0 then
- context.starttabulate { "|Tl|Tl|Tl|p|" }
- for i=1,#makes_sense do
- local data = makes_sense[i]
- local script = data.script
- local language = data.language
- context.NC()
- context(data.feature)
- context.NC()
- context(script)
- context.NC()
- context(language)
- context.NC()
- if not dynamics then
- context.startfont { data.fontname }
- else
- context.addff(data.tag)
- end
- context.verbatim(samples.lowercase [script][language]) context.par()
- context.verbatim(samples.uppercase [script][language]) context.par()
- context.verbatim(samples.digits [script][language]) context.par()
- context.verbatim(samples.punctuation[script][language])
- context.verbatim(samples.symbols [script][language])
- if not dynamics then
- context.stopfont()
- end
- context.NC()
- context.NR()
- end
- context.stoptabulate()
- else
- context("no entries")
- context.par()
- end
- end
- end
- end
-end
-
-function moduledata.fonts.show_a_lot(title)
-
- if title == "" then title = false end
-
- if title then
- context.starttitle { title = title }
- end
-
- context.startsubject { title = "Properties" }
- moduledata.fonts.show_properties()
- context.stopsubject()
-
- context.startsubject { title = "Parameters" }
- moduledata.fonts.show_parameters()
- context.stopsubject()
-
- context.startsubject { title = "Positional features" }
- moduledata.fonts.show_positional_features()
- context.stopsubject()
-
- context.startsubject { title = "Substitution features" }
- moduledata.fonts.show_substitution_features()
- context.stopsubject()
-
- if title then
- context.stoptitle()
- end
-
-end
-
-\stopluacode
-
-% todo: make a mtxrun --script --font <name> option
-
-\continueifinputfile{s-fnt-35.mkiv}
-
-\usemodule[art-01]
-
-\setupbodyfont
- [cambria]
-
-\starttext
- \ctxlua{moduledata.fonts.show_a_lot("Cambria")}
-\stoptext
diff --git a/tex/context/base/s-fonts-tables.lua b/tex/context/base/s-fonts-tables.lua
new file mode 100644
index 000000000..856a34cd8
--- /dev/null
+++ b/tex/context/base/s-fonts-tables.lua
@@ -0,0 +1,288 @@
+if not modules then modules = { } end modules ['s-fonts-tables'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-tables.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local setmetatableindex = table.setmetatableindex
+local sortedhash = table.sortedhash
+local sortedkeys = table.sortedkeys
+local format = string.format
+local concat = table.concat
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.tracers = moduledata.fonts.tracers or { }
+moduledata.fonts.tracers.tables = moduledata.fonts.tracers.tables or { }
+
+local tabletracers = moduledata.fonts.tracers.tables
+
+local digits = {
+ dflt = {
+ dflt = "1234567890 1/2",
+ },
+}
+
+local punctuation = {
+ dflt = {
+ dflt = ". , : ; ? !",
+ },
+}
+
+local symbols = {
+ dflt = {
+ dflt = "@ # $ % & * () [] {} <> + - = / |",
+ },
+}
+
+local uppercase = {
+ latn = {
+ dflt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ },
+ grek = {
+ dftl = "ΑΒΓΔΕΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ",
+ },
+ cyrl= {
+ dflt = "АБВГДЕЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯѲ"
+ },
+}
+
+local lowercase = {
+ latn = {
+ dftl = "abcdefghijklmnopqrstuvwxyz",
+ },
+ grek = {
+ dftl = "αβγδεηθικλμνξοπρστυφχψω",
+ },
+ cyrl= {
+ dflt = "абвгдежзиійклмнопрстуфхцчшщъыьѣэюяѳ"
+ },
+}
+
+local samples = {
+ digits = digits,
+ punctuation = punctuation,
+ symbols = symbols,
+ uppercase = uppercase,
+ lowercase = lowercase,
+}
+
+tabletracers.samples = samples
+
+setmetatableindex(uppercase, function(t,k) return rawget(t,"latn") end)
+setmetatableindex(lowercase, function(t,k) return rawget(t,"latn") end)
+setmetatableindex(digits, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(symbols, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(punctuation, function(t,k) return rawget(t,"dflt") end)
+
+setmetatableindex(uppercase.latn, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(uppercase.grek, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(uppercase.cyrl, function(t,k) return rawget(t,"dflt") end)
+
+setmetatableindex(lowercase.latn, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(lowercase.grek, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(lowercase.cyrl, function(t,k) return rawget(t,"dflt") end)
+
+setmetatableindex(digits.dflt, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(symbols.dflt, function(t,k) return rawget(t,"dflt") end)
+setmetatableindex(punctuation.dflt, function(t,k) return rawget(t,"dflt") end)
+
+local function typeset(t,keys,nesting,prefix)
+ if t then
+ if not prefix then
+ context.starttabulate { "|Tl|Tl|" }
+ end
+ for k, v in sortedhash(keys) do
+ if type(v) ~= "table" then
+ context.NC()
+ if prefix then
+ context("%s.%s",prefix,k)
+ else
+ context(k)
+ end
+ context.NC()
+ local tk = t[k]
+ if not tk then
+ context("<unset>")
+ elseif v == "filename" then
+ context(file.basename(tk))
+ elseif v == "boolean" then
+ context(tostring(tk or false))
+ elseif v == "basepoints" then
+ context("%sbp",tk)
+ elseif v == "scaledpoints" then
+ context(number.points(tk))
+ elseif v == "table" then
+ context("<table>")
+ else -- if v == "integerscale" then
+ context(tostring(tk))
+ end
+ context.NC()
+ context.NR()
+ elseif nesting == false then
+ context("<table>")
+ else -- true or nil
+ typeset(t[k],v,nesting,k)
+ end
+ end
+ if not prefix then
+ context.stoptabulate()
+ end
+ end
+end
+
+tabletracers.typeset = typeset
+
+function tabletracers.properties(nesting)
+ local tfmdata = fonts.hashes.identifiers[font.current()]
+ typeset(tfmdata.properties,fonts.constructors.keys.properties,nesting)
+end
+
+function tabletracers.parameters(nesting)
+ local tfmdata = fonts.hashes.identifiers[font.current()]
+ typeset(tfmdata.parameters,fonts.constructors.keys.parameters,nesting)
+end
+
+function tabletracers.positionalfeatures()
+ local tfmdata = fonts.hashes.identifiers[font.current()]
+ local resources = tfmdata.resources
+ if resources then
+ local features = resources.features
+ if features then
+ local gpos = features.gpos
+ if gpos and next(gpos) then
+ context.starttabulate { "|Tl|Tl|Tlp|" }
+ for feature, scripts in sortedhash(gpos) do
+ for script, languages in sortedhash(scripts) do
+ context.NC()
+ context(feature)
+ context.NC()
+ context(script)
+ context.NC()
+ context(concat(sortedkeys(languages)," "))
+ context.NC()
+ context.NR()
+ end
+ end
+ context.stoptabulate()
+ else
+ context("no entries")
+ context.par()
+ end
+ end
+ end
+end
+
+local dynamics = true
+
+function tabletracers.substitutionfeatures()
+ local tfmdata = fonts.hashes.identifiers[font.current()]
+ local resources = tfmdata.resources
+ if resources then
+ local features = resources.features
+ if features then
+ local gsub = features.gsub
+ if gsub then
+ local makes_sense = { }
+ for feature, scripts in sortedhash(gsub) do
+ for script, languages in sortedhash(scripts) do
+ for language in sortedhash(languages) do
+ local tag = format("dummy-%s-%s-%s",feature,script,language)
+ local fnt = format("file:%s*%s",file.basename(tfmdata.properties.filename),tag)
+ context.definefontfeature (
+ { tag },
+ {
+ mode = "node",
+ script = script,
+ language = language,
+ [feature] = "yes"
+ }
+ )
+ if not dynamics then
+ context.definefont( { fnt }, { fnt } )
+ end
+ makes_sense[#makes_sense+1] = {
+ feature = feature,
+ tag = tag,
+ script = script,
+ language = language,
+ fontname = fnt,
+ }
+ end
+ end
+ end
+ if #makes_sense > 0 then
+ context.starttabulate { "|Tl|Tl|Tl|p|" }
+ for i=1,#makes_sense do
+ local data = makes_sense[i]
+ local script = data.script
+ local language = data.language
+ context.NC()
+ context(data.feature)
+ context.NC()
+ context(script)
+ context.NC()
+ context(language)
+ context.NC()
+ if not dynamics then
+ context.startfont { data.fontname }
+ else
+ context.addff(data.tag)
+ end
+ context.verbatim(samples.lowercase [script][language]) context.par()
+ context.verbatim(samples.uppercase [script][language]) context.par()
+ context.verbatim(samples.digits [script][language]) context.par()
+ context.verbatim(samples.punctuation[script][language])
+ context.verbatim(samples.symbols [script][language])
+ if not dynamics then
+ context.stopfont()
+ end
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+ else
+ context("no entries")
+ context.par()
+ end
+ end
+ end
+ end
+end
+
+function tabletracers.all(settings) -- not interfaced
+
+ if type(settings) == "string" then
+ settings = utilities.parsers.settings_to_hash(settings)
+ end
+
+ local title = settings and settings.title or ""
+
+ if title == "" then title = false end
+
+ if title then
+ context.starttitle { title = title }
+ end
+
+ context.startsubject { title = "Properties" }
+ tabletracers.properties()
+ context.stopsubject()
+
+ context.startsubject { title = "Parameters" }
+ tabletracers.parameters()
+ context.stopsubject()
+
+ context.startsubject { title = "Positional features" }
+ tabletracers.positionalfeatures()
+ context.stopsubject()
+
+ context.startsubject { title = "Substitution features" }
+ tabletracers.substitutionfeatures()
+ context.stopsubject()
+
+ if title then
+ context.stoptitle()
+ end
+
+end
diff --git a/tex/context/base/s-fonts-tables.mkiv b/tex/context/base/s-fonts-tables.mkiv
new file mode 100644
index 000000000..efe1500fb
--- /dev/null
+++ b/tex/context/base/s-fonts-tables.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-fonts-tables,
+%D version=2011.10.10,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Basic Font Data Tables,
+%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 a mtxrun --script --font <name> option
+
+\registerctxluafile{s-fonts-tables}{}
+
+\def\ModuleFontsTracersTablesAll[#1]%
+ {\ctxlua{moduledata.fonts.tracers.tables.all("#1")}}
+
+\continueifinputfile{s-fonts-tables.mkiv}
+
+\usemodule[art-01]
+
+\setupbodyfont
+ [cambria]
+
+\starttext
+ \ModuleFontsTracersTablesAll[title=Cambria]
+\stoptext
diff --git a/tex/context/base/s-mod-01.mkiv b/tex/context/base/s-mod-01.mkiv
index 2feeaad77..cca0e96e7 100644
--- a/tex/context/base/s-mod-01.mkiv
+++ b/tex/context/base/s-mod-01.mkiv
@@ -162,13 +162,6 @@
{\blank
\endgroup}
-\doifnotmode {nocode} { % \startmode ... \stopmode fails in the module documentation
-
- \unexpanded\def\startdefinition{\gobbleuntil\stopdefinition}
- \unexpanded\def\stopdefinition {}
-
-}
-
\definetyping [PL] [\c!option=PL]
\definetyping [JV] [\c!option=JV]
\definetyping [MP] [\c!option=MP]
@@ -185,35 +178,34 @@
\c!distance=\leftmargindistance,
\c!align=\v!flushright]
-\unexpanded\def\dodomodulemarginstuff[#1]#2%
- {\def\docommand##1%
- {\indent\hbox
- {\ifx#2\relax
- \index{##1}%
- \else
- \index{#2{##1}}%
- \fi
- #2{\doboundtext{##1}{\leftmarginwidth}{..}}}%
- \endgraf}%
- \processcommalist[#1]\docommand}
-
-\unexpanded\def\modulemarginstuff#1[#2]% to be renamed
- {\def\domodulemarginstuff##1##2%
- {\margintitle[#2]%
- {\switchtobodyfont[\v!small]%
- \dodomodulemarginstuff[##1]#1%
- \processcommalist[##2]\index}}%
- \dodoublegroupempty\domodulemarginstuff}
-
-\unexpanded\def\complexmacros {\modulemarginstuff\tex }
-\unexpanded\def\complexextras {\modulemarginstuff\relax}
-\unexpanded\def\complexelements{\modulemarginstuff\someelement}
+% This will be cleaned up.
+
+\unexpanded\def\domodulemarginstuff#1#2%
+ {\marginstuff
+ {\ifx#1\relax
+ \index{#2}%
+ \else
+ \index{#1{#2}}%
+ \fi
+ #1{\doboundtext{#2}{\leftmarginwidth}{..}}}}
+
+\unexpanded\def\modulemarginstuff#1#2% to be renamed
+ {\processcommalist[#2]{\domodulemarginstuff#1}}
+
+\definemargindata
+ [marginstuff]
+ [left]
+ [stack=yes,
+ hoffset=2em,
+ style=\ttxx]
+
+\unexpanded\def\macros {\modulemarginstuff\tex }
+\unexpanded\def\extras {\modulemarginstuff\relax}
+\unexpanded\def\elements{\modulemarginstuff\someelement}
\unexpanded\def\someelement#1{\type{<#1>}}
-\definecomplexorsimpleempty\macros
-\definecomplexorsimpleempty\extras
-\definecomplexorsimpleempty\elements
+% [index]{command}
% \macros{a,b}
% \macros{a,b}{b}
@@ -344,10 +336,17 @@
% modes
+\doifmode {nocode} { % \startmode ... \stopmode fails in the module documentation
+
+ \unexpanded\def\startdefinition{\gobbleuntil\stopdefinition}
+ \unexpanded\def\stopdefinition {}
+
+}
+
\doifmode {nocolor} {
- \setupcolors
- [\c!conversion=\v!always]
+ \setupcolors
+ [\c!conversion=\v!always]
}
diff --git a/tex/context/base/spac-ali.mkiv b/tex/context/base/spac-ali.mkiv
index ffc1f2434..b7418bd0b 100644
--- a/tex/context/base/spac-ali.mkiv
+++ b/tex/context/base/spac-ali.mkiv
@@ -17,7 +17,8 @@
\registerctxluafile{spac-ali}{1.001}
-\definesystemattribute[realign][public]
+\definesystemattribute[realign] [public] % might be combined with the next one
+\definesystemattribute[alignstate][public] % will make a single attributes for several states
\unexpanded\def\resetrealignsignal{\attribute\realignattribute\attributeunsetvalue}
\unexpanded\def\signalinnerrealign{\ctxcommand{setrealign(2)}}
@@ -318,6 +319,9 @@
\newconstant\raggedstatus % normal left center right
+% \unexpanded\def\setalignstateattribute % unexpanded !
+% {\attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi}
+
\def\leftraggedness {2\bodyfontsize}
\def\rightraggedness {2\bodyfontsize}
\def\middleraggedness {6\bodyfontsize}
@@ -368,6 +372,7 @@
\def\dosetraggedskips#1#2#3#4#5#6#7%
{\raggedstatus#1\relax
+ \attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi
\leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3
\rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
\spaceskip #4\relax
@@ -375,6 +380,10 @@
\parfillskip\zeropoint\!!plus#6\relax
\parindent #7\relax}
+\appendtoks
+ \attribute\alignstateattribute\attributeunsetvalue
+\to \everyforgetall
+
% \def\notragged%
% {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}
diff --git a/tex/context/base/spac-chr.lua b/tex/context/base/spac-chr.lua
index 9771ad2e8..add46c4d0 100644
--- a/tex/context/base/spac-chr.lua
+++ b/tex/context/base/spac-chr.lua
@@ -8,6 +8,9 @@ if not modules then modules = { } end modules ['spac-chr'] = {
local byte, lower = string.byte, string.lower
+-- to be redone: characters will become tagged spaces instead as then we keep track of
+-- spaceskip etc
+
trace_characters = false trackers.register("typesetters.characters", function(v) trace_characters = v end)
report_characters = logs.reporter("typesetting","characters")
@@ -15,6 +18,7 @@ report_characters = logs.reporter("typesetting","characters")
local nodes, node = nodes, node
local set_attribute = node.set_attribute
+local has_attribute = node.has_attribute
local insert_node_after = node.insert_after
local remove_node = nodes.remove -- ! nodes
@@ -25,7 +29,11 @@ local new_penalty = nodepool.penalty
local new_glue = nodepool.glue
local nodecodes = nodes.nodecodes
+local skipcodes = nodes.skipcodes
local glyph_code = nodecodes.glyph
+local glue_code = nodecodes.glue
+
+local space_skip_code = skipcodes["spaceskip"]
local chardata = characters.data
@@ -38,6 +46,7 @@ local fontparameters = fonts.hashes.parameters
local fontcharacters = fonts.hashes.characters
local a_character = attributes.private("characters")
+local a_alignstate = attributes.private("alignstate")
local c_zero = byte('0')
local c_period = byte('.')
@@ -64,6 +73,7 @@ end
local function inject_nobreak_space(unicode,head,current,space,spacestretch,spaceshrink)
local attr = current.attr
+ local next = current.next
head, current = insert_node_after(head,current,new_penalty(10000))
head, current = insert_node_after(head,current,new_glue(space,spacestretch,spaceshrink))
current.attr = attr
@@ -73,9 +83,18 @@ end
local methods = {
- [0x00A0] = function(head,current) -- nobreakspace
+ -- The next one uses an attribute assigned to the character but still we
+ -- don't have the 'local' value.
+
+ [0x00A0] = function(head,current)
local para = fontparameters[current.font]
- return inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink)
+ if has_attribute(current,a_alignstate) == 1 then -- flushright
+ head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0)
+ current.subtype = space_skip_code
+ else
+ head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink)
+ end
+ return head, current
end,
[0x2000] = function(head,current) -- enquad
@@ -145,7 +164,8 @@ function characters.handler(head)
local done = false
while current do
local next = current.next
- if current.id == glyph_code then
+ local id = current.id
+ if id == glyph_code then
local char = current.char
local method = methods[char]
if method then
diff --git a/tex/context/base/spac-chr.mkiv b/tex/context/base/spac-chr.mkiv
index 1e7943ea1..e2ed12522 100644
--- a/tex/context/base/spac-chr.mkiv
+++ b/tex/context/base/spac-chr.mkiv
@@ -19,8 +19,44 @@
\definesystemattribute[characters][public]
-\edef\nobreakspace {\utfchar{"00A0}}
+%D The nobreakspace is special as it needs to keep track of the space being
+%D flexible. Another option is to use space (glue) nodes and tag them as characters
+%D instead. No big deal but takes a moment of coding. So, as a prelude we
+%D tag the nobreakspace only. Interesting is that it also fits better in the
+%D tagging mechanism.
+%D
+%D But we need to do some checking as from then on we no longer can compare
+%D them in a string. So this needs thinking. Not that we can compare the
+%D nobreakspace now anyway.
+
+% \unexpanded\def\specialspacecharacter#1{\begingroup\attribute\charactersattribute#1\ \endgroup}
+%
+% \unexpanded\edef\nobreakspace {\specialspacecharacter{"00A0}} % 1 = left
+% \unexpanded\edef\ideographicspace {\specialspacecharacter{"2000}}
+% \unexpanded\edef\ideographichalffillspace{\specialspacecharacter{"2001}}
+% \unexpanded\edef\twoperemspace {\specialspacecharacter{"2002}}
+% \unexpanded\edef\threeperemspace {\specialspacecharacter{"2004}}
+% \unexpanded\edef\fourperemspace {\specialspacecharacter{"2005}}
+% \unexpanded\edef\sixperemspace {\specialspacecharacter{"2006}}
+% \unexpanded\edef\figurespace {\specialspacecharacter{"2007}}
+% \unexpanded\edef\punctuationspace {\specialspacecharacter{"2008}}
+% \unexpanded\edef\breakablethinspace {\specialspacecharacter{"2009}}
+% \unexpanded\edef\hairspace {\specialspacecharacter{"200A}}
+% \unexpanded\edef\zerowidthspace {\specialspacecharacter{"200B}}
+% \unexpanded\edef\zwnj {\specialspacecharacter{"200C}}
+% \unexpanded\edef\zwj {\specialspacecharacter{"200D}}
+% \unexpanded\edef\narrownobreakspace {\specialspacecharacter{"202F}}
+
+% This does not work as spaceskip is only inserted in the case of raggedleft
+% and we need to be able to figure out all of them. Which makes me wonder ...
+% can't we just always set spaceskip to some value?
+
+% Making them active is also not an option unless we do that in every
+% catcode vector.
+
+% \nobreakspace {\begingroup\setalignstateattribute\utfchar{"00A0}\endgroup} % 1 = left
+\edef\nobreakspace {\utfchar{"00A0}}
\edef\ideographicspace {\utfchar{"2000}}
\edef\ideographichalffillspace{\utfchar{"2001}}
\edef\twoperemspace {\utfchar{"2002}}
@@ -34,7 +70,6 @@
\edef\zerowidthspace {\utfchar{"200B}}
\edef\zwnj {\utfchar{"200C}}
\edef\zwj {\utfchar{"200D}}
-
\edef\narrownobreakspace {\utfchar{"202F}}
%edef\zerowidthnobreakspace {\utfchar{"FEFF}}
@@ -45,7 +80,7 @@
% unexpanded as otherwise we need to intercept / cleanup a lot
-\unexpanded\edef~{\utfchar{"00A0}}
+\unexpanded\def~{\nobreakspace}
% Goodies:
diff --git a/tex/context/base/spac-hor.mkiv b/tex/context/base/spac-hor.mkiv
index 88374e497..e3496e923 100644
--- a/tex/context/base/spac-hor.mkiv
+++ b/tex/context/base/spac-hor.mkiv
@@ -370,9 +370,9 @@
{\letcatcodecommand \ctxcatcodes \tildeasciicode \fixedspace}
\appendtoks
- \let~\space
- \let\ \space
-\to\simplifiedcommands
+ \let~\space
+ \let\ \space
+\to \simplifiedcommands
\unexpanded\def\removeunwantedspaces
{\ifhmode
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 0d023d90e..f2006bb38 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 31d2db8db..5fb64b64f 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua
index 213caf30d..f141af982 100644
--- a/tex/context/base/strc-ref.lua
+++ b/tex/context/base/strc-ref.lua
@@ -1683,7 +1683,7 @@ end
filters.section = { }
-function filters.section.number(data,what,prefixspec)
+local function filternumber(data,what,prefixspec)
if data then
local numberdata = data.numberdata
if numberdata then
@@ -1697,15 +1697,22 @@ function filters.section.number(data,what,prefixspec)
end
end
+filters.section.number = filternumber
filters.section.title = filters.generic.title
filters.section.page = filters.generic.page
filters.section.default = filters.section.number
-filters.note = { default = filters.generic.number }
-filters.formula = { default = filters.generic.number }
-filters.float = { default = filters.generic.number }
-filters.description = { default = filters.generic.number }
-filters.item = { default = filters.generic.number }
+-- filters.note = { default = filters.generic.number }
+-- filters.formula = { default = filters.generic.number }
+-- filters.float = { default = filters.generic.number }
+-- filters.description = { default = filters.generic.number }
+-- filters.item = { default = filters.generic.number }
+
+setmetatableindex(filters, function(t,k)
+ local v = { default = filternumber } -- not copy as it might be extended differently
+ t[k] = v
+ return v
+end)
-- function references.sectiontitle(n)
-- helpers.sectiontitle(lists.collected[tonumber(n) or 0])
diff --git a/tex/context/base/supp-vis.mkiv b/tex/context/base/supp-vis.mkiv
index 460020306..18f6262d2 100644
--- a/tex/context/base/supp-vis.mkiv
+++ b/tex/context/base/supp-vis.mkiv
@@ -232,8 +232,6 @@
\fi
-\ifx\contextversion\undefined \def~{\normalpenalty\!!tenthousand\ } \fi
-
%D \macros
%D {makeruledbox}
%D
diff --git a/tex/context/base/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv
index 513d8761b..011e25e48 100644
--- a/tex/context/base/syst-aux.mkiv
+++ b/tex/context/base/syst-aux.mkiv
@@ -39,6 +39,9 @@
%D Some of the macros here are used in the bibliography module. They
%D will be moved to a separate syst module some once the bib module
%D is made \MKIV.
+%D
+%D The original files contain previous implementations and notes about
+%D performance. This file will be stripped down in due time.
\unprotect
@@ -165,20 +168,20 @@
\let\@@expanded\empty % always long and global (less restores)
-\long\def\expanded#1%
- {\long\xdef\@@expanded{\noexpand#1}\@@expanded}
+\def\expanded#1%
+ {\xdef\@@expanded{\noexpand#1}\@@expanded}
-\long\def\startexpanded#1\stopexpanded % see x-fo for example
- {\long\xdef\@@expanded{#1}\@@expanded}
+\def\startexpanded#1\stopexpanded % see x-fo for example
+ {\xdef\@@expanded{#1}\@@expanded}
%D Recent \TEX's have a primitive \expanded
% not yet as we need to adapt ##'s in calls
%
-% \long\def\expanded#1%
+% \def\expanded#1%
% {\normalexpanded{\noexpand#1}}
%
-% \long\def\startexpanded#1\stopexpanded
+% \def\startexpanded#1\stopexpanded
% {\normalexpanded{#1}}
%D \macros
@@ -187,16 +190,16 @@
%D The next set of macros just do nothing, except that they
%D get rid of a number of arguments.
-\long\def\gobbleoneargument #1{}
-\long\def\gobbletwoarguments #1#2{}
-\long\def\gobblethreearguments#1#2#3{}
-\long\def\gobblefourarguments #1#2#3#4{}
-\long\def\gobblefivearguments #1#2#3#4#5{}
-\long\def\gobblesixarguments #1#2#3#4#5#6{}
-\long\def\gobblesevenarguments#1#2#3#4#5#6#7{}
-\long\def\gobbleeightarguments#1#2#3#4#5#6#7#8{}
-\long\def\gobbleninearguments #1#2#3#4#5#6#7#8#9{}
-\long\def\gobbletenarguments #1{\gobbleninearguments}
+\def\gobbleoneargument #1{}
+\def\gobbletwoarguments #1#2{}
+\def\gobblethreearguments#1#2#3{}
+\def\gobblefourarguments #1#2#3#4{}
+\def\gobblefivearguments #1#2#3#4#5{}
+\def\gobblesixarguments #1#2#3#4#5#6{}
+\def\gobblesevenarguments#1#2#3#4#5#6#7{}
+\def\gobbleeightarguments#1#2#3#4#5#6#7#8{}
+\def\gobbleninearguments #1#2#3#4#5#6#7#8#9{}
+\def\gobbletenarguments #1{\gobbleninearguments}
\def\gobbleoneoptional [#1]{}
\def\gobbletwooptionals [#1][#2]{}
@@ -229,7 +232,7 @@
%D {\localnext} because we don't want clashes with \type
%D {\next}.
-\long\def\doifnextcharelse#1#2#3% #1 should not be {} !
+\unexpanded\def\doifnextcharelse#1#2#3% #1 should not be {} !
{\let\charactertoken=#1% = needed here
\def\!!stringa{#2}%
\def\!!stringb{#3}%
@@ -259,7 +262,7 @@
\let\next_optional_character_token=[
-\long\def\doifnextoptionalelse#1#2%
+\unexpanded\def\doifnextoptionalelse#1#2%
{\def\next_optional_command_yes{#1}%
\def\next_optional_command_nop{#2}%
\let\if_next_blank_space_token\iffalse
@@ -281,7 +284,7 @@
\let\next_bgroup_character_token\bgroup
-\long\def\doifnextbgroupelse#1#2%
+\unexpanded\def\doifnextbgroupelse#1#2%
{\def\next_bgroup_command_yes{#1}%
\def\next_bgroup_command_nop{#2}%
\let\if_next_blank_space_token\iffalse
@@ -303,7 +306,7 @@
\let\next_parenthesis_character_token(
-\long\def\doifnextparenthesiselse#1#2%
+\unexpanded\def\doifnextparenthesiselse#1#2%
{\def\next_parenthesis_command_yes{#1}%
\def\next_parenthesis_command_nop{#2}%
\let\if_next_blank_space_token\iffalse
@@ -325,7 +328,7 @@
%D The next one is handy in predictable situations:
-\long\def\doiffastoptionalcheckelse#1#2%
+\unexpanded\def\doiffastoptionalcheckelse#1#2%
{\def\next_optional_command_yes{#1}%
\def\next_optional_command_nop{#2}%
\let\if_next_blank_space_token\iffalse % not needed
@@ -462,53 +465,27 @@
%
% use a real if like \ifcsname#1\endcsname\else instead
-\ifdefined\suppressifcsnameerror
-
- \suppressifcsnameerror\plusone
-
- \def\doifundefinedelse#1%
- {\ifcsname#1\endcsname
- \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments
- \fi}
-
- \def\doifdefinedelse#1%
- {\ifcsname#1\endcsname
- \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments
- \fi}
-
- \def\doifundefined#1%
- {\ifcsname#1\endcsname
- \expandafter\gobbleoneargument\else\expandafter\firstofoneargument
- \fi}
-
- \def\doifdefined#1%
- {\ifcsname#1\endcsname
- \expandafter\firstofoneargument\else\expandafter\gobbleoneargument
- \fi}
-
-\else
-
- \def\doifundefinedelse#1%
- {\ifcsname\detokenize\expandafter{\normalexpanded{#1}}\endcsname
- \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments
- \fi}
+\suppressifcsnameerror\plusone
- \def\doifdefinedelse#1%
- {\ifcsname\detokenize\expandafter{\normalexpanded{#1}}\endcsname
- \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments
- \fi}
+\def\doifundefinedelse#1%
+ {\ifcsname#1\endcsname
+ \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments
+ \fi}
- \def\doifundefined#1%
- {\ifcsname\detokenize\expandafter{\normalexpanded{#1}}\endcsname
- \expandafter\gobbleoneargument\else\expandafter\firstofoneargument
- \fi}
+\def\doifdefinedelse#1%
+ {\ifcsname#1\endcsname
+ \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments
+ \fi}
- \def\doifdefined#1%
- {\ifcsname\detokenize\expandafter{\normalexpanded{#1}}\endcsname
- \expandafter\firstofoneargument\else\expandafter\gobbleoneargument
- \fi}
+\def\doifundefined#1%
+ {\ifcsname#1\endcsname
+ \expandafter\gobbleoneargument\else\expandafter\firstofoneargument
+ \fi}
-\fi
+\def\doifdefined#1%
+ {\ifcsname#1\endcsname
+ \expandafter\firstofoneargument\else\expandafter\gobbleoneargument
+ \fi}
%D \macros
%D {letbeundefined}
@@ -537,7 +514,7 @@
%D was due to this grouping subtilities. We therefore decided
%D to use \type{\begingroup} instead of \type{\bgroup}.
-\def\doifalldefinedelse#1%
+\unexpanded\def\doifalldefinedelse#1%
{\begingroup
\donetrue
\processcommalist[#1]\do_if_all_defined_else
@@ -572,7 +549,7 @@
%D \doifelse {string1} {string2} {then ...}{else ...}
%D \stoptyping
-\long\def\doif#1#2%
+\def\doif#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -581,7 +558,7 @@
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnot#1#2%
+\def\doifnot#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -590,7 +567,7 @@
\expandafter\firstofoneargument
\fi}
-\long\def\doifelse#1#2%
+\def\doifelse#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -612,7 +589,7 @@
%D
%D This time, the string is not expanded.
-\long\def\doifemptyelse#1%
+\def\doifemptyelse#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstoftwoarguments
@@ -620,7 +597,7 @@
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifempty#1%
+\def\doifempty#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstofoneargument
@@ -628,7 +605,7 @@
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnotempty#1%
+\def\doifnotempty#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\gobbleoneargument
@@ -678,15 +655,15 @@
\def\right_optional_bracket{]}
-\long\def\do_quit_if_item_in_set_else#1],\relax{\firstoftwoarguments}
-\long\def\do_quit_if_item_in_set #1],\relax{\firstofoneargument}
-\long\def\do_quit_if_item_not_in_set #1],\relax{\gobbleoneargument}
+\def\do_quit_if_item_in_set_else#1],\relax{\firstoftwoarguments}
+\def\do_quit_if_item_in_set #1],\relax{\firstofoneargument}
+\def\do_quit_if_item_not_in_set #1],\relax{\gobbleoneargument}
-\long\def\re_do_if_in_set_else{\expandafter\do_check_if_item_in_set_else\!!stringb,],\relax}
-\long\def\re_do_if_in_set {\expandafter\do_check_if_item_in_set \!!stringb,],\relax}
-\long\def\re_do_if_not_in_set {\expandafter\do_check_if_item_not_in_set \!!stringb,],\relax}
+\def\re_do_if_in_set_else{\expandafter\do_check_if_item_in_set_else\!!stringb,],\relax}
+\def\re_do_if_in_set {\expandafter\do_check_if_item_in_set \!!stringb,],\relax}
+\def\re_do_if_not_in_set {\expandafter\do_check_if_item_not_in_set \!!stringb,],\relax}
-\long\def\doifinsetelse#1% make this two step too
+\def\doifinsetelse#1% make this two step too
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\thirdofthreearguments
@@ -694,7 +671,7 @@
\expandafter\do_if_in_set_else
\fi}
-\long\def\do_if_in_set_else#1%
+\def\do_if_in_set_else#1%
{\edef\!!stringb{#1}%
\ifx\!!stringb\empty
\expandafter\secondoftwoarguments
@@ -702,7 +679,7 @@
\expandafter\re_do_if_in_set_else
\fi}
-\long\def\doifinset#1%
+\def\doifinset#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\gobbletwoarguments
@@ -710,7 +687,7 @@
\expandafter\do_if_in_set
\fi}
-\long\def\do_if_in_set#1%
+\def\do_if_in_set#1%
{\edef\!!stringb{#1}%
\ifx\!!stringb\empty
\expandafter\gobbleoneargument
@@ -718,7 +695,7 @@
\expandafter\re_do_if_in_set
\fi}
-\long\def\doifnotinset#1%
+\def\doifnotinset#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\secondoftwoarguments
@@ -726,7 +703,7 @@
\expandafter\do_if_not_in_set
\fi}
-\long\def\do_if_not_in_set#1%
+\def\do_if_not_in_set#1%
{\edef\!!stringb{#1}%
\ifx\!!stringb\empty
\expandafter\firstofoneargument
@@ -828,7 +805,7 @@
% !9yes=\doifcommonelse{,a,}{,,,a,}{yes}{nop}
% !9yes=\doifcommonelse{,,a,}{,,,a,}{yes}{nop}
-\long\def\do_quit_if_common_else#1],\relax#2],\relax{\firstoftwoarguments}
+\def\do_quit_if_common_else#1],\relax#2],\relax{\firstoftwoarguments}
\def\do_check_if_common_else_one#1,#2%
{\edef\!!stringc{#1}%
@@ -953,7 +930,7 @@
\def\do_process_comma_list#1]#2%
{\global\advance\commalevel \plusone
- \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,%
+ \expandafter\def\csname\s!next\the\commalevel\endcsname##1,%
{#2{##1}\do_process_comma_item}%
\expandafter\do_do_process_comma_item\gobbleoneargument#1,]\relax
\global\advance\commalevel \minusone }
@@ -1027,7 +1004,7 @@
%D \def\command[#1]{... #1 ...}
%D \stoptyping
-\def\processcommalistwithparameters[#1]#2%
+\unexpanded\def\processcommalistwithparameters[#1]#2%
{\def\do_process_comma_list_with_parameters##1{#2[##1]}%
\processcommalist[#1]\do_process_comma_list_with_parameters}
@@ -1036,12 +1013,12 @@
%D
%D Two more:
-\long\unexpanded\def\startprocesscommalist[#1]#2\stopprocesscommalist
- {\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
+\unexpanded\def\startprocesscommalist[#1]#2\stopprocesscommalist
+ {\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
\processcommalist[#1]\currentcommalistcommand}
-\long\unexpanded\def\startprocesscommacommand[#1]#2\stopprocesscommacommand
- {\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
+\unexpanded\def\startprocesscommacommand[#1]#2\stopprocesscommacommand
+ {\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
\normalexpanded{\processcommalist[#1]}\currentcommalistcommand}
%D \macros
@@ -1189,7 +1166,7 @@
{#1%
\let\nexttoken#4%
\global\advance\commalevel \plusone
- \long\expandafter\def\csname\s!next\the\commalevel\endcsname##1,%
+ \expandafter\def\csname\s!next\the\commalevel\endcsname##1,%
{#3{##1}\do_process_comma_item}%
\do_do_process_comma_item#4#5,]\relax
\global\advance\commalevel\minusone
@@ -1271,7 +1248,7 @@
% replaces prev
\unexpanded\def\do_if_in_string_else#1#2% ##2 can be {abc}
- {\long\expandafter\def\expandafter\do_do_if_in_string_else
+ {\expandafter\def\expandafter\do_do_if_in_string_else
\expandafter##\expandafter1#1##2##3\war{\unless\if##2@}% expand #1 here
\expandafter\do_do_if_in_string_else\normalexpanded{#2#1}@@\war} % expand #2 here
@@ -1289,7 +1266,7 @@
%D expansion.
\unexpanded\def\do_if_in_csname_else#1#2%
- {\long\def\do_do_if_in_csname_else##1#1##2##3\war
+ {\def\do_do_if_in_csname_else##1#1##2##3\war
{\unless\if##2@}%
\expandafter\do_do_if_in_csname_else#2#1@@\war}
@@ -1317,7 +1294,7 @@
%D \type{\getal} and \type{\the\count...}. This macro is a
%D rather dirty one.
-\long\def\doifnumberelse#1% does not accept counters (fully expandable)
+\def\doifnumberelse#1% does not accept counters (fully expandable)
{\ifcase0\ifcase1#1\or\or\or\or\or\or\or\or\or\else1\fi\space
\expandafter\secondoftwoarguments
\else
@@ -1621,7 +1598,7 @@
\def\xdogetparameters#1]%
{\xprocesscommaitem#1,],\@relax@}
-\long\def\xprocesscommaitem#1,#2% #2 takes space before ,
+\def\xprocesscommaitem#1,#2% #2 takes space before ,
{\if,#1,% dirty trick for testing #1=empty
\expandafter\xprocesscommaitem
\else\if]#1%
@@ -1686,12 +1663,12 @@
\unexpanded\def\processassignmentcommand[#1]%
{\normalexpanded{\processassignmentlist[#1]}}
-\long\unexpanded\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist
- {\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
+\unexpanded\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist
+ {\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
\processassignmentlist[#1]\currentassignmentlistcommand}
-\long\unexpanded\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand
- {\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
+\unexpanded\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand
+ {\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
\normalexpanded{\processassignmentlist[#1]}\currentassignmentlistcommand}
%D \macros{currentvalue}
@@ -1791,7 +1768,7 @@
%D By using \type{\docopyvalue} we've prepared this command
%D for use in a multi||lingual environment.
-\def\copyparameters[#1]#2[#3]#4[#5]%
+\unexpanded\def\copyparameters[#1]#2[#3]#4[#5]%
{\doifnot{#1}{#3}
{\def\docopyparameter{\docopyvalue{#1}{#3}}% ##1
\processcommalist[#5]\docopyparameter}}
@@ -2045,169 +2022,6 @@
\def\noshowargumenterror
{\let\expectedarguments\noexpectedarguments}
-% \long\def\dogetargument#1#2#3#4%
-% {\let\charactertoken=#1%
-% \def\!!stringa{\noshowargumenterror#3\dodogetargument}%
-% \def\!!stringb{\doshowargumenterror#4\dodogetargument#1#2}%
-% \futurelet\nexttoken\inspect_next_character}
-
-% \def\getsingleempty#1#2#3%
-% {\def\dodogetargument%
-% {#3}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\getdoubleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\gettripleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument#1####1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2%
-% #1{####1}#2}%
-% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\getquadrupleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument#1####1#2%
-% {\def\dodogetargument#1########1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2%
-% #1{####1}#2%
-% #1{########1}#2}%
-% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}%
-% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\getquintupleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument#1####1#2%
-% {\def\dodogetargument#1########1#2%
-% {\def\dodogetargument#1################1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2%
-% #1{####1}#2%
-% #1{########1}#2%
-% #1{################1}#2}%
-% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}%
-% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}%
-% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\getsixtupleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument#1####1#2%
-% {\def\dodogetargument#1########1#2%
-% {\def\dodogetargument#1################1#2%
-% {\def\dodogetargument#1################################1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2%
-% #1{####1}#2%
-% #1{########1}#2%
-% #1{################1}#2%
-% #1{################################1}#2}%
-% \dogetargument#1#2\sixthargumenttrue\sixthargumentfalse}%
-% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}%
-% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}%
-% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\getseventupleempty#1#2#3%
-% {\def\dodogetargument#1##1#2%
-% {\def\dodogetargument#1####1#2%
-% {\def\dodogetargument#1########1#2%
-% {\def\dodogetargument#1################1#2%
-% {\def\dodogetargument#1################################1#2%
-% {\def\dodogetargument#1################################%
-% ################################1#2%
-% {\def\dodogetargument%
-% {#3#1{##1}#2%
-% #1{####1}#2%
-% #1{########1}#2%
-% #1{################1}#2%
-% #1{################################1}#2%
-% #1{################################%
-% ################################1}#2}%
-% \dogetargument#1#2\seventhargumenttrue\seventhargumentfalse}%
-% \dogetargument#1#2\sixthargumenttrue\sixthargumentfalse}%
-% \dogetargument#1#2\fifthargumenttrue\fifthargumentfalse}%
-% \dogetargument#1#2\fourthargumenttrue\fourthargumentfalse}%
-% \dogetargument#1#2\thirdargumenttrue\thirdargumentfalse}%
-% \dogetargument#1#2\secondargumenttrue\secondargumentfalse}%
-% \dogetargument#1#2\firstargumenttrue\firstargumentfalse}
-
-% \def\dosingleempty {\getsingleempty []}
-% \def\dodoubleempty {\getdoubleempty []}
-% \def\dotripleempty {\gettripleempty []}
-% \def\doquadrupleempty {\getquadrupleempty []}
-% \def\doquintupleempty {\getquintupleempty []}
-% \def\dosixtupleempty {\getsixtupleempty []}
-% \def\doseventupleempty{\getseventupleempty[]}
-
-%D Because some of these are called quite often, we will now
-%D replace the more general version by alternatives tuned for
-%D speed.
-
-% \def\dosingleempty#1% we can make dedicated doifnextoptional's
-% {\noshowargumenterror % \relax % prevents lookahead, brr
-% \doifnextoptionalelse
-% {\firstargumenttrue#1}%
-% {\dosinglefakeempty#1}}
-%
-% \def\dosinglefakeempty#1%
-% {\firstargumentfalse#1[]}
-%
-% \def\dodoubleempty#1%
-% {\noshowargumenterror % \relax % prevents lookahead, brr
-% \doifnextoptionalelse
-% {\dodoubletestempty#1}%
-% {\dodoublefakeempty#1}}
-%
-% \def\dodoublefakeempty#1%
-% {\firstargumentfalse\secondargumentfalse#1[][]}
-%
-% \long\def\dodoubletestempty#1[#2]%
-% {\firstargumenttrue
-% \doifnextoptionalelse
-% {\secondargumenttrue #1[{#2}]}%
-% {\secondargumentfalse#1[{#2}][]}}
-%
-% \def\dotripleempty#1%
-% {\noshowargumenterror % \relax % prevents lookahead, brr
-% \doifnextoptionalelse
-% {\dotripletestempty#1}%
-% {\dotriplefakeempty#1}}
-%
-% \def\dotriplefakeempty#1%
-% {\firstargumentfalse\secondargumentfalse\thirdargumentfalse#1[][][]}
-%
-% \long\def\dotripletestempty#1[#2]%
-% {\firstargumenttrue
-% \doifnextoptionalelse
-% {\dotripletestemptyx #1[{#2}]}%
-% {\secondargumentfalse
-% \thirdargumentfalse #1[{#2}][][]}}
-%
-% \long\def\dotripletestemptyx#1[#2][#3]%
-% {\secondargumenttrue
-% \doifnextoptionalelse
-% {\thirdargumenttrue #1[{#2}][{#3}]}%
-% {\thirdargumentfalse#1[{#2}][{#3}][]}}
-
-%D We can obey following spaces with a bit more code.
-
-% 0.172 0.187 new (per 10000)
-% 0.156 0.140 old (per 10000)
-%
% \def\test[#1]{(#1)}
%
% \dosingleempty\test[] xxx\par
@@ -2228,7 +2042,7 @@
%D Single:
-\def\dosingleempty#1%
+\unexpanded\def\dosingleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\firstargumenttrue#1}%
@@ -2240,13 +2054,13 @@
%D Double
-\def\dodoubleempty#1%
+\unexpanded\def\dodoubleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\dodoubleemptyYESone#1}%
{\dodoubleemptyNOPone#1}}
-\long\def\dodoubleemptyYESone#1[#2]%
+\def\dodoubleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\secondargumenttrue#1[{#2}]}%
@@ -2270,19 +2084,19 @@
% Three
-\def\dotripleempty#1%
+\unexpanded\def\dotripleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\dotripleemptyYESone#1}%
{\dotripleemptyNOPone#1}}
-\long\def\dotripleemptyYESone#1[#2]%
+\def\dotripleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\dotripleemptyYEStwo#1{#2}}%
{\dotripleemptyNOPtwo#1{#2}}}
-\long\def\dotripleemptyYEStwo#1#2[#3]%
+\def\dotripleemptyYEStwo#1#2[#3]%
{\secondargumenttrue
\doifnextoptionalelse
{\thirdargumenttrue#1[{#2}][{#3}]}%
@@ -2318,25 +2132,25 @@
%D Four:
-\def\doquadrupleempty#1%
+\unexpanded\def\doquadrupleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\doquadrupleemptyYESone#1}%
{\doquadrupleemptyNOPone#1}}
-\long\def\doquadrupleemptyYESone#1[#2]%
+\def\doquadrupleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\doquadrupleemptyYEStwo#1{#2}}%
{\doquadrupleemptyNOPtwo#1{#2}}}
-\long\def\doquadrupleemptyYEStwo#1#2[#3]%
+\def\doquadrupleemptyYEStwo#1#2[#3]%
{\secondargumenttrue
\doifnextoptionalelse
{\doquadrupleemptyYESthree#1{#2}{#3}}%
{\doquadrupleemptyNOPthree#1{#2}{#3}}}
-\long\def\doquadrupleemptyYESthree#1#2#3[#4]%
+\def\doquadrupleemptyYESthree#1#2#3[#4]%
{\thirdargumenttrue
\doifnextoptionalelse
{\fourthargumenttrue#1[{#2}][{#3}][{#4}]}%
@@ -2385,31 +2199,31 @@
%D Five:
-\def\doquintupleempty#1%
+\unexpanded\def\doquintupleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\doquintupleemptyYESone#1}%
{\doquintupleemptyNOPone#1}}
-\long\def\doquintupleemptyYESone#1[#2]%
+\def\doquintupleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\doquintupleemptyYEStwo#1{#2}}%
{\doquintupleemptyNOPtwo#1{#2}}}
-\long\def\doquintupleemptyYEStwo#1#2[#3]%
+\def\doquintupleemptyYEStwo#1#2[#3]%
{\secondargumenttrue
\doifnextoptionalelse
{\doquintupleemptyYESthree#1{#2}{#3}}%
{\doquintupleemptyNOPthree#1{#2}{#3}}}
-\long\def\doquintupleemptyYESthree#1#2#3[#4]%
+\def\doquintupleemptyYESthree#1#2#3[#4]%
{\thirdargumenttrue
\doifnextoptionalelse
{\doquintupleemptyYESfour#1{#2}{#3}{#4}}%
{\doquintupleemptyNOPfour#1{#2}{#3}{#4}}}
-\long\def\doquintupleemptyYESfour#1#2#3#4[#5]%
+\def\doquintupleemptyYESfour#1#2#3#4[#5]%
{\fourthargumenttrue
\doifnextoptionalelse
{\fifthargumenttrue#1[{#2}][{#3}][{#4}][{#5}]}%
@@ -2472,37 +2286,37 @@
%D Six
-\def\dosixtupleempty#1%
+\unexpanded\def\dosixtupleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\dosixtupleemptyYESone#1}
{\dosixtupleemptyNOPone#1}}
-\long\def\dosixtupleemptyYESone#1[#2]%
+\def\dosixtupleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\dosixtupleemptyYEStwo#1{#2}}%
{\dosixtupleemptyNOPtwo#1{#2}}}
-\long\def\dosixtupleemptyYEStwo#1#2[#3]%
+\def\dosixtupleemptyYEStwo#1#2[#3]%
{\secondargumenttrue
\doifnextoptionalelse
{\dosixtupleemptyYESthree#1{#2}{#3}}%
{\dosixtupleemptyNOPthree#1{#2}{#3}}}
-\long\def\dosixtupleemptyYESthree#1#2#3[#4]%
+\def\dosixtupleemptyYESthree#1#2#3[#4]%
{\thirdargumenttrue
\doifnextoptionalelse
{\dosixtupleemptyYESfour#1{#2}{#3}{#4}}%
{\dosixtupleemptyNOPfour#1{#2}{#3}{#4}}}
-\long\def\dosixtupleemptyYESfour#1#2#3#4[#5]%
+\def\dosixtupleemptyYESfour#1#2#3#4[#5]%
{\fourthargumenttrue
\doifnextoptionalelse
{\dosixtupleemptyYESfive#1{#2}{#3}{#4}{#5}}%
{\dosixtupleemptyNOPfive#1{#2}{#3}{#4}{#5}}}
-\long\def\dosixtupleemptyYESfive#1#2#3#4#5[#6]%
+\def\dosixtupleemptyYESfive#1#2#3#4#5[#6]%
{\fifthargumenttrue
\doifnextoptionalelse
{\sixthargumenttrue#1[{#2}][{#3}][{#4}][{#5}][{#6}]}%
@@ -2580,43 +2394,43 @@
%D Seven:
-\def\doseventupleempty#1%
+\unexpanded\def\doseventupleempty#1%
{\noshowargumenterror
\doifnextoptionalelse
{\doseventupleemptyYESone#1}%
{\doseventupleemptyNOPone#1}}
-\long\def\doseventupleemptyYESone#1[#2]%
+\def\doseventupleemptyYESone#1[#2]%
{\firstargumenttrue
\doifnextoptionalelse
{\doseventupleemptyYEStwo#1{#2}}%
{\doseventupleemptyNOPtwo#1{#2}}}
-\long\def\doseventupleemptyYEStwo#1#2[#3]%
+\def\doseventupleemptyYEStwo#1#2[#3]%
{\secondargumenttrue
\doifnextoptionalelse
{\doseventupleemptyYESthree#1{#2}{#3}}%
{\doseventupleemptyNOPthree#1{#2}{#3}}}
-\long\def\doseventupleemptyYESthree#1#2#3[#4]%
+\def\doseventupleemptyYESthree#1#2#3[#4]%
{\thirdargumenttrue
\doifnextoptionalelse
{\doseventupleemptyYESfour#1{#2}{#3}{#4}}%
{\doseventupleemptyNOPfour#1{#2}{#3}{#4}}}
-\long\def\doseventupleemptyYESfour#1#2#3#4[#5]%
+\def\doseventupleemptyYESfour#1#2#3#4[#5]%
{\fourthargumenttrue
\doifnextoptionalelse
{\doseventupleemptyYESfive#1{#2}{#3}{#4}{#5}}%
{\doseventupleemptyNOPfive#1{#2}{#3}{#4}{#5}}}
-\long\def\doseventupleemptyYESfive#1#2#3#4#5[#6]%
+\def\doseventupleemptyYESfive#1#2#3#4#5[#6]%
{\fifthargumenttrue
\doifnextoptionalelse
{\doseventupleemptyYESsix#1{#2}{#3}{#4}{#5}{#6}}%
{\doseventupleemptyNOPsix#1{#2}{#3}{#4}{#5}{#6}}}
-\long\def\doseventupleemptyYESsix#1#2#3#4#5#6[#7]%
+\def\doseventupleemptyYESsix#1#2#3#4#5#6[#7]%
{\sixthargumenttrue
\doifnextoptionalelse
{\seventhargumenttrue#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}]}%
@@ -2764,13 +2578,13 @@
%D but changed into more versatile (more object oriented) ones
%D using the \type{\get..argument} commands.
-\def\complexorsimple#1%
+\unexpanded\def\complexorsimple#1%
{% \relax % prevents lookahead, brrr
\doifnextoptionalelse
{\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname}
{\firstargumentfalse\csname\s!simple \strippedcsname#1\endcsname}}
-\def\complexorsimpleempty#1%
+\unexpanded\def\complexorsimpleempty#1%
{% \relax % prevents lookahead, brrr
\doifnextoptionalelse
{\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname}
@@ -2961,32 +2775,32 @@
%D used to select arguments. Their names explain their
%D functionality.
-\long\def\firstofoneargument #1{#1}
+\def\firstofoneargument #1{#1}
-\long\def\firstoftwoarguments #1#2{#1}
-\long\def\secondoftwoarguments #1#2{#2}
+\def\firstoftwoarguments #1#2{#1}
+\def\secondoftwoarguments #1#2{#2}
-\long\def\firstofthreearguments #1#2#3{#1}
-\long\def\secondofthreearguments #1#2#3{#2}
-\long\def\thirdofthreearguments #1#2#3{#3}
+\def\firstofthreearguments #1#2#3{#1}
+\def\secondofthreearguments #1#2#3{#2}
+\def\thirdofthreearguments #1#2#3{#3}
-\long\def\firstoffourarguments #1#2#3#4{#1}
-\long\def\secondoffourarguments #1#2#3#4{#2}
-\long\def\thirdoffourarguments #1#2#3#4{#3}
-\long\def\fourthoffourarguments #1#2#3#4{#4}
+\def\firstoffourarguments #1#2#3#4{#1}
+\def\secondoffourarguments #1#2#3#4{#2}
+\def\thirdoffourarguments #1#2#3#4{#3}
+\def\fourthoffourarguments #1#2#3#4{#4}
-\long\def\firstoffivearguments #1#2#3#4#5{#1}
-\long\def\secondoffivearguments #1#2#3#4#5{#2}
-\long\def\thirdoffivearguments #1#2#3#4#5{#3}
-\long\def\fourthoffivearguments #1#2#3#4#5{#4}
-\long\def\fifthoffivearguments #1#2#3#4#5{#5}
+\def\firstoffivearguments #1#2#3#4#5{#1}
+\def\secondoffivearguments #1#2#3#4#5{#2}
+\def\thirdoffivearguments #1#2#3#4#5{#3}
+\def\fourthoffivearguments #1#2#3#4#5{#4}
+\def\fifthoffivearguments #1#2#3#4#5{#5}
-\long\def\firstofsixarguments #1#2#3#4#5#6{#1}
-\long\def\secondofsixarguments#1#2#3#4#5#6{#2}
-\long\def\thirdofsixarguments #1#2#3#4#5#6{#3}
-\long\def\fourthofsixarguments#1#2#3#4#5#6{#4}
-\long\def\fifthofsixarguments #1#2#3#4#5#6{#5}
-\long\def\sixthofsixarguments #1#2#3#4#5#6{#6}
+\def\firstofsixarguments #1#2#3#4#5#6{#1}
+\def\secondofsixarguments#1#2#3#4#5#6{#2}
+\def\thirdofsixarguments #1#2#3#4#5#6{#3}
+\def\fourthofsixarguments#1#2#3#4#5#6{#4}
+\def\fifthofsixarguments #1#2#3#4#5#6{#5}
+\def\sixthofsixarguments #1#2#3#4#5#6{#6}
%D \macros
%D {globalletempty,letempty,
@@ -3558,9 +3372,9 @@
\def\@@irecurse{@@ir@@} % ecurse} % stepper
\def\@@arecurse{@@ar@@} % ecurse} % action
-\long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
{\global\advance\outerrecurse \plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname{#4}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname{#4}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\ifnum#3>0\relax
\ifnum#2<#1\relax
@@ -3580,7 +3394,7 @@
\fi
\fi\normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
-\long\def\dodostepwiserecurse#1#2#3% from to step
+\def\dodostepwiserecurse#1#2#3% from to step
{\ifnum#1>#2\relax
\expandafter\nodostepwiserecurse
\else
@@ -3594,7 +3408,7 @@
\unexpanded\def\redostepwiserecurse
{\expandrecursecontent\dodostepwiserecurse}
-\long\unexpanded\def\dodostepwisereverse#1#2#3% from to step
+\unexpanded\def\dodostepwisereverse#1#2#3% from to step
{\ifnum#1<#2\relax
\expandafter\nodostepwiserecurse
\else
@@ -3640,7 +3454,7 @@
%D Because the simple case is used often, we implement it
%D more efficiently:
-\long\unexpanded\def\dorecurse#1%
+\unexpanded\def\dorecurse#1%
{\ifcase#1\relax
\expandafter\gobbletwoarguments
\or
@@ -3649,13 +3463,13 @@
\expandafter\xdorecurse
\fi{#1}}
-\long\unexpanded\def\xdorecurse#1#2%
+\unexpanded\def\xdorecurse#1#2%
{\global\advance\outerrecurse \plusone
- \long\expandafter\gdef\csname\@@arecurse\recursedepth\endcsname{#2}%
+ \expandafter\gdef\csname\@@arecurse\recursedepth\endcsname{#2}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\expandafter\dodorecurse\expandafter1\expandafter{\number#1}}
-\long\unexpanded\def\ydorecurse#1#2%
+\unexpanded\def\ydorecurse#1#2%
{\global\advance\outerrecurse \plusone
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\let\recurselevel\!!plusone
@@ -3663,7 +3477,7 @@
\expandafter\let\expandafter\recurselevel\csname\@@irecurse\recursedepth\endcsname
\global\advance\outerrecurse \minusone}
-\long\unexpanded\def\dodorecurse#1#2% from to
+\unexpanded\def\dodorecurse#1#2% from to
{\ifnum#1>#2\relax
\expandafter\nodorecurse
\else
@@ -3671,7 +3485,7 @@
\doubleexpandafter\redorecurse
\fi\expandafter{\the\numexpr\recurselevel+\plusone\relax}{#2}}
-\long\unexpanded\def\dodorecurse#1#2% from to
+\unexpanded\def\dodorecurse#1#2% from to
{\ifnum#1>#2\relax
\expandafter\nodorecurse
\else
@@ -3707,14 +3521,14 @@
\let\endofloop\donothing
-\unexpanded\long\def\doloop#1%
+\unexpanded\def\doloop#1%
{\global\advance\outerrecurse \plusone
- \long\expandafter\gdef\csname\@@arecurse\recursedepth\endcsname{#1}%
+ \expandafter\gdef\csname\@@arecurse\recursedepth\endcsname{#1}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\let\endofloop\dodoloop
\dodoloop1} % no \plusone else \recurselevel wrong
-\unexpanded\long\def\dodoloop#1%
+\unexpanded\def\dodoloop#1%
{\def\recurselevel{#1}%
\expandafter\redoloop\expandafter{\the\numexpr\recurselevel+\plusone\relax}}
@@ -3729,7 +3543,7 @@
\unexpanded\def\exitloop % \exitloop quits at end
{\let\endofloop\nodoloop}
-\long\unexpanded\def\exitloopnow#1\endofloop % \exitloopnow quits directly
+\unexpanded\def\exitloopnow#1\endofloop % \exitloopnow quits directly
{\nodoloop}
%D The loop is executed at least once, so beware of situations
@@ -3774,24 +3588,24 @@
{\csname\@@arecurse\recursedepth\expandafter\expandafter\expandafter\endcsname
\expandafter\expandafter\expandafter{\expandafter\recurselevel\expandafter}\expandafter{\recursedepth}}
-\long\unexpanded\def\xdorecurse#1#2%
+\unexpanded\def\xdorecurse#1#2%
{\global\advance\outerrecurse \plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\expandafter\dodorecurse\expandafter1\expandafter{\number#1}}
-\long\unexpanded\def\ydorecurse#1#2%
+\unexpanded\def\ydorecurse#1#2%
{\global\advance\outerrecurse \plusone
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\let\recurselevel\!!plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
\expandrecursecontent
\expandafter\let\expandafter\recurselevel\csname\@@irecurse\recursedepth\endcsname
\global\advance\outerrecurse \minusone}
-\long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
{\global\advance\outerrecurse \plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\ifnum#3>0\relax
\ifnum#2<#1\relax
@@ -3811,45 +3625,18 @@
\fi
\fi\normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
-\long\unexpanded\def\doloop#1%
+\unexpanded\def\doloop#1%
{\global\advance\outerrecurse \plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#1}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#1}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\let\endofloop\dodoloop
\dodoloop1} % no \plusone else \recurselevel wrong
-% EXPERIMENT
-
% faster
-% \long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
-% {\global\advance\outerrecurse \plusone
-% \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
-% \global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
-% \ifnum#3>\zerocount
-% \ifnum#2<#1\relax
-% \let\nextrecurse\exitstepwiserecurse
-% \else
-% \let\nextrecurse\dodostepwiserecurse
-% \fi
-% \else
-% \ifnum#3<\zerocount
-% \ifnum#1<#2\relax
-% \let\nextrecurse\exitstepwiserecurse
-% \else
-% \let\nextrecurse\dodostepwisereverse
-% \fi
-% \else
-% \let\nextrecurse\exitstepwiserecurse
-% \fi
-% \fi
-% \normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
-
-% slightly faster
-
-\long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
{\global\advance\outerrecurse \plusone
- \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
+ \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
\global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\csname @swr%
\ifnum#3>\zerocount
@@ -3865,9 +3652,9 @@
% quite okay too, but untested
%
-% \long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+% \def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
% {\global\advance\outerrecurse \plusone
-% \long\global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
+% \global\expandafter\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
% \global\expandafter\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
% \normalexpanded
% {\ifnum#3>\zerocount
@@ -3950,30 +3737,6 @@
\expandafter\let\expandafter\recursestring\csname\@@irecurse\recursedepth\endcsname
\global\advance\outerrecurse\minusone}
-% D This alternative looks a bit different and uses a
-% D pseudo counter. When this macro is nested, we have to use
-% D different counters. This time we use keywords.
-% D
-% D \starttyping
-% D \def\alfa{2} \def\beta{100} \def\gamma{3}
-% D
-% D \for \n=55 \to 100 \step 1 \do {... \n ...}
-% D \for \n=\alfa \to \beta \step \gamma \do {... \n ...}
-% D \for \n=\n \to 120 \step 1 \do {... \n ...}
-% D \for \n=120 \to 100 \step -3 \do {... \n ...}
-% D \for \n=55 \to 100 \step 2 \do {... \n ...}
-% D \stoptyping
-% D
-% D Only in the third example we need to predefine \type{\n}.
-% D The use of \type{\od} as a dilimiter would have made nested
-% D use more problematic.
-%
-% obsolete:
-%
-% \def\for#1=#2\to#3\step#4\do#5%
-% {\dostepwiserecurse{#2}{#3}{#4}
-% {\let#1\recurselevel#5\let#1\recurselevel}}
-
%D \macros
%D {newevery,everyline,EveryLine,EveryPar}
%D
@@ -4118,9 +3881,9 @@
%D \doifassignmentelse {...} {then ...} {else ...}
%D \stoptyping
-\long\def\docheckifassignmentelse#1=#2#3\@end@{\if#2@}%
+\def\docheckifassignmentelse#1=#2#3\@end@{\if#2@}%
-\long\def\doifassignmentelse#1%
+\def\doifassignmentelse#1%
{\expandafter\docheckifassignmentelse\detokenize{#1}=@@\@end@
\expandafter\secondoftwoarguments
\else
@@ -4147,16 +3910,16 @@
%D something I found out when primitives like \type
%D {\jobname} were fed (or something undefined).
-\long\def\convertargument#1\to#2{\dodoglobal\edef#2{\detokenize{#1}}}
-\long\def\convertcommand #1\to#2{\dodoglobal\edef#2{\expandafter\detokenize\expandafter{#1}}} % hm, only second is also ok
+\def\convertargument#1\to#2{\dodoglobal\edef#2{\detokenize{#1}}}
+\def\convertcommand #1\to#2{\dodoglobal\edef#2{\expandafter\detokenize\expandafter{#1}}} % hm, only second is also ok
-\long\def\defconvertedargument #1#2{\edef#1{\detokenize{#2}}}
-\long\def\defconvertedcommand #1#2{\edef#1{\detokenize\expandafter{#2}}}
-\long\def\edefconvertedargument#1#2{\edef#1{#2}%
+\def\defconvertedargument #1#2{\edef#1{\detokenize{#2}}}
+\def\defconvertedcommand #1#2{\edef#1{\detokenize\expandafter{#2}}}
+\def\edefconvertedargument#1#2{\edef#1{#2}%
\edef#1{\detokenize\expandafter{#1}}}
-\long\def\gdefconvertedargument#1#2{\xdef#1{\detokenize{#2}}}
-\long\def\gdefconvertedcommand #1#2{\xdef#1{\detokenize\expandafter{#2}}}
-\long\def\xdefconvertedargument#1#2{\xdef#1{#2}%
+\def\gdefconvertedargument#1#2{\xdef#1{\detokenize{#2}}}
+\def\gdefconvertedcommand #1#2{\xdef#1{\detokenize\expandafter{#2}}}
+\def\xdefconvertedargument#1#2{\xdef#1{#2}%
\xdef#1{\detokenize\expandafter{#1}}}
%D When you try to convert a primitive command, you'll find
@@ -4263,7 +4026,7 @@
%D In examples~2 and~3 both arguments equal, in~1 and~4
%D they differ.
-\long\def\ConvertToConstant#1#2#3%
+\def\ConvertToConstant#1#2#3%
{\edef\!!stringa{\expandafter\detokenize\expandafter{#2}}%
\edef\!!stringb{\expandafter\detokenize\expandafter{#3}}%
#1{\!!stringa}{\!!stringb}}
@@ -4363,7 +4126,7 @@
%D results in: \type{\message{Hello world!}}.
\def\dograbuntil#1#2%
- {\long\def\next##1#1{#2{##1}}\next}
+ {\def\next##1#1{#2{##1}}\next}
\def\grabuntil#1%
{\expandafter\dograbuntil\expandafter{\csname#1\endcsname}}
@@ -4390,11 +4153,11 @@
%D is related to these commands. This one simply throws away
%D everything preceding \type{\command}.
-\long\def\processbetween#1#2%
+\def\processbetween#1#2%
{\setvalue{\s!start#1}{\grabuntil{\s!stop#1}{#2}}}
\def\gobbleuntil#1%
- {\long\def\next##1#1{}\next}
+ {\def\next##1#1{}\next}
\def\gobbleuntilrelax#1\relax
{}
@@ -4406,7 +4169,7 @@
%D \stoptyping
\def\processuntil#1%
- {\long\def\next##1#1{##1}\next}
+ {\def\next##1#1{##1}\next}
%D \macros
%D {groupedcommand}
@@ -4476,23 +4239,23 @@
%D extra \type{\bgroup}||\type{\egroup} is needed to keep
%D \type{\AfterGroup} both into sight and local.
-\long\def\HandleGroup#1#2%
+\def\HandleGroup#1#2%
{\bgroup
- \long\def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}%
- \long\def\AfterGroup {#2\egroup\egroup}%
+ \def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}%
+ \def\AfterGroup {#2\egroup\egroup}%
\afterassignment\BeforeGroup
\let\next=}
-\long\def\HandleSimpleGroup#1#2% no inner group (so no kerning interference)
+\def\HandleSimpleGroup#1#2% no inner group (so no kerning interference)
{\bgroup
- %long\def\BeforeGroup{\bgroup#1\aftergroup\AfterGroup}% interferes
- \long\def\BeforeGroup{\bgroup\aftergroup\AfterGroup#1}%
- \long\def\AfterGroup {#2\egroup}%
+ %def\BeforeGroup{\bgroup#1\aftergroup\AfterGroup}% interferes
+ \def\BeforeGroup{\bgroup\aftergroup\AfterGroup#1}%
+ \def\AfterGroup {#2\egroup}%
\afterassignment\BeforeGroup
\let\next=}
-% \long\def\HandleNoGroup#1#2%
-% {\long\def\AfterGroup{#2\egroup}%
+% \def\HandleNoGroup#1#2%
+% {\def\AfterGroup{#2\egroup}%
% \bgroup\aftergroup\AfterGroup#1}
\def\HandleNoGroup % retrofit into mkii
@@ -4502,12 +4265,12 @@
\expandafter\HandleNoGroupB
\fi}
-\long\def\HandleNoGroupA#1#2%
- {\long\def\AfterGroup{#2\endgroup}%
+\def\HandleNoGroupA#1#2%
+ {\def\AfterGroup{#2\endgroup}%
\begingroup\aftergroup\AfterGroup#1}
-\long\def\HandleNoGroupB#1#2%
- {\long\def\AfterGroup{#2\egroup}%
+\def\HandleNoGroupB#1#2%
+ {\def\AfterGroup{#2\egroup}%
\bgroup\aftergroup\AfterGroup#1}
%D I considered it a nuisance that
@@ -4522,10 +4285,10 @@
%D line||ending token is treated as a blank space. So the final
%D implementation became:
-\long\unexpanded\def\groupedcommand#1#2%
+\unexpanded\def\groupedcommand#1#2%
{\doifnextbgroupelse{\HandleGroup{#1}{#2}}{\HandleNoGroup{#1}{#2}}}
-\long\unexpanded\def\simplegroupedcommand#1#2%
+\unexpanded\def\simplegroupedcommand#1#2%
{\doifnextbgroupelse{\HandleSimpleGroup{#1}{#2}}{\HandleNoGroup{#1}{#2}}}
%D Users should be aware of the fact that grouping can
@@ -4746,10 +4509,10 @@
\def\dorepeatwithcommand[#1]%
{\dodorepeatwithcommand#1*\empty*\relax}
-\long\def\dodorepeatwithcommand#1*#2#3*#4\relax#5%
+\def\dodorepeatwithcommand#1*#2#3*#4\relax#5%
{\ifx#2\empty\redorepeatwithcommand[#1]#5\else\dododorepeatwithcommand{#1}{#2}{#3}#5\fi}
-\long\def\dododorepeatwithcommand#1#2#3#4%
+\def\dododorepeatwithcommand#1#2#3#4%
{\ifx#2\empty % redundant but gives cleaner extensions
#4{#1}%
\else\ifnum#1<\zerocount
@@ -4773,7 +4536,7 @@
%D \gdef\redorepeatwithcommand[#1]%
%D {\redodorepeatwithcommand#1*\empty*\relax}
%D
-%D \long\gdef\redodorepeatwithcommand#1*#2#3*#4\relax#5%
+%D \gdef\redodorepeatwithcommand#1*#2#3*#4\relax#5%
%D {\dododorepeatwithcommand{#1}{#2}{#3}#5}
%D
%D \egroup
@@ -4796,7 +4559,7 @@
%D are macros. This save some unneeded expansion.
%D
%D \starttyping
-%D \long\def\doifstringinstringelse#1#2%
+%D \def\doifstringinstringelse#1#2%
%D {\do_if_in_string_else#1#2%
%D \expandafter\firstoftwoarguments
%D \else
@@ -4813,8 +4576,8 @@
\expandafter\firstoftwoarguments
\fi}
-\long\def\doifstringinstringelse#1#2%
- {\long\expandafter\def\expandafter\p!doifstringinstringelse\expandafter##\expandafter1#1##2##3\war
+\def\doifstringinstringelse#1#2%
+ {\expandafter\def\expandafter\p!doifstringinstringelse\expandafter##\expandafter1#1##2##3\war
{\pp!doifstringinstringelse##2}%
\expandafter\expandafter\expandafter\p!doifstringinstringelse\expandafter#2#1@@\war}
@@ -4849,20 +4612,20 @@
\def\dodoprependtoks
{\dodoglobal\@@toks\doubleexpandafter{\expandafter\the\expandafter\@@scratchtoks\the\@@toks}}
-\long\def\doappendtoks#1\to#2%
+\def\doappendtoks#1\to#2%
{\def\@@toks{#2}%
\@@scratchtoks\expandafter{\gobbleoneargument#1}\dodoappendtoks}
-\long\def\doprependtoks#1\to#2%
+\def\doprependtoks#1\to#2%
{\def\@@toks{#2}%
\@@scratchtoks\expandafter{\gobbleoneargument#1}\dodoprependtoks}
-\long\def\doappendtoksonce#1\to#2%
+\def\doappendtoksonce#1\to#2%
{\def\@@toks{#2}%
\@@scratchtoks\expandafter{\gobbleoneargument#1}%
\doifintokselse\@@scratchtoks\@@toks\donothing\dodoappendtoks}
-\long\def\doprependtoksonce#1\to#2%
+\def\doprependtoksonce#1\to#2%
{\def\@@toks{#2}%
\@@scratchtoks\expandafter{\gobbleoneargument#1}%
\doifintokselse\@@scratchtoks\@@toks\donothing\dodoprependtoks}
@@ -5411,40 +5174,7 @@
%D tokens per call. Anyone familiar with the not||values
%D ones, can derive their meaning from the definitions.
- \def\doifvalue#1{\doif {\csname#1\endcsname}}
- \def\doifnotvalue#1{\doifnot {\csname#1\endcsname}}
- \def\doifelsevalue#1{\doifelse{\csname#1\endcsname}}
-
- \def\doifnothing#1{\doif {#1}{}}
- \def\doifsomething#1{\doifnot {#1}{}}
- \def\doifelsenothing#1{\doifelse{#1}{}}
-
- \def\doifvaluenothing#1{\doif {\csname#1\endcsname}{}}
- \def\doifvaluesomething#1{\doifnot {\csname#1\endcsname}{}}
-\def\doifelsevaluenothing#1{\doifelse{\csname#1\endcsname}{}}
-
-%D Faster but spoiling inheritance (copying parameters):
-%D
-%D \starttyping
-%D \def\doifelsevaluesomething#1#2#3%
-%D {\expandafter\ifx\csname#1\endcsname\empty#3\else#2\fi}
-%D
-%D \def\doifvaluesomething#1#2%
-%D {\expandafter\ifx\csname#1\endcsname\empty\else#2\fi}
-%D
-%D \def\doifvaluenothing#1#2%
-%D {\expandafter\ifx\csname#1\endcsname\empty#2\fi}
-%D \stoptyping
-%D
-%D Slightly more efficient:
-
- \def\doifnothing{\doif \empty}
- \def\doifsomething{\doifnot \empty}
-\def\doifelsenothing{\doifelse\empty}
-
-%D The somewhat faster alternatives are:
-
-\long\def\doifvalue#1#2%
+\def\doifvalue#1#2%
{\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
\expandafter\firstofoneargument
@@ -5452,7 +5182,7 @@
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnotvalue#1#2%
+\def\doifnotvalue#1#2%
{\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
\expandafter\gobbleoneargument
@@ -5460,7 +5190,7 @@
\expandafter\firstofoneargument
\fi}
-\long\def\doifelsevalue#1#2%
+\def\doifelsevalue#1#2%
{\edef\!!stringa{\csname#1\endcsname}\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
\expandafter\firstoftwoarguments
@@ -5468,7 +5198,7 @@
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifnothing#1%
+\def\doifnothing#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstofoneargument
@@ -5476,7 +5206,7 @@
\expandafter\gobbleoneargument
\fi}
-\long\def\doifsomething#1%
+\def\doifsomething#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\gobbleoneargument
@@ -5484,7 +5214,7 @@
\expandafter\firstofoneargument
\fi}
-\long\def\doifelsenothing#1%
+\def\doifelsenothing#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstoftwoarguments
@@ -5492,7 +5222,7 @@
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifsomethingelse#1%
+\def\doifsomethingelse#1%
{\edef\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\secondoftwoarguments
@@ -5500,7 +5230,7 @@
\expandafter\firstoftwoarguments
\fi}
-\long\def\doifvaluenothing#1%
+\def\doifvaluenothing#1%
{\edef\!!stringa{\csname#1\endcsname}%
\ifx\!!stringa\empty
\expandafter\firstofoneargument
@@ -5508,7 +5238,7 @@
\expandafter\gobbleoneargument
\fi}
-\long\def\doifvaluesomething#1%
+\def\doifvaluesomething#1%
{\edef\!!stringa{\csname#1\endcsname}%
\ifx\!!stringa\empty
\expandafter\gobbleoneargument
@@ -5516,7 +5246,7 @@
\expandafter\firstofoneargument
\fi}
-\long\def\doifelsevaluenothing#1%
+\def\doifelsevaluenothing#1%
{\edef\!!stringa{\csname#1\endcsname}%
\ifx\!!stringa\empty
\expandafter\firstoftwoarguments
@@ -5769,7 +5499,7 @@
\def\p!doifsomespaceelse#1 #2#3\war{\if\noexpand#2@}
-\long\def\doifsomespaceelse#1% % #2#3%
+\def\doifsomespaceelse#1% % #2#3%
{\p!doifsomespaceelse#1 @ @\war % #3\else#2\fi}
\expandafter\secondoftwoarguments
\else
@@ -5892,7 +5622,7 @@
%D \processlist(){=>}\docommand(a=>b=>c=>d)
%D \stoptyping
-\long\def\processlist#1#2#3#4% no blank skipping !
+\def\processlist#1#2#3#4% no blank skipping !
{\def\doprocesslist##1#2%
{\def\dodoprocesslist####1####2#3%
{\ifx#2####1%
@@ -5951,7 +5681,7 @@
\escapechar\minusone
\dountexsomething}
-\long\def\dountexsomething#1#2\to#3%
+\def\dountexsomething#1#2\to#3%
{\doglobal#1#2\to\untexedargument
\endgroup
\let#3\untexedargument}
@@ -6128,7 +5858,7 @@
%D Consider for instance the macro for which I originally
%D wrote this token handler.
-\long\def\splitofftokens#1\from#2\to#3% slow but hardly used
+\def\splitofftokens#1\from#2\to#3% slow but hardly used
{\ifnum#1>\zerocount
\scratchcounter#1\relax
\def\dosplitofftokens##1%
@@ -6178,7 +5908,7 @@
\def\dohandletokens % \nexthandledtoken is part of interface
{\futurelet\nexthandledtoken\dodohandletokens}
-\long\def\handletokens#1\with#2%
+\def\handletokens#1\with#2%
{\gdef\dododohandletokens{#2}% permits more complex #2's
\dohandletokens#1\end}
@@ -6194,7 +5924,7 @@
\def\dodohandletokensone * %
{\dododohandletokens{ }\dohandletokens}
-\long\def\dodohandletokenstwo *#1%
+\def\dodohandletokenstwo *#1%
{\dododohandletokens{#1}\dohandletokens}
%D This macro is tested on:
@@ -6316,8 +6046,8 @@
{\begingroup\expandafter\doprocesscontent\csname#1\endcsname}
\def\doprocesscontent#1#2#3%
- {\long\def\doprocesscontent##1#1%
- {\endgroup\long\def#2{##1}#3}%
+ {\def\doprocesscontent##1#1%
+ {\endgroup\def#2{##1}#3}%
\doprocesscontent}
%D \macros
@@ -7029,12 +6759,12 @@
% The following macros are used in XML handling.
-\long\setvalue{@u@s@"}#1#2"{#2} \long\setvalue{@g@s@"}#1#2"{\scratchtoks{#2}}
-\long\setvalue{@u@s@'}#1#2'{#2} \long\setvalue{@g@s@'}#1#2'{\scratchtoks{#2}}
-\long\setvalue{@u@s@ }#1#2 {#2} \long\setvalue{@g@s@ }#1#2 {\scratchtoks{#2}}
+\setvalue{@u@s@"}#1#2"{#2} \setvalue{@g@s@"}#1#2"{\scratchtoks{#2}}
+\setvalue{@u@s@'}#1#2'{#2} \setvalue{@g@s@'}#1#2'{\scratchtoks{#2}}
+\setvalue{@u@s@ }#1#2 {#2} \setvalue{@g@s@ }#1#2 {\scratchtoks{#2}}
-\long\def\unstringed#1{\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1}
-\long\def\grabstring#1{\csname\ifcsname @g@s@#1\endcsname @g@s@#1\else\s!empty\fi\endcsname#1}
+\def\unstringed#1{\csname\ifcsname @u@s@#1\endcsname @u@s@#1\else\s!empty\fi\endcsname#1}
+\def\grabstring#1{\csname\ifcsname @g@s@#1\endcsname @g@s@#1\else\s!empty\fi\endcsname#1}
\def\dowithgrabbedstring#1%
{\def\@@dowithgrabbedstring{#1}%
@@ -7061,8 +6791,8 @@
\fi
\@@ifequal#2\@@and}
-\long\def\@@if@@equal@@true #1\@@then#2#3{#2}
-\long\def\@@if@@equal@@false#1\@@then#2#3{#3}
+\def\@@if@@equal@@true #1\@@then#2#3{#2}
+\def\@@if@@equal@@false#1\@@then#2#3{#3}
\def\appended#1#2#3{\expandafter#1\expandafter#2\expandafter{#2#3}}
\def\appendvalue #1{\expandafter\appended\expandafter \def\csname#1\endcsname}
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index e55076710..917c3939d 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 10/20/11 15:49:15
+-- merge date : 10/26/11 15:10:36
do -- begin closure to overcome local limits and interference
@@ -3172,6 +3172,8 @@ if not modules then modules = { } end modules ['font-con'] = {
}
+-- some names of table entries will be changed (no _)
+
local utf = unicode.utf8
local next, tostring, rawget = next, tostring, rawget
@@ -3216,7 +3218,80 @@ constructors.cache = containers.define("fonts", "constructors", constr
constructors.privateoffset = 0xF0000 -- 0x10FFFF
--- This might become an interface;
+-- Some experimental helpers (handy for tracing):
+
+constructors.keys = {
+ properties = {
+ encodingbytes = "number",
+ embedding = "number",
+ cidinfo = {
+ },
+ format = "string",
+ fontname = "string",
+ fullname = "string",
+ filename = "filename",
+ psname = "string",
+ name = "string",
+ virtualized = "boolean",
+ italic_correction = "boolean",
+ auto_italic_correction = "boolean",
+ no_stackmath = "boolean",
+ noglyphnames = "boolean",
+ mode = "string",
+ has_math = "boolean",
+ no_math_italics = "boolean",
+ no_text_italics = "boolean",
+ finalized = "boolean",
+ },
+ parameters = {
+ mathsize = "scaledpoints",
+ scriptpercentage = "float",
+ scriptscriptpercentage = "float",
+ units = "cardinal",
+ designsize = "scalespoints",
+ expansion = {
+ stretch = "integerscale", -- might become float
+ shrink = "integerscale", -- might become float
+ step = "integerscale", -- might become float
+ auto = "boolean",
+ },
+ protrusion = {
+ auto = "boolean",
+ },
+ expand_factor = "float",
+ slant_factor = "float",
+ factor = "float",
+ hfactor = "float",
+ vfactor = "float",
+ size = "scaledpoints",
+ units = "scaledpoints",
+ scaledpoints = "scaledpoints",
+ slant = "float",
+ space = "scaledpoints",
+ space_stretch = "scaledpoints",
+ space_shrink = "scaledpoints",
+ x_height = "scaledpoints",
+ quad = "scaledpoints",
+ extra_space = "scaledpoints",
+ ascender = "scaledpoints",
+ descender = "scaledpoints",
+ },
+ description = {
+ width = "basepoints",
+ height = "basepoints",
+ depth = "basepoints",
+ boundingbox = { },
+ },
+ character = {
+ width = "scaledpoints",
+ height = "scaledpoints",
+ depth = "scaledpoints",
+ italic = "scaledpoints",
+ },
+
+}
+
+-- This might become an interface:
local designsizes = allocate()
constructors.designsizes = designsizes
@@ -5113,6 +5188,8 @@ if not modules then modules = { } end modules ['font-otf'] = {
-- to_table -> totable
-- ascent descent
+-- more checking against low level calls of functions
+
local utf = unicode.utf8
local utfbyte = utf.byte
@@ -8628,6 +8705,11 @@ local function toligature(kind,lookupname,start,stop,char,markflag,discfound) --
start = start.next
end
end
+ -- we do need components in funny kerning mode but maybe I can better reconstruct then
+ -- as we do have the font components info available; removing components makes the
+ -- previous code much simpler
+ --
+ -- flush_node_list(head.components)
return head
end
end