Ulrike Fischer news3 at nililand.de
Mon Feb 21 17:04:39 CET 2011

Am Sun, 20 Feb 2011 18:48:52 +0200 schrieb Khaled Hosny:

> Another way to patch the fonts is to do something like:
>
> \directlua{
>  local function chess(tfmdata,value)
>      if value then
>      % whatever
>      end
>  end
>  table.insert(fonts.triggers,"chess")
>  fonts.initializers.base.otf.chess = chess
>  fonts.initializers.node.otf.chess = chess
> }
> \font\test=name:foo:chess=yes at 15pt
> \test foo
> \bye
>
> This way you can control which fonts to be processed, and "chess" option
> can take any value so your code might even do different patching
> conditionally (this should work for ConTeXt as well).

This seems to work great. I even can declare the font in the normal
latex way:

\documentclass{article}
\usepackage[LSF,T1]{fontenc}
\DeclareFontFamily{LSF}{skaknewOTF}{}
\DeclareFontShape{LSF}{skaknewOTF}{m}{n}{<->
file:SkakNew-Figurine.otf:chess=yes}{}

\directlua{
local function chess(tfmdata,value)
if value then
tfmdata.indices[75]=14
table.tofile("filechess.lua", tfmdata, true)
end
end
table.insert(fonts.triggers,"chess")
fonts.initializers.base.otf.chess = chess
fonts.initializers.node.otf.chess = chess
}

\begin{document}
\fontfamily{skaknewOTF}\fontencoding{LSF}\selectfont KQ
\end{document}

> BTW, you can save "tfmdata" to a file using:
>   table.tofile("file.lua", tfmdata, true)
>
> If you want to inspect its structure.

Well here starts the problems. I can see the structure, but how can
I understand it? Which tables and table entries do I have to copy to
get a clean reencoding? Above I set the "indices" to copy the queen
to the "K" (which normally shows a king in this font). But I doubt
that the bounding box and other things are correct.

Also the tfmdata seems to contain a lot of data more than once. E.g.
"indices" exist also in the luatex table.

--
Ulrike Fischer