multiple glyph naming schemes & re-encoding

Vladimir Volovich vvv@vvv.vsu.ru
12 Aug 1998 14:29:09 +0400


Dear fontinst experts, :-)

i'd like to discuss a problem of supporting the fonts with
non-standard glyph naming schemes in fontinst. For example, there are
several widely used glyph naming schemes in cyrillic type1 fonts:
e.g., adobe (which uses afii scheme), monotype, and some other. A lot
of latin fonts also have some variants of naming that-or-another
glyph.

I would like to have one mtx file per glyph set (latin, cyrillic),
which supports all glyph naming schemes and variants, and one etx file
per encoding, which does not depend on the glyph naming schemes.

An attempt of creation of such files for the new cyrillic standard TeX
font encodings was made in our T2 package (available at
CTAN:macros/latex/contrib/supported/t2/cyrfinst).

Suppose that the AFM files contain names like "variant1", "variant2",
etc for some glyph with abstract name "abstract_name".

It seems that it is not sufficient to use something like the following
in mtx file:

\setglyph{abstract_name}
  \ifisglyph{variant1}\then\glyph{variant1}{1000}\fi
  \ifisglyph{variant2}\then\glyph{variant2}{1000}\fi
  ...
\endsetglyph

and in etx file:

\setslot{abstract_name}
\endsetslot

This approach will not work when the re-encoding is needed, and the
glyph "variant*" will appear "unencoded" (i.e., it will be
not-variant1 or not-variant2, etc).

In this case the \reencodefont will not include a "real" glyph
"variant1" into the encoding, because it will be mentioned as
"abstract_name" in the etx file [however, some information on which
glyphs are needed in the encoding can be extracted after processing
the mtx file, because the definition of the glyph "abstract_name" will
contain inside of it some glyph with name "variant1". So, maybe
fontinst should be corrected/extended to deal with this, so that the
above scheme will work for reencoding].

To make cyrillic fontinst files work, a change in fontinst.sty is
needed. Namely, the \setslot command should be redefined as follows:

\def\setslot#1{\edef\slot_name{#1}\expandafter\ifx\csname GN@\slot_name\endcsname\relax\else
\edef\slot_name{\csname GN@\slot_name\endcsname}\fi\do_slot}

This change is to add the support for various glyph naming schemes in
AFM files, and this can be used for other situations (not only for
cyrillic). This change (hopefully) does not affect other encodings
(non-cyrillic).

In this case, the mtx file will define a csname \GN@abstract_name to
be expanded to the glyph name actually used in AFM file. And the etx
file will check whether the csname \GN@abstract_name is defined, and
if so, it will use the name which appears after expansion of
\GN@abstract_name. Otherwise, it will use the original name
("abstract_name"). Some other commands also should probably be made
aware of these changes (e.g., ligature commands) to produce correct
results.

I may be totally wrong, because my experience with fontinst is very
limited yet. So, please correct me if all the above is not needed and
there exists a simple approach to solve this problem.

Any input is greatly appreciated.

	Best regards, -- Vladimir.