summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/lpdf-lmt.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/lpdf-lmt.lmt')
-rw-r--r--tex/context/base/mkxl/lpdf-lmt.lmt60
1 files changed, 44 insertions, 16 deletions
diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt
index f6cf9f072..81df491c2 100644
--- a/tex/context/base/mkxl/lpdf-lmt.lmt
+++ b/tex/context/base/mkxl/lpdf-lmt.lmt
@@ -186,7 +186,7 @@ end
-- fonts
local fontcharacters
-local fontdescriptions
+----- fontdescriptions
local fontparameters
local fontproperties
local pdfcharacters
@@ -237,7 +237,7 @@ local tjfactor = 100 / 65536
function flushers.updatefontstate(font)
fontcharacters = characters[font]
- fontdescriptions = descriptions[font]
+ -- fontdescriptions = descriptions[font]
fontparameters = parameters[font]
fontproperties = properties[font]
local size = fontparameters.size -- or bad news
@@ -468,23 +468,55 @@ 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 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]
+ local e = d and d[char]
if e then
- w = e.width or 0
+ w = e.width
+ if w then
+ w = w * f
+ end
end
if not w then
- e = d and d[char]
+ e = c and c[char]
if e then
- w = e.width
- if w then
- w = w * f
- end
+ w = e.width or 0
end
end
if not w then
@@ -611,7 +643,7 @@ do
return v
end)
- -- local trace_threshold = false trackers.register("backends.pdf.threshold", function(v) trace_threshold = v end)
+ local trace_threshold = false trackers.register("backends.pdf.threshold", function(v) trace_threshold = v end)
-- local f_skip = formatters["%.2N"]
@@ -624,16 +656,15 @@ do
pdf_goto_textmode()
setup_fontparameters(font,factor,f,e,sx,sy)
set_font()
- elseif cur_f ~= f then -- when ok move up
+ elseif cur_f ~= f then -- when ok move up (maybe no longer needed)
pdf_goto_textmode()
setup_fontparameters(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_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)
need_tm = true
end
-
local move = calc_pdfpos(pos_h,pos_v)
if trace_threshold then
@@ -691,7 +722,6 @@ do
if mode == "chararray" then
begin_charmode()
end
-
cw = cw + naturalwidth[char] * tmef * f_x_scale
local slot = pdfcharacters[data.index or char] -- registers usage
@@ -2174,7 +2204,6 @@ do
objnum = objnum,
immediate = true,
nolength = nolength,
--- compresslevel = compressed == false and 0 or nil,
compresslevel = compressed,
type = "stream",
string = data,
@@ -2190,7 +2219,6 @@ do
return pdfdeferredobject {
objnum = objnum,
immediate = true,
--- compresslevel = compressed == false and 0 or nil,
compresslevel = compressed,
type = "stream",
file = filename,