summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/font-con.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/font-con.lmt')
-rw-r--r--tex/context/base/mkxl/font-con.lmt85
1 files changed, 37 insertions, 48 deletions
diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt
index 3310242a8..b36f18dfa 100644
--- a/tex/context/base/mkxl/font-con.lmt
+++ b/tex/context/base/mkxl/font-con.lmt
@@ -254,6 +254,24 @@ local function fixedpsname(psname,fallback)
return usedname, psname ~= usedname
end
+local function scaleparts(parts,delta)
+ local t = { }
+ for i=1,#parts do
+ local p = parts[i]
+ local s = p["start"] or 0
+ local e = p["end"] or 0
+ local a = p["advance"] or 0
+ t[i] = {
+ ["start"] = s == 0 and 0 or s * delta,
+ ["end"] = e == 0 and 0 or e * delta,
+ ["advance"] = a == 0 and 0 or a * delta,
+ ["extender"] = p["extender"],
+ ["glyph"] = p["glyph"],
+ }
+ end
+ return t
+end
+
function constructors.scale(tfmdata,specification)
local target = { } -- the new table
--
@@ -567,9 +585,7 @@ function constructors.scale(tfmdata,specification)
--
for unicode, character in next, characters do
local chr, description, index
-
-- todo: add description entry to char entry instead of index ... saves elsewhere too
-
if changed then
local c = changed[unicode]
if c and c ~= unicode then
@@ -670,48 +686,17 @@ function constructors.scale(tfmdata,specification)
if hasmath then
--
-- todo, just operate on descriptions.math
- local vn = character.next
- if vn then
- chr.next = vn
- else
- local vv = character.vvariants
- if vv then
- local t = { }
- for i=1,#vv do
- local vvi = vv[i]
- local s = vvi["start"] or 0
- local e = vvi["end"] or 0
- local a = vvi["advance"] or 0
- t[i] = { -- zero check nicer for 5.3
- ["start"] = s == 0 and 0 or s * vdelta,
- ["end"] = e == 0 and 0 or e * vdelta,
- ["advance"] = a == 0 and 0 or a * vdelta,
- ["extender"] = vvi["extender"],
- ["glyph"] = vvi["glyph"],
- }
- end
- chr.vvariants = t
- else
- local hv = character.hvariants
- if hv then
- local t = { }
- for i=1,#hv do
- local hvi = hv[i]
- local s = hvi["start"] or 0
- local e = hvi["end"] or 0
- local a = hvi["advance"] or 0
- t[i] = { -- zero check nicer for 5.3
- ["start"] = s == 0 and 0 or s * hdelta,
- ["end"] = e == 0 and 0 or e * hdelta,
- ["advance"] = a == 0 and 0 or a * hdelta,
- ["extender"] = hvi["extender"],
- ["glyph"] = hvi["glyph"],
- }
- end
- chr.hvariants = t
- end
- end
- -- todo also check mathitalics (or that one can go away)
+ local nxt = character.next
+ if nxt then
+ chr.next = nxt
+ end
+ local vparts = character.vparts
+ if vparts then
+ chr.vparts = scaleparts(vparts,vdelta)
+ end
+ local hparts = character.hparts
+ if hparts then
+ chr.hparts = scaleparts(hparts,hdelta)
end
local vi = character.vitalic
if vi and vi ~= 0 then
@@ -742,14 +727,18 @@ function constructors.scale(tfmdata,specification)
chr.italic = vi*hdelta
end
end
- local ft = character.options
- if ft then
- chr.options = ft
- end
+ -- local ft = character.options
+ -- if ft then
+ -- chr.options = ft
+ -- end
local sm = character.smaller
if sm then
chr.smaller = sm
end
+ local fa = character.flataccent
+ if fa then
+ chr.flataccent = fa
+ end
elseif autoitalicamount then -- itlc feature
local vi = description.italic
if not vi then