All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
variable-fonts
build feature. Enabled by default. By disabling it you can reduce ttf-parser
binary size overhead almost twice.gvar
) Increase the maximum number of variation tuples from 16 to 32. Increases stack usage and makes gvar
parsing 10% slower now.CFF
) Fix seac
processing. Thanks to wezmkern
AAT subtable 1 aka kern::state_machine
. Mainly because it's useless without a proper shaping.Face::glyph_variation_delta
Iterator::nth
implementation for cmap::Subtables
and Names
.cmap::Subtable::codepoints
0
instead of None
for format 0Face::is_monospaced
Face::italic_angle
Face::typographic_ascender
Face::typographic_descender
Face::typographic_line_gap
Face::capital_height
true
magic.FaceParsingError
NormalizedCoordinate
Face::variation_coordinates
Face::has_non_default_variation_coordinates
Face::glyph_name
can lookup CFF names too.Face::table_data
Face::character_mapping_subtables
Face::from_slice
returns Result
now.Name::platform_id
returns PlatformId
instead of Option<PlatformId>
now.cmap
module became public.Face::width
parsing.Face::from_slice
.Face::glyph_variation_index
processing when the encoding table has only one glyph.seac
support.Font::global_bounding_box
Font
to Face
, because this is what it actually is.Font::from_data
to Font::from_slice
to match serde and other libraries.Name::name_utf8
to Name::to_string
.Font::family_name
and Font::post_script_name
. They were a bit confusing. Prefer:face.names().find(|name| name.name_id() == name_id::FULL_NAME).and_then(|name| name.to_string())
Name::is_unicode
Font::family_name
will load names with Windows Symbol encoding now.Font::glyph_bounding_box
will apply variation in case of gvar
fonts.kern
) Support fonts that ignore the subtable size limit.sbix
, CBLC
, CBDT
and SVG
tables support.Font::glyph_raster_image
and Font::glyph_svg_image
.Font::kerning_subtables
with subtable formats 0..3 support.ttfp_font
anymore. All allocations should be handled by the caller from now.Font::glyphs_kerning
. Use Font::kerning_subtables
instead.ttfp_create_font
and ttfp_destroy_font
. Use ttfp_font_size_of
+ ttfp_font_init
instead.ttfp_font *font = (ttfp_font*)alloca(ttfp_font_size_of()); ttfp_font_init(font_data, font_data_size, 0, font);
gvar
) Integer overflow.cmap
) Integer overflow during subtable format 2 parsing.CFF
, CFF2
) DICT number parsing.Font::glyph_*_advance
will return None
when glyph ID is larger than the number of metrics in the table.Font::glyph_*_advance
and Font::glyph_*_side_bearing
when HVAR
/VVAR
tables are missing. Previously returned None
which is incorrect.gvar
, CFF2
, avar
, fvar
, HVAR
, VVAR
and MVAR
tables support.Font::variation_axes
Font::set_variation
Font::is_variable
Tag
type.A major rewrite.
Font::glyph_bounding_box
Font::glyph_name
Font::has_glyph_classes
Font::glyph_class
Font::glyph_mark_attachment_class
Font::is_mark_glyph
Font::glyph_y_origin
Font::vertical_ascender
Font::vertical_descender
Font::vertical_height
Font::vertical_line_gap
log
dependency.Font::outline_glyph
now accepts &mut dyn OutlineBuilder
and not &mut impl OutlineBuilder
.Font::ascender
, Font::descender
and Font::line_gap
will check USE_TYPO_METRICS
flag in OS/2 table now.glyph_hor_metrics
was split into glyph_hor_advance
and glyph_hor_side_bearing
.glyph_ver_metrics
was split into glyph_ver_advance
and glyph_ver_side_bearing
.CFFError
is no longer public.Error
enum. All methods will return Option<T>
now.unsafe
.glyph_hor_side_bearing
parsing when the number of metrics is less than the total number of glyphs.no_std
compatibility.unsafe
block now.family_name()
method.from_data()
method for TrueType fonts.Name
struct has a new API. Public fields became public functions and data is parsed on demand and not beforehand.cmap
.cmap
subtable encoding is Unicode.cmap
subtable formats except Mixed Coverage (8) are supported.vmtx
table.GlyphId
instead of u16
.GDEF
table parsing.