16 KiB
16 KiB
Change Log
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.
Unreleased
0.20.0 - 2023-10-15
Added
COLR/CPALv0 support. Thanks to laurmaedje.
Changed
svg::SvgDocumentsListreturnssvg::SvgDocumentand not just&[u8]now. Thanks to wjian23.Face::set_variationallows duplicated axes now.
0.19.2 - 2023-09-13
Added
cff::Table::glyph_cid
0.19.1 - 2023-06-20
Fixed
cff::Table::glyph_widthreturns a correct width when subroutines are present.
0.19.0 - 2023-04-17
Added
bdat,bloc,EBDTandEBLCtables support. Thanks to dzamkov.BitmapMono,BitmapMonoPacked,BitmapGray2,BitmapGray2Packed,BitmapGray4,BitmapGray4Packed,BitmapGray8andBitmapPremulBgra32variants toRasterImageFormat.
Fixed
CBLCtable parsing. Thanks to dzamkov.
0.18.1 - 2023-01-10
Fixed
- (
MATH) Handle NULL offsets. Thanks to laurmaedje.
0.18.0 - 2022-12-25
Added
Face::permissionsFace::is_subsetting_allowedFace::is_bitmap_embedding_allowedFace::unicode_rangesos2::Table::permissionsos2::Table::is_subsetting_allowedos2::Table::is_bitmap_embedding_allowedos2::Table::unicode_rangesname::Name::languageLanguageenum with all Windows languages.
Changed
- Using a non-zero index in
Face::parsefor a regular font will returnFaceParsingError::FaceIndexOutOfBoundsnow. Thanks to Pietrek14.
0.17.0 - 2022-09-28
Added
MATHtable support. Thanks to ruifengx and laurmaedje.
Fixed
- (CFF) Fix large tables parsing.
0.16.0 - 2022-09-18
Added
- CFF Encoding support.
cff::Table::glyph_indexcff::Table::glyph_index_by_namecff::Table::glyph_widthcff::Table::number_of_glyphscff::Table::matrixpost::Table::glyph_namepost::Table::glyph_index_by_namepost::Table::namesFace::glyph_index_by_nameRawFacefields andTableRecordstruct are public now.
Changed
Face::from_slicewas replaced byFace::parse.RawFace::from_slicewas replaced byRawFace::parse.post::Table::namesis a method and not a field now.- Use
post::Table::glyph_nameinstead ofpost::Table::names.get().
Fixed
- (hmtx/vmtx) Allow missing additional side bearings.
- (loca) Allow incomplete table.
- Reduce strictness of some table length checks.
- (post)
post::Names::lenwas returning a wrong value. Now this method is gone completely. You can usepost::Table::names().count()instead.
0.15.2 - 2022-06-17
Fixed
- Missing advance and side bearing offsets in
HVAR/VVARis not an error. Simply ignore them.
0.15.1 - 2022-06-04
Fixed
- (cmap)
cmap::Subtable4::glyph_indexcorrectly handles malformed glyph offsets now. - (cmap)
cmap::Subtable4::codepointsno longer includes0xFFFFcodepoint. - (SVG) Fixed table parsing. Thanks to Shubhamj280
0.15.0 - 2022-02-20
Added
apple-layoutbuild feature.ankr,feat,kerx,morxandtraktables.kernAAT subtable format 1.RawFace
Changed
- The
parsermodule is private now again.
0.14.0 - 2021-12-28
Changed
- (cmap)
cmap::Subtable::glyph_indexandcmap::Subtable::glyph_variation_indexacceptu32instead ofcharnow. - (glyf) ~7% faster outline parsing.
0.13.4 - 2021-11-23
Fixed
- (CFF) Panic during
seacresolving. - (CFF) Stack overflow during
seacresolving.
0.13.3 - 2021-11-19
Fixed
- (glyf) Endless loop during malformed file parsing.
0.13.2 - 2021-10-28
Added
gvar-allocbuild feature that unlocksgvartable limits by using heap. Thanks to OrionNebula
0.13.1 - 2021-10-27
Fixed
Face::line_gaplogic.
0.13.0 - 2021-10-24
Added
- Complete GSUB and GPOS tables support. Available under the
opentype-layoutfeature. - Public access to all supported TrueType tables. This allows a low-level, but still safe, access to internal data layout, which can be used for performance optimization, like caching.
Styleenum andFace::stylemethod.Face::glyph_namecan be disabled via theglyph-namesfeature to reduce binary size.
Changed
- Improved ascender/descender/line_gap resolving logic.
Facemethods:has_glyph_classes,glyph_class,glyph_mark_attachment_class,is_mark_glyphandglyph_variation_deltaare moved togdef::Table.- The
Namesstruct is no longer an iterator, but a container. You have to callinto_iter()manually. - The
VariationAxesstruct is no longer an iterator, but a container. You have to callinto_iter()manually. - Most of the
Namestruct methods become public fields. Face::units_per_emno longer returnsOption.- (
cmap) Improved subtable 12 performance. Thanks to xnuk
Removed
- (c-api)
ttfp_glyph_class,ttfp_get_glyph_class,ttfp_get_glyph_mark_attachment_class,ttfp_is_mark_glyph,ttfp_glyph_variation_deltaandttfp_has_table. TableNameenum andFace::has_table. Tables can be access directly now.Face::character_mapping_subtables. UseFace::tables().cmapinstead.Face::kerning_subtables. UseFace::tables().kerninstead.
Fixed
Iterator::countimplementation forcmap::Subtables,name::NamesandLazyArrayIter32.
0.12.3 - 2021-06-27
Changed
- (
glyf) Always use a calculated bbox.
0.12.2 - 2021-06-11
Fixed
Face::glyph_bounding_boxfor variableglyf.- (
glyf) Do not skip glyphs with zero-sized bbox.
0.12.1 - 2021-05-24
Added
- Support Format 13 subtables in
cmap::Subtable::is_unicode. Thanks to csmulhern - Derive more traits by default. Thanks to dhardy
0.12.0 - 2021-02-14
Changed
Face::ascenderandFace::descenderwill use usWinAscent and usWinDescent whenUSE_TYPO_METRICSflag is not set inOS/2table. Previously, those values were ignored and hhea::ascender and hhea::descender were used. Nowhheatable values will be used only whenOS/2table is not present.Face::outline_glyphandFace::glyph_bounding_boxin case of aglyftable can fallback to a calculated bbox when the embedded bbox is malformed now.
0.11.0 - 2021-02-04
Added
FaceTables, which allowed to loadFacenot only from a single chunk of data, but also in a per-table way. Which is useful for WOFF parsing. No changes to the API. Thanks to fschutt
0.10.1 - 2021-01-21
Changed
- Update a font used for tests.
0.10.0 - 2021-01-16
Added
variable-fontsbuild feature. Enabled by default. By disabling it you can reducettf-parserbinary size overhead almost twice.
Changed
- (
gvar) Increase the maximum number of variation tuples from 16 to 32. Increases stack usage and makesgvarparsing 10% slower now.
Fixed
- (
CFF) Fixseacprocessing. Thanks to wezm
0.9.0 - 2020-12-05
Removed
kernAAT subtable 1 akakern::state_machine. Mainly because it's useless without a proper shaping.
0.8.3 - 2020-11-15
Added
Face::glyph_variation_delta
Fixed
Iterator::nthimplementation forcmap::SubtablesandNames.
0.8.2 - 2020-07-31
Added
cmap::Subtable::codepoints
Fixed
- (cmap) Incorrectly returning glyph ID
0instead ofNonefor format 0 - (cmap) Possible invalid glyph mapping for format 2
0.8.1 - 2020-07-29
Added
Face::is_monospacedFace::italic_angleFace::typographic_ascenderFace::typographic_descenderFace::typographic_line_gapFace::capital_height
0.8.0 - 2020-07-21
Added
- Allow
truemagic. FaceParsingErrorNormalizedCoordinateFace::variation_coordinatesFace::has_non_default_variation_coordinatesFace::glyph_namecan lookup CFF names too.Face::table_dataFace::character_mapping_subtables
Changed
- (CFF,CFF2) 10% faster parsing.
Face::from_slicereturnsResultnow.Name::platform_idreturnsPlatformIdinstead ofOption<PlatformId>now.- The
cmapmodule became public.
Fixed
Face::widthparsing.- Possible u32 overflow on 32-bit platforms during
Face::from_slice. - (cmap)
Face::glyph_variation_indexprocessing when the encoding table has only one glyph.
0.7.0 - 2020-07-16
Added
- (CFF) CID fonts support.
- (CFF)
seacsupport. Font::global_bounding_box
Changed
- Rename
FonttoFace, because this is what it actually is. - Rename
Font::from_datatoFont::from_sliceto match serde and other libraries. - Rename
Name::name_utf8toName::to_string.
Removed
Font::family_nameandFont::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())
0.6.2 - 2020-07-02
Added
Name::is_unicodeFont::family_namewill load names with Windows Symbol encoding now.
Fixed
Font::glyph_bounding_boxwill apply variation in case ofgvarfonts.
0.6.1 - 2020-05-19
Fixed
- (
kern) Support fonts that ignore the subtable size limit.
0.6.0 - 2020-05-18
Added
sbix,CBLC,CBDTandSVGtables support.Font::glyph_raster_imageandFont::glyph_svg_image.Font::kerning_subtableswith subtable formats 0..3 support.
Changed
- (c-api) The library doesn't allocate
ttfp_fontanymore. All allocations should be handled by the caller from now.
Removed
Font::glyphs_kerning. UseFont::kerning_subtablesinstead.- (c-api)
ttfp_create_fontandttfp_destroy_font. Usettfp_font_size_of+ttfp_font_initinstead.ttfp_font *font = (ttfp_font*)alloca(ttfp_font_size_of()); ttfp_font_init(font_data, font_data_size, 0, font); - Logging support. We haven't used it anyway.
Fixed
- (
gvar) Integer overflow. - (
cmap) Integer overflow during subtable format 2 parsing. - (
CFF,CFF2) DICT number parsing. Font::glyph_*_advancewill returnNonewhen glyph ID is larger than the number of metrics in the table.- Ignore variation offset in
Font::glyph_*_advanceandFont::glyph_*_side_bearingwhenHVAR/VVARtables are missing. Previously returnedNonewhich is incorrect.
0.5.0 - 2020-03-19
Added
- Variable fonts support.
- C API.
gvar,CFF2,avar,fvar,HVAR,VVARandMVARtables support.Font::variation_axesFont::set_variationFont::is_variableTagtype.
Fixed
- Multiple issues due to arithmetic overflow.
0.4.0 - 2020-02-24
A major rewrite.
Added
Font::glyph_bounding_boxFont::glyph_nameFont::has_glyph_classesFont::glyph_classFont::glyph_mark_attachment_classFont::is_mark_glyphFont::glyph_y_originFont::vertical_ascenderFont::vertical_descenderFont::vertical_heightFont::vertical_line_gap- Optional
logdependency.
Changed
Font::outline_glyphnow accepts&mut dyn OutlineBuilderand not&mut impl OutlineBuilder.Font::ascender,Font::descenderandFont::line_gapwill checkUSE_TYPO_METRICSflag in OS/2 table now.glyph_hor_metricswas split intoglyph_hor_advanceandglyph_hor_side_bearing.glyph_ver_metricswas split intoglyph_ver_advanceandglyph_ver_side_bearing.CFFErroris no longer public.
Removed
Errorenum. All methods will returnOption<T>now.- All
unsafe.
Fixed
glyph_hor_side_bearingparsing when the number of metrics is less than the total number of glyphs.- Multiple CFF parsing fixes. The parser is more strict now.
0.3.0 - 2019-09-26
Added
no_stdcompatibility.
Changed
- The library has one
unsafeblock now. - 35% faster
family_name()method. - 25% faster
from_data()method for TrueType fonts. - The
Namestruct has a new API. Public fields became public functions and data is parsed on demand and not beforehand.
0.2.2 - 2019-08-12
Fixed
- Allow format 12 subtables with Unicode full repertoire in
cmap.
0.2.1 - 2019-08-12
Fixed
- Check that
cmapsubtable encoding is Unicode.
0.2.0 - 2019-07-10
Added
- CFF support.
- Basic kerning support.
- All
cmapsubtable formats except Mixed Coverage (8) are supported. - Vertical metrics querying from the
vmtxtable. - OpenType fonts are allowed now.
Changed
- A major rewrite. TrueType tables are no longer public.
- Use
GlyphIdinstead ofu16.
Removed
GDEFtable parsing.