The glyf data table (glyf
) stores the glyph outline data. The format number for this table is stored in the head
table's glyphDataFormat
field. The only currently defined format of the glyf
table is format 0. We propose format 1 of the glyf
table to add multiple features. See full proposal for all features. In this proposal we cover: Cubic-Bezier Outlines.
In glyf
table format 0, glyph outlines use quadratic Bezier curve segments.
In glyf
table format 1, glyph outlines can mix quadratic and cubic Bezier curve segments.
Add the following flag to the Simple Glyph Description section's Simple Glyph Flags:
Mask | Name | Description |
---|---|---|
0x80 | CUBIC |
Bit 7: Off-curve point belongs to a cubic-Bezier segment |
Currently, there are several restrictions on how the CUBIC
flag can be used. If any of the conditions below are not met, the behavior is undefined.
In the text below, wrap-around in a contour means whether the point after the last point of the contour is considered to be the first point of the contour, and symmetrically, the point before the first point of the contour is considered to be the last point of the contour. When we say "without wrap-around", no such consideration is made.
The number of consecutive cubic off-curve points within a contour, without wrap-around, must be even.
All the off-curve points between two on-curve points, with wrap-around, must
either have the CUBIC
flag clear, or have the CUBIC
flag set.
The CUBIC
flag must only be used on off-curve points. It is reserved and must be set to zero, for on-curve points.
Every successive two off-curve points that have the CUBIC
bit set define a cubic Bezier segment. Within any consecutive set of cubic off-curve points within a contour, with wrap-around, an implied on-curve point is inserted at the mid-point between every second off-curve point and the next one.
If there are no on-curve points and all (even number of) off-curve points are CUBIC
, the first off-curve point is considered the first control-point of a cubic-Bezier, and implied on-curve points are inserted between the every second point and the next one as usual.
As in the glyf
version 0 table, an implied on-curve point is inserted between any two neighboring quadratic off-curve points.
Hinting works exactly the same for quadratic-in-glyf, with points addressed by index number.