* Thu Jul 25 2024 Frantisek Simorda - Update to 4.53.1 * [feaLib] Improve the sharing of inline chained lookups (#3559) * [otlLib] Correct the calculation of OS/2.usMaxContext with reversed chaining contextual single substitutions (#3569) * [misc.visitor] Visitors search the inheritance chain of objects they are visiting (#3581)- Changes from 4.53.0 * [ttLib.removeOverlaps] Support CFF table to aid in downconverting CFF2 fonts (#3528) * [avar] Fix crash when accessing not-yet-existing attribute (#3550) * [docs] Add buildMathTable to otlLib.builder documentation (#3540) * [feaLib] Allow UTF-8 with BOM when reading features (#3495) * [SVGPathPen] Revert rounding coordinates to two decimal places by default (#3543) * [varLib.instancer] Refix output filename decision-making (#3545, #3544, #3548)- Changes from 4.52.4 * [varLib.cff] Restore and deprecate convertCFFtoCFF2 that was removed in 4.52.0 release as it is used by downstream projects (#3535).- Changes from 4.52.3 * Fixed a small syntax error in the reStructuredText-formatted NEWS.rst file which caused the upload to PyPI to fail for 4.52.2. No other code changes.- Changes from 4.52.2 * [varLib.interpolatable] Ensure that scipy/numpy output is JSON-serializable (#3522, #3526) * [housekeeping] Regenerate table lists, to fix pyinstaller packaging of the new VARC table (#3531, #3529) * [cffLib] Make CFFToCFF2 and CFF2ToCFF more robust (#3521, #3525)- Changes from 4.52.1 * Fixed a small syntax error in the reStructuredText-formatted NEWS.rst file which caused the upload to PyPI to fail for 4.52.0.- Changes from 4.52.0 * Added support for the new VARC (Variable Composite) table that is being proposed to OpenType spec (#3395). * For more info: https://github.com/harfbuzz/boring-expansion-spec/blob/main/VARC.md * [ttLib.main] Fixed decompiling all tables (90fed08). * [feaLib] Don\'t reference the same lookup index multiple times within the same feature record, it is only applied once anyway (#3520). * [cffLib] Moved methods to desubroutinize, remove hints and unused subroutines from subset module to cffLib (#3517). * [varLib.instancer] Added support for partial-instancing CFF2 tables! Also, added method to down-convert from CFF2 to CFF 1.0, and CLI entry points to convert CFF<->CFF2 (#3506). * [subset] Prune unused user name IDs even with --name-IDs=\' *\' (#3410). * [ttx] use GNU-style getopt to intermix options and positional arguments (#3509). * [feaLib.variableScalar] Fixed value_at_location() method (#3491) * [psCharStrings] Shorten output of encodeFloat (#3492). * [bezierTools] Fix infinite-recursion in calcCubicArcLength (#3502). * [avar2] Implement avar2 support in TTFont.getGlyphSet() (#3473).- Changes from 4.51.0 * [ttLib] Optimization on loading aux fields (#3464). * [ttFont] Add reorderGlyphs (#3468).- Changes from 4.50.0 * [pens] Added decomposing filter pens that draw components as regular contours (#3460). * [instancer] Drop explicit no-op axes from TupleVariations (#3457). * [cu2qu/ufo] Return set of modified glyph names from fonts_to_quadratic (#3456).- Changes from 4.49.0 * [otlLib] Add API for building MATH table (#3446)- Changes from 4.48.1 * Fixed uploading wheels to PyPI, no code changes since v4.48.0.- Changes from 4.48.0 * [varLib] Do not log when there are no OTL tables to be merged. * [setup.py] Do not restrict lxml<5 any more, tests pass just fine with lxml>=5. * [feaLib] Remove glyph and class names length restrictions in FEA (#3424). * [roundingPens] Added transformRoundFunc parameter to the rounding pens to allow for custom rounding of the components\' transforms (#3426). * [feaLib] Keep declaration order of ligature components within a ligature set, instead of sorting by glyph name (#3429). * [feaLib] Fixed ordering of alternates in aalt lookups, following the declaration order of feature references within the aalt feature block (#3430). * [varLib.instancer] Fixed a bug in the instancer\'s IUP optimization (#3432). * [sbix] Support sbix glyphs with new graphicType \"flip\" (#3433). * [svgPathPen] Added --glyphs option to dump the SVG paths for the named glyphs in the font (0572f78). * [designspaceLib] Added \"description\" attribute to and elements, and allow multiple elements to group elements that are logically related (#3435, #3437). * [otlLib] Correctly choose the most compact GSUB contextual lookup format (#3439). * Sun Jan 28 2024 Dirk Müller - 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 * Thu Jan 25 2024 Dirk Müller - always obsolete fonttools. We have switched to python311 stack in SLE15 and need to get the obsoletes back * Thu Jan 04 2024 ecsos - 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. * Thu Jan 04 2024 ecsos - Add missing setuptools to fix build error under Leap. * Sat Dec 30 2023 Dirk Müller - 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). * Sat Oct 14 2023 Matej Cepl - Clean up space and remove unnecessary BR python-munkres and python-zopfli. * Sun Jun 11 2023 Dirk Müller - 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) * Fri Apr 21 2023 Dirk Müller - add sle15_python_module_pythons (jsc#PED-68) * Thu Mar 30 2023 Dirk Müller - 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). * Thu Feb 16 2023 Matej Cepl - 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. * Tue Nov 22 2022 Marguerite Su - 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 * Mon Aug 29 2022 Gordon Leung - 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 * Sat May 07 2022 Ferdinand Thiessen - 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 * Tue Apr 12 2022 Ben Greiner - 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