-
Notifications
You must be signed in to change notification settings - Fork 43
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
Comments
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: @madig (who's the author), am I right? |
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. |
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... |
Ok, I have figured out a solution in two parts that works for my case.
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
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 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 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). |
… is not empty. Part of discussion over at googlefonts/ufo2ft/issues/408
Thinking a bit more:
|
…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
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…
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.
The text was updated successfully, but these errors were encountered: