summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/math-act.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/math-act.lmt')
-rw-r--r--tex/context/base/mkxl/math-act.lmt79
1 files changed, 73 insertions, 6 deletions
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