On 10/11/2014 5:07 PM, Mittelbach, Frank wrote:
while trying to make Taco's linebreaker code I came across some behavior
that I found rather weird
in essense it looks as if \rpcode is not ending up in the char table
unless \lpcode for the same char is set first (and non-zero)
\pdfprotrudechars=1
%\lpcode\font 50 = 1
\rpcode\font 50 = 200
\efcode\font 50 = 333
\directlua{
local function FMItable (name,t)
print ("---- looking at table ", name, tostring(t))
for k, v in pairs(t) do
print(" ", k,"=", tostring(v))
end
print("----------------")
end
FMItable("char 50",font.fonts[font.current()].characters[50])
}
\bye
--------------------
if you uncomment the lpcode line then both values show up. But what is
puzzling me even more is that if I change the values and then run this
directlua bit again, nothing changes (could of course be that I should
define FMItable differently but ...
anybody any clue?
sure .. the table that you see is a cached one and if you change a rp
value after the font definition it is not reflected in there
see page 158 of luatex manual : cache field in passed tfm data tbale
keep in mind that normally one will only set the protrusion values when
a font is loaded because once a font is used they are frozen
(currently these values are em related but at some point they might
become glyph width related)
\starttext
\directlua{
function fonts.constructors.aftercopyingcharacters(target,original)
target.cache = "renew"
end
}
\pdfprotrudechars=1
\font\foo = LMRoman10-Regular*default,quality at 12.3pt
\foo
\lpcode\foo 45 = 2000\relax
\rpcode\foo 45 = 2000\relax
\efcode\foo 45 = 4000\relax
\directlua{
print("data at tex end")
inspect(font.fonts [font.current()].characters[45])
print("original passed data")
inspect(fonts.hashes.identifiers[font.current()].characters[45])
}
test
\stoptext
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
| www.pragma-pod.nl
-----------------------------------------------------------------