Overview

Request 1146747 accepted

- update to 4.47.2:
* [merge] Improve help message and add standard command line
options
* [otlLib] Pass ttFont to name.addName in buildStatTable
* [featureVars] Re-use FeatureVariationRecord's when possible
- always obsolete fonttools. We have switched to python311 stack
in SLE15 and need to get the obsoletes back
- Update to 4.47.0
- [varLib.models] New API for VariationModel: getMasterScalars and interpolateFromValuesAndScalars.
- [varLib.interpolatable] Various bugfixes and rendering improvements.
In particular, add a Summary page in the front, and an Index and Table-of-Contents in the back.
Change the page size to Letter.
- [Docs/designspaceLib] Defined a new public.fontInfo lib key, not used anywhere yet (#3358).
- Changes from 4.46.0
- [featureVars] Allow to register the same set of substitution rules to multiple features.
The addFeatureVariations function can now take a list of featureTags; similarly, the lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can now take a comma-separateed string
of feature tags (e.g. "salt,ss01") instead of a single tag (#3360).
- [featureVars] Don't overwrite GSUB FeatureVariations, but append new records to it
for features which are not already there. But raise VarLibError if the feature tag
already has feature variations associated with it (#3363).
- [varLib] Added addGSUBFeatureVariations function to add GSUB Feature Variations to
an existing variable font from rules defined in a DesignSpace document (#3362).
- [varLib.interpolatable] Various bugfixes and rendering improvements. In particular,
a new test for "underweight" glyphs. The new test reports quite a few false-positives though.
Please send feedback.
- Changes from 4.45.1
- [varLib.interpolatable] Various bugfixes and improvements, better reporting, reduced false positives.
- [ttGlyphSet] Added option to not recalculate glyf bounds (#3348).
- Changes from 4.45.0
- [varLib.interpolator] Vastly improved algorithms. Also available now is --pdf and
--html options to generate a PDF or HTML report of the interpolation issues.
- The PDF/HTML report showcases the problematic masters, the interpolated broken glyph,
as well as the proposed fixed version.
- Changes from 4.44.3
- [subset] Only prune codepage ranges for OS/2.version >= 1, ignore otherwise (#3334).
- [instancer] Ensure hhea vertical metrics stay in sync with OS/2 ones after
instancing MVAR table containing 'hasc', 'hdsc' or 'hlgp' tags (#3297).
- Changes from 4.44.2
- [glyf] Have Glyph.recalcBounds skip empty components (base glyph with no contours)
when computing the bounding box of composite glyphs. This simply restores the existing behavior
before some changes were introduced in fonttools 4.44.0 (#3333).
- Changes from 4.44.1
- [feaLib] Ensure variable mark anchors are deep-copied while building
since they get modified in-place and later reused (#3330).
- [OS/2|subset] Added method to recalcCodePageRanges to OS/2 table class;
added --prune-codepage-ranges to fonttools subset command (#3328, #2607).
NOTE: this release was "yanked" from PyPI because it introduced a regression: #3334
- Changes from 4.44.0
- [instancer] Recalc OS/2 AvgCharWidth after instancing if default changes (#3317).
- [otlLib] Make ClassDefBuilder class order match varLib.merger's, i.e. large classes first,
then glyph lexicographic order (#3321, #3324).
- [instancer] Allow not specifying any of min:default:max values and let be filled up with fvar's values (#3322, #3323).
- [instancer] When running --update-name-table ignore axes that have no STAT axis values (#3318, #3319).
- [Debg] When dumping to ttx, write the embedded JSON as multi-line string with indentation (92cbfee).
- [varStore] Handle > 65535 items per encoding by splitting VarData subtable (#3310).
- [subset] Handle null-offsets in MarkLigPos subtables.
- [subset] Keep East Asian spacing fatures vhal, halt, chws, vchw by default (#3305).
- [instancer.solver] Fixed case where axisDef < lower and upper < axisMax (#3304).
- [glyf] Speed up compilation, mostly around recalcBounds (#3301).
- [varLib.interpolatable] Speed it up when working on variable fonts, plus various micro-optimizations (#3300).
- Require unicodedata2 >= 15.1.0 when installed with 'unicode' extra, contains UCD 15.1.
- Changes from 4.43.1
- [EBDT] Fixed TypeError exception in _reverseBytes method triggered
when dumping some bitmap fonts with ttx -z bitwise option (#3162).
- [v/hhea] Fixed UnboundLocalError exception in recalc method when no vmtx or hmtx tables are present (#3290).
- [bezierTools] Fixed incorrectly typed cython local variable leading to TypeError
when calling calcQuadraticArcLength (#3288).
- [feaLib/otlLib] Better error message when building Coverage table with missing glyph (#3286).
- Changes from 4.43.0
- [subset] Set up lxml XMLParser(resolve_entities=False) when parsing OT-SVG documents
to prevent XML External Entity (XXE) attacks (9f61271, CVE-2023-45139, bsc#1218748):
https://codeql.github.com/codeql-query-help/python/py-xxe/
- [varLib.iup] Added workaround for a Cython bug in iup_delta_optimize
that was leading to IUP tolerance being incorrectly initialised,
resulting in sub-optimal deltas (6012643, cython/cython#5732).
- [varLib] Added new command-line entry point fonttools varLib.avar to add an avar table
to an existing VF from axes mappings in a .designspace file (0a3360e).
- [instancer] Fixed bug whereby no longer used variation regions were not correctly pruned after VarData optimization (#3268).
- Added support for Python 3.12 (#3283).
- Changes from 4.42.1
- [t1Lib] Fixed several Type 1 issues (#3238, #3240).
- [otBase/packer] Allow sharing tables reached by different offset sizes (#3241, #3236, 457f11c).
- [varLib/merger] Fix Cursive attachment merging error when all anchors are NULL (#3248, #3247).
- [ttLib] Fixed warning when calling addMultilingualName and ttFont parameter
was not passed on to findMultilingualName (#3253).
- Changes from 4.42.0
- [varLib] Use sentinel value 0xFFFF to mark a glyph advance in hmtx/vmtx as non participating,
allowing sparse masters to contain glyphs for variation purposes other than {H,V}VAR (#3235).
- [varLib/cff] Treat empty glyphs in non-default masters as missing,
thus not participating in CFF2 delta computation, similarly to how
varLib already treats them for gvar (#3234).
- Added varLib.avarPlanner script to deduce 'correct' avar v1 axis mappings based on glyph average weights (#3223).
- Changes from 4.41.1
- [subset] Fixed perf regression in v4.41.0 by making NameRecordVisitor
only visit tables that do contain nameID references (#3213, #3214).
- [varLib.instancer] Support instancing fonts containing null ConditionSet offsets
in FeatureVariationRecords (#3211, #3212).
- [statisticsPen] Report font glyph-average weight/width and font-wide slant.
- [fontBuilder] Fixed head.created date incorrectly set to 0 instead of the current timestamp,
regression introduced in v4.40.0 (#3210).
- [varLib.merger] Support sparse CursivePos masters (#3209).
- Changes from 4.41.0
- [fontBuilder] Fixed bug in setupOS2 with default panose attribute
incorrectly being set to a dict instead of a Panose object (#3201).
- [name] Added method to removeUnusedNameRecords in the user range (#3185).
- [varLib.instancer] Fixed issue with L4 instancing (moving default) (#3179).
- [cffLib] Use latin1 so we can roundtrip non-ASCII in {Full,Font,Family}Name (#3202).
- [designspaceLib] Mark as optional in docs (as it is in the code).
- [glyf-1] Fixed drawPoints() bug whereby last cubic segment becomes quadratic (#3189, #3190).
- [fontBuilder] Propagate the 'hidden' flag to the fvar Axis instance (#3184).
- [fontBuilder] Update setupAvar() to also support avar 2, fixing _add_avar() call site (#3183).
- Added new voltLib.voltToFea submodule (originally Tiro Typeworks' "Volto")
for converting VOLT OpenType Layout sources to FEA format (#3164).
- Changes from 4.40.0
- Published native binary wheels to PyPI for all the python minor versions
and platform and architectures currently supported that would benefit from this.
They will include precompiled Cython-accelerated modules (e.g. cu2qu) without
requiring to compile them from source. The pure-python wheel and source distribution
will continue to be published as always (pip will automatically chose them when no
binary wheel is available for the given platform, e.g. pypy).
Use pip install --no-binary=fonttools fonttools to expliclity request pip to install from the pure-python source.
- [designspaceLib|varLib] Add initial support for specifying axis mappings and build avar2 table from those (#3123).
- [feaLib] Support variable ligature caret position (#3130).
- [varLib|glyf] Added option to --drop-implied-oncurves; test for impliable oncurve points either before or after rounding
(#3146, #3147, #3155, #3156).
- [TTGlyphPointPen] Don't error with empty contours, simply ignore them (#3145).
- [sfnt] Fixed str vs bytes remnant of py3 transition in code dealing with de/compiling WOFF metadata (#3129).
- [instancer-solver] Fixed bug when moving default instance with sparse masters (#3139, #3140).
- [feaLib] Simplify variable scalars that don’t vary (#3132).
- [pens] Added filter pen that explicitly emits closing line when lastPt != movePt (#3100).
- [varStore] Improve optimize algorithm and better document the algorithm (#3124, #3127).
- Added quantization option (#3126).
- Added CI workflow config file for building native binary wheels (#3121).
- [fontBuilder] Added glyphDataFormat=0 option; raise error when glyphs contain cubic outlines
but glyphDataFormat was not explicitly set to 1 (#3113, #3119).
- [subset] Prune emptied GDEF.MarkGlyphSetsDef and remap indices; ensure GDEF is subsetted before GSUB and GPOS (#3114, #3118).
- [xmlReader] Fixed issue whereby DSIG table data was incorrectly parsed (#3115, #2614).
- [varLib/merger] Fixed merging of SinglePos with pos=0 (#3111, #3112).
- [feaLib] Demote "Feature has not been defined" error to a warning when building aalt and referenced feature is empty (#3110).
- [feaLib] Dedupe multiple substitutions with classes (#3105).
- Add mssing recommends.
- Add missing setuptools to fix build error under Leap.
- update to 4.47.0:
* [varLib.models] New API for VariationModel: ``getMasterScalars``
and ``interpolateFromValuesAndScalars``.
* [varLib.interpolatable] Various bugfixes and rendering
improvements. In particular, add a Summary page in the front,
and an Index and Table-of-Contents in the back. Change the
page size to Letter.
* [Docs/designspaceLib] Defined a new ``public.fontInfo`` lib key,
not used anywhere yet (#3358).
* [featureVars] Allow to register the same set of substitution
rules to multiple features. The ``addFeatureVariations``
function can now take a list of featureTags; similarly, the
lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can
now take a comma-separateed string of feature tags (e.g.
"salt,ss01") instead of a single tag (#3360).
* [featureVars] Don't overwrite GSUB FeatureVariations, but append
new records to it for features which are not already there. But
raise ``VarLibError`` if the feature tag already has feature
variations associated with it (#3363).
* [varLib] Added ``addGSUBFeatureVariations`` function to add GSUB
Feature Variations to an existing variable font from rules
defined in a DesignSpace document (#3362).
* [varLib.interpolatable] Various bugfixes and rendering
improvements. In particular, a new test for "underweight" glyphs.
The new test reports quite a few false-positives though. Please
send feedback.
* [varLib.interpolatable] Various bugfixes and improvements, better
reporting, reduced false positives.
* [ttGlyphSet] Added option to not recalculate glyf bounds (#3348).
* [varLib.interpolatable] Vastly improved algorithms. Also
available now is ``--pdf`` and ``--html`` options to generate a
PDF or HTML report of the interpolation issues.
The PDF/HTML report showcases the problematic masters, the
interpolated broken glyph, as well as the proposed fixed version.
* [subset] Only prune codepage ranges for OS/2.version >= 1, ignore
otherwise (#3334).
* [instancer] Ensure hhea vertical metrics stay in sync with OS/2
ones after instancing MVAR table containing 'hasc', 'hdsc' or
'hlgp' tags (#3297).
* [glyf] Have ``Glyph.recalcBounds`` skip empty components (base
glyph with no contours) when computing the bounding box of
composite glyphs. This simply restores the existing
behavior before some changes were introduced in fonttools
4.44.0 (#3333).
* [feaLib] Ensure variable mark anchors are deep-copied while
building since they get modified in-place and later reused
* [OS/2|subset] Added method to ``recalcCodePageRanges`` to OS/2
table class; added ``--prune-codepage-ranges`` to `fonttools
subset` command (#3328, #2607).
- Clean up space and remove unnecessary BR python-munkres and
python-zopfli.
- update to 4.39.4:
* [varLib.interpolatable] Allow for sparse masters (#3075)
* [merge] Handle differing default/nominalWidthX in CFF (#3070)
* [ttLib] Add missing main.py file to ttLib package (#3088)
* [ttx] Fix missing composite instructions in XML (#3092)
* [ttx] Fix split tables option to work on filenames containing
'%' (#3096)
* [featureVars] Process lookups for features other than rvrn
last (#3099)
* [feaLib] support multiple substitution with classes (#3103)
- add sle15_python_module_pythons (jsc#PED-68)
- update to 4.39.3:
* [sbix] Fixed TypeError when compiling empty glyphs whose
imageData is None
* [ttFont] Fixed AttributeError on python <= 3.10 when opening
a TTFont from a tempfile
* SpooledTemporaryFile, seekable method only added on python
3.11 (#3052).
* [varLib] Fixed regression introduced in 4.39.1 whereby an
incomplete 'STAT' table would be built even though a
DesignSpace v5 did contain 'STAT' definitions (#3045, #3046).
* [avar2] Added experimental support for reading/writing avar
version 2 as specified in this draft proposal:
https://github.com/harfbuzz/boring-expansion-spec/blob/main/avar2.md
* [glifLib] Wrap underlying XML library exceptions with
GlifLibError when parsing GLIFs, and also print the name
and path of the glyph that fails to be parsed (#3042).
* [feaLib] Consult avar for normalizing user-space values in
ConditionSets and in VariableScalars (#3042, #3043).
* [ttProgram] Handle string input to Program.fromAssembly()
(#3038).
* [otlLib] Added a config option to emit GPOS 7 lookups,
currently disabled by default because of a macOS bug (#3034).
* [COLRv1] Added method to automatically compute ClipBoxes
(#3027).
* [ttFont] Fixed getGlyphID to raise KeyError on missing glyphs
instead of returning None.
* [sbix] Fixed UnboundLocalError: cannot access local variable
'rawdata' (#3031).
* [varLib] When building VF, do not overwrite a pre-existing
``STAT`` table that was built with feaLib from FEA feature
file. Also, added support for building multiple VFs
defined in Designspace v5 from ``fonttools varLib`` script
* [mtiLib] Only add ``Debg`` table with lookup names when
``FONTTOOLS_LOOKUP_DEBUGGING`` env variable is set (#3023).
* [mtiLib] Optionally add `Debg` debug info for MTI feature
builds (#3018).
* [ttx] Support reading input file from standard input using
special `-` character, similar to existing `-o -` option
to write output to standard output (#3020).
* [cython] Prevent ``cython.compiled`` raise AttributeError if
cython not installed properly (#3017).
* [OS/2] Guard against ZeroDivisionError when calculating
xAvgCharWidth in the unlikely scenario no glyph has non-zero
advance (#3015).
* [subset] Recompute xAvgCharWidth independently of --no-prune-
unicode-ranges, previously the two options were involuntarily
bundled together (#3012).
* [fontBuilder] Add ``debug`` parameter to addOpenTypeFeatures
method to add source debugging information to the font in the
``Debg`` private table (#3008).
* [name] Make NameRecord `__lt__` comparison not fail on
Unicode encoding errors (#3006).
* [featureVars] Fixed bug in ``overlayBox`` (#3003, #3005).
* [glyf] Added experimental support for cubic bezier curves in
TrueType glyf table, as outlined in glyf v1 proposal (#2988):
* Added new qu2cu module and related qu2cuPen, the reverse of
cu2qu for converting TrueType quadratic splines to cubic bezier
curves (#2993).
* [glyf] Added experimental support for reading and writing
Variable Composites/Components as defined in glyf v1 spec
proposal (#2958):
* [pens]: Added `addVarComponent` method to pen protocols' base
classes, which pens can implement to handle varcomponents
* [misc.transform] Added DecomposedTransform class which
implements an affine transformation with separate translate,
rotation, scale, skew, and transformation-center components (#2598)
* [sbix] Ensure Glyph.referenceGlyphName is set; fixes error
after dumping and re-compiling sbix table with 'dupe' glyphs (#2984).
* [feaLib] Be cleverer when merging chained single
substitutions into same lookup when they are specified using
the inline notation (#2150, #2974).
* [instancer] Clamp user-inputted axis ranges to those of fvar
(#2959).
* [otBase/subset] Define ``__getstate__`` for BaseTable so that
a copied/pickled 'lazy' object gets its own OTTableReader to
read from; incidentally fixes a bug while subsetting COLRv1
table containing ClipBoxes on python 3.11
* [sbix] Handle glyphs with "dupe" graphic type on compile
correctly (#2963).
* [glyf] ``endPointsOfContours`` field should be unsigned!
Kudos to behdad for spotting one of the oldest bugs in FT.
Probably nobody has ever dared to make glyphs with more
than 32767 points... (#2957).
* [feaLib] Fixed handling of ``ignore`` statements with
unmarked glyphs to match makeotf behavior, which assumes
the first glyph is marked
* Reformatted code with ``black`` and enforce new code style
via CI check (#2925).
* [feaLib] Sort name table entries following OT spec prescribed
order in the builder (#2927).
* [cu2quPen] Add Cu2QuMultiPen that converts multiple outlines
at a time in interpolation compatible way; its methods take
a list of tuples arguments that would normally be passed to
individual segment pens, and at the end it dispatches the
converted outlines to each pen (#2912).
* [reverseContourPen/ttGlyphPen] Add outputImpliedClosingLine
option
* [gvar] Avoid expanding all glyphs unnecessarily upon compile
* [scaleUpem] Fixed bug whereby CFF2 vsindex was scaled; it
should not (#2893, #2894).
* [designspaceLib] Add DS.getAxisByTag and refactor getAxis
(#2891).
* [unicodedata] map Zmth<->math in ot_tag_{to,from}_script
(#1737, #2889).
* [woff2] Support encoding/decoding OVERLAP_SIMPLE glyf flags
(#2576, #2884).
* [instancer] Update OS/2 class and post.italicAngle when
default moved (L4)
* Dropped support for Python 3.7 which reached EOL, fontTools
requires 3.8+.
* [instancer] Fixed instantiateFeatureVariations logic when a
rule range becomes default-applicable (#2737, #2880).
* [ttLib] Add main to ttFont and ttCollection that just
decompile and re-compile the input font (#2869).
* [featureVars] Insert 'rvrn' lookup at the beginning of
LookupList, to work around bug in Apple implementation
of 'rvrn' feature which the spec says it should be processed
early whereas on macOS 10.15 it follows lookup order (#2140,
* [instancer/mutator] Remove 'DSIG' table if present.
* [svgPathPen] Don't close path in endPath(), assume open
unless closePath() (#2089, #2865).
- Dependencies for testing on sympy and ufoLib2 are actually not
necessary (the test suite automatically skips affected tests),
and scipy could be replaced by much less demanding munkres
package.
- Update to 4.38.0
* [varLib.instancer] Added support for L4 instancing, i.e. moving the
default value of an axis while keeping it variable.
* [otlLib/featureVars] Set a few Count values so one doesn't need to
compile the font to update them
* [varLib.models] Make extrapolation work for 2-master models as well
where one master is at the default location
Add optional extrapolate=False to normalizeLocation()
* [varLib.cff] Fixed sub-optimal packing of CFF2 deltas by no longer
rounding them to integer
* [scaleUpem] Calculate numShorts in VarData after scale; handle CFF
hintmasks
- Update to 4.37.1
* [subset] Fixed regression introduced with v4.37.0 while subsetting
the VarStore of HVAR and VVAR tables, whereby an
AttributeError: subset_varidxes was thrown because an apparently
unused import statement (with the side-effect of dynamically binding
that subset_varidxes method to the VarStore class) had been
accidentally deleted in an unrelated PR
* [pens] Added cairoPen
* [gvar] Read gvar more lazily by not parsing all of the glyf table
* [ttGlyphSet] Make drawPoints(pointPen) method work for CFF fonts
as well via adapter pen
* [cff.specializer] Fixed issue in charstring generalizer with the
blend operator
* [varLib.models] Added support for extrapolation
* [ttGlyphSet] Ensure the newly added _TTVarGlyphSet inherits from
_TTGlyphSet to keep backward compatibility with existing API
* [kern] Allow compiling legacy kern tables with more than 64k entries
* [visitor] Added new visitor API to traverse tree of objects and
dispatch based on the attribute type: cf. fontTools.misc.visitor
and fontTools.ttLib.ttVisitor. Added fontTools.ttLib.scaleUpem
module that uses the latter to change a font's units-per-em and
scale all the related fields accordingly
* Etc. https://github.com/fonttools/fonttools/compare/4.33.3...4.37.1
- Update to version 4.33.3
* designspaceLib:
* Fixed typo in deepcopyExceptFonts method, preventing font
references to be transferred
* Fixed another typo in the name of Range dataclass's
__post_init__ magic method
- Update to version 4.33.2
* otBase: Make logging less verbose when harfbuzz fails to serialize
Do not exit at the first failure but continue attempting to fix
offset overflow error using the pure-python serializer even when
the USE_HARFBUZZ_REPACKER option was explicitly set to True.
- Update to version 4.33.1
* otlLib:
Put back the FONTTOOLS_GPOS_COMPACT_MODE environment variable
to fix regression in ufo2ft. This is deprecated and will be
removed once ufo2ft gets updated to use the new config setup.
- Update to version 4.33.0
* Added fontTools.misc.configTools module, a generic configuration system
* Added fontTools.config module, a fontTools-specific configuration
system using configTools above.
* Attached a Config object to TTFont.
* otlLib:
* Replaced environment variable for GPOS compression level with
an equivalent option using the new config system.
* designspaceLib:
* Incremented format version to 5.0
* Added discrete axes, variable fonts, STAT information, either
design- or user-space location on instances.
* Added fontTools.designspaceLib.split module to split a designspace
into sub-spaces that interpolate and that represent the variable
fonts listed in the document.
* Made instance names optional and allow computing them from
STAT data instead.
* Added fontTools.designspaceLib.statNames module.
* Allow instances to have the same location as a previously
defined STAT label.
* Deprecated some attributes:
SourceDescriptor: copyLib, copyInfo, copyGroups, copyFeatures.
InstanceDescriptor: kerning, info; glyphs: use rules or sparse sources.
For both, location: use the more explicit designLocation.
* varLib:
* Added build_many to build several variable fonts from a
single designspace document
* Added fontTools.varLib.stat module to build STAT tables
from a designspace document.
* otBase:
* Try to use the Harfbuzz Repacker for packing GSUB/GPOS tables
when uharfbuzz python bindings are available
* CFF/T2:
* Ensure that pen.closePath() gets called for CFF2 charstrings
* Handle implicit CFF2 closePath within T2OutlineExtractor
- Update to 4.32.0
* [otlLib] Disable GPOS7 optimization to work around bug in Apple
CoreText. Always force Chaining GPOS8 for now (#2540).
* [glifLib] Added outputImpliedClosingLine=False parameter to
Glyph.draw(), to control behaviour of PointToSegmentPen
(6b4e2e7).
* [varLib.interpolatable] Check for wrong contour starting point
(#2571).
* [cffLib] Remove leftover GlobalState class and fix calls to
TopDictIndex() (#2569, #2570).
* [instancer] Clear AxisValueArray if it is empty after
instantiating (#2563).
- Release 4.31.2
* [varLib] fix instantiation of GPOS SinglePos values (#2555).
- Release 4.31.1
* [subset] fix subsetting OT-SVG when glyph id attribute is on
the root element (#2553).
- Release 4.31.0
* [ttCollection] Fixed 'ResourceWarning: unclosed file' warning
(#2549).
* [varLib.merger] Handle merging SinglePos with valueformat=0
(#2550).
* [ttFont] Update glyf's glyphOrder when calling
TTFont.setGlyphOrder() (#2544).
* [ttFont] Added ensureDecompiled method to load all tables
irrespective of the lazy attribute (#2551).
* [otBase] Added iterSubTable method to iterate over BaseTable's
children of type BaseTable; useful for traversing a tree of
otTables (#2551).
- Release 4.30.0
* [varLib] Added debug logger showing the glyph name for which
gvar is built (#2542).
* [varLib.errors] Fixed undefined names in FoundANone and
UnsupportedFormat exceptions (ac4d561).
* [otlLib.builder] Added windowsNames and macNames (bool)
parameters to the buildStatTable function, so that one can
select whether to only add one or both of the two sets (#2528).
* [t1Lib] Added the ability to recreate PostScript stream
(#2504).
* [name] Added getFirstDebugName,
getBest{Family,SubFamily,Full}Name methods (#2526).
- Update to 4.29.1
* [colorLib] Fixed rounding issue with radial gradient's start/end
circles inside one another (#2521).
* [freetypePen] Handle rotate/skew transform when auto-computing
width/height of the buffer; raise PenError wen missing moveTo
(#2517)
- Release 4.29.0
* [ufoLib] Fixed illegal characters and expanded reserved
filenames (#2506).
* [COLRv1] Don't emit useless PaintColrLayers of lenght=1 in
LayerListBuilder (#2513).
* [ttx] Removed legacy waitForKeyPress method on Windows (#2509).
* [pens] Added FreeTypePen that uses freetype-py and the pen
protocol for rasterizating outline paths (#2494).
* [unicodedata] Updated the script direction list to Unicode 14.0
(#2484).
* Bumped unicodedata2 dependency to 14.0 (#2499).
* [psLib] Fixed type of fontName in suckfont (#2496).
- update to 4.28.5:
* make sure all occurrences of str() are now replaced with user-defined ntos
* refactored code into submodules, plus several bugfixes and improvements
* Merge GDEF marksets in Lookups properly
* Have fontTools feaLib script exit with error code when build fails
* Added ntos option to customize number formatting
* Speed up subsetting of large CFF fonts
* Speculatively promote lookups to extension to speed up compilation
- remove curves.json now included in the GitHub archive
- Update to 4.28.3
* [subset] Fixed bug while subsetting COLR table, whereby
incomplete layer records pointing to missing glyphs were being
retained leading to struct.error upon compiling. Make it so
that glyf glyph closure, which follows the COLR glyph closure,
does not influence the COLR table subsetting (#2461, #2462).
* [docs] Fully document the cmap and glyf tables (#2454, #2457).
* [colorLib.unbuilder] Fixed CLI by deleting no longer existing
parameter (180bb1867).
- Release 4.28.2
* [otlLib] Remove duplicates when building coverage (#2433).
* [docs] Add interrogate configuration (#2443).
* [docs] Remove comment about missing “start” optional argument
to calcChecksum (#2448).
* [cu2qu/cli] Adapt to the latest ufoLib2.
* [subset] Support subsetting SVG table and remove it from the
list of drop by default tables (#534).
* [subset] add --pretty-svg option to pretty print SVG table
contents (#2452).
* [merge] Support merging CFF tables (CID-keyed CFF is still not
supported) (#2447).
* [merge] Support --output-file (#2447).
* [docs] Split table docs into individual pages (#2444).
* [feaLib] Forbid empty classes (#2446).
* [docs] Improve documentation for fontTools.ttLib.ttFont
(#2442).
- Release 4.28.1
* [subset] Fixed AttributeError while traversing a color glyph's
Paint graph when there is no LayerList, which is optional
(#2441).
- Release 4.28.0
* Dropped support for EOL Python 3.6, require Python 3.7 (#2417).
* [ufoLib/glifLib] Make filename-clash checks faster by using a
set instead of a list (#2422).
* [subset] Don't crash if optional ClipList and LayerList are
None (empty) (#2424, 2439).
* [OT-SVG] Removed support for old deprecated version 1 and
embedded color palettes, which were never officially part of
the OpenType SVG spec. Upon compile, reuse offsets to SVG
documents that are identical (#2430).
* [feaLib] Added support for Variable Feature File syntax. This
is experimental and subject to change until it is finalized in
the Adobe FEA spec (#2432).
* [unicodedata] Update Scripts/ScriptExtensions/Blocks to
UnicodeData 14.0 (#2437).
- Release 4.27.1
* [otlLib] Fixed error when chained contextual lookup builder
overflows (#2404, #2411).
* [bezierTools] Fixed two floating-point bugs: one when computing
t for a point lying on an almost horizontal/vertical line;
another when computing the intersection point between a curve
and a line (#2413).
- Release 4.27.0
* [ttLib/otTables] Cleaned up virtual GID handling: allow virtual
GIDs in Coverage and ClassDef readers; removed unused allowVID
argument from TTFont constructor, and requireReal argument in
TTFont.getGlyphID method. Make TTFont.setGlyphOrder clear
reverse glyphOrder map, and assume glyphOrder internal
attribute is never modified outside setGlyphOrder; added
TTFont.getGlyphNameMany and getGlyphIDMany (#1536, #1654,
#2334, #2398).
* [py23] Dropped internal use of fontTools.py23 module to fix
deprecation warnings in client code that imports from fontTools
(#2234, #2399, #2400).
* [subset] Fix subsetting COLRv1 clip boxes when font is loaded
lazily (#2408).
- Release 4.26.2
* [otTables] Added missing CompositeMode.PLUS operator (#2390).
- Release 4.26.1
* [transform] Added transformVector and transformVectors methods
to the Transform class. Similar to transformPoint but ignore
the translation part (#2386).
- Release 4.26.0
* [xmlWriter] Default to "\n" for newlinestr instead of
platform-specific os.linesep (#2384).
* [otData] Define COLRv1 ClipList and ClipBox (#2379).
* [removeOverlaps/instancer] Added --ignore-overlap-errors option
to work around Skia PathOps.Simplify bug (#2382, #2363,
google/fonts#3365).
* NOTE: This will be the last version to support Python 3.6.
FontTools will require Python 3.7 or above from the next
release (#2350)
- Release 4.25.2
* [COLRv1] Various changes to sync with the latest CORLv1 draft
spec. In particular: define COLR.VarIndexMap, remove/inline
ColorIndex struct, add VarIndexBase to PaintVar* tables
(#2372); add reduced-precicion specialized transform Paints;
define Angle as fraction of half circle encoded as F2Dot14; use
FWORD (int16) for all Paint center coordinates; change
PaintTransform to have an offset to Affine2x3;
* [ttLib] when importing XML, only set sfntVersion if the font
has no reader and is empty (#2376)
- Release 4.25.1
* [ttGlyphPen] Fixed bug in TTGlyphPointPen, whereby open
contours (i.e. starting with segmentType "move") would throw
NotImplementedError. They are now treated as if they are
closed, like with the TTGlyphPen (#2364, #2366).
- Release 4.25.0
* [tfmLib] Added new library for parsing TeX Font Metric (TFM)
files (#2354).
* [TupleVariation] Make shared tuples order deterministic on
python < 3.7 where Counter (subclass of dict) doesn't remember
insertion order (#2351, #2353).
* [otData] Renamed COLRv1 structs to remove 'v1' suffix and match
the updated draft spec: 'LayerV1List' -> 'LayerList',
'BaseGlyphV1List' -> 'BaseGlyphList', 'BaseGlyphV1Record' ->
'BaseGlyphPaintRecord' (#2346). Added 8 new PaintScale* tables:
with/without centers, uniform vs non-uniform. Added
*AroundCenter variants to PaintRotate and PaintSkew: the
default versions no longer have centerX/Y, but default to
origin. PaintRotate, PaintSkew and PaintComposite formats were
re-numbered. NOTE: these are breaking changes; clients using
the experimental COLRv1 API will have to be updated (#2348).
* [pointPens] Allow GuessSmoothPointPen to accept a tolerance.
Fixed call to math.atan2 with x/y parameters inverted. Sync the
code with fontPens (#2344).
* [post] Fixed parsing post table format 2.0 when it contains
extra garbage at the end of the stringData array (#2314).
* [subset] drop empty features unless 'size' with FeatureParams
table (#2324).
* [otlLib] Added otlLib.optimize module; added GPOS compaction
algorithm. The compaction can be run on existing fonts with
fonttools otlLib.optimize or using the snippet compact_gpos.py.
There's experimental support for compacting fonts at
compilation time using an environment variable, but that might
be removed later (#2326).
- Release 4.24.4
* [subset/instancer] Fixed AttributeError when instantiating a VF
that contains GPOS ValueRecords with Device tables but without
the respective non-Device values (e.g. XAdvDevice without
XAdvance). When not explicitly set, the latter are assumed to
be 0 (#2323).
- Release 4.24.3
* [otTables] Fixed AttributeError in methods that split
LigatureSubst, MultipleSubst and AlternateSubst subtables when
an offset overflow occurs. The Format attribute was removed in
v4.22.0 (#2319).
- Release 4.24.2
* [ttGlyphPen] Fixed typing annotation of TTGlyphPen glyphSet
parameter (#2315).
* Fixed two instances of DeprecationWarning: invalid escape
sequence (#2311).
- Release 4.24.1
* [subset] Fixed AttributeError when SinglePos subtable has None
Value (ValueFormat 0) (#2312, #2313).
- Release 4.24.0
* [pens] Add ttGlyphPen.TTGlyphPointPen similar to TTGlyphPen
(#2205).
- Release 4.23.1
* [subset] Fix KeyError after subsetting COLR table that
initially contains both v0 and v1 color glyphs when the subset
only requested v1 glyphs; we were not pruning the v0 portion of
the table (#2308).
* [colorLib] Set LayerV1List attribute to None when empty, it's
optional in CORLv1 (#2308).
- Release 4.23.0
* [designspaceLib] Allow to use \\UNC absolute paths on Windows
(#2299, #2306).
* [varLib.merger] Fixed bug where VarLibMergeError was raised
with incorrect parameters (#2300).
* [feaLib] Allow substituting a glyph class with NULL to delete
multiple glyphs (#2303).
* [glyf] Fixed NameError exception in getPhantomPoints (#2295,
#2305).
* [removeOverlaps] Retry pathops.simplify after rounding path
coordinates to integers if it fails the first time using
floats, to work around a rare and hard to debug Skia bug
(#2288).
* [varLib] Added support for building, reading, writing and
optimizing 32-bit ItemVariationStore as used in COLRv1 table
(#2285).
* [otBase/otConverters] Add array readers/writers for int types
(#2285).
* [feaLib] Allow more than one lookahead glyph/class in
contextual positioning with "value at end" (#2293, #2294).
* [COLRv1] Default varIdx should be 0xFFFFFFFF (#2297, #2298).
* [pens] Make RecordingPointPen actually pass on identifiers;
replace asserts with explicit PenError exception (#2284).
* [mutator] Round lsb for CF2 fonts as well (#2286).
- Release 4.22.1
* [feaLib] Skip references to named lookups if the lookup block
definition is empty, similarly to makeotf. This also fixes an
AttributeError while generating aalt feature (#2276, #2277).
* [subset] Fixed bug with --no-hinting implementation for Device
tables (#2272, #2275). The previous code was alwyas dropping
Device tables if no-hinting was requested, but some Device
tables (DeltaFormat=0x8000) are also used to encode variation
indices and need to be retained.
* [otBase] Fixed bug in getting the ValueRecordSize when
decompiling MVAR table with lazy=True (#2273, #2274).
* [varLib/glyf/gvar] Optimized and simplified GlyphCoordinates
and TupleVariation classes, use bytearray where possible,
refactored phantom-points calculations. We measured about 30%
speedup in total time of loading master ttfs, building gvar,
and saving (#2261, #2266).
* [subset] Fixed AssertionError while pruning unused CPAL
palettes when 0xFFFF is present (#2257, #2259).
- Release 4.22.0
* [ttLib] Remove .Format from Coverage, ClassDef, SingleSubst,
LigatureSubst, AlternateSubst, MultipleSubst (#2238).
ATTENTION: This will change your TTX dumps!
* [misc.arrayTools] move Vector to its own submodule, and rewrite
as a tuple subclass (#2201).
* [docs] Added a terminology section for varLib (#2209).
* [varLib] Move rounding to VariationModel, to avoid error
accumulation from multiple deltas (#2214)
* [varLib] Explain merge errors in more human-friendly terms
(#2223, #2226)
* [otlLib] Correct some documentation (#2225)
* [varLib/otlLib] Allow merging into VariationFont without first
saving GPOS PairPos2 (#2229)
* [subset] Improve PairPosFormat2 subsetting (#2221)
* [ttLib] TTFont.save: create file on disk as late as possible
(#2253)
* [cffLib] Add missing CFF2 dict operators LanguageGroup and
ExpansionFactor (#2249) ATTENTION: This will change your TTX
dumps!
- Support for python36 has been dropped
- Use Github archive instead of zipfile from PyPI because it has
the test fonts.
- The `fonttools` command is now documented and tested in the test
suite.
- Release 4.21.1
* [pens] Reverted breaking change that turned AbstractPen and
AbstractPointPen into abstract base classes (#2164, #2198).
- Release 4.21.0
* [feaLib] Indent anchor statements in asFea() to make them more
legible and diff-able (#2193).
* [pens] Turn AbstractPen and AbstractPointPen into abstract
base classes (#2164).
* [feaLib] Added support for parsing and building STAT table
from AFDKO feature files (#2039).
* [instancer] Added option to update name table of generated
instance using STAT table's axis values (#2189).
* [bezierTools] Added functions to compute bezier point-at-time,
as well as line-line, curve-line and curve-curve intersections
(#2192).
* [arrayTools] Added rectArea function to compute area of
rectangle (#2192).
- Release 4.20.0
* [COLRv1] Added unbuildColrV1 to deconstruct COLRv1 otTables to
raw json-able data structure; it does the reverse of
buildColrV1 (#2171).
* [feaLib] Allow sub X by NULL sequence to delete a glyph (#2170)
* [arrayTools] Fixed Vector division (#2173).
* [COLRv1] Define new PaintSweepGradient (#2172).
* [otTables] Moved Paint.Format enum class outside of Paint
class definition, now named PaintFormat. It was clashing with
paint instance Format attribute and thus was breaking lazy
load of COLR table which relies on magic __getattr__ (#2175).
* [COLRv1] Replace hand-coded builder functions with
otData-driven dynamic implementation (#2181).
* [COLRv1] Define additional static (non-variable) Paint formats
(#2181).
* [subset] Added support for subsetting COLR v1 and CPAL tables
(#2174, #2177).
* [fontBuilder] Allow setupFvar to optionally take
designspaceLib.AxisDescriptor objects. Added new setupAvar
method. Support localised names for axes and named instances
(#2185).
- Don't update to 4.22 yet because it breaks afdko
- Clarify fs requirement
- We do Require fs module.
- Update to 4.19.1
* [woff2] An initial off-curve point with an overlap flag now
stays an off-curve point after compression.
- Changes in 4.19.0
* [codecs] Handle errors parameter different from 'strict' for
the custom extended mac encodings (#2137, #2132).
* [featureVars] Raise better error message when a script is
missing the required default language system (#2154).
* [COLRv1] Avoid abrupt change caused by rounding
PaintRadialGradient.c0 when the start circle almost touches
the end circle's perimeter (#2148).
* [COLRv1] Support building unlimited lists of paints as 255-ary
trees of PaintColrLayers tables (#2153).
* [subset] Prune redundant format-12 cmap subtables when all
non-BMP characters are dropped (#2146).
* [basePen] Raise MissingComponentError instead of bare KeyError
when a referenced component is missing (#2145).
- Only 'Recommend:' optional extra requirements (Some are not
available in TW python36 flavor anymore)
- Don't require python36-scipy for testing. (NEP 29)
- update to 4.18.2:
- [COLRv1] Implemented ``PaintTranslate`` paint format (#2129).
- [varLib.cff] Fixed unbound local variable error (#1787).
- [otlLib] Don't crash when creating OpenType class definitions if some glyphs
occur more than once (#2125).
- [colorLib] Speed optimization for ``LayerV1ListBuilder`` (#2119).
- [mutator] Fixed missing tab in ``interpolate_cff2_metrics`` (0957dc7a).
- [COLRv1] Update to latest draft: added ``PaintRotate`` and ``PaintSkew`` (#2118).
- [woff2] Support new ``brotlicffi`` bindings for PyPy (#2117).
- [glifLib] Added ``expectContentsFile`` parameter to ``GlyphSet``, for use when
reading existing UFOs, to comply with the specification stating that a
``contents.plist`` file must exist in a glyph set (#2114).
- [subset] Allow ``LangSys`` tags in ``--layout-scripts`` option (#2112). For example:
``--layout-scripts=arab.dflt,arab.URD,latn``; this will keep ``DefaultLangSys``
and ``URD`` language for ``arab`` script, and all languages for ``latn`` script.
- [varLib.interpolatable] Allow UFOs to be checked; report open paths, non existant
glyphs; add a ``--json`` option to produce a machine-readable list of
incompatibilities
- [pens] Added ``QuartzPen`` to create ``CGPath`` from glyph outlines on macOS.
Requires pyobjc (#2107).
- [feaLib] You can export ``FONTTOOLS_LOOKUP_DEBUGGING=1`` to enable feature file
debugging info stored in ``Debg`` table (#2106).
- [otlLib] Build more efficient format 1 and format 2 contextual lookups whenever
possible (#2101).
- [colorLib] Fixed regression in 4.17.0 when building COLR v0 table; when color
layers are stored in UFO lib plist, we can't distinguish tuples from lists so
we need to accept either types (e5439eb9, googlefonts/ufo2ft/issues#426).
- [colorLib/otData] Updated to latest draft ``COLR`` v1 spec (#2092).
- [svgLib] Fixed parsing error when arc commands' boolean flags are not separated
by space or comma (#2094).
- [varLib] Interpret empty non-default glyphs as 'missing', if the default glyph is
not empty (#2082).
- [feaLib.builder] Only stash lookup location for ``Debg`` if ``Builder.buildLookups_``
has cooperated (#2065, #2067).
- [varLib] Fixed bug in VarStore optimizer (#2073, #2083).
- [varLib] Add designspace lib key for custom feavar feature tag (#2080).
- Add HashPointPen adapted from psautohint. With this pen, a hash value of a glyph
can be computed, which can later be used to detect glyph changes (#2005).
- [varLib.instancer] Fixed ``TypeError`` exception when instantiating a VF with
a GSUB table 1.1 in which ``FeatureVariations`` attribute is present but set to
``None`` -- indicating that optional ``FeatureVariations`` is missing (#2077).
- [glifLib] Make ``x`` and ``y`` attributes of the ``point`` element required
even when validation is turned off, and raise a meaningful ``GlifLibError``
message when that happens (#2075).
- [removeOverlaps] Added new module and ``removeOverlaps`` function that merges
overlapping contours and components in TrueType glyphs. It requires the
`skia-pathops `__ module.
Note that removing overlaps invalidates the TrueType hinting (#2068).
- [varLib.instancer] Added ``--remove-overlaps`` command-line option.
The ``overlap`` option in ``instantiateVariableFont`` now takes an ``OverlapMode``
enum: 0: KEEP_AND_DONT_SET_FLAGS, 1: KEEP_AND_SET_FLAGS (default), and 2: REMOVE.
The latter is equivalent to calling ``removeOverlaps`` on the generated static
instance. The option continues to accept ``bool`` value for backward compatibility.
- [plistlib] Added typing annotations to plistlib module. Set up mypy static
typechecker to run automatically on CI (#2061).
- [ttLib] Implement private ``Debg`` table, a reverse-DNS namespaced JSON dict.
- [feaLib] Optionally add an entry into the ``Debg`` table with the original
lookup name (if any), feature name / script / language combination (if any),
and original source filename and line location. Annotate the ttx output for
a lookup with the information from the Debg table (#2052).
- [sfnt] Disabled checksum checking by default in ``SFNTReader`` (#2058).
- [Docs] Document ``mtiLib`` module (#2027).
- [varLib.interpolatable] Added checks for contour node count and operation type
of each node (#2054).
- [ttLib] Added API to register custom table packer/unpacker classes (#2055).
- [feaLib] Allow anonymous classes in LookupFlags definitions (#2037).
- [Docs] Better document DesignSpace rules processing order (#2041).
- [ttLib] Fixed 21-year old bug in ``maxp.maxComponentDepth`` calculation (#2044,
#2045).
- [varLib.models] Fixed misspelled argument name in CLI entry point (81d0042a).
- [subset] When subsetting GSUB v1.1, fixed TypeError by checking whether the
optional FeatureVariations table is present (e63ecc5b).
- [Snippets] Added snippet to show how to decompose glyphs in a TTF (#2030).
- [otlLib] Generate GSUB type 5 and GPOS type 7 contextual lookups where appropriate
(#2016).
- [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored
some common code (#2004, #2007).
- [docs] Document otlLib module (#2009).
- [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive
filesystems (#2001, #2002).
- [colorLib] Updated COLRv1 implementation following changes in the draft spec:
(#2008, googlefonts/colr-gradients-spec#24).
- Switch from brotlipy to Brotli (bsc#1175303)
- Update to 4.13.0
* [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored
some common code (#2004, #2007).
* [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive
filesystems (#2001, #2002).
* [_n_a_m_e] Fixed error in ``addMultilingualName`` with one-character names.
Only attempt to recovered malformed UTF *16 data from a ``bytes`` string,
not from unicode ``str`` (#1997, #1998).
* [OS/2] Don't calculate whole sets of unicode codepoints, use faster and more memory
efficient ranges and bisect lookups (#1984).
* [voltLib] Support writing back abstract syntax tree as VOLT data (#1983).
* [voltLib] Accept DO_NOT_TOUCH_CMAP keyword (#1987).
* [ufoLib] Silently delete duplicate glyphs within the same kerning group when reading
groups (#1970).
* [ttLib] Set version of COLR table when decompiling COLRv1 (commit 9d8a7e2).
- %python3_only -> %python_alternative
- Update to 4.10.2:
* Note: The v4.x version series only supports Python 3.6 or greater.
* see NEWS.rst for the full changelog
- Use _multibuild to run the tests in a different flavor and make it
possible to BuildRequire ufoLib2 (which requires FontTools to build)
without creating a dependency cycle.
- Add curves.json from upstream as a separate source as it's
missing from the zip file.
- version update to 3.39.0
see NEWS.rst
- deleted patches
- 349cd94d171cf4e1e7541884df0d12bb6d4e841a.patch (upstreamed)
- fix-missing-sys.patch (upstreamed)
- run the testsuite
- do not provide extra subpackage for tools
- do not require python-munkres, it is suprefluous when scipy is
required
- Upstream provided fix for the issue with big endian machines. Remove
fonttools-disable_failing_tests_bigendian.patch and replace with
349cd94d171cf4e1e7541884df0d12bb6d4e841a.patch
- Upstream fix has a missing import; thus fix-missing-sys.patch
- Update to 3.29.0:
too many changes to enlist here, complete list is on
https://github.com/fonttools/fonttools/releases
- add fonttools-disable_failing_tests_bigendian.patch
disable two tests currently failing on bigendian archs
- Update to version 3.24.1
* [varLib] Don’t remap the same DeviceTable twice in VarStore
optimizer (#1206).
* [varLib] Add --disable-iup option to fonttools varLib script,
and a optimize=True keyword argument to varLib.build function,
to optionally disable IUP optimization while building varfonts.
* [ttCollection] Fixed issue while decompiling ttc with python3
(#1207).
- Update to version 3.24.0
* [ttGlyphPen] Decompose composite glyphs if any components’
transform is too large to fit a F2Dot14 value, or clamp
transform values that are (almost) equal to +2.0 to make them
fit and avoid decomposing (#1200, #1204, #1205).
* [ttx] Added new -g option to dump glyphs from the glyf table
splitted as individual ttx files (#153, #1035, #1132, #1202).
* Copied ufoLib.filenames module to fontTools.misc.filenames,
used for the ttx split-glyphs option (#1202).
* [feaLib] Added support for cvParameters blocks in Character
Variant feautures cv01-cv99 (#860, #1169).
* [Snippets] Added checksum.py script to generate/check SHA1
hash of ttx files (#1197).
* [varLib.mutator] Fixed issue while instantiating some variable
fonts whereby the horizontal advance width computed from gvar
phantom points could turn up to be negative (#1198).
* [varLib/subset] Fixed issue with subsetting GPOS variation
data not picking up ValueRecord Device objects (54fd71f).
* [feaLib/voltLib] In all AST elements, the location is no
longer a required positional argument, but an optional
kewyord argument (defaults to None). This will make it easier
to construct feature AST from code (#1201).
- Update to version 3.23.0
* [designspaceLib] Added an optional lib element to the
designspace as a whole, as well as to the instance elements,
to store arbitrary data in a property list dictionary, similar
to the UFO’s lib. Added an optional font attribute to the
SourceDescriptor, to allow operating on in-memory font objects
(#1175).
* [cffLib] Fixed issue with lazy-loading of attributes when
attempting to set the CFF TopDict.Encoding (#1177, #1187).
* [ttx] Fixed regression introduced in 3.22.0 that affected
the split tables -s option (#1188).
* [feaLib] Added IncludedFeaNotFound custom exception subclass,
raised when an included feature file cannot be found (#1186).
* [otTables] Changed VarIdxMap to use glyph names internally
instead of glyph indexes. The old ttx dumps of HVAR/VVAR
tables that contain indexes can still be imported
(21cbab8, 38a0ffb).
* [varLib] Implemented VarStore optimizer (#1184).
* [subset] Implemented pruning of GDEF VarStore, HVAR and
MVAR (#1179).
* [sfnt] Restore backward compatiblity with numFonts attribute
of SFNTReader object (#1181).
* [merge] Initial support for merging LangSysRecords (#1180).
* [ttCollection] don’t seek(0) when writing to possibly
unseekable strems.
* [subset] Keep all --name-IDs from 0 to 6 by default
(#1170, #605, #114).
* [cffLib] Added width module to calculate optimal CFF default
and nominal glyph widths.
* [varLib] Don’t fail if STAT already in the master fonts
(#1166).
- Fix conflict with old single-package version
- Fix building on tumbleweed
- Initial version

Request History
Matej Cepl's avatar

mcepl created request

- update to 4.47.2:
* [merge] Improve help message and add standard command line
options
* [otlLib] Pass ttFont to name.addName in buildStatTable
* [featureVars] Re-use FeatureVariationRecord's when possible
- always obsolete fonttools. We have switched to python311 stack
in SLE15 and need to get the obsoletes back
- Update to 4.47.0
- [varLib.models] New API for VariationModel: getMasterScalars and interpolateFromValuesAndScalars.
- [varLib.interpolatable] Various bugfixes and rendering improvements.
In particular, add a Summary page in the front, and an Index and Table-of-Contents in the back.
Change the page size to Letter.
- [Docs/designspaceLib] Defined a new public.fontInfo lib key, not used anywhere yet (#3358).
- Changes from 4.46.0
- [featureVars] Allow to register the same set of substitution rules to multiple features.
The addFeatureVariations function can now take a list of featureTags; similarly, the lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can now take a comma-separateed string
of feature tags (e.g. "salt,ss01") instead of a single tag (#3360).
- [featureVars] Don't overwrite GSUB FeatureVariations, but append new records to it
for features which are not already there. But raise VarLibError if the feature tag
already has feature variations associated with it (#3363).
- [varLib] Added addGSUBFeatureVariations function to add GSUB Feature Variations to
an existing variable font from rules defined in a DesignSpace document (#3362).
- [varLib.interpolatable] Various bugfixes and rendering improvements. In particular,
a new test for "underweight" glyphs. The new test reports quite a few false-positives though.
Please send feedback.
- Changes from 4.45.1
- [varLib.interpolatable] Various bugfixes and improvements, better reporting, reduced false positives.
- [ttGlyphSet] Added option to not recalculate glyf bounds (#3348).
- Changes from 4.45.0
- [varLib.interpolator] Vastly improved algorithms. Also available now is --pdf and
--html options to generate a PDF or HTML report of the interpolation issues.
- The PDF/HTML report showcases the problematic masters, the interpolated broken glyph,
as well as the proposed fixed version.
- Changes from 4.44.3
- [subset] Only prune codepage ranges for OS/2.version >= 1, ignore otherwise (#3334).
- [instancer] Ensure hhea vertical metrics stay in sync with OS/2 ones after
instancing MVAR table containing 'hasc', 'hdsc' or 'hlgp' tags (#3297).
- Changes from 4.44.2
- [glyf] Have Glyph.recalcBounds skip empty components (base glyph with no contours)
when computing the bounding box of composite glyphs. This simply restores the existing behavior
before some changes were introduced in fonttools 4.44.0 (#3333).
- Changes from 4.44.1
- [feaLib] Ensure variable mark anchors are deep-copied while building
since they get modified in-place and later reused (#3330).
- [OS/2|subset] Added method to recalcCodePageRanges to OS/2 table class;
added --prune-codepage-ranges to fonttools subset command (#3328, #2607).
NOTE: this release was "yanked" from PyPI because it introduced a regression: #3334
- Changes from 4.44.0
- [instancer] Recalc OS/2 AvgCharWidth after instancing if default changes (#3317).
- [otlLib] Make ClassDefBuilder class order match varLib.merger's, i.e. large classes first,
then glyph lexicographic order (#3321, #3324).
- [instancer] Allow not specifying any of min:default:max values and let be filled up with fvar's values (#3322, #3323).
- [instancer] When running --update-name-table ignore axes that have no STAT axis values (#3318, #3319).
- [Debg] When dumping to ttx, write the embedded JSON as multi-line string with indentation (92cbfee).
- [varStore] Handle > 65535 items per encoding by splitting VarData subtable (#3310).
- [subset] Handle null-offsets in MarkLigPos subtables.
- [subset] Keep East Asian spacing fatures vhal, halt, chws, vchw by default (#3305).
- [instancer.solver] Fixed case where axisDef < lower and upper < axisMax (#3304).
- [glyf] Speed up compilation, mostly around recalcBounds (#3301).
- [varLib.interpolatable] Speed it up when working on variable fonts, plus various micro-optimizations (#3300).
- Require unicodedata2 >= 15.1.0 when installed with 'unicode' extra, contains UCD 15.1.
- Changes from 4.43.1
- [EBDT] Fixed TypeError exception in _reverseBytes method triggered
when dumping some bitmap fonts with ttx -z bitwise option (#3162).
- [v/hhea] Fixed UnboundLocalError exception in recalc method when no vmtx or hmtx tables are present (#3290).
- [bezierTools] Fixed incorrectly typed cython local variable leading to TypeError
when calling calcQuadraticArcLength (#3288).
- [feaLib/otlLib] Better error message when building Coverage table with missing glyph (#3286).
- Changes from 4.43.0
- [subset] Set up lxml XMLParser(resolve_entities=False) when parsing OT-SVG documents
to prevent XML External Entity (XXE) attacks (9f61271, CVE-2023-45139, bsc#1218748):
https://codeql.github.com/codeql-query-help/python/py-xxe/
- [varLib.iup] Added workaround for a Cython bug in iup_delta_optimize
that was leading to IUP tolerance being incorrectly initialised,
resulting in sub-optimal deltas (6012643, cython/cython#5732).
- [varLib] Added new command-line entry point fonttools varLib.avar to add an avar table
to an existing VF from axes mappings in a .designspace file (0a3360e).
- [instancer] Fixed bug whereby no longer used variation regions were not correctly pruned after VarData optimization (#3268).
- Added support for Python 3.12 (#3283).
- Changes from 4.42.1
- [t1Lib] Fixed several Type 1 issues (#3238, #3240).
- [otBase/packer] Allow sharing tables reached by different offset sizes (#3241, #3236, 457f11c).
- [varLib/merger] Fix Cursive attachment merging error when all anchors are NULL (#3248, #3247).
- [ttLib] Fixed warning when calling addMultilingualName and ttFont parameter
was not passed on to findMultilingualName (#3253).
- Changes from 4.42.0
- [varLib] Use sentinel value 0xFFFF to mark a glyph advance in hmtx/vmtx as non participating,
allowing sparse masters to contain glyphs for variation purposes other than {H,V}VAR (#3235).
- [varLib/cff] Treat empty glyphs in non-default masters as missing,
thus not participating in CFF2 delta computation, similarly to how
varLib already treats them for gvar (#3234).
- Added varLib.avarPlanner script to deduce 'correct' avar v1 axis mappings based on glyph average weights (#3223).
- Changes from 4.41.1
- [subset] Fixed perf regression in v4.41.0 by making NameRecordVisitor
only visit tables that do contain nameID references (#3213, #3214).
- [varLib.instancer] Support instancing fonts containing null ConditionSet offsets
in FeatureVariationRecords (#3211, #3212).
- [statisticsPen] Report font glyph-average weight/width and font-wide slant.
- [fontBuilder] Fixed head.created date incorrectly set to 0 instead of the current timestamp,
regression introduced in v4.40.0 (#3210).
- [varLib.merger] Support sparse CursivePos masters (#3209).
- Changes from 4.41.0
- [fontBuilder] Fixed bug in setupOS2 with default panose attribute
incorrectly being set to a dict instead of a Panose object (#3201).
- [name] Added method to removeUnusedNameRecords in the user range (#3185).
- [varLib.instancer] Fixed issue with L4 instancing (moving default) (#3179).
- [cffLib] Use latin1 so we can roundtrip non-ASCII in {Full,Font,Family}Name (#3202).
- [designspaceLib] Mark as optional in docs (as it is in the code).
- [glyf-1] Fixed drawPoints() bug whereby last cubic segment becomes quadratic (#3189, #3190).
- [fontBuilder] Propagate the 'hidden' flag to the fvar Axis instance (#3184).
- [fontBuilder] Update setupAvar() to also support avar 2, fixing _add_avar() call site (#3183).
- Added new voltLib.voltToFea submodule (originally Tiro Typeworks' "Volto")
for converting VOLT OpenType Layout sources to FEA format (#3164).
- Changes from 4.40.0
- Published native binary wheels to PyPI for all the python minor versions
and platform and architectures currently supported that would benefit from this.
They will include precompiled Cython-accelerated modules (e.g. cu2qu) without
requiring to compile them from source. The pure-python wheel and source distribution
will continue to be published as always (pip will automatically chose them when no
binary wheel is available for the given platform, e.g. pypy).
Use pip install --no-binary=fonttools fonttools to expliclity request pip to install from the pure-python source.
- [designspaceLib|varLib] Add initial support for specifying axis mappings and build avar2 table from those (#3123).
- [feaLib] Support variable ligature caret position (#3130).
- [varLib|glyf] Added option to --drop-implied-oncurves; test for impliable oncurve points either before or after rounding
(#3146, #3147, #3155, #3156).
- [TTGlyphPointPen] Don't error with empty contours, simply ignore them (#3145).
- [sfnt] Fixed str vs bytes remnant of py3 transition in code dealing with de/compiling WOFF metadata (#3129).
- [instancer-solver] Fixed bug when moving default instance with sparse masters (#3139, #3140).
- [feaLib] Simplify variable scalars that don’t vary (#3132).
- [pens] Added filter pen that explicitly emits closing line when lastPt != movePt (#3100).
- [varStore] Improve optimize algorithm and better document the algorithm (#3124, #3127).
- Added quantization option (#3126).
- Added CI workflow config file for building native binary wheels (#3121).
- [fontBuilder] Added glyphDataFormat=0 option; raise error when glyphs contain cubic outlines
but glyphDataFormat was not explicitly set to 1 (#3113, #3119).
- [subset] Prune emptied GDEF.MarkGlyphSetsDef and remap indices; ensure GDEF is subsetted before GSUB and GPOS (#3114, #3118).
- [xmlReader] Fixed issue whereby DSIG table data was incorrectly parsed (#3115, #2614).
- [varLib/merger] Fixed merging of SinglePos with pos=0 (#3111, #3112).
- [feaLib] Demote "Feature has not been defined" error to a warning when building aalt and referenced feature is empty (#3110).
- [feaLib] Dedupe multiple substitutions with classes (#3105).
- Add mssing recommends.
- Add missing setuptools to fix build error under Leap.
- update to 4.47.0:
* [varLib.models] New API for VariationModel: ``getMasterScalars``
and ``interpolateFromValuesAndScalars``.
* [varLib.interpolatable] Various bugfixes and rendering
improvements. In particular, add a Summary page in the front,
and an Index and Table-of-Contents in the back. Change the
page size to Letter.
* [Docs/designspaceLib] Defined a new ``public.fontInfo`` lib key,
not used anywhere yet (#3358).
* [featureVars] Allow to register the same set of substitution
rules to multiple features. The ``addFeatureVariations``
function can now take a list of featureTags; similarly, the
lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can
now take a comma-separateed string of feature tags (e.g.
"salt,ss01") instead of a single tag (#3360).
* [featureVars] Don't overwrite GSUB FeatureVariations, but append
new records to it for features which are not already there. But
raise ``VarLibError`` if the feature tag already has feature
variations associated with it (#3363).
* [varLib] Added ``addGSUBFeatureVariations`` function to add GSUB
Feature Variations to an existing variable font from rules
defined in a DesignSpace document (#3362).
* [varLib.interpolatable] Various bugfixes and rendering
improvements. In particular, a new test for "underweight" glyphs.
The new test reports quite a few false-positives though. Please
send feedback.
* [varLib.interpolatable] Various bugfixes and improvements, better
reporting, reduced false positives.
* [ttGlyphSet] Added option to not recalculate glyf bounds (#3348).
* [varLib.interpolatable] Vastly improved algorithms. Also
available now is ``--pdf`` and ``--html`` options to generate a
PDF or HTML report of the interpolation issues.
The PDF/HTML report showcases the problematic masters, the
interpolated broken glyph, as well as the proposed fixed version.
* [subset] Only prune codepage ranges for OS/2.version >= 1, ignore
otherwise (#3334).
* [instancer] Ensure hhea vertical metrics stay in sync with OS/2
ones after instancing MVAR table containing 'hasc', 'hdsc' or
'hlgp' tags (#3297).
* [glyf] Have ``Glyph.recalcBounds`` skip empty components (base
glyph with no contours) when computing the bounding box of
composite glyphs. This simply restores the existing
behavior before some changes were introduced in fonttools
4.44.0 (#3333).
* [feaLib] Ensure variable mark anchors are deep-copied while
building since they get modified in-place and later reused
* [OS/2|subset] Added method to ``recalcCodePageRanges`` to OS/2
table class; added ``--prune-codepage-ranges`` to `fonttools
subset` command (#3328, #2607).
- Clean up space and remove unnecessary BR python-munkres and
python-zopfli.
- update to 4.39.4:
* [varLib.interpolatable] Allow for sparse masters (#3075)
* [merge] Handle differing default/nominalWidthX in CFF (#3070)
* [ttLib] Add missing main.py file to ttLib package (#3088)
* [ttx] Fix missing composite instructions in XML (#3092)
* [ttx] Fix split tables option to work on filenames containing
'%' (#3096)
* [featureVars] Process lookups for features other than rvrn
last (#3099)
* [feaLib] support multiple substitution with classes (#3103)
- add sle15_python_module_pythons (jsc#PED-68)
- update to 4.39.3:
* [sbix] Fixed TypeError when compiling empty glyphs whose
imageData is None
* [ttFont] Fixed AttributeError on python <= 3.10 when opening
a TTFont from a tempfile
* SpooledTemporaryFile, seekable method only added on python
3.11 (#3052).
* [varLib] Fixed regression introduced in 4.39.1 whereby an
incomplete 'STAT' table would be built even though a
DesignSpace v5 did contain 'STAT' definitions (#3045, #3046).
* [avar2] Added experimental support for reading/writing avar
version 2 as specified in this draft proposal:
https://github.com/harfbuzz/boring-expansion-spec/blob/main/avar2.md
* [glifLib] Wrap underlying XML library exceptions with
GlifLibError when parsing GLIFs, and also print the name
and path of the glyph that fails to be parsed (#3042).
* [feaLib] Consult avar for normalizing user-space values in
ConditionSets and in VariableScalars (#3042, #3043).
* [ttProgram] Handle string input to Program.fromAssembly()
(#3038).
* [otlLib] Added a config option to emit GPOS 7 lookups,
currently disabled by default because of a macOS bug (#3034).
* [COLRv1] Added method to automatically compute ClipBoxes
(#3027).
* [ttFont] Fixed getGlyphID to raise KeyError on missing glyphs
instead of returning None.
* [sbix] Fixed UnboundLocalError: cannot access local variable
'rawdata' (#3031).
* [varLib] When building VF, do not overwrite a pre-existing
``STAT`` table that was built with feaLib from FEA feature
file. Also, added support for building multiple VFs
defined in Designspace v5 from ``fonttools varLib`` script
* [mtiLib] Only add ``Debg`` table with lookup names when
``FONTTOOLS_LOOKUP_DEBUGGING`` env variable is set (#3023).
* [mtiLib] Optionally add `Debg` debug info for MTI feature
builds (#3018).
* [ttx] Support reading input file from standard input using
special `-` character, similar to existing `-o -` option
to write output to standard output (#3020).
* [cython] Prevent ``cython.compiled`` raise AttributeError if
cython not installed properly (#3017).
* [OS/2] Guard against ZeroDivisionError when calculating
xAvgCharWidth in the unlikely scenario no glyph has non-zero
advance (#3015).
* [subset] Recompute xAvgCharWidth independently of --no-prune-
unicode-ranges, previously the two options were involuntarily
bundled together (#3012).
* [fontBuilder] Add ``debug`` parameter to addOpenTypeFeatures
method to add source debugging information to the font in the
``Debg`` private table (#3008).
* [name] Make NameRecord `__lt__` comparison not fail on
Unicode encoding errors (#3006).
* [featureVars] Fixed bug in ``overlayBox`` (#3003, #3005).
* [glyf] Added experimental support for cubic bezier curves in
TrueType glyf table, as outlined in glyf v1 proposal (#2988):
* Added new qu2cu module and related qu2cuPen, the reverse of
cu2qu for converting TrueType quadratic splines to cubic bezier
curves (#2993).
* [glyf] Added experimental support for reading and writing
Variable Composites/Components as defined in glyf v1 spec
proposal (#2958):
* [pens]: Added `addVarComponent` method to pen protocols' base
classes, which pens can implement to handle varcomponents
* [misc.transform] Added DecomposedTransform class which
implements an affine transformation with separate translate,
rotation, scale, skew, and transformation-center components (#2598)
* [sbix] Ensure Glyph.referenceGlyphName is set; fixes error
after dumping and re-compiling sbix table with 'dupe' glyphs (#2984).
* [feaLib] Be cleverer when merging chained single
substitutions into same lookup when they are specified using
the inline notation (#2150, #2974).
* [instancer] Clamp user-inputted axis ranges to those of fvar
(#2959).
* [otBase/subset] Define ``__getstate__`` for BaseTable so that
a copied/pickled 'lazy' object gets its own OTTableReader to
read from; incidentally fixes a bug while subsetting COLRv1
table containing ClipBoxes on python 3.11
* [sbix] Handle glyphs with "dupe" graphic type on compile
correctly (#2963).
* [glyf] ``endPointsOfContours`` field should be unsigned!
Kudos to behdad for spotting one of the oldest bugs in FT.
Probably nobody has ever dared to make glyphs with more
than 32767 points... (#2957).
* [feaLib] Fixed handling of ``ignore`` statements with
unmarked glyphs to match makeotf behavior, which assumes
the first glyph is marked
* Reformatted code with ``black`` and enforce new code style
via CI check (#2925).
* [feaLib] Sort name table entries following OT spec prescribed
order in the builder (#2927).
* [cu2quPen] Add Cu2QuMultiPen that converts multiple outlines
at a time in interpolation compatible way; its methods take
a list of tuples arguments that would normally be passed to
individual segment pens, and at the end it dispatches the
converted outlines to each pen (#2912).
* [reverseContourPen/ttGlyphPen] Add outputImpliedClosingLine
option
* [gvar] Avoid expanding all glyphs unnecessarily upon compile
* [scaleUpem] Fixed bug whereby CFF2 vsindex was scaled; it
should not (#2893, #2894).
* [designspaceLib] Add DS.getAxisByTag and refactor getAxis
(#2891).
* [unicodedata] map Zmth<->math in ot_tag_{to,from}_script
(#1737, #2889).
* [woff2] Support encoding/decoding OVERLAP_SIMPLE glyf flags
(#2576, #2884).
* [instancer] Update OS/2 class and post.italicAngle when
default moved (L4)
* Dropped support for Python 3.7 which reached EOL, fontTools
requires 3.8+.
* [instancer] Fixed instantiateFeatureVariations logic when a
rule range becomes default-applicable (#2737, #2880).
* [ttLib] Add main to ttFont and ttCollection that just
decompile and re-compile the input font (#2869).
* [featureVars] Insert 'rvrn' lookup at the beginning of
LookupList, to work around bug in Apple implementation
of 'rvrn' feature which the spec says it should be processed
early whereas on macOS 10.15 it follows lookup order (#2140,
* [instancer/mutator] Remove 'DSIG' table if present.
* [svgPathPen] Don't close path in endPath(), assume open
unless closePath() (#2089, #2865).
- Dependencies for testing on sympy and ufoLib2 are actually not
necessary (the test suite automatically skips affected tests),
and scipy could be replaced by much less demanding munkres
package.
- Update to 4.38.0
* [varLib.instancer] Added support for L4 instancing, i.e. moving the
default value of an axis while keeping it variable.
* [otlLib/featureVars] Set a few Count values so one doesn't need to
compile the font to update them
* [varLib.models] Make extrapolation work for 2-master models as well
where one master is at the default location
Add optional extrapolate=False to normalizeLocation()
* [varLib.cff] Fixed sub-optimal packing of CFF2 deltas by no longer
rounding them to integer
* [scaleUpem] Calculate numShorts in VarData after scale; handle CFF
hintmasks
- Update to 4.37.1
* [subset] Fixed regression introduced with v4.37.0 while subsetting
the VarStore of HVAR and VVAR tables, whereby an
AttributeError: subset_varidxes was thrown because an apparently
unused import statement (with the side-effect of dynamically binding
that subset_varidxes method to the VarStore class) had been
accidentally deleted in an unrelated PR
* [pens] Added cairoPen
* [gvar] Read gvar more lazily by not parsing all of the glyf table
* [ttGlyphSet] Make drawPoints(pointPen) method work for CFF fonts
as well via adapter pen
* [cff.specializer] Fixed issue in charstring generalizer with the
blend operator
* [varLib.models] Added support for extrapolation
* [ttGlyphSet] Ensure the newly added _TTVarGlyphSet inherits from
_TTGlyphSet to keep backward compatibility with existing API
* [kern] Allow compiling legacy kern tables with more than 64k entries
* [visitor] Added new visitor API to traverse tree of objects and
dispatch based on the attribute type: cf. fontTools.misc.visitor
and fontTools.ttLib.ttVisitor. Added fontTools.ttLib.scaleUpem
module that uses the latter to change a font's units-per-em and
scale all the related fields accordingly
* Etc. https://github.com/fonttools/fonttools/compare/4.33.3...4.37.1
- Update to version 4.33.3
* designspaceLib:
* Fixed typo in deepcopyExceptFonts method, preventing font
references to be transferred
* Fixed another typo in the name of Range dataclass's
__post_init__ magic method
- Update to version 4.33.2
* otBase: Make logging less verbose when harfbuzz fails to serialize
Do not exit at the first failure but continue attempting to fix
offset overflow error using the pure-python serializer even when
the USE_HARFBUZZ_REPACKER option was explicitly set to True.
- Update to version 4.33.1
* otlLib:
Put back the FONTTOOLS_GPOS_COMPACT_MODE environment variable
to fix regression in ufo2ft. This is deprecated and will be
removed once ufo2ft gets updated to use the new config setup.
- Update to version 4.33.0
* Added fontTools.misc.configTools module, a generic configuration system
* Added fontTools.config module, a fontTools-specific configuration
system using configTools above.
* Attached a Config object to TTFont.
* otlLib:
* Replaced environment variable for GPOS compression level with
an equivalent option using the new config system.
* designspaceLib:
* Incremented format version to 5.0
* Added discrete axes, variable fonts, STAT information, either
design- or user-space location on instances.
* Added fontTools.designspaceLib.split module to split a designspace
into sub-spaces that interpolate and that represent the variable
fonts listed in the document.
* Made instance names optional and allow computing them from
STAT data instead.
* Added fontTools.designspaceLib.statNames module.
* Allow instances to have the same location as a previously
defined STAT label.
* Deprecated some attributes:
SourceDescriptor: copyLib, copyInfo, copyGroups, copyFeatures.
InstanceDescriptor: kerning, info; glyphs: use rules or sparse sources.
For both, location: use the more explicit designLocation.
* varLib:
* Added build_many to build several variable fonts from a
single designspace document
* Added fontTools.varLib.stat module to build STAT tables
from a designspace document.
* otBase:
* Try to use the Harfbuzz Repacker for packing GSUB/GPOS tables
when uharfbuzz python bindings are available
* CFF/T2:
* Ensure that pen.closePath() gets called for CFF2 charstrings
* Handle implicit CFF2 closePath within T2OutlineExtractor
- Update to 4.32.0
* [otlLib] Disable GPOS7 optimization to work around bug in Apple
CoreText. Always force Chaining GPOS8 for now (#2540).
* [glifLib] Added outputImpliedClosingLine=False parameter to
Glyph.draw(), to control behaviour of PointToSegmentPen
(6b4e2e7).
* [varLib.interpolatable] Check for wrong contour starting point
(#2571).
* [cffLib] Remove leftover GlobalState class and fix calls to
TopDictIndex() (#2569, #2570).
* [instancer] Clear AxisValueArray if it is empty after
instantiating (#2563).
- Release 4.31.2
* [varLib] fix instantiation of GPOS SinglePos values (#2555).
- Release 4.31.1
* [subset] fix subsetting OT-SVG when glyph id attribute is on
the root element (#2553).
- Release 4.31.0
* [ttCollection] Fixed 'ResourceWarning: unclosed file' warning
(#2549).
* [varLib.merger] Handle merging SinglePos with valueformat=0
(#2550).
* [ttFont] Update glyf's glyphOrder when calling
TTFont.setGlyphOrder() (#2544).
* [ttFont] Added ensureDecompiled method to load all tables
irrespective of the lazy attribute (#2551).
* [otBase] Added iterSubTable method to iterate over BaseTable's
children of type BaseTable; useful for traversing a tree of
otTables (#2551).
- Release 4.30.0
* [varLib] Added debug logger showing the glyph name for which
gvar is built (#2542).
* [varLib.errors] Fixed undefined names in FoundANone and
UnsupportedFormat exceptions (ac4d561).
* [otlLib.builder] Added windowsNames and macNames (bool)
parameters to the buildStatTable function, so that one can
select whether to only add one or both of the two sets (#2528).
* [t1Lib] Added the ability to recreate PostScript stream
(#2504).
* [name] Added getFirstDebugName,
getBest{Family,SubFamily,Full}Name methods (#2526).
- Update to 4.29.1
* [colorLib] Fixed rounding issue with radial gradient's start/end
circles inside one another (#2521).
* [freetypePen] Handle rotate/skew transform when auto-computing
width/height of the buffer; raise PenError wen missing moveTo
(#2517)
- Release 4.29.0
* [ufoLib] Fixed illegal characters and expanded reserved
filenames (#2506).
* [COLRv1] Don't emit useless PaintColrLayers of lenght=1 in
LayerListBuilder (#2513).
* [ttx] Removed legacy waitForKeyPress method on Windows (#2509).
* [pens] Added FreeTypePen that uses freetype-py and the pen
protocol for rasterizating outline paths (#2494).
* [unicodedata] Updated the script direction list to Unicode 14.0
(#2484).
* Bumped unicodedata2 dependency to 14.0 (#2499).
* [psLib] Fixed type of fontName in suckfont (#2496).
- update to 4.28.5:
* make sure all occurrences of str() are now replaced with user-defined ntos
* refactored code into submodules, plus several bugfixes and improvements
* Merge GDEF marksets in Lookups properly
* Have fontTools feaLib script exit with error code when build fails
* Added ntos option to customize number formatting
* Speed up subsetting of large CFF fonts
* Speculatively promote lookups to extension to speed up compilation
- remove curves.json now included in the GitHub archive
- Update to 4.28.3
* [subset] Fixed bug while subsetting COLR table, whereby
incomplete layer records pointing to missing glyphs were being
retained leading to struct.error upon compiling. Make it so
that glyf glyph closure, which follows the COLR glyph closure,
does not influence the COLR table subsetting (#2461, #2462).
* [docs] Fully document the cmap and glyf tables (#2454, #2457).
* [colorLib.unbuilder] Fixed CLI by deleting no longer existing
parameter (180bb1867).
- Release 4.28.2
* [otlLib] Remove duplicates when building coverage (#2433).
* [docs] Add interrogate configuration (#2443).
* [docs] Remove comment about missing “start” optional argument
to calcChecksum (#2448).
* [cu2qu/cli] Adapt to the latest ufoLib2.
* [subset] Support subsetting SVG table and remove it from the
list of drop by default tables (#534).
* [subset] add --pretty-svg option to pretty print SVG table
contents (#2452).
* [merge] Support merging CFF tables (CID-keyed CFF is still not
supported) (#2447).
* [merge] Support --output-file (#2447).
* [docs] Split table docs into individual pages (#2444).
* [feaLib] Forbid empty classes (#2446).
* [docs] Improve documentation for fontTools.ttLib.ttFont
(#2442).
- Release 4.28.1
* [subset] Fixed AttributeError while traversing a color glyph's
Paint graph when there is no LayerList, which is optional
(#2441).
- Release 4.28.0
* Dropped support for EOL Python 3.6, require Python 3.7 (#2417).
* [ufoLib/glifLib] Make filename-clash checks faster by using a
set instead of a list (#2422).
* [subset] Don't crash if optional ClipList and LayerList are
None (empty) (#2424, 2439).
* [OT-SVG] Removed support for old deprecated version 1 and
embedded color palettes, which were never officially part of
the OpenType SVG spec. Upon compile, reuse offsets to SVG
documents that are identical (#2430).
* [feaLib] Added support for Variable Feature File syntax. This
is experimental and subject to change until it is finalized in
the Adobe FEA spec (#2432).
* [unicodedata] Update Scripts/ScriptExtensions/Blocks to
UnicodeData 14.0 (#2437).
- Release 4.27.1
* [otlLib] Fixed error when chained contextual lookup builder
overflows (#2404, #2411).
* [bezierTools] Fixed two floating-point bugs: one when computing
t for a point lying on an almost horizontal/vertical line;
another when computing the intersection point between a curve
and a line (#2413).
- Release 4.27.0
* [ttLib/otTables] Cleaned up virtual GID handling: allow virtual
GIDs in Coverage and ClassDef readers; removed unused allowVID
argument from TTFont constructor, and requireReal argument in
TTFont.getGlyphID method. Make TTFont.setGlyphOrder clear
reverse glyphOrder map, and assume glyphOrder internal
attribute is never modified outside setGlyphOrder; added
TTFont.getGlyphNameMany and getGlyphIDMany (#1536, #1654,
#2334, #2398).
* [py23] Dropped internal use of fontTools.py23 module to fix
deprecation warnings in client code that imports from fontTools
(#2234, #2399, #2400).
* [subset] Fix subsetting COLRv1 clip boxes when font is loaded
lazily (#2408).
- Release 4.26.2
* [otTables] Added missing CompositeMode.PLUS operator (#2390).
- Release 4.26.1
* [transform] Added transformVector and transformVectors methods
to the Transform class. Similar to transformPoint but ignore
the translation part (#2386).
- Release 4.26.0
* [xmlWriter] Default to "\n" for newlinestr instead of
platform-specific os.linesep (#2384).
* [otData] Define COLRv1 ClipList and ClipBox (#2379).
* [removeOverlaps/instancer] Added --ignore-overlap-errors option
to work around Skia PathOps.Simplify bug (#2382, #2363,
google/fonts#3365).
* NOTE: This will be the last version to support Python 3.6.
FontTools will require Python 3.7 or above from the next
release (#2350)
- Release 4.25.2
* [COLRv1] Various changes to sync with the latest CORLv1 draft
spec. In particular: define COLR.VarIndexMap, remove/inline
ColorIndex struct, add VarIndexBase to PaintVar* tables
(#2372); add reduced-precicion specialized transform Paints;
define Angle as fraction of half circle encoded as F2Dot14; use
FWORD (int16) for all Paint center coordinates; change
PaintTransform to have an offset to Affine2x3;
* [ttLib] when importing XML, only set sfntVersion if the font
has no reader and is empty (#2376)
- Release 4.25.1
* [ttGlyphPen] Fixed bug in TTGlyphPointPen, whereby open
contours (i.e. starting with segmentType "move") would throw
NotImplementedError. They are now treated as if they are
closed, like with the TTGlyphPen (#2364, #2366).
- Release 4.25.0
* [tfmLib] Added new library for parsing TeX Font Metric (TFM)
files (#2354).
* [TupleVariation] Make shared tuples order deterministic on
python < 3.7 where Counter (subclass of dict) doesn't remember
insertion order (#2351, #2353).
* [otData] Renamed COLRv1 structs to remove 'v1' suffix and match
the updated draft spec: 'LayerV1List' -> 'LayerList',
'BaseGlyphV1List' -> 'BaseGlyphList', 'BaseGlyphV1Record' ->
'BaseGlyphPaintRecord' (#2346). Added 8 new PaintScale* tables:
with/without centers, uniform vs non-uniform. Added
*AroundCenter variants to PaintRotate and PaintSkew: the
default versions no longer have centerX/Y, but default to
origin. PaintRotate, PaintSkew and PaintComposite formats were
re-numbered. NOTE: these are breaking changes; clients using
the experimental COLRv1 API will have to be updated (#2348).
* [pointPens] Allow GuessSmoothPointPen to accept a tolerance.
Fixed call to math.atan2 with x/y parameters inverted. Sync the
code with fontPens (#2344).
* [post] Fixed parsing post table format 2.0 when it contains
extra garbage at the end of the stringData array (#2314).
* [subset] drop empty features unless 'size' with FeatureParams
table (#2324).
* [otlLib] Added otlLib.optimize module; added GPOS compaction
algorithm. The compaction can be run on existing fonts with
fonttools otlLib.optimize or using the snippet compact_gpos.py.
There's experimental support for compacting fonts at
compilation time using an environment variable, but that might
be removed later (#2326).
- Release 4.24.4
* [subset/instancer] Fixed AttributeError when instantiating a VF
that contains GPOS ValueRecords with Device tables but without
the respective non-Device values (e.g. XAdvDevice without
XAdvance). When not explicitly set, the latter are assumed to
be 0 (#2323).
- Release 4.24.3
* [otTables] Fixed AttributeError in methods that split
LigatureSubst, MultipleSubst and AlternateSubst subtables when
an offset overflow occurs. The Format attribute was removed in
v4.22.0 (#2319).
- Release 4.24.2
* [ttGlyphPen] Fixed typing annotation of TTGlyphPen glyphSet
parameter (#2315).
* Fixed two instances of DeprecationWarning: invalid escape
sequence (#2311).
- Release 4.24.1
* [subset] Fixed AttributeError when SinglePos subtable has None
Value (ValueFormat 0) (#2312, #2313).
- Release 4.24.0
* [pens] Add ttGlyphPen.TTGlyphPointPen similar to TTGlyphPen
(#2205).
- Release 4.23.1
* [subset] Fix KeyError after subsetting COLR table that
initially contains both v0 and v1 color glyphs when the subset
only requested v1 glyphs; we were not pruning the v0 portion of
the table (#2308).
* [colorLib] Set LayerV1List attribute to None when empty, it's
optional in CORLv1 (#2308).
- Release 4.23.0
* [designspaceLib] Allow to use \\UNC absolute paths on Windows
(#2299, #2306).
* [varLib.merger] Fixed bug where VarLibMergeError was raised
with incorrect parameters (#2300).
* [feaLib] Allow substituting a glyph class with NULL to delete
multiple glyphs (#2303).
* [glyf] Fixed NameError exception in getPhantomPoints (#2295,
#2305).
* [removeOverlaps] Retry pathops.simplify after rounding path
coordinates to integers if it fails the first time using
floats, to work around a rare and hard to debug Skia bug
(#2288).
* [varLib] Added support for building, reading, writing and
optimizing 32-bit ItemVariationStore as used in COLRv1 table
(#2285).
* [otBase/otConverters] Add array readers/writers for int types
(#2285).
* [feaLib] Allow more than one lookahead glyph/class in
contextual positioning with "value at end" (#2293, #2294).
* [COLRv1] Default varIdx should be 0xFFFFFFFF (#2297, #2298).
* [pens] Make RecordingPointPen actually pass on identifiers;
replace asserts with explicit PenError exception (#2284).
* [mutator] Round lsb for CF2 fonts as well (#2286).
- Release 4.22.1
* [feaLib] Skip references to named lookups if the lookup block
definition is empty, similarly to makeotf. This also fixes an
AttributeError while generating aalt feature (#2276, #2277).
* [subset] Fixed bug with --no-hinting implementation for Device
tables (#2272, #2275). The previous code was alwyas dropping
Device tables if no-hinting was requested, but some Device
tables (DeltaFormat=0x8000) are also used to encode variation
indices and need to be retained.
* [otBase] Fixed bug in getting the ValueRecordSize when
decompiling MVAR table with lazy=True (#2273, #2274).
* [varLib/glyf/gvar] Optimized and simplified GlyphCoordinates
and TupleVariation classes, use bytearray where possible,
refactored phantom-points calculations. We measured about 30%
speedup in total time of loading master ttfs, building gvar,
and saving (#2261, #2266).
* [subset] Fixed AssertionError while pruning unused CPAL
palettes when 0xFFFF is present (#2257, #2259).
- Release 4.22.0
* [ttLib] Remove .Format from Coverage, ClassDef, SingleSubst,
LigatureSubst, AlternateSubst, MultipleSubst (#2238).
ATTENTION: This will change your TTX dumps!
* [misc.arrayTools] move Vector to its own submodule, and rewrite
as a tuple subclass (#2201).
* [docs] Added a terminology section for varLib (#2209).
* [varLib] Move rounding to VariationModel, to avoid error
accumulation from multiple deltas (#2214)
* [varLib] Explain merge errors in more human-friendly terms
(#2223, #2226)
* [otlLib] Correct some documentation (#2225)
* [varLib/otlLib] Allow merging into VariationFont without first
saving GPOS PairPos2 (#2229)
* [subset] Improve PairPosFormat2 subsetting (#2221)
* [ttLib] TTFont.save: create file on disk as late as possible
(#2253)
* [cffLib] Add missing CFF2 dict operators LanguageGroup and
ExpansionFactor (#2249) ATTENTION: This will change your TTX
dumps!
- Support for python36 has been dropped
- Use Github archive instead of zipfile from PyPI because it has
the test fonts.
- The `fonttools` command is now documented and tested in the test
suite.
- Release 4.21.1
* [pens] Reverted breaking change that turned AbstractPen and
AbstractPointPen into abstract base classes (#2164, #2198).
- Release 4.21.0
* [feaLib] Indent anchor statements in asFea() to make them more
legible and diff-able (#2193).
* [pens] Turn AbstractPen and AbstractPointPen into abstract
base classes (#2164).
* [feaLib] Added support for parsing and building STAT table
from AFDKO feature files (#2039).
* [instancer] Added option to update name table of generated
instance using STAT table's axis values (#2189).
* [bezierTools] Added functions to compute bezier point-at-time,
as well as line-line, curve-line and curve-curve intersections
(#2192).
* [arrayTools] Added rectArea function to compute area of
rectangle (#2192).
- Release 4.20.0
* [COLRv1] Added unbuildColrV1 to deconstruct COLRv1 otTables to
raw json-able data structure; it does the reverse of
buildColrV1 (#2171).
* [feaLib] Allow sub X by NULL sequence to delete a glyph (#2170)
* [arrayTools] Fixed Vector division (#2173).
* [COLRv1] Define new PaintSweepGradient (#2172).
* [otTables] Moved Paint.Format enum class outside of Paint
class definition, now named PaintFormat. It was clashing with
paint instance Format attribute and thus was breaking lazy
load of COLR table which relies on magic __getattr__ (#2175).
* [COLRv1] Replace hand-coded builder functions with
otData-driven dynamic implementation (#2181).
* [COLRv1] Define additional static (non-variable) Paint formats
(#2181).
* [subset] Added support for subsetting COLR v1 and CPAL tables
(#2174, #2177).
* [fontBuilder] Allow setupFvar to optionally take
designspaceLib.AxisDescriptor objects. Added new setupAvar
method. Support localised names for axes and named instances
(#2185).
- Don't update to 4.22 yet because it breaks afdko
- Clarify fs requirement
- We do Require fs module.
- Update to 4.19.1
* [woff2] An initial off-curve point with an overlap flag now
stays an off-curve point after compression.
- Changes in 4.19.0
* [codecs] Handle errors parameter different from 'strict' for
the custom extended mac encodings (#2137, #2132).
* [featureVars] Raise better error message when a script is
missing the required default language system (#2154).
* [COLRv1] Avoid abrupt change caused by rounding
PaintRadialGradient.c0 when the start circle almost touches
the end circle's perimeter (#2148).
* [COLRv1] Support building unlimited lists of paints as 255-ary
trees of PaintColrLayers tables (#2153).
* [subset] Prune redundant format-12 cmap subtables when all
non-BMP characters are dropped (#2146).
* [basePen] Raise MissingComponentError instead of bare KeyError
when a referenced component is missing (#2145).
- Only 'Recommend:' optional extra requirements (Some are not
available in TW python36 flavor anymore)
- Don't require python36-scipy for testing. (NEP 29)
- update to 4.18.2:
- [COLRv1] Implemented ``PaintTranslate`` paint format (#2129).
- [varLib.cff] Fixed unbound local variable error (#1787).
- [otlLib] Don't crash when creating OpenType class definitions if some glyphs
occur more than once (#2125).
- [colorLib] Speed optimization for ``LayerV1ListBuilder`` (#2119).
- [mutator] Fixed missing tab in ``interpolate_cff2_metrics`` (0957dc7a).
- [COLRv1] Update to latest draft: added ``PaintRotate`` and ``PaintSkew`` (#2118).
- [woff2] Support new ``brotlicffi`` bindings for PyPy (#2117).
- [glifLib] Added ``expectContentsFile`` parameter to ``GlyphSet``, for use when
reading existing UFOs, to comply with the specification stating that a
``contents.plist`` file must exist in a glyph set (#2114).
- [subset] Allow ``LangSys`` tags in ``--layout-scripts`` option (#2112). For example:
``--layout-scripts=arab.dflt,arab.URD,latn``; this will keep ``DefaultLangSys``
and ``URD`` language for ``arab`` script, and all languages for ``latn`` script.
- [varLib.interpolatable] Allow UFOs to be checked; report open paths, non existant
glyphs; add a ``--json`` option to produce a machine-readable list of
incompatibilities
- [pens] Added ``QuartzPen`` to create ``CGPath`` from glyph outlines on macOS.
Requires pyobjc (#2107).
- [feaLib] You can export ``FONTTOOLS_LOOKUP_DEBUGGING=1`` to enable feature file
debugging info stored in ``Debg`` table (#2106).
- [otlLib] Build more efficient format 1 and format 2 contextual lookups whenever
possible (#2101).
- [colorLib] Fixed regression in 4.17.0 when building COLR v0 table; when color
layers are stored in UFO lib plist, we can't distinguish tuples from lists so
we need to accept either types (e5439eb9, googlefonts/ufo2ft/issues#426).
- [colorLib/otData] Updated to latest draft ``COLR`` v1 spec (#2092).
- [svgLib] Fixed parsing error when arc commands' boolean flags are not separated
by space or comma (#2094).
- [varLib] Interpret empty non-default glyphs as 'missing', if the default glyph is
not empty (#2082).
- [feaLib.builder] Only stash lookup location for ``Debg`` if ``Builder.buildLookups_``
has cooperated (#2065, #2067).
- [varLib] Fixed bug in VarStore optimizer (#2073, #2083).
- [varLib] Add designspace lib key for custom feavar feature tag (#2080).
- Add HashPointPen adapted from psautohint. With this pen, a hash value of a glyph
can be computed, which can later be used to detect glyph changes (#2005).
- [varLib.instancer] Fixed ``TypeError`` exception when instantiating a VF with
a GSUB table 1.1 in which ``FeatureVariations`` attribute is present but set to
``None`` -- indicating that optional ``FeatureVariations`` is missing (#2077).
- [glifLib] Make ``x`` and ``y`` attributes of the ``point`` element required
even when validation is turned off, and raise a meaningful ``GlifLibError``
message when that happens (#2075).
- [removeOverlaps] Added new module and ``removeOverlaps`` function that merges
overlapping contours and components in TrueType glyphs. It requires the
`skia-pathops `__ module.
Note that removing overlaps invalidates the TrueType hinting (#2068).
- [varLib.instancer] Added ``--remove-overlaps`` command-line option.
The ``overlap`` option in ``instantiateVariableFont`` now takes an ``OverlapMode``
enum: 0: KEEP_AND_DONT_SET_FLAGS, 1: KEEP_AND_SET_FLAGS (default), and 2: REMOVE.
The latter is equivalent to calling ``removeOverlaps`` on the generated static
instance. The option continues to accept ``bool`` value for backward compatibility.
- [plistlib] Added typing annotations to plistlib module. Set up mypy static
typechecker to run automatically on CI (#2061).
- [ttLib] Implement private ``Debg`` table, a reverse-DNS namespaced JSON dict.
- [feaLib] Optionally add an entry into the ``Debg`` table with the original
lookup name (if any), feature name / script / language combination (if any),
and original source filename and line location. Annotate the ttx output for
a lookup with the information from the Debg table (#2052).
- [sfnt] Disabled checksum checking by default in ``SFNTReader`` (#2058).
- [Docs] Document ``mtiLib`` module (#2027).
- [varLib.interpolatable] Added checks for contour node count and operation type
of each node (#2054).
- [ttLib] Added API to register custom table packer/unpacker classes (#2055).
- [feaLib] Allow anonymous classes in LookupFlags definitions (#2037).
- [Docs] Better document DesignSpace rules processing order (#2041).
- [ttLib] Fixed 21-year old bug in ``maxp.maxComponentDepth`` calculation (#2044,
#2045).
- [varLib.models] Fixed misspelled argument name in CLI entry point (81d0042a).
- [subset] When subsetting GSUB v1.1, fixed TypeError by checking whether the
optional FeatureVariations table is present (e63ecc5b).
- [Snippets] Added snippet to show how to decompose glyphs in a TTF (#2030).
- [otlLib] Generate GSUB type 5 and GPOS type 7 contextual lookups where appropriate
(#2016).
- [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored
some common code (#2004, #2007).
- [docs] Document otlLib module (#2009).
- [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive
filesystems (#2001, #2002).
- [colorLib] Updated COLRv1 implementation following changes in the draft spec:
(#2008, googlefonts/colr-gradients-spec#24).
- Switch from brotlipy to Brotli (bsc#1175303)
- Update to 4.13.0
* [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored
some common code (#2004, #2007).
* [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive
filesystems (#2001, #2002).
* [_n_a_m_e] Fixed error in ``addMultilingualName`` with one-character names.
Only attempt to recovered malformed UTF *16 data from a ``bytes`` string,
not from unicode ``str`` (#1997, #1998).
* [OS/2] Don't calculate whole sets of unicode codepoints, use faster and more memory
efficient ranges and bisect lookups (#1984).
* [voltLib] Support writing back abstract syntax tree as VOLT data (#1983).
* [voltLib] Accept DO_NOT_TOUCH_CMAP keyword (#1987).
* [ufoLib] Silently delete duplicate glyphs within the same kerning group when reading
groups (#1970).
* [ttLib] Set version of COLR table when decompiling COLRv1 (commit 9d8a7e2).
- %python3_only -> %python_alternative
- Update to 4.10.2:
* Note: The v4.x version series only supports Python 3.6 or greater.
* see NEWS.rst for the full changelog
- Use _multibuild to run the tests in a different flavor and make it
possible to BuildRequire ufoLib2 (which requires FontTools to build)
without creating a dependency cycle.
- Add curves.json from upstream as a separate source as it's
missing from the zip file.
- version update to 3.39.0
see NEWS.rst
- deleted patches
- 349cd94d171cf4e1e7541884df0d12bb6d4e841a.patch (upstreamed)
- fix-missing-sys.patch (upstreamed)
- run the testsuite
- do not provide extra subpackage for tools
- do not require python-munkres, it is suprefluous when scipy is
required
- Upstream provided fix for the issue with big endian machines. Remove
fonttools-disable_failing_tests_bigendian.patch and replace with
349cd94d171cf4e1e7541884df0d12bb6d4e841a.patch
- Upstream fix has a missing import; thus fix-missing-sys.patch
- Update to 3.29.0:
too many changes to enlist here, complete list is on
https://github.com/fonttools/fonttools/releases
- add fonttools-disable_failing_tests_bigendian.patch
disable two tests currently failing on bigendian archs
- Update to version 3.24.1
* [varLib] Don’t remap the same DeviceTable twice in VarStore
optimizer (#1206).
* [varLib] Add --disable-iup option to fonttools varLib script,
and a optimize=True keyword argument to varLib.build function,
to optionally disable IUP optimization while building varfonts.
* [ttCollection] Fixed issue while decompiling ttc with python3
(#1207).
- Update to version 3.24.0
* [ttGlyphPen] Decompose composite glyphs if any components’
transform is too large to fit a F2Dot14 value, or clamp
transform values that are (almost) equal to +2.0 to make them
fit and avoid decomposing (#1200, #1204, #1205).
* [ttx] Added new -g option to dump glyphs from the glyf table
splitted as individual ttx files (#153, #1035, #1132, #1202).
* Copied ufoLib.filenames module to fontTools.misc.filenames,
used for the ttx split-glyphs option (#1202).
* [feaLib] Added support for cvParameters blocks in Character
Variant feautures cv01-cv99 (#860, #1169).
* [Snippets] Added checksum.py script to generate/check SHA1
hash of ttx files (#1197).
* [varLib.mutator] Fixed issue while instantiating some variable
fonts whereby the horizontal advance width computed from gvar
phantom points could turn up to be negative (#1198).
* [varLib/subset] Fixed issue with subsetting GPOS variation
data not picking up ValueRecord Device objects (54fd71f).
* [feaLib/voltLib] In all AST elements, the location is no
longer a required positional argument, but an optional
kewyord argument (defaults to None). This will make it easier
to construct feature AST from code (#1201).
- Update to version 3.23.0
* [designspaceLib] Added an optional lib element to the
designspace as a whole, as well as to the instance elements,
to store arbitrary data in a property list dictionary, similar
to the UFO’s lib. Added an optional font attribute to the
SourceDescriptor, to allow operating on in-memory font objects
(#1175).
* [cffLib] Fixed issue with lazy-loading of attributes when
attempting to set the CFF TopDict.Encoding (#1177, #1187).
* [ttx] Fixed regression introduced in 3.22.0 that affected
the split tables -s option (#1188).
* [feaLib] Added IncludedFeaNotFound custom exception subclass,
raised when an included feature file cannot be found (#1186).
* [otTables] Changed VarIdxMap to use glyph names internally
instead of glyph indexes. The old ttx dumps of HVAR/VVAR
tables that contain indexes can still be imported
(21cbab8, 38a0ffb).
* [varLib] Implemented VarStore optimizer (#1184).
* [subset] Implemented pruning of GDEF VarStore, HVAR and
MVAR (#1179).
* [sfnt] Restore backward compatiblity with numFonts attribute
of SFNTReader object (#1181).
* [merge] Initial support for merging LangSysRecords (#1180).
* [ttCollection] don’t seek(0) when writing to possibly
unseekable strems.
* [subset] Keep all --name-IDs from 0 to 6 by default
(#1170, #605, #114).
* [cffLib] Added width module to calculate optimal CFF default
and nominal glyph widths.
* [varLib] Don’t fail if STAT already in the master fonts
(#1166).
- Fix conflict with old single-package version
- Fix building on tumbleweed
- Initial version


Takashi Iwai's avatar

tiwai accepted request

Thanks

openSUSE Build Service is sponsored by