Am Tue, 22 Feb 2011 18:05:58 +0100 schrieb Hans Hagen:
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:
1. Is there a basic flaw in the idea?
When triggers are done, there are only empty entries in the characters table so swapping them has no effect. You can add info to them but some entries in them will be added when scaling takes place.
For which entries can this be a problem?
5. What is the recommanded lua-code to copy/reassign/remap the tables? Does a library or some helper functions exist which would make it easier to move the tables around?
For basemode reencoding you can use the changed subtable:
\starttext
\directlua{ local function chess(tfmdata,value) if value then tfmdata.changed[75] = 81 tfmdata.changed[81] = 75 end end table.insert(fonts.triggers,"chess") fonts.initializers.base.otf.chess = chess }
\start \font\TestA="file:SkakNew-Figurine.otf:chess=yes" \TestA\char75 \char81 \par \font\TestB="file:SkakNew-Figurine.otf:chess=no" \TestB\char75 \char81 \par \stop
\stoptext
That works fine - even with luaotfload and latex (after I understood that "basemode" means that I must call the font with "mode=base"). But curiously the dimens of the char change a bit in latex. E.g. \showthe\fontcharwd reports without the reencoding 8.99998pt, and 9.0pt with the reencoding. In context I get in both cases 9.0pt. Is it possible to swap (or set) the "tounicode" value at his time so that copy&paste gives again a "K" for the king and a "Q" for the queen? -- Ulrike Fischer