Font::TTF::Cmap(3) User Contributed Perl Documentation Font::TTF::Cmap(3)

# [NAME](#NAME)

Font::TTF::Cmap - Character map table

# [DESCRIPTION](#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](#INSTANCE_VARIABLES)

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

[Num](#Num)

Number of subtables in this table

[Tables](#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](#Platform)

The platform number for this subtable

[Encoding](#Encoding)

The encoding number for this subtable

[Format](#Format)

Gives the stored format of this subtable

[Ver](#Ver)

Gives the version (or language) information for this subtable

[val](#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](#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](#METHODS)

## [$t-&gt;read](#$t)

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

## [$t-&gt;ms\_lookup($uni)](#$t~2)

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-&gt;find\_ms](#$t~3)

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-&gt;ms\_enc](#$t~4)

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

## [$t-&gt;out($fh)](#$t~5)

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

## $t-&gt;XML\_element($context, $depth, $name, $val)

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

## [$t-&gt;**minsize()**](#$t~6)

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-&gt;update](#$t~7)

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-&gt;reverse(%opt)](#@map_=_$t)

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

[tnum](#tnum)

Table number to use rather than the default Unicode table

[array](#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)](#is_unicode%28$index%29)

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

# [BUGS](#BUGS)

•

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

# [AUTHOR](#AUTHOR)

Martin Hosken &lt;http://scripts.sil.org/FontUtils&gt;.

# [LICENSING](#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.

2026-09-25 perl v5.44.0

---

Document: Font::TTF::Cmap(3pm) from perl-font-ttf 1.06-r0 (Chainguard OS)
