14.22.0 (released 2021-04-01) 2---------------------------- 3 4- [ttLib] Remove .Format from Coverage, ClassDef, SingleSubst, LigatureSubst, 5 AlternateSubst, MultipleSubst (#2238). 6 ATTENTION: This will change your TTX dumps! 7- [misc.arrayTools] move Vector to its own submodule, and rewrite as a tuple 8 subclass (#2201). 9- [docs] Added a terminology section for varLib (#2209). 10- [varLib] Move rounding to VariationModel, to avoid error accumulation from 11 multiple deltas (#2214) 12- [varLib] Explain merge errors in more human-friendly terms (#2223, #2226) 13- [otlLib] Correct some documentation (#2225) 14- [varLib/otlLib] Allow merging into VariationFont without first saving GPOS 15 PairPos2 (#2229) 16- [subset] Improve PairPosFormat2 subsetting (#2221) 17- [ttLib] TTFont.save: create file on disk as late as possible (#2253) 18- [cffLib] Add missing CFF2 dict operators LanguageGroup and ExpansionFactor 19 (#2249) 20 ATTENTION: This will change your TTX dumps! 21 224.21.1 (released 2021-02-26) 23---------------------------- 24 25- [pens] Reverted breaking change that turned ``AbstractPen`` and ``AbstractPointPen`` 26 into abstract base classes (#2164, #2198). 27 284.21.0 (released 2021-02-26) 29---------------------------- 30 31- [feaLib] Indent anchor statements in ``asFea()`` to make them more legible and 32 diff-able (#2193). 33- [pens] Turn ``AbstractPen`` and ``AbstractPointPen`` into abstract base classes 34 (#2164). 35- [feaLib] Added support for parsing and building ``STAT`` table from AFDKO feature 36 files (#2039). 37- [instancer] Added option to update name table of generated instance using ``STAT`` 38 table's axis values (#2189). 39- [bezierTools] Added functions to compute bezier point-at-time, as well as line-line, 40 curve-line and curve-curve intersections (#2192). 41 424.20.0 (released 2021-02-15) 43---------------------------- 44 45- [COLRv1] Added ``unbuildColrV1`` to deconstruct COLRv1 otTables to raw json-able 46 data structure; it does the reverse of ``buildColrV1`` (#2171). 47- [feaLib] Allow ``sub X by NULL`` sequence to delete a glyph (#2170). 48- [arrayTools] Fixed ``Vector`` division (#2173). 49- [COLRv1] Define new ``PaintSweepGradient`` (#2172). 50- [otTables] Moved ``Paint.Format`` enum class outside of ``Paint`` class definition, 51 now named ``PaintFormat``. It was clashing with paint instance ``Format`` attribute 52 and thus was breaking lazy load of COLR table which relies on magic ``__getattr__`` 53 (#2175). 54- [COLRv1] Replace hand-coded builder functions with otData-driven dynamic 55 implementation (#2181). 56- [COLRv1] Define additional static (non-variable) Paint formats (#2181). 57- [subset] Added support for subsetting COLR v1 and CPAL tables (#2174, #2177). 58- [fontBuilder] Allow ``setupFvar`` to optionally take ``designspaceLib.AxisDescriptor`` 59 objects. Added new ``setupAvar`` method. Support localised names for axes and 60 named instances (#2185). 61 624.19.1 (released 2021-01-28) 63---------------------------- 64 65- [woff2] An initial off-curve point with an overlap flag now stays an off-curve 66 point after compression. 67 684.19.0 (released 2021-01-25) 69---------------------------- 70 71- [codecs] Handle ``errors`` parameter different from 'strict' for the custom 72 extended mac encodings (#2137, #2132). 73- [featureVars] Raise better error message when a script is missing the required 74 default language system (#2154). 75- [COLRv1] Avoid abrupt change caused by rounding ``PaintRadialGradient.c0`` when 76 the start circle almost touches the end circle's perimeter (#2148). 77- [COLRv1] Support building unlimited lists of paints as 255-ary trees of 78 ``PaintColrLayers`` tables (#2153). 79- [subset] Prune redundant format-12 cmap subtables when all non-BMP characters 80 are dropped (#2146). 81- [basePen] Raise ``MissingComponentError`` instead of bare ``KeyError`` when a 82 referenced component is missing (#2145). 83 844.18.2 (released 2020-12-16) 85---------------------------- 86 87- [COLRv1] Implemented ``PaintTranslate`` paint format (#2129). 88- [varLib.cff] Fixed unbound local variable error (#1787). 89- [otlLib] Don't crash when creating OpenType class definitions if some glyphs 90 occur more than once (#2125). 91 924.18.1 (released 2020-12-09) 93---------------------------- 94 95- [colorLib] Speed optimization for ``LayerV1ListBuilder`` (#2119). 96- [mutator] Fixed missing tab in ``interpolate_cff2_metrics`` (0957dc7a). 97 984.18.0 (released 2020-12-04) 99---------------------------- 100 101- [COLRv1] Update to latest draft: added ``PaintRotate`` and ``PaintSkew`` (#2118). 102- [woff2] Support new ``brotlicffi`` bindings for PyPy (#2117). 103- [glifLib] Added ``expectContentsFile`` parameter to ``GlyphSet``, for use when 104 reading existing UFOs, to comply with the specification stating that a 105 ``contents.plist`` file must exist in a glyph set (#2114). 106- [subset] Allow ``LangSys`` tags in ``--layout-scripts`` option (#2112). For example: 107 ``--layout-scripts=arab.dflt,arab.URD,latn``; this will keep ``DefaultLangSys`` 108 and ``URD`` language for ``arab`` script, and all languages for ``latn`` script. 109- [varLib.interpolatable] Allow UFOs to be checked; report open paths, non existant 110 glyphs; add a ``--json`` option to produce a machine-readable list of 111 incompatibilities 112- [pens] Added ``QuartzPen`` to create ``CGPath`` from glyph outlines on macOS. 113 Requires pyobjc (#2107). 114- [feaLib] You can export ``FONTTOOLS_LOOKUP_DEBUGGING=1`` to enable feature file 115 debugging info stored in ``Debg`` table (#2106). 116- [otlLib] Build more efficient format 1 and format 2 contextual lookups whenever 117 possible (#2101). 118 1194.17.1 (released 2020-11-16) 120---------------------------- 121 122- [colorLib] Fixed regression in 4.17.0 when building COLR v0 table; when color 123 layers are stored in UFO lib plist, we can't distinguish tuples from lists so 124 we need to accept either types (e5439eb9, googlefonts/ufo2ft/issues#426). 125 1264.17.0 (released 2020-11-12) 127---------------------------- 128 129- [colorLib/otData] Updated to latest draft ``COLR`` v1 spec (#2092). 130- [svgLib] Fixed parsing error when arc commands' boolean flags are not separated 131 by space or comma (#2094). 132- [varLib] Interpret empty non-default glyphs as 'missing', if the default glyph is 133 not empty (#2082). 134- [feaLib.builder] Only stash lookup location for ``Debg`` if ``Builder.buildLookups_`` 135 has cooperated (#2065, #2067). 136- [varLib] Fixed bug in VarStore optimizer (#2073, #2083). 137- [varLib] Add designspace lib key for custom feavar feature tag (#2080). 138- Add HashPointPen adapted from psautohint. With this pen, a hash value of a glyph 139 can be computed, which can later be used to detect glyph changes (#2005). 140 1414.16.1 (released 2020-10-05) 142---------------------------- 143 144- [varLib.instancer] Fixed ``TypeError`` exception when instantiating a VF with 145 a GSUB table 1.1 in which ``FeatureVariations`` attribute is present but set to 146 ``None`` -- indicating that optional ``FeatureVariations`` is missing (#2077). 147- [glifLib] Make ``x`` and ``y`` attributes of the ``point`` element required 148 even when validation is turned off, and raise a meaningful ``GlifLibError`` 149 message when that happens (#2075). 150 1514.16.0 (released 2020-09-30) 152---------------------------- 153 154- [removeOverlaps] Added new module and ``removeOverlaps`` function that merges 155 overlapping contours and components in TrueType glyphs. It requires the 156 `skia-pathops <https://github.com/fonttools/skia-pathops>`__ module. 157 Note that removing overlaps invalidates the TrueType hinting (#2068). 158- [varLib.instancer] Added ``--remove-overlaps`` command-line option. 159 The ``overlap`` option in ``instantiateVariableFont`` now takes an ``OverlapMode`` 160 enum: 0: KEEP_AND_DONT_SET_FLAGS, 1: KEEP_AND_SET_FLAGS (default), and 2: REMOVE. 161 The latter is equivalent to calling ``removeOverlaps`` on the generated static 162 instance. The option continues to accept ``bool`` value for backward compatibility. 163 164 1654.15.0 (released 2020-09-21) 166---------------------------- 167 168- [plistlib] Added typing annotations to plistlib module. Set up mypy static 169 typechecker to run automatically on CI (#2061). 170- [ttLib] Implement private ``Debg`` table, a reverse-DNS namespaced JSON dict. 171- [feaLib] Optionally add an entry into the ``Debg`` table with the original 172 lookup name (if any), feature name / script / language combination (if any), 173 and original source filename and line location. Annotate the ttx output for 174 a lookup with the information from the Debg table (#2052). 175- [sfnt] Disabled checksum checking by default in ``SFNTReader`` (#2058). 176- [Docs] Document ``mtiLib`` module (#2027). 177- [varLib.interpolatable] Added checks for contour node count and operation type 178 of each node (#2054). 179- [ttLib] Added API to register custom table packer/unpacker classes (#2055). 180 1814.14.0 (released 2020-08-19) 182---------------------------- 183 184- [feaLib] Allow anonymous classes in LookupFlags definitions (#2037). 185- [Docs] Better document DesignSpace rules processing order (#2041). 186- [ttLib] Fixed 21-year old bug in ``maxp.maxComponentDepth`` calculation (#2044, 187 #2045). 188- [varLib.models] Fixed misspelled argument name in CLI entry point (81d0042a). 189- [subset] When subsetting GSUB v1.1, fixed TypeError by checking whether the 190 optional FeatureVariations table is present (e63ecc5b). 191- [Snippets] Added snippet to show how to decompose glyphs in a TTF (#2030). 192- [otlLib] Generate GSUB type 5 and GPOS type 7 contextual lookups where appropriate 193 (#2016). 194 1954.13.0 (released 2020-07-10) 196---------------------------- 197 198- [feaLib/otlLib] Moved lookup subtable builders from feaLib to otlLib; refactored 199 some common code (#2004, #2007). 200- [docs] Document otlLib module (#2009). 201- [glifLib] Fixed bug with some UFO .glif filenames clashing on case-insensitive 202 filesystems (#2001, #2002). 203- [colorLib] Updated COLRv1 implementation following changes in the draft spec: 204 (#2008, googlefonts/colr-gradients-spec#24). 205 2064.12.1 (released 2020-06-16) 207---------------------------- 208 209- [_n_a_m_e] Fixed error in ``addMultilingualName`` with one-character names. 210 Only attempt to recovered malformed UTF-16 data from a ``bytes`` string, 211 not from unicode ``str`` (#1997, #1998). 212 2134.12.0 (released 2020-06-09) 214---------------------------- 215 216- [otlLib/varLib] Ensure that the ``AxisNameID`` in the ``STAT`` and ``fvar`` 217 tables is grater than 255 as per OpenType spec (#1985, #1986). 218- [docs] Document more modules in ``fontTools.misc`` package: ``filenames``, 219 ``fixedTools``, ``intTools``, ``loggingTools``, ``macCreatorType``, ``macRes``, 220 ``plistlib`` (#1981). 221- [OS/2] Don't calculate whole sets of unicode codepoints, use faster and more memory 222 efficient ranges and bisect lookups (#1984). 223- [voltLib] Support writing back abstract syntax tree as VOLT data (#1983). 224- [voltLib] Accept DO_NOT_TOUCH_CMAP keyword (#1987). 225- [subset/merge] Fixed a namespace clash involving a private helper class (#1955). 226 2274.11.0 (released 2020-05-28) 228---------------------------- 229 230- [feaLib] Introduced ``includeDir`` parameter on Parser and IncludingLexer to 231 explicitly specify the directory to search when ``include()`` statements are 232 encountered (#1973). 233- [ufoLib] Silently delete duplicate glyphs within the same kerning group when reading 234 groups (#1970). 235- [ttLib] Set version of COLR table when decompiling COLRv1 (commit 9d8a7e2). 236 2374.10.2 (released 2020-05-20) 238---------------------------- 239 240- [sfnt] Fixed ``NameError: SimpleNamespace`` while reading TTC header. The regression 241 was introduced with 4.10.1 after removing ``py23`` star import. 242 2434.10.1 (released 2020-05-19) 244---------------------------- 245 246- [sfnt] Make ``SFNTReader`` pickleable even when TTFont is loaded with lazy=True 247 option and thus keeps a reference to an external file (#1962, #1967). 248- [feaLib.ast] Restore backward compatibility (broken in 4.10 with #1905) for 249 ``ChainContextPosStatement`` and ``ChainContextSubstStatement`` classes. 250 Make them accept either list of lookups or list of lists of lookups (#1961). 251- [docs] Document some modules in ``fontTools.misc`` package: ``arrayTools``, 252 ``bezierTools`` ``cliTools`` and ``eexec`` (#1956). 253- [ttLib._n_a_m_e] Fixed ``findMultilingualName()`` when name record's ``string`` is 254 encoded as bytes sequence (#1963). 255 2564.10.0 (released 2020-05-15) 257---------------------------- 258 259- [varLib] Allow feature variations to be active across the entire space (#1957). 260- [ufoLib] Added support for ``formatVersionMinor`` in UFO's ``fontinfo.plist`` and for 261 ``formatMinor`` attribute in GLIF file as discussed in unified-font-object/ufo-spec#78. 262 No changes in reading or writing UFOs until an upcoming (non-0) minor update of the 263 UFO specification is published (#1786). 264- [merge] Fixed merging fonts with different versions of ``OS/2`` table (#1865, #1952). 265- [subset] Fixed ``AttributeError`` while subsetting ``ContextSubst`` and ``ContextPos`` 266 Format 3 subtable (#1879, #1944). 267- [ttLib.table._m_e_t_a] if data happens to be ascii, emit comment in TTX (#1938). 268- [feaLib] Support multiple lookups per glyph position (#1905). 269- [psCharStrings] Use inheritance to avoid repeated code in initializer (#1932). 270- [Doc] Improved documentation for the following modules: ``afmLib`` (#1933), ``agl`` 271 (#1934), ``cffLib`` (#1935), ``cu2qu`` (#1937), ``encodings`` (#1940), ``feaLib`` 272 (#1941), ``merge`` (#1949). 273- [Doc] Split off developer-centric info to new page, making front page of docs more 274 user-focused. List all utilities and sub-modules with brief descriptions. 275 Make README more concise and focused (#1914). 276- [otlLib] Add function to build STAT table from high-level description (#1926). 277- [ttLib._n_a_m_e] Add ``findMultilingualName()`` method (#1921). 278- [unicodedata] Update ``RTL_SCRIPTS`` for Unicode 13.0 (#1925). 279- [gvar] Sort ``gvar`` XML output by glyph name, not glyph order (#1907, #1908). 280- [Doc] Added help options to ``fonttools`` command line tool (#1913, #1920). 281 Ensure all fonttools CLI tools have help documentation (#1948). 282- [ufoLib] Only write fontinfo.plist when there actually is content (#1911). 283 2844.9.0 (released 2020-04-29) 285--------------------------- 286 287- [subset] Fixed subsetting of FeatureVariations table. The subsetter no longer drops 288 FeatureVariationRecords that have empty substitutions as that will keep the search 289 going and thus change the logic. It will only drop empty records that occur at the 290 end of the FeatureVariationRecords array (#1881). 291- [subset] Remove FeatureVariations table and downgrade GSUB/GPOS to version 0x10000 292 when FeatureVariations contain no FeatureVariationRecords after subsetting (#1903). 293- [agl] Add support for legacy Adobe Glyph List of glyph names in ``fontTools.agl`` 294 (#1895). 295- [feaLib] Ignore superfluous script statements (#1883). 296- [feaLib] Hide traceback by default on ``fonttools feaLib`` command line. 297 Use ``--traceback`` option to show (#1898). 298- [feaLib] Check lookup index in chaining sub/pos lookups and print better error 299 message (#1896, #1897). 300- [feaLib] Fix building chained alt substitutions (#1902). 301- [Doc] Included all fontTools modules in the sphinx-generated documentation, and 302 published it to ReadTheDocs for continuous documentation of the fontTools project 303 (#1333). Check it out at https://fonttools.readthedocs.io/. Thanks to Chris Simpkins! 304- [transform] The ``Transform`` class is now subclass of ``typing.NamedTuple``. No 305 change in functionality (#1904). 306 307 3084.8.1 (released 2020-04-17) 309--------------------------- 310 311- [feaLib] Fixed ``AttributeError: 'NoneType' has no attribute 'getAlternateGlyphs'`` 312 when ``aalt`` feature references a chain contextual substitution lookup 313 (googlefonts/fontmake#648, #1878). 314 3154.8.0 (released 2020-04-16) 316--------------------------- 317 318- [feaLib] If Parser is initialized without a ``glyphNames`` parameter, it cannot 319 distinguish between a glyph name containing an hyphen, or a range of glyph names; 320 instead of raising an error, it now interprets them as literal glyph names, while 321 also outputting a logging warning to alert user about the ambiguity (#1768, #1870). 322- [feaLib] When serializing AST to string, emit spaces around hyphens that denote 323 ranges. Also, fixed an issue with CID ranges when round-tripping AST->string->AST 324 (#1872). 325- [Snippets/otf2ttf] In otf2ttf.py script update LSB in hmtx to match xMin (#1873). 326- [colorLib] Added experimental support for building ``COLR`` v1 tables as per 327 the `colr-gradients-spec <https://github.com/googlefonts/colr-gradients-spec/blob/master/colr-gradients-spec.md>`__ 328 draft proposal. **NOTE**: both the API and the XML dump of ``COLR`` v1 are 329 susceptible to change while the proposal is being discussed and formalized (#1822). 330 3314.7.0 (released 2020-04-03) 332--------------------------- 333 334- [cu2qu] Added ``fontTools.cu2qu`` package, imported from the original 335 `cu2qu <https://github.com/googlefonts/cu2qu>`__ project. The ``cu2qu.pens`` module 336 was moved to ``fontTools.pens.cu2quPen``. The optional cu2qu extension module 337 can be compiled by installing `Cython <https://cython.org/>`__ before installing 338 fonttools from source (i.e. git repo or sdist tarball). The wheel package that 339 is published on PyPI (i.e. the one ``pip`` downloads, unless ``--no-binary`` 340 option is used), will continue to be pure-Python for now (#1868). 341 3424.6.0 (released 2020-03-24) 343--------------------------- 344 345- [varLib] Added support for building variable ``BASE`` table version 1.1 (#1858). 346- [CPAL] Added ``fromRGBA`` method to ``Color`` class (#1861). 347 348 3494.5.0 (released 2020-03-20) 350--------------------------- 351 352- [designspaceLib] Added ``add{Axis,Source,Instance,Rule}Descriptor`` methods to 353 ``DesignSpaceDocument`` class, to initialize new descriptor objects using keyword 354 arguments, and at the same time append them to the current document (#1860). 355- [unicodedata] Update to Unicode 13.0 (#1859). 356 3574.4.3 (released 2020-03-13) 358--------------------------- 359 360- [varLib] Always build ``gvar`` table for TrueType-flavored Variable Fonts, 361 even if it contains no variation data. The table is required according to 362 the OpenType spec (#1855, #1857). 363 3644.4.2 (released 2020-03-12) 365--------------------------- 366 367- [ttx] Annotate ``LookupFlag`` in XML dump with comment explaining what bits 368 are set and what they mean (#1850). 369- [feaLib] Added more descriptive message to ``IncludedFeaNotFound`` error (#1842). 370 3714.4.1 (released 2020-02-26) 372--------------------------- 373 374- [woff2] Skip normalizing ``glyf`` and ``loca`` tables if these are missing from 375 a font (e.g. in NotoColorEmoji using ``CBDT/CBLC`` tables). 376- [timeTools] Use non-localized date parsing in ``timestampFromString``, to fix 377 error when non-English ``LC_TIME`` locale is set (#1838, #1839). 378- [fontBuilder] Make sure the CFF table generated by fontBuilder can be used by varLib 379 without having to compile and decompile the table first. This was breaking in 380 converting the CFF table to CFF2 due to some unset attributes (#1836). 381 3824.4.0 (released 2020-02-18) 383--------------------------- 384 385- [colorLib] Added ``fontTools.colorLib.builder`` module, initially with ``buildCOLR`` 386 and ``buildCPAL`` public functions. More color font formats will follow (#1827). 387- [fontBuilder] Added ``setupCOLR`` and ``setupCPAL`` methods (#1826). 388- [ttGlyphPen] Quantize ``GlyphComponent.transform`` floats to ``F2Dot14`` to fix 389 round-trip issue when computing bounding boxes of transformed components (#1830). 390- [glyf] If a component uses reference points (``firstPt`` and ``secondPt``) for 391 alignment (instead of X and Y offsets), compute the effective translation offset 392 *after* having applied any transform (#1831). 393- [glyf] When all glyphs have zero contours, compile ``glyf`` table data as a single 394 null byte in order to pass validation by OTS and Windows (#1829). 395- [feaLib] Parsing feature code now ensures that referenced glyph names are part of 396 the known glyph set, unless a glyph set was not provided. 397- [varLib] When filling in the default axis value for a missing location of a source or 398 instance, correctly map the value forward. 399- [varLib] The avar table can now contain mapping output values that are greater than 400 OR EQUAL to the preceeding value, as the avar specification allows this. 401- [varLib] The errors of the module are now ordered hierarchically below VarLibError. 402 See #1821. 403 4044.3.0 (released 2020-02-03) 405--------------------------- 406 407- [EBLC/CBLC] Fixed incorrect padding length calculation for Format 3 IndexSubTable 408 (#1817, #1818). 409- [varLib] Fixed error when merging OTL tables and TTFonts were loaded as ``lazy=True`` 410 (#1808, #1809). 411- [varLib] Allow to use master fonts containing ``CFF2`` table when building VF (#1816). 412- [ttLib] Make ``recalcBBoxes`` option work also with ``CFF2`` table (#1816). 413- [feaLib] Don't reset ``lookupflag`` in lookups defined inside feature blocks. 414 They will now inherit the current ``lookupflag`` of the feature. This is what 415 Adobe ``makeotf`` also does in this case (#1815). 416- [feaLib] Fixed bug with mixed single/multiple substitutions. If a single substitution 417 involved a glyph class, we were incorrectly using only the first glyph in the class 418 (#1814). 419 4204.2.5 (released 2020-01-29) 421--------------------------- 422 423- [feaLib] Do not fail on duplicate multiple substitutions, only warn (#1811). 424- [subset] Optimize SinglePos subtables to Format 1 if all ValueRecords are the same 425 (#1802). 426 4274.2.4 (released 2020-01-09) 428--------------------------- 429 430- [unicodedata] Update RTL_SCRIPTS for Unicode 11 and 12. 431 4324.2.3 (released 2020-01-07) 433--------------------------- 434 435- [otTables] Fixed bug when splitting `MarkBasePos` subtables as offsets overflow. 436 The mark class values in the split subtable were not being updated, leading to 437 invalid mark-base attachments (#1797, googlefonts/noto-source#145). 438- [feaLib] Only log a warning instead of error when features contain duplicate 439 substitutions (#1767). 440- [glifLib] Strip XML comments when parsing with lxml (#1784, #1785). 441 4424.2.2 (released 2019-12-12) 443--------------------------- 444 445- [subset] Fixed issue with subsetting FeatureVariations table when the index 446 of features changes as features get dropped. The feature index need to be 447 remapped to point to index of the remaining features (#1777, #1782). 448- [fontBuilder] Added `addFeatureVariations` method to `FontBuilder` class. This 449 is a shorthand for calling `featureVars.addFeatureVariations` on the builder's 450 TTFont object (#1781). 451- [glyf] Fixed the flags bug in glyph.drawPoints() like we did for glyph.draw() 452 (#1771, #1774). 453 4544.2.1 (released 2019-12-06) 455--------------------------- 456 457- [glyf] Use the ``flagOnCurve`` bit mask in ``glyph.draw()``, so that we ignore 458 the ``overlap`` flag that may be set when instantiating variable fonts (#1771). 459 4604.2.0 (released 2019-11-28) 461--------------------------- 462 463- [pens] Added the following pens: 464 465 * ``roundingPen.RoundingPen``: filter pen that rounds coordinates and components' 466 offsets to integer; 467 * ``roundingPen.RoundingPointPen``: like the above, but using PointPen protocol. 468 * ``filterPen.FilterPointPen``: base class for filter point pens; 469 * ``transformPen.TransformPointPen``: filter point pen to apply affine transform; 470 * ``recordingPen.RecordingPointPen``: records and replays point-pen commands. 471 472- [ttGlyphPen] Always round float coordinates and component offsets to integers 473 (#1763). 474- [ufoLib] When converting kerning groups from UFO2 to UFO3, avoid confusing 475 groups with the same name as one of the glyphs (#1761, #1762, 476 unified-font-object/ufo-spec#98). 477 4784.1.0 (released 2019-11-18) 479--------------------------- 480 481- [instancer] Implemented restricting axis ranges (level 3 partial instancing). 482 You can now pass ``{axis_tag: (min, max)}`` tuples as input to the 483 ``instantiateVariableFont`` function. Note that changing the default axis 484 position is not supported yet. The command-line script also accepts axis ranges 485 in the form of colon-separated float values, e.g. ``wght=400:700`` (#1753, #1537). 486- [instancer] Never drop STAT ``DesignAxis`` records, but only prune out-of-range 487 ``AxisValue`` records. 488- [otBase/otTables] Enforce that VarStore.RegionAxisCount == fvar.axisCount, even 489 when regions list is empty to appease OTS < v8.0 (#1752). 490- [designspaceLib] Defined new ``processing`` attribute for ``<rules>`` element, 491 with values "first" or "last", plus other editorial changes to DesignSpace 492 specification. Bumped format version to 4.1 (#1750). 493- [varLib] Improved error message when masters' glyph orders do not match (#1758, 494 #1759). 495- [featureVars] Allow to specify custom feature tag in ``addFeatureVariations``; 496 allow said feature to already exist, in which case we append new lookup indices 497 to existing features. Implemented ``<rules>`` attribute ``processing`` according to 498 DesignSpace specification update in #1750. Depending on this flag, we generate 499 either an 'rvrn' (always processed first) or a 'rclt' feature (follows lookup order, 500 therefore last) (#1747, #1625, #1371). 501- [ttCollection] Added support for context manager auto-closing via ``with`` statement 502 like with ``TTFont`` (#1751). 503- [unicodedata] Require unicodedata2 >= 12.1.0. 504- [py2.py3] Removed yet more PY2 vestiges (#1743). 505- [_n_a_m_e] Fixed issue when comparing NameRecords with different string types (#1742). 506- [fixedTools] Changed ``fixedToFloat`` to not do any rounding but simply return 507 ``value / (1 << precisionBits)``. Added ``floatToFixedToStr`` and 508 ``strToFixedToFloat`` functions to be used when loading from or dumping to XML. 509 Fixed values (e.g. fvar axes and instance coordinates, avar mappings, etc.) are 510 are now stored as un-rounded decimal floats upon decompiling (#1740, #737). 511- [feaLib] Fixed handling of multiple ``LigatureCaret`` statements for the same glyph. 512 Only the first rule per glyph is used, additional ones are ignored (#1733). 513 5144.0.2 (released 2019-09-26) 515--------------------------- 516 517- [voltLib] Added support for ``ALL`` and ``NONE`` in ``PROCESS_MARKS`` (#1732). 518- [Silf] Fixed issue in ``Silf`` table compilation and decompilation regarding str vs 519 bytes in python3 (#1728). 520- [merge] Handle duplicate glyph names better: instead of appending font index to 521 all glyph names, use similar code like we use in ``post`` and ``CFF`` tables (#1729). 522 5234.0.1 (released 2019-09-11) 524--------------------------- 525 526- [otTables] Support fixing offset overflows in ``MultipleSubst`` lookup subtables 527 (#1706). 528- [subset] Prune empty strikes in ``EBDT`` and ``CBDT`` table data (#1698, #1633). 529- [pens] Fixed issue in ``PointToSegmentPen`` when last point of closed contour has 530 same coordinates as the starting point and was incorrectly dropped (#1720). 531- [Graphite] Fixed ``Sill`` table output to pass OTS (#1705). 532- [name] Added ``removeNames`` method to ``table__n_a_m_e`` class (#1719). 533- [ttLib] Added aliases for renamed entries ``ascender`` and ``descender`` in 534 ``hhea`` table (#1715). 535 5364.0.0 (released 2019-08-22) 537--------------------------- 538 539- NOTE: The v4.x version series only supports Python 3.6 or greater. You can keep 540 using fonttools 3.x if you need support for Python 2. 541- [py23] Removed all the python2-only code since it is no longer reachable, thus 542 unused; only the Python3 symbols were kept, but these are no-op. The module is now 543 DEPRECATED and will removed in the future. 544- [ttLib] Fixed UnboundLocalError for empty loca/glyph tables (#1680). Also, allow 545 the glyf table to be incomplete when dumping to XML (#1681). 546- [varLib.models] Fixed KeyError while sorting masters and there are no on-axis for 547 a given axis (38a8eb0e). 548- [cffLib] Make sure glyph names are unique (#1699). 549- [feaLib] Fix feature parser to correctly handle octal numbers (#1700). 550 5513.44.0 (released 2019-08-02) 552---------------------------- 553 554- NOTE: This is the last scheduled release to support Python 2.7. The upcoming fonttools 555 v4.x series is going to require Python 3.6 or greater. 556- [varLib] Added new ``varLib.instancer`` module for partially instantiating variable 557 fonts. This extends (and will eventually replace) ``varLib.mutator`` module, as 558 it allows to create not just full static instances from a variable font, but also 559 "partial" or "less variable" fonts where some of the axes are dropped or 560 instantiated at a particular value. 561 Also available from the command-line as `fonttools varLib.instancer --help` 562 (#1537, #1628). 563- [cffLib] Added support for ``FDSelect`` format 4 (#1677). 564- [subset] Added support for subsetting ``sbix`` (Apple bitmap color font) table. 565- [t1Lib] Fixed issue parsing ``eexec`` section in Type1 fonts when whitespace 566 characters are interspersed among the trailing zeros (#1676). 567- [cffLib.specializer] Fixed bug in ``programToCommands`` with CFF2 charstrings (#1669). 568 5693.43.2 (released 2019-07-10) 570---------------------------- 571 572- [featureVars] Fixed region-merging code on python3 (#1659). 573- [varLib.cff] Fixed merging of sparse PrivateDict items (#1653). 574 5753.43.1 (released 2019-06-19) 576---------------------------- 577 578- [subset] Fixed regression when passing ``--flavor=woff2`` option with an input font 579 that was already compressed as WOFF 1.0 (#1650). 580 5813.43.0 (released 2019-06-18) 582---------------------------- 583 584- [woff2] Added support for compressing/decompressing WOFF2 fonts with non-transformed 585 ``glyf`` and ``loca`` tables, as well as with transformed ``hmtx`` table. 586 Removed ``Snippets/woff2_compress.py`` and ``Snippets/woff2_decompress.py`` scripts, 587 and replaced them with a new console entry point ``fonttools ttLib.woff2`` 588 that provides two sub-commands ``compress`` and ``decompress``. 589- [varLib.cff] Fixed bug when merging CFF2 ``PrivateDicts``. The ``PrivateDict`` 590 data from the first region font was incorrecty used for all subsequent fonts. 591 The bug would only affect variable CFF2 fonts with hinting (#1643, #1644). 592 Also, fixed a merging bug when VF masters have no blends or marking glyphs (#1632, 593 #1642). 594- [loggingTools] Removed unused backport of ``LastResortLogger`` class. 595- [subset] Gracefully handle partial MATH table (#1635). 596- [featureVars] Avoid duplicate references to ``rvrn`` feature record in 597 ``DefaultLangSys`` tables when calling ``addFeatureVariations`` on a font that 598 does not already have a ``GSUB`` table (aa8a5bc6). 599- [varLib] Fixed merging of class-based kerning. Before, the process could introduce 600 rogue kerning values and variations for random classes against class zero (everything 601 not otherwise classed). 602- [varLib] Fixed merging GPOS tables from master fonts with different number of 603 ``SinglePos`` subtables (#1621, #1641). 604- [unicodedata] Updated Blocks, Scripts and ScriptExtensions to Unicode 12.1. 605 6063.42.0 (released 2019-05-28) 607---------------------------- 608 609- [OS/2] Fixed sign of ``fsType``: it should be ``uint16``, not ``int16`` (#1619). 610- [subset] Skip out-of-range class values in mark attachment (#1478). 611- [fontBuilder] Add an empty ``DSIG`` table with ``setupDummyDSIG`` method (#1621). 612- [varLib.merger] Fixed bug whereby ``GDEF.GlyphClassDef`` were being dropped 613 when generating instance via ``varLib.mutator`` (#1614). 614- [varLib] Added command-line options ``-v`` and ``-q`` to configure logging (#1613). 615- [subset] Update font extents in head table (#1612). 616- [subset] Make --retain-gids truncate empty glyphs after the last non-empty glyph 617 (#1611). 618- [requirements] Updated ``unicodedata2`` backport for Unicode 12.0. 619 6203.41.2 (released 2019-05-13) 621---------------------------- 622 623- [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby 624 the VarStore state was not propagated to PrivateDict (#1598). 625- [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609). 626 627 6283.41.1 (released 2019-05-13) 629---------------------------- 630 631- [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using 632 custom opener function (#1606). 633- [head] Round font bounding box coordinates to integers to fix compile error 634 if CFF font has float coordinates (#1604, #1605). 635- [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599). 636- [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option 637 (#1590, #1594). 638- [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by 639 previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's 640 ``decompile`` method (#1600). 641 6423.41.0 (released 2019-04-29) 643---------------------------- 644 645- [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse 646 masters, or masters with more than one model (multiple ``VarStore.VarData``). 647 In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with 648 ``blend`` operators (#1547, #1591). 649- [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option, 650 and when advances mapping is null while sidebearings mappings are non-null 651 (#1587, #1588). 652- Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value. 653 Calculate it automatically when compiling features with feaLib. Added option 654 ``--recalc-max-context`` to ``subset`` module (#1582). 655- [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after 656 importing font from TTX (#1584). 657- [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586). 658- [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539). 659 6603.40.0 (released 2019-04-08) 661---------------------------- 662 663- [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids`` 664 option (#1552). 665- [designspaceLib] Use up-to-date default location in ``findDefault`` method 666 (#1554). 667- [voltLib] Allow passing file-like object to Parser. 668- [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf 669 table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566). 670- [svgLib] Added support for converting more SVG shapes to path ``d`` strings 671 (ellipse, line, polyline), as well as support for ``transform`` attributes. 672 Only ``matrix`` transformations are currently supported (#1564, #1564). 673- [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG`` 674 tables (#1551). 675- [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557). 676- Fixed ``DeprecationWarning`` on invalid escape sequences (#1562). 677 6783.39.0 (released 2019-03-19) 679---------------------------- 680 681- [ttLib/glyf] Raise more specific error when encountering recursive 682 component references (#1545, #1546). 683- [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534, 684 unified-font-object/ufo-spec#84). 685- [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent`` 686 and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528). 687- [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation 688 toXML to improve readability of TTX dump (#1527). 689- [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522). 690- [designspaceLib] Use axes maps when normalizing locations in 691 DesignSpaceDocument (#1226, #1521), and when finding default source (#1535). 692- [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by 693 default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option 694 to disable this (#1518). 695- [subset] Fixed subsetting ``VVAR`` table (#1516, #1517). 696 Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the 697 option ``--retain-gids`` is used. 698- [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511). 699 Fixed double indentation of ``subtable`` statement (#1512). 700 Added support for ``subtable`` statement in more places than just PairPos 701 lookups (#1520). 702 Handle lookupflag 0 and lookupflag without a value (#1540). 703- [varLib] In ``load_designspace``, provide a default English name for the 704 ``ital`` axis tag. 705- Remove pyftinspect because it is unmaintained and bitrotted. 706 7073.38.0 (released 2019-02-18) 708---------------------------- 709 710- [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with 711 CFF table (#1488, 649dc49). 712- [subset] Fixed AttributeError when using --desubroutinize option (#1490). 713 Also, fixed desubroutinizing bug when subrs contain hints (#1499). 714- [CPAL] Make Color a subclass of namedtuple (173a0f5). 715- [feaLib] Allow hyphen in glyph class names. 716- [feaLib] Added 'tables' option to __main__.py (#1497). 717- [feaLib] Add support for special-case contextual positioning formatting 718 (#1501). 719- [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into 720 equivalent SVG paths (#1500, #1508). 721- [Snippets] Added name-viewer.ipynb Jupyter notebook. 722 723 7243.37.3 (released 2019-02-05) 725---------------------------- 726 727- The previous release accidentally changed several files from Unix to DOS 728 line-endings. Fix that. 729 7303.37.2 (released 2019-02-05) 731---------------------------- 732 733- [varLib] Temporarily revert the fix to ``load_masters()``, which caused a 734 crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs. 735 7363.37.1 (released 2019-02-05) 737---------------------------- 738 739- [varLib] ``load_masters()`` now actually assigns the fonts it loads to the 740 source.font attributes. 741- [varLib] Fixed an MVAR table generation crash when sparse masters were 742 involved. 743- [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum. 744- [feaLib] A MarkClassDefinition inside a block is no longer doubly indented 745 compared to the rest of the block. 746 7473.37.0 (released 2019-01-28) 748---------------------------- 749 750- [svgLib] Added support for converting elliptical arcs to cubic bezier curves 751 (#1464). 752- [py23] Added backport for ``math.isfinite``. 753- [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute 754 ``hidden=1``. 755- Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7. 756- [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS. 757 Accept COMPONENT glyph type. 758- [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2 759 format A (#1459). Round-trip ``useExtension`` keyword. Implemented 760 ``ValueRecord.asFea`` method. 761- [subset] Insert empty widths into hdmx when retaining gids (#1458). 762 7633.36.0 (released 2019-01-17) 764---------------------------- 765 766- [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's 767 ``head.modified`` timestamp (#1455, #46). 768- [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table 769 with ttx (#1451, #1452, #1456). 770- [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past 771 the ``END`` operator in .vtp file (#1453). 772- [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness 773 and post.underlinePosition when generating MVAR deltas (#1449, 774 googlei18n/ufo2ft#308). 775- [subset] Added ``--retain-gids`` option to subset font without modifying the 776 current glyph indices (#1443, #1447). 777- [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new 778 equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required. 779- [varLib] Allow loading masters from TTX files as well (#1441). 780 7813.35.2 (released 2019-01-14) 782---------------------------- 783 784- [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even 785 without the corresponding (required) metrics header tables, ``hhea`` and 786 ``vhea`` (#1439). 787- [varLib] Added support for localized axes' ``labelname`` and named instances' 788 ``stylename`` (#1438). 789 7903.35.1 (released 2019-01-09) 791---------------------------- 792 793- [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation. 794 7953.35.0 (released 2019-01-07) 796---------------------------- 797 798- [psCharStrings] In ``encodeFloat`` function, use float's "general format" with 799 8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around 800 a macOS rendering issue when real numbers in CFF table are too long, and 801 also makes sure that floats are encoded with the same precision in python 2.7 802 and 3.x (#1430, googlei18n/ufo2ft#306). 803- [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add 804 Macintosh (platformID=1) names by default. Added options to ``FontBuilder`` 805 ``setupNameTable`` method to optionally disable Macintosh or Windows names. 806 (#1359, #1431). 807- [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object, 808 instead of a designspace file path. The caller can now set the ``font`` 809 attribute of designspace's sources to a TTFont object, thus allowing to 810 skip filenames manipulation altogether (#1416, #1425). 811- [sfnt] Allow SFNTReader objects to be deep-copied. 812- Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423). 813- [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were 814 not accepted (#1421). 815- [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411). 816- [varLib] The default STAT table version is now set to 1.1, to improve 817 compatibility with legacy applications (#1413). 818 8193.34.2 (released 2018-12-17) 820---------------------------- 821 822- [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have 823 a DefaultLangSys record (#1408, 135a4a1). 824 8253.34.1 (released 2018-12-17) 826---------------------------- 827 828- [varLib] Work around macOS rendering issue for composites without gvar entry (#1381). 829 8303.34.0 (released 2018-12-14) 831---------------------------- 832 833- [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()`` 834 now supports arbitrary mapping. Fix handling of overlapping ranges for feature 835 variations (#1400). 836- [cffLib, subset] Code clean-up and fixing related to CFF2 support. 837- [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389). 838- [fontbuilder] Initial support for building CFF2 fonts. Set CFF's 839 ``FontMatrix`` automatically from unitsPerEm. 840- [plistLib] Accept the more general ``collections.Mapping`` instead of the 841 specific ``dict`` class to support custom data classes that should serialize 842 to dictionaries. 843 8443.33.0 (released 2018-11-30) 845---------------------------- 846- [subset] subsetter bug fix with variable fonts. 847- [varLib.featureVar] Improve FeatureVariations generation with many rules. 848- [varLib] Enable sparse masters when building variable fonts: 849 https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368 850- [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an 851 instance. 852- [ttLib] Ignore the length of kern table subtable format 0 853 8543.32.0 (released 2018-11-01) 855---------------------------- 856 857- [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins 858 for shared methods (#1344). 859- [featureVars] Fixed normalization error when a condition's minimum/maximum 860 attributes are missing in designspace ``<rule>`` (#1366). 861- [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``, 862 needed to use the ``fonTools.varLib.plot`` module. 863- [varLib] Take total bounding box into account when resolving model (7ee81c8). 864 If multiple axes have the same range ratio, cut across both (62003f4). 865- [subset] Don't error if ``STAT`` has no ``AxisValue`` tables. 866- [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper 867 class around ``TTFont`` that makes it easier to create a working TTF or OTF 868 font from scratch with code. NOTE: the API is still experimental and may 869 change in future versions. 870 8713.31.0 (released 2018-10-21) 872---------------------------- 873 874- [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__ 875 master branch into a new ``fontTools.ufoLib`` package (#1335, #1095). 876 Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``. 877 Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``. 878 Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``. 879 To use the new ``fontTools.ufoLib`` module you need to install fonttools 880 with the ``[ufo]`` extra, or you can manually install the required additional 881 dependencies (cf. README.rst). 882- [morx] Support AAT action type to insert glyphs and clean up compilation 883 of AAT action tables (4a1871f, 2011ccf). 884- [subset] The ``--no-hinting`` on a CFF font now also drops the optional 885 hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and 886 ``ExpansionFactor`` (#1322). 887- [subset] Include nameIDs referenced by STAT table (#1327). 888- [loggingTools] Added ``msg=None`` argument to 889 ``CapturingLogHandler.assertRegex`` (0245f2c). 890- [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244). 891- [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334). 892 8933.30.0 (released 2018-09-18) 894---------------------------- 895 896- [feaLib] Skip building noop class PairPos subtables when Coverage is NULL 897 (#1318). 898- [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of 899 glyf table's contour points in the TTX dump. This is used in some 900 implementations to specify a non-zero fill with overlapping contours (#1316). 901- [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing 902 VTT sources for ``cvar`` variation table (#1310). 903- [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The 904 ``fontTools.varLib.designspace`` module is now deprecated and will be removed 905 in future versions. The presence of an explicit ``axes`` element is now 906 required in order to build a variable font (#1224, #1313). 907- [varLib] Implemented building GSUB FeatureVariations table from the ``rules`` 908 element of DesignSpace document (#1240, #713, #1314). 909- [subset] Added ``--no-layout-closure`` option to not expand the subset with 910 the glyphs produced by OpenType layout features. Instead, OpenType features 911 will be subset to only rules that are relevant to the otherwise-specified 912 glyph set (#43, #1121). 913 9143.29.1 (released 2018-09-10) 915---------------------------- 916 917- [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the 918 DFLT/non-dflt language systems (#1307). 919- [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311). 920- [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType 921 layout scripts that will be preserved. By default all scripts are retained 922 (``'*'``) (#1303). 923 9243.29.0 (released 2018-07-26) 925---------------------------- 926 927- [feaLib] In the OTL table builder, when the ``name`` table is excluded 928 from the list of tables to be build, skip compiling ``featureNames`` blocks, 929 as the records referenced in ``FeatureParams`` table don't exist (68951b7). 930- [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail 931 (05f95f0). 932- [feaLib] Added support for explicit ``subtable;`` break statements in 933 PairPos lookups; previously these were ignored (#1279, #1300, #1302). 934- [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1, 935 so that a subroutinizer can insert subroutine calls (#1301, 936 https://github.com/googlei18n/ufo2ft/issues/266). 937- [otTables] Added support for fixing offset overflow errors occurring inside 938 ``MarkBasePos`` subtables (#1297). 939- [subset] Write the default output file extension based on ``--flavor`` option, 940 or the value of ``TTFont.sfntVersion`` (d7ac0ad). 941- [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11 942 (452c85e). 943- [xmlWriter] Added context manager to XMLWriter class to autoclose file 944 descriptor on exit (#1290). 945- [psCharStrings] Optimize the charstring's bytecode by encoding as integers 946 all float values that have no decimal portion (8d7774a). 947- [ttFont] Fixed missing import of ``TTLibError`` exception (#1285). 948- [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script 949 (#1278, #1292). 950 9513.28.0 (released 2018-06-19) 952---------------------------- 953 954- [featureVars] Added experimental module to build ``FeatureVariations`` 955 tables. Still needs to be hooked up to ``varLib.build`` (#1240). 956- [fixedTools] Added ``otRound`` to round floats to nearest integer towards 957 positive Infinity. This is now used where we deal with visual data like X/Y 958 coordinates, advance widths/heights, variation deltas, and similar (#1274, 959 #1248). 960- [subset] Improved GSUB closure memoize algorithm. 961- [varLib.models] Fixed regression in model resolution (180124, #1269). 962- [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string 963 (#1275). 964- [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and 965 ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values 966 (#1276, #1264). 967- [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler 968 on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277). 969 9703.27.1 (released 2018-06-11) 971---------------------------- 972 973- [ttGlyphPen] Issue a warning and skip building non-existing components 974 (https://github.com/googlei18n/fontmake/issues/411). 975- [tests] Fixed issue running ttx_test.py from a tagged commit. 976 9773.27.0 (released 2018-06-11) 978---------------------------- 979 980- [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in 981 designspace document. Bumped ``format`` attribute to ``4.0`` (previously, 982 it was formatted as an integer). Removed ``checkDefault``, ``checkAxes`` 983 methods, and any kind of guessing about the axes when the ``<axes>`` element 984 is missing. The default master is expected at the intersection of all default 985 values for each axis (#1254, #1255, #1267). 986- [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the 987 font has an FDArray (#1211, #1271). 988- [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not 989 present, as is the case for CFF2 fonts. 990- [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that 991 sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy. 992- [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or 993 ``cmap`` are missing. 994- [ttFont] Added ``__len__`` method to ``_TTGlyphSet``. 995- [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230). 996- [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``. 997- [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12). 998- [ttx] Impoved test coverage (#1261). 999- [Snippets] Addded script to append a suffix to all family names in a font. 1000- [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b). 1001 10023.26.0 (released 2018-05-03) 1003---------------------------- 1004 1005- [designspace] Added a new optional ``layer`` attribute to the source element, 1006 and a corresponding ``layerName`` attribute to the ``SourceDescriptor`` 1007 object (#1253). 1008 Added ``conditionset`` element to the ``rule`` element to the spec, but not 1009 implemented in designspace reader/writer yet (#1254). 1010- [varLib.models] Refine modeling one last time (0ecf5c5). 1011- [otBase] Fixed sharing of tables referred to by different offset sizes 1012 (795f2f9). 1013- [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None 1014 empty Coverage tables in MarkGlyphSets (02616ab). 1015- [varLib]: Added ``--master-finder`` command-line option (#1249). 1016- [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245). 1017- [otTables] Allow decompiling bad ClassDef tables with invalid format, with 1018 warning (#1236). 1019- [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242). 1020- [varLib.plot] Show master locations. Set axis limits to -1, +1. 1021- [subset] Handle HVAR direct mapping. Passthrough 'cvar'. 1022 Added ``--font-number`` command-line option for collections. 1023- [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font 1024 (#1234). Added ``kind`` argument to T1Font constructor (c5c161c). 1025- [ttLib] Added context manager API to ``TTFont`` class, so it can be used in 1026 ``with`` statements to auto-close the file when exiting the context (#1232). 1027 10283.25.0 (released 2018-04-03) 1029---------------------------- 1030 1031- [varLib] Improved support-resolution algorithm. Previously, the on-axis 1032 masters would always cut the space. They don't anymore. That's more 1033 consistent, and fixes the main issue Erik showed at TYPO Labs 2017. 1034 Any varfont built that had an unusual master configuration will change 1035 when rebuilt (42bef17, a523a697, 1036 https://github.com/googlei18n/fontmake/issues/264). 1037- [varLib.models] Added a ``main()`` entry point, that takes positions and 1038 prints model results. 1039- [varLib.plot] Added new module to plot a designspace's 1040 VariationModel. Requires ``matplotlib``. 1041- [varLib.mutator] Added -o option to specify output file path (2ef60fa). 1042- [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a). 1043- [varLib.models] Convert delta array to floats if values overflows signed 1044 short integer (0055f94). 1045 10463.24.2 (released 2018-03-26) 1047---------------------------- 1048 1049- [otBase] Don't fail during ``ValueRecord`` copy if src has more items. 1050 We drop hinting in the subsetter by simply changing ValueFormat, without 1051 cleaning up the actual ValueRecords. This was causing assertion error if 1052 a variable font was subsetted without hinting and then passed directly to 1053 the mutator for instantiation without first it saving to disk. 1054 10553.24.1 (released 2018-03-06) 1056---------------------------- 1057 1058- [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer 1059 (#1206). 1060- [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script, 1061 and a ``optimize=True`` keyword argument to ``varLib.build`` function, 1062 to optionally disable IUP optimization while building varfonts. 1063- [ttCollection] Fixed issue while decompiling ttc with python3 (#1207). 1064 10653.24.0 (released 2018-03-01) 1066---------------------------- 1067 1068- [ttGlyphPen] Decompose composite glyphs if any components' transform is too 1069 large to fit a ``F2Dot14`` value, or clamp transform values that are 1070 (almost) equal to +2.0 to make them fit and avoid decomposing (#1200, 1071 #1204, #1205). 1072- [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table 1073 splitted as individual ttx files (#153, #1035, #1132, #1202). 1074- Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used 1075 for the ttx split-glyphs option (#1202). 1076- [feaLib] Added support for ``cvParameters`` blocks in Character Variant 1077 feautures ``cv01-cv99`` (#860, #1169). 1078- [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of 1079 ttx files (#1197). 1080- [varLib.mutator] Fixed issue while instantiating some variable fonts 1081 whereby the horizontal advance width computed from ``gvar`` phantom points 1082 could turn up to be negative (#1198). 1083- [varLib/subset] Fixed issue with subsetting GPOS variation data not 1084 picking up ``ValueRecord`` ``Device`` objects (54fd71f). 1085- [feaLib/voltLib] In all AST elements, the ``location`` is no longer a 1086 required positional argument, but an optional kewyord argument (defaults 1087 to ``None``). This will make it easier to construct feature AST from 1088 code (#1201). 1089 1090 10913.23.0 (released 2018-02-26) 1092---------------------------- 1093 1094- [designspaceLib] Added an optional ``lib`` element to the designspace as a 1095 whole, as well as to the instance elements, to store arbitrary data in a 1096 property list dictionary, similar to the UFO's ``lib``. Added an optional 1097 ``font`` attribute to the ``SourceDescriptor``, to allow operating on 1098 in-memory font objects (#1175). 1099- [cffLib] Fixed issue with lazy-loading of attributes when attempting to 1100 set the CFF TopDict.Encoding (#1177, #1187). 1101- [ttx] Fixed regression introduced in 3.22.0 that affected the split tables 1102 ``-s`` option (#1188). 1103- [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised 1104 when an included feature file cannot be found (#1186). 1105- [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of 1106 glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes 1107 can still be imported (21cbab8, 38a0ffb). 1108- [varLib] Implemented VarStore optimizer (#1184). 1109- [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179). 1110- [sfnt] Restore backward compatiblity with ``numFonts`` attribute of 1111 ``SFNTReader`` object (#1181). 1112- [merge] Initial support for merging ``LangSysRecords`` (#1180). 1113- [ttCollection] don't seek(0) when writing to possibly unseekable strems. 1114- [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114). 1115- [cffLib] Added ``width`` module to calculate optimal CFF default and 1116 nominal glyph widths. 1117- [varLib] Don’t fail if STAT already in the master fonts (#1166). 1118 11193.22.0 (released 2018-02-04) 1120---------------------------- 1121 1122- [subset] Support subsetting ``endchar`` acting as ``seac``-like components 1123 in ``CFF`` (fixes #1162). 1124- [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object. 1125 Added ``tables`` argument to only build some tables instead of all (#1159, 1126 #1163). 1127- [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139). 1128- [feaLib] Added option to the parser to not resolve ``include`` statements 1129 (#1154). 1130- [ttLib] Added new ``ttCollection`` module to read/write TrueType and 1131 OpenType Collections. Exports a ``TTCollection`` class with a ``fonts`` 1132 attribute containing a list of ``TTFont`` instances, the methods ``save`` 1133 and ``saveXML``, plus some list-like methods. The ``importXML`` method is 1134 not implemented yet (#17). 1135- [unicodeadata] Added ``ot_tag_to_script`` function that converts from 1136 OpenType script tag to Unicode script code. 1137- Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's 1138 ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument 1139 NOTE: this is not yet used internally by varLib, and the API may be subject 1140 to changes (#911, #1110, LettError/designSpaceDocument#28). 1141- Added new FontTools icon images (8ee7c32). 1142- [unicodedata] Added ``script_horizontal_direction`` function that returns 1143 either "LTR" or "RTL" given a unicode script code. 1144- [otConverters] Don't write descriptive name string as XML comment if the 1145 NameID value is 0 (== NULL) (#1151, #1152). 1146- [unicodedata] Add ``ot_tags_from_script`` function to get the list of 1147 OpenType script tags associated with unicode script code (#1150). 1148- [feaLib] Don't error when "enumerated" kern pairs conflict with preceding 1149 single pairs; emit warning and chose the first value (#1147, #1148). 1150- [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the 1151 fully formatted log message. 1152- [sbix] Fixed TypeError when concatenating str and bytes (#1154). 1153- [bezierTools] Implemented cusp support and removed ``approximate_fallback`` 1154 arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142). 1155 11563.21.2 (released 2018-01-08) 1157---------------------------- 1158 1159- [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125). 1160 11613.21.1 (released 2018-01-03) 1162---------------------------- 1163 1164- [feaLib] Allow mixed single/multiple substitutions (#612) 1165- Added missing ``*.afm`` test assets to MAINFEST.in (#1137). 1166- Fixed dumping ``SVG`` tables containing color palettes (#1124). 1167 11683.21.0 (released 2017-12-18) 1169---------------------------- 1170 1171- [cmap] when compiling format6 subtable, don't assume gid0 is always called 1172 '.notdef' (1e42224). 1173- [ot] Allow decompiling fonts with bad Coverage format number (1aafae8). 1174- Change FontTools licence to MIT (#1127). 1175- [post] Prune extra names already in standard Mac set (df1e8c7). 1176- [subset] Delete empty SubrsIndex after subsetting (#994, #1118). 1177- [varLib] Don't share points in cvar by default, as it currently fails on 1178 some browsers (#1113). 1179- [afmLib] Make poor old afmLib work on python3. 1180 11813.20.1 (released 2017-11-22) 1182---------------------------- 1183 1184- [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions 1185 returning inconsistent short vs long names. They both return the short four- 1186 letter script codes now. Added ``script_name`` and ``script_code`` functions 1187 to look up the long human-readable script name from the script code, and 1188 viceversa (#1109, #1111). 1189 11903.20.0 (released 2017-11-21) 1191---------------------------- 1192 1193- [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the 1194 same interface as the built-in ``unicodedata`` module, with the addition of 1195 a few functions that are missing from the latter, such as ``script``, 1196 ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script 1197 to download and parse data files from the Unicode Character Database and 1198 generate python modules containing lists of ranges and property values. 1199- [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the 1200 ``asFea`` method). 1201- [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable 1202 instead of ``glyphMap`` dict. The latter still works but with a pending 1203 deprecation warning (#1104). 1204- [bezierTools] Added arc length calculation functions originally from 1205 ``pens.perimeterPen`` module (#1101). 1206- [varLib] Started generating STAT table (8af4309). Right now it just reflects 1207 the axes, and even that with certain limitations: 1208 * AxisOrdering is set to the order axes are defined, 1209 * Name-table entries are not shared with fvar. 1210- [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr`` 1211 context managers (#1097). 1212- [Graphite] Fixed some round-trip bugs (#1093). 1213 12143.19.0 (released 2017-11-06) 1215---------------------------- 1216 1217- [varLib] Try set of used points instead of all points when testing whether to 1218 share points between tuples (#1090). 1219- [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file. 1220 Read the commit message 8b02b5a and issue #1030 for more details. 1221 NOTE: this change invalidates all the TTX files containing CFF2 tables 1222 that where dumped with previous verisons of fonttools. 1223 CFF2 Subr items can have values on the stack after the last operator, thus 1224 a ``CFF2Subr`` class was added to accommodate this (#1091). 1225- [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094) 1226- [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table 1227 class that returns a preferred Unicode cmap subtable given a list of options 1228 (#1092). 1229- [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction 1230 12313.18.0 (released 2017-10-30) 1232---------------------------- 1233 1234- [feaLib] Fixed writing back nested glyph classes (#1086). 1235- [TupleVariation] Reactivated shared points logic, bugfixes (#1009). 1236- [AAT] Implemented ``morx`` ligature subtables (#1082). 1237- [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080, 1238 https://github.com/googlei18n/cu2qu/issues/51). 1239- [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079). 1240- [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in 1241 old versions of python 2.7 (#993). 1242 12433.17.0 (released 2017-10-16) 1244---------------------------- 1245 1246- [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands 1247 into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen`` 1248 https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py 1249- [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws 1250 contours with the winding direction reversed, while keeping the starting 1251 point (#1071). 1252- [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole 1253 rather than segment by segment. 1254- [arrayTools] Added ``Vector`` class to apply math operations on an array 1255 of numbers, and ``pairwise`` function to loop over pairs of items in an 1256 iterable. 1257- [varLib] Added support for building and interpolation of ``cvar`` table 1258 (f874cf6, a25a401). 1259 12603.16.0 (released 2017-10-03) 1261---------------------------- 1262 1263- [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting 1264 the ``head`` modified timestamp to ensure reproducible builds (#1063). 1265 See https://reproducible-builds.org/specs/source-date-epoch/ 1266- [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060). 1267- Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill. 1268 Thanks @mhosken! (#1054). 1269- [varLib] Default to using axis "name" attribute if "labelname" element 1270 is missing (588f524). 1271- [merge] Added support for merging Script records. Remove unused features 1272 and lookups after merge (d802580, 556508b). 1273- Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that 1274 supports the Pen protocol (#1051). Also, added a snippet to convert SVG 1275 outlines to UFO GLIF (#1053). 1276- [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``, 1277 and ``cidg``. 1278- [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``. 1279 12803.15.1 (released 2017-08-18) 1281---------------------------- 1282 1283- [otConverters] Implemented ``__add__`` and ``__radd__`` methods on 1284 ``otConverters._LazyList`` that decompile a lazy list before adding 1285 it to another list or ``_LazyList`` instance. Fixes an ``AttributeError`` 1286 in the ``subset`` module when attempting to sum ``_LazyList`` objects 1287 (6ef48bd2, 1aef1683). 1288- [AAT] Support the `opbd` table with optical bounds (a47f6588). 1289- [AAT] Support `prop` table with glyph properties (d05617b4). 1290 1291 12923.15.0 (released 2017-08-17) 1293---------------------------- 1294 1295- [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled 1296 and recompiled; futher work needed to handle ``morx`` table (#1025). 1297- [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5). 1298- [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b). 1299- [varLib] In ``models.supportScalars``, ignore an axis when its peak value 1300 is 0 (fixes #1020). 1301- [varLib] Add default mappings to all axes in avar to fix rendering issue 1302 in some rasterizers (19c4b377, 04eacf13). 1303- [varLib] Flatten multiple tail PairPosFormat2 subtables before merging 1304 (c55ef525). 1305- [ttLib] Added support for recalculating font bounding box in ``CFF`` and 1306 ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970). 1307 13083.14.0 (released 2017-07-31) 1309---------------------------- 1310 1311- [varLib.merger] Remove Extensions subtables before merging (f7c20cf8). 1312- [varLib] Initialize the avar segment map with required default entries 1313 (#1014). 1314- [varLib] Implemented optimal IUP optmiziation (#1019). 1315- [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2 1316 (#1015). 1317- [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'. 1318- [subset] Return value from ``_DehintingT2Decompiler.op_hintmask`` 1319 (c0d672ba). 1320- [cffLib] Allow to get TopDict by index as well as by name (dca96c9c). 1321- [cffLib] Removed global ``isCFF2`` state; use one set of classes for 1322 both CFF and CFF2, maintaining backward compatibility existing code (#1007). 1323- [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1. 1324- [cffLib] Added missing default (-100) for UnderlinePosition (#983). 1325- [feaLib] Enable setting nameIDs greater than 255 (#1003). 1326- [varLib] Recalculate ValueFormat when merging SinglePos (#996). 1327- [varLib] Do not emit MVAR if there are no entries in the variation store 1328 (#987). 1329- [ttx] For ``-x`` option, pad with space if table tag length is < 4. 1330 13313.13.1 (released 2017-05-30) 1332---------------------------- 1333 1334- [feaLib.builder] Removed duplicate lookups optimization. The original 1335 lookup order and semantics of the feature file are preserved (#976). 1336 13373.13.0 (released 2017-05-24) 1338---------------------------- 1339 1340- [varLib.mutator] Implement IUP optimization (#969). 1341- [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those 1342 of other iterables (e46f949). Removed ``__abs__()`` (3db5be2). 1343- [varLib.interpolate_layout] Added ``mapped`` keyword argument to 1344 ``interpolate_layout`` to allow disabling avar mapping: if False (default), 1345 the location is mapped using the map element of the axes in designspace file; 1346 if True, it is assumed that location is in designspace's internal space and 1347 no mapping is performed (#950, #975). 1348- [varLib.interpolate_layout] Import designspace-loading logic from varLib. 1349- [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914). 1350- [cffLib.specializer] When copying iterables, cast to list (462b7f86). 1351 13523.12.1 (released 2017-05-18) 1353---------------------------- 1354 1355- [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in 1356 T2CharStringPen (#965). 1357 13583.12.0 (released 2017-05-17) 1359---------------------------- 1360 1361- [cffLib.specializer] Added new ``specializer`` module to optimize CFF 1362 charstrings, used by the T2CharStringPen (#948). 1363- [varLib.mutator] Sort glyphs by component depth before calculating composite 1364 glyphs' bounding boxes to ensure deltas are correctly caclulated (#945). 1365- [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double) 1366 instead of 'f' (float) as ``array.array`` typecode (#963, #964). 1367 13683.11.0 (released 2017-05-03) 1369---------------------------- 1370 1371- [t2CharStringPen] Initial support for specialized Type2 path operators: 1372 vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and 1373 hvcurveto. This should produce more compact charstrings (#940, #403). 1374- [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935). 1375- [fvar] Expose flags in XML (#932) 1376- [name] Add helper function for building multi-lingual names (#921) 1377- [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs 1378 that are NOT present in the Coverage (1b5e1c4, #939). 1379- [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927). 1380- [feLib] Throw an error when the same glyph is defined in multiple mark 1381 classes within the same lookup (3e3ff00, #453). 1382 13833.10.0 (released 2017-04-14) 1384---------------------------- 1385 1386- [varLib] Added support for building ``avar`` table, using the designspace 1387 ``<map>`` elements. 1388- [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should 1389 be specified in designspace file now. We do not accept nonstandard axes 1390 if ``<axes>`` element is not present. 1391- [varLib] Removed "custom" axis from the ``standard_axis_map``. This was 1392 added before when glyphsLib was always exporting the (unused) custom axis. 1393- [varLib] Added partial support for building ``MVAR`` table; does not 1394 implement ``gasp`` table variations yet. 1395- [pens] Added FilterPen base class, for pens that control another pen; 1396 factored out ``addComponent`` method from BasePen into a separate abstract 1397 DecomposingPen class; added DecomposingRecordingPen, which records 1398 components decomposed as regular contours. 1399- [TSI1] Fixed computation of the textLength of VTT private tables (#913). 1400- [loggingTools] Added ``LogMixin`` class providing a ``log`` property to 1401 subclasses, which returns a ``logging.Logger`` named after the latter. 1402- [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``. 1403- [py23] Added backport for python 3's ``types.SimpleNamespace`` class. 1404- [EBLC] Fixed issue with python 3 ``zip`` iterator. 1405 14063.9.2 (released 2017-04-08) 1407--------------------------- 1408 1409- [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class: 1410 https://wxpython.org/docs/api/wx.GraphicsPath-class.html 1411- [varLib.merger] Fixed issue with recombining multiple PairPosFormat2 1412 subtables (#888) 1413- [varLib] Do not encode gvar deltas that are all zeroes, or if all values 1414 are smaller than tolerance. 1415- [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top 1416 side bearing) attributes from the ``vmtx`` table, if present. 1417- [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__`` 1418 methods, and ``array`` property to get raw array. 1419- [ttx] Support reading TTX files with BOM (#896) 1420- [CFF2] Fixed the reporting of the number of regions in the font. 1421 14223.9.1 (released 2017-03-20) 1423--------------------------- 1424 1425- [varLib.merger] Fixed issue while recombining multiple PairPosFormat2 1426 subtables if they were split because of offset overflows (9798c30). 1427- [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is 1428 at least one of the fonts with a non-empty Format1 subtable (0f5a46b). 1429- [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2 1430 (aad0d46). 1431- [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3). 1432- [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging 1433 PairPosFormat2 (23511fd). 1434- [macUtils] Added missing ttLib import (b05f203). 1435 14363.9.0 (released 2017-03-13) 1437--------------------------- 1438 1439- [feaLib] Added (partial) support for parsing feature file comments ``# ...`` 1440 appearing in between statements (#879). 1441- [feaLib] Cleaned up syntax tree for FeatureNames. 1442- [ttLib] Added support for reading/writing ``CFF2`` table (thanks to 1443 @readroberts at Adobe), and ``TTFA`` (ttfautohint) table. 1444- [varLib] Fixed regression introduced with 3.8.0 in the calculation of 1445 ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets 1446 that use a 16-bit representation (b2825ff). 1447 14483.8.0 (released 2017-03-05) 1449--------------------------- 1450 1451- New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen. 1452- [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font 1453 statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html) 1454- [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for 1455 finding wrong contour order between different masters 1456- [varLib] designspace.load() now returns a dictionary, instead of a tuple, 1457 and supports <axes> element (#864); the 'masters' item was renamed 'sources', 1458 like the <sources> element in the designspace document 1459- [ttLib] Fixed issue with recalculating ``head`` modified timestamp when 1460 saving CFF fonts 1461- [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592) 1462- [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and 1463 MarkAttachmentType (#863) 1464- [merge] Changed the ``gasp`` table merge logic so that only the one from 1465 the first font is retained, similar to other hinting tables (#862) 1466- [Tests] Added tests for the ``varLib`` package, as well as test fonts 1467 from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s 1468 table readers/writers (<https://github.com/adobe-type-tools/aots>) 1469 14703.7.2 (released 2017-02-17) 1471--------------------------- 1472 1473- [subset] Keep advance widths when stripping ".notdef" glyph outline in 1474 CID-keyed CFF fonts (#845) 1475- [feaLib] Zero values now produce the same results as makeotf (#633, #848) 1476- [feaLib] More compact encoding for “Contextual positioning with in-line 1477 single positioning rules” (#514) 1478 14793.7.1 (released 2017-02-15) 1480--------------------------- 1481 1482- [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in 1483 Type 2 charstrings were also being stripped (#709, #343) 1484- [feaLib] include statements now resolve relative paths like makeotf (#838) 1485- [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic 1486 Multilingual Plane, also supports old-style MacOS platform encodings (#842) 1487- [feaLib] correctly escape string literals when emitting feature syntax (#780) 1488 14893.7.0 (released 2017-02-11) 1490--------------------------- 1491 1492- [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833). 1493- [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559). 1494- [feaLib] feaLib.Parser now needs the font's glyph map for parsing. 1495- [varLib] Fix regression where GPOS values were stored as 0. 1496- [varLib] Allow merging of class-based kerning when ClassDefs are different 1497 14983.6.3 (released 2017-02-06) 1499--------------------------- 1500 1501- [varLib] Fix building variation of PairPosFormat2 (b5c34ce). 1502- Populate defaults even for otTables that have postRead (e45297b). 1503- Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860). 1504 15053.6.2 (released 2017-01-30) 1506--------------------------- 1507 1508- [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no 1509 initial value" (3717dc6). 1510 15113.6.1 (released 2017-01-28) 1512--------------------------- 1513 1514- [py23] Fixed unhandled exception occurring at interpreter shutdown in 1515 the "last resort" logging handler (972b3e6). 1516- [agl] Ensure all glyph names are of native 'str' type; avoid mixing 1517 'str' and 'unicode' in TTFont.glyphOrder (d8c4058). 1518- Fixed inconsistent title levels in README.rst that caused PyPI to 1519 incorrectly render the reStructuredText page. 1520 15213.6.0 (released 2017-01-26) 1522--------------------------- 1523 1524- [varLib] Refactored and improved the variation-font-building process. 1525- Assembly code in the fpgm, prep, and glyf tables is now indented in 1526 XML output for improved readability. The ``instruction`` element is 1527 written as a simple tag if empty (#819). 1528- [ttx] Fixed 'I/O operation on closed file' error when dumping 1529 multiple TTXs to standard output with the '-o -' option. 1530- The unit test modules (``*_test.py``) have been moved outside of the 1531 fontTools package to the Tests folder, thus they are no longer 1532 installed (#811). 1533 15343.5.0 (released 2017-01-14) 1535--------------------------- 1536 1537- Font tables read from XML can now be written back to XML with no 1538 loss. 1539- GSUB/GPOS LookupType is written out in XML as an element, not 1540 comment. (#792) 1541- When parsing cmap table, do not store items mapped to glyph id 0. 1542 (#790) 1543- [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2) 1544- [mtiLib] Added unit tests (#787) 1545- [cvar] Implemented cvar table 1546- [gvar] Renamed GlyphVariation to TupleVariation to match OpenType 1547 terminology. 1548- [otTables] Handle gracefully empty VarData.Item array when compiling 1549 XML. (#797) 1550- [varLib] Re-enabled generation of ``HVAR`` table for fonts with 1551 TrueType outlines; removed ``--build-HVAR`` command-line option. 1552- [feaLib] The parser can now be extended to support non-standard 1553 statements in FEA code by using a customized Abstract Syntax Tree. 1554 See, for example, ``feaLib.builder_test.test_extensions`` and 1555 baseClass.feax (#794, fixes #773). 1556- [feaLib] Added ``feaLib`` command to the 'fonttools' command-line 1557 tool; applies a feature file to a font. ``fonttools feaLib -h`` for 1558 help. 1559- [pens] The ``T2CharStringPen`` now takes an optional 1560 ``roundTolerance`` argument to control the rounding of coordinates 1561 (#804, fixes #769). 1562- [ci] Measure test coverage on all supported python versions and OSes, 1563 combine coverage data and upload to 1564 https://codecov.io/gh/fonttools/fonttools (#786) 1565- [ci] Configured Travis and Appveyor for running tests on Python 3.6 1566 (#785, 55c03bc) 1567- The manual pages installation directory can be customized through 1568 ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84). 1569- [Snippets] Added otf2ttf.py, for converting fonts from CFF to 1570 TrueType using the googlei18n/cu2qu module (#802) 1571 15723.4.0 (released 2016-12-21) 1573--------------------------- 1574 1575- [feaLib] Added support for generating FEA text from abstract syntax 1576 tree (AST) objects (#776). Thanks @mhosken 1577- Added ``agl.toUnicode`` function to convert AGL-compliant glyph names 1578 to Unicode strings (#774) 1579- Implemented MVAR table (b4d5381) 1580 15813.3.1 (released 2016-12-15) 1582--------------------------- 1583 1584- [setup] We no longer use versioneer.py to compute fonttools version 1585 from git metadata, as this has caused issues for some users (#767). 1586 Now we bump the version strings manually with a custom ``release`` 1587 command of setup.py script. 1588 15893.3.0 (released 2016-12-06) 1590--------------------------- 1591 1592- [ttLib] Implemented STAT table from OpenType 1.8 (#758) 1593- [cffLib] Fixed decompilation of CFF fonts containing non-standard 1594 key/value pairs in FontDict (issue #740; PR #744) 1595- [py23] minor: in ``round3`` function, allow the second argument to be 1596 ``None`` (#757) 1597- The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated 1598 since vesion 3.2.0, have been removed. They can be imported from the 1599 ``fontTools.misc`` package. 1600 16013.2.3 (released 2016-12-02) 1602--------------------------- 1603 1604- [py23] optimized performance of round3 function; added backport for 1605 py35 math.isclose() (9d8dacb) 1606- [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and 1607 ``--text``/``--text-file`` options containing non-BMP chararcters 1608 (16d0e5e) 1609- [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749) 1610- [inspect] Made it compatible with both python2 and python3 (167ee60, 1611 #748). Thanks @pnemade 1612 16133.2.2 (released 2016-11-24) 1614--------------------------- 1615 1616- [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms 1617- [varLib] Handle fonts without GPOS (7915a45) 1618- [merge] Ignore LangSys if None (a11bc56) 1619- [subset] Fix subsetting MathVariants (78d3cbe) 1620- [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow 1621 16223.2.1 (released 2016-11-03) 1623--------------------------- 1624 1625- [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle`` 1626 bits 1627- [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for 1628 fonts with TrueType outlines. For ``CFF2``, it is enabled by default. 1629 16303.2.0 (released 2016-11-02) 1631--------------------------- 1632 1633- [varLib] Improve support for OpenType 1.8 Variable Fonts: 1634- Implement GDEF's VariationStore 1635- Implement HVAR/VVAR tables 1636- Partial support for loading MutatorMath .designspace files with 1637 varLib.designspace module 1638- Add varLib.models with Variation fonts interpolation models 1639- Implement GSUB/GPOS FeatureVariations 1640- Initial support for interpolating and merging OpenType Layout tables 1641 (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules) 1642- [API change] Change version to be an integer instead of a float in 1643 XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat, 1644 hhea and vhea tables. Scripts that set the Version for those to 1.0 1645 or other float values also need fixing. A warning is emitted when 1646 code or XML needs fix. 1647- several bug fixes to the cffLib module, contributed by Adobe's 1648 @readroberts 1649- The XML output for CFF table now has a 'major' and 'minor' elements 1650 for specifying whether it's version 1.0 or 2.0 (support for CFF2 is 1651 coming soon) 1652- [setup.py] remove undocumented/deprecated ``extra_path`` Distutils 1653 argument. This means that we no longer create a "FontTools" subfolder 1654 in site-packages containing the actual fontTools package, as well as 1655 the standalone xmlWriter and sstruct modules. The latter modules are 1656 also deprecated, and scheduled for removal in upcoming releases. 1657 Please change your import statements to point to from fontTools.misc 1658 import xmlWriter and from fontTools.misc import sstruct. 1659- [scripts] Add a 'fonttools' command-line tool that simply runs 1660 ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``, 1661 ``fonttools subset``, etc. 1662- [hmtx/vmts] Read advance width/heights as unsigned short (uint16); 1663 automatically round float values to integers. 1664- [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to 1665 ``TTFont.saveXML`` for overriding os-specific line endings (passed on 1666 to ``XMLWriter`` instances). 1667- [versioning] Use versioneer instead of ``setuptools_scm`` to 1668 dynamically load version info from a git checkout at import time. 1669- [feaLib] Support backslash-prefixed glyph names. 1670 16713.1.2 (released 2016-09-27) 1672--------------------------- 1673 1674- restore Makefile as an alternative way to build/check/install 1675- README.md: update instructions for installing package from source, 1676 and for running test suite 1677- NEWS: Change log was out of sync with tagged release 1678 16793.1.1 (released 2016-09-27) 1680--------------------------- 1681 1682- Fix ``ttLibVersion`` attribute in TTX files still showing '3.0' 1683 instead of '3.1'. 1684- Use ``setuptools_scm`` to manage package versions. 1685 16863.1.0 (released 2016-09-26) 1687--------------------------- 1688 1689- [feaLib] New library to parse and compile Adobe FDK OpenType Feature 1690 files. 1691- [mtiLib] New library to parse and compile Monotype 'FontDame' 1692 OpenType Layout Tables files. 1693- [voltLib] New library to parse Microsoft VOLT project files. 1694- [otlLib] New library to work with OpenType Layout tables. 1695- [varLib] New library to work with OpenType Font Variations. 1696- [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen 1697 to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen. 1698- [ttLib.tables] Implement 'meta' and 'trak' tables. 1699- [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add 1700 ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts. 1701- [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color 1702 fonts tables, and 'gvar' table for variation fonts. 1703- [Snippets] Add ``symfont.py``, for symbolic font statistics analysis; 1704 interpolatable.py, a preliminary script for detecting interpolation 1705 errors; ``{merge,dump}_woff_metadata.py``. 1706- [classifyTools] Helpers to classify things into classes. 1707- [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis 1708 CI; check unit test coverage with Coverage.py/Coveralls; automatic 1709 deployment to PyPI on tags. 1710- [loggingTools] Use Python built-in logging module to print messages. 1711- [py23] Make round() behave like Python 3 built-in round(); define 1712 round2() and round3(). 1713 17143.0 (released 2015-09-01) 1715------------------------- 1716 1717- Add Snippet scripts for cmap subtable format conversion, printing 1718 GSUB/GPOS features, building a GX font from two masters 1719- TTX WOFF2 support and a ``-f`` option to overwrite output file(s) 1720- Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta`` 1721- Support ``feat`` and gzip-compressed SVG tables 1722- Upgrade Mac East Asian encodings to native implementation if 1723 available 1724- Add Roman Croatian and Romanian encodings, codecs for mac-extended 1725 East Asian encodings 1726- Implement optimal GLYF glyph outline packing; disabled by default 1727 17282.5 (released 2014-09-24) 1729------------------------- 1730 1731- Add a Qt pen 1732- Add VDMX table converter 1733- Load all OpenType sub-structures lazily 1734- Add support for cmap format 13. 1735- Add pyftmerge tool 1736- Update to Unicode 6.3.0d3 1737- Add pyftinspect tool 1738- Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT 1739 embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe) 1740- Add support for loading, saving and ttx'ing WOFF file format 1741- Add support for Microsoft COLR/CPAL layered color glyphs 1742- Support PyPy 1743- Support Jython, by replacing numpy with array/lists modules and 1744 removed it, pure-Python StringIO, not cStringIO 1745- Add pyftsubset and Subsetter object, supporting CFF and TTF 1746- Add to ttx args for -q for quiet mode, -z to choose a bitmap dump 1747 format 1748 17492.4 (released 2013-06-22) 1750------------------------- 1751 1752- Option to write to arbitrary files 1753- Better dump format for DSIG 1754- Better detection of OTF XML 1755- Fix issue with Apple's kern table format 1756- Fix mangling of TT glyph programs 1757- Fix issues related to mona.ttf 1758- Fix Windows Installer instructions 1759- Fix some modern MacOS issues 1760- Fix minor issues and typos 1761 17622.3 (released 2009-11-08) 1763------------------------- 1764 1765- TrueType Collection (TTC) support 1766- Python 2.6 support 1767- Update Unicode data to 5.2.0 1768- Couple of bug fixes 1769 17702.2 (released 2008-05-18) 1771------------------------- 1772 1773- ClearType support 1774- cmap format 1 support 1775- PFA font support 1776- Switched from Numeric to numpy 1777- Update Unicode data to 5.1.0 1778- Update AGLFN data to 1.6 1779- Many bug fixes 1780 17812.1 (released 2008-01-28) 1782------------------------- 1783 1784- Many years worth of fixes and features 1785 17862.0b2 (released 2002-??-??) 1787--------------------------- 1788 1789- Be "forgiving" when interpreting the maxp table version field: 1790 interpret any value as 1.0 if it's not 0.5. Fixes dumping of these 1791 GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf 1792- Fixed ttx -l: it turned out this part of the code didn't work with 1793 Python 2.2.1 and earlier. My bad to do most of my testing with a 1794 different version than I shipped TTX with :-( 1795- Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into 1796 this one). 1797 17982.0b1 (released 2002-09-10) 1799--------------------------- 1800 1801- Fixed embarrassing bug: the master checksum in the head table is now 1802 calculated correctly even on little-endian platforms (such as Intel). 1803- Made the cmap format 4 compiler smarter: the binary data it creates 1804 is now more or less as compact as possible. TTX now makes more 1805 compact data than in any shipping font I've tested it with. 1806- Dump glyph names as a separate "GlyphOrder" pseudo table as opposed 1807 to as part of the glyf table (obviously needed for CFF-OTF's). 1808- Added proper support for the CFF table. 1809- Don't barf on empty tables (questionable, but "there are font out 1810 there...") 1811- When writing TT glyf data, align glyphs on 4-byte boundaries. This 1812 seems to be the current recommendation by MS. Also: don't barf on 1813 fonts which are already 4-byte aligned. 1814- Windows installer contributed bu Adam Twardoch! Yay! 1815- Changed the command line interface again, now by creating one new 1816 tool replacing the old ones: ttx It dumps and compiles, depending on 1817 input file types. The options have changed somewhat. 1818- The -d option is back (output dir) 1819- ttcompile's -i options is now called -m (as in "merge"), to avoid 1820 clash with dump's -i. 1821- The -s option ("split tables") no longer creates a directory, but 1822 instead outputs a small .ttx file containing references to the 1823 individual table files. This is not a true link, it's a simple file 1824 name, and the referenced file should be in the same directory so 1825 ttcompile can find them. 1826- compile no longer accepts a directory as input argument. Instead it 1827 can parse the new "mini-ttx" format as output by "ttx -s". 1828- all arguments are input files 1829- Renamed the command line programs and moved them to the Tools 1830 subdirectory. They are now installed by the setup.py install script. 1831- Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost) 1832 fully supported. The XML output is not yet final, as I'm still 1833 considering to output certain subtables in a more human-friendly 1834 manner. 1835- Fixed 'kern' table to correctly accept subtables it doesn't know 1836 about, as well as interpreting Apple's definition of the 'kern' table 1837 headers correctly. 1838- Fixed bug where glyphnames were not calculated from 'cmap' if it was 1839 (one of the) first tables to be decompiled. More specifically: it 1840 cmap was the first to ask for a glyphID -> glyphName mapping. 1841- Switched XML parsers: use expat instead of xmlproc. Should be faster. 1842- Removed my UnicodeString object: I now require Python 2.0 or up, 1843 which has unicode support built in. 1844- Removed assert in glyf table: redundant data at the end of the table 1845 is now ignored instead of raising an error. Should become a warning. 1846- Fixed bug in hmtx/vmtx code that only occured if all advances were 1847 equal. 1848- Fixed subtle bug in TT instruction disassembler. 1849- Couple of fixes to the 'post' table. 1850- Updated OS/2 table to latest spec. 1851 18521.0b1 (released 2001-08-10) 1853--------------------------- 1854 1855- Reorganized the command line interface for ttDump.py and 1856 ttCompile.py, they now behave more like "normal" command line tool, 1857 in that they accept multiple input files for batch processing. 1858- ttDump.py and ttCompile.py don't silently override files anymore, but 1859 ask before doing so. Can be overridden by -f. 1860- Added -d option to both ttDump.py and ttCompile.py. 1861- Installation is now done with distutils. (Needs work for environments 1862 without compilers.) 1863- Updated installation instructions. 1864- Added some workarounds so as to handle certain buggy fonts more 1865 gracefully. 1866- Updated Unicode table to Unicode 3.0 (Thanks Antoine!) 1867- Included a Python script by Adam Twardoch that adds some useful stuff 1868 to the Windows registry. 1869- Moved the project to SourceForge. 1870 18711.0a6 (released 2000-03-15) 1872--------------------------- 1873 1874- Big reorganization: made ttLib a subpackage of the new fontTools 1875 package, changed several module names. Called the entire suite 1876 "FontTools" 1877- Added several submodules to fontTools, some new, some older. 1878- Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML 1879 dumping of GPOS/GSUB is for now disabled) 1880- Fixed hdmx endian bug 1881- Added -b option to ttCompile.py, it disables recalculation of 1882 bounding boxes, as requested by Werner Lemberg. 1883- Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py 1884- Use ".ttx" as file extension instead of ".xml". 1885- TTX is now the name of the XML-based *format* for TT fonts, and not 1886 just an application. 1887 18881.0a5 1889----- 1890 1891Never released 1892 1893- More tables supported: hdmx, vhea, vmtx 1894 18951.0a3 & 1.0a4 1896------------- 1897 1898Never released 1899 1900- fixed most portability issues 1901- retracted the "Euro_or_currency" change from 1.0a2: it was 1902 nonsense! 1903 19041.0a2 (released 1999-05-02) 1905--------------------------- 1906 1907- binary release for MacOS 1908- genenates full FOND resources: including width table, PS font name 1909 info and kern table if applicable. 1910- added cmap format 4 support. Extra: dumps Unicode char names as XML 1911 comments! 1912- added cmap format 6 support 1913- now accepts true type files starting with "true" (instead of just 1914 0x00010000 and "OTTO") 1915- 'glyf' table support is now complete: I added support for composite 1916 scale, xy-scale and two-by-two for the 'glyf' table. For now, 1917 component offset scale behaviour defaults to Apple-style. This only 1918 affects the (re)calculation of the glyph bounding box. 1919- changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph 1920 order list, since we cannot tell from the 'post' table which is 1921 meant. I should probably doublecheck with a Unicode encoding if 1922 available. (This does not affect the output!) 1923 1924Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong 1925assumption about sfnt resource names 1926 19271.0a1 (released 1999-04-27) 1928--------------------------- 1929 1930- initial binary release for MacOS 1931