Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sparse masters, sparse components #408

Open
justvanrossum opened this issue Oct 7, 2020 · 5 comments
Open

Sparse masters, sparse components #408

justvanrossum opened this issue Oct 7, 2020 · 5 comments

Comments

@justvanrossum
Copy link
Contributor

This issue may touch several projects (ufo spec, fonttools), or it may go nowhere, but I'll start here.

Imagine a variation axis that only changes the positions of some components. Currently, to achieve this, the source UFO for this axis must also contain the base glyph, even though it will be the same as in the default source.

I tried leaving out the base glyph of the source UFO, but that obviously doesn't work as the interpolatable master then can't be built.

Adding the default master's glyph to the variation source feels redundant, especially when there are many axes and glyphs involved. Nested components complicate this further.

I am not 100% sure what a solution could be for this, but perhaps we can use this issue to discuss, if there's any interest.

One solution could be to fill the "gaps" in the sparse masters with empty glyphs (at the ttf-interpolatable level, not UFO), and have an empty glyph behave the same way as a missing glyph: "this glyph does not participate at this location".

This issue perhaps also relates to unified-font-object/ufo-spec/issues/49.

@anthrotype
Copy link
Member

I believe fontmake.instantiator (used to interpolate instance UFOs from designspace) filters out empty glyphs which occur in non-default masters when the glyph is not empty in the default master, and copied this behavior from ufoProcessor:

https://github.com/googlefonts/fontmake/blob/b025c5bdd6016b8312f1241be0cdd42a6e93ec0d/Lib/fontmake/instantiator.py#L567-L570

@madig (who's the author), am I right?

@anthrotype
Copy link
Member

This issue perhaps also relates to unified-font-object/ufo-spec/issues/49.

it does, however technically any (non-default) master can be sparse, not necessarily sparse "layers" inside single UFO3. So adding component.baseLayer won't solve the issue for whole-UFO sparse masters.

@madig
Copy link
Collaborator

madig commented Oct 7, 2020

I think I stumbled over this before, especially with bracket layers/conditional glyphs of composites in Glyphs sources. Or is that something else...

I think the Instantiator code does something else entirely but my memory is foggy...

@justvanrossum
Copy link
Contributor Author

Ok, I have figured out a solution in two parts that works for my case.

  1. Use a custom ufo2ft UFO2FT_FILTERS_KEY filter (pre=False):
from ufo2ft.filters import BaseFilter

class AddBaseGlyphsFilter(BaseFilter):

    def filter(self, glyph):
        glyphSet = self.context.glyphSet
        for component in glyph.components:
            if component.baseGlyph not in glyphSet and component.baseGlyph in self.context.font:
                emptyGlyph = type(glyph)(component.baseGlyph)
                emptyGlyph.width = self.context.font[component.baseGlyph].width
                glyphSet[component.baseGlyph] = emptyGlyph
  1. A patch to fontTools.varLib._add_gvar() that interprets empty glyphs as missing if the default glyph is not empty. Will post a PR for discussion soon.

I am happy with the filter being part of my project, but if people find it useful, I can contribute it as an opt-in filter for ufo2ft. (Perhaps it should be called AddEmptyBaseGlyphsFilter, though, or something else slightly more descriptive.)

One thing I am still struggling with: this makes it possible to generate HVAR deltas without matching phantom points. I'll try to come up with a solution for that. (I think the _add_gvar check that emits log.warning("glyph %s has incompatible masters; skipping" % glyph) may have to be more elaborate.)

The thing is, I just realized this gvar behavior is also useful when you want to have deltas for metrics but not for outlines at a location. Yes, this comes from an actual project (when matching metrics of static fonts was prioritized over matching outlines).

@justvanrossum
Copy link
Contributor Author

justvanrossum commented Oct 8, 2020

Thinking a bit more:

  • Ok, I'm actually not concerned about that last use case (metrics deltas without outline deltas), as it appears to make things more difficult than needed. So never mind that.
  • Also: for me it's good enough that the filter ensures there are no advance metrics deltas, so for now I'm not going to worry about the phantom points.

clrpackages pushed a commit to clearlinux-pkgs/fonttools that referenced this issue Nov 17, 2020
…n 4.17.0

Cosimo Lupo (22):
      Bump version: 4.16.1 → 4.16.2.dev0
      otBase/otConverters: add support for 3-byte offsets
      otBase: support FormatSwitchingBaseTable with uint8 Format type
      otData: add new COLR Paint struct definitions, update to latest draft
      colorLib: update builders to latest COLRv1 draft
      colorLib: rename builders to match current Paint format names
      Affine2x3 struct should be inlined inside PaintTransform
      otTables: dump the format name of Paint tables as XML comment
      colorLib: check that values fit fixed or integer types
      colorLib: use IntEnum instead of 'magic' Paint format integers
      builder_test: test buildPaint{ColorGlyph,Transform,Composite}
      C_O_L_R_test: test roundtrip Paint{Transform,ColorGlyph,Composite}
      add {First,Last}LayerIndex to PaintColorGlyph
      define Table.writeNullOffset() in subclasses; add comment as per review feedback
      rename Paint{ColorGlyph,ColrSlice}
      svgLib: handle arc commands with bool flags not separated by space/comma
      swap xy and yx fields in COLRv1 Affine2x3 struct
      WIP: add buildPaintColrLayers
      C_O_L_R_test: undo PaintColrSlice
      C_O_L_R_test: update table's handwritten binary blobs
      Update changelog [skip ci]
      Release 4.17.0

Jens Kutilek (2):
      Add HashPointPen from psautohint (#2005)
      Update NEWS [skip ci]

Just van Rossum (1):
      [varLib] Add designspace lib key for custom feavar feature tag (#2080)

Simon Cozens (2):
      Only stash lookup location if buildLookups_ has cooperated
      Warn developer if subclass needs upgrading

justvanrossum (3):
      Interpret empty non-default glyphs as 'missing', if the default glyph is not empty. Part of discussion over at googlefonts/ufo2ft/issues/408
      Test for 0xFFFF, not 0xFFF, fixes #2073
      fixed formatting

pyup-bot (5):
      Update sphinx from 3.2.1 to 3.3.0
      Update reportlab from 3.5.49 to 3.5.55
      Update scipy from 1.5.2 to 1.5.4
      Update munkres from 1.1.2 to 1.1.4
      Update skia-pathops from 0.5.0 to 0.5.1.post1

rsheeter (8):
      Fix f-string
      Start hooking up revised PaintColrLayers
      Change case of LayerCollector fields per comment
      Don't generate a PaintColrLayers for a list of 1
      Less errorprone message
      Add a test
      Update ttLib/tables to latest spec
      Update to builder per review discussion
gregdavill added a commit to gregdavill/KiBuzzard that referenced this issue Feb 24, 2022
c2ad8570 Merge pull request #2528 from moontypespace/improve_buildStatTable
61ad06fc rename unittest with better name + get rid of redundant code
86e47954 As requested: black Tests/otlLib/builder_test.py
3b1fac04 Renamed unittest as requested by anthrotype
1d51bc2b Changes as requested by Just.
cf6d25cc As recommended from anthrotype I did: $ black Lib/fontTools/otlLib/builder.py
68fa3bbd Cleaning code based on feedback from Just
d77ec968 Update Lib/fontTools/otlLib/builder.py
459f18ab Update Lib/fontTools/otlLib/builder.py
384415f5 Update Tests/ttLib/tables/_n_a_m_e_test.py
4a0b559c Update Tests/ttLib/tables/_n_a_m_e_test.py
d5406fee Update Lib/fontTools/otlLib/builder.py
e968e8fd Based on the discussion with Just and anthrotype: Undo the changes in the name table and extend unittests. If there are inconsistencies in the name table, it's ok to create new name IDs, even if this might not be the most efficient way of creating the name table.
51330723 Get rid of findName and change the function.
ad1d82f8 Some more changes. Not sure about this.
51eda21b Adding more unittests, based on feedback.
6bf842a3 Reduce unittest content and update description.
9028a53d based on feedback 'anthrotype' I use 'windowsNames' and 'macNames' in STAT table functions and 'windows' and 'mac' in name table functions.
b437417b Added the ability to recreate the PS stream (#2504)
6014cd8a based on Just Van Rossum's feedback: replace variables.
512d1a21 cleaning code.
7f21d5ee adding variable platforms
b8792fc9 Based on feedback: undo name table changes.
2a4b4a59 based on feedback, another idea 'force'
42b272e5 fix failing unitest. Look and create only names about name IDn 255 (Private Use Area)
0f17da08 Bugfix: The script to create a STAt table created multiple unnecessary name table entries, because it did not take care a bout existing entries with the same name.
62bc692d adding description
01ba5394 Create failng unittest first.
8a139f92 Merge pull request #2526 from moontypespace/mod_get_current_family_name
8e0aad59 Added my name to the list of contributers.
5986107b based on feedback: Change name and add comments.
8dddbf4a refactor based on feedback.
16499738 Make use of 'Best' in names
6d05b938 fix typo
79360a30 Refactor based on feedback.
1a16b24c Fix unittests
17f4b767 remove wrong test file.
c50f38ed extend name table with getFamilyName, getSubFamilyName and getNiceFullName + unittests
31ba5e6b Bump version: 4.29.1 → 4.29.2.dev0
fb9dcebd Release 4.29.1
b86be357 Update changelog [skip ci]
f3b4c5b0 Merge pull request #2521 from fonttools/fix-round-radial-gradient-circle
5558ccd3 [colorLib.geometry] use math.isclose with relative tolerance to check circle inside-ness
d1eca100 Merge pull request #2517 from takaakifuji/ftpen-transform-fix
5f2c4926 freetypePen: format code with Black
48cbe7b0 freetypePen: prefer FT_CURVE_TAG enums
cd5c16f4 freetypePen: cosmetic changes
9eadd908 freetypePen: fix bits for cubic on-curve
e1c3cdcf freetypePen: raise PenError when missing moveTo
a27789c4 freetypePen: handle rotate/skew transform
69fc06a1 Bump version: 4.29.0 → 4.29.1.dev0
aa8aaae3 Release 4.29.0
624130c7 Update changelog [skip ci]
96ac799c Merge pull request #2506 from fonttools/ufolib-expand-reserved-filenames
48ffc7d9 Merge pull request #2513 from fonttools/colrv1-duplicate-base-glyphs
afc5b0b7 LayerListBuilder: don't emit useless PaintColrLayers of length=1
e68a5a17 colorLib_test: check that duplicate base glyphs share share the same PaintColrLayers
eded2086 [colorLib] remove unused self.slices attribute from LayerListBuilder
036003e8 Merge pull request #2509 from fonttools/remove-win-wait-for-keypress-on-exit
c50cc3e1 Merge pull request #2508 from fonttools/jamo-as-hang-ot-script
7c38f3d3 remove waitForKeyPress on windows
128326cd Expand reserved names and fix illegal characters
f7653a57 Merge pull request #2500 from takaakifuji/rtd-ftpen-fix
88e401b5 Add freetype-py to docs-requirements.txt
a7e330aa Revert "Raise ImportError in __init__"
0e5b5790 Fix example code block formatting in docs
24d356da Raise ImportError in __init__
7b4c6af6 Merge pull request #2494 from takaakifuji/ftpen
c0c354ec Add name to acknowledgements
6c5faa6b Add description to requirements section
98f5fd3d unicodedata: alias 'jamo' script tag to 'hang'
d181ecaa Fix warnings when generating docs
f87f75a4 Replace base64-encoded images with PGM files
c2f389d2 Merge pull request #2495 from fonttools/davelab6-ftCLI-link
3e32646d Merge pull request #2498 from fonttools/pyup-scheduled-update-2022-01-10
072b4c8d Fit to contents when image size omitted
e3bbf39a Move evenOdd to end in kwargs
6f7ef4a8 Prefer single transform matrix over offset/scale
c335fe97 Merge pull request #2499 from fonttools/add-old-uyghur-to-rtl-script
09e2d1d5 unicodedata: update the script direction list to Unicode 14.0
42bc1257 Add reference for PSNR
184a6152 Opt out of running doctest
3f26a130 Add freetype-py to requirements.txt
d399e93d Rename even_odd to evenOdd
2c0ab2a0 Relax assertions for rendering tests
0e880260 Remove unnecessary import in test
a411ecf5 Update reportlab from 3.6.3 to 3.6.5
d0dbbbd3 Rename to freetypePen/FreeTypePen
9a9d0f08 Remove save() method
e3694b60 Fix another typo in docstring
bf45aec9 Fix typo
dd72f7c3 Fix missing call to superclass __init__
e778f2c3 Merge pull request #2496 from derwind/fix-fontName-in-suckfont
176bae31 convert bytes to str
e4c1deb6 Add documentation
f7c29e89 Change arguments for positioning and dimension
1904041d Update Snippets/README.md
288d9074 Stop trying to cache modules pointlessly
10a3ca8e Use freetype-py instead
46c580f0 Fix import in unit test
55dca287 Remove execute permission
e2fad4db Add FreeType-based Pen for rasterisation
892322aa Fix grammar (#2487)
629f44b8 Merge pull request #2484 from fonttools/unicodedata2-14
bd58e66d bump unicodedata2 dependency to 14.0.0
1b431579 Merge pull request #2483 from fonttools/pyup-scheduled-update-2021-12-20
315faa37 Update ufolib2 from 0.12.1 to 0.13.0
c5a8b865 Update sphinx from 4.3.1 to 4.3.2
de869081 Bump version: 4.28.5 → 4.28.6.dev0
80bdd766 Release 4.28.5
31cb002e Update NEWS.rst [skip ci]
9f38d4de svgPathPen: forgot to replace remaining str() with self._ntos()
a80890b4 Merge pull request #2473 from fonttools/merge-noto
7c542684 [merge] Remove most 'from .. import *'
deaf30d1 [merge] Use merger-private namespace in TTFont.__dict__
e6719f4d [merge] Clean up glyphOrder and cmap computation
915c077b [merge.util] Set CFF charset when renaming
30c5a8b7 [merge.layout] Optimize log message interpolation
0f101663 [merge] Report font name instead of number
23f00306 [merge] Save fontfile and fontname on opened fonts for debug purposes
c0e61b72 [merge] Move cmap computation closer to glyph-order computation
8dc3d5b3 [merge] Move layout pre/post-Merge code to merge.layout
01fcec35 [merge] Move renameCFFCharStrings to merge.util
8ee5f267 [merge] Move more code to merge.cmap
3bb1c5b5 [merge] Move cmap code to merge.cmap
4955d83c [merge] Whitespace
fcdde525 [merge] Move options code to merge.options
a5518263 [merge] Move helper dicts to merge.util
99f9e072 [merge] Add merge.unicode
40f9e2cd [merge] Move layout code into merge.layout
eaaeb7ab [merge] Move most tables into merge.base module
bb1e1bdf [merge] Split some code into merge.util
3eff0a47 [merge] Move code into module directory
d2983cce [merge] Add --drop-tables
584c7489 [merge] Downgrade duplicates-resolution missing-GSUB from assert to warn
31dcd03b [merge] Ignore shape of Default_Ignorable glyphs
2e4b8cea [merge] Show tolerance re glyph comparison for empty glyphs' width
b63f6413 [merge] Remove _glyphsAreSame() check
672b4032 [merger] Fix duplicate-glyph-resolution GSUB-lookup generation code
22266631 plistlib: fix PlistEncodable typing annotations to appease mypy
1b8f16b1 [merge] Remove obsolete comment
4de9ffcd [merge] Move CFF.desubroutinize to proper place
13557697 Bump version: 4.28.4 → 4.28.5.dev0
071ea963 Release 4.28.4
051af1fe Update changelog [skip ci]
cc5f2e77 README.rst: add aschmitz to aknowledgments
5af9c74c Merge pull request #2471 from fonttools/svg-pen-round
fe2ba428 Merge pull request #2467 from aschmitz/subset-hotspots
d4b7ff66 merge_test: fix expected .ttx file with correct MarkFilteringSet values
b8615f9d [merge] Merge GDEF marksets in Lookups properly
ed07df39 Die noisily (#2472)
fce1fa2d svgPathPen: add option to customize number formatting (e.g. rounding)
d190a7c2 otTables: no need get LayerRecordCount by name, we already have it in scope
6481cff1 Merge pull request #2464 from simoncozens/demystify-deduplication
d9f9466d subset: speed up subsetting of large fonts
fa0eae66 Don’t put extension lookups into an extension lookup, obviously
f7b86657 Speculatively promote lookups to extension
fef5d578 Merge pull request #2466 from fonttools/pyup-scheduled-update-2021-12-06
57ee514e Update pyobjc from 8.0 to 8.1
a25707c3 Update skia-pathops from 0.7.1 to 0.7.2
c04639af Add comment to demystify deduplication
482a0b96 Bump version: 4.28.3 → 4.28.4.dev0
2d7b76ab Release 4.28.3
0e1a3588 Update NEWS.rst [skip ci]
9b613b67 Merge pull request #2462 from fonttools/fix-subset-colr
de3830ba clarify comment a bit as per review
d89f90f4 subset_test: test COLR subset excludes glyphs resulting from glyf closure
780f2428 subset: when subsetting COLR only include glyphs after COLR closure, excluding glyf closure
32874cb3 subset/COLR: add reproducer for issue #2461
3e0caa88 [docs] Fully document the glyf table (#2457)
f887389d [docs] Fully document the cmap table (#2454)
0f03e652 [docs] Fix sphinx warnings (#2453)
445108f7 Merge pull request #2458 from fonttools/pyup-scheduled-update-2021-11-29
9f6b827a Update scipy from 1.7.2 to 1.7.3
e475b4ad Update reportlab from 3.6.2 to 3.6.3
ea7b1a4a Update sphinx from 4.3.0 to 4.3.1
180bb186 colorLib.unbuilder: fix CLI by deleting no longer existing parameter
5f65d722 Merge pull request #2456 from fonttools/pyup-scheduled-update-2021-11-22
22f170af Update fs from 2.4.13 to 2.4.14
2b8f493f Update sphinx from 4.2.0 to 4.3.0
6cd8bcbc [skip ci] Minor formatting
bc6f748e Bump version: 4.28.2 → 4.28.3.dev0
5b62a884 Release 4.28.2
0a7164a4 Merge pull request #2447 from fonttools/merge-cff-rebased
1fa579f6 [merge] Add CFF merging integration test
40f82a85 [merge] Support --output-file
c20a63a1 [merge] Move test to its own dir
10c05b8e [merge] Remove subroutines debug code
d7c3a967 [merge] Support non-indexed CharStrings
18236ca9 Merge pull request #2440 from dscorbett/dedupe-buildCoverage
e0dc30aa [docs] Improve documentation for fontTools.ttLib.ttFont (#2442)
af9dfc94 Forbid empty classes (take 2) (#2446)
00f37ea6 [docs] Split table docs into individual pages (#2444)
753a841d [merge] Minor and comment
6acf7699 [merge] Don’t process CFF before all other tables
a53ded3b [merge] Don’t create TTFont then throw it away
5299a3cb [merge] Simplify renaming CFF CharStrings
8e9ab24c [cffLib] Move desubroutinize from subset module to CFFFontSet
e5e69852 merge: various cleanups (WIP)
a75e0120 Revert "Revert "Merge pull request #1289 from BlackFoundry/master""
f15ed2da Merge pull request #2448 from verbosus/checksum-comment
9abfc00b Merge pull request #2452 from fonttools/subset-svg
247fa84b only rename glyph element ids when clash actually occurs
155ff607 use any([<list comprehension>]) to avoid short-circuit function with side effect
dbcb9d6c parametrize test_subset_single_glyph_per_svg, as per review
07455790 simplify ranges() generator
66ec30c0 subset/svg: decorate xpath with lru_cache
d45da5df factor out method to resolve href targets as per review
27e40523 encode bytes before fromstring; decode to str after tostring
1d19cc6e add comment for reason not to short-circuit with any()
12ed8b75 simplify and do el.attrib.get('id') as per review
92470ea3 rename parmeter ids => retained_ids for clarity as per review
863c9de5 subset/svg_test: test more complex document with cross-references
a7216ae7 subset: drop svg doc if subsetted to empty
d1f2481f fix invalid escape sequence in GID_RE pattern
361544ff bump lxml==4.6.4 version to latest
a79106d0 add simple subset/svg_test.py
a4df5677 subset/svg: support resolving cross-references and pruning elements
05e6d577 subset: add --pretty-svg option to enable lxml pretty_print
0dc2be3e require lxml to subset SVG
d44af9f2 basic subset.svg impl that simply remaps id='glyphXXX'
16249d1f subset: store original glyphOrder and map from old to new indexes in Subsetter instance
bd47bdae subset: don't drop SVG table, add WIP subset/svg.py stub
425e1afd subset: move _add_method and _uniq_sort to subset/util submodule
0dc2f820 cu2qu/cli: latest ufoLib2 no longer does Font(path); must use Font.open(path)
2e6b0108 Update requirements.txt
e3338bc8 Removed comment about missing “start” optional argument to `calcChecksum`
b29ae800 [docs] Add interrogate configuration (#2443)
8c693081 Bump version: 4.28.1 → 4.28.2.dev0
497c449d Release 4.28.1
e605706c Update NEWS.rst [skip ci]
8d6a7617 minor: fix 4-space indentation from PR 2441
de58709f Merge pull request #2441 from fonttools/i2438
7dd34887 Traverse when there is no layer list
cfa69f24 [otlLib] Remove duplicates when building coverage
a2990a25 Bump version: 4.28.0 → 4.28.1.dev0
c7109c1a Release 4.28.0
63fbd159 Updated NEWS.rst [skip ci]
63738938 Merge pull request #2439 from fonttools/i2438
6144202c Don't crash if there is no layer list
b11d6f79 Merge pull request #2437 from medicalwei/unicode-14
390640a3 update to unicode 14.0
563730f8 Support variable feature syntax (#2432)
c194a18b update codecov gh action to v2
91d78774 ci: pin python to 3.9 for test-cython job
941179eb fonttools help: only show first line of main()'s docstring
d36ac5ca requirements.txt: use brotlicffi on pypy
3181edae Merge pull request #2431 from fonttools/pyup-scheduled-update-2021-10-18
2cda43e8 Update pyobjc from 6.2.2 to 7.3
f1ddecc0 Update ufolib2 from 0.6.2 to 0.11.4
49d0bf3b Update skia-pathops from 0.5.1.post1 to 0.7.1
ee7bed7d Update fs from 2.4.11 to 2.4.13
77832aef Update zopfli from 0.1.6 to 0.1.8
4e325d0b Update scipy from 1.5.4 to 1.7.1
559e1aa3 Update reportlab from 3.5.55 to 3.6.2
a7677740 Update sphinx_rtd_theme from 0.5.0 to 1.0.0
57727752 Update sphinx from 3.3.1 to 4.2.0
20188a0e Merge pull request #2430 from fonttools/svg-compile-reuse-offset
e3bc036c Add tests for SVG table
11c98b04 SVG: don't write extra empty newline at beginning of  SVG table
2967f18e SVG: on compile reuse offsets when doc bytes are same
be8d6e29 SVG: remove old deprecated version1 and embedded colorPalettes
71a986e0 Merge pull request #2424 from fonttools/subset-colrv1-no-cliplist
5c54f4e6 subset: don't try subsetting ClipList if None
6df6db84 test subsetter doesn't fail when (optional) ClipList is empty
a5173b21 Merge pull request #2422 from fonttools/ufolib-speed-up-filename-clash-checking
04664089 Minor: wording
cd32e1d1 Use set comprehension
82700460 userNameToFileName should not have a mutable default parameter
a7e4d865 Use a set for file names for clash checking
df2916af Merge pull request #2417 from fonttools/drop-3.6
76ac638c [subset] Add a couple None checks
37b2687a test on latest pypy that supports python 3.7
64299aa4 drop Python 3.6, require >= 3.7
b4a789ee Bump version: 4.27.1 → 4.27.2.dev0
744bb471 Release 4.27.1
2ce48d5a Update changelog [skip ci]
19ab25d4 Merge pull request #2411 from simoncozens/fix-fix-contextual-overflow
d01fe58d Merge pull request #2413 from simoncozens/fix-orthogonal-line-intersections
54e307ea Fix docTests
d9ce4209 Test for typo case
ed0cf2fa Typo
13f6cbda Fix doctests
1cc8bf08 Fix two problems when handling orthogonal lines
ed833dab Don’t complain about format 1 lookups we couldn’t even build
3a7c9160 Merge pull request #2404 from simoncozens/fix-contextual-overflow
f53a75fb Check for overflows in a loop
c4003fd9 Bump version: 4.27.0 → 4.27.1.dev0
eab1d6f1 Release 4.27.0
f68bf0bc Update changelog [skip ci]
f9b927cd Fix chained contextual builder overflow
a3f988fb Merge pull request #2398 from fonttools/vid
d8673975 Remove residual allowVID stuff
3eef446e [ttFont] Address review comments
ca06c953 [ttFont] Assume GlyphOrder is never modified after setting
d5de11d8 [ttFont] Make setGlyphOrder() clear reverseGlyphOrderMap
e5bf2a7f [ttFont] Apply review comments
7a22c0fb [ttFont] Add getGlyphIDMany(); use in otLayout
3ec76990 [ttFont] Add getGlyphNameMany()
89fe3bd3 [Tests] Add test for virtual GIDs
322a7b2e [ttFont] Remove allowVID
9988054f [ttFont] Remove requireReal
d0d082e7 [otTables] Allow virtual GIDs in Coverage/ClassDef reader
0398d8aa Merge pull request #2400 from fonttools/py23-cleanup
5e3774bd Remove py23 from the documentation
232b2ccb Move the rest of py23 module to textTools
99743c14 subset: explicitly subset ClipList, avoids warning when lazy-loading
f04cb29f Bump version: 4.26.2 → 4.26.3.dev0
02cd740c Release 4.26.2
8f34fcc5 Update changelog [skip ci]
6d3bd949 Merge pull request #2390 from fonttools/fix-colr-composite-mode
d025bb8b fix NameError while decompiling ClipList
9f7a4ea3 otTables: fix CompositeMode enum missing PLUS mode
627d8e6e fontBuilder: pass through varIndexMap and clipBoxes parameters in setupCOLR
032befd2 Bump version: 4.26.1 → 4.26.2.dev0
6a1eaa1f Release 4.26.1
f18ccceb Update changelog [skip ci]
e49c1df6 Merge pull request #2386 from fonttools/transform-vector
9c378620 add Transform.transformVector method
3047ce00 Bump version: 4.26.0 → 4.26.1.dev0
5f25059c Release 4.26.0
12fc4dd9 NEWS.rst: Add note about dropping support for python 3.6 from next release [skip ci]
85f2bf9a Update changelog [skip ci]
e161bbc9 Merge pull request #2384 from fonttools/newline-2021
094a40ca Revert "Deprecate and ignore newlinestr"
01b0180c Revert "Deprecate and ignore ttx’s --newline option"
745a6a6e Merge pull request #2379 from fonttools/colr-clip-list
58ac5a9f have ClipList and ClipBox format start at 1, not 0
5cb288f3 Merge pull request #2382 from fonttools/ignore-overlap-errors-option
3042f129 Deprecate and ignore ttx’s --newline option
5af178ac Deprecate and ignore newlinestr
000bf817 Default to "\n" for newlinestr instead of None
97104337 instancer: add --ignore-overlap-errors option
800bf85b add ClipList.Format so we can bump when we finally get >16bit GIDs
9876f3c5 address review comments
bee2c85f [colrv1] otData: define ClipList, ClipBox, etc.
c552a77f Bump version: 4.25.2 → 4.25.3.dev0
f3a90309 Release 4.25.2
1c100124 Update changelog [skip ci]
2f1fbd63 Merge pull request #2372 from fonttools/colrv1-var-idx-map
b01ea60e [ttLib] when importing XML, only set sfntVersion if the font has no reader and is empty (#2376)
c96c3ef8 Merge pull request #2359 from fonttools/colrv1-transform-reduced-prec
b74ffb4c test roundtripping variable COLRv1 with a working VarIndexMap and VarStore
29a2ebf8 omit default VarIndexBase
11871673 [subset] fixed CPAL pruning after removal of ColorIndex
6ba01636 fix C_O_L_R_test.py following recent changes
e5d0c00f fix colorLib tests after adding VarIndexBase, ColorIndex removed, etc.
e8e2aa53 remove unused Variable{Float,Int} namedtuples from otTables/otConverters
0eb27e98 Remove and inline {Var,}ColorIndex
40897a15 Define DeltaSetIndexMap table used for COLR.VarIndexMap
60f07241 remove wrapping around from Angle converter, let the struct.error propagate
12d66ded Bump version: 4.25.1 → 4.25.2.dev0
8eea9646 Release 4.25.1
c467bd2f Update changelog [skip ci]
bd2705a4 Merge pull request #2366 from fonttools/fix-tt-point-pen-move
934349a9 ttGlyphPen: handle open contours starting with 'move'; treat them as if they were closed
0dc2a2a1 ttGlyphPen: test that open contours work with TTGlyphPen
7225ac22 Update to reflect COLR v1 FWORD center and offset to transform
0e994749 otData: reduce precision of specialized transforms, use F2Dot14 for all angles
bb4c3e27 otConverters: define Angle and VarAngle, fractions of half circle encoded as F2Dot14
f0569124 {fixed,round}Tools: factor out nearestMultipleShortestRepr
aae11e45 Bump version: 4.25.0 → 4.25.1.dev0
696b7ac4 Release 4.25.0
4602a9e7 Merge pull request #2326 from daltonmaag/compact-gpos
731845c1 Update NEWS.rst
2ff3159a Mark the environment variable as experimental
52717961 Refactor the Cluster class to be top-level instead of nested the function
016aa4cc Add docstring to snippet
d1c46f9d Clarify comment with the plan vs the actual implementation
7860dd5f Add tests that optimize block matrices
ef67839f Fix typing error
3b34b228 Fix fonttools otlLib.optimize command line
604513a3 Fix a few comments
bba5e8b2 Add optional compaction of GPOS PairPos subtables in otlLib.optimize.gpos
19fe936b Update changelog [skip ci]
47b45c0d Merge pull request #2355 from fonttools/tfmLib-docs
83ed0b4f [Doc] Add tfmLib
8d385238 Merge pull request #2354 from fonttools/tfmLib
a7ac2de5 [tfmLib] New library for reading TFM files
383e70fc [sstruct] Accept pad byte format character
bdd462f0 [sstruct] Accept bool format character
617aee7f [sstruct] Minor
6f76bc36 Merge pull request #2353 from fonttools/sort-gvar-tuples
a0bd872f TupleVariation: make shared tuples order deterministic
f8b232a2 Merge pull request #2351 from googlefonts/shared-tuple-order
7f9e2c38 sort shared tuples produced by Counter.most_common()
c8473264 Merge pull request #2348 from fonttools/paint-scale-variants
d0d59d2f Add PaintScale* and Paint{Rotate,Skew}* variants
e3630ac3 Merge pull request #2346 from fonttools/rename-colr-v1
1cb7e36b COLRv1: rename otData structs to remove 'V1' to match updated draft spec
414c3733 Merge pull request #2344 from takaakifuji/newer-gspp-from-fontpens
58d6ccf8 Fix math.atan2 call
4c22d11a Keep GuessSmoothPointPen in sync with fontPens
f64f0b42 Consolidate bit_count / popCount methods
35dae02d Merge pull request #2318 from emuller-amazon/main
e2d99195 Address pull request comments
1df4f1ea subset: drop empty features unless 'size' with FeatureParams table
6a97d4cf subset_test: check we keep empty 'size' but drop empty 'ssXX' features
add77ca3 Report error is post table version 2.0 is too small
bb5d5930 Merge branch 'fonttools:main' into main
ee2aa264 Bump version: 4.24.4 → 4.24.5.dev0
b3acb8b9 Release 4.24.4
b59c4f52 Update changelog [skip ci]
cf57ee0b Merge pull request #2323 from fonttools/fix-instancer-valuerecord
b8ce9996 [merger] make getattr(valueRecord, *) default to 0 if it has Device tables but corresponding value is not set
dafce3ff instancer_test: add test with PairPos ValueRecord with XAdvDevice but no XAdvance
7af43123 [otBase] Tiniest cleanup
96f0169d Bump version: 4.24.3 → 4.24.4.dev0
9d5c3adc Release 4.24.3
862c61eb Update changelog [skip ci]
adbe4c3d otTables_test: mixed tabs and spaces
d1e2e0e3 otTables: ignore Format attribute in split.*Subst overflow-fixing methods
97bbcc0d Merge pull request #2317 from fonttools/readme-releases
61daa451 mention release --minor, --major and --sign options
6d8a82c3 make title underline long enough
4efc7b1f README: add instructions on how to make a release
212bb30c Fix parsing of post tables version 2.0 (#2314)
b8762e07 Bump version: 4.24.2 → 4.24.3.dev0
b2fcf307 Release 4.24.2
0be8e86e Update changelog [skip ci]
57c34dfc Merge pull request #2311 from justvanrossum/fix-some-warnings
6c938199 Merge pull request #2315 from fonttools/ttglyphpen-typing
c995411a leave self.glyphSet alone
1d9f267a make glyphSet required.. but Optional :)
3e0a6542 Use r-string instead of escaping backslash
d4408baf ttGlyphPen: fix typing annotation for glyphSet parameter
d0bcae94 ttGlyphPen: run black
0c4adad8 Bump version: 4.24.1 → 4.24.2.dev0
dc689738 Release 4.24.1
bf02f741 Update changelog [skip ci]
11d86b84 Merge pull request #2313 from fonttools/fix-subset-single-pos-no-value
926f7218 return True from SinglePos.prune_post_subset to not change semantics
defe0f99 subset: don't prune_post_subset if no SinglePos Value
447116fd Add test to reproduce issue 2312
f99f1bbc fixed two instances of 'DeprecationWarning: invalid escape sequence'
604bfdb2 Bump version: 4.24.0 → 4.24.1.dev0
c77e4e0d Release 4.24.0
ba3b0868 Update NEWS.rst [skip ci]
0cb2bea3 Add TTGlyphPointPen (#2205)
edd97bcd Bump version: 4.23.1 → 4.23.2.dev0
64cf7719 Release 4.23.1
1c20621c Update changelog [skip ci]
cc5c9926 Merge pull request #2308 from fonttools/fix-colr-subset
6e231505 subset: prune v0 base glyphs and layers when none are left after subsetting COLRv1 table
f2df149d COLR: set {BaseGlyph,Layer}RecordArray to None when no colorGlyphsV0 in populateCOLRv0
2981e5f6 subset: test mixed COLR v0/v1 with subset excluding all v0 glyphs
2aaeba66 Bump version: 4.23.0 → 4.23.1.dev0
adaca106 Release 4.23.0
fa081df0 Update changelog [skip ci]
465c327b Merge pull request #2300 from fonttools/fix-varlib-merger-errors
72004fcd VarLibMergeError first parameter must be a Merger object
053ec9fb Merge pull request #2306 from Eigi/main
08e3c749 Merge branch 'fonttools:main' into main
c51d3aa0 Merge pull request #2303 from fonttools/glyphclass-by-null
9abd276e Merge pull request #2305 from fonttools/fix-deprecated-getPhantomPoints
616fc065 add deprecation warnings for old getPhantomPoints, etc.
3c98250d g_l_y_f: fix undefined name 'topSideBearing'
20c4a3ce test if issue #2295 is fixed
36a1c551 Update changelog [skip ci]
6adbf188 Merge pull request #2288 from fonttools/remove-overlaps-print-glyph-error
fe0eaa65 Merge pull request #2304 from simoncozens/model-gardening
b41b0624 We are iterating over supports, not locations, here
2aa1a6dd Remove else-after-return
5ac80941 Reformat with black
1526b9e0 Another unused enumeration
f711b654 Index was never used
1c509f93 Avoid unnecessary intermediary variables
ab328b5e axisPoints is not used outside the sort function
f6d2ff8d [feaLib] Allow substituting a glyph class with NULL
84d77e5c fix for issue #2299 translate leading backslashes of UNC path to forward slashes.
e0ef55ea Merge branch 'fonttools:main' into main
31ab3aae Merge pull request #2285 from fonttools/varStore-32bit
9825ab09 Fix for #2293: allow more than one lookahead glyph/class in contextual positioning with "value at end" (#2294)
f21091b6 [otBase] Assert array.array('i').itemsize
03e97edf [varLib.varStore] Use binary notation for bit constants
98e2bf55 [varLib.builder] Document bit-tweedling
b8963256 [otBase/otConverters] Add back array index to exception in writeArray()
d601951e [otTables] Default varIdx should be 0xFFFFFFFF (#2298)
b0e24384 minor refactorings following review comment
2af246b7 Merge branch 'main' of https://github.com/Eigi/fonttools into main
f05ae63f test if issue #2295 is fixed
80598d3c skip removeOveraps_test if pathops can't be imported
27e8943d add test for pathops simplify bug workaround
d4d3d954 split simplify logic to separate func for easier unit-testing
9c18e2a0 Merge pull request #2292 from Eigi/main
84b85139 removeOverlaps: try rounding to ints before simplify to workaround skia bug
1091ff5e #2289 fix for typo in typo in ttLib.tables._g_l_y_f.py
83e044f4 Merge pull request #2291 from fonttools/fix-varlib-merge-error
6b9b2325 VarLibMergeError.stack is a list of str, not a str
26363258 font placeholder doesn't need an fvar table
747f9f49 fix struct vs array mismatch: for array 'l' is 8 bytes, not 4. I'm not 100% sure this is correct for all platforms.
d3fd46e3 uncomment failing tests
e13b7815 removeOverlaps: print glyph name when pathops.simplify fails
ad438931 adding compile/decompile step; this currently fails for the 32-bit tests (which are therefore commented out)
267ab2ba add 32-bit master value tests
22dda546 use optimizer
7de2f347 add tests for OnlineVarStoreBuilder/VarStoreInstancer
a7fd2029 add 32-bit tests to test_buildVarData_optimize
eba058d4 add 32-bit tests to test_buildVarData_no_optimize
2100a96e Merge pull request #2284 from fonttools/pen-error-maintenance
8caf2f0d Merge pull request #2286 from fonttools/mutator-round-lsb
a1c6c184 [mutator] Round lsb for CFF2 fonts as well
0549b27a [varLib.varStore] Implement 32bit VarStore optimization
93501667 [varLib.varStore] Remove use of array.array
e454e962 [varLib.builder] Implement building 32bit VarStore
802e3636 [otConverters] Support read/write of 32bit VarStore
a2f34fdf [otConverters] Rename VarStore shortCount to wordCount in local variables
7d85b779 [otConverters] Minor in VarStore padding
0b20c196 [otConverters] Implement writeArray for GlyphID
8a63c06b [varLib.instancer] update instantiateVariableFont docs
b449686a Use TypeError for not enough points
bd648ea1 [otConverters] Use array read/write in VarIdxMapValue
db6171df [otBase] Actually call conv.writeArray()
81ca0530 [otBase] Add array reader/writer for UInt24
a8af308d [otConverters] Use array-writers for ItemVariationStore payload
36dd271c [otBase/otConverters] Add array-writers for int types
1fd2a44b [otBase] fix array-reader to return list, not array.array
2496dcf9 [otConverters] Add array readers to int converters
1163fe68 [otConverters] Use array readers when reading ItemVariationStore payload
df0d6bba [otBase] Add array version of various int readers
2831096e Introduce PenError, use instead of asserts
bc2bbe6a RecordingPointPen: handle identifier args
cf8deef4 Bump version: 4.22.1 → 4.22.2.dev0
61b62626 Release 4.22.1
5d16f107 Update changelog [skip ci]
8064028e Merge pull request #2277 from fonttools/fix-aalt-empty-lookup
2830260a another test to check that empty lookups blocks are skipped
9959916c Merge pull request #2275 from fonttools/subset-device
3a6ebb8d [subset] Fix drop-hints implementation in Device tables
f514a682 [varLib.merger] Use Value.getEffectiveFormat() instead of .getFormat()
9b5bc9e1 feaLib: ignore empty named lookup reference
bd618d01 add test to repro AttributeError when getAlternateGlyphs for empty lookups
ae982abf Merge pull request #2274 from googlefonts/mvar_fix
1bb31832 Add tests for lazy loading of MVAR with more than 8 value records.
830cff62 [ttLib] Add Value.getEffectiveFormat()
e0f1c15a Include record size adjustment.
8ab6af03 Merge pull request #2266 from fonttools/varLib-phantomPoints
438dcb5a Update Lib/fontTools/varLib/instancer/__init__.py
a43690ef [varLib.instancer] Add back instantiateGvarGlyph()
51a76e31 [glyf] Add old setCoordinates, getCoordinatesAndControls, getPhantomPoints
a756bb01 [glyf] Prefix setCoordinates, getCoordinatesAndControls, getPhantomPoints
6aa9d192 [varLib] Use TTFont.get() in a couple of places
24140e15 [glyf] Add default=None to glyf.get()
d12d7fbb [glyf] Remove unused code
15c34e9b [glyf] Add .get() which is like __getitem__() but returning None if not found
f80e19da [varLib] Minor optimizations in maxp and TThinting
f3876205 [varLib] Reduce TTFont.__getitem__() in _merge_TTHinting
75ef521f [gvar] Reduce TTFont.__getitem__() calls
3cbbc25d [glyf] Remove useless assert in setCoordinates()
34b5ff62 [varLib] Optimize getPhantomPoints()
ddf2f036 [glyf] Remove useless assert in getPhantomPoints()
ee5ecd19 [varLib/glyf] Remove fallback vertical phantom-points code
3cfc87be Merge pull request #2261 from fonttools/faster-GlyphCoordinates
dc0600c7 [TupleVariation] Fold call to hasImpact() into getUsedPoints()
bcd4a62f [TupleVariation] Use b'' instead of NotImplemented for "use shared points"
ef0d695d [TupleVariation] Remove unused usesSharedPoints return from tv.compile()
b3a9ef55 [GlyphCoordinates] Use double, not float, again
85c9102d [TupleVariation] Use Counter() instead of defaultdict() for sharedCoords
f3f16285 [TupleVariation] Comment
1650c15b [TupleVariation] Minor shift more code into getUsedPoints()
f7b66c7a [VariationData] Fix tests after recent changes
050b07d3 [TupleVariation] Optimize compileDeltas()
78e9bc7b [TupleVariation] Optimize compilePoints()
e0513cfe [TupleVariation] Avoid recompiling pointData
7051829f [TupleVariation] Compile point set counts outside of key()
683e8987 [TupleVariation] Optimize point-sharing
f40e522c [TupleVariation] Speed up case of useSharedPoints=False
92bf782e [TupleVariatin] Minor optimization of sharedPoints
8dae627d [TupleVariation] Rewrite getUsedPoints() as list comprehension
12c88cc3 [TupleVariation] Remove use of byteord()
c88aab15 [TupleVariation] Minor optimization in compileDeltaValues_()
ea505154 [gvar] Avoid a copy in compileGlyph_()
997b976e [TupleVariation] Rewrite assertion faster
b811c3f3 [gvar] Remove use of bytesjoin()
67794827 [TupleVariation] Use defaultdict in compileSharedTuples
9b379bbb [TupleVariation] Further optimize compileCoord()
48e827aa [TupleVariation] Minor optimization in compileCoord()
416ff891 [TupleVariation] Minor optimize in using sharedCoordinates
f40ca257 [GlyphCoordinates] Remove isFloat() again
80069e96 [py23] Make tobytes() always return bytes even for bytearray
ec80f243 [TupleVariation] Remove use of bytesjoin()
f8d54b1e [TupleVariation] Minor rewrite bound checks
faaac34a [GlyphCoordinates] Add back isFloat() and deprecate it
c206341b [GlyphCoordinates] Inline _i()
645a3eb1 [GlyphCoordinates] Use float.is_integer()
c5e3fca6 [GlyphCoordinates] Format
5c815a6d [TupleVariation] Do away with another bytesjoin()
a715f571 [TupleVariation] Optimize compilePoints()
6abf8680 [TupleVariation] More bytes optimization
250e5988 [TupleVariation] Micro-optimize away a lambda
62a89bc3 [TupleVariations] Optimize serialization loops
b1b672e1 [TupleVariation] Remove a few hot asserts
4cbf6ae1 [TupleVariation] Minor
d5d771b2 [TupleVariation] Use array.array to serialize multiple deltas
1e6b20cc [TupleVariation] Don't round deltas (again!)
94052446 [TupleVariation] Use bytearray() instead of io.Bytes()
869f0050 [glyf] Use bytearray() instead of array.array('B') for flags
db918e33 [glyf] Use bytearray() in trim()
3a80b568 [py23] Change tobytes() to accept bytearray
33d9e3d6 [subset] Use bytearray() instead of array.array('B')
492118c7 [subset] Set glyph.data to b'' instead of ''
bbbc877a [glyf] Remove several bytes slicings
8284af6b [TupleVariation] Use list(coordinates) instead of coordinates[:]
c23a540d [GlyphCoordinates] Micro-optimize _i() access
b5af979f [glyf] Minor
1f3c23e6 [glyf] Remove most use of py23 byteord etc
693bf045 [glyf] Remove reprflag()
9be029c0 [glyf] Remove unnecessary use of byteord()
fb196fdf [glyf] Avoid a copy during decompile of flags
e328ee02 [glyf] Use memoryview() in decompile for larger glyphs
4ff6b339 [glyf] Use bytearray() when compiling
3252ed10 [GlyphCoordinates] Remove unused .isFloat()
b63b8ceb [GlyphCoordinates] Remove internal dual representation
acc56bdf [GlyphCoordinates] Faster .zeros()
7ef101cc [GlyphCoordinates] Speed up .zeros()
f6e85774 [GlyphCoordinates] Revert back from double to float
e9acd963 [GlyphCoordinates] Store int data as 4byte, not 2byte
8be2f49b [GlyphCoordinates] Speed up __imul__()
96690de9 [varLib] Optimize out multiplication by 1 when computing deltas
77abdad0 [GlyphCoordinates] Move identity check to scale() / translate()
45e94ff2 [GlyphCoordinates] Speed up __isub__() and __iadd__()
3892ece5 [GlyphCoordinates] Remove Jython workaround
cbb33d8a Merge pull request #2259 from fonttools/subset-cpal-0xFFFF
2136aac0 subset: fix pruning unused CPAL palettes when 0xFFFF is present
25601895 Bump version: 4.22.0 → 4.22.1.dev0
c7127572 Release 4.22.0
8735c86e Merge pull request #2254 from fonttools/update-news
fa28e22d Update NEWS.rst
59e4e88d Merge pull request #2249 from fonttools/CFF2fix
bf1b4800 Merge pull request #2251 from justvanrossum/improve-ttfont-getitem
21826f52 Merge pull request #2253 from justvanrossum/fix-536
c7e73679 TTFont.save: create file on disk only after compilation to tmp stream succeeded. This fixes #536
6ff4444c refactored TTFont.__getitem__ somewhat: don't do major work in an exception handler; factor reading table from file into separate function
41da60f1 Add missing dict operators to CFF2
3ce843e4 Merge pull request #2221 from fonttools/subset-PairPosFormat2-ClassDef2-klass0
a4f42d3b subset_test: add tests for PairPos2 useClass0 #2221
8c59d4be [subset] Improve PairPosFormat2 subsetting
5fc65d71 Misc py23 cleanups (#2243)
a363bd75 Merge pull request #2241 from chrissimpkins/py23-transition-basestring
7abf2e4c transition `basestring` to `str`
c2ba06dc Merge pull request #2237 from fonttools/fix-pair-pos-1-value-records
1e83650d [otlLib] Ensure built SinglePos ValueRecords are padded with 0s
d961ef5e [otlLib] Ensure built PairPos2 ValueRecords are padded with 0s
b1ca1673 [otlLib] Ensure built PairPos1 ValueRecords are padded with 0s
0e5fe2d1 Merge pull request #2236 from fonttools/feaLib-no-compile-fixups
67bbabcd Remove run-tests.sh
d0aaf1bc [feaLib] Set RangeStart/RangeEnd as float
7297659c Merge pull request #2238 from fonttools/no-unused-Format
cc761690 Test that G* table compilation does not change data
6243a24a [otBase] Delete .Format if was introduced by .preWrite()
2a483f98 [Tests] Fix most test expectations for AlternateSubst .Format removal
03d0a620 Remove .Format from MultipleSubst as well
8f79235d [Tests] Remove hack after Coverage .Format removal
d6bdfba5 [Tests] Fix more test expectations for SingleSubst .Format removal
6b2b2f49 [Tests] Fix most test expectations for ClassDef[12] .Format removal
9ac1f390 [Tests] Fix most test expectations for AlternateSubst .Format removal
b62170e8 [Tests] Fix most tests expectations for LigatureSubst .Format change
61b06a7f [Tests] Fix most tests expectations for SingleSubst .Format change
de81aae1 [Tests] Fix more tests expectations for Coverage/ClassDef .Format change
975f85ed [Tests] Fix most tests expectations for Coverage/ClassDef .Format change
3d578dd1 [varLib.merger] Adjust for removal of Coverage / ClassDef .Format
69918d29 Revert "[varLib.merge] Fix tests"
10fe1c26 Don't write Format for Coverage, ClassDef, Single/Alternate/LigatureSubst
2089d051 Merge pull request #2229 from fonttools/varLib-otlLib-noreload
30ade474 Update test data
959937da Merge pull request #2231 from chrissimpkins/py23-dep-warn
3e252d8c [py23] change deprecation warning from "next release" to "future release"
0faf01d5 [otlLib] Generate Value1 / Value2 if respective formats are non-zero
0aeb7f48 Merge pull request #2226 from simoncozens/fix-merger-errors
baf6c5d1 Remove pass if we have a docstring
5d7c826b Make CFF merge errors inherit differently
bfe4bad3 Use kwargs and explicit stack
23cb8b98 More tests
8ba31b0a Improve error message
956087eb super doesn’t magically call its own methods
3e0a87a1 Shorten exception names
6c547864 Use individual exception classes instead of enum
02ebcf80 Redundant computation
bfc4ac95 Compare enums by identity
b26728d3 Specifically catch VarLibMergeError
8a6e3087 Use pytest exception handling
539b3cd7 Special case must actually be special-cased
939962f8 Check we can actually get a name
2687c12c Merge pull request #2225 from simoncozens/otllib-doc-nit
f2f8a6a4 Fix docstring too
0a1aa19c Test for better error message
1bf3ccce Provide additional information for a common failure
46bd7a7e Many fixes...
5bac8437 Ensure TTF list is correct
e2a859d6 Ensure table name is in error message stack
7fc2e37e Try harder to get a name from file being merged
d0101eff Correct otlLib documentation
4cdf3312 Merge pull request #2223 from simoncozens/better-merge-errors
1abfbb6c Explain merge errors in designer-friendly terms
c321fbe3 [subset] Call VariationStore.subset_varidxes() as method
882d09ca instancer: log.warn is deprecated
d80779d7 py23_test: remove py27 test always skipped now
d89b3fbe Merge pull request #2216 from fonttools/jh-disambiguate-varlib-merge-errors
50fb04fd [varlib] use VarLibCFFHintTypeMergeError for hint merging
aafc8140 [varlib] Add VarLibCFFHintTypeMergeError
062b7c43 Merge pull request #2214 from fonttools/varLib-round
8b52b107 Merge pull request #2208 from simoncozens/refactor-variationmodel
ed6164a4 [varLib.cff] Round deltas using bankers round as well
d56b8441 [varLib] Round outline deltas using banker's round as well
6a8821d9 Revert "Use Vector in some places where it improves the clarity of the code" (#2215)
07a7dd3e [varLib] Make newly-added round arguments keyword-only
f5ef0b51 [varLib] Round most deltas using bankers' round, not otRound
606b072f [glyf] Add round=otRound parameter to GlyphCoordinates.toInt() & __round__()
68004b8f [varLib] Shift most (all?) delta-rounding to VarModel
77acdbce [glyf] Remove stale comment about Python 2
fdd82670 [varLib.models] Add optional rounding to VariationModel() relevant methods
3a9a2bd4 [misc.roundTools] Add noRound(), maybeRound(), and roundFunc()
abc1ba07 [misc.roundTools] New module; move otRound() here
0d3ce2ca Use Vector in some places where it improves the clarity of the code (#2206)
e41c3b8b Merge pull request #2212 from fonttools/mutator-trivial-fixes
53b13263 Merge remote-tracking branch 'origin/main' into mutator-trivial-fixes
ed77aeae [cff] Speed-up rounding
28fae1d9 [cff] Simplify rounding logic
ff46e283 [varLib.plot] Reorder imports to make missing library easier to detect
8b568640 Merge pull request #2209 from simoncozens/document-varlib-terminology
a0d6ca3b ReStructuredText nits
516d0f7d Add definitions for varLib-specific terms
4dd83e0d Make terminology consistent
e9b35d03 Split off box-splitting/support code to separate function
8c852256 Separate computing delta weights
07a5e2de Merge pull request #2201 from justvanrossum/revamp-vector
dec5bb55 [varLib.instancer] Grammar
a93ced04 [varLib.mutator] Simplify maxp handling
23e5d4eb [varLib.mutator] Fix typo: maxInstructionDefs -> maxStackElements
9c9ab5ac removed info-less doc string
44b7560f move Vector to its own submodule, and rewrite as a tuple subclass
825b5044 Bump version: 4.21.1 → 4.21.2.dev0
cfd87d7b Release 4.21.1
a33df754 Update changelog [skip ci]
25b4dd57 Merge pull request #2200 from justvanrossum/fix-issue-2198
2429a187 Revert ABC changes to Pens, fixes #2198
4de2a407 Bump version: 4.21.0 → 4.21.1.dev0
a3377527 Release 4.21.0
6da59abb Update changelog [skip ci]
f49ad5a9 Merge pull request #2192 from simoncozens/beziertools-intersections
a775b6e1 Fix _aligment_transformation as suggested
52b742fd Merge pull request #2189 from fonttools/instancer-name
52fec53d Drop nameID 25 if instantiating a static font
a7913ef5 Add test for Regular fallback
d1a8e1ee fall back to 'Regular' when no subFamilyName
0c92d33b fix sub-string check in update uniqueID
fcfcb78c make docstring shorter; fix _isRibbi
fcc02826 Implement Cosimo feedback from previous pr
2be13d50 make instancer into a package dir and move all names-related funcs to submodule
0280eb36 Parametrize updateNameTable tests
336e7827 Implement Cosimo feedback
daf6427b Implement Adobe ps naming for instantiated instances
de38c9ce Tidy up variable name and run through black
5eac886e Only create typographic subfamily name if there are nonRibbi tokens
29e4ff98 instancer: implement Cosimo feedback
bef1d08c instancer: updateNameTableStyleRecords use strings as input instead of axis values
11f0ade4 cleanup _updateUniqueIdNameRecord
0bcbbfdb instancer: reuse existing instantiateSTAT func
9a72311d instancer: refactor updateNameTable
b3284750 wip instancer: update uniqueID
ce1d8a99 instancer: Add axisDefaults to axisLimits
69c86679 instancer: sort axisValues so format 4 are dominant for constructing names
0b639c29 instancer: use bit mask for axisValue flags
b4b1ce35 instancer: include attribute axisValues
f89c01d2 instancer: only updateNames if axisValue with specified coord exists
2fd93405 Refactor axisValuesFromAxisLimits
78f6c2ae instancer: add test for partial instance name
4cd0fb80 Fix typos
b502471a wip instancer: support format 4 axisvalues
b9560751 WIP instancer: update static font nametable
60c1ee01 Black whole module
1a3478da Fixes from review
d4ec4fff Merge pull request #2039 from fonttools/feaLib-STAT
9aeb4828 black
29ff42d1 Reusing otlLib buildStatTable() in feaLib
0434b1a9 Add feaLib support for STAT table
f6a62e0d Merge pull request #2164 from fonttools/pen-maintenance
839c57a5 Remove some Python 2 vestiges from pen tests
f7546baf Complete implementation of TTGlyphPen
8a55182f Make NullPen inherit from AbstractPen
ab1883da Turn AbstractPen and AbstractPointPen into ABCs plus typing
4fb22eed Merge pull request #2193 from moyogo/feaLib-indent-anchors
2ef7964e If we swapped the segments, we must swap them back when returning results
2563b1df [feaLib] black ast.py
537fabce [feaLib] update tests for indented anchors
e47101d6 [feaLib] indent anchor statements
a12669c9 Merge pull request #2194 from fonttools/fix-master-main
b77d520b remame 'master' -> 'main' in worflows/test.yml
1795ee98 Address various feedback
fdceeee0 Unnecessary parens
c082616c Make hacky uniquifying thing more explicit
80a3227f Raise error in unknown curve degrees
6a223e5f Rename parameters
2e211194 No harm in handling all segment types here
c17b1c9e Oops, this has a different interface to the curve-based ones
01957a9b Intersection and point-at-time functions from beziers.py
8e42f693 Add function to compute bounding box area
51882b3d Update NEWS.rst
9c422822 Bump version: 4.20.0 → 4.20.1.dev0
f426430d Release 4.20.0
0219c487 Update changelog [skip ci]
bac9a1cb Merge pull request #2185 from simoncozens/fontbuilder
6fa5aa5e Merge pull request #2177 from fonttools/subset-colrv1
09af39ab subset: donwgrade COLRv1 to v0 if all v1 glyphs are dropped
55c9a0a1 update subset_test.py using new COLRv1 dict format
056aba8e prune unused CPAL palette entries after subsetting COLR glyphs
109c07d1 subset: support subsetting COLRv1 base glyphs
4dcc7f83 otTables: add Paint.traverse method
4036512a C_O_L_R_: factor out method to convert v0 layer records to dict of list
dda10e0f WIP: add test_subset_COLRv1
7878c32a Merge pull request #2182 from fonttools/colrv1_static
404072ee Fix descriptions in Lib/fontTools/ttLib/tables/otData.py
7abd2349 Update tests for new formats
2df3fed9 Prevent otConverters from ignoring the 'template' type when field name is also a type
f1ecccbb Begin updating for static vs variable versions of COLR v1 Paint
6106bf7c Merge pull request #2181 from fonttools/colr_to_from_dicts
5316ae4b Add test to expose missed otRound + fix
0353c809 Update COLR build fns per review feedback
ec77db36 Update Lib/fontTools/colorLib/builder.py
4fb666fe Remove tautology
3871537a Update test expectations; multilingual names got shared instead of duplicated
1c259eee Let instances optionally be InstanceDescriptors
285f861e Localize instance subfamily name too.
d470ea48 Typo
04f04474 Reformat with black for ease of further maintenance
4a8617fc New setAvar method
731f6a31 Take AxisDescriptor (or objects conforming to its interface) in addFvar
8a58225e Typo
c51c61f4 Remove py23isms
9e03da03 Support localised axis names
567aadcc Document setupFvar
e542b60d colorLib: add generic TableUnbuilder, reverse of TableBuilder
cf4a4087 Generic build fns
587b4868 Merge pull request #2179 from simoncozens/document-ttglyphstuff
e7ea2b01 Merge pull request #2175 from fonttools/move-paint-format-enum
9cb126b1 Document expected arguments for _TTGlyphSet, _TTGlyph and TTGlyphPen
df672a7a move PaintFormat enum outside of Paint class nested scope
82c32cbf C_O_L_R_test: fix incorrect NumLayers
f0374be5 Merge pull request #2171 from fonttools/colorLib-unbuilder
4b173013 unbuilder: get Format attribute directly from the Paint instance
e20ccfcf add unbuildPaintSweepGradient
22d290b0 Merge remote-tracking branch 'origin/master' into colorLib-unbuilder
708cb9ae Merge pull request #2172 from fonttools/colr-sweep-gradient
a3d13abc otData: fix typo, add comments
3ad56a40 Merge pull request #2173 from justvanrossum/fix-vector-div
f416a5cb fix Vector division
a7d145f0 update tests for PaintSweepGradient
45201f68 Merge pull request #2170 from simoncozens/delete-glyph
93c23eaa COLRv1: define new PaintSweepGradient, amend tests with new format numbers
8f66a1e8 COLRv1: add functions to un-build COLR otTables to raw dicts
56df97b5 Prohibit non-functional "sub A B by NULL"
d1e85cb8 Allow 'sub X by NULL;' sequence to delete a glyph
728258d6 Merge pull request #2166 from fonttools/fb-colr-glyphMap
83434686 fontBuilder: pass through version and varStore parameter to buildCOLR
85c450b5 fontBuilder: pass glyphMap to buildCOLR to sort base records by GID
a3acb142 Remove py23 import
86123194 Bump version: 4.19.1 → 4.19.2.dev0
b0278cf8 Release 4.19.1
c4027c0e Merge pull request #2161 from fonttools/fix-woff2-offcurve-overlap-flag
8569a843 Update Tests/ttLib/woff2_test.py
52e3e03e An off-curve should stay off even with flags
822d3bf2 plistlib: remove unused 'type: ignore' comment to appease mypy
d47250dd Bump version: 4.19.0 → 4.19.1.dev0
f8283bda Release 4.19.0
9ab1895b Update changelog [skip ci]
7db6b8aa Merge pull request #2155 from daltonmaag/add-verbose-error-for-classdefbuilder-add
be898ec6 Change ValueError to OpenTypeLibError
81fa5b52 Merge pull request #2137 from fonttools/x-mac-encodings-errors
c9c30fa5 Merge pull request #2153 from fonttools/paint-colr-layer-tree
97124070 Change TypeError to ValueError
7c6337fa Add exception and test
8573af97 Merge pull request #2154 from fonttools/varlib-error-msg-script-dflt-langsys
6023bab6 Raise legible error message when script is missing a dflt langsys
7516e0d9 builder_test: add test with len(paints) > 255
9d33afe0 COLRv1: support unlimited paints as 255-ary tree of PaintColrLayers
a8d366e3 Merge pull request #2148 from fonttools/colr-fix-c0-almost-inside-c1
a3247ea4 compute rounding (dx,dy) offset outside loop then simply do Circle.move() inside
c13b1cef determine direction to nudge pre-loop
c9055871 minor: rename local vars without _circle suffix
b465dcff rename function to round_start_circle_stable_containment
4f1102ac add a Circle class, handle concentrical case, explain why 2 iterations are enough
4f886cc2 reword _is_circle_inside_circle parameters for better readability
c403dbe8 minor: rename function, remove redundant one
7f0788ca use math.hypot() as per review
db14e637 COLRv1: avoid abrupt change after rounding c0 when too near c1's perimeter
9c0bc9e5 Merge pull request #2146 from fonttools/prune-cmap-format12
03655e55 Change test data to make it pass
06913cc7 Implement format 12 cmap pruning
a9eecc4f Merge pull request #2145 from fonttools/pens-MissingComponentError
58614444 Add test
e0de5a84 Add MissingComponentError for pens
d0ea03c2 Merge pull request #2138 from timgates42/bugfix_typo_override
56310f38 docs: fix simple typo, ovverride -> override
d8c42ef7 codecs: handle errors different from 'strict' for extended mac encodings
70958dca Bump version: 4.18.2 → 4.18.3.dev0
dd29f83f Release 4.18.2
8420981d Update changelog [skip ci]
8f405dee Merge pull request #2125 from silnrsi/bugfix1
8f50e222 test.workflow: respect 'skip ci'
c7d44be3 Update changelog [skip ci]
6bc7bc46 Merge pull request #2129 from fonttools/paint-translate
538528d5 COLRv1: Implement PaintTranslate
1f33249d varLib.cff: fix unbound local variable
c990a5b4 tox.ini: also test on py39 by default
317d0198 MANIFEST.in: add missing mypy.ini
51af0229 MANIFEST.in: Add missing .ufoz and .json files
22f71d00 Update CI badge
5508374b Bump version: 4.18.1 → 4.18.2.dev0
f60f5370 Release 4.18.1
a6a4374b Update changelog [skip ci]
26f3ef0a Merge pull request #2119 from fonttools/all_the_best_tuples
f24a640b minor
17395b07 id() invalid if things disappear
bd8861f1 sort __dict__.items() when freezing paint tuples
f0dcd335 Cache tuples
0957dc7a mutator: fix missing tab in interpolate_cff2_metrics
4af216dd publish.yml: fix tag pattern
dcb8b2c9 Bump version: 4.18.0 → 4.18.1.dev0
f1d0dc4c Release 4.18.0
f1f73299 Update changelog [skip ci]
6e9bb9bb Merge pull request #2118 from fonttools/colr_angles
40f95ba4 Update C_O_L_R_test.py; try to make the binary data test more palatable
d8885266 Hook up paint skew and rotate
4e6ac45f Merge pull request #2117 from sethmlarson/brotli
d5353a40 Switch from brotlipy to brotlicffi for PyPy support
ee877903 Refix by removing duplicates from the same glyphset
75f314b1 Fix class2defs self overlapping glyphsets
47c85d9a Merge pull request #2115 from fonttools/pyup-scheduled-update-2020-11-23
296987e7 Merge pull request #2112 from khaledhosny/layout-scripts-langsys
855f1e4c Merge pull request #2109 from simoncozens/interpolatable-fixes
63a7bbe9 Update sphinx from 3.3.0 to 3.3.1
6de6ff10 Merge pull request #2114 from fonttools/ufolib-add-expect-contents-file
863b0225 Add docstring to GlyphSet
8ca14185 UFOReader: always expect contents.plist
8d2a3ae6 Add expectContentsFile parameter to GlyphSet
72291031 Tidy up add_problem
c6e5a7ab Catch open contours more explicitly
d8e546df [subset] Allow LangSys tags in --layout-scripts
26d06342 Merge pull request #2110 from verbosus/pyobjc
56a168aa Update requirements.txt rather than conditionally install pyobjc in the GHA workflow
47a272a7 Merge pull request #2107 from verbosus/quartzpen
c2cbcc7a Optionally install PyObjC if on macOS test env (#2108)
742983f0 Add QuartzPen
584555a3 fix tests
392149ac Tidy up output, add machine readable JSON option
08e2a6cd Reformat with black
129e2413 Gracefully handle glyphset mismatches
fdbe0763 Catch explosion on open paths
61814d41 Allow UFO files to be used in varLib.interpolatable
ae07ce6e Merge pull request #2100 from fonttools/switch-to-gha
685b0475 varLib_test: fix failing windows tests
018a798f Add GitHub Actions integration
c7819e6b Remove Travis and Appveyor integration
6864100f Merge pull request #2106 from simoncozens/debugging-switch
f827a2a7 Turn on feaLib debugging from the environment
3e964ad8 Merge pull request #2101 from simoncozens/alternate-contextual-representations
a99bd429 Tests for GSUB5/GSUB6 formats 1, 2 and 3
47d95c5e Fix varLib test expectations
fb9d34af Try again...
df5527bc Revert "Remove unneeded populateDefaults". removed wrong line...
635df38f Comment to explain copy
8e524e41 "if not x in" -> "if x not in"
7bbff5d2 Re-case variable names (and clarify)
1a6f53df Explain weird (list(foo))[0] thing
a043e35f Remove unneeded populateDefaults
be7d9a33 Raise on unknown format, also reorder to be more sensible
36597025 Bump version: 4.17.1 → 4.17.2.dev0
92081ea9 Release 4.17.1
a22c7246 update changelog [skip ci]
e5439eb9 colorLib: also treat lists [layerGlyph, paletteIndex] as COLRv0 layers
b6ef2408 colorLib_test: test that we accept either tuple or list for COLRv0 layer
db37b3bd Update test expectations
07b186a4 Build most compact lookup representation
f6fac3cb Helper function to determine compiled size of a lookup
ef002fbc Add format 1 subtable builder
8b3963a3 Add format 2 subtable builder
fe075a4a Helper functions for building rulesets and rules for F1/F2 lookups
88ed5e2c Refactor out part of format3 builder which handles LookupRecords
2a09da2e Bump version: 4.17.0 → 4.17.1.dev0
dd2eccaa Release 4.17.0
1b5ed377 Update changelog [skip ci]
67d01e83 Merge pull request #2098 from fonttools/pyup-scheduled-update-2020-11-09
e7494bbf Merge pull request #2094 from fonttools/svg-arc-flags-no-spaces
ed718db6 Merge pull request #2092 from fonttools/colrv1-latest
698d43cf C_O_L_R_test: update table's handwritten binary blobs
c695429b C_O_L_R_test: undo PaintColrSlice
cf2097f7 Update to builder per review discussion
4171e28f Update ttLib/tables to latest spec
7286bffb Update skia-pathops from 0.5.0 to 0.5.1.post1
2b3bad98 Update munkres from 1.1.2 to 1.1.4
9ef15256 Update scipy from 1.5.2 to 1.5.4
bdc5daf0 Update reportlab from 3.5.49 to 3.5.55
bbb95d84 Update sphinx from 3.2.1 to 3.3.0
186032cb fixed formatting
cd39e6e2 Add a test
3069ad97 Less errorprone message
5c83b5be Don't generate a PaintColrLayers for a list of 1
9698c711 Change case of LayerCollector fields per comment
f531038b Start hooking up revised PaintColrLayers
581416d7 WIP: add buildPaintColrLayers
d2854812 Fix f-string
0ae6951b Merge pull request #2082 from justvanrossum/gvar-ignore-empty-glyphs
e9929534 swap xy and yx fields in COLRv1 Affine2x3 struct
aad51ec4 svgLib: handle arc commands with bool flags not separated by space/comma
6c752f67 rename Paint{ColorGlyph,ColrSlice}
d5e645a3 define Table.writeNullOffset() in subclasses; add comment as per review feedback
b6545541 add {First,Last}LayerIndex to PaintColorGlyph
ce11d0ed C_O_L_R_test: test roundtrip Paint{Transform,ColorGlyph,Composite}
8cffabfb builder_test: test buildPaint{ColorGlyph,Transform,Composite}
1803283b colorLib: use IntEnum instead of 'magic' Paint format integers
53b0034b colorLib: check that values fit fixed or integer types
28a21517 Update NEWS [skip ci]
b9c26894 Add HashPointPen from psautohint (#2005)
fc625963 otTables: dump the format name of Paint tables as XML comment
09fa418e Merge remote-tracking branch 'origin/master' into colrv1-latest
10413d94 Merge pull request #2067 from simoncozens/fealib-debug-subclassable
0c9cb3a8 Warn developer if subclass needs upgrading
73073be3 Affine2x3 struct should be inlined inside PaintTransform
a2aaf41a colorLib: rename builders to match current Paint format names
fdf6a5c1 colorLib: update builders to latest COLRv1 draft
7f6a05b0 otData: add new COLR Paint struct definitions, update to latest draft
b1cb5ce1 Merge pull request #2083 from justvanrossum/fix-FFF-typo
16e058fe Test for 0xFFFF, not 0xFFF, fixes #2073
b992e283 [varLib] Add designspace lib key for custom feavar feature tag (#2080)
c7e3a692 otBase: support FormatSwitchingBaseTable with uint8 Format type
d60d84d3 otBase/otConverters: add support for 3-byte offsets
3ea29197 Interpret empty non-default glyphs as 'missing', if the default glyph is not empty. Part of discussion over at googlefonts/ufo2ft/issues/408
c55f478c Bump version: 4.16.1 → 4.16.2.dev0
e1dd5816 Release 4.16.1
4b63354b Update changelog [skip ci]
558b9cba Merge pull request #2077 from fonttools/feature-variations-none
e16cf0f8 instancer_test: check GSUB.FeatureVariations set to None is skipped
e78d7cf5 backport fix to varLib.mutator as well
5ef018e4 [instancer] FeatureVariations table is optional and can be None
9433dc5f Merge pull request #2075 from fonttools/ufolib-gliflib-always-raise-on-missing-x-y
04e1269b [glifLib] Hard-require x and y coordinates
e4b0486b Bump version: 4.16.0 → 4.16.1.dev0
2c1b7ea1 Release 4.16.0
3e8114e7 Update changelog [skip ci]
bec25751 Merge pull request #2068 from fonttools/remove-overlaps-snippet
fdab3506 README.rst: mention 'pathops' among extras
7f9462df compare paths independently of contour order
66a0d91b remove hinting from all glyphs, whether overlaps are removed or not
e9409860 log modified glyps
1329c8f7 instancer_test: add tests for --remove-overlaps on generated VF instance
d9d216f8 minor: rename OverlapsMode enum -> OverlapMode
7b9da760 skip empty paths with no contours
e1ad83ad minor edit to comment [skip ci]
5abab6b3 Update skia-pathops to v0.5.0
da439c7c decompose composites only if components intersect; let pathops.PathPen decompose components
d4fd5d6e requirements.txt: don't install skia-pathops on pypy
933e3941 tox.ini: add download=true to install latest pip inside tox virtualenv
b73fa096 [travis] need latest pip to install skia-pathops for manylinux2014 tag
85947cab varLib.instancer: make 'overlap' an enum; add --remove-overlaps CLI option
7531b717 require skia-pathops >= 0.4.2
015d8265 use pathops.simplify() and remember if original path direction
0ceb1461 process simple glyphs before composites
1c5417d1 add 'pathops' to extras_require
2bcc103c move it to ttLib.removeOverlaps module
8bbc3d50 factor out remove_overlaps routine, add typing annotations
19f5915f ensure hmtx.lsb == glyph.xMin so that origin is at x=0 for new glyph
54ed840b Add snippet to remove overlaps on TTF with skia-pathops
8ed77926 Only stash lookup location if buildLookups_ has cooperated
0b413be4 Bump version: 4.15.0 → 4.15.1.dev0
b7609dde Release 4.15.0
fde57e23 Updated changelog [skip ci]
b913fac4 Merge pull request #2061 from fonttools/plistlib-typing
0742a9bf Implement suggestions
a1df9793 Update Lib/fontTools/misc/plistlib/__init__.py
4efc06e6 Update Lib/fontTools/misc/plistlib/__init__.py
a18b6bfb Merge pull request #2052 from simoncozens/fealib-debug
2baca39b Merge pull request #2058 from alerque/disable-checksum-checking
2906ac29 One less type-ignore
09a64418 Misplaced ignore
a501c0cb More typing and ignores
10864be2 Fix one typing warning
7a5138d9 Add mypy CI job
863d9fd3 Add py.typed file
e1c97102 More types, correct stale comment
fa32cf2f Remove unused type comment
a364cff1 No need for _D anymore
be773359 Remove unused typing imports
8a5baa0a Return Any from load*
d70ca822 More typing
4f51a5da More typing
9d13fe11 Simplify typing for singledispatch
bbfc7b9f Fix type mixup
ff0e0028 Use overload instead of exploding singledispatch
7c02ab3d woopsie
80b8b155 WIP: add typing info to plistlib
2ef66ea4 Debugging should not be the default (oops)
7135255d Style nits
95a941ec Re-case debug info module
af4f1f6d Prefer module constant to hard-coded string for Debg table key
221fa07c Default checkChecksums to off for WOFF2 Reader
705b9663 Default checkChecksums to off for SFNT Reader
7e3c4acf Use 0 not False to disable checkChecksums as documented and used
dbeef036 Add ctags generated artifact to Git ignore list
a5af2de2 Scheduled weekly dependency update for week 36 (#2056)
02c305c2 Serialize JSON object before writing to XML
87c65acd JSON ends up stringifying number keys, so do that now in case we’re round-tripping without writing the file out.
4e70b30e Ensure LookupCount is processed
70b51427 Add debug tests
8869e0de Add debug flag to feaLib command line utility
b680eaf7 Add debug arg to addOpenTypeFeatures
98803b7b Reformat, tidy from review comments
41c1dcce Tidy up as per review
4cddc382 Use a named tuple, tidy ttx dump code
68cbcd10 Merge pull request #2027 from simoncozens/mtilib-docs
7ca00727 Merge pull request #2054 from simoncozens/more-interpolatable-tests
a2e3e9dc Apply suggestions from code review
9064e53c Add registry for custom table packer/unpacker classes (#2055)
1d366fa3 Address feedback
bc9c7b6b [varLib] Test for interpolatability of paths
b548c5f2 Namespace debug output.
e2433bd2 Make Debg table optional
50e11056 Parse Debg info in LookupList
2e112a46 Dump feature locations into Debg
aebb2e51 The long-threatened Debg table!
a4100507 Bump version: 4.14.0 → 4.14.1.dev0
ae20a4d7 Release 4.14.0
fc5fd44a Update changelog [skip ci]
1dde5742 Fix urls in README.rst
5893f111 Merge pull request #2047 from fonttools/pyup-scheduled-update-2020-08-17
735ac438 Update scipy from 1.5.1 to 1.5.2
7a4a88ad Update reportlab from 3.5.44 to 3.5.47
b18f8211 Update sphinx from 3.1.2 to 3.2.1
fe2c31b6 Merge pull request #2037 from khaledhosny/fealib-lookupflag-anonclass
3be7c050 Merge pull request #2041 from ctrlcctrlv/patch-1
6af1f012 Update readme.rst
bec19252 [ttLib] Fix for #2044: fix maxp.maxComponentDepth calculation (#2045)
ec462102 Merge pull request #2043 from juandelperal/patch-1
502e43a4 typo
66a40e03 Better document rule processing order
81d0042a varLib.models: fix argument name in main()
c785c0ea fixed typo
7db9ba6e [feaLib] Allow anonymous glyphclass in LookupFlags
d8eb064a Merge pull request #2035 from jkseppan/subset-no-py23
93a5cbd1 Remove import of py23 fron subset/__init__.py
e63ecc5b subset: FeatureVariations may None in GSUB 1.1
3ad201cb Snippets/decompose-ttf: remove overlaps with skia-pathops
290ee78e Merge pull request #2030 from justvanrossum/snippet-decompose-ttf
39301b23 whitespace
2bc53e75 add hashbang and comment; add +x mode
a95aace0 add snippet that shows how to decompose glyphs in a TTF
d6ba64fc Merge pull request #2026 from simoncozens/named-tuple-contextuals
f72983b0 Document mtiLib library
e3e12fe6 Fix mock builder test
85edf0e3 Use the ChainContextualRule class instead of bare tuples
b9f2482c Add a ChainContextualRule class
74e5945f Merge pull request #2025 from simoncozens/reformat-fealib-otllib
ae5e000e Run black on all these too.
8590bcf0 Reformat with black
e58fea95 Reformat with black
69a76e9d Reformat with black.
b7c2e3d1 Merge pull request #2021 from fonttools/pyup-scheduled-update-2020-07-13
b63ed40e Update scipy from 1.4.1 to 1.5.1
baecf39d Update reportlab from 3.5.42 to 3.5.44
4415f928 Update sphinx_rtd_theme from 0.4.3 to 0.5.0
d96cda74 Update sphinx from 3.0.3 to 3.1.2
cbe6d3a3 Merge pull request #2016 from simoncozens/gsub5-gpos7-lookups
c1a885ad Missed stylistic fix
0b397458 Restore test for chaining version
b6f7b2dc Stylistic fixes from feedback
9856c1e4 Bump version: 4.13.0 → 4.13.1.dev0
c30a5fc1 Release 4.13.0
da211824 Update changelog [skip ci]
4594a0c3 Merge pull request #2008 from fonttools/colrv1-rev2
09c0e420 Partly revert "use 32-bit GlyphIDs in COLRv1 baseGlyphs and layers"
8c3dfc4e Refactor subtable/lookup record building code
6d4c5fe3 Rename GPOS8->GPOS7
4adea942 Fix varlib test expectations - now badly named.
bc0f6988 Thinko
7db13c98 Fixup test expectations
e8798059 Rename test
2cf9f681 Fix test expectation. Test is now badly named.
f04ffe41 Make non-chaining contextuals where we can. (Fixes #1856)
df3e08bb Add a function to set coverage for GSUB5/GPOS7 lookups
06c27058 Begin to use the new rulesets. Be explicit that we are building Format 3 lookups right now.
9f4cc2f1 Introduce the concept of a ClassContextualRuleSet
26072943 Merge pull request #2014 from simoncozens/remove-macos-module
18a978bd Remove MacOS module references. Fixes #1978.
097b4846 Merge pull request #2013 from simoncozens/fix-2012
83708496 Fix documentation for MultipleSubstStatement (fixes #2012)
64731aed Merge remote-tracking branch 'origin/master' into colrv1-rev2
73631c96 otlLib documentation (#2009)
1ed5916a Fix *all* docs about markFilterSet, not just the first one...
ece76d36 Unnecessary comments
f54528a7 Remove unused arguments to ClassPairPosSubtableBuilder
3b50a533 otlLib now sets this flag itself.
8e0b1fbf Allow location to be optional.
c43b58c9 Force mark filtering flag set.
e501dbb6 Add name to contributors
db894…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants