now I experimented a little with the glyphs. I would suggest that we use
an 'idx' instead of an 'assoc' list, as there might be quite a lot of
So I put "glyphlist.txt" in "lib/", and this code in the beginning of
(use (L C)
(while (setq L (line))
(unless (= '"#" (car L))
L (split L '";")
C (char (hex (pack (cadr L))))
L (pack (car L)) )
(if (idx '*PsGlyph C T)
(push (car @) L)
(set C (cons L)) ) ) ) ) )
# "*PgX" "*PgY"
# "*DX" "*DY" "*Pos" "*Fonts" "*Size" "*Font" "*Pag" "*Lim" "*FF" "*UL"
This uses the characters directly as indexes into the tree (no numeric
conversion is needed later), and stores the glyph names in the values of
these transient symbols.
But now there are two things I don't understand:
1. You concatenated all names for glyphs with identical character code
into a single entry:
> (let A (assoc H *PsGlyph)
> (if A
> (con A (cons G (cdr A)))
> (push '*PsGlyph (list H G)) ) ) ) ) ) ) )
This is the case, for example, in
I'm doing the same above (the 'push'). But does that really make
sense? This would print all the names of a glyph when its character
code is processed.
2. There are entries in "glyphlist.txt" that have more than one numeric
value following the semicolon, like
lamedholamdagesh;05DC 05B9 05BC
What do these numbers mean? How is the resulting unicode to be
calculated? You wrote
> H (hex (pack (tail (- I) L))) )
but this surely won't work in such a multi-value case, right?
I tried it with the "app/" demo application. The german umlauts show up
correctly (even without using "bin/lat1").
But if I try the Russian locale, it seems that all characters within a
string are printed one over the other, all on the same spot. What might
be the reason?
I attach an experimental version of "lib/ps.l". For now, it simply
outputs the glyph name and 'glypshow' for any characters (i.e. also for
ASCII characters). I'll optimize that later.