209 Commits

Author SHA1 Message Date
Jack McCabe
70112b947d [subset] prevent CPAL nameIDs from being dropped 2022-09-30 12:36:28 +01:00
Jack McCabe
b945fd6305 [subset] Fix enumeration of palette entry labels 2022-09-30 11:40:39 +01:00
Cosimo Lupo
276f6aaf44 [subset] keep and don't prune CPAL if OT-SVG table is present
Fixes #2814

or at least is a workaround until a proper 'fix'
2022-09-14 12:55:40 -06:00
Cosimo Lupo
25a05c72ab subset: add --no-lazy option to load font eagerly as TTFont(lazy=False) 2022-09-08 15:42:34 +01:00
Behdad Esfahbod
27965842eb [subset] Fix subsetting of variable fonts
Fixes https://github.com/fonttools/fonttools/issues/2769
2022-08-24 10:12:32 -06:00
Behdad Esfahbod
24c9fb6ffa [cliTools] Rename fragment to suffix 2022-08-22 06:26:30 -06:00
Behdad Esfahbod
e146ddfd86 [cliTools.makeOutputFileName] Add fragment argument
And use it from subsetter and instancer.

Related to https://github.com/fonttools/fonttools/issues/1156
2022-08-19 12:20:21 -06:00
Behdad Esfahbod
5295ebe966
Update Lib/fontTools/subset/__init__.py
Co-authored-by: Jany Belluz <jany.belluz@daltonmaag.com>
2022-06-03 05:48:03 -06:00
Behdad Esfahbod
a1fabd0fcb [subset] Update default feature tags
Corresponding to HarfBuzz commits:
40193adbfc
40d7d56e53
2022-06-03 05:41:31 -06:00
Cosimo Lupo
0e43b0e2c3 [subset] Fix subsetting SinglePosFormat2 when ValueFormat=0
If a font has SinglePosFormat2 subtable with ValueFormat=0, then it contains a Value list with all None values.
Even though we don't build such inefficient tables, they do exist in the wild, as #2602 demostrates so we should handle those nicely, by downgrading them to Format1 with a single None value
2022-04-27 16:03:23 +01:00
Cosimo Lupo
bb1dbf4198 drop the 'X' from recalcAvgCharWidth method name 2022-04-21 19:02:39 +01:00
Cosimo Lupo
12942feb6b [subset] use recalcXAvgCharWidth method 2022-04-21 18:46:11 +01:00
Cosimo Lupo
af6804bed5 make USE_HARFBUZZ_REPACKER a 3-state option, defaults to auto
if explicitly enabled, it will raise ImportError if uharfbuzz is not found, and will propagate the uharfbuzz error instead of silently falling back to the pure-python serializer
2022-04-21 18:11:20 +01:00
Cosimo Lupo
1bb9607b72 [subset] add --no-harfbuzz-repacker CLI flag 2022-04-21 15:46:12 +01:00
Cosimo Lupo
9b613b67c2
Merge pull request #2462 from fonttools/fix-subset-colr
subset/COLR: fix struct.error while subsetting Bungee COLR
2021-12-03 11:33:37 +00:00
Cosimo Lupo
780f2428b6 subset: when subsetting COLR only include glyphs after COLR closure, excluding glyf closure
Fixes #2461
2021-12-02 18:12:04 +00:00
Simon Cozens
0f03e6529a
[docs] Fix sphinx warnings (#2453)
* Add default auto doc options

* Ensure all references are unique

* Use anonymous links to avoid duplicate references

* Remove default options, fix wrong module name

* Don’t index repeated class

* Remove repeated classes included through automodule

* Fix warnings

* We don’t use our own static directory

* Correctly format XML in docs

* Fix indentation

* Fix overline

* Bring TOC to top

* Fix definition list

* Offset definition lists and examples

* Fix erroneous markup

* Fix markup

* Already included in automodule

* Fix args markup

* Correct markup for example

* Don’t reindex repeated module

* Correct XML code block markup

* Fix markup errors, change example to doctest

* Correct list markup

* Make ttx docstring both valid RST and valid help output

* Various other boring markup fixes

* Fix example indenting

* Make docstring valid RST and valid help output

* Mock import for reportlab

* It’s ok if manual links don’t appear in toctrees

* Oops typo, I guess doctests are useful
2021-12-02 15:31:49 +00:00
Cosimo Lupo
05e6d577cd subset: add --pretty-svg option to enable lxml pretty_print
False (more compact) by default
2021-11-15 16:07:18 +00:00
Cosimo Lupo
16249d1fb8 subset: store original glyphOrder and map from old to new indexes in Subsetter instance
so that SVG tables' subset_glyphs method can use it to get glyph names from GISs and to remap from old to new GIDs
2021-11-15 16:07:18 +00:00
Cosimo Lupo
bd47bdae97 subset: don't drop SVG table, add WIP subset/svg.py stub
simply  pass-through for now
2021-11-15 16:07:18 +00:00
Cosimo Lupo
425e1afd36 subset: move _add_method and _uniq_sort to subset/util submodule 2021-11-15 16:07:18 +00:00
Cosimo Lupo
5c54f4e666 subset: don't try subsetting ClipList if None 2021-10-11 16:48:00 +02:00
Behdad Esfahbod
76ac638c43 [subset] Add a couple None checks
Exercised by Simon's Gulzar
2021-10-01 11:42:58 -06:00
Behdad Esfahbod
d867397532 Remove residual allowVID stuff
Part of https://github.com/fonttools/fonttools/pull/2398
2021-08-25 15:55:17 -06:00
Behdad Esfahbod
d5de11d805 [ttFont] Make setGlyphOrder() clear reverseGlyphOrderMap
Part of https://github.com/fonttools/fonttools/pull/2398
2021-08-23 14:01:26 -06:00
Cosimo Lupo
99743c14df subset: explicitly subset ClipList, avoids warning when lazy-loading
relying on ClipList.compile to drop unused clips based on updated glyphOrder won't work when font is loaded lazily (default for subsetter), because ClipList gets decompiled too late (after glyphOrder has already been modified) and this produces warnings about missing glyphIDs.
Better to make the subsetter explicilty prune unused clips.
2021-08-18 09:42:10 +02:00
Cosimo Lupo
11871673ff [subset] fixed CPAL pruning after removal of ColorIndex 2021-07-23 17:27:57 +01:00
Cosimo Lupo
1cb7e36bbd COLRv1: rename otData structs to remove 'V1' to match updated draft spec
This is a breaking change (but the COLRv1 API was already marked as unstable and subject to change)

The changes in this PR are meant to match the changes from the COLRv1 draft spec at:
https://github.com/googlefonts/colr-gradients-spec/pull/302
2021-06-28 16:13:47 +01:00
Cosimo Lupo
1df4f1eac1 subset: drop empty features unless 'size' with FeatureParams table
Fixes #2324
2021-05-27 09:33:29 -06:00
Cosimo Lupo
926f721832 return True from SinglePos.prune_post_subset to not change semantics
the useless subtable might have been there to stop the next subtable from applying...
https://github.com/fonttools/fonttools/pull/2313#issuecomment-844497422
2021-05-20 10:01:58 +01:00
Cosimo Lupo
defe0f997a subset: don't prune_post_subset if no SinglePos Value
Fixes https://github.com/fonttools/fonttools/issues/2312
2021-05-19 20:16:14 +01:00
Cosimo Lupo
6e23150507 subset: prune v0 base glyphs and layers when none are left after subsetting COLRv1 table
Thanks Qunxin for reporting the bug!
2021-05-14 10:47:20 +01:00
Behdad Esfahbod
3a6ebb8dc7 [subset] Fix drop-hints implementation in Device tables
Fixes https://github.com/fonttools/fonttools/issues/2272
2021-04-22 12:29:16 -06:00
Behdad Esfahbod
33d9e3d6de [subset] Use bytearray() instead of array.array('B') 2021-04-08 09:41:45 -06:00
Behdad Esfahbod
492118c7b5 [subset] Set glyph.data to b'' instead of ''
Fixes tests after 7adbe44154c1bd8a99668512e88facbcb034f05f
2021-04-08 09:41:45 -06:00
Cosimo Lupo
2136aac0f0 subset: fix pruning unused CPAL palettes when 0xFFFF is present
FIxes https://github.com/fonttools/fonttools/issues/2257
2021-04-06 19:43:45 +01:00
Behdad Esfahbod
8c59d4be0c [subset] Improve PairPosFormat2 subsetting
This does two things:

1. Intersect subsetter glyphset with the table's Coverage before
   passing to ClassDef1 for subsetting.  Anything that doesn't
   get past Coverage wouldn't ever get to ClassDef1,

2. Never reuse class0 of ClassDef2.  There's unspoken assumption
   that ClassDef2's class0 is never used for actual kerning, since
   that's the unbounded "every other glyph" class.  Previously our
   ClassDef subsetter was reusing class0 if "every other glyph"
   happened to become empty because of the subset glyphset.  Don't
   do that for PairPos's ClassDef2.  As a result of this assumption,
   don't keep a PairPosClass2 subtable if only ClassDef2's class0
   survived subsetting.

Would be good to add tests for both.

Related to https://github.com/harfbuzz/harfbuzz/issues/2703
2021-03-29 16:17:27 +01:00
Behdad Esfahbod
c321fbe3fa [subset] Call VariationStore.subset_varidxes() as method 2021-03-11 14:12:03 -07:00
Behdad Esfahbod
abc1ba07a4 [misc.roundTools] New module; move otRound() here
Code relying on old place (fixedTools.otRound) still works.
2021-03-04 09:20:43 -07:00
Cosimo Lupo
09af39ab53
subset: donwgrade COLRv1 to v0 if all v1 glyphs are dropped 2021-02-15 11:58:56 +00:00
Cosimo Lupo
55c9a0a1ef
update subset_test.py using new COLRv1 dict format 2021-02-15 11:15:42 +00:00
Cosimo Lupo
056aba8e4a
prune unused CPAL palette entries after subsetting COLR glyphs
Fixes https://github.com/fonttools/fonttools/issues/2174
2021-02-15 11:15:42 +00:00
Cosimo Lupo
109c07d16c
subset: support subsetting COLRv1 base glyphs
In COLR.closure_glyphs augment the subset with the glyphs rechable from the COLRv1 base glyphs already in the subset.
In COLR.subset_glyphs, subset and rebuild LayerV1List and BaseGlyphV1List with the base glyphs to keep. Drop COLR if emptied
2021-02-15 11:15:42 +00:00
Nikolaus Waxweiler
06913cc715 Implement format 12 cmap pruning 2021-01-13 16:30:46 +00:00
Khaled Hosny
d8e546df5f [subset] Allow LangSys tags in --layout-scripts
Allow specifying which LangSys tags to accept for each script, using
script.lang form. For example:

    --layout-scripts=arab.dflt,arab.URD,latn

To keep DefaultLangSys and “URD” language for “arab” script, and all
languages for “latn” script.
2020-11-20 23:38:29 +02:00
Caleb Maclennan
7e3c4acfde
Use 0 not False to disable checkChecksums as documented and used
While False does get the job done, the value is not always treated as
a boolean. It is overloaded so that 1 or greater is True, but more than
1 has a different meaning than 1. Hence usage should always be as an
integer as documented so that it's clear(er) this isn't just an on/off
toggle.
2020-09-10 16:41:30 +03:00
Jouni Seppänen
93a5cbd118 Remove import of py23 fron subset/__init__.py
This import is causing an unsightly DeprecationWarning.

I checked manually: the only names being used from py23 are
open, range and zip, which are defined to be the same as the
corresponding Python 3 builtins, so this should cause no
visible change except for suppressing the warning.
2020-08-02 08:04:19 +03:00
Cosimo Lupo
e63ecc5b5e
subset: FeatureVariations may None in GSUB 1.1
Fixes https://github.com/fonttools/fonttools/issues/2023
2020-07-27 16:53:15 +01:00
Behdad Esfahbod
26ac716a8d [subset/merge] Fix namespace clash
Fixes https://github.com/fonttools/fonttools/issues/1955
2020-06-02 15:13:30 -07:00
Cosimo Lupo
842289c00e
Merge pull request #1944 from anthrotype/fix-subset-context-format-3
subset: fix AttributeError while subsetting Context{Subst,Pos} Format 3
2020-05-13 10:19:10 +01:00