---
name: "Font::TTF::Cmap"
section: "3pm"
platform: "linux"
package: "perl-font-ttf"
version: "1.06-6"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Font::TTF::Cmap"
---

# Font::TTF::Cmap(3pm)

Character map table

## NAME

Font::TTF::Cmap - Character map table

## DESCRIPTION

Looks after the character map. For ease of use, the actual cmap is held in a hash against codepoint. Thus for a given table:

```
    $gid = $font->{'cmap'}{'Tables'}[0]{'val'}{$code};
```

Note that `$code` should be a true value (0x1234) rather than a string representation.

## INSTANCE VARIABLES

The instance variables listed here are not preceded by a space due to their emulating structural information in the font.

- Num

  Number of subtables in this table

- Tables

  An array of subtables (\[0..Num-1\])

  Each subtable also has its own instance variables which are, again, not preceded by a space.

  - Platform

    The platform number for this subtable

  - Encoding

    The encoding number for this subtable

  - Format

    Gives the stored format of this subtable

  - Ver

    Gives the version (or language) information for this subtable

  - val

    A hash keyed by the codepoint value (not a string) storing the glyph id

The following cmap options are controlled by instance variables that start with a space:

- allowholes

  By default, when generating format 4 cmap subtables character codes that point to glyph zero (normally called .notdef) are not included in the subtable. In some cases including some of these character codes can result in a smaller format 4 subtable. To enable this behavior, set allowholes  to non-zero.

## METHODS

### $t-\>read

Reads the cmap into memory. Format 4 subtables read the whole subtable and fill in the segmented array accordingly.

### $t-\>ms\_lookup($uni)

Finds a Unicode table, giving preference to the MS one, and looks up the given Unicode codepoint in it to find the glyph id.

### $t-\>find\_ms

Finds the a Unicode table, giving preference to the Microsoft one, and sets the `"mstable"` instance variable to it if found. Returns the table it finds.

### $t-\>ms\_enc

Returns the encoding of the microsoft table (0 =\> symbol, etc.). Returns undef if there is no Microsoft cmap.

### $t-\>out($fh)

Writes out a cmap table to a filehandle. If it has not been read, then just copies from input file to output

### $t-\>XML\_element($context, $depth, $name, $val)

Outputs the elements of the cmap in XML. We only need to process val here

### $t-\>minsize()

Returns the minimum size this table can be in bytes. If it is smaller than this, then the table must be bad and should be deleted or whatever.

### $t-\>update

Tidies the cmap table.

Removes MS Fmt12 cmap if it is no longer needed.

Removes from all cmaps any codepoint that map to GID=0. Note that such entries will be re-introduced as necessary depending on the cmap format.

### @map = $t-\>reverse(%opt)

Returns a reverse map of the Unicode cmap. I.e. given a glyph gives the Unicode value for it. Options are:

- tnum

  Table number to use rather than the default Unicode table

- array

  Returns each element of reverse as an array since a glyph may be mapped by more than one Unicode value. The arrays are unsorted. Otherwise store any one unicode value for a glyph.

### is\_unicode($index)

Returns whether the table of a given index is known to be a unicode table (as specified in the specifications)

## BUGS

- •

  Format 14 (Unicode Variation Sequences) cmaps are not supported.

## AUTHOR

Martin Hosken \<http://scripts.sil.org/FontUtils\>.

## LICENSING

Copyright (c) 1998-2016, SIL International (http://www.sil.org)

This module is released under the terms of the Artistic License 2.0.  For details, see the full text of the license in the file LICENSE.
