[NTG-context] manipulate ttf-fonts loaded with luatex

Ulrike Fischer news3 at nililand.de
Tue Nov 2 16:16:39 CET 2010


Am Thu, 28 Oct 2010 20:56:41 +0200 schrieb Hans Hagen:

 
>> Hm. I do have a bit the impression as if we have here a context and
>> latex philosophy clash. I'm not asking you to provide a funktion
 
> Huh? I'm not sure what philosophy refers to, 

Well I refer to sentences like this:
 
> Sure, but the first complaints would end up in ... my 
> mailbox unless your package is private .... 

> The fact that it's custom in latex to overload code and 
> thus create a maintaince depency does not mean that I want such a 
> dependency on my code.

Unlike context latex is decentral. Reponsability is splitted. And so
no one would feel that I'm a thread for "their" code or to their
support burden if I would announce a package.  Nobody would feel the
urge to take away the task from me for fear that I break something. 

Anyway: I'm writing latex packages. Whatever I will do: no context
user will be affected by my code.  


> > Couldn't you give some examples how to manipulate a font after it
> > has been defined with \font\test (if it is possible) and then let me
> > play around?

...

> 
> Anyhow, you can access some font data afterwards. In context form:
> 
>      \startluacode
>          function Whatever(name)
>              for k, v in pairs(fonts.ids[font.current()].descriptions) do
>                  if v.name == name then
>                      tex.sprint("\\char"..k.."\\relax")
>                      break
>                  end
>              end
>          end
>      \stopluacode
>      \font\test=file:pirat.ttf
>      \def\MyChessChar#1{{\test\directlua{Whatever("#1")}}}
>      \MyChessChar{c160}
> 
> This is dead slow and inefficient but as you don't want a proper 
> function for it I don't care too much. 

This is an interesting piece of code but not actually what I asked
for. I don't need to loop through the font to find out the correct
\char-command connected to a glyph. I can look it up in fontforge
and store it in a table. I need a way to reencode/reorder the font,
so that the input "K" points to the glyph "c140". Pirat is not the
only chessfont I have, I don't want to change the input if I change
the font, so every chessfont should have the same internal order.

My main problem is that they are so few informations about the
generic context font loader code. E.g. after the rereading of the
luatex manual I came up with the following:

\starttext
\font\test={file:PIRAT.TTF}
\test
%K\char75\char140\char140

\directlua{
mytable=font.fonts[font.id('test')]
mytable.characters[75],mytable.characters[140]=mytable.characters[140],mytable.characters[75]
tex.definefont("testb",font.define(mytable))
}

\testb
K\char75\char140\char140
\stoptext

Then input "K" gives me (as wanted) a king. 

But it leads to questions:

1. Why is the spacing in \testb wrong if the chars have been already
used after \test?

2. Which values/tables in mytable should I reset/change too to get a
"sane" font \testb?

3. I can also use "mytable=fonts.ids[font.id('test')]". Is this
better? What are the differences?


> Interesting is that it does not  work out (as wis to be expected
> as the normal glyph access function does something similar).

? I didn't understand this remark. If you mean that you didn't get
an output: There is nothing at position 160. The king is c140.


-- 
Ulrike Fischer 



More information about the ntg-context mailing list