CMAP2ENC
Section: fontools (1)
Updated: fontools
Index
Return to Main Contents
 
NAME
cmap2enc - convert glyph indices in a TrueType-flavored OpenType font to
Adobe glyph names
 
SYNOPSIS
cmap2enc [options] 
fontfile encoding
 
DESCRIPTION
Many TrueType-flavored OpenType fonts contain no glyph names.
When creating an 
afm file with 
ttf2afm, this causes all glyphs to be 
named something
like 
"index0x01E7", which makes the 
afm file almost useless for use with 
fontinst or 
afm2tfm.
cmap2enc uses the font's `cmap' table to map glyph indices to
Unicode values, and Adobe's glyphlist.txt file to map these to glyph names.
cmap2enc creates a new encoding file (for downloading with the font file) 
and a mtx file (for use with fontinst). The encoding file contains the 
same glyphs as the original one, but has all glyph names replaced with 
the corresponding glyph indices; the mtx file maps these glyph indices back 
to the original glyph names (it consists of many commands of the form
"\renameGlyph{index0x01E7}{Euro}", plus a definition of that 
"\renameGlyph" command).
Some of the glyph substitution features of OpenType fonts are supported; 
e.g. when the `smcp' (Small Caps) feature is specified, the glyph names 
of the lowercase glyphs will be mapped to the glyph indices of the 
small capitals.
A list of features supported by the font can be generated using the -p
option, see below.
 
EXAMPLES
NOTE: the 
examples/ subdirectory in the 
fontools distribution contains 
several complete examples of the use of 
cmap2enc and other tools from
the 
fontools collection.
- -
 - 
To display all scripts, languages and features supported by Linotype Palatino:
    cmap2enc -p pala.ttf
 - -
 - 
To install Linotype Palatino in T1 encoding, with oldstyle figures:
- 
- 1.
 - 
Generate an encoding file t1-tosf-pala.enc and a metrics file 
resetpala-t1-osf.mtx:
    cmap2enc -f onum pala.ttf t1.enc
 - 2.
 - 
Create an afm file for the font; this is done best using font2afm 
(also in the fontools collection):
    font2afm pala.ttf
 - 3.
 - 
Reencode the afm file using the t1-tosf-pala.enc encoding to create 
a `raw' font rlplrj9d, with either afm2afm (also in the fontools 
collection) or fontinst (but be warned that fontinst might take a long
time, and can even crash if the afm is really big):
    afm2afm -e t1-tosf-pala.enc -o rlplrj9d.afm pala.afm
or
    \transformfont{rlplrj9d}{\reencodefont{t1-tosf-pala}{\fromafm{pala}}}
 - 4.
 - 
Create a `value-added' vpl file from this raw font by adding 
ligatures, faking missing glyphs etc. with fontinst:
    \installfont{lplrj9d}{rlplrj9d,resetpala-t1-tosf,newlatin}
        {t1}{T1}{lplj}{m}{n}{}
 
 
- 
 
 
 
OPTIONS
cmap2enc supports the following command-line options:
- -p
 - 
Print some info about the font, plus a list of all scripts, languages and 
features contained in this font's GSUB table; then exit. (When using
this option, the encoding need not be specified.)
 - -f feature[,feature]*
 - 
Use the specified features when matching glyph indices to glyph names. 
Multiple features can be specified as a comma-separated list, 
without spaces between the items.
 - -x extra
 - 
Use the user-specified substitutions from extra (see below).
 - -l language
 - 
Select the specified language. The default is `DFLT' (surprise!).
 - -s script
 - 
Select the specified script. The default is `latn'.
 
 
FILES
All input files are searched using 
kpsewhich or 
findtexmf when these 
commands are available; otherwise only the current working directory 
is searched.
- fontfile
 - 
The font file can be any OpenType font, though cmap2enc is probably only 
useful for the TrueType-flavored variant (PostScript-flavored ones always 
contain glyph names in the `CFF' table).
 - encoding
 - 
The encoding files read and written by cmap2enc are in standard dvips 
format. The name of the output encoding file is 
"<encoding>-<suffix>-<font>.enc", 
where
- 
- encoding
 - 
is the name of the input encoding file (without the extension `.enc');
 - suffix
 - 
names the OpenType features you specified:
- 
- tlf
 - 
for tabular lining figures (when neither the `onum' nor the `pnum' features
have been chosen)
 - lf
 - 
for proportional width lining figures (when you've specified `pnum', 
but not `onum')
 - tosf
 - 
for tabular oldstyle figures (when you've specified `onum', but not `pnum')
 - osf
 - 
for proportional width oldstyle figures (when both `onum' and `pnum' have been 
chosen)
 - sc
 - 
for small caps (`smcp' feature)
 - swash
 - 
for swash (`swsh' feature)
 - titling
 - 
for a titling font (`titl' feature)
 - sup
 - 
for superior figures and (some) letters (`sups' feature)
 - orn
 - 
for ornaments (`ornm' feature)
 
 
- 
When several features have been specified, the suffix is a combination
of the appropriate items; e.g., when you specify -f onum,pnum,swsh (for a 
swash font with proportional oldstyle figures) the suffix is
"osf-swash".
 
 - font
 - 
is the name of the input font file, without the `.ttf' or `.otf' extension.
 
 
- 
 
 - mtx
 - 
The output mtx file is in standard fontinst format. The name of this file 
is "reset<font>-<encoding>-<suffix>.mtx", 
where font, encoding and suffix have the same meaning as above.
 - extra
 - 
The option -x can be used to name a file containing extra substitutions 
that complement or override the ones specified by the selected features. 
It consists of one substitution per line; each is either of the form 
"<from>;<to>", where from and to are both glyph indices
(specified as four hexadecimal digits), or of the form 
"<glyph name>;<glyph index>", where glyph name is any glyph name
and glyph index the glyph index (again, four hex digits) that is to be
mapped to the specified glyph name. The examples/ subdirectory in the 
fontools distribution contains some examples of user-defined 
substitution files.
 
 
CAVEATS
- -
 - 
Most OpenType fonts contain several tables in the `cmap' table, 
for different platforms and different encodings. 
cmap2enc only reads the first table that implements Unicode, that is, 
the first table with either platformID = 0 and encodingID = 3 or 4 
or platformID = 3 and encodingID = 1 or 10.
At least one of those will probably always be present, and (afaik) it doesn't
matter which of these is used.
The fact that only tableFormat = 4 is supported might be more of a restriction, 
though I haven't yet found any font that used a different tableFormat.
 - -
 - 
OpenType fonts implement features using so-called `Lookup Tables'. 
cmap2enc supports only features from the `GSUB' table that have
LookupType = 1 (single substitution).
Some features are implemented as a combination of lookups from both 
the `GSUB' and the `GPOS' tables; these features are (currently?)
not supported. An example of this are the `sinf' (Scientific Inferiors) and 
'subs' (Subscripts) features of Linotype Palatino; these are implemented 
by first replacing the standard numerals with smaller ones and then 
adjusting their position.
 - -
 - 
Some of the font's features may yield surprising results. E.g., Linotype
Palatino doesn't have small-caps forms of dotlessi, germandbls and the
standard f-ligatures, so it will give you the lowercase forms of these glyphs
even when the `smcp' feature is specified. 
(The examples/palatinox subdirectory contains a file unsetSCaps.mtx 
that deletes these lowercase forms; fontinst's newlatin.mtx file 
will then create fake small-caps forms of these glyphs.)
 - -
 - 
If the user-defined substitution file substitutes glyph1 with glyph2, 
cmap2enc will also substitute glyph2 with glyph2; this may seem silly,
but it means that any selected feature that would substitute glyph2 with glyph3
gets overridden.
 - -
 - 
The glyph names are independent of the features selected, e.g., when using 
features like `smcp' or `onum', glyph names still come out as `a' and `zero'
rather than `Asmall' and `zerooldstyle'. When installing the font with
fontinst, you should therefore always use t1.etx rather than t1c.etx
or t1j.etx.
 
 
SEE ALSO
The other programs in the 
fontools bundle: 
afm2afm, 
autoinst, 
font2afm, 
ot2kpx, 
pfm2kpx, 
showglyphs.
A good free (as in beer) Perl-implementation for Windows (and Linux)
is ActivePerl, available from http://www.activestate.com.
 
AUTHOR
Marc Penninga <
marc@penninga.info>
If you're sending a bug report, please give as much information as possible.
Also be sure to mention the name fontools somewhere in the subject line,
or risk being caught by my spam filter.
 
COPYRIGHT
Copyright (c) 2005, 2006 Marc Penninga. 
 
LICENSE
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the 
GNU General Public License 
as published by the Free Software Foundation.
A copy of the GNU General Public License is included with the fontools 
collection; see the file GPLv2.txt.
 
DISCLAIMER
This program is distributed in the hope that it will be useful,
but 
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or 
FITNESS FOR A 
PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
HISTORY
- 2006-01-17
 - 
Changed the names of the generated output files; extended the documentation.
 - 2005-08-01
 - 
Removed some warning messages that didn't convey any useful information; 
added contents of glyphlist.txt to the program itself and removed
the file from the fontools collection; 
expanded the example in the documentation
 - 2005-04-29
 - 
Improved the documentation
 - 2005-03-21
 - 
Fixed somed bugs; added `titl' feature
 - 2005-03-15
 - 
Input files searched using kpsewhich or findtexmf
 - 2005-03-08
 - 
Input files searched via kpsewhich (where available)
 - 2005-02-18
 - 
Rewrote some of the code, fixed a few bugs
 - 2005-01-10
 - 
First version
 
 Index
- NAME
 - 
 - SYNOPSIS
 - 
 - DESCRIPTION
 - 
 - EXAMPLES
 - 
 - OPTIONS
 - 
 - FILES
 - 
 - CAVEATS
 - 
 - SEE ALSO
 - 
 - AUTHOR
 - 
 - COPYRIGHT
 - 
 - LICENSE
 - 
 - DISCLAIMER
 - 
 - HISTORY
 - 
 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved