---
name: "cmap2enc"
section: "1"
platform: "linux"
package: "texlive-font-utils"
version: "2009-10+squeeze1"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/cmap2enc"
---

# cmap2enc(1)

convert glyph indices in a TrueType-flavored OpenType font to Adobe glyph names

## 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
