14.49.0 (released 2024-02-15) 2---------------------------- 3 4- [otlLib] Add API for building ``MATH`` table (#3446) 5 64.48.1 (released 2024-02-06) 7---------------------------- 8 9- Fixed uploading wheels to PyPI, no code changes since v4.48.0. 10 114.48.0 (released 2024-02-06) 12---------------------------- 13 14- [varLib] Do not log when there are no OTL tables to be merged. 15- [setup.py] Do not restrict lxml<5 any more, tests pass just fine with lxml>=5. 16- [feaLib] Remove glyph and class names length restrictions in FEA (#3424). 17- [roundingPens] Added ``transformRoundFunc`` parameter to the rounding pens to allow 18 for custom rounding of the components' transforms (#3426). 19- [feaLib] Keep declaration order of ligature components within a ligature set, instead 20 of sorting by glyph name (#3429). 21- [feaLib] Fixed ordering of alternates in ``aalt`` lookups, following the declaration 22 order of feature references within the ``aalt`` feature block (#3430). 23- [varLib.instancer] Fixed a bug in the instancer's IUP optimization (#3432). 24- [sbix] Support sbix glyphs with new graphicType "flip" (#3433). 25- [svgPathPen] Added ``--glyphs`` option to dump the SVG paths for the named glyphs 26 in the font (0572f78). 27- [designspaceLib] Added "description" attribute to ``<mappings>`` and ``<mapping>`` 28 elements, and allow multiple ``<mappings>`` elements to group ``<mapping>`` elements 29 that are logically related (#3435, #3437). 30- [otlLib] Correctly choose the most compact GSUB contextual lookup format (#3439). 31 324.47.2 (released 2024-01-11) 33---------------------------- 34 35Minor release to fix uploading wheels to PyPI. 36 374.47.1 (released 2024-01-11) 38---------------------------- 39 40- [merge] Improve help message and add standard command line options (#3408) 41- [otlLib] Pass ``ttFont`` to ``name.addName`` in ``buildStatTable`` (#3406) 42- [featureVars] Re-use ``FeatureVariationRecord``'s when possible (#3413) 43 444.47.0 (released 2023-12-18) 45---------------------------- 46 47- [varLib.models] New API for VariationModel: ``getMasterScalars`` and 48 ``interpolateFromValuesAndScalars``. 49- [varLib.interpolatable] Various bugfixes and rendering improvements. In particular, 50 add a Summary page in the front, and an Index and Table-of-Contents in the back. 51 Change the page size to Letter. 52- [Docs/designspaceLib] Defined a new ``public.fontInfo`` lib key, not used anywhere yet (#3358). 53 544.46.0 (released 2023-12-02) 55---------------------------- 56 57- [featureVars] Allow to register the same set of substitution rules to multiple features. 58 The ``addFeatureVariations`` function can now take a list of featureTags; similarly, the 59 lib key 'com.github.fonttools.varLib.featureVarsFeatureTag' can now take a 60 comma-separateed string of feature tags (e.g. "salt,ss01") instead of a single tag (#3360). 61- [featureVars] Don't overwrite GSUB FeatureVariations, but append new records to it 62 for features which are not already there. But raise ``VarLibError`` if the feature tag 63 already has feature variations associated with it (#3363). 64- [varLib] Added ``addGSUBFeatureVariations`` function to add GSUB Feature Variations 65 to an existing variable font from rules defined in a DesignSpace document (#3362). 66- [varLib.interpolatable] Various bugfixes and rendering improvements. In particular, 67 a new test for "underweight" glyphs. The new test reports quite a few false-positives 68 though. Please send feedback. 69 704.45.1 (released 2023-11-23) 71---------------------------- 72 73- [varLib.interpolatable] Various bugfixes and improvements, better reporting, reduced 74 false positives. 75- [ttGlyphSet] Added option to not recalculate glyf bounds (#3348). 76 774.45.0 (released 2023-11-20) 78---------------------------- 79 80- [varLib.interpolatable] Vastly improved algorithms. Also available now is ``--pdf`` 81 and ``--html`` options to generate a PDF or HTML report of the interpolation issues. 82 The PDF/HTML report showcases the problematic masters, the interpolated broken 83 glyph, as well as the proposed fixed version. 84 854.44.3 (released 2023-11-15) 86---------------------------- 87 88- [subset] Only prune codepage ranges for OS/2.version >= 1, ignore otherwise (#3334). 89- [instancer] Ensure hhea vertical metrics stay in sync with OS/2 ones after instancing 90 MVAR table containing 'hasc', 'hdsc' or 'hlgp' tags (#3297). 91 924.44.2 (released 2023-11-14) 93---------------------------- 94 95- [glyf] Have ``Glyph.recalcBounds`` skip empty components (base glyph with no contours) 96 when computing the bounding box of composite glyphs. This simply restores the existing 97 behavior before some changes were introduced in fonttools 4.44.0 (#3333). 98 994.44.1 (released 2023-11-14) 100---------------------------- 101 102- [feaLib] Ensure variable mark anchors are deep-copied while building since they 103 get modified in-place and later reused (#3330). 104- [OS/2|subset] Added method to ``recalcCodePageRanges`` to OS/2 table class; added 105 ``--prune-codepage-ranges`` to `fonttools subset` command (#3328, #2607). 106 1074.44.0 (released 2023-11-03) 108---------------------------- 109 110- [instancer] Recalc OS/2 AvgCharWidth after instancing if default changes (#3317). 111- [otlLib] Make ClassDefBuilder class order match varLib.merger's, i.e. large 112 classes first, then glyph lexicographic order (#3321, #3324). 113- [instancer] Allow not specifying any of min:default:max values and let be filled 114 up with fvar's values (#3322, #3323). 115- [instancer] When running --update-name-table ignore axes that have no STAT axis 116 values (#3318, #3319). 117- [Debg] When dumping to ttx, write the embedded JSON as multi-line string with 118 indentation (92cbfee0d). 119- [varStore] Handle > 65535 items per encoding by splitting VarData subtable (#3310). 120- [subset] Handle null-offsets in MarkLigPos subtables. 121- [subset] Keep East Asian spacing fatures vhal, halt, chws, vchw by default (#3305). 122- [instancer.solver] Fixed case where axisDef < lower and upper < axisMax (#3304). 123- [glyf] Speed up compilation, mostly around ``recalcBounds`` (#3301). 124- [varLib.interpolatable] Speed it up when working on variable fonts, plus various 125 micro-optimizations (#3300). 126- Require unicodedata2 >= 15.1.0 when installed with 'unicode' extra, contains UCD 15.1. 127 1284.43.1 (released 2023-10-06) 129---------------------------- 130 131- [EBDT] Fixed TypeError exception in `_reverseBytes` method triggered when dumping 132 some bitmap fonts with `ttx -z bitwise` option (#3162). 133- [v/hhea] Fixed UnboundLocalError exception in ``recalc`` method when no vmtx or hmtx 134 tables are present (#3290). 135- [bezierTools] Fixed incorrectly typed cython local variable leading to TypeError when 136 calling ``calcQuadraticArcLength`` (#3288). 137- [feaLib/otlLib] Better error message when building Coverage table with missing glyph (#3286). 138 1394.43.0 (released 2023-09-29) 140---------------------------- 141 142- [subset] Set up lxml ``XMLParser(resolve_entities=False)`` when parsing OT-SVG documents 143 to prevent XML External Entity (XXE) attacks (9f61271dc): 144 https://codeql.github.com/codeql-query-help/python/py-xxe/ 145- [varLib.iup] Added workaround for a Cython bug in ``iup_delta_optimize`` that was 146 leading to IUP tolerance being incorrectly initialised, resulting in sub-optimal deltas 147 (60126435d, cython/cython#5732). 148- [varLib] Added new command-line entry point ``fonttools varLib.avar`` to add an 149 ``avar`` table to an existing VF from axes mappings in a .designspace file (0a3360e52). 150- [instancer] Fixed bug whereby no longer used variation regions were not correctly pruned 151 after VarData optimization (#3268). 152- Added support for Python 3.12 (#3283). 153 1544.42.1 (released 2023-08-20) 155---------------------------- 156 157- [t1Lib] Fixed several Type 1 issues (#3238, #3240). 158- [otBase/packer] Allow sharing tables reached by different offset sizes (#3241, #3236). 159- [varLib/merger] Fix Cursive attachment merging error when all anchors are NULL (#3248, #3247). 160- [ttLib] Fixed warning when calling ``addMultilingualName`` and ``ttFont`` parameter was not 161 passed on to ``findMultilingualName`` (#3253). 162 1634.42.0 (released 2023-08-02) 164---------------------------- 165 166- [varLib] Use sentinel value 0xFFFF to mark a glyph advance in hmtx/vmtx as non 167 participating, allowing sparse masters to contain glyphs for variation purposes other 168 than {H,V}VAR (#3235). 169- [varLib/cff] Treat empty glyphs in non-default masters as missing, thus not participating 170 in CFF2 delta computation, similarly to how varLib already treats them for gvar (#3234). 171- Added varLib.avarPlanner script to deduce 'correct' avar v1 axis mappings based on 172 glyph average weights (#3223). 173 1744.41.1 (released 2023-07-21) 175---------------------------- 176 177- [subset] Fixed perf regression in v4.41.0 by making ``NameRecordVisitor`` only visit 178 tables that do contain nameID references (#3213, #3214). 179- [varLib.instancer] Support instancing fonts containing null ConditionSet offsets in 180 FeatureVariationRecords (#3211, #3212). 181- [statisticsPen] Report font glyph-average weight/width and font-wide slant. 182- [fontBuilder] Fixed head.created date incorrectly set to 0 instead of the current 183 timestamp, regression introduced in v4.40.0 (#3210). 184- [varLib.merger] Support sparse ``CursivePos`` masters (#3209). 185 1864.41.0 (released 2023-07-12) 187---------------------------- 188 189- [fontBuilder] Fixed bug in setupOS2 with default panose attribute incorrectly being 190 set to a dict instead of a Panose object (#3201). 191- [name] Added method to ``removeUnusedNameRecords`` in the user range (#3185). 192- [varLib.instancer] Fixed issue with L4 instancing (moving default) (#3179). 193- [cffLib] Use latin1 so we can roundtrip non-ASCII in {Full,Font,Family}Name (#3202). 194- [designspaceLib] Mark <source name="..."> as optional in docs (as it is in the code). 195- [glyf-1] Fixed drawPoints() bug whereby last cubic segment becomes quadratic (#3189, #3190). 196- [fontBuilder] Propagate the 'hidden' flag to the fvar Axis instance (#3184). 197- [fontBuilder] Update setupAvar() to also support avar 2, fixing ``_add_avar()`` call 198 site (#3183). 199- Added new ``voltLib.voltToFea`` submodule (originally Tiro Typeworks' "Volto") for 200 converting VOLT OpenType Layout sources to FEA format (#3164). 201 2024.40.0 (released 2023-06-12) 203---------------------------- 204 205- Published native binary wheels to PyPI for all the python minor versions and platform 206 and architectures currently supported that would benefit from this. They will include 207 precompiled Cython-accelerated modules (e.g. cu2qu) without requiring to compile them 208 from source. The pure-python wheel and source distribution will continue to be 209 published as always (pip will automatically chose them when no binary wheel is 210 available for the given platform, e.g. pypy). Use ``pip install --no-binary=fonttools fonttools`` 211 to expliclity request pip to install from the pure-python source. 212- [designspaceLib|varLib] Add initial support for specifying axis mappings and build 213 ``avar2`` table from those (#3123). 214- [feaLib] Support variable ligature caret position (#3130). 215- [varLib|glyf] Added option to --drop-implied-oncurves; test for impliable oncurve 216 points either before or after rounding (#3146, #3147, #3155, #3156). 217- [TTGlyphPointPen] Don't error with empty contours, simply ignore them (#3145). 218- [sfnt] Fixed str vs bytes remnant of py3 transition in code dealing with de/compiling 219 WOFF metadata (#3129). 220- [instancer-solver] Fixed bug when moving default instance with sparse masters (#3139, #3140). 221- [feaLib] Simplify variable scalars that don’t vary (#3132). 222- [pens] Added filter pen that explicitly emits closing line when lastPt != movePt (#3100). 223- [varStore] Improve optimize algorithm and better document the algorithm (#3124, #3127). 224 Added ``quantization`` option (#3126). 225- Added CI workflow config file for building native binary wheels (#3121). 226- [fontBuilder] Added glyphDataFormat=0 option; raise error when glyphs contain cubic 227 outlines but glyphDataFormat was not explicitly set to 1 (#3113, #3119). 228- [subset] Prune emptied GDEF.MarkGlyphSetsDef and remap indices; ensure GDEF is 229 subsetted before GSUB and GPOS (#3114, #3118). 230- [xmlReader] Fixed issue whereby DSIG table data was incorrectly parsed (#3115, #2614). 231- [varLib/merger] Fixed merging of SinglePos with pos=0 (#3111, #3112). 232- [feaLib] Demote "Feature has not been defined" error to a warning when building aalt 233 and referenced feature is empty (#3110). 234- [feaLib] Dedupe multiple substitutions with classes (#3105). 235 2364.39.4 (released 2023-05-10) 237---------------------------- 238 239- [varLib.interpolatable] Allow for sparse masters (#3075) 240- [merge] Handle differing default/nominalWidthX in CFF (#3070) 241- [ttLib] Add missing main.py file to ttLib package (#3088) 242- [ttx] Fix missing composite instructions in XML (#3092) 243- [ttx] Fix split tables option to work on filenames containing '%' (#3096) 244- [featureVars] Process lookups for features other than rvrn last (#3099) 245- [feaLib] support multiple substitution with classes (#3103) 246 2474.39.3 (released 2023-03-28) 248---------------------------- 249 250- [sbix] Fixed TypeError when compiling empty glyphs whose imageData is None, regression 251 was introduced in v4.39 (#3059). 252- [ttFont] Fixed AttributeError on python <= 3.10 when opening a TTFont from a tempfile 253 SpooledTemporaryFile, seekable method only added on python 3.11 (#3052). 254 2554.39.2 (released 2023-03-16) 256---------------------------- 257 258- [varLib] Fixed regression introduced in 4.39.1 whereby an incomplete 'STAT' table 259 would be built even though a DesignSpace v5 did contain 'STAT' definitions (#3045, #3046). 260 2614.39.1 (released 2023-03-16) 262---------------------------- 263 264- [avar2] Added experimental support for reading/writing avar version 2 as specified in 265 this draft proposal: https://github.com/harfbuzz/boring-expansion-spec/blob/main/avar2.md 266- [glifLib] Wrap underlying XML library exceptions with GlifLibError when parsing GLIFs, 267 and also print the name and path of the glyph that fails to be parsed (#3042). 268- [feaLib] Consult avar for normalizing user-space values in ConditionSets and in 269 VariableScalars (#3042, #3043). 270- [ttProgram] Handle string input to Program.fromAssembly() (#3038). 271- [otlLib] Added a config option to emit GPOS 7 lookups, currently disabled by default 272 because of a macOS bug (#3034). 273- [COLRv1] Added method to automatically compute ClipBoxes (#3027). 274- [ttFont] Fixed getGlyphID to raise KeyError on missing glyphs instead of returning 275 None. The regression was introduced in v4.27.0 (#3032). 276- [sbix] Fixed UnboundLocalError: cannot access local variable 'rawdata' (#3031). 277- [varLib] When building VF, do not overwrite a pre-existing ``STAT`` table that was built 278 with feaLib from FEA feature file. Also, added support for building multiple VFs 279 defined in Designspace v5 from ``fonttools varLib`` script (#3024). 280- [mtiLib] Only add ``Debg`` table with lookup names when ``FONTTOOLS_LOOKUP_DEBUGGING`` 281 env variable is set (#3023). 282 2834.39.0 (released 2023-03-06) 284---------------------------- 285 286- [mtiLib] Optionally add `Debg` debug info for MTI feature builds (#3018). 287- [ttx] Support reading input file from standard input using special `-` character, 288 similar to existing `-o -` option to write output to standard output (#3020). 289- [cython] Prevent ``cython.compiled`` raise AttributeError if cython not installed 290 properly (#3017). 291- [OS/2] Guard against ZeroDivisionError when calculating xAvgCharWidth in the unlikely 292 scenario no glyph has non-zero advance (#3015). 293- [subset] Recompute xAvgCharWidth independently of --no-prune-unicode-ranges, 294 previously the two options were involuntarily bundled together (#3012). 295- [fontBuilder] Add ``debug`` parameter to addOpenTypeFeatures method to add source 296 debugging information to the font in the ``Debg`` private table (#3008). 297- [name] Make NameRecord `__lt__` comparison not fail on Unicode encoding errors (#3006). 298- [featureVars] Fixed bug in ``overlayBox`` (#3003, #3005). 299- [glyf] Added experimental support for cubic bezier curves in TrueType glyf table, as 300 outlined in glyf v1 proposal (#2988): 301 https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1-cubicOutlines.md 302- Added new qu2cu module and related qu2cuPen, the reverse of cu2qu for converting 303 TrueType quadratic splines to cubic bezier curves (#2993). 304- [glyf] Added experimental support for reading and writing Variable Composites/Components 305 as defined in glyf v1 spec proposal (#2958): 306 https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1-varComposites.md. 307- [pens]: Added `addVarComponent` method to pen protocols' base classes, which pens can implement 308 to handle varcomponents (by default they get decomposed) (#2958). 309- [misc.transform] Added DecomposedTransform class which implements an affine transformation 310 with separate translate, rotation, scale, skew, and transformation-center components (#2598) 311- [sbix] Ensure Glyph.referenceGlyphName is set; fixes error after dumping and 312 re-compiling sbix table with 'dupe' glyphs (#2984). 313- [feaLib] Be cleverer when merging chained single substitutions into same lookup 314 when they are specified using the inline notation (#2150, #2974). 315- [instancer] Clamp user-inputted axis ranges to those of fvar (#2959). 316- [otBase/subset] Define ``__getstate__`` for BaseTable so that a copied/pickled 'lazy' 317 object gets its own OTTableReader to read from; incidentally fixes a bug while 318 subsetting COLRv1 table containing ClipBoxes on python 3.11 (#2965, #2968). 319- [sbix] Handle glyphs with "dupe" graphic type on compile correctly (#2963). 320- [glyf] ``endPointsOfContours`` field should be unsigned! Kudos to behdad for 321 spotting one of the oldest bugs in FT. Probably nobody has ever dared to make 322 glyphs with more than 32767 points... (#2957). 323- [feaLib] Fixed handling of ``ignore`` statements with unmarked glyphs to match 324 makeotf behavior, which assumes the first glyph is marked (#2950). 325- Reformatted code with ``black`` and enforce new code style via CI check (#2925). 326- [feaLib] Sort name table entries following OT spec prescribed order in the builder (#2927). 327- [cu2quPen] Add Cu2QuMultiPen that converts multiple outlines at a time in 328 interpolation compatible way; its methods take a list of tuples arguments 329 that would normally be passed to individual segment pens, and at the end it 330 dispatches the converted outlines to each pen (#2912). 331- [reverseContourPen/ttGlyphPen] Add outputImpliedClosingLine option (#2913, #2914, 332 #2921, #2922, #2995). 333- [gvar] Avoid expanding all glyphs unnecessarily upon compile (#2918). 334- [scaleUpem] Fixed bug whereby CFF2 vsindex was scaled; it should not (#2893, #2894). 335- [designspaceLib] Add DS.getAxisByTag and refactor getAxis (#2891). 336- [unicodedata] map Zmth<->math in ot_tag_{to,from}_script (#1737, #2889). 337- [woff2] Support encoding/decoding OVERLAP_SIMPLE glyf flags (#2576, #2884). 338- [instancer] Update OS/2 class and post.italicAngle when default moved (L4) 339- Dropped support for Python 3.7 which reached EOL, fontTools requires 3.8+. 340- [instancer] Fixed instantiateFeatureVariations logic when a rule range becomes 341 default-applicable (#2737, #2880). 342- [ttLib] Add main to ttFont and ttCollection that just decompile and re-compile the 343 input font (#2869). 344- [featureVars] Insert 'rvrn' lookup at the beginning of LookupList, to work around bug 345 in Apple implementation of 'rvrn' feature which the spec says it should be processed 346 early whereas on macOS 10.15 it follows lookup order (#2140, #2867). 347- [instancer/mutator] Remove 'DSIG' table if present. 348- [svgPathPen] Don't close path in endPath(), assume open unless closePath() (#2089, #2865). 349 3504.38.0 (released 2022-10-21) 351---------------------------- 352 353- [varLib.instancer] Added support for L4 instancing, i.e. moving the default value of 354 an axis while keeping it variable. Thanks Behdad! (#2728, #2861). 355 It's now also possible to restrict an axis min/max values beyond the current default 356 value, e.g. a font wght has min=100, def=400, max=900 and you want a partial VF that 357 only varies between 500 and 700, you can now do that. 358 You can either specify two min/max values (wght=500:700), and the new default will be 359 set to either the minimum or maximum, depending on which one is closer to the current 360 default (e.g. 500 in this case). Or you can specify three values (e.g. wght=500:600:700) 361 to specify the new default value explicitly. 362- [otlLib/featureVars] Set a few Count values so one doesn't need to compile the font 363 to update them (#2860). 364- [varLib.models] Make extrapolation work for 2-master models as well where one master 365 is at the default location (#2843, #2846). 366 Add optional extrapolate=False to normalizeLocation() (#2847, #2849). 367- [varLib.cff] Fixed sub-optimal packing of CFF2 deltas by no longer rounding them to 368 integer (#2838). 369- [scaleUpem] Calculate numShorts in VarData after scale; handle CFF hintmasks (#2840). 370 3714.37.4 (released 2022-09-30) 372---------------------------- 373 374- [subset] Keep nameIDs used by CPAL palette entry labels (#2837). 375- [varLib] Avoid negative hmtx values when creating font from variable CFF2 font (#2827). 376- [instancer] Don't prune stat.ElidedFallbackNameID (#2828). 377- [unicodedata] Update Scripts/Blocks to Unicode 15.0 (#2833). 378 3794.37.3 (released 2022-09-20) 380---------------------------- 381 382- Fix arguments in calls to (glyf) glyph.draw() and drawPoints(), whereby offset wasn't 383 correctly passed down; this fix also exposed a second bug, where lsb and tsb were not 384 set (#2824, #2825, adobe-type-tools/afdko#1560). 385 3864.37.2 (released 2022-09-15) 387---------------------------- 388 389- [subset] Keep CPAL table and don't attempt to prune unused color indices if OT-SVG 390 table is present even if COLR table was subsetted away; OT-SVG may be referencing the 391 CPAL table; for now we assume that's the case (#2814, #2815). 392- [varLib.instancer] Downgrade GPOS/GSUB version if there are no more FeatureVariations 393 after instancing (#2812). 394- [subset] Added ``--no-lazy`` to optionally load fonts eagerly (mostly to ease 395 debugging of table lazy loading, no practical effects) (#2807). 396- [varLib] Avoid building empty COLR.DeltaSetIndexMap with only identity mappings (#2803). 397- [feaLib] Allow multiple value record types (by promoting to the most general format) 398 within the same PairPos subtable; e.g. this allows variable and non variable kerning 399 rules to share the same subtable. This also fixes a bug whereby some kerning pairs 400 would become unreachable while shapiong because of premature subtable splitting (#2772, #2776). 401- [feaLib] Speed up ``VarScalar`` by caching models for recurring master locations (#2798). 402- [feaLib] Optionally cythonize ``feaLib.lexer``, speeds up parsing FEA a bit (#2799). 403- [designspaceLib] Avoid crash when handling unbounded rule conditions (#2797). 404- [post] Don't crash if ``post`` legacy format 1 is malformed/improperly used (#2786) 405- [gvar] Don't be "lazy" (load all glyph variations up front) when TTFont.lazy=False (#2771). 406- [TTFont] Added ``normalizeLocation`` method to normalize a location dict from the 407 font's defined axes space (also known as "user space") into the normalized (-1..+1) 408 space. It applies ``avar`` mapping if the font contains an ``avar`` table (#2789). 409- [TTVarGlyphSet] Support drawing glyph instances from CFF2 variable glyph set (#2784). 410- [fontBuilder] Do not error when building cmap if there are zero code points (#2785). 411- [varLib.plot] Added ability to plot a variation model and set of accompaning master 412 values corresponding to the model's master locations into a pyplot figure (#2767). 413- [Snippets] Added ``statShape.py`` script to draw statistical shape of a glyph as an 414 ellips (requires pycairo) (baecd88). 415- [TTVarGlyphSet] implement drawPoints natively, avoiding going through 416 SegmentToPointPen (#2778). 417- [TTVarGlyphSet] Fixed bug whereby drawing a composite glyph multiple times, its 418 components would shif; needed an extra copy (#2774). 419 4204.37.1 (released 2022-08-24) 421---------------------------- 422 423- [subset] Fixed regression introduced with v4.37.0 while subsetting the VarStore of 424 ``HVAR`` and ``VVAR`` tables, whereby an ``AttributeError: subset_varidxes`` was 425 thrown because an apparently unused import statement (with the side-effect of 426 dynamically binding that ``subset_varidxes`` method to the VarStore class) had been 427 accidentally deleted in an unrelated PR (#2679, #2773). 428- [pens] Added ``cairoPen`` (#2678). 429- [gvar] Read ``gvar`` more lazily by not parsing all of the ``glyf`` table (#2771). 430- [ttGlyphSet] Make ``drawPoints(pointPen)`` method work for CFF fonts as well via 431 adapter pen (#2770). 432 4334.37.0 (released 2022-08-23) 434---------------------------- 435 436- [varLib.models] Reverted PR #2717 which added support for "narrow tents" in v4.36.0, 437 as it introduced a regression (#2764, #2765). It will be restored in upcoming release 438 once we found a solution to the bug. 439- [cff.specializer] Fixed issue in charstring generalizer with the ``blend`` operator 440 (#2750, #1975). 441- [varLib.models] Added support for extrapolation (#2757). 442- [ttGlyphSet] Ensure the newly added ``_TTVarGlyphSet`` inherits from ``_TTGlyphSet`` 443 to keep backward compatibility with existing API (#2762). 444- [kern] Allow compiling legacy kern tables with more than 64k entries (d21cfdede). 445- [visitor] Added new visitor API to traverse tree of objects and dispatch based 446 on the attribute type: cf. ``fontTools.misc.visitor`` and ``fontTools.ttLib.ttVisitor``. Added ``fontTools.ttLib.scaleUpem`` module that uses the latter to 447 change a font's units-per-em and scale all the related fields accordingly (#2718, 448 #2755). 449 4504.36.0 (released 2022-08-17) 451---------------------------- 452 453- [varLib.models] Use a simpler model that generates narrower "tents" (regions, master 454 supports) whenever possible: specifically when any two axes that actively "cooperate" 455 (have masters at non-zero positions for both axes) have a complete set of intermediates. 456 The simpler algorithm produces fewer overlapping regions and behaves better with 457 respect to rounding at the peak positions than the generic solver, always matching 458 intermediate masters exactly, instead of maximally 0.5 units off. This may be useful 459 when 100% metrics compatibility is desired (#2218, #2717). 460- [feaLib] Remove warning when about ``GDEF`` not being built when explicitly not 461 requested; don't build one unconditonally even when not requested (#2744, also works 462 around #2747). 463- [ttFont] ``TTFont.getGlyphSet`` method now supports selecting a location that 464 represents an instance of a variable font (supports both user-scale and normalized 465 axes coordinates via the ``normalized=False`` parameter). Currently this only works 466 for TrueType-flavored variable fonts (#2738). 467 4684.35.0 (released 2022-08-15) 469---------------------------- 470 471- [otData/otConverters] Added support for 'biased' PaintSweepGradient start/end angles 472 to match latest COLRv1 spec (#2743). 473- [varLib.instancer] Fixed bug in ``_instantiateFeatureVariations`` when at the same 474 time pinning one axis and restricting the range of a subsequent axis; the wrong axis 475 tag was being used in the latter step (as the records' axisIdx was updated in the 476 preceding step but looked up using the old axes order in the following step) (#2733, 477 #2734). 478- [mtiLib] Pad script tags with space when less than 4 char long (#1727). 479- [merge] Use ``'.'`` instead of ``'#'`` in duplicate glyph names (#2742). 480- [gvar] Added support for lazily loading glyph variations (#2741). 481- [varLib] In ``build_many``, we forgot to pass on ``colr_layer_reuse`` parameter to 482 the ``build`` method (#2730). 483- [svgPathPen] Add a main that prints SVG for input text (6df779fd). 484- [cffLib.width] Fixed off-by-one in optimized values; previous code didn't match the 485 code block above it (2963fa50). 486- [varLib.interpolatable] Support reading .designspace and .glyphs files (via optional 487 ``glyphsLib``). 488- Compile some modules with Cython when available and building/installing fonttools 489 from source: ``varLib.iup`` (35% faster), ``pens.momentsPen`` (makes 490 ``varLib.interpolatable`` 3x faster). 491- [feaLib] Allow features to be built for VF without also building a GDEF table (e.g. 492 only build GSUB); warn when GDEF would be needed but isn't requested (#2705, 2694). 493- [otBase] Fixed ``AttributeError`` when uharfbuzz < 0.23.0 and 'repack' method is 494 missing (32aa8eaf). Use new ``uharfbuzz.repack_with_tag`` when available (since 495 uharfbuzz>=0.30.0), enables table-specific optimizations to be performed during 496 repacking (#2724). 497- [statisticsPen] By default report all glyphs (4139d891). Avoid division-by-zero 498 (52b28f90). 499- [feaLib] Added missing required argument to FeatureLibError exception (#2693) 500- [varLib.merge] Fixed error during error reporting (#2689). Fixed undefined 501 ``NotANone`` variable (#2714). 502 5034.34.4 (released 2022-07-07) 504---------------------------- 505 506- Fixed typo in varLib/merger.py that causes NameError merging COLR glyphs 507 containing more than 255 layers (#2685). 508 5094.34.3 (released 2022-07-07) 510---------------------------- 511 512- [designspaceLib] Don't make up bad PS names when no STAT data (#2684) 513 5144.34.2 (released 2022-07-06) 515---------------------------- 516 517- [varStore/subset] fixed KeyError exception to do with NO_VARIATION_INDEX while 518 subsetting varidxes in GPOS/GDEF (a08140d). 519 5204.34.1 (released 2022-07-06) 521---------------------------- 522 523- [instancer] When optimizing HVAR/VVAR VarStore, use_NO_VARIATION_INDEX=False to avoid 524 including NO_VARIATION_INDEX in AdvWidthMap, RsbMap, LsbMap mappings, which would 525 push the VarIdx width to maximum (4bytes), which is not desirable. This also fixes 526 a hard crash when attempting to subset a varfont after it had been partially instanced 527 with use_NO_VARIATION_INDEX=True. 528 5294.34.0 (released 2022-07-06) 530---------------------------- 531 532- [instancer] Set RIBBI bits in head and OS/2 table when cutting instances and the 533 subfamily nameID=2 contains strings like 'Italic' or 'Bold' (#2673). 534- [otTraverse] Addded module containing methods for traversing trees of otData tables 535 (#2660). 536- [otTables] Made DeltaSetIndexMap TTX dump less verbose by omitting no-op entries 537 (#2660). 538- [colorLib.builder] Added option to disable PaintColrLayers's reuse of layers from 539 LayerList (#2660). 540- [varLib] Added support for merging multiple master COLRv1 tables into a variable 541 COLR table (#2660, #2328). Base color glyphs of same name in different masters must have 542 identical paint graph structure (incl. number of layers, palette indices, number 543 of color line stops, corresponding paint formats at each level of the graph), 544 but can differ in the variable fields (e.g. PaintSolid.Alpha). PaintVar* tables 545 are produced when this happens and a VarStore/DeltaSetIndexMap is added to the 546 variable COLR table. It is possible for non-default masters to be 'sparse', i.e. 547 omit some of the color glyphs present in the default master. 548- [feaLib] Let the Parser set nameIDs 1 through 6 that were previously reserved (#2675). 549- [varLib.varStore] Support NO_VARIATION_INDEX in optimizer and instancer. 550- [feaLib] Show all missing glyphs at once at end of parsing (#2665). 551- [varLib.iup] Rewrite force-set conditions and limit DP loopback length (#2651). 552 For Noto Sans, IUP time drops from 23s down to 9s, with only a slight size increase 553 in the final font. This basically turns the algorithm from O(n^3) into O(n). 554- [featureVars] Report about missing glyphs in substitution rules (#2654). 555- [mutator/instancer] Added CLI flag to --no-recalc-timestamp (#2649). 556- [SVG] Allow individual SVG documents in SVG OT table to be compressed on uncompressed, 557 and remember that when roundtripping to/from ttx. The SVG.docList is now a list 558 of SVGDocument namedtuple-like dataclass containing an extra ``compressed`` field, 559 and no longer a bare 3-tuple (#2645). 560- [designspaceLib] Check for descriptor types with hasattr() to allow custom classes 561 that don't inherit the default descriptors (#2634). 562- [subset] Enable sharing across subtables of extension lookups for harfbuzz packing 563 (#2626). Updated how table packing falls back to fontTools from harfbuzz (#2668). 564- [subset] Updated default feature tags following current Harfbuzz (#2637). 565- [svgLib] Fixed regex for real number to support e.g. 1e-4 in addition to 1.0e-4. 566 Support parsing negative rx, ry on arc commands (#2596, #2611). 567- [subset] Fixed subsetting SinglePosFormat2 when ValueFormat=0 (#2603). 568 5694.33.3 (released 2022-04-26) 570---------------------------- 571 572- [designspaceLib] Fixed typo in ``deepcopyExceptFonts`` method, preventing font 573 references to be transferred (#2600). Fixed another typo in the name of ``Range`` 574 dataclass's ``__post_init__`` magic method (#2597). 575 5764.33.2 (released 2022-04-22) 577---------------------------- 578 579- [otBase] Make logging less verbose when harfbuzz fails to serialize. Do not exit 580 at the first failure but continue attempting to fix offset overflow error using 581 the pure-python serializer even when the ``USE_HARFBUZZ_REPACKER`` option was 582 explicitly set to ``True``. This is normal with fonts with relatively large 583 tables, at least until hb.repack implements proper table splitting. 584 5854.33.1 (released 2022-04-22) 586---------------------------- 587 588- [otlLib] Put back the ``FONTTOOLS_GPOS_COMPACT_MODE`` environment variable to fix 589 regression in ufo2ft (and thus fontmake) introduced with v4.33.0 (#2592, #2593). 590 This is deprecated and will be removed one ufo2ft gets updated to use the new 591 config setup. 592 5934.33.0 (released 2022-04-21) 594---------------------------- 595 596- [OS/2 / merge] Automatically recalculate ``OS/2.xAvgCharWidth`` after merging 597 fonts with ``fontTools.merge`` (#2591, #2538). 598- [misc/config] Added ``fontTools.misc.configTools`` module, a generic configuration 599 system (#2416, #2439). 600 Added ``fontTools.config`` module, a fontTools-specific configuration 601 system using ``configTools`` above. 602 Attached a ``Config`` object to ``TTFont``. 603- [otlLib] Replaced environment variable for GPOS compression level with an 604 equivalent option using the new config system. 605- [designspaceLib] Incremented format version to 5.0 (#2436). 606 Added discrete axes, variable fonts, STAT information, either design- or 607 user-space location on instances. 608 Added ``fontTools.designspaceLib.split`` module to split a designspace 609 into sub-spaces that interpolate and that represent the variable fonts 610 listed in the document. 611 Made instance names optional and allow computing them from STAT data instead. 612 Added ``fontTools.designspaceLib.statNames`` module. 613 Allow instances to have the same location as a previously defined STAT label. 614 Deprecated some attributes: 615 ``SourceDescriptor``: ``copyLib``, ``copyInfo``, ``copyGroups``, ``copyFeatures``. 616 ``InstanceDescriptor``: ``kerning``, ``info``; ``glyphs``: use rules or sparse 617 sources. 618 For both, ``location``: use the more explicit designLocation. 619 Note: all are soft deprecations and existing code should keep working. 620 Updated documentation for Python methods and the XML format. 621- [varLib] Added ``build_many`` to build several variable fonts from a single 622 designspace document (#2436). 623 Added ``fontTools.varLib.stat`` module to build STAT tables from a designspace 624 document. 625- [otBase] Try to use the Harfbuzz Repacker for packing GSUB/GPOS tables when 626 ``uharfbuzz`` python bindings are available (#2552). Disable it by setting the 627 "fontTools.ttLib.tables.otBase:USE_HARFBUZZ_REPACKER" config option to ``False``. 628 If the option is set explicitly to ``True`` but ``uharfbuzz`` can't be imported 629 or fails to serialize for any reasons, an error will be raised (ImportError or 630 uharfbuzz errors). 631- [CFF/T2] Ensure that ``pen.closePath()`` gets called for CFF2 charstrings (#2577). 632 Handle implicit CFF2 closePath within ``T2OutlineExtractor`` (#2580). 633 6344.32.0 (released 2022-04-08) 635---------------------------- 636 637- [otlLib] Disable GPOS7 optimization to work around bug in Apple CoreText. 638 Always force Chaining GPOS8 for now (#2540). 639- [glifLib] Added ``outputImpliedClosingLine=False`` parameter to ``Glyph.draw()``, 640 to control behaviour of ``PointToSegmentPen`` (6b4e2e7). 641- [varLib.interpolatable] Check for wrong contour starting point (#2571). 642- [cffLib] Remove leftover ``GlobalState`` class and fix calls to ``TopDictIndex()`` 643 (#2569, #2570). 644- [instancer] Clear ``AxisValueArray`` if it is empty after instantiating (#2563). 645 6464.31.2 (released 2022-03-22) 647---------------------------- 648 649- [varLib] fix instantiation of GPOS SinglePos values (#2555). 650 6514.31.1 (released 2022-03-18) 652---------------------------- 653 654- [subset] fix subsetting OT-SVG when glyph id attribute is on the root ``<svg>`` 655 element (#2553). 656 6574.31.0 (released 2022-03-18) 658---------------------------- 659 660- [ttCollection] Fixed 'ResourceWarning: unclosed file' warning (#2549). 661- [varLib.merger] Handle merging SinglePos with valueformat=0 (#2550). 662- [ttFont] Update glyf's glyphOrder when calling TTFont.setGlyphOrder() (#2544). 663- [ttFont] Added ``ensureDecompiled`` method to load all tables irrespective 664 of the ``lazy`` attribute (#2551). 665- [otBase] Added ``iterSubTable`` method to iterate over BaseTable's children of 666 type BaseTable; useful for traversing a tree of otTables (#2551). 667 6684.30.0 (released 2022-03-10) 669---------------------------- 670 671- [varLib] Added debug logger showing the glyph name for which ``gvar`` is built (#2542). 672- [varLib.errors] Fixed undefined names in ``FoundANone`` and ``UnsupportedFormat`` 673 exceptions (ac4d5611). 674- [otlLib.builder] Added ``windowsNames`` and ``macNames`` (bool) parameters to the 675 ``buildStatTabe`` function, so that one can select whether to only add one or both 676 of the two sets (#2528). 677- [t1Lib] Added the ability to recreate PostScript stream (#2504). 678- [name] Added ``getFirstDebugName``, ``getBest{Family,SubFamily,Full}Name`` methods (#2526). 679 6804.29.1 (released 2022-02-01) 681---------------------------- 682 683- [colorLib] Fixed rounding issue with radial gradient's start/end circles inside 684 one another (#2521). 685- [freetypePen] Handle rotate/skew transform when auto-computing width/height of the 686 buffer; raise PenError wen missing moveTo (#2517) 687 6884.29.0 (released 2022-01-24) 689---------------------------- 690 691- [ufoLib] Fixed illegal characters and expanded reserved filenames (#2506). 692- [COLRv1] Don't emit useless PaintColrLayers of lenght=1 in LayerListBuilder (#2513). 693- [ttx] Removed legacy ``waitForKeyPress`` method on Windows (#2509). 694- [pens] Added FreeTypePen that uses ``freetype-py`` and the pen protocol for 695 rasterizating outline paths (#2494). 696- [unicodedata] Updated the script direction list to Unicode 14.0 (#2484). 697 Bumped unicodedata2 dependency to 14.0 (#2499). 698- [psLib] Fixed type of ``fontName`` in ``suckfont`` (#2496). 699 7004.28.5 (released 2021-12-19) 701---------------------------- 702 703- [svgPathPen] Continuation of #2471: make sure all occurrences of ``str()`` are now 704 replaced with user-defined ``ntos`` callable. 705- [merge] Refactored code into submodules, plus several bugfixes and improvements: 706 fixed duplicate-glyph-resolution GSUB-lookup generation code; use tolerance in glyph 707 comparison for empty glyph's width; ignore space of default ignorable glyphs; 708 downgrade duplicates-resolution missing-GSUB from assert to warn; added --drop-tables 709 option (#2473, #2475, #2476). 710 7114.28.4 (released 2021-12-15) 712---------------------------- 713 714- [merge] Merge GDEF marksets in Lookups properly (#2474). 715- [feaLib] Have ``fontTools feaLib`` script exit with error code when build fails (#2459) 716- [svgPathPen] Added ``ntos`` option to customize number formatting (e.g. rounding) (#2471). 717- [subset] Speed up subsetting of large CFF fonts (#2467). 718- [otTables] Speculatively promote lookups to extension to speed up compilation. If the 719 offset to lookup N is too big to fit in a ushort, the offset to lookup N+1 is going to 720 be too big as well, so we promote to extension all lookups from lookup N onwards (#2465). 721 7224.28.3 (released 2021-12-03) 723---------------------------- 724 725- [subset] Fixed bug while subsetting ``COLR`` table, whereby incomplete layer records 726 pointing to missing glyphs were being retained leading to ``struct.error`` upon 727 compiling. Make it so that ``glyf`` glyph closure, which follows the ``COLR`` glyph 728 closure, does not influence the ``COLR`` table subsetting (#2461, #2462). 729- [docs] Fully document the ``cmap`` and ``glyf`` tables (#2454, #2457). 730- [colorLib.unbuilder] Fixed CLI by deleting no longer existing parameter (180bb1867). 731 7324.28.2 (released 2021-11-22) 733---------------------------- 734 735- [otlLib] Remove duplicates when building coverage (#2433). 736- [docs] Add interrogate configuration (#2443). 737- [docs] Remove comment about missing “start” optional argument to ``calcChecksum`` (#2448). 738- [cu2qu/cli] Adapt to the latest ufoLib2. 739- [subset] Support subsetting SVG table and remove it from the list of drop by default tables (#534). 740- [subset] add ``--pretty-svg`` option to pretty print SVG table contents (#2452). 741- [merge] Support merging ``CFF`` tables (CID-keyed ``CFF`` is still not supported) (#2447). 742- [merge] Support ``--output-file`` (#2447). 743- [docs] Split table docs into individual pages (#2444). 744- [feaLib] Forbid empty classes (#2446). 745- [docs] Improve documentation for ``fontTools.ttLib.ttFont`` (#2442). 746 7474.28.1 (released 2021-11-08) 748---------------------------- 749 750- [subset] Fixed AttributeError while traversing a color glyph's Paint graph when there is no 751 LayerList, which is optional (#2441). 752 7534.28.0 (released 2021-11-05) 754---------------------------- 755 756- Dropped support for EOL Python 3.6, require Python 3.7 (#2417). 757- [ufoLib/glifLib] Make filename-clash checks faster by using a set instead of a list (#2422). 758- [subset] Don't crash if optional ClipList and LayerList are ``None`` (empty) (#2424, 2439). 759- [OT-SVG] Removed support for old deprecated version 1 and embedded color palettes, 760 which were never officially part of the OpenType SVG spec. Upon compile, reuse offsets 761 to SVG documents that are identical (#2430). 762- [feaLib] Added support for Variable Feature File syntax. This is experimental and subject 763 to change until it is finalized in the Adobe FEA spec (#2432). 764- [unicodedata] Update Scripts/ScriptExtensions/Blocks to UnicodeData 14.0 (#2437). 765 7664.27.1 (released 2021-09-23) 767---------------------------- 768 769- [otlLib] Fixed error when chained contextual lookup builder overflows (#2404, #2411). 770- [bezierTools] Fixed two floating-point bugs: one when computing `t` for a point 771 lying on an almost horizontal/vertical line; another when computing the intersection 772 point between a curve and a line (#2413). 773 7744.27.0 (released 2021-09-14) 775---------------------------- 776 777- [ttLib/otTables] Cleaned up virtual GID handling: allow virtual GIDs in ``Coverage`` 778 and ``ClassDef`` readers; removed unused ``allowVID`` argument from ``TTFont`` 779 constructor, and ``requireReal`` argument in ``TTFont.getGlyphID`` method. 780 Make ``TTFont.setGlyphOrder`` clear reverse glyphOrder map, and assume ``glyphOrder`` 781 internal attribute is never modified outside setGlyphOrder; added ``TTFont.getGlyphNameMany`` 782 and ``getGlyphIDMany`` (#1536, #1654, #2334, #2398). 783- [py23] Dropped internal use of ``fontTools.py23`` module to fix deprecation warnings 784 in client code that imports from fontTools (#2234, #2399, #2400). 785- [subset] Fix subsetting COLRv1 clip boxes when font is loaded lazily (#2408). 786 7874.26.2 (released 2021-08-09) 788---------------------------- 789 790- [otTables] Added missing ``CompositeMode.PLUS`` operator (#2390). 791 7924.26.1 (released 2021-08-03) 793---------------------------- 794 795- [transform] Added ``transformVector`` and ``transformVectors`` methods to the 796 ``Transform`` class. Similar to ``transformPoint`` but ignore the translation 797 part (#2386). 798 7994.26.0 (released 2021-08-03) 800---------------------------- 801 802- [xmlWriter] Default to ``"\n"`` for ``newlinestr`` instead of platform-specific 803 ``os.linesep`` (#2384). 804- [otData] Define COLRv1 ClipList and ClipBox (#2379). 805- [removeOverlaps/instancer] Added --ignore-overlap-errors option to work around 806 Skia PathOps.Simplify bug (#2382, #2363, google/fonts#3365). 807- NOTE: This will be the last version to support Python 3.6. FontTools will require 808 Python 3.7 or above from the next release (#2350) 809 8104.25.2 (released 2021-07-26) 811---------------------------- 812 813- [COLRv1] Various changes to sync with the latest CORLv1 draft spec. In particular: 814 define COLR.VarIndexMap, remove/inline ColorIndex struct, add VarIndexBase to ``PaintVar*`` tables (#2372); 815 add reduced-precicion specialized transform Paints; 816 define Angle as fraction of half circle encoded as F2Dot14; 817 use FWORD (int16) for all Paint center coordinates; 818 change PaintTransform to have an offset to Affine2x3; 819- [ttLib] when importing XML, only set sfntVersion if the font has no reader and is empty (#2376) 820 8214.25.1 (released 2021-07-16) 822---------------------------- 823 824- [ttGlyphPen] Fixed bug in ``TTGlyphPointPen``, whereby open contours (i.e. starting 825 with segmentType "move") would throw ``NotImplementedError``. They are now treated 826 as if they are closed, like with the ``TTGlyphPen`` (#2364, #2366). 827 8284.25.0 (released 2021-07-05) 829---------------------------- 830 831- [tfmLib] Added new library for parsing TeX Font Metric (TFM) files (#2354). 832- [TupleVariation] Make shared tuples order deterministic on python < 3.7 where 833 Counter (subclass of dict) doesn't remember insertion order (#2351, #2353). 834- [otData] Renamed COLRv1 structs to remove 'v1' suffix and match the updated draft 835 spec: 'LayerV1List' -> 'LayerList', 'BaseGlyphV1List' -> 'BaseGlyphList', 836 'BaseGlyphV1Record' -> 'BaseGlyphPaintRecord' (#2346). 837 Added 8 new ``PaintScale*`` tables: with/without centers, uniform vs non-uniform. 838 Added ``*AroundCenter`` variants to ``PaintRotate`` and ``PaintSkew``: the default 839 versions no longer have centerX/Y, but default to origin. 840 ``PaintRotate``, ``PaintSkew`` and ``PaintComposite`` formats were re-numbered. 841 NOTE: these are breaking changes; clients using the experimental COLRv1 API will 842 have to be updated (#2348). 843- [pointPens] Allow ``GuessSmoothPointPen`` to accept a tolerance. Fixed call to 844 ``math.atan2`` with x/y parameters inverted. Sync the code with fontPens (#2344). 845- [post] Fixed parsing ``post`` table format 2.0 when it contains extra garbage 846 at the end of the stringData array (#2314). 847- [subset] drop empty features unless 'size' with FeatureParams table (#2324). 848- [otlLib] Added ``otlLib.optimize`` module; added GPOS compaction algorithm. 849 The compaction can be run on existing fonts with ``fonttools otlLib.optimize`` 850 or using the snippet ``compact_gpos.py``. There's experimental support for 851 compacting fonts at compilation time using an environment variable, but that 852 might be removed later (#2326). 853 8544.24.4 (released 2021-05-25) 855---------------------------- 856 857- [subset/instancer] Fixed ``AttributeError`` when instantiating a VF that 858 contains GPOS ValueRecords with ``Device`` tables but without the respective 859 non-Device values (e.g. ``XAdvDevice`` without ``XAdvance``). When not 860 explicitly set, the latter are assumed to be 0 (#2323). 861 8624.24.3 (released 2021-05-20) 863---------------------------- 864 865- [otTables] Fixed ``AttributeError`` in methods that split LigatureSubst, 866 MultipleSubst and AlternateSubst subtables when an offset overflow occurs. 867 The ``Format`` attribute was removed in v4.22.0 (#2319). 868 8694.24.2 (released 2021-05-20) 870---------------------------- 871 872- [ttGlyphPen] Fixed typing annotation of TTGlyphPen glyphSet parameter (#2315). 873- Fixed two instances of DeprecationWarning: invalid escape sequence (#2311). 874 8754.24.1 (released 2021-05-20) 876---------------------------- 877 878- [subset] Fixed AttributeError when SinglePos subtable has None Value (ValueFormat 0) 879 (#2312, #2313). 880 8814.24.0 (released 2021-05-17) 882---------------------------- 883 884- [pens] Add ``ttGlyphPen.TTGlyphPointPen`` similar to ``TTGlyphPen`` (#2205). 885 8864.23.1 (released 2021-05-14) 887---------------------------- 888 889- [subset] Fix ``KeyError`` after subsetting ``COLR`` table that initially contains 890 both v0 and v1 color glyphs when the subset only requested v1 glyphs; we were 891 not pruning the v0 portion of the table (#2308). 892- [colorLib] Set ``LayerV1List`` attribute to ``None`` when empty, it's optional 893 in CORLv1 (#2308). 894 8954.23.0 (released 2021-05-13) 896---------------------------- 897 898- [designspaceLib] Allow to use ``\\UNC`` absolute paths on Windows (#2299, #2306). 899- [varLib.merger] Fixed bug where ``VarLibMergeError`` was raised with incorrect 900 parameters (#2300). 901- [feaLib] Allow substituting a glyph class with ``NULL`` to delete multiple glyphs 902 (#2303). 903- [glyf] Fixed ``NameError`` exception in ``getPhantomPoints`` (#2295, #2305). 904- [removeOverlaps] Retry pathops.simplify after rounding path coordinates to integers 905 if it fails the first time using floats, to work around a rare and hard to debug 906 Skia bug (#2288). 907- [varLib] Added support for building, reading, writing and optimizing 32-bit 908 ``ItemVariationStore`` as used in COLRv1 table (#2285). 909- [otBase/otConverters] Add array readers/writers for int types (#2285). 910- [feaLib] Allow more than one lookahead glyph/class in contextual positioning with 911 "value at end" (#2293, #2294). 912- [COLRv1] Default varIdx should be 0xFFFFFFFF (#2297, #2298). 913- [pens] Make RecordingPointPen actually pass on identifiers; replace asserts with 914 explicit ``PenError`` exception (#2284). 915- [mutator] Round lsb for CF2 fonts as well (#2286). 916 9174.22.1 (released 2021-04-26) 918---------------------------- 919 920- [feaLib] Skip references to named lookups if the lookup block definition 921 is empty, similarly to makeotf. This also fixes an ``AttributeError`` while 922 generating ``aalt`` feature (#2276, #2277). 923- [subset] Fixed bug with ``--no-hinting`` implementation for Device tables (#2272, 924 #2275). The previous code was alwyas dropping Device tables if no-hinting was 925 requested, but some Device tables (DeltaFormat=0x8000) are also used to encode 926 variation indices and need to be retained. 927- [otBase] Fixed bug in getting the ValueRecordSize when decompiling ``MVAR`` 928 table with ``lazy=True`` (#2273, #2274). 929- [varLib/glyf/gvar] Optimized and simplified ``GlyphCoordinates`` and 930 ``TupleVariation`` classes, use ``bytearray`` where possible, refactored 931 phantom-points calculations. We measured about 30% speedup in total time 932 of loading master ttfs, building gvar, and saving (#2261, #2266). 933- [subset] Fixed ``AssertionError`` while pruning unused CPAL palettes when 934 ``0xFFFF`` is present (#2257, #2259). 935 9364.22.0 (released 2021-04-01) 937---------------------------- 938 939- [ttLib] Remove .Format from Coverage, ClassDef, SingleSubst, LigatureSubst, 940 AlternateSubst, MultipleSubst (#2238). 941 ATTENTION: This will change your TTX dumps! 942- [misc.arrayTools] move Vector to its own submodule, and rewrite as a tuple 943 subclass (#2201). 944- [docs] Added a terminology section for varLib (#2209). 945- [varLib] Move rounding to VariationModel, to avoid error accumulation from 946 multiple deltas (#2214) 947- [varLib] Explain merge errors in more human-friendly terms (#2223, #2226) 948- [otlLib] Correct some documentation (#2225) 949- [varLib/otlLib] Allow merging into VariationFont without first saving GPOS 950 PairPos2 (#2229) 951- [subset] Improve PairPosFormat2 subsetting (#2221) 952- [ttLib] TTFont.save: create file on disk as late as possible (#2253) 953- [cffLib] Add missing CFF2 dict operators LanguageGroup and ExpansionFactor 954 (#2249) 955 ATTENTION: This will change your TTX dumps! 956 9574.21.1 (released 2021-02-26) 958---------------------------- 959 960- [pens] Reverted breaking change that turned ``AbstractPen`` and ``AbstractPointPen`` 961 into abstract base classes (#2164, #2198). 962 9634.21.0 (released 2021-02-26) 964---------------------------- 965 966- [feaLib] Indent anchor statements in ``asFea()`` to make them more legible and 967 diff-able (#2193). 968- [pens] Turn ``AbstractPen`` and ``AbstractPointPen`` into abstract base classes 969 (#2164). 970- [feaLib] Added support for parsing and building ``STAT`` table from AFDKO feature 971 files (#2039). 972- [instancer] Added option to update name table of generated instance using ``STAT`` 973 table's axis values (#2189). 974- [bezierTools] Added functions to compute bezier point-at-time, as well as line-line, 975 curve-line and curve-curve intersections (#2192). 976 9774.20.0 (released 2021-02-15) 978---------------------------- 979 980- [COLRv1] Added ``unbuildColrV1`` to deconstruct COLRv1 otTables to raw json-able 981 data structure; it does the reverse of ``buildColrV1`` (#2171). 982- [feaLib] Allow ``sub X by NULL`` sequence to delete a glyph (#2170). 983- [arrayTools] Fixed ``Vector`` division (#2173). 984- [COLRv1] Define new ``PaintSweepGradient`` (#2172). 985- [otTables] Moved ``Paint.Format`` enum class outside of ``Paint`` class definition, 986 now named ``PaintFormat``. It was clashing with paint instance ``Format`` attribute 987 and thus was breaking lazy load of COLR table which relies on magic ``__getattr__`` 988 (#2175). 989- [COLRv1] Replace hand-coded builder functions with otData-driven dynamic 990 implementation (#2181). 991- [COLRv1] Define additional static (non-variable) Paint formats (#2181). 992- [subset] Added support for subsetting COLR v1 and CPAL tables (#2174, #2177). 993- [fontBuilder] Allow ``setupFvar`` to optionally take ``designspaceLib.AxisDescriptor`` 994 objects. Added new ``setupAvar`` method. Support localised names for axes and 995 named instances (#2185). 996 9974.19.1 (released 2021-01-28) 998---------------------------- 999 1000- [woff2] An initial off-curve point with an overlap flag now stays an off-curve 1001 point after compression. 1002 10034.19.0 (released 2021-01-25) 1004---------------------------- 1005 1006- [codecs] Handle ``errors`` parameter different from 'strict' for the custom 1007 extended mac encodings (#2137, #2132). 1008- [featureVars] Raise better error message when a script is missing the required 1009 default language system (#2154). 1010- [COLRv1] Avoid abrupt change caused by rounding ``PaintRadialGradient.c0`` when 1011 the start circle almost touches the end circle's perimeter (#2148). 1012- [COLRv1] Support building unlimited lists of paints as 255-ary trees of 1013 ``PaintColrLayers`` tables (#2153). 1014- [subset] Prune redundant format-12 cmap subtables when all non-BMP characters 1015 are dropped (#2146). 1016- [basePen] Raise ``MissingComponentError`` instead of bare ``KeyError`` when a 1017 referenced component is missing (#2145). 1018 10194.18.2 (released 2020-12-16) 1020---------------------------- 1021 1022- [COLRv1] Implemented ``PaintTranslate`` paint format (#2129). 1023- [varLib.cff] Fixed unbound local variable error (#1787). 1024- [otlLib] Don't crash when creating OpenType class definitions if some glyphs 1025 occur more than once (#2125). 1026 10274.18.1 (released 2020-12-09) 1028---------------------------- 1029 1030- [colorLib] Speed optimization for ``LayerV1ListBuilder`` (#2119). 1031- [mutator] Fixed missing tab in ``interpolate_cff2_metrics`` (0957dc7a). 1032 10334.18.0 (released 2020-12-04) 1034---------------------------- 1035 1036- [COLRv1] Update to latest draft: added ``PaintRotate`` and ``PaintSkew`` (#2118). 1037- [woff2] Support new ``brotlicffi`` bindings for PyPy (#2117). 1038- [glifLib] Added ``expectContentsFile`` parameter to ``GlyphSet``, for use when 1039 reading existing UFOs, to comply with the specification stating that a 1040 ``contents.plist`` file must exist in a glyph set (#2114). 1041- [subset] Allow ``LangSys`` tags in ``--layout-scripts`` option (#2112). For example: 1042 ``--layout-scripts=arab.dflt,arab.URD,latn``; this will keep ``DefaultLangSys`` 1043 and ``URD`` language for ``arab`` script, and all languages for ``latn`` script. 1044- [varLib.interpolatable] Allow UFOs to be checked; report open paths, non existant 1045 glyphs; add a ``--json`` option to produce a machine-readable list of 1046 incompatibilities 1047- [pens] Added ``QuartzPen`` to create ``CGPath`` from glyph outlines on macOS. 1048 Requires pyobjc (#2107). 1049- [feaLib] You can export ``FONTTOOLS_LOOKUP_DEBUGGING=1`` to enable feature file 1050 debugging info stored in ``Debg`` table (#2106). 1051- [otlLib] Build more efficient format 1 and format 2 contextual lookups whenever 1052 possible (#2101). 1053 10544.17.1 (released 2020-11-16) 1055---------------------------- 1056 1057- [colorLib] Fixed regression in 4.17.0 when building COLR v0 table; when color 1058 layers are stored in UFO lib plist, we can't distinguish tuples from lists so 1059 we need to accept either types (e5439eb9, googlefonts/ufo2ft/issues#426). 1060 10614.17.0 (released 2020-11-12) 1062---------------------------- 1063 1064- [colorLib/otData] Updated to latest draft ``COLR`` v1 spec (#2092). 1065- [svgLib] Fixed parsing error when arc commands' boolean flags are not separated 1066 by space or comma (#2094). 1067- [varLib] Interpret empty non-default glyphs as 'missing', if the default glyph is 1068 not empty (#2082). 1069- [feaLib.builder] Only stash lookup location for ``Debg`` if ``Builder.buildLookups_`` 1070 has cooperated (#2065, #2067). 1071- [varLib] Fixed bug in VarStore optimizer (#2073, #2083). 1072- [varLib] Add designspace lib key for custom feavar feature tag (#2080). 1073- Add HashPointPen adapted from psautohint. With this pen, a hash value of a glyph 1074 can be computed, which can later be used to detect glyph changes (#2005). 1075 10764.16.1 (released 2020-10-05) 1077---------------------------- 1078 1079- [varLib.instancer] Fixed ``TypeError`` exception when instantiating a VF with 1080 a GSUB table 1.1 in which ``FeatureVariations`` attribute is present but set to 1081 ``None`` -- indicating that optional ``FeatureVariations`` is missing (#2077). 1082- [glifLib] Make ``x`` and ``y`` attributes of the ``point`` element required 1083 even when validation is turned off, and raise a meaningful ``GlifLibError`` 1084 message when that happens (#2075). 1085 10864.16.0 (released 2020-09-30) 1087---------------------------- 1088 1089- [removeOverlaps] Added new module and ``removeOverlaps`` function that merges 1090 overlapping contours and components in TrueType glyphs. It requires the 1091 `skia-pathops <https://github.com/fonttools/skia-pathops>`__ module. 1092 Note that removing overlaps invalidates the TrueType hinting (#2068). 1093- [varLib.instancer] Added ``--remove-overlaps`` command-line option. 1094 The ``overlap`` option in ``instantiateVariableFont`` now takes an ``OverlapMode`` 1095 enum: 0: KEEP_AND_DONT_SET_FLAGS, 1: KEEP_AND_SET_FLAGS (default), and 2: REMOVE. 1096 The latter is equivalent to calling ``removeOverlaps`` on the generated static 1097 instance. The option continues to accept ``bool`` value for backward compatibility. 1098 1099 11004.15.0 (released 2020-09-21) 1101---------------------------- 1102 1103- [plistlib] Added typing annotations to plistlib module. Set up mypy static 1104 typechecker to run automatically on CI (#2061). 1105- [ttLib] Implement private ``Debg`` table, a reverse-DNS namespaced JSON dict. 1106- [feaLib] Optionally add an entry into the ``Debg`` table with the original 1107 lookup name (if any), feature name / script / language combination (if any), 1108 and original source filename and line location. Annotate the ttx output for 1109 a lookup with the information from the Debg table (#2052). 1110- [sfnt] Disabled checksum checking by default in ``SFNTReader`` (#2058). 1111- [Docs] Document ``mtiLib`` module (#2027). 1112- [varLib.interpolatable] Added checks for contour node count and operation type 1113 of each node (#2054). 1114- [ttLib] Added API to register custom table packer/unpacker classes (#2055). 1115 11164.14.0 (released 2020-08-19) 1117---------------------------- 1118 1119- [feaLib] Allow anonymous classes in LookupFlags definitions (#2037). 1120- [Docs] Better document DesignSpace rules processing order (#2041). 1121- [ttLib] Fixed 21-year old bug in ``maxp.maxComponentDepth`` calculation (#2044, 1122 #2045). 1123- [varLib.models] Fixed misspelled argument name in CLI entry point (81d0042a). 1124- [subset] When subsetting GSUB v1.1, fixed TypeError by checking whether the 1125 optional FeatureVariations table is present (e63ecc5b). 1126- [Snippets] Added snippet to show how to decompose glyphs in a TTF (#2030). 1127- [otlLib] Generate GSUB type 5 and GPOS type 7 contextual lookups where appropriate 1128 (#2016). 1129 11304.13.0 (released 2020-07-10) 1131---------------------------- 1132 1133- [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored 1134 some common code (#2004, #2007). 1135- [docs] Document otlLib module (#2009). 1136- [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive 1137 filesystems (#2001, #2002). 1138- [colorLib] Updated COLRv1 implementation following changes in the draft spec: 1139 (#2008, googlefonts/colr-gradients-spec#24). 1140 11414.12.1 (released 2020-06-16) 1142---------------------------- 1143 1144- [_n_a_m_e] Fixed error in ``addMultilingualName`` with one-character names. 1145 Only attempt to recovered malformed UTF-16 data from a ``bytes`` string, 1146 not from unicode ``str`` (#1997, #1998). 1147 11484.12.0 (released 2020-06-09) 1149---------------------------- 1150 1151- [otlLib/varLib] Ensure that the ``AxisNameID`` in the ``STAT`` and ``fvar`` 1152 tables is grater than 255 as per OpenType spec (#1985, #1986). 1153- [docs] Document more modules in ``fontTools.misc`` package: ``filenames``, 1154 ``fixedTools``, ``intTools``, ``loggingTools``, ``macCreatorType``, ``macRes``, 1155 ``plistlib`` (#1981). 1156- [OS/2] Don't calculate whole sets of unicode codepoints, use faster and more memory 1157 efficient ranges and bisect lookups (#1984). 1158- [voltLib] Support writing back abstract syntax tree as VOLT data (#1983). 1159- [voltLib] Accept DO_NOT_TOUCH_CMAP keyword (#1987). 1160- [subset/merge] Fixed a namespace clash involving a private helper class (#1955). 1161 11624.11.0 (released 2020-05-28) 1163---------------------------- 1164 1165- [feaLib] Introduced ``includeDir`` parameter on Parser and IncludingLexer to 1166 explicitly specify the directory to search when ``include()`` statements are 1167 encountered (#1973). 1168- [ufoLib] Silently delete duplicate glyphs within the same kerning group when reading 1169 groups (#1970). 1170- [ttLib] Set version of COLR table when decompiling COLRv1 (commit 9d8a7e2). 1171 11724.10.2 (released 2020-05-20) 1173---------------------------- 1174 1175- [sfnt] Fixed ``NameError: SimpleNamespace`` while reading TTC header. The regression 1176 was introduced with 4.10.1 after removing ``py23`` star import. 1177 11784.10.1 (released 2020-05-19) 1179---------------------------- 1180 1181- [sfnt] Make ``SFNTReader`` pickleable even when TTFont is loaded with lazy=True 1182 option and thus keeps a reference to an external file (#1962, #1967). 1183- [feaLib.ast] Restore backward compatibility (broken in 4.10 with #1905) for 1184 ``ChainContextPosStatement`` and ``ChainContextSubstStatement`` classes. 1185 Make them accept either list of lookups or list of lists of lookups (#1961). 1186- [docs] Document some modules in ``fontTools.misc`` package: ``arrayTools``, 1187 ``bezierTools`` ``cliTools`` and ``eexec`` (#1956). 1188- [ttLib._n_a_m_e] Fixed ``findMultilingualName()`` when name record's ``string`` is 1189 encoded as bytes sequence (#1963). 1190 11914.10.0 (released 2020-05-15) 1192---------------------------- 1193 1194- [varLib] Allow feature variations to be active across the entire space (#1957). 1195- [ufoLib] Added support for ``formatVersionMinor`` in UFO's ``fontinfo.plist`` and for 1196 ``formatMinor`` attribute in GLIF file as discussed in unified-font-object/ufo-spec#78. 1197 No changes in reading or writing UFOs until an upcoming (non-0) minor update of the 1198 UFO specification is published (#1786). 1199- [merge] Fixed merging fonts with different versions of ``OS/2`` table (#1865, #1952). 1200- [subset] Fixed ``AttributeError`` while subsetting ``ContextSubst`` and ``ContextPos`` 1201 Format 3 subtable (#1879, #1944). 1202- [ttLib.table._m_e_t_a] if data happens to be ascii, emit comment in TTX (#1938). 1203- [feaLib] Support multiple lookups per glyph position (#1905). 1204- [psCharStrings] Use inheritance to avoid repeated code in initializer (#1932). 1205- [Doc] Improved documentation for the following modules: ``afmLib`` (#1933), ``agl`` 1206 (#1934), ``cffLib`` (#1935), ``cu2qu`` (#1937), ``encodings`` (#1940), ``feaLib`` 1207 (#1941), ``merge`` (#1949). 1208- [Doc] Split off developer-centric info to new page, making front page of docs more 1209 user-focused. List all utilities and sub-modules with brief descriptions. 1210 Make README more concise and focused (#1914). 1211- [otlLib] Add function to build STAT table from high-level description (#1926). 1212- [ttLib._n_a_m_e] Add ``findMultilingualName()`` method (#1921). 1213- [unicodedata] Update ``RTL_SCRIPTS`` for Unicode 13.0 (#1925). 1214- [gvar] Sort ``gvar`` XML output by glyph name, not glyph order (#1907, #1908). 1215- [Doc] Added help options to ``fonttools`` command line tool (#1913, #1920). 1216 Ensure all fonttools CLI tools have help documentation (#1948). 1217- [ufoLib] Only write fontinfo.plist when there actually is content (#1911). 1218 12194.9.0 (released 2020-04-29) 1220--------------------------- 1221 1222- [subset] Fixed subsetting of FeatureVariations table. The subsetter no longer drops 1223 FeatureVariationRecords that have empty substitutions as that will keep the search 1224 going and thus change the logic. It will only drop empty records that occur at the 1225 end of the FeatureVariationRecords array (#1881). 1226- [subset] Remove FeatureVariations table and downgrade GSUB/GPOS to version 0x10000 1227 when FeatureVariations contain no FeatureVariationRecords after subsetting (#1903). 1228- [agl] Add support for legacy Adobe Glyph List of glyph names in ``fontTools.agl`` 1229 (#1895). 1230- [feaLib] Ignore superfluous script statements (#1883). 1231- [feaLib] Hide traceback by default on ``fonttools feaLib`` command line. 1232 Use ``--traceback`` option to show (#1898). 1233- [feaLib] Check lookup index in chaining sub/pos lookups and print better error 1234 message (#1896, #1897). 1235- [feaLib] Fix building chained alt substitutions (#1902). 1236- [Doc] Included all fontTools modules in the sphinx-generated documentation, and 1237 published it to ReadTheDocs for continuous documentation of the fontTools project 1238 (#1333). Check it out at https://fonttools.readthedocs.io/. Thanks to Chris Simpkins! 1239- [transform] The ``Transform`` class is now subclass of ``typing.NamedTuple``. No 1240 change in functionality (#1904). 1241 1242 12434.8.1 (released 2020-04-17) 1244--------------------------- 1245 1246- [feaLib] Fixed ``AttributeError: 'NoneType' has no attribute 'getAlternateGlyphs'`` 1247 when ``aalt`` feature references a chain contextual substitution lookup 1248 (googlefonts/fontmake#648, #1878). 1249 12504.8.0 (released 2020-04-16) 1251--------------------------- 1252 1253- [feaLib] If Parser is initialized without a ``glyphNames`` parameter, it cannot 1254 distinguish between a glyph name containing an hyphen, or a range of glyph names; 1255 instead of raising an error, it now interprets them as literal glyph names, while 1256 also outputting a logging warning to alert user about the ambiguity (#1768, #1870). 1257- [feaLib] When serializing AST to string, emit spaces around hyphens that denote 1258 ranges. Also, fixed an issue with CID ranges when round-tripping AST->string->AST 1259 (#1872). 1260- [Snippets/otf2ttf] In otf2ttf.py script update LSB in hmtx to match xMin (#1873). 1261- [colorLib] Added experimental support for building ``COLR`` v1 tables as per 1262 the `colr-gradients-spec <https://github.com/googlefonts/colr-gradients-spec/blob/main/colr-gradients-spec.md>`__ 1263 draft proposal. **NOTE**: both the API and the XML dump of ``COLR`` v1 are 1264 susceptible to change while the proposal is being discussed and formalized (#1822). 1265 12664.7.0 (released 2020-04-03) 1267--------------------------- 1268 1269- [cu2qu] Added ``fontTools.cu2qu`` package, imported from the original 1270 `cu2qu <https://github.com/googlefonts/cu2qu>`__ project. The ``cu2qu.pens`` module 1271 was moved to ``fontTools.pens.cu2quPen``. The optional cu2qu extension module 1272 can be compiled by installing `Cython <https://cython.org/>`__ before installing 1273 fonttools from source (i.e. git repo or sdist tarball). The wheel package that 1274 is published on PyPI (i.e. the one ``pip`` downloads, unless ``--no-binary`` 1275 option is used), will continue to be pure-Python for now (#1868). 1276 12774.6.0 (released 2020-03-24) 1278--------------------------- 1279 1280- [varLib] Added support for building variable ``BASE`` table version 1.1 (#1858). 1281- [CPAL] Added ``fromRGBA`` method to ``Color`` class (#1861). 1282 1283 12844.5.0 (released 2020-03-20) 1285--------------------------- 1286 1287- [designspaceLib] Added ``add{Axis,Source,Instance,Rule}Descriptor`` methods to 1288 ``DesignSpaceDocument`` class, to initialize new descriptor objects using keyword 1289 arguments, and at the same time append them to the current document (#1860). 1290- [unicodedata] Update to Unicode 13.0 (#1859). 1291 12924.4.3 (released 2020-03-13) 1293--------------------------- 1294 1295- [varLib] Always build ``gvar`` table for TrueType-flavored Variable Fonts, 1296 even if it contains no variation data. The table is required according to 1297 the OpenType spec (#1855, #1857). 1298 12994.4.2 (released 2020-03-12) 1300--------------------------- 1301 1302- [ttx] Annotate ``LookupFlag`` in XML dump with comment explaining what bits 1303 are set and what they mean (#1850). 1304- [feaLib] Added more descriptive message to ``IncludedFeaNotFound`` error (#1842). 1305 13064.4.1 (released 2020-02-26) 1307--------------------------- 1308 1309- [woff2] Skip normalizing ``glyf`` and ``loca`` tables if these are missing from 1310 a font (e.g. in NotoColorEmoji using ``CBDT/CBLC`` tables). 1311- [timeTools] Use non-localized date parsing in ``timestampFromString``, to fix 1312 error when non-English ``LC_TIME`` locale is set (#1838, #1839). 1313- [fontBuilder] Make sure the CFF table generated by fontBuilder can be used by varLib 1314 without having to compile and decompile the table first. This was breaking in 1315 converting the CFF table to CFF2 due to some unset attributes (#1836). 1316 13174.4.0 (released 2020-02-18) 1318--------------------------- 1319 1320- [colorLib] Added ``fontTools.colorLib.builder`` module, initially with ``buildCOLR`` 1321 and ``buildCPAL`` public functions. More color font formats will follow (#1827). 1322- [fontBuilder] Added ``setupCOLR`` and ``setupCPAL`` methods (#1826). 1323- [ttGlyphPen] Quantize ``GlyphComponent.transform`` floats to ``F2Dot14`` to fix 1324 round-trip issue when computing bounding boxes of transformed components (#1830). 1325- [glyf] If a component uses reference points (``firstPt`` and ``secondPt``) for 1326 alignment (instead of X and Y offsets), compute the effective translation offset 1327 *after* having applied any transform (#1831). 1328- [glyf] When all glyphs have zero contours, compile ``glyf`` table data as a single 1329 null byte in order to pass validation by OTS and Windows (#1829). 1330- [feaLib] Parsing feature code now ensures that referenced glyph names are part of 1331 the known glyph set, unless a glyph set was not provided. 1332- [varLib] When filling in the default axis value for a missing location of a source or 1333 instance, correctly map the value forward. 1334- [varLib] The avar table can now contain mapping output values that are greater than 1335 OR EQUAL to the preceeding value, as the avar specification allows this. 1336- [varLib] The errors of the module are now ordered hierarchically below VarLibError. 1337 See #1821. 1338 13394.3.0 (released 2020-02-03) 1340--------------------------- 1341 1342- [EBLC/CBLC] Fixed incorrect padding length calculation for Format 3 IndexSubTable 1343 (#1817, #1818). 1344- [varLib] Fixed error when merging OTL tables and TTFonts were loaded as ``lazy=True`` 1345 (#1808, #1809). 1346- [varLib] Allow to use master fonts containing ``CFF2`` table when building VF (#1816). 1347- [ttLib] Make ``recalcBBoxes`` option work also with ``CFF2`` table (#1816). 1348- [feaLib] Don't reset ``lookupflag`` in lookups defined inside feature blocks. 1349 They will now inherit the current ``lookupflag`` of the feature. This is what 1350 Adobe ``makeotf`` also does in this case (#1815). 1351- [feaLib] Fixed bug with mixed single/multiple substitutions. If a single substitution 1352 involved a glyph class, we were incorrectly using only the first glyph in the class 1353 (#1814). 1354 13554.2.5 (released 2020-01-29) 1356--------------------------- 1357 1358- [feaLib] Do not fail on duplicate multiple substitutions, only warn (#1811). 1359- [subset] Optimize SinglePos subtables to Format 1 if all ValueRecords are the same 1360 (#1802). 1361 13624.2.4 (released 2020-01-09) 1363--------------------------- 1364 1365- [unicodedata] Update RTL_SCRIPTS for Unicode 11 and 12. 1366 13674.2.3 (released 2020-01-07) 1368--------------------------- 1369 1370- [otTables] Fixed bug when splitting `MarkBasePos` subtables as offsets overflow. 1371 The mark class values in the split subtable were not being updated, leading to 1372 invalid mark-base attachments (#1797, googlefonts/noto-source#145). 1373- [feaLib] Only log a warning instead of error when features contain duplicate 1374 substitutions (#1767). 1375- [glifLib] Strip XML comments when parsing with lxml (#1784, #1785). 1376 13774.2.2 (released 2019-12-12) 1378--------------------------- 1379 1380- [subset] Fixed issue with subsetting FeatureVariations table when the index 1381 of features changes as features get dropped. The feature index need to be 1382 remapped to point to index of the remaining features (#1777, #1782). 1383- [fontBuilder] Added `addFeatureVariations` method to `FontBuilder` class. This 1384 is a shorthand for calling `featureVars.addFeatureVariations` on the builder's 1385 TTFont object (#1781). 1386- [glyf] Fixed the flags bug in glyph.drawPoints() like we did for glyph.draw() 1387 (#1771, #1774). 1388 13894.2.1 (released 2019-12-06) 1390--------------------------- 1391 1392- [glyf] Use the ``flagOnCurve`` bit mask in ``glyph.draw()``, so that we ignore 1393 the ``overlap`` flag that may be set when instantiating variable fonts (#1771). 1394 13954.2.0 (released 2019-11-28) 1396--------------------------- 1397 1398- [pens] Added the following pens: 1399 1400 * ``roundingPen.RoundingPen``: filter pen that rounds coordinates and components' 1401 offsets to integer; 1402 * ``roundingPen.RoundingPointPen``: like the above, but using PointPen protocol. 1403 * ``filterPen.FilterPointPen``: base class for filter point pens; 1404 * ``transformPen.TransformPointPen``: filter point pen to apply affine transform; 1405 * ``recordingPen.RecordingPointPen``: records and replays point-pen commands. 1406 1407- [ttGlyphPen] Always round float coordinates and component offsets to integers 1408 (#1763). 1409- [ufoLib] When converting kerning groups from UFO2 to UFO3, avoid confusing 1410 groups with the same name as one of the glyphs (#1761, #1762, 1411 unified-font-object/ufo-spec#98). 1412 14134.1.0 (released 2019-11-18) 1414--------------------------- 1415 1416- [instancer] Implemented restricting axis ranges (level 3 partial instancing). 1417 You can now pass ``{axis_tag: (min, max)}`` tuples as input to the 1418 ``instantiateVariableFont`` function. Note that changing the default axis 1419 position is not supported yet. The command-line script also accepts axis ranges 1420 in the form of colon-separated float values, e.g. ``wght=400:700`` (#1753, #1537). 1421- [instancer] Never drop STAT ``DesignAxis`` records, but only prune out-of-range 1422 ``AxisValue`` records. 1423- [otBase/otTables] Enforce that VarStore.RegionAxisCount == fvar.axisCount, even 1424 when regions list is empty to appease OTS < v8.0 (#1752). 1425- [designspaceLib] Defined new ``processing`` attribute for ``<rules>`` element, 1426 with values "first" or "last", plus other editorial changes to DesignSpace 1427 specification. Bumped format version to 4.1 (#1750). 1428- [varLib] Improved error message when masters' glyph orders do not match (#1758, 1429 #1759). 1430- [featureVars] Allow to specify custom feature tag in ``addFeatureVariations``; 1431 allow said feature to already exist, in which case we append new lookup indices 1432 to existing features. Implemented ``<rules>`` attribute ``processing`` according to 1433 DesignSpace specification update in #1750. Depending on this flag, we generate 1434 either an 'rvrn' (always processed first) or a 'rclt' feature (follows lookup order, 1435 therefore last) (#1747, #1625, #1371). 1436- [ttCollection] Added support for context manager auto-closing via ``with`` statement 1437 like with ``TTFont`` (#1751). 1438- [unicodedata] Require unicodedata2 >= 12.1.0. 1439- [py2.py3] Removed yet more PY2 vestiges (#1743). 1440- [_n_a_m_e] Fixed issue when comparing NameRecords with different string types (#1742). 1441- [fixedTools] Changed ``fixedToFloat`` to not do any rounding but simply return 1442 ``value / (1 << precisionBits)``. Added ``floatToFixedToStr`` and 1443 ``strToFixedToFloat`` functions to be used when loading from or dumping to XML. 1444 Fixed values (e.g. fvar axes and instance coordinates, avar mappings, etc.) are 1445 are now stored as un-rounded decimal floats upon decompiling (#1740, #737). 1446- [feaLib] Fixed handling of multiple ``LigatureCaret`` statements for the same glyph. 1447 Only the first rule per glyph is used, additional ones are ignored (#1733). 1448 14494.0.2 (released 2019-09-26) 1450--------------------------- 1451 1452- [voltLib] Added support for ``ALL`` and ``NONE`` in ``PROCESS_MARKS`` (#1732). 1453- [Silf] Fixed issue in ``Silf`` table compilation and decompilation regarding str vs 1454 bytes in python3 (#1728). 1455- [merge] Handle duplicate glyph names better: instead of appending font index to 1456 all glyph names, use similar code like we use in ``post`` and ``CFF`` tables (#1729). 1457 14584.0.1 (released 2019-09-11) 1459--------------------------- 1460 1461- [otTables] Support fixing offset overflows in ``MultipleSubst`` lookup subtables 1462 (#1706). 1463- [subset] Prune empty strikes in ``EBDT`` and ``CBDT`` table data (#1698, #1633). 1464- [pens] Fixed issue in ``PointToSegmentPen`` when last point of closed contour has 1465 same coordinates as the starting point and was incorrectly dropped (#1720). 1466- [Graphite] Fixed ``Sill`` table output to pass OTS (#1705). 1467- [name] Added ``removeNames`` method to ``table__n_a_m_e`` class (#1719). 1468- [ttLib] Added aliases for renamed entries ``ascender`` and ``descender`` in 1469 ``hhea`` table (#1715). 1470 14714.0.0 (released 2019-08-22) 1472--------------------------- 1473 1474- NOTE: The v4.x version series only supports Python 3.6 or greater. You can keep 1475 using fonttools 3.x if you need support for Python 2. 1476- [py23] Removed all the python2-only code since it is no longer reachable, thus 1477 unused; only the Python3 symbols were kept, but these are no-op. The module is now 1478 DEPRECATED and will removed in the future. 1479- [ttLib] Fixed UnboundLocalError for empty loca/glyph tables (#1680). Also, allow 1480 the glyf table to be incomplete when dumping to XML (#1681). 1481- [varLib.models] Fixed KeyError while sorting masters and there are no on-axis for 1482 a given axis (38a8eb0e). 1483- [cffLib] Make sure glyph names are unique (#1699). 1484- [feaLib] Fix feature parser to correctly handle octal numbers (#1700). 1485 14863.44.0 (released 2019-08-02) 1487---------------------------- 1488 1489- NOTE: This is the last scheduled release to support Python 2.7. The upcoming fonttools 1490 v4.x series is going to require Python 3.6 or greater. 1491- [varLib] Added new ``varLib.instancer`` module for partially instantiating variable 1492 fonts. This extends (and will eventually replace) ``varLib.mutator`` module, as 1493 it allows to create not just full static instances from a variable font, but also 1494 "partial" or "less variable" fonts where some of the axes are dropped or 1495 instantiated at a particular value. 1496 Also available from the command-line as `fonttools varLib.instancer --help` 1497 (#1537, #1628). 1498- [cffLib] Added support for ``FDSelect`` format 4 (#1677). 1499- [subset] Added support for subsetting ``sbix`` (Apple bitmap color font) table. 1500- [t1Lib] Fixed issue parsing ``eexec`` section in Type1 fonts when whitespace 1501 characters are interspersed among the trailing zeros (#1676). 1502- [cffLib.specializer] Fixed bug in ``programToCommands`` with CFF2 charstrings (#1669). 1503 15043.43.2 (released 2019-07-10) 1505---------------------------- 1506 1507- [featureVars] Fixed region-merging code on python3 (#1659). 1508- [varLib.cff] Fixed merging of sparse PrivateDict items (#1653). 1509 15103.43.1 (released 2019-06-19) 1511---------------------------- 1512 1513- [subset] Fixed regression when passing ``--flavor=woff2`` option with an input font 1514 that was already compressed as WOFF 1.0 (#1650). 1515 15163.43.0 (released 2019-06-18) 1517---------------------------- 1518 1519- [woff2] Added support for compressing/decompressing WOFF2 fonts with non-transformed 1520 ``glyf`` and ``loca`` tables, as well as with transformed ``hmtx`` table. 1521 Removed ``Snippets/woff2_compress.py`` and ``Snippets/woff2_decompress.py`` scripts, 1522 and replaced them with a new console entry point ``fonttools ttLib.woff2`` 1523 that provides two sub-commands ``compress`` and ``decompress``. 1524- [varLib.cff] Fixed bug when merging CFF2 ``PrivateDicts``. The ``PrivateDict`` 1525 data from the first region font was incorrecty used for all subsequent fonts. 1526 The bug would only affect variable CFF2 fonts with hinting (#1643, #1644). 1527 Also, fixed a merging bug when VF masters have no blends or marking glyphs (#1632, 1528 #1642). 1529- [loggingTools] Removed unused backport of ``LastResortLogger`` class. 1530- [subset] Gracefully handle partial MATH table (#1635). 1531- [featureVars] Avoid duplicate references to ``rvrn`` feature record in 1532 ``DefaultLangSys`` tables when calling ``addFeatureVariations`` on a font that 1533 does not already have a ``GSUB`` table (aa8a5bc6). 1534- [varLib] Fixed merging of class-based kerning. Before, the process could introduce 1535 rogue kerning values and variations for random classes against class zero (everything 1536 not otherwise classed). 1537- [varLib] Fixed merging GPOS tables from master fonts with different number of 1538 ``SinglePos`` subtables (#1621, #1641). 1539- [unicodedata] Updated Blocks, Scripts and ScriptExtensions to Unicode 12.1. 1540 15413.42.0 (released 2019-05-28) 1542---------------------------- 1543 1544- [OS/2] Fixed sign of ``fsType``: it should be ``uint16``, not ``int16`` (#1619). 1545- [subset] Skip out-of-range class values in mark attachment (#1478). 1546- [fontBuilder] Add an empty ``DSIG`` table with ``setupDummyDSIG`` method (#1621). 1547- [varLib.merger] Fixed bug whereby ``GDEF.GlyphClassDef`` were being dropped 1548 when generating instance via ``varLib.mutator`` (#1614). 1549- [varLib] Added command-line options ``-v`` and ``-q`` to configure logging (#1613). 1550- [subset] Update font extents in head table (#1612). 1551- [subset] Make --retain-gids truncate empty glyphs after the last non-empty glyph 1552 (#1611). 1553- [requirements] Updated ``unicodedata2`` backport for Unicode 12.0. 1554 15553.41.2 (released 2019-05-13) 1556---------------------------- 1557 1558- [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby 1559 the VarStore state was not propagated to PrivateDict (#1598). 1560- [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609). 1561 1562 15633.41.1 (released 2019-05-13) 1564---------------------------- 1565 1566- [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using 1567 custom opener function (#1606). 1568- [head] Round font bounding box coordinates to integers to fix compile error 1569 if CFF font has float coordinates (#1604, #1605). 1570- [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599). 1571- [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option 1572 (#1590, #1594). 1573- [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by 1574 previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's 1575 ``decompile`` method (#1600). 1576 15773.41.0 (released 2019-04-29) 1578---------------------------- 1579 1580- [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse 1581 masters, or masters with more than one model (multiple ``VarStore.VarData``). 1582 In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with 1583 ``blend`` operators (#1547, #1591). 1584- [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option, 1585 and when advances mapping is null while sidebearings mappings are non-null 1586 (#1587, #1588). 1587- Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value. 1588 Calculate it automatically when compiling features with feaLib. Added option 1589 ``--recalc-max-context`` to ``subset`` module (#1582). 1590- [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after 1591 importing font from TTX (#1584). 1592- [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586). 1593- [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539). 1594 15953.40.0 (released 2019-04-08) 1596---------------------------- 1597 1598- [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids`` 1599 option (#1552). 1600- [designspaceLib] Use up-to-date default location in ``findDefault`` method 1601 (#1554). 1602- [voltLib] Allow passing file-like object to Parser. 1603- [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf 1604 table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566). 1605- [svgLib] Added support for converting more SVG shapes to path ``d`` strings 1606 (ellipse, line, polyline), as well as support for ``transform`` attributes. 1607 Only ``matrix`` transformations are currently supported (#1564, #1564). 1608- [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG`` 1609 tables (#1551). 1610- [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557). 1611- Fixed ``DeprecationWarning`` on invalid escape sequences (#1562). 1612 16133.39.0 (released 2019-03-19) 1614---------------------------- 1615 1616- [ttLib/glyf] Raise more specific error when encountering recursive 1617 component references (#1545, #1546). 1618- [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534, 1619 unified-font-object/ufo-spec#84). 1620- [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent`` 1621 and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528). 1622- [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation 1623 toXML to improve readability of TTX dump (#1527). 1624- [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522). 1625- [designspaceLib] Use axes maps when normalizing locations in 1626 DesignSpaceDocument (#1226, #1521), and when finding default source (#1535). 1627- [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by 1628 default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option 1629 to disable this (#1518). 1630- [subset] Fixed subsetting ``VVAR`` table (#1516, #1517). 1631 Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the 1632 option ``--retain-gids`` is used. 1633- [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511). 1634 Fixed double indentation of ``subtable`` statement (#1512). 1635 Added support for ``subtable`` statement in more places than just PairPos 1636 lookups (#1520). 1637 Handle lookupflag 0 and lookupflag without a value (#1540). 1638- [varLib] In ``load_designspace``, provide a default English name for the 1639 ``ital`` axis tag. 1640- Remove pyftinspect because it is unmaintained and bitrotted. 1641 16423.38.0 (released 2019-02-18) 1643---------------------------- 1644 1645- [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with 1646 CFF table (#1488, 649dc49). 1647- [subset] Fixed AttributeError when using --desubroutinize option (#1490). 1648 Also, fixed desubroutinizing bug when subrs contain hints (#1499). 1649- [CPAL] Make Color a subclass of namedtuple (173a0f5). 1650- [feaLib] Allow hyphen in glyph class names. 1651- [feaLib] Added 'tables' option to __main__.py (#1497). 1652- [feaLib] Add support for special-case contextual positioning formatting 1653 (#1501). 1654- [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into 1655 equivalent SVG paths (#1500, #1508). 1656- [Snippets] Added name-viewer.ipynb Jupyter notebook. 1657 1658 16593.37.3 (released 2019-02-05) 1660---------------------------- 1661 1662- The previous release accidentally changed several files from Unix to DOS 1663 line-endings. Fix that. 1664 16653.37.2 (released 2019-02-05) 1666---------------------------- 1667 1668- [varLib] Temporarily revert the fix to ``load_masters()``, which caused a 1669 crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs. 1670 16713.37.1 (released 2019-02-05) 1672---------------------------- 1673 1674- [varLib] ``load_masters()`` now actually assigns the fonts it loads to the 1675 source.font attributes. 1676- [varLib] Fixed an MVAR table generation crash when sparse masters were 1677 involved. 1678- [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum. 1679- [feaLib] A MarkClassDefinition inside a block is no longer doubly indented 1680 compared to the rest of the block. 1681 16823.37.0 (released 2019-01-28) 1683---------------------------- 1684 1685- [svgLib] Added support for converting elliptical arcs to cubic bezier curves 1686 (#1464). 1687- [py23] Added backport for ``math.isfinite``. 1688- [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute 1689 ``hidden=1``. 1690- Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7. 1691- [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS. 1692 Accept COMPONENT glyph type. 1693- [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2 1694 format A (#1459). Round-trip ``useExtension`` keyword. Implemented 1695 ``ValueRecord.asFea`` method. 1696- [subset] Insert empty widths into hdmx when retaining gids (#1458). 1697 16983.36.0 (released 2019-01-17) 1699---------------------------- 1700 1701- [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's 1702 ``head.modified`` timestamp (#1455, #46). 1703- [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table 1704 with ttx (#1451, #1452, #1456). 1705- [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past 1706 the ``END`` operator in .vtp file (#1453). 1707- [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness 1708 and post.underlinePosition when generating MVAR deltas (#1449, 1709 googlei18n/ufo2ft#308). 1710- [subset] Added ``--retain-gids`` option to subset font without modifying the 1711 current glyph indices (#1443, #1447). 1712- [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new 1713 equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required. 1714- [varLib] Allow loading masters from TTX files as well (#1441). 1715 17163.35.2 (released 2019-01-14) 1717---------------------------- 1718 1719- [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even 1720 without the corresponding (required) metrics header tables, ``hhea`` and 1721 ``vhea`` (#1439). 1722- [varLib] Added support for localized axes' ``labelname`` and named instances' 1723 ``stylename`` (#1438). 1724 17253.35.1 (released 2019-01-09) 1726---------------------------- 1727 1728- [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation. 1729 17303.35.0 (released 2019-01-07) 1731---------------------------- 1732 1733- [psCharStrings] In ``encodeFloat`` function, use float's "general format" with 1734 8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around 1735 a macOS rendering issue when real numbers in CFF table are too long, and 1736 also makes sure that floats are encoded with the same precision in python 2.7 1737 and 3.x (#1430, googlei18n/ufo2ft#306). 1738- [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add 1739 Macintosh (platformID=1) names by default. Added options to ``FontBuilder`` 1740 ``setupNameTable`` method to optionally disable Macintosh or Windows names. 1741 (#1359, #1431). 1742- [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object, 1743 instead of a designspace file path. The caller can now set the ``font`` 1744 attribute of designspace's sources to a TTFont object, thus allowing to 1745 skip filenames manipulation altogether (#1416, #1425). 1746- [sfnt] Allow SFNTReader objects to be deep-copied. 1747- Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423). 1748- [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were 1749 not accepted (#1421). 1750- [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411). 1751- [varLib] The default STAT table version is now set to 1.1, to improve 1752 compatibility with legacy applications (#1413). 1753 17543.34.2 (released 2018-12-17) 1755---------------------------- 1756 1757- [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have 1758 a DefaultLangSys record (#1408, 135a4a1). 1759 17603.34.1 (released 2018-12-17) 1761---------------------------- 1762 1763- [varLib] Work around macOS rendering issue for composites without gvar entry (#1381). 1764 17653.34.0 (released 2018-12-14) 1766---------------------------- 1767 1768- [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()`` 1769 now supports arbitrary mapping. Fix handling of overlapping ranges for feature 1770 variations (#1400). 1771- [cffLib, subset] Code clean-up and fixing related to CFF2 support. 1772- [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389). 1773- [fontbuilder] Initial support for building CFF2 fonts. Set CFF's 1774 ``FontMatrix`` automatically from unitsPerEm. 1775- [plistLib] Accept the more general ``collections.Mapping`` instead of the 1776 specific ``dict`` class to support custom data classes that should serialize 1777 to dictionaries. 1778 17793.33.0 (released 2018-11-30) 1780---------------------------- 1781- [subset] subsetter bug fix with variable fonts. 1782- [varLib.featureVar] Improve FeatureVariations generation with many rules. 1783- [varLib] Enable sparse masters when building variable fonts: 1784 https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368 1785- [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an 1786 instance. 1787- [ttLib] Ignore the length of kern table subtable format 0 1788 17893.32.0 (released 2018-11-01) 1790---------------------------- 1791 1792- [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins 1793 for shared methods (#1344). 1794- [featureVars] Fixed normalization error when a condition's minimum/maximum 1795 attributes are missing in designspace ``<rule>`` (#1366). 1796- [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``, 1797 needed to use the ``fonTools.varLib.plot`` module. 1798- [varLib] Take total bounding box into account when resolving model (7ee81c8). 1799 If multiple axes have the same range ratio, cut across both (62003f4). 1800- [subset] Don't error if ``STAT`` has no ``AxisValue`` tables. 1801- [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper 1802 class around ``TTFont`` that makes it easier to create a working TTF or OTF 1803 font from scratch with code. NOTE: the API is still experimental and may 1804 change in future versions. 1805 18063.31.0 (released 2018-10-21) 1807---------------------------- 1808 1809- [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__ 1810 master branch into a new ``fontTools.ufoLib`` package (#1335, #1095). 1811 Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``. 1812 Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``. 1813 Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``. 1814 To use the new ``fontTools.ufoLib`` module you need to install fonttools 1815 with the ``[ufo]`` extra, or you can manually install the required additional 1816 dependencies (cf. README.rst). 1817- [morx] Support AAT action type to insert glyphs and clean up compilation 1818 of AAT action tables (4a1871f, 2011ccf). 1819- [subset] The ``--no-hinting`` on a CFF font now also drops the optional 1820 hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and 1821 ``ExpansionFactor`` (#1322). 1822- [subset] Include nameIDs referenced by STAT table (#1327). 1823- [loggingTools] Added ``msg=None`` argument to 1824 ``CapturingLogHandler.assertRegex`` (0245f2c). 1825- [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244). 1826- [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334). 1827 18283.30.0 (released 2018-09-18) 1829---------------------------- 1830 1831- [feaLib] Skip building noop class PairPos subtables when Coverage is NULL 1832 (#1318). 1833- [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of 1834 glyf table's contour points in the TTX dump. This is used in some 1835 implementations to specify a non-zero fill with overlapping contours (#1316). 1836- [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing 1837 VTT sources for ``cvar`` variation table (#1310). 1838- [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The 1839 ``fontTools.varLib.designspace`` module is now deprecated and will be removed 1840 in future versions. The presence of an explicit ``axes`` element is now 1841 required in order to build a variable font (#1224, #1313). 1842- [varLib] Implemented building GSUB FeatureVariations table from the ``rules`` 1843 element of DesignSpace document (#1240, #713, #1314). 1844- [subset] Added ``--no-layout-closure`` option to not expand the subset with 1845 the glyphs produced by OpenType layout features. Instead, OpenType features 1846 will be subset to only rules that are relevant to the otherwise-specified 1847 glyph set (#43, #1121). 1848 18493.29.1 (released 2018-09-10) 1850---------------------------- 1851 1852- [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the 1853 DFLT/non-dflt language systems (#1307). 1854- [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311). 1855- [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType 1856 layout scripts that will be preserved. By default all scripts are retained 1857 (``'*'``) (#1303). 1858 18593.29.0 (released 2018-07-26) 1860---------------------------- 1861 1862- [feaLib] In the OTL table builder, when the ``name`` table is excluded 1863 from the list of tables to be build, skip compiling ``featureNames`` blocks, 1864 as the records referenced in ``FeatureParams`` table don't exist (68951b7). 1865- [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail 1866 (05f95f0). 1867- [feaLib] Added support for explicit ``subtable;`` break statements in 1868 PairPos lookups; previously these were ignored (#1279, #1300, #1302). 1869- [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1, 1870 so that a subroutinizer can insert subroutine calls (#1301, 1871 https://github.com/googlei18n/ufo2ft/issues/266). 1872- [otTables] Added support for fixing offset overflow errors occurring inside 1873 ``MarkBasePos`` subtables (#1297). 1874- [subset] Write the default output file extension based on ``--flavor`` option, 1875 or the value of ``TTFont.sfntVersion`` (d7ac0ad). 1876- [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11 1877 (452c85e). 1878- [xmlWriter] Added context manager to XMLWriter class to autoclose file 1879 descriptor on exit (#1290). 1880- [psCharStrings] Optimize the charstring's bytecode by encoding as integers 1881 all float values that have no decimal portion (8d7774a). 1882- [ttFont] Fixed missing import of ``TTLibError`` exception (#1285). 1883- [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script 1884 (#1278, #1292). 1885 18863.28.0 (released 2018-06-19) 1887---------------------------- 1888 1889- [featureVars] Added experimental module to build ``FeatureVariations`` 1890 tables. Still needs to be hooked up to ``varLib.build`` (#1240). 1891- [fixedTools] Added ``otRound`` to round floats to nearest integer towards 1892 positive Infinity. This is now used where we deal with visual data like X/Y 1893 coordinates, advance widths/heights, variation deltas, and similar (#1274, 1894 #1248). 1895- [subset] Improved GSUB closure memoize algorithm. 1896- [varLib.models] Fixed regression in model resolution (180124, #1269). 1897- [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string 1898 (#1275). 1899- [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and 1900 ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values 1901 (#1276, #1264). 1902- [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler 1903 on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277). 1904 19053.27.1 (released 2018-06-11) 1906---------------------------- 1907 1908- [ttGlyphPen] Issue a warning and skip building non-existing components 1909 (https://github.com/googlei18n/fontmake/issues/411). 1910- [tests] Fixed issue running ttx_test.py from a tagged commit. 1911 19123.27.0 (released 2018-06-11) 1913---------------------------- 1914 1915- [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in 1916 designspace document. Bumped ``format`` attribute to ``4.0`` (previously, 1917 it was formatted as an integer). Removed ``checkDefault``, ``checkAxes`` 1918 methods, and any kind of guessing about the axes when the ``<axes>`` element 1919 is missing. The default master is expected at the intersection of all default 1920 values for each axis (#1254, #1255, #1267). 1921- [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the 1922 font has an FDArray (#1211, #1271). 1923- [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not 1924 present, as is the case for CFF2 fonts. 1925- [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that 1926 sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy. 1927- [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or 1928 ``cmap`` are missing. 1929- [ttFont] Added ``__len__`` method to ``_TTGlyphSet``. 1930- [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230). 1931- [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``. 1932- [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12). 1933- [ttx] Impoved test coverage (#1261). 1934- [Snippets] Addded script to append a suffix to all family names in a font. 1935- [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b). 1936 19373.26.0 (released 2018-05-03) 1938---------------------------- 1939 1940- [designspace] Added a new optional ``layer`` attribute to the source element, 1941 and a corresponding ``layerName`` attribute to the ``SourceDescriptor`` 1942 object (#1253). 1943 Added ``conditionset`` element to the ``rule`` element to the spec, but not 1944 implemented in designspace reader/writer yet (#1254). 1945- [varLib.models] Refine modeling one last time (0ecf5c5). 1946- [otBase] Fixed sharing of tables referred to by different offset sizes 1947 (795f2f9). 1948- [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None 1949 empty Coverage tables in MarkGlyphSets (02616ab). 1950- [varLib]: Added ``--master-finder`` command-line option (#1249). 1951- [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245). 1952- [otTables] Allow decompiling bad ClassDef tables with invalid format, with 1953 warning (#1236). 1954- [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242). 1955- [varLib.plot] Show master locations. Set axis limits to -1, +1. 1956- [subset] Handle HVAR direct mapping. Passthrough 'cvar'. 1957 Added ``--font-number`` command-line option for collections. 1958- [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font 1959 (#1234). Added ``kind`` argument to T1Font constructor (c5c161c). 1960- [ttLib] Added context manager API to ``TTFont`` class, so it can be used in 1961 ``with`` statements to auto-close the file when exiting the context (#1232). 1962 19633.25.0 (released 2018-04-03) 1964---------------------------- 1965 1966- [varLib] Improved support-resolution algorithm. Previously, the on-axis 1967 masters would always cut the space. They don't anymore. That's more 1968 consistent, and fixes the main issue Erik showed at TYPO Labs 2017. 1969 Any varfont built that had an unusual master configuration will change 1970 when rebuilt (42bef17, a523a697, 1971 https://github.com/googlei18n/fontmake/issues/264). 1972- [varLib.models] Added a ``main()`` entry point, that takes positions and 1973 prints model results. 1974- [varLib.plot] Added new module to plot a designspace's 1975 VariationModel. Requires ``matplotlib``. 1976- [varLib.mutator] Added -o option to specify output file path (2ef60fa). 1977- [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a). 1978- [varLib.models] Convert delta array to floats if values overflows signed 1979 short integer (0055f94). 1980 19813.24.2 (released 2018-03-26) 1982---------------------------- 1983 1984- [otBase] Don't fail during ``ValueRecord`` copy if src has more items. 1985 We drop hinting in the subsetter by simply changing ValueFormat, without 1986 cleaning up the actual ValueRecords. This was causing assertion error if 1987 a variable font was subsetted without hinting and then passed directly to 1988 the mutator for instantiation without first it saving to disk. 1989 19903.24.1 (released 2018-03-06) 1991---------------------------- 1992 1993- [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer 1994 (#1206). 1995- [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script, 1996 and a ``optimize=True`` keyword argument to ``varLib.build`` function, 1997 to optionally disable IUP optimization while building varfonts. 1998- [ttCollection] Fixed issue while decompiling ttc with python3 (#1207). 1999 20003.24.0 (released 2018-03-01) 2001---------------------------- 2002 2003- [ttGlyphPen] Decompose composite glyphs if any components' transform is too 2004 large to fit a ``F2Dot14`` value, or clamp transform values that are 2005 (almost) equal to +2.0 to make them fit and avoid decomposing (#1200, 2006 #1204, #1205). 2007- [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table 2008 splitted as individual ttx files (#153, #1035, #1132, #1202). 2009- Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used 2010 for the ttx split-glyphs option (#1202). 2011- [feaLib] Added support for ``cvParameters`` blocks in Character Variant 2012 feautures ``cv01-cv99`` (#860, #1169). 2013- [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of 2014 ttx files (#1197). 2015- [varLib.mutator] Fixed issue while instantiating some variable fonts 2016 whereby the horizontal advance width computed from ``gvar`` phantom points 2017 could turn up to be negative (#1198). 2018- [varLib/subset] Fixed issue with subsetting GPOS variation data not 2019 picking up ``ValueRecord`` ``Device`` objects (54fd71f). 2020- [feaLib/voltLib] In all AST elements, the ``location`` is no longer a 2021 required positional argument, but an optional kewyord argument (defaults 2022 to ``None``). This will make it easier to construct feature AST from 2023 code (#1201). 2024 2025 20263.23.0 (released 2018-02-26) 2027---------------------------- 2028 2029- [designspaceLib] Added an optional ``lib`` element to the designspace as a 2030 whole, as well as to the instance elements, to store arbitrary data in a 2031 property list dictionary, similar to the UFO's ``lib``. Added an optional 2032 ``font`` attribute to the ``SourceDescriptor``, to allow operating on 2033 in-memory font objects (#1175). 2034- [cffLib] Fixed issue with lazy-loading of attributes when attempting to 2035 set the CFF TopDict.Encoding (#1177, #1187). 2036- [ttx] Fixed regression introduced in 3.22.0 that affected the split tables 2037 ``-s`` option (#1188). 2038- [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised 2039 when an included feature file cannot be found (#1186). 2040- [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of 2041 glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes 2042 can still be imported (21cbab8, 38a0ffb). 2043- [varLib] Implemented VarStore optimizer (#1184). 2044- [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179). 2045- [sfnt] Restore backward compatiblity with ``numFonts`` attribute of 2046 ``SFNTReader`` object (#1181). 2047- [merge] Initial support for merging ``LangSysRecords`` (#1180). 2048- [ttCollection] don't seek(0) when writing to possibly unseekable strems. 2049- [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114). 2050- [cffLib] Added ``width`` module to calculate optimal CFF default and 2051 nominal glyph widths. 2052- [varLib] Don’t fail if STAT already in the master fonts (#1166). 2053 20543.22.0 (released 2018-02-04) 2055---------------------------- 2056 2057- [subset] Support subsetting ``endchar`` acting as ``seac``-like components 2058 in ``CFF`` (fixes #1162). 2059- [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object. 2060 Added ``tables`` argument to only build some tables instead of all (#1159, 2061 #1163). 2062- [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139). 2063- [feaLib] Added option to the parser to not resolve ``include`` statements 2064 (#1154). 2065- [ttLib] Added new ``ttCollection`` module to read/write TrueType and 2066 OpenType Collections. Exports a ``TTCollection`` class with a ``fonts`` 2067 attribute containing a list of ``TTFont`` instances, the methods ``save`` 2068 and ``saveXML``, plus some list-like methods. The ``importXML`` method is 2069 not implemented yet (#17). 2070- [unicodeadata] Added ``ot_tag_to_script`` function that converts from 2071 OpenType script tag to Unicode script code. 2072- Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's 2073 ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument 2074 NOTE: this is not yet used internally by varLib, and the API may be subject 2075 to changes (#911, #1110, LettError/designSpaceDocument#28). 2076- Added new FontTools icon images (8ee7c32). 2077- [unicodedata] Added ``script_horizontal_direction`` function that returns 2078 either "LTR" or "RTL" given a unicode script code. 2079- [otConverters] Don't write descriptive name string as XML comment if the 2080 NameID value is 0 (== NULL) (#1151, #1152). 2081- [unicodedata] Add ``ot_tags_from_script`` function to get the list of 2082 OpenType script tags associated with unicode script code (#1150). 2083- [feaLib] Don't error when "enumerated" kern pairs conflict with preceding 2084 single pairs; emit warning and chose the first value (#1147, #1148). 2085- [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the 2086 fully formatted log message. 2087- [sbix] Fixed TypeError when concatenating str and bytes (#1154). 2088- [bezierTools] Implemented cusp support and removed ``approximate_fallback`` 2089 arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142). 2090 20913.21.2 (released 2018-01-08) 2092---------------------------- 2093 2094- [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125). 2095 20963.21.1 (released 2018-01-03) 2097---------------------------- 2098 2099- [feaLib] Allow mixed single/multiple substitutions (#612) 2100- Added missing ``*.afm`` test assets to MAINFEST.in (#1137). 2101- Fixed dumping ``SVG`` tables containing color palettes (#1124). 2102 21033.21.0 (released 2017-12-18) 2104---------------------------- 2105 2106- [cmap] when compiling format6 subtable, don't assume gid0 is always called 2107 '.notdef' (1e42224). 2108- [ot] Allow decompiling fonts with bad Coverage format number (1aafae8). 2109- Change FontTools licence to MIT (#1127). 2110- [post] Prune extra names already in standard Mac set (df1e8c7). 2111- [subset] Delete empty SubrsIndex after subsetting (#994, #1118). 2112- [varLib] Don't share points in cvar by default, as it currently fails on 2113 some browsers (#1113). 2114- [afmLib] Make poor old afmLib work on python3. 2115 21163.20.1 (released 2017-11-22) 2117---------------------------- 2118 2119- [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions 2120 returning inconsistent short vs long names. They both return the short four- 2121 letter script codes now. Added ``script_name`` and ``script_code`` functions 2122 to look up the long human-readable script name from the script code, and 2123 viceversa (#1109, #1111). 2124 21253.20.0 (released 2017-11-21) 2126---------------------------- 2127 2128- [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the 2129 same interface as the built-in ``unicodedata`` module, with the addition of 2130 a few functions that are missing from the latter, such as ``script``, 2131 ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script 2132 to download and parse data files from the Unicode Character Database and 2133 generate python modules containing lists of ranges and property values. 2134- [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the 2135 ``asFea`` method). 2136- [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable 2137 instead of ``glyphMap`` dict. The latter still works but with a pending 2138 deprecation warning (#1104). 2139- [bezierTools] Added arc length calculation functions originally from 2140 ``pens.perimeterPen`` module (#1101). 2141- [varLib] Started generating STAT table (8af4309). Right now it just reflects 2142 the axes, and even that with certain limitations: 2143 * AxisOrdering is set to the order axes are defined, 2144 * Name-table entries are not shared with fvar. 2145- [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr`` 2146 context managers (#1097). 2147- [Graphite] Fixed some round-trip bugs (#1093). 2148 21493.19.0 (released 2017-11-06) 2150---------------------------- 2151 2152- [varLib] Try set of used points instead of all points when testing whether to 2153 share points between tuples (#1090). 2154- [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file. 2155 Read the commit message 8b02b5a and issue #1030 for more details. 2156 NOTE: this change invalidates all the TTX files containing CFF2 tables 2157 that where dumped with previous verisons of fonttools. 2158 CFF2 Subr items can have values on the stack after the last operator, thus 2159 a ``CFF2Subr`` class was added to accommodate this (#1091). 2160- [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094) 2161- [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table 2162 class that returns a preferred Unicode cmap subtable given a list of options 2163 (#1092). 2164- [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction 2165 21663.18.0 (released 2017-10-30) 2167---------------------------- 2168 2169- [feaLib] Fixed writing back nested glyph classes (#1086). 2170- [TupleVariation] Reactivated shared points logic, bugfixes (#1009). 2171- [AAT] Implemented ``morx`` ligature subtables (#1082). 2172- [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080, 2173 https://github.com/googlei18n/cu2qu/issues/51). 2174- [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079). 2175- [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in 2176 old versions of python 2.7 (#993). 2177 21783.17.0 (released 2017-10-16) 2179---------------------------- 2180 2181- [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands 2182 into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen`` 2183 https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py 2184- [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws 2185 contours with the winding direction reversed, while keeping the starting 2186 point (#1071). 2187- [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole 2188 rather than segment by segment. 2189- [arrayTools] Added ``Vector`` class to apply math operations on an array 2190 of numbers, and ``pairwise`` function to loop over pairs of items in an 2191 iterable. 2192- [varLib] Added support for building and interpolation of ``cvar`` table 2193 (f874cf6, a25a401). 2194 21953.16.0 (released 2017-10-03) 2196---------------------------- 2197 2198- [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting 2199 the ``head`` modified timestamp to ensure reproducible builds (#1063). 2200 See https://reproducible-builds.org/specs/source-date-epoch/ 2201- [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060). 2202- Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill. 2203 Thanks @mhosken! (#1054). 2204- [varLib] Default to using axis "name" attribute if "labelname" element 2205 is missing (588f524). 2206- [merge] Added support for merging Script records. Remove unused features 2207 and lookups after merge (d802580, 556508b). 2208- Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that 2209 supports the Pen protocol (#1051). Also, added a snippet to convert SVG 2210 outlines to UFO GLIF (#1053). 2211- [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``, 2212 and ``cidg``. 2213- [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``. 2214 22153.15.1 (released 2017-08-18) 2216---------------------------- 2217 2218- [otConverters] Implemented ``__add__`` and ``__radd__`` methods on 2219 ``otConverters._LazyList`` that decompile a lazy list before adding 2220 it to another list or ``_LazyList`` instance. Fixes an ``AttributeError`` 2221 in the ``subset`` module when attempting to sum ``_LazyList`` objects 2222 (6ef48bd2, 1aef1683). 2223- [AAT] Support the `opbd` table with optical bounds (a47f6588). 2224- [AAT] Support `prop` table with glyph properties (d05617b4). 2225 2226 22273.15.0 (released 2017-08-17) 2228---------------------------- 2229 2230- [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled 2231 and recompiled; futher work needed to handle ``morx`` table (#1025). 2232- [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5). 2233- [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b). 2234- [varLib] In ``models.supportScalars``, ignore an axis when its peak value 2235 is 0 (fixes #1020). 2236- [varLib] Add default mappings to all axes in avar to fix rendering issue 2237 in some rasterizers (19c4b377, 04eacf13). 2238- [varLib] Flatten multiple tail PairPosFormat2 subtables before merging 2239 (c55ef525). 2240- [ttLib] Added support for recalculating font bounding box in ``CFF`` and 2241 ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970). 2242 22433.14.0 (released 2017-07-31) 2244---------------------------- 2245 2246- [varLib.merger] Remove Extensions subtables before merging (f7c20cf8). 2247- [varLib] Initialize the avar segment map with required default entries 2248 (#1014). 2249- [varLib] Implemented optimal IUP optmiziation (#1019). 2250- [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2 2251 (#1015). 2252- [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'. 2253- [subset] Return value from ``_DehintingT2Decompiler.op_hintmask`` 2254 (c0d672ba). 2255- [cffLib] Allow to get TopDict by index as well as by name (dca96c9c). 2256- [cffLib] Removed global ``isCFF2`` state; use one set of classes for 2257 both CFF and CFF2, maintaining backward compatibility existing code (#1007). 2258- [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1. 2259- [cffLib] Added missing default (-100) for UnderlinePosition (#983). 2260- [feaLib] Enable setting nameIDs greater than 255 (#1003). 2261- [varLib] Recalculate ValueFormat when merging SinglePos (#996). 2262- [varLib] Do not emit MVAR if there are no entries in the variation store 2263 (#987). 2264- [ttx] For ``-x`` option, pad with space if table tag length is < 4. 2265 22663.13.1 (released 2017-05-30) 2267---------------------------- 2268 2269- [feaLib.builder] Removed duplicate lookups optimization. The original 2270 lookup order and semantics of the feature file are preserved (#976). 2271 22723.13.0 (released 2017-05-24) 2273---------------------------- 2274 2275- [varLib.mutator] Implement IUP optimization (#969). 2276- [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those 2277 of other iterables (e46f949). Removed ``__abs__()`` (3db5be2). 2278- [varLib.interpolate_layout] Added ``mapped`` keyword argument to 2279 ``interpolate_layout`` to allow disabling avar mapping: if False (default), 2280 the location is mapped using the map element of the axes in designspace file; 2281 if True, it is assumed that location is in designspace's internal space and 2282 no mapping is performed (#950, #975). 2283- [varLib.interpolate_layout] Import designspace-loading logic from varLib. 2284- [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914). 2285- [cffLib.specializer] When copying iterables, cast to list (462b7f86). 2286 22873.12.1 (released 2017-05-18) 2288---------------------------- 2289 2290- [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in 2291 T2CharStringPen (#965). 2292 22933.12.0 (released 2017-05-17) 2294---------------------------- 2295 2296- [cffLib.specializer] Added new ``specializer`` module to optimize CFF 2297 charstrings, used by the T2CharStringPen (#948). 2298- [varLib.mutator] Sort glyphs by component depth before calculating composite 2299 glyphs' bounding boxes to ensure deltas are correctly caclulated (#945). 2300- [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double) 2301 instead of 'f' (float) as ``array.array`` typecode (#963, #964). 2302 23033.11.0 (released 2017-05-03) 2304---------------------------- 2305 2306- [t2CharStringPen] Initial support for specialized Type2 path operators: 2307 vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and 2308 hvcurveto. This should produce more compact charstrings (#940, #403). 2309- [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935). 2310- [fvar] Expose flags in XML (#932) 2311- [name] Add helper function for building multi-lingual names (#921) 2312- [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs 2313 that are NOT present in the Coverage (1b5e1c4, #939). 2314- [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927). 2315- [feLib] Throw an error when the same glyph is defined in multiple mark 2316 classes within the same lookup (3e3ff00, #453). 2317 23183.10.0 (released 2017-04-14) 2319---------------------------- 2320 2321- [varLib] Added support for building ``avar`` table, using the designspace 2322 ``<map>`` elements. 2323- [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should 2324 be specified in designspace file now. We do not accept nonstandard axes 2325 if ``<axes>`` element is not present. 2326- [varLib] Removed "custom" axis from the ``standard_axis_map``. This was 2327 added before when glyphsLib was always exporting the (unused) custom axis. 2328- [varLib] Added partial support for building ``MVAR`` table; does not 2329 implement ``gasp`` table variations yet. 2330- [pens] Added FilterPen base class, for pens that control another pen; 2331 factored out ``addComponent`` method from BasePen into a separate abstract 2332 DecomposingPen class; added DecomposingRecordingPen, which records 2333 components decomposed as regular contours. 2334- [TSI1] Fixed computation of the textLength of VTT private tables (#913). 2335- [loggingTools] Added ``LogMixin`` class providing a ``log`` property to 2336 subclasses, which returns a ``logging.Logger`` named after the latter. 2337- [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``. 2338- [py23] Added backport for python 3's ``types.SimpleNamespace`` class. 2339- [EBLC] Fixed issue with python 3 ``zip`` iterator. 2340 23413.9.2 (released 2017-04-08) 2342--------------------------- 2343 2344- [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class: 2345 https://wxpython.org/docs/api/wx.GraphicsPath-class.html 2346- [varLib.merger] Fixed issue with recombining multiple PairPosFormat2 2347 subtables (#888) 2348- [varLib] Do not encode gvar deltas that are all zeroes, or if all values 2349 are smaller than tolerance. 2350- [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top 2351 side bearing) attributes from the ``vmtx`` table, if present. 2352- [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__`` 2353 methods, and ``array`` property to get raw array. 2354- [ttx] Support reading TTX files with BOM (#896) 2355- [CFF2] Fixed the reporting of the number of regions in the font. 2356 23573.9.1 (released 2017-03-20) 2358--------------------------- 2359 2360- [varLib.merger] Fixed issue while recombining multiple PairPosFormat2 2361 subtables if they were split because of offset overflows (9798c30). 2362- [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is 2363 at least one of the fonts with a non-empty Format1 subtable (0f5a46b). 2364- [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2 2365 (aad0d46). 2366- [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3). 2367- [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging 2368 PairPosFormat2 (23511fd). 2369- [macUtils] Added missing ttLib import (b05f203). 2370 23713.9.0 (released 2017-03-13) 2372--------------------------- 2373 2374- [feaLib] Added (partial) support for parsing feature file comments ``# ...`` 2375 appearing in between statements (#879). 2376- [feaLib] Cleaned up syntax tree for FeatureNames. 2377- [ttLib] Added support for reading/writing ``CFF2`` table (thanks to 2378 @readroberts at Adobe), and ``TTFA`` (ttfautohint) table. 2379- [varLib] Fixed regression introduced with 3.8.0 in the calculation of 2380 ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets 2381 that use a 16-bit representation (b2825ff). 2382 23833.8.0 (released 2017-03-05) 2384--------------------------- 2385 2386- New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen. 2387- [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font 2388 statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html) 2389- [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for 2390 finding wrong contour order between different masters 2391- [varLib] designspace.load() now returns a dictionary, instead of a tuple, 2392 and supports <axes> element (#864); the 'masters' item was renamed 'sources', 2393 like the <sources> element in the designspace document 2394- [ttLib] Fixed issue with recalculating ``head`` modified timestamp when 2395 saving CFF fonts 2396- [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592) 2397- [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and 2398 MarkAttachmentType (#863) 2399- [merge] Changed the ``gasp`` table merge logic so that only the one from 2400 the first font is retained, similar to other hinting tables (#862) 2401- [Tests] Added tests for the ``varLib`` package, as well as test fonts 2402 from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s 2403 table readers/writers (<https://github.com/adobe-type-tools/aots>) 2404 24053.7.2 (released 2017-02-17) 2406--------------------------- 2407 2408- [subset] Keep advance widths when stripping ".notdef" glyph outline in 2409 CID-keyed CFF fonts (#845) 2410- [feaLib] Zero values now produce the same results as makeotf (#633, #848) 2411- [feaLib] More compact encoding for “Contextual positioning with in-line 2412 single positioning rules” (#514) 2413 24143.7.1 (released 2017-02-15) 2415--------------------------- 2416 2417- [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in 2418 Type 2 charstrings were also being stripped (#709, #343) 2419- [feaLib] include statements now resolve relative paths like makeotf (#838) 2420- [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic 2421 Multilingual Plane, also supports old-style MacOS platform encodings (#842) 2422- [feaLib] correctly escape string literals when emitting feature syntax (#780) 2423 24243.7.0 (released 2017-02-11) 2425--------------------------- 2426 2427- [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833). 2428- [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559). 2429- [feaLib] feaLib.Parser now needs the font's glyph map for parsing. 2430- [varLib] Fix regression where GPOS values were stored as 0. 2431- [varLib] Allow merging of class-based kerning when ClassDefs are different 2432 24333.6.3 (released 2017-02-06) 2434--------------------------- 2435 2436- [varLib] Fix building variation of PairPosFormat2 (b5c34ce). 2437- Populate defaults even for otTables that have postRead (e45297b). 2438- Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860). 2439 24403.6.2 (released 2017-01-30) 2441--------------------------- 2442 2443- [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no 2444 initial value" (3717dc6). 2445 24463.6.1 (released 2017-01-28) 2447--------------------------- 2448 2449- [py23] Fixed unhandled exception occurring at interpreter shutdown in 2450 the "last resort" logging handler (972b3e6). 2451- [agl] Ensure all glyph names are of native 'str' type; avoid mixing 2452 'str' and 'unicode' in TTFont.glyphOrder (d8c4058). 2453- Fixed inconsistent title levels in README.rst that caused PyPI to 2454 incorrectly render the reStructuredText page. 2455 24563.6.0 (released 2017-01-26) 2457--------------------------- 2458 2459- [varLib] Refactored and improved the variation-font-building process. 2460- Assembly code in the fpgm, prep, and glyf tables is now indented in 2461 XML output for improved readability. The ``instruction`` element is 2462 written as a simple tag if empty (#819). 2463- [ttx] Fixed 'I/O operation on closed file' error when dumping 2464 multiple TTXs to standard output with the '-o -' option. 2465- The unit test modules (``*_test.py``) have been moved outside of the 2466 fontTools package to the Tests folder, thus they are no longer 2467 installed (#811). 2468 24693.5.0 (released 2017-01-14) 2470--------------------------- 2471 2472- Font tables read from XML can now be written back to XML with no 2473 loss. 2474- GSUB/GPOS LookupType is written out in XML as an element, not 2475 comment. (#792) 2476- When parsing cmap table, do not store items mapped to glyph id 0. 2477 (#790) 2478- [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2) 2479- [mtiLib] Added unit tests (#787) 2480- [cvar] Implemented cvar table 2481- [gvar] Renamed GlyphVariation to TupleVariation to match OpenType 2482 terminology. 2483- [otTables] Handle gracefully empty VarData.Item array when compiling 2484 XML. (#797) 2485- [varLib] Re-enabled generation of ``HVAR`` table for fonts with 2486 TrueType outlines; removed ``--build-HVAR`` command-line option. 2487- [feaLib] The parser can now be extended to support non-standard 2488 statements in FEA code by using a customized Abstract Syntax Tree. 2489 See, for example, ``feaLib.builder_test.test_extensions`` and 2490 baseClass.feax (#794, fixes #773). 2491- [feaLib] Added ``feaLib`` command to the 'fonttools' command-line 2492 tool; applies a feature file to a font. ``fonttools feaLib -h`` for 2493 help. 2494- [pens] The ``T2CharStringPen`` now takes an optional 2495 ``roundTolerance`` argument to control the rounding of coordinates 2496 (#804, fixes #769). 2497- [ci] Measure test coverage on all supported python versions and OSes, 2498 combine coverage data and upload to 2499 https://codecov.io/gh/fonttools/fonttools (#786) 2500- [ci] Configured Travis and Appveyor for running tests on Python 3.6 2501 (#785, 55c03bc) 2502- The manual pages installation directory can be customized through 2503 ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84). 2504- [Snippets] Added otf2ttf.py, for converting fonts from CFF to 2505 TrueType using the googlei18n/cu2qu module (#802) 2506 25073.4.0 (released 2016-12-21) 2508--------------------------- 2509 2510- [feaLib] Added support for generating FEA text from abstract syntax 2511 tree (AST) objects (#776). Thanks @mhosken 2512- Added ``agl.toUnicode`` function to convert AGL-compliant glyph names 2513 to Unicode strings (#774) 2514- Implemented MVAR table (b4d5381) 2515 25163.3.1 (released 2016-12-15) 2517--------------------------- 2518 2519- [setup] We no longer use versioneer.py to compute fonttools version 2520 from git metadata, as this has caused issues for some users (#767). 2521 Now we bump the version strings manually with a custom ``release`` 2522 command of setup.py script. 2523 25243.3.0 (released 2016-12-06) 2525--------------------------- 2526 2527- [ttLib] Implemented STAT table from OpenType 1.8 (#758) 2528- [cffLib] Fixed decompilation of CFF fonts containing non-standard 2529 key/value pairs in FontDict (issue #740; PR #744) 2530- [py23] minor: in ``round3`` function, allow the second argument to be 2531 ``None`` (#757) 2532- The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated 2533 since vesion 3.2.0, have been removed. They can be imported from the 2534 ``fontTools.misc`` package. 2535 25363.2.3 (released 2016-12-02) 2537--------------------------- 2538 2539- [py23] optimized performance of round3 function; added backport for 2540 py35 math.isclose() (9d8dacb) 2541- [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and 2542 ``--text``/``--text-file`` options containing non-BMP chararcters 2543 (16d0e5e) 2544- [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749) 2545- [inspect] Made it compatible with both python2 and python3 (167ee60, 2546 #748). Thanks @pnemade 2547 25483.2.2 (released 2016-11-24) 2549--------------------------- 2550 2551- [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms 2552- [varLib] Handle fonts without GPOS (7915a45) 2553- [merge] Ignore LangSys if None (a11bc56) 2554- [subset] Fix subsetting MathVariants (78d3cbe) 2555- [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow 2556 25573.2.1 (released 2016-11-03) 2558--------------------------- 2559 2560- [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle`` 2561 bits 2562- [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for 2563 fonts with TrueType outlines. For ``CFF2``, it is enabled by default. 2564 25653.2.0 (released 2016-11-02) 2566--------------------------- 2567 2568- [varLib] Improve support for OpenType 1.8 Variable Fonts: 2569- Implement GDEF's VariationStore 2570- Implement HVAR/VVAR tables 2571- Partial support for loading MutatorMath .designspace files with 2572 varLib.designspace module 2573- Add varLib.models with Variation fonts interpolation models 2574- Implement GSUB/GPOS FeatureVariations 2575- Initial support for interpolating and merging OpenType Layout tables 2576 (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules) 2577- [API change] Change version to be an integer instead of a float in 2578 XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat, 2579 hhea and vhea tables. Scripts that set the Version for those to 1.0 2580 or other float values also need fixing. A warning is emitted when 2581 code or XML needs fix. 2582- several bug fixes to the cffLib module, contributed by Adobe's 2583 @readroberts 2584- The XML output for CFF table now has a 'major' and 'minor' elements 2585 for specifying whether it's version 1.0 or 2.0 (support for CFF2 is 2586 coming soon) 2587- [setup.py] remove undocumented/deprecated ``extra_path`` Distutils 2588 argument. This means that we no longer create a "FontTools" subfolder 2589 in site-packages containing the actual fontTools package, as well as 2590 the standalone xmlWriter and sstruct modules. The latter modules are 2591 also deprecated, and scheduled for removal in upcoming releases. 2592 Please change your import statements to point to from fontTools.misc 2593 import xmlWriter and from fontTools.misc import sstruct. 2594- [scripts] Add a 'fonttools' command-line tool that simply runs 2595 ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``, 2596 ``fonttools subset``, etc. 2597- [hmtx/vmts] Read advance width/heights as unsigned short (uint16); 2598 automatically round float values to integers. 2599- [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to 2600 ``TTFont.saveXML`` for overriding os-specific line endings (passed on 2601 to ``XMLWriter`` instances). 2602- [versioning] Use versioneer instead of ``setuptools_scm`` to 2603 dynamically load version info from a git checkout at import time. 2604- [feaLib] Support backslash-prefixed glyph names. 2605 26063.1.2 (released 2016-09-27) 2607--------------------------- 2608 2609- restore Makefile as an alternative way to build/check/install 2610- README.md: update instructions for installing package from source, 2611 and for running test suite 2612- NEWS: Change log was out of sync with tagged release 2613 26143.1.1 (released 2016-09-27) 2615--------------------------- 2616 2617- Fix ``ttLibVersion`` attribute in TTX files still showing '3.0' 2618 instead of '3.1'. 2619- Use ``setuptools_scm`` to manage package versions. 2620 26213.1.0 (released 2016-09-26) 2622--------------------------- 2623 2624- [feaLib] New library to parse and compile Adobe FDK OpenType Feature 2625 files. 2626- [mtiLib] New library to parse and compile Monotype 'FontDame' 2627 OpenType Layout Tables files. 2628- [voltLib] New library to parse Microsoft VOLT project files. 2629- [otlLib] New library to work with OpenType Layout tables. 2630- [varLib] New library to work with OpenType Font Variations. 2631- [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen 2632 to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen. 2633- [ttLib.tables] Implement 'meta' and 'trak' tables. 2634- [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add 2635 ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts. 2636- [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color 2637 fonts tables, and 'gvar' table for variation fonts. 2638- [Snippets] Add ``symfont.py``, for symbolic font statistics analysis; 2639 interpolatable.py, a preliminary script for detecting interpolation 2640 errors; ``{merge,dump}_woff_metadata.py``. 2641- [classifyTools] Helpers to classify things into classes. 2642- [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis 2643 CI; check unit test coverage with Coverage.py/Coveralls; automatic 2644 deployment to PyPI on tags. 2645- [loggingTools] Use Python built-in logging module to print messages. 2646- [py23] Make round() behave like Python 3 built-in round(); define 2647 round2() and round3(). 2648 26493.0 (released 2015-09-01) 2650------------------------- 2651 2652- Add Snippet scripts for cmap subtable format conversion, printing 2653 GSUB/GPOS features, building a GX font from two masters 2654- TTX WOFF2 support and a ``-f`` option to overwrite output file(s) 2655- Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta`` 2656- Support ``feat`` and gzip-compressed SVG tables 2657- Upgrade Mac East Asian encodings to native implementation if 2658 available 2659- Add Roman Croatian and Romanian encodings, codecs for mac-extended 2660 East Asian encodings 2661- Implement optimal GLYF glyph outline packing; disabled by default 2662 26632.5 (released 2014-09-24) 2664------------------------- 2665 2666- Add a Qt pen 2667- Add VDMX table converter 2668- Load all OpenType sub-structures lazily 2669- Add support for cmap format 13. 2670- Add pyftmerge tool 2671- Update to Unicode 6.3.0d3 2672- Add pyftinspect tool 2673- Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT 2674 embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe) 2675- Add support for loading, saving and ttx'ing WOFF file format 2676- Add support for Microsoft COLR/CPAL layered color glyphs 2677- Support PyPy 2678- Support Jython, by replacing numpy with array/lists modules and 2679 removed it, pure-Python StringIO, not cStringIO 2680- Add pyftsubset and Subsetter object, supporting CFF and TTF 2681- Add to ttx args for -q for quiet mode, -z to choose a bitmap dump 2682 format 2683 26842.4 (released 2013-06-22) 2685------------------------- 2686 2687- Option to write to arbitrary files 2688- Better dump format for DSIG 2689- Better detection of OTF XML 2690- Fix issue with Apple's kern table format 2691- Fix mangling of TT glyph programs 2692- Fix issues related to mona.ttf 2693- Fix Windows Installer instructions 2694- Fix some modern MacOS issues 2695- Fix minor issues and typos 2696 26972.3 (released 2009-11-08) 2698------------------------- 2699 2700- TrueType Collection (TTC) support 2701- Python 2.6 support 2702- Update Unicode data to 5.2.0 2703- Couple of bug fixes 2704 27052.2 (released 2008-05-18) 2706------------------------- 2707 2708- ClearType support 2709- cmap format 1 support 2710- PFA font support 2711- Switched from Numeric to numpy 2712- Update Unicode data to 5.1.0 2713- Update AGLFN data to 1.6 2714- Many bug fixes 2715 27162.1 (released 2008-01-28) 2717------------------------- 2718 2719- Many years worth of fixes and features 2720 27212.0b2 (released 2002-??-??) 2722--------------------------- 2723 2724- Be "forgiving" when interpreting the maxp table version field: 2725 interpret any value as 1.0 if it's not 0.5. Fixes dumping of these 2726 GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf 2727- Fixed ttx -l: it turned out this part of the code didn't work with 2728 Python 2.2.1 and earlier. My bad to do most of my testing with a 2729 different version than I shipped TTX with :-( 2730- Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into 2731 this one). 2732 27332.0b1 (released 2002-09-10) 2734--------------------------- 2735 2736- Fixed embarrassing bug: the master checksum in the head table is now 2737 calculated correctly even on little-endian platforms (such as Intel). 2738- Made the cmap format 4 compiler smarter: the binary data it creates 2739 is now more or less as compact as possible. TTX now makes more 2740 compact data than in any shipping font I've tested it with. 2741- Dump glyph names as a separate "GlyphOrder" pseudo table as opposed 2742 to as part of the glyf table (obviously needed for CFF-OTF's). 2743- Added proper support for the CFF table. 2744- Don't barf on empty tables (questionable, but "there are font out 2745 there...") 2746- When writing TT glyf data, align glyphs on 4-byte boundaries. This 2747 seems to be the current recommendation by MS. Also: don't barf on 2748 fonts which are already 4-byte aligned. 2749- Windows installer contributed bu Adam Twardoch! Yay! 2750- Changed the command line interface again, now by creating one new 2751 tool replacing the old ones: ttx It dumps and compiles, depending on 2752 input file types. The options have changed somewhat. 2753- The -d option is back (output dir) 2754- ttcompile's -i options is now called -m (as in "merge"), to avoid 2755 clash with dump's -i. 2756- The -s option ("split tables") no longer creates a directory, but 2757 instead outputs a small .ttx file containing references to the 2758 individual table files. This is not a true link, it's a simple file 2759 name, and the referenced file should be in the same directory so 2760 ttcompile can find them. 2761- compile no longer accepts a directory as input argument. Instead it 2762 can parse the new "mini-ttx" format as output by "ttx -s". 2763- all arguments are input files 2764- Renamed the command line programs and moved them to the Tools 2765 subdirectory. They are now installed by the setup.py install script. 2766- Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost) 2767 fully supported. The XML output is not yet final, as I'm still 2768 considering to output certain subtables in a more human-friendly 2769 manner. 2770- Fixed 'kern' table to correctly accept subtables it doesn't know 2771 about, as well as interpreting Apple's definition of the 'kern' table 2772 headers correctly. 2773- Fixed bug where glyphnames were not calculated from 'cmap' if it was 2774 (one of the) first tables to be decompiled. More specifically: it 2775 cmap was the first to ask for a glyphID -> glyphName mapping. 2776- Switched XML parsers: use expat instead of xmlproc. Should be faster. 2777- Removed my UnicodeString object: I now require Python 2.0 or up, 2778 which has unicode support built in. 2779- Removed assert in glyf table: redundant data at the end of the table 2780 is now ignored instead of raising an error. Should become a warning. 2781- Fixed bug in hmtx/vmtx code that only occured if all advances were 2782 equal. 2783- Fixed subtle bug in TT instruction disassembler. 2784- Couple of fixes to the 'post' table. 2785- Updated OS/2 table to latest spec. 2786 27871.0b1 (released 2001-08-10) 2788--------------------------- 2789 2790- Reorganized the command line interface for ttDump.py and 2791 ttCompile.py, they now behave more like "normal" command line tool, 2792 in that they accept multiple input files for batch processing. 2793- ttDump.py and ttCompile.py don't silently override files anymore, but 2794 ask before doing so. Can be overridden by -f. 2795- Added -d option to both ttDump.py and ttCompile.py. 2796- Installation is now done with distutils. (Needs work for environments 2797 without compilers.) 2798- Updated installation instructions. 2799- Added some workarounds so as to handle certain buggy fonts more 2800 gracefully. 2801- Updated Unicode table to Unicode 3.0 (Thanks Antoine!) 2802- Included a Python script by Adam Twardoch that adds some useful stuff 2803 to the Windows registry. 2804- Moved the project to SourceForge. 2805 28061.0a6 (released 2000-03-15) 2807--------------------------- 2808 2809- Big reorganization: made ttLib a subpackage of the new fontTools 2810 package, changed several module names. Called the entire suite 2811 "FontTools" 2812- Added several submodules to fontTools, some new, some older. 2813- Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML 2814 dumping of GPOS/GSUB is for now disabled) 2815- Fixed hdmx endian bug 2816- Added -b option to ttCompile.py, it disables recalculation of 2817 bounding boxes, as requested by Werner Lemberg. 2818- Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py 2819- Use ".ttx" as file extension instead of ".xml". 2820- TTX is now the name of the XML-based *format* for TT fonts, and not 2821 just an application. 2822 28231.0a5 2824----- 2825 2826Never released 2827 2828- More tables supported: hdmx, vhea, vmtx 2829 28301.0a3 & 1.0a4 2831------------- 2832 2833Never released 2834 2835- fixed most portability issues 2836- retracted the "Euro_or_currency" change from 1.0a2: it was 2837 nonsense! 2838 28391.0a2 (released 1999-05-02) 2840--------------------------- 2841 2842- binary release for MacOS 2843- genenates full FOND resources: including width table, PS font name 2844 info and kern table if applicable. 2845- added cmap format 4 support. Extra: dumps Unicode char names as XML 2846 comments! 2847- added cmap format 6 support 2848- now accepts true type files starting with "true" (instead of just 2849 0x00010000 and "OTTO") 2850- 'glyf' table support is now complete: I added support for composite 2851 scale, xy-scale and two-by-two for the 'glyf' table. For now, 2852 component offset scale behaviour defaults to Apple-style. This only 2853 affects the (re)calculation of the glyph bounding box. 2854- changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph 2855 order list, since we cannot tell from the 'post' table which is 2856 meant. I should probably doublecheck with a Unicode encoding if 2857 available. (This does not affect the output!) 2858 2859Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong 2860assumption about sfnt resource names 2861 28621.0a1 (released 1999-04-27) 2863--------------------------- 2864 2865- initial binary release for MacOS 2866