The Type 2 Charstring Format

td width=10 nowrap>Yahoo! is not affiliated with the authors of this page or responsible for its content.
The Type 2 Charstring Format
The Type 2
Charstring Format

Technical Note #5177
16 March 2000

Adobe
Developer Support

PN LPS5177

®
®
®

Adobe
Systems Incorporated
Adobe
Developer Technologies
345 Park Avenue
San Jose, CA 95110
http://partners.adobe.com/
Copyright

19961998, 2000 by Adobe Systems Incorporated. All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmit-
ted, in any form or by any means, electronic, mechanical, photocopying, recording, or
otherwise, without the prior written consent of the publisher.
PostScript is a trademark of Adobe Systems Incorporated. All instances of the name Post-
Script in the text are references to the PostScript language as defined by Adobe Systems
Incorporated unless otherwise stated. The name PostScript also is used as a product
trademark for Adobe Systems implementation of the PostScript language interpreter.
Any references to a PostScript printer, a PostScript file, or a PostScript driver refer
to printers, files, and driver programs (respectively) which are written in or support the
PostScript language. The sentences in this book that use PostScript language as an
adjective phrase are so constructed to reinforce that the name refers to the standard
language definition as set forth by Adobe Systems Incorporated.
Adobe
, Adobe Type Manager, ATM, Display PostScript, PostScript and the PostScript
logo are trademarks of Adobe Systems Incorporated which may be registered in certain
jurisdictions. Apple and Macintosh are registered trademarks and QuickDraw and True-
Type are trademarks of Apple Computer Incorporated. Microsoft and Windows are reg-
istered trademarks of Microsoft Corporation. All other brand or product names are the
trademarks or registered trademarks of their respective holders.

This publication and the information herein is furnished AS IS, is subject to change with-
out notice, and should not be construed as a commitment by Adobe Systems Incorpo-
rated. Adobe Systems Incorporated assumes no responsibility or liability for any errors
or inaccuracies, makes no warranty of any kind (express, implied or statutory) with
respect to this publication, and expressly disclaims any and all warranties of merchant-
ability, fitness for particular purposes and noninfringement of third party rights.
iii

Contents

The Type 2 Charstring Format

5
1
Introduction 5
2
Type 2 Charstrings 5
Hints 6
The Flex Mechanism 8
Subroutines 9
3
Charstring Encoding 10
Type 2 Charstring Organization 10
Charstring Number Encoding 12
Charstring Operator Encoding 14
4
Charstring Operators 14
Path Construction Operators 15
Operator for Finishing a Path 21
Hint Operators 21
Arithmetic Operators 26
Storage Operators 27
Conditional Operators 28
Subroutine Operators 28

Appendix A
Type 2 Charstring Command Codes

31

Appendix B Type 2 Charstring
Implementation Limits

33

Appendix C
Compatibility and Deprecated Operators

35

Appendix D
Changes Since Earlier Versions

37
iv
(16 Mar 00)
5

The Type 2
Charstring Format

1 Introduction

The Type 2 format provides a method for compact encoding of
glyph procedures in an outline font program. Type 2 charstrings
must be used in a CFF (Compact Font Format) or OpenType font
le to create a complete font program.
This document only describes how Type 2 charstrings are
encoded, and does not attempt to explain the reasons for
choosing various options. Type 2 charstrings are based on Type 1
font concepts, and this document assumes familiarity with the
Type 1 font format specication. For more information, please
see

Adobe
Type 1 Font Format, Version 1.1

(Addison Wesley,
1991). Also, familiarity with the CFF format is assumed; please
see Adobe Technical Note #5176, The Compact Font Format
Specication.
Compared to the Type 1 format, the Type 2 encoding offers
smaller size and an opportunity for better rendering quality and
performance. The Type 2 charstring operators are (with one
exception) a superset of the Type 1 operators. With proper
conversion programs, valid Type 1 font programs (that is, those
compatible with Adobe Type Manager

®

software) can be
converted to Type 2 font programs, and Type 2 programs can be
converted to Type 1 font programs, without loss of information
or rendering quality.

2 Type 2 Charstrings

The following sections describe the general concepts of
encoding a Type 2 charstring.
6
(16 Mar 00)

2.1 Hints

The Type 2 charstring format supports six hint operators:

hstem

,

vstem

,

hstemhm

,

vstemhm

,

hintmask

, and

cntrmask

. The hint
information must be declared at the beginning of a charstring
(see section 3.1) using the

hstem

,

hstemhm

,

vstem

, and


vstemhm

operators, each of which may each take arguments
for multiple stem hints.
Type 2 hint operators aid the rasterizer in recognizing and
controlling stems and counter areas within a glyph. A stem
generally consists of two positions (edges) and the associated
width.

Edge

stem hints help to control character features where
there is only a single edge (see section 4.3).
The Type 2 format includes edge hints, which are equivalent to
the Type 1 concept of ghost hints (see section on ghost hints,
page 57, of Adobe Type 1 Font Format). They are used to
locate an edge rather than a stem that has two edges. A stem
width value of 20 is reserved for a top or right edge, and a
value of 21 for a bottom or left edge. The operation of hints
with other negative width values is undened.

hintmask

The

hintmask

operator has the same function as that described
in Changing Hints within a Character, section 8.1, page 69, of
Adobe
Type 1 Font Format. It provides a means for activating
or deactivating stem hints so that only a set of non-overlapping
hints are active at one time.
The

hintmask

operator is followed by one or more data bytes
that specify the stem hints which are to be active for the
subsequent path construction. The number of data bytes must
be exactly the number needed to represent the number of
stems in the original stem list (those stems specied by the

hstem

,

vstem

,

hstemhm

, or

vstemhm

commands), using one bit
in the data bytes for each stem in the original stem list. Bits with
a value of one indicate stems that are active, and a value of zero
indicates stems that are inactive.
2 Type 2 Charstrings
7

cntrmask

The

cntrmask

(countermask) hint causes arbitrary but non-
overlapping collections of counter spaces in a character to be
controlled in a manner similar to how stem widths are
controlled by the stem hint commands (see Technical Note
#5015, The Type 1 Font Format Supplement for more
information).
The

cntrmask

operator is followed by one or more data bytes
that specify the index number of the stem hints on both sides of
a counter space. The number of data bytes must be exactly the
number needed to represent the number of stems in the
original stem list (those stems specied by the

hstem

,

vstem

,

hstemhm

, or

vstemhm

commands), using one bit in the data
bytes for each stem in the original stem list.
For the example shown in Figure 1, the stem list for the glyph
would be:
H1 H2 H3 H4 H5 H6 H7 H8 V1 V2 V3 V4 V5
and the following cntrmask commands would be used to
control the counter spaces between those stems:

cntrmask

0xB5 0xE8(H1 H3 H4 H6 H8 V1 V2 V3 V5)

cntrmask

0x4A 0x00(H2 H5 H7)
The bits set in the data bytes indicate that the corresponding
stem hints delimit the desired set of counters. Hints specied in
the rst command have a higher priority than those in the
second command. Notice that the V4 stem does not delimit an
appropriate counter space, and hence is not referenced in this
example.
Note that hints are just that, hints, or recommendations. They
are additional guidelines to an intelligent rasterizer.
8
(16 Mar 00)

Figure 1

Counter Control Example

If the fonts

LanguageGroup

is

not

equal to 1 (a

LanguageGroup


value of 1 indicates complex Asian language glyphs), the

cntrmask

operator, with three stems, can be used in place of the

hstem3

and

vstem3

hints in the Type 1 format, as long as the
related conditions specied in the Type 1 specication are met.
For more information on Counter Control hints, see Adobe
Technical Note #5015, Type 1 Font Format Supplement.

2.2 The Flex Mechanism

The

ex

mechanism is provided to improve the rendering of
shallow curves, representing them as line segments at small
sizes rather than as small humps or dents in the character shape.
It is essentially a path construction mechanism: the arguments
describe the construction of two curves, with an additional
argument that is used as a hint for when the curves should be
rendered as a straight line at smaller sizes and resolutions.
The Type 2 ex mechanism is general; there are no restrictions
on what type or orientation of curve may be expressed with a
ex operator. The

flex

operator is used for the general case;
special cases can use the

flex1

,

hflex

, or

hflex1

operators for a
more efcient encoding. Figure 2, page