[−][src]Crate ttf_parser
A high-level, safe, zero-allocation TrueType font parser.
Features
- A high-level API.
- Zero allocations.
- Zero dependencies.
no_std
compatible.- Fast.
- Stateless.
- Simple and maintainable code (no magic numbers).
Supported TrueType features
- (
cmap
) Character to glyph index mapping using glyph_index() method.
All subtable formats except Mixed Coverage (8) are supported. - (
cmap
) Character variation to glyph index mapping using glyph_variation_index() method. - (
glyf
) Glyph outlining using outline_glyph() method. - (
hmtx
) Retrieving a glyph's horizontal metrics using glyph_hor_metrics() method. - (
vmtx
) Retrieving a glyph's vertical metrics using glyph_ver_metrics() method. - (
kern
) Retrieving a glyphs pair kerning using glyphs_kerning() method. - (
maxp
) Retrieving a total number of glyphs using number_of_glyphs() method. - (
name
) Listing all name records using names() method. - (
name
) Retrieving a font's family name using family_name() method. - (
name
) Retrieving a font's PostScript name using post_script_name() method. - (
post
) Retrieving a font's underline metrics name using underline_metrics() method. - (
head
) Retrieving a font's units per EM value using units_per_em() method. - (
hhea
) Retrieving a generic font info using: ascender(), descender(), height() and line_gap() methods.
Supported OpenType features
- (
CFF
) Glyph outlining using outline_glyph() method. - (
OS/2
) Retrieving a font kind using is_regular(), is_italic(), is_bold() and is_oblique() methods. - (
OS/2
) Retrieving a font's weight using weight() method. - (
OS/2
) Retrieving a font's width using width() method. - (
OS/2
) Retrieving a font's X height using x_height() method. - (
OS/2
) Retrieving a font's strikeout metrics using strikeout_metrics() method. - (
OS/2
) Retrieving a font's subscript metrics using subscript_metrics() method. - (
OS/2
) Retrieving a font's superscript metrics using superscript_metrics() method.
Methods' computational complexity
TrueType fonts designed for fast querying, so most of the methods are very fast. The main exception is glyph outlining. Glyphs can be stored using two different methods: using Glyph Data format and Compact Font Format (pdf). The first one is fairly simple which makes it faster to process. The second one is basically a tiny language with a stack-based VM, which makes it way harder to process. Currently, it takes 60% more time to outline all glyphs in SourceSansPro-Regular.otf (which uses CFF) rather than in SourceSansPro-Regular.ttf.
test outline_cff ... bench: 1,617,138 ns/iter (+/- 1,261)
test outline_glyf ... bench: 995,771 ns/iter (+/- 2,801)
Here is some methods benchmarks:
test outline_glyph_276_from_cff ... bench: 1,203 ns/iter (+/- 4)
test outline_glyph_276_from_glyf ... bench: 796 ns/iter (+/- 3)
test outline_glyph_8_from_cff ... bench: 497 ns/iter (+/- 3)
test from_data_otf ... bench: 372 ns/iter (+/- 5)
test outline_glyph_8_from_glyf ... bench: 347 ns/iter (+/- 1)
test family_name ... bench: 269 ns/iter (+/- 3)
test from_data_ttf ... bench: 72 ns/iter (+/- 3)
test glyph_index_u41 ... bench: 24 ns/iter (+/- 0)
test glyph_2_hor_metrics ... bench: 8 ns/iter (+/- 0)
family_name
is expensive, because it allocates a String
and the original data
is stored as UTF-16 BE.
Some methods are too fast, so we execute them 1000 times to get better measurements.
test x_height ... bench: 847 ns/iter (+/- 0)
test units_per_em ... bench: 564 ns/iter (+/- 2)
test strikeout_metrics ... bench: 564 ns/iter (+/- 0)
test width ... bench: 287 ns/iter (+/- 0)
test ascender ... bench: 279 ns/iter (+/- 1)
test subscript_metrics ... bench: 279 ns/iter (+/- 0)
Safety
- The library must not panic. Any panic considered as a critical bug and should be reported.
- The library has a single
unsafe
block for array casting.
Modules
name_id | A list of name ID's. |
Structs
Font | A font data handle. |
GlyphId | A type-safe wrapper for glyph ID. |
HorizontalMetrics | A horizontal metrics of a glyph. |
LineMetrics | A line metrics. |
Name | A Name Record. |
Names | An iterator over font's names. |
Rect | Rectangle. |
ScriptMetrics | A script metrics used by subscript and superscript. |
VerticalMetrics | A vertical metrics of a glyph. |
Enums
CFFError | A list of errors that can occur during a CFF table parsing. |
Error | A font parsing error. |
PlatformId | A platform ID. |
TableName | A table name. |
Weight | A font weight. |
Width | A font width. |
Traits
OutlineBuilder | A trait for glyph outline construction. |
Functions
fonts_in_collection | Returns a number of fonts stored in a TrueType font collection. |