summaryrefslogtreecommitdiff
path: root/tex/context
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2021-11-11 19:43:54 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2021-11-11 19:43:54 +0100
commite1968f3ee77c1485c06a567aed0bc0e2eb5c7d01 (patch)
treee6664e73334ac677241feb04244580b2f22c92c3 /tex/context
parent70deb1dc5cd7c0546dd864ca91a8fa0b97e31533 (diff)
downloadcontext-e1968f3ee77c1485c06a567aed0bc0e2eb5c7d01.tar.gz
2021-11-11 19:21:00
Diffstat (limited to 'tex/context')
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-it.mkii2
-rw-r--r--tex/context/base/mkiv/buff-ini.lua2
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-oup.lua7
-rw-r--r--tex/context/base/mkiv/mult-low.lua4
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin24741 -> 24810 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin253969 -> 256612 bytes
-rw-r--r--tex/context/base/mkxl/buff-ini.lmt78
-rw-r--r--tex/context/base/mkxl/buff-ini.mkxl34
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/driv-shp.lmt22
-rw-r--r--tex/context/base/mkxl/font-con.lmt36
-rw-r--r--tex/context/base/mkxl/font-imp-math.lmt2
-rw-r--r--tex/context/base/mkxl/font-ini.mklx18
-rw-r--r--tex/context/base/mkxl/font-ots.lmt57
-rw-r--r--tex/context/base/mkxl/font-pre.mkxl3
-rw-r--r--tex/context/base/mkxl/lpdf-lmt.lmt185
-rw-r--r--tex/context/base/mkxl/math-act.lmt79
-rw-r--r--tex/context/base/mkxl/syst-aux.mkxl12
-rw-r--r--tex/context/base/mkxl/trac-vis.lmt2
-rw-r--r--tex/context/base/mkxl/typo-adj.mkxl3
-rw-r--r--tex/context/fonts/mkiv/ebgaramond.lfg54
-rw-r--r--tex/context/fonts/mkiv/pagella-math.lfg74
-rw-r--r--tex/context/interface/mkii/keys-it.xml2
28 files changed, 490 insertions, 198 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 86bc7834d..c52d4b787 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2021.11.05 15:54}
+\newcontextversion{2021.11.11 19:18}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 78d89a9a5..ea17f2dc5 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2021.11.05 15:54}
+\edef\contextversion{2021.11.11 19:18}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-it.mkii b/tex/context/base/mkii/mult-it.mkii
index 25a2968fc..25ba4962e 100644
--- a/tex/context/base/mkii/mult-it.mkii
+++ b/tex/context/base/mkii/mult-it.mkii
@@ -315,6 +315,7 @@
\setinterfacevariable{lefthanging}{lefthanging}
\setinterfacevariable{leftmargin}{marginesinistro}
\setinterfacevariable{leftpage}{paginasinistra}
+\setinterfacevariable{lefttext}{testosinistro}
\setinterfacevariable{lefttoright}{lefttoright}
\setinterfacevariable{legend}{legenda}
\setinterfacevariable{less}{less}
@@ -476,6 +477,7 @@
\setinterfacevariable{righthanging}{righthanging}
\setinterfacevariable{rightmargin}{marginedestro}
\setinterfacevariable{rightpage}{paginadestra}
+\setinterfacevariable{righttext}{testodestro}
\setinterfacevariable{righttoleft}{righttoleft}
\setinterfacevariable{roman}{roman}
\setinterfacevariable{romannumerals}{numeriromani}
diff --git a/tex/context/base/mkiv/buff-ini.lua b/tex/context/base/mkiv/buff-ini.lua
index 6c844342a..9af76f72e 100644
--- a/tex/context/base/mkiv/buff-ini.lua
+++ b/tex/context/base/mkiv/buff-ini.lua
@@ -688,7 +688,7 @@ local runner = sandbox.registerrunner {
name = "run buffer",
program = "context",
method = "execute",
- template = (jit and "--jit " or "") .. "--purgeall %?path: --path=%path% ?% %filename%",
+ template = (jit and "--jit --engine=luajittex" or "--engine=luatex") .. " --purgeall %?path: --path=%path% ?% %filename%",
reporter = report_typeset,
checkers = {
filename = "readable",
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 3c7eca483..ce96e7c81 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2021.11.05 15:54}
+\newcontextversion{2021.11.11 19:18}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 3b3d9368f..c2178e2b1 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -49,7 +49,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2021.11.05 15:54}
+\edef\contextversion{2021.11.11 19:18}
%D Kind of special:
diff --git a/tex/context/base/mkiv/font-oup.lua b/tex/context/base/mkiv/font-oup.lua
index 4c3d562c2..3bd2fe482 100644
--- a/tex/context/base/mkiv/font-oup.lua
+++ b/tex/context/base/mkiv/font-oup.lua
@@ -3027,7 +3027,7 @@ function readers.expand(data)
-- about 15% on arabtype .. then moving the a test also saves a bit (even when
-- often a is not set at all so that one is a bit debatable
- local function expandlookups(sequences)
+ local function expandlookups(sequences,whatever)
if sequences then
-- we also need to do sublookups
for i=1,#sequences do
@@ -3103,6 +3103,9 @@ function readers.expand(data)
if lookups then
for k, v in next, lookups do -- actually this one is indexed
local lookup = sublookups[v]
+if not lookup and whatever then
+ lookup = whatever[v]
+end
if lookup then
lookups[k] = lookup
if not subtype then
@@ -3183,5 +3186,5 @@ function readers.expand(data)
end
expandlookups(sequences)
- expandlookups(sublookups)
+ expandlookups(sublookups,sequences)
end
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index 125434d9a..307cf3c68 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -103,9 +103,9 @@ return {
--
"overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode",
"accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "accentitalickernmathcontrolcode",
- "delimiteritalickernmathcontrolcode", "orditalickernmathcontrolcode", "charitalicwidthmathcontrolcode",
+ "delimiteritalickernmathcontrolcode", "noorditalickernmathcontrolcode", "charitalicwidthmathcontrolcode",
"charitalicnoreboxmathcontrolcode", "boxednoitalickernmathcontrolcode", "nostaircasekernmathcontrolcode",
- "textitalickernmathcontrolcode",
+ "textitalickernmathcontrolcode", "noscriptitalickernmathcontrolcode",
--
"noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode",
"noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode",
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 6bab9c707..28cb886a3 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 64c280124..19c31285c 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkxl/buff-ini.lmt b/tex/context/base/mkxl/buff-ini.lmt
index 0b54f81ac..2cde7c72b 100644
--- a/tex/context/base/mkxl/buff-ini.lmt
+++ b/tex/context/base/mkxl/buff-ini.lmt
@@ -678,7 +678,7 @@ implement {
if doundent or (autoundent and doundent == nil) then
data = undent(data)
end
- buffers.assign(name,data,catcodes)
+ assign(name,data,catcodes)
context[finish]()
end
}
@@ -954,3 +954,79 @@ implement {
actions = buffers.samplefile,
arguments = "string"
}
+
+-- A somewhat strange place (for now) so the *.log definitions might move someplace
+-- else (if useful at all).
+
+-- Handy for the math test suite that Mikael Sundqvist and I are making where we
+-- need to track box content as well as some low level math tracing features, so
+-- we can pipe to buffers (via a temporary file).
+
+do
+
+ local insert, remove = table.insert, table.remove
+ local setlogfile = texio.setlogfile
+ local openfile = io.open
+
+ local stack = { }
+ local files = { }
+
+ local function resetlogfile(name)
+ files[name] = false
+ end
+
+ local function pushlogfile(name)
+ local f = openfile(name,files[name] and "ab" or "wb")
+ insert(stack,f)
+ files[name] = true
+ setlogfile(f)
+ end
+
+ local function poplogfile()
+ remove(stack)
+ setlogfile(stack[#stack])
+ end
+
+ logs.pushlogfile = pushlogfile
+ logs.poplogfile = poplogfile
+ logs.resetlogfile = resetlogfile
+
+ implement {
+ name = "resetlogfile",
+ arguments = "argument",
+ public = true,
+ protected = true,
+ actions = resetlogfile,
+ }
+
+ implement {
+ name = "pushlogfile",
+ arguments = "argument",
+ public = true,
+ protected = true,
+ actions = pushlogfile,
+ }
+
+ implement {
+ name = "poplogfile",
+ public = true,
+ protected = true,
+ actions = poplogfile,
+ }
+
+ -- In the end we went for a somewhat hidden low level one (see low level math tests
+ -- for usage):
+
+ local showbox = tex.showbox
+
+ implement {
+ name = "showboxinbuffer",
+ public = true,
+ protected = true,
+ arguments = { "argument", "integer", "integer" },
+ actions = function(buffer, box, detail)
+ assign(buffer or "",showbox(box, detail))
+ end,
+ }
+
+end
diff --git a/tex/context/base/mkxl/buff-ini.mkxl b/tex/context/base/mkxl/buff-ini.mkxl
index ed16bd6e3..530058f46 100644
--- a/tex/context/base/mkxl/buff-ini.mkxl
+++ b/tex/context/base/mkxl/buff-ini.mkxl
@@ -283,4 +283,38 @@
\permanent\def\getbufferdata[#1]{\buff_get_stored_indeed{#1}}
+% low level helper (for math manual):
+
+% \showboxinbuffer{temp}<boxnumber><detail> % defined in lua, detail cf \shownodedetails 0|1|2
+
+%D \starttyping
+%D \setbox\scratchbox\hbox{$fff$}
+%D \showboxinbuffer{temp}\scratchbox\plusone
+%D \typebuffer[temp][option=TEX]
+%D \stoptyping
+%D
+%D More extensive multistep cases can do this:
+%D
+%D \starttyping
+%D \pushlogfile{oeps-1.txt}
+%D \setbox0\hbox{A}\showbox0
+%D \pushlogfile{oeps-2.txt}
+%D \setbox0\hbox{B}\showbox0
+%D \poplogfile
+%D \setbox0\hbox{C}\showbox0
+%D \poplogfile
+%D
+%D % \resetlogfile{oeps-1.txt}
+%D \pushlogfile{oeps-1.txt}
+%D \setbox0\hbox{A}\showbox0
+%D \pushlogfile{oeps-2.txt}
+%D \setbox0\hbox{B}\showbox0
+%D \poplogfile
+%D \setbox0\hbox{C}\showbox0
+%D \poplogfile
+%D \stoptyping
+%D
+%D But in the end that was overkill and we don't really need a stepwise verbatim
+%D because we need to add comments in between anyway.
+
\protect \endinput
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 9c3cde2c5..722ac0f09 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2021.11.05 15:54}
+\newcontextversion{2021.11.11 19:18}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index c009461ed..8d42981fc 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2021.11.05 15:54}
+\immutable\edef\contextversion{2021.11.11 19:18}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt
index f24a4090f..ace259954 100644
--- a/tex/context/base/mkxl/driv-shp.lmt
+++ b/tex/context/base/mkxl/driv-shp.lmt
@@ -459,6 +459,8 @@ local flush_character do
end
end
+ -- hm, never seen outside here
+
pos_h = saved_h
pos_v = saved_v
pos_r = saved_r
@@ -473,7 +475,7 @@ local flush_character do
if font ~= lastfont then
lastfont = font
fontcharacters = characters[font]
- updatefontstate(font)
+ updatefontstate(font) -- can move to lpdf-lmt, cleaner
end
local data = fontcharacters[char]
@@ -517,6 +519,7 @@ local flush_character do
sx = 1
sy = 1
end
+-- print(width, height, depth, factor, sx, sy)
if pos_r == righttoleft_code then
pos_h = pos_h - width -- here ?
end
@@ -525,14 +528,14 @@ local flush_character do
else
-- kind of messy that we do orientation here and offsets elsewhere .. this might change
local orientation = data.orientation -- 0 (none), 1, 2, 3 or 4 (none)
- local x = data.xoffset
- local y = data.yoffset
- if x then
- pos_h = pos_h + x * sx
- end
- if y then
- pos_v = pos_v + y * sy
- end
+-- local x = data.xoffset
+-- local y = data.yoffset
+-- if x then
+-- pos_h = pos_h + x * sx
+-- end
+-- if y then
+-- pos_v = pos_v + y * sy
+-- end
if orientation and (orientation == 1 or orientation == 3) then
-- we can get weird charactersbox tracing here
pushorientation(orientation,pos_h,pos_v)
@@ -541,6 +544,7 @@ local flush_character do
else
flushcharacter(current,pos_h,pos_v,pos_r,font,char,data,f,e,factor,sx,sy) -- ,naturalwidth,width)
end
+ -- we use the real width so we have to go back again
end
return width, height, depth
end
diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt
index cee94f6d2..d1a15e92c 100644
--- a/tex/context/base/mkxl/font-con.lmt
+++ b/tex/context/base/mkxl/font-con.lmt
@@ -486,12 +486,14 @@ function constructors.scale(tfmdata,specification)
if hasmath then
constructors.assignmathparameters(target,tfmdata) -- does scaling and whatever is needed
- properties.hasmath = true
- target.nomath = false
+ properties.hasmath = true -- to be sure
+ target.nomath = false -- hm
target.MathConstants = target.mathparameters
- properties.compactmath = true
- target.compactmath = true
+ local compactmath = properties.compactmath
+
+ targetproperties.compactmath = compactmath
+ target.compactmath = compactmath
local textscale = parameters.textscale -- or 1000
local scriptscale = parameters.scriptscale -- or 700
@@ -744,6 +746,10 @@ function constructors.scale(tfmdata,specification)
if ft then
chr.options = ft
end
+ local sm = character.smaller
+ if sm then
+ chr.smaller = sm
+ end
elseif autoitalicamount then -- itlc feature
local vi = description.italic
if not vi then
@@ -795,14 +801,20 @@ function constructors.scale(tfmdata,specification)
if vc then
chr.commands = scalecommands(vc,hdelta,vdelta)
end
- local vx = characters.xoffset
- if vx then
- chr.vx = vx*hdelta
- end
- local vy = characters.yoffset
- if vy then
- chr.vy = vy*hdelta
- end
+ -- we assume that these are done in a manipulator afterwards
+ -- as it makes no sense otherwise
+ -- local vx = character.xoffset
+ -- if vx then
+ -- chr.xoffset = vx*hdelta
+ -- end
+ -- local vy = character.yoffset
+ -- if vy then
+ -- chr.yoffset = vy*vdelta
+ -- end
+ -- local va = character.advance
+ -- if va then
+ -- chr.advance = va*vdelta
+ -- end
targetcharacters[unicode] = chr
end
--
diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt
index 677bff91a..68dddf33d 100644
--- a/tex/context/base/mkxl/font-imp-math.lmt
+++ b/tex/context/base/mkxl/font-imp-math.lmt
@@ -161,9 +161,11 @@ local function initialize(tfmdata,value)
local mathconstants = rawresources.mathconstants
if mathconstants then
local parameters = tfmdata.parameters
+ local properties = tfmdata.properties
parameters.textscale = 1000
parameters.scriptscale = mathconstants.ScriptPercentScaleDown * 10
parameters.scriptscriptscale = mathconstants.ScriptScriptPercentScaleDown * 10
+ properties.compactmath = true
end
end
end
diff --git a/tex/context/base/mkxl/font-ini.mklx b/tex/context/base/mkxl/font-ini.mklx
index b43f43dfb..85e253e17 100644
--- a/tex/context/base/mkxl/font-ini.mklx
+++ b/tex/context/base/mkxl/font-ini.mklx
@@ -777,24 +777,6 @@
\fi
\font_helpers_update_font_parameters
\font_helpers_update_font_class_parameters
- %\writestatus{fonts}{low level define: #csname/\somefontfile/\number\d_font_scaled_font_size/\fontface/\number\d_font_scaled_text_face}%
-% \clf_definefont_two
-% \ifempty\fontclass\s!false\else\s!true\fi
-% {#csname}%
-% {\somefontfile}%
-% \d_font_scaled_font_size
-% \c_font_feature_inheritance_mode
-% {\m_font_class_features}%
-% {\m_font_features}%
-% {\m_font_class_fallbacks}%
-% {\m_font_fallbacks}%
-% \fontface
-% \d_font_scaled_text_face
-% {\m_font_class_goodies}%
-% {\m_font_goodies}%
-% {\m_font_class_designsize}%
-% {\m_font_designsize}%
-% \scaledfontmode
\clf_definefont_two
\ifempty\fontclass\s!false\else\s!true\fi
{#csname}%
diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt
index 4d4c09495..eda63cee5 100644
--- a/tex/context/base/mkxl/font-ots.lmt
+++ b/tex/context/base/mkxl/font-ots.lmt
@@ -2055,19 +2055,23 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
local chainlookup = chainlookups[1]
for j=1,#chainlookup do
local chainstep = chainlookup[j]
- local chainkind = chainstep.type
- local chainproc = chainprocs[chainkind]
- if chainproc then
- local ok
- -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
- -- char + mark -> char where mark has to disappear
- -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash)
- if ok then
- done = true
+ if chainstep then
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok
+ -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
+ -- char + mark -> char where mark has to disappear
+ -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash)
+ if ok then
+ done = true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
end
else
- logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ logprocess("%s: has an issue (1)",cref(dataset,sequence))
end
end
@@ -2109,23 +2113,28 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
if chainlookup then
for j=1,#chainlookup do
local chainstep = chainlookup[j]
- local chainkind = chainstep.type
- local chainproc = chainprocs[chainkind]
- if chainproc then
- local ok, n
- head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
- -- messy since last can be changed !
- if ok then
- done = true
- if n and n > 1 and i + n > nofchainlookups then
- -- this is a safeguard, we just ignore the rest of the lookups
- i = size -- prevents an advance
- break
+ if chainstep then
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok, n
+ head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
+ -- messy since last can be changed !
+ if ok then
+ done = true
+ if n and n > 1 and i + n > nofchainlookups then
+ -- this is a safeguard, we just ignore the rest of the lookups
+ i = size -- prevents an advance
+ break
+ end
end
+ else
+ -- actually an error
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
end
else
-- actually an error
- logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ logprocess("%s: has an issue (2)",cref(dataset,sequence))
end
end
else
diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl
index 27b1f6fdf..ffad757a9 100644
--- a/tex/context/base/mkxl/font-pre.mkxl
+++ b/tex/context/base/mkxl/font-pre.mkxl
@@ -419,9 +419,6 @@
\mathnolimitsmode\plusone % font driven (only opentype)
\fi
-\mathitalicsmode\plusone % 1 : add to simple noad
-%mathitalicsmode\plusthree % 2 : add italic kerns for diagnostics
-
% \adaptfontfeature[*math*][mathnolimitsmode=1000] % only subscript
\definefontfeature
diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt
index 81df491c2..463cc8352 100644
--- a/tex/context/base/mkxl/lpdf-lmt.lmt
+++ b/tex/context/base/mkxl/lpdf-lmt.lmt
@@ -117,7 +117,7 @@ local flushers = { }
-- used variables
local pdf_h, pdf_v
-local need_tm, need_tf, cur_tmrx, cur_factor, cur_f, cur_e
+local need_tm, need_tf, need_font, cur_tmrx, cur_factor, cur_f, cur_e
local need_width, need_mode, done_width, done_mode
local mode
local f_pdf_cur, f_pdf, fs_cur, fs, f_cur, f_x_scale, f_y_scale
@@ -147,6 +147,7 @@ local function reset_variables(specification)
tmef = 1.0
need_tm = false
need_tf = false
+ need_font = true
need_width = 0
need_mode = 0
done_width = false
@@ -272,6 +273,7 @@ local function begin_text()
saved_text_pos_v = pdf_v
b = b + 1 ; buffer[b] = "BT"
need_tf = true
+ need_font = true
need_width = 0
need_mode = 0
mode = "text"
@@ -458,9 +460,10 @@ do
-- as fontparameters already has checked / set it we can also have a variable
-- for it so
- local naturalwidth = nil
- local hshift = false
- local vshift = false
+ local characterwidth = nil
+ -- local descriptionwidth = nil
+ local hshift = false
+ local vshift = false
-- The width array uses the original dimensions! This is different from e.g.
-- luatex where we have more widths arrays and these reflect the cheated
@@ -468,55 +471,27 @@ do
-- when changing this, check math: compact-001.tex (rule width)
--- local naturalwidths = setmetatableindex(function(t,font)
--- local d = descriptions[font]
--- local c = characters[font]
--- local f = parameters[font].hfactor or parameters[font].factor
--- local v = setmetatableindex(function(t,char)
--- local w
--- local e = c and c[char]
--- if e then
--- w = e.width or 0
--- end
--- if not w then
--- e = d and d[char]
--- if e then
--- w = e.width
--- if w then
--- w = w * f
--- end
--- end
--- end
--- if not w then
--- w = 0
--- end
--- t[char] = w
--- return w
--- end)
--- t[font] = v
--- return v
--- end)
-
- -- we need to use descriptions ... otherwise we get wrong dimensions when we use
- -- characters[n].xoffset or virtual stuff
-
- local naturalwidths = setmetatableindex(function(t,font)
+ local characterwidths = setmetatableindex(function(t,font)
local d = descriptions[font]
local c = characters[font]
local f = parameters[font].hfactor or parameters[font].factor
local v = setmetatableindex(function(t,char)
local w
- local e = d and d[char]
+ local e = c and c[char]
if e then
- w = e.width
- if w then
- w = w * f
+ w = e.width or 0
+ local a = e.advance
+ if a then
+ w = a
end
end
if not w then
- e = c and c[char]
+ e = d and d[char]
if e then
- w = e.width or 0
+ w = e.width
+ if w then
+ w = w * f
+ end
end
end
if not w then
@@ -529,7 +504,50 @@ do
return v
end)
- local function setup_fontparameters(font,factor,f,e,sx,sy)
+ -- we need to use descriptions ... otherwise we get wrong dimensions when we use
+ -- characters[n].xoffset or virtual stuff
+
+ -- local descriptionwidths = setmetatableindex(function(t,font)
+ -- local d = descriptions[font]
+ -- local c = characters[font]
+ -- local f = parameters[font].hfactor or parameters[font].factor
+ -- local v = setmetatableindex(function(t,char)
+ -- local w
+ -- local e = d and d[char]
+ -- if e then
+ -- w = e.width
+ -- if w then
+ -- w = w * f
+ -- end
+ -- end
+ -- if not w then
+ -- e = c and c[char]
+ -- if e then
+ -- w = e.width or 0
+ -- end
+ -- end
+ -- if not w then
+ -- w = 0
+ -- end
+ -- t[char] = w
+ -- return w
+ -- end)
+ -- t[font] = v
+ -- return v
+ -- end)
+
+ -- it's about time to get rid of the pdftex based model but i'll wait with that till after
+ -- the first release so that we have some test period ... when we go compact even less
+
+ -- the descriptions are used for the width array
+
+ local collapse = true
+
+ experiments.register("backend.pdf.collapsefonts",function(v)
+ collapse = v
+ end)
+
+ local function setup_fontparameters(where,font,factor,f,e,sx,sy)
local slant = fontparameters.slantfactor or 0
local extend = fontparameters.extendfactor or 1
local squeeze = fontparameters.squeezefactor or 1
@@ -551,15 +569,30 @@ do
cur_e = e
tj_delta = 0
cw = 0
- f_x_scale = 1.0
- f_y_scale = 1.0
- fs = fontparameters.size * bpfactor
- if f then
- fs = fs * f
- end
- -- kind of special:
- if format == "opentype" or format == "type1" then
- fs = fs * 1000 / fontparameters.units -- can we avoid this ?
+ --
+ fs = fontparameters.size * bpfactor
+ if collapse then
+ local sc = fs / 10
+ if f then
+ sc = sc * f
+ end
+ -- kind of special:
+ if format == "opentype" or format == "type1" then
+ sc = sc * 1000 / fontparameters.units -- can we avoid this ?
+ end
+ --
+ fs = 10
+ --
+ tmrx = tmrx * sc
+ tmry = tmry * sc
+ else
+ if f then
+ fs = fs * f
+ end
+ -- kind of special:
+ if format == "opentype" or format == "type1" then
+ fs = fs * 1000 / fontparameters.units -- can we avoid this ?
+ end
end
--
f_x_scale = sx
@@ -571,7 +604,8 @@ do
tmry = tmry * f_y_scale
end
--
- naturalwidth = naturalwidths[font]
+ characterwidth = characterwidths[font]
+ -- descriptionwidth = descriptionwidths[font]
--
hshift = fontparameters.hshift
vshift = fontparameters.vshift
@@ -586,6 +620,9 @@ do
local width_factor = 72.27 / 72000.0
+ local last_fs
+ local last_fpdf
+
local function set_font()
-- if need_width and need_width ~= 0 then
if need_width ~= 0 then
@@ -603,7 +640,13 @@ do
b = b + 1 ; buffer[b] = s_mode
done_mode = false
end
- b = b + 1 ; buffer[b] = f_font(f_pdf,fs)
+ -- no need when the same
+ if need_font or last_fs ~= fs or last_pdf ~= f_pdf then
+ b = b + 1 ; buffer[b] = f_font(f_pdf,fs)
+ last_fs = fs
+ last_pdf = f_pdf
+ need_font = false
+ end
f_pdf_cur = f_pdf
fs_cur = fs
need_tf = false
@@ -653,24 +696,42 @@ do
flushers.character = function(current,pos_h,pos_v,pos_r,font,char,data,f,e,factor,sx,sy) -- ,naturalwidth,width)
if sx ~= f_x_scale or sy ~= f_y_scale or need_tf or font ~= f_cur or f_pdf ~= f_pdf_cur or fs ~= fs_cur or mode == "page" then
+-- if sx ~= f_x_scale or sy ~= f_y_scale or need_tf or font ~= f_cur or f_pdf ~= f_pdf_cur or fs ~= fs_cur then
+-- print("f",1)
pdf_goto_textmode()
- setup_fontparameters(font,factor,f,e,sx,sy)
+ setup_fontparameters(1,font,factor,f,e,sx,sy) -- too often due to page
+ set_font()
+-- elseif mode == "page" then
+-- print("f",4)
+-- pdf_goto_textmode()
set_font()
elseif cur_f ~= f then -- when ok move up (maybe no longer needed)
+-- print("f",2)
pdf_goto_textmode()
- setup_fontparameters(font,factor,f,e,sx,sy)
+ setup_fontparameters(2,font,factor,f,e,sx,sy)
set_font()
-- elseif cur_tmrx ~= tmrx or cur_factor ~= factor or cur_f ~= f or cur_e ~= e then
elseif cur_tmrx ~= tmrx or cur_factor ~= factor or cur_e ~= e then
- setup_fontparameters(font,factor,f,e,sx,sy)
+-- print("f",3)
+ setup_fontparameters(3,font,factor,f,e,sx,sy)
need_tm = true
end
+
+ local x = data.xoffset
+ local y = data.yoffset
+ if x then
+ pos_h = pos_h + x * tmef * f_x_scale
+ end
+ if y then
+ pos_v = pos_v + y * f_y_scale
+ end
+
local move = calc_pdfpos(pos_h,pos_v)
if trace_threshold then
report_fonts(
"before: font %i, char %C, factor %i, naturalwidth %p, move %l, tm %l, hpos %p, delta %p, threshold %p, cw %p",
- font,char,factor,naturalwidth[char],move,need_tm,pos_h,tj_delta,threshold,cw
+ font,char,factor,characterwidth[char],move,need_tm,pos_h,tj_delta,threshold,cw
)
end
@@ -693,7 +754,6 @@ do
if hshift then pos_h = pos_h + hshift end
if vshift then pos_v = pos_v - vshift end
-
if need_tm then
pdf_goto_textmode()
set_textmatrix(pos_h,pos_v)
@@ -715,14 +775,15 @@ do
if trace_threshold then
report_fonts(
"after : font %i, char %C, factor %i, naturalwidth %p, move %l, tm %l, hpos %p, delta %p, threshold %p, cw %p",
- font,char,factor,naturalwidth[char],move,need_tm,pos_h,tj_delta,threshold,cw
+ font,char,factor,characterwidth[char],move,need_tm,pos_h,tj_delta,threshold,cw
)
end
if mode == "chararray" then
begin_charmode()
end
- cw = cw + naturalwidth[char] * tmef * f_x_scale
+
+ cw = cw + characterwidth[char] * tmef * f_x_scale
local slot = pdfcharacters[data.index or char] -- registers usage
diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt
index 3df8c1700..56730f2eb 100644
--- a/tex/context/base/mkxl/math-act.lmt
+++ b/tex/context/base/mkxl/math-act.lmt
@@ -181,6 +181,69 @@ function mathematics.overloadparameters(target,original)
end
end
+-- a couple of predefined tweaks:
+
+local mathtweaks = { }
+mathematics.tweaks = mathtweaks
+
+local function adapt(targetcharacters,originalcharacters,k,v,compact,n)
+ local character = targetcharacters[k]
+ if character then
+ local width = character.width
+ local italic = character.italic
+ local offsetfactor = v[1] or 1
+ local widthfactor = v[2] or 1
+ local italicfactor = v[3] or 1
+ if width then
+ character.advance = width -- so advance is oldwidth
+ character.xoffset = offsetfactor * width
+ character.width = widthfactor * width
+ end
+ if italic then
+ character.italic = italicfactor * italic
+ end
+ local smaller = originalcharacters[k].smaller
+ if compact and smaller and smaller ~= k then
+ adapt(targetcharacters,originalcharacters,smaller,v,compact,n+1)
+ end
+ else
+ report_math("no character %U",k)
+ end
+end
+
+function mathtweaks.dimensions(target,original,list)
+ local targetcharacters = target.characters
+ local originalcharacters = original.characters
+ local compact = target.parameters.textscale and true or false
+ for k, v in next, list do
+ adapt(targetcharacters,originalcharacters,k,v,compact,1)
+ end
+end
+
+function mathtweaks.action(target,original,action,...)
+ if type(action) == "function" then
+ action(target,original,...)
+ end
+end
+
+
+local reported = { }
+
+function mathtweaks.version(target,original,expected)
+ local metadata = original.shared.rawdata.metadata
+ if metadata then
+ local version = metadata.version
+ if version then
+ local fontname = metadata.fontname
+ -- version = tonumber(string.match(version,"%d+.%d+"))
+ if not reported[fontname] and version ~= expected then
+ report_math("tweaking %a, version %a found, version %a expected",fontname,version,expected)
+ reported[fontname] = true
+ end
+ end
+ end
+end
+
local function applytweaks(when,target,original)
local goodies = original.goodies
if goodies then
@@ -195,10 +258,19 @@ local function applytweaks(when,target,original)
report_math("tweaking math of %a @ %p (%s)",target.properties.fullname,target.parameters.size,when)
end
for i=1,#tweaks do
- local tweak= tweaks[i]
+ local tweak = tweaks[i]
local tvalue = type(tweak)
if tvalue == "function" then
+ -- old
tweak(target,original)
+ elseif tvalue == "table" then
+ local command = tweak[1]
+ if type(command) == "string" then
+ local action = mathtweaks[command]
+ if action then
+ action(target,original,table.unpack(tweak,2))
+ end
+ end
end
end
end
@@ -233,11 +305,6 @@ sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaft
--
-- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions")
--- a couple of predefined tweaks:
-
-local tweaks = { }
-mathematics.tweaks = tweaks
-
-- helpers
local setmetatableindex = table.setmetatableindex
diff --git a/tex/context/base/mkxl/syst-aux.mkxl b/tex/context/base/mkxl/syst-aux.mkxl
index 278926582..2f7acdca0 100644
--- a/tex/context/base/mkxl/syst-aux.mkxl
+++ b/tex/context/base/mkxl/syst-aux.mkxl
@@ -1788,6 +1788,18 @@
\permanent\protected\def\getcommacommandsize[#1]%
{\normalexpanded{\getcommalistsize[#1]}}
+\permanent\def\getcommalistcount[#1]%
+ {\beginlocalcontrol
+ \getcommalistsize[#1]%
+ \endlocalcontrol
+ \the\commalistcounter}
+
+\permanent\def\getcommacommandcount[#1]%
+ {\beginlocalcontrol
+ \getcommacommandsize[#1]%
+ \endlocalcontrol
+ \the\commalistcounter}
+
%D Filters:
% \def\syst_helpers_gobble_comma_list#0\ignorearguments{}
diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt
index 6f59d0e7f..aa599485c 100644
--- a/tex/context/base/mkxl/trac-vis.lmt
+++ b/tex/context/base/mkxl/trac-vis.lmt
@@ -1566,7 +1566,7 @@ do
if trace_mathkern then
head, current = mathkern(head,current)
elseif trace_kern then
- head, current = ruledmarginkern(head,current,subtype)
+ head, current = ruledmathkern(head,current,subtype)
end
else
if trace_kern then
diff --git a/tex/context/base/mkxl/typo-adj.mkxl b/tex/context/base/mkxl/typo-adj.mkxl
index 9a85b3009..5c129f07e 100644
--- a/tex/context/base/mkxl/typo-adj.mkxl
+++ b/tex/context/base/mkxl/typo-adj.mkxl
@@ -21,6 +21,9 @@
% \definesystemattribute[adjuster][public]
+% Musical timestamp: the announcement of the new Porcupine Tree album: Closure /
+% Continuation and the related upcoming tour. They're back!
+
\unprotect
%D \starttyping
diff --git a/tex/context/fonts/mkiv/ebgaramond.lfg b/tex/context/fonts/mkiv/ebgaramond.lfg
index 73f3e6b70..862e4e85d 100644
--- a/tex/context/fonts/mkiv/ebgaramond.lfg
+++ b/tex/context/fonts/mkiv/ebgaramond.lfg
@@ -1,35 +1,35 @@
return {
- name = "eb garamond",
+ name = "ebgaramond",
version = "1.00",
- comment = "Goodies that complement eb garamond.",
+ comment = "Goodies that complement ebgaramond.",
author = "Hans Hagen",
copyright = "ConTeXt development team",
mathematics = {
- tweaks = {
- aftercopying = {
- function(target,original,...)
- local crap = {
- [0x1D453] = { .20, 1.20 },
- [0x1D454] = { .15, 1.15 },
- }
- local characters = target.characters
- local function adapt(k,v)
- local character = characters[k]
- local width = character.width
- character.width = v[2]*width
- -- character.commands = { { "offset", v[1]*width, 0, k } }
- character.xoffset = v[1]*width
- local smaller = original.characters[k].smaller
- if smaller and smaller ~= k then
- adapt(smaller,v)
- end
- end
- for k, v in next, crap do
- adapt(k,v)
- end
- end,
- },
- },
+-- tweaks = {
+-- aftercopying = {
+-- function(target,original,...)
+-- local crap = {
+-- [0x1D453] = { .20, 1.20 },
+-- [0x1D454] = { .15, 1.15 },
+-- }
+-- local characters = target.characters
+-- local function adapt(k,v)
+-- local character = characters[k]
+-- local width = character.width
+-- character.width = v[2]*width
+-- -- character.commands = { { "offset", v[1]*width, 0, k } }
+-- character.xoffset = v[1]*width
+-- local smaller = original.characters[k].smaller
+-- if smaller and smaller ~= k then
+-- adapt(smaller,v)
+-- end
+-- end
+-- for k, v in next, crap do
+-- adapt(k,v)
+-- end
+-- end,
+-- },
+-- },
alternates = {
partial = { feature = 'ss02', value = 1, comment = "Curved partial" },
diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg
index 262196f70..e2ed0eb43 100644
--- a/tex/context/fonts/mkiv/pagella-math.lfg
+++ b/tex/context/fonts/mkiv/pagella-math.lfg
@@ -1,9 +1,7 @@
-local kern_V = { bottomright = { { kern = -200 } } }
-local kern_W = { bottomright = { { kern = -100 } } }
------ kern_f = { bottomright = { { kern = -100 } } }
--- local offset_f = { xoffset = "llx" }
-
--- Beware of updates in ssty slots!
+local dimensions = {
+ [0x1D453] = { .40, 1.60, .5 }, -- offset width italic
+-- [0x1D453] = { .0, 2, 0 }, -- offset width italic
+}
return {
name = "pagella-math",
@@ -12,28 +10,56 @@ return {
author = "Hans Hagen",
copyright = "ConTeXt development team",
mathematics = {
- dimensions = {
- default = {
- -- [0x1D453] = { xoffset = 162, width = 278 + 162 },-- 𝑓
- -- [0x1D453] = offset_f, -- 𝑓
- -- ["1:0x1D453"] = offset_f, -- needed for compact
- -- ["2:0x1D453"] = offset_f, -- needed for compact
--- ["*:0x1D453"] = offset_f, -- 𝑓
+ tweaks = {
+ aftercopying = {
+ { "version", "Version 1.632" },
+ -- { "action", function(target,original) mathematics.tweaks.fixdimensions(target, original, fixes) },
+ -- { "action", mathematics.tweaks.fixdimensions, fixes },
+ { "dimensions", dimensions },
},
},
- kerns = {
- -- [0x1D449] = kern_V, -- 𝑉
- -- ["1:0x1D449"] = kern_V, -- needed for compact
- -- ["2:0x1D449"] = kern_V, -- needed for compact
- -- [0x1D44A] = kern_W, -- 𝑊
- -- ["1:0x1D44A"] = kern_W, -- needed for compact
- -- ["2:0x1D44A"] = kern_W, -- needed for compact
--- ["*:0x1D453"] = kern_f,
- ["*:0x1D449"] = kern_V, -- 𝑉
- ["*:0x1D44A"] = kern_W, -- 𝑊
- },
alternates = {
dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
},
},
}
+
+-- local kern_V = { bottomright = { { kern = -200 } } }
+-- local kern_W = { bottomright = { { kern = -100 } } }
+-- ----- kern_f = { bottomright = { { kern = -100 } } }
+-- -- local offset_f = { xoffset = "llx" }
+--
+-- -- Beware of updates in ssty slots!
+--
+-- return {
+-- name = "pagella-math",
+-- version = "1.00",
+-- comment = "Goodies that complement pagella.",
+-- author = "Hans Hagen",
+-- copyright = "ConTeXt development team",
+-- mathematics = {
+-- dimensions = {
+-- default = {
+-- -- [0x1D453] = { xoffset = 162, width = 278 + 162 },-- 𝑓
+-- -- [0x1D453] = offset_f, -- 𝑓
+-- -- ["1:0x1D453"] = offset_f, -- needed for compact
+-- -- ["2:0x1D453"] = offset_f, -- needed for compact
+-- -- ["*:0x1D453"] = offset_f, -- 𝑓
+-- },
+-- },
+-- kerns = {
+-- -- [0x1D449] = kern_V, -- 𝑉
+-- -- ["1:0x1D449"] = kern_V, -- needed for compact
+-- -- ["2:0x1D449"] = kern_V, -- needed for compact
+-- -- [0x1D44A] = kern_W, -- 𝑊
+-- -- ["1:0x1D44A"] = kern_W, -- needed for compact
+-- -- ["2:0x1D44A"] = kern_W, -- needed for compact
+-- -- ["*:0x1D453"] = kern_f,
+-- ["*:0x1D449"] = kern_V, -- 𝑉
+-- ["*:0x1D44A"] = kern_W, -- 𝑊
+-- },
+-- alternates = {
+-- dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+-- },
+-- },
+-- }
diff --git a/tex/context/interface/mkii/keys-it.xml b/tex/context/interface/mkii/keys-it.xml
index 1cd5a3dcf..041a4265a 100644
--- a/tex/context/interface/mkii/keys-it.xml
+++ b/tex/context/interface/mkii/keys-it.xml
@@ -318,6 +318,7 @@
<cd:variable name='lefthanging' value='lefthanging'/>
<cd:variable name='leftmargin' value='marginesinistro'/>
<cd:variable name='leftpage' value='paginasinistra'/>
+ <cd:variable name='lefttext' value='testosinistro'/>
<cd:variable name='lefttoright' value='lefttoright'/>
<cd:variable name='legend' value='legenda'/>
<cd:variable name='less' value='less'/>
@@ -479,6 +480,7 @@
<cd:variable name='righthanging' value='righthanging'/>
<cd:variable name='rightmargin' value='marginedestro'/>
<cd:variable name='rightpage' value='paginadestra'/>
+ <cd:variable name='righttext' value='testodestro'/>
<cd:variable name='righttoleft' value='righttoleft'/>
<cd:variable name='roman' value='roman'/>
<cd:variable name='romannumerals' value='numeriromani'/>