1811 Commits

Author SHA1 Message Date
Behdad Esfahbod
41e6f60011
Merge pull request #2738 from fonttools/glyphset
TTVarGlyphset
2022-08-15 11:07:41 -06:00
Behdad Esfahbod
dc99ab6b3f [ttGlyphSet] Address review comments 2022-08-15 11:06:51 -06:00
Cosimo Lupo
1dffbae240 support proposed PaintSweepGradient's angles with +1.0 (180°) bias
In the upcoming draft of COLR spec, PaintSweepGradient's startAngle/endAngle are encoded with a +1.0 bias to allow for representation of a full +360° positive angle. Normal F2Dot14-fraction-of-half-circle angles can only represent angles between -360 <= angle < +360

This is a breaking change and will need to be coordinated with rendering implementations (at least FreeType/Skia).
2022-08-15 12:52:28 +02:00
Behdad Esfahbod
226761c8ed [ttVarGlyphSet] Set glyph height
Untested
2022-08-14 12:08:12 -06:00
Behdad Esfahbod
617e6ff3c7 [ttVarGlyphSet] Implement 'avar' mapping 2022-08-14 12:08:12 -06:00
Behdad Esfahbod
37277ee86e [glyphSet] Fix lsb offsetting 2022-08-14 12:08:12 -06:00
Behdad Esfahbod
e1d8496d73 [TTVarGlyphSet] Use shallow glyph copying 2022-08-14 12:08:12 -06:00
Behdad Esfahbod
3ae5a673bc [ttFont/ttGlyphSet] Add option to pass normalized locations 2022-08-14 12:08:12 -06:00
Behdad Esfahbod
c148dc76e6 [ttFont/ttGlyphSet] Add API for drawing variable fonts
Fixes https://github.com/fonttools/fonttools/issues/1021
2022-08-14 12:08:12 -06:00
Behdad Esfahbod
0d1550febe [ttFont] Split TTGlyphSet code into ttGlyphSet.py 2022-08-14 12:08:12 -06:00
Behdad Esfahbod
9ebebcba6d [gvar] Minor simplify 2022-08-14 12:07:54 -06:00
Behdad Esfahbod
260564a1e3
Lazy gvar (#2741)
* [gvar] Load variations lazily

Fixes https://github.com/fonttools/fonttools/issues/2740
2022-08-14 11:54:35 -06:00
Garret Rieger
a33972da62 Use new uharfbuzz repack_with_tag if available. 2022-07-29 21:48:25 +00:00
Cosimo Lupo
32aa8eafcb [otBase] fix AttributeError when uharfbuzz < 0.23.0 and 'repack' missing
Fixes #2671
2022-07-19 14:46:50 +02:00
Cosimo Lupo
2a07518b70
Merge pull request #2660 from fonttools/variable-colr
[varLib] add support for building variable COLR from set of master COLRv1 tables
2022-07-06 10:55:50 +01:00
Garret Rieger
10140f9df3 Remove TODO. 2022-06-27 18:32:04 +00:00
Garret Rieger
8196166e53 Add some additional comments about packing state machine. 2022-06-27 18:28:02 +00:00
Garret Rieger
d92fd2665c Use enum's for repacker state. 2022-06-27 18:18:20 +00:00
Cosimo Lupo
4ca582a273 otTraverse: add pretty __str__ for SubTablePath tuple
so one can debug print(path) and get things like 'Paint.Paint.ColorLine.ColorStop[1]'
2022-06-24 18:33:52 +01:00
Cosimo Lupo
41943bb0e7 otTraverse: add options to skip_root and predicate to filter out entire sub-trees 2022-06-24 18:04:04 +01:00
Cosimo Lupo
fcd2a67f52 Merge remote-tracking branch 'origin/main' into variable-colr 2022-06-24 10:16:51 +01:00
Garret Rieger
c63b84db7e Update how table packing falls back to fontTools from harfbuzz.
Introduce three compilation modes:
1. Pure python: only uses the existing fonttools packing and overflow resolution.
2. Harfbuzz+python: uses harfbuzz packing and python overflow resolution. Extensions are allowed to be shared.
3. Python fallback: if harfbuzz+python runs out of resolution options, this disables extension sharing and only uses python packing. Once it succeeds control is passed back to the harfbuzz packer to produce the final packing with extension sharing enabled.
2022-06-23 19:39:56 +00:00
Cosimo Lupo
0e6a4ec581 [otBase] temporarily disable extension sharing during harfbuzz repacking
If extension sharing is enabled some fonts may fail to repack due to fontTools repacker getting stuck in a unrecoverable error.

https://github.com/fonttools/fonttools/issues/2661
2022-06-23 16:34:12 +01:00
Cosimo Lupo
24941e613f otTraverse: add module containing methods for traversing trees of otData tables
this is adapted from nanoemoji's
d65a627154/src/nanoemoji/util.py (L122-L162)
2022-06-21 17:27:12 +01:00
Cosimo Lupo
fae63959a9 otTables: add class attributes to link Var{Table} <-> {Table}
so one can go from Affine2x3 <-> VarAffine2x3 and similar types that have an associated Var{Type}
2022-06-21 17:27:12 +01:00
Cosimo Lupo
ca2f9e0a94 otBase: use OptionalValue.DEFAULT in populateDefaults() 2022-06-21 17:27:12 +01:00
Cosimo Lupo
fa54b0fd62 otTables: add methods to Format enums to query the variable variants 2022-06-21 17:27:12 +01:00
Cosimo Lupo
97bcda9d35 otBase: define method to get variable attrs with associated VarIndexBase + {offset} 2022-06-21 17:27:11 +01:00
Cosimo Lupo
396353e8e3 otConverters: parse 'VarIndexBase + {offset}' from converters' description 2022-06-21 17:27:11 +01:00
Cosimo Lupo
871ee3d527 otData: add 'VarIndexBase + {offset}' to description of all COLR variable fields 2022-06-21 17:27:11 +01:00
Cosimo Lupo
82460bd368 otConverters: define a base class for all fixed-size floats with toInt/fromInt methods
this will be useful when computing deltas for COLR table fields that use Fixed or F2Dot14 (ItemVariationStore internally treats fixed-value floats as 16 or 32-bit integers)
2022-06-21 17:27:11 +01:00
Cosimo Lupo
676a66fad3 otTables: make DeltaSetIndexMap TTX dump less verbose by omitting no-op entries
though we still emit the empty <Map index=.../> elements; they help identify chunks of delta-set indices, and define the length of the array upon loading from XML
2022-06-21 17:27:11 +01:00
Cosimo Lupo
0cbdc8536b [otBase/varLib.merger] don't recurse in ensureDecompiled, merger is already working recursively 2022-06-21 17:27:11 +01:00
Cosimo Lupo
119b7732cc SVG: strip timestamp to make compressed gzip reproducible
we tell GzipFile to write the MTIME field to zero so that the compressed output is reproducible and doesn't change depending on when the data is compressed.
2022-06-09 16:29:29 +01:00
Cosimo Lupo
be623e257f Clean up svgDoc compression
This is based on bungeman's https://github.com/fonttools/fonttools/pull/2627

Previously, an entire `SVG ` table would be marked as compressed if any
of the decoded SVG documents in it were compressed. Then on encoding all
SVG documents would be considered for compression. The XML format had no
means to indicate if compression was desired.

Instead, mark each svgDoc with its compression status. When decoding
mark the svgDoc as compressed if the data was compressed. When encoding
try to compress the svgDoc if it is marked as compressed. In the XML
format the data itself is always uncompressed, but allow an optional
`compressed` boolean attribute (defaults to false) to indicate the
svgDoc should be compressed when encoded.

We also try to make sure that older code that relies on docList containing
sequences of three items (doc, startGID, endGID) will continue to work
without modification.
2022-06-09 15:15:05 +01:00
Garret Rieger
086799357a Enable sharing across subtables of extension for harfbuzz packing.
Harfbuzz repacker can handle subtables shared across extension lookups so there's no need to disallow such sharing. Add a parameter to _doneWriting to allow sharing to be enabled when preparing the object graph for passing to harfbuzz.
2022-05-25 23:55:43 +00:00
Cosimo Lupo
350f893e17 [otBase] demote repacker ERROR to WARNING, only 1 per loop; don't exit at firstfail
Fixes https://github.com/fonttools/fonttools/issues/2594
2022-04-22 19:05:54 +01:00
Cosimo Lupo
f68ce14d7a [otBase] log the name of uharfbuzz exception 2022-04-22 15:31:34 +01:00
Cosimo Lupo
bb1dbf4198 drop the 'X' from recalcAvgCharWidth method name 2022-04-21 19:02:39 +01:00
Cosimo Lupo
3731056401 [OS/2] define recalcXAvgCharWidth method
copied from current subsetter code (matches ufo2ft's outlineCompiler)
2022-04-21 18:44:44 +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
c204537073 [otBase] check USE_HARFBUZZ_REPACKER in TTFont.cfg, add more logging 2022-04-21 15:46:12 +01:00
Just van Rossum
0ffe320b77 [cmap] don't handle expected case in exception handler, to avoid confusing tracebacks, such as seen in #2584 2022-04-18 09:15:01 +02:00
Cosimo Lupo
e92dd05101
Merge pull request #2552 from qxliu76/add_hb_repack
Use Harfbuzz Repacker for packing GSUB/GPOS tables
2022-04-14 20:03:18 +01:00
Qunxin Liu
fe196bf88e Use Harfbuzz Repacker for packing GSUB/GPOS tables 2022-04-14 10:42:50 -07:00
Jany Belluz
abc0441957 [config] Add new config module and use it for GPOS compression level 2022-04-14 15:23:02 +01:00
justvanrossum
c6cd6cf421 [TTFont] sync doc string with the one in _c_m_a_p.py (see also #1367) 2022-04-09 08:31:03 +02:00
Behdad Esfahbod
17f71c0eb7 [cmap] Document rationale for getBestCmap choice of subtable
Fixes https://github.com/fonttools/fonttools/issues/1367
2022-04-08 13:27:44 -06:00
justvanrossum
9ffb2e0f75 removed cringy comments from a long long long long time ago 2022-04-05 17:02:34 +02:00
Cosimo Lupo
25746a3600 add clarifying comment as per review 2022-03-18 09:23:07 +00:00