On 22-2-2011 4:22, Ulrike Fischer wrote:
Hello,
Khaled had another idea to manipulate (reencode) fonts: He suggested to put a function in fonts.trigger. (Example below). I have some questions regarding this example:
I'll add the following to the luatex-fonts code. It demonstrates how to use postprocessing hooks. (It should work with the current code, unless you define multiple mapping of the same font, for which i've added a patch). \startluacode local reencodings = { } fonts.enc.reencodings = reencodings local function specialreencode(tfmdata,value) -- we forget about kerns as we assume symbols and we -- could issue a message if ther are kerns but it's -- a hack anyway so we odn't care too much here local encoding = value and reencodings[value] if encoding then local temp = { } local char = tfmdata.characters for k, v in next, encoding do temp[k] = char[v] end for k, v in next, temp do char[k] = temp[k] end -- if we use the font otherwise luatex gets confused so -- we return an additional hash value for fullname return string.format("reencoded:%s",value) end end local function reencode(tfmdata,value) tfmdata.postprocessors = tfmdata.postprocessors or { } table.insert(tfmdata.postprocessors, function(tfmdata) return specialreencode(tfmdata,value) end ) end table.insert(fonts.manipulators,"reencode") fonts.initializers.base.otf.reencode = reencode \stopluacode \startluacode fonts.enc.reencodings["mychess"] = { [75] = 81, [81] = 75, } \stopluacode \starttext {\font\test=file:SkakNew-Figurine.otf at 50pt \test QK \par} {\font\test=file:SkakNew-Figurine.otf:reencode=mychess at 50pt \test QK \par} \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 -----------------------------------------------------------------