5324 Commits

Author SHA1 Message Date
Just van Rossum
b01ea60e9e
[ttLib] when importing XML, only set sfntVersion if the font has no reader and is empty (#2376)
* Only set sfntVersion if the font has no reader and is empty

* test that sfntVersion is only set if the TTFont instance is new/empty
2021-07-24 11:12:37 +02:00
Cosimo Lupo
c96c3ef8fa
Merge pull request #2359 from fonttools/colrv1-transform-reduced-prec
[COLRv1] reduced precision transforms, angles as F2Dot14, centers as FWORD, offsetted Affine2x3
2021-07-23 17:36:41 +01:00
Cosimo Lupo
29a2ebf813 omit default VarIndexBase
4294967295 (0xFFFFFFFF in decimal form) is not very memorable.
Still, using hex notation for all VarIndexBases would make the non-default values less readable (when interpreted as an index into the DeltaSetIndexMap array, decimal makes more sense).
Since 0xFFFFFFFF means 'no variation data', it makes sense to omit it from the ttx dump and write an empty <VarIndexBase/> element with no value.
We also allow to build Var tables without needing to pass "VarIndexBase": 0xFFFFFFFF in the source dict.
2021-07-23 17:27:57 +01:00
Cosimo Lupo
11871673ff [subset] fixed CPAL pruning after removal of ColorIndex 2021-07-23 17:27:57 +01:00
Cosimo Lupo
e8e2aa530b remove unused Variable{Float,Int} namedtuples from otTables/otConverters 2021-07-23 17:27:57 +01:00
Cosimo Lupo
0eb27e9878 Remove and inline {Var,}ColorIndex 2021-07-23 17:27:57 +01:00
Cosimo Lupo
40897a1508 Define DeltaSetIndexMap table used for COLR.VarIndexMap
https://github.com/googlefonts/colr-gradients-spec/pull/316
2021-07-23 17:27:57 +01:00
Cosimo Lupo
60f0724144 remove wrapping around from Angle converter, let the struct.error propagate 2021-07-19 17:52:00 +01:00
Cosimo Lupo
12d66ded12 Bump version: 4.25.1 → 4.25.2.dev0 2021-07-16 16:04:30 +01:00
Cosimo Lupo
8eea964661 Release 4.25.1 2021-07-16 16:04:30 +01:00
Cosimo Lupo
934349a9c5 ttGlyphPen: handle open contours starting with 'move'; treat them as if they were closed
Fixes #2365
2021-07-15 18:25:19 +01:00
Rod S
7225ac22a6 Update to reflect COLR v1 FWORD center and offset to transform 2021-07-06 17:47:56 +01:00
Cosimo Lupo
0e99474985 otData: reduce precision of specialized transforms, use F2Dot14 for all angles
https://github.com/googlefonts/colr-gradients-spec/pull/307 & https://github.com/googlefonts/colr-gradients-spec/pull/310
2021-07-06 17:47:56 +01:00
Cosimo Lupo
bb4c3e27c3 otConverters: define Angle and VarAngle, fractions of half circle encoded as F2Dot14
to be used with PaintRotate, etc.
2021-07-06 17:47:56 +01:00
Cosimo Lupo
f05691246a {fixed,round}Tools: factor out nearestMultipleShortestRepr
extract the code from fixedToStr into its own function (defined in roundTools), to be used for serializing fractional F2Dot14 angles for COLRv1 PaintRotate etc.
2021-07-06 17:35:03 +01:00
Cosimo Lupo
aae11e45c2 Bump version: 4.25.0 → 4.25.1.dev0 2021-07-05 18:10:22 +01:00
Cosimo Lupo
696b7ac448 Release 4.25.0 2021-07-05 18:10:21 +01:00
Jany Belluz
2ff3159a5f Mark the environment variable as experimental 2021-07-05 17:28:44 +01:00
Jany Belluz
527179619b Refactor the Cluster class to be top-level instead of nested the function 2021-07-05 17:28:44 +01:00
Jany Belluz
d1c46f9d10 Clarify comment with the plan vs the actual implementation 2021-07-05 17:28:44 +01:00
Jany Belluz
7860dd5fe8 Add tests that optimize block matrices 2021-07-05 17:28:44 +01:00
Jany Belluz
ef67839fdb Fix typing error 2021-07-05 17:28:44 +01:00
Jany Belluz
3b34b228dd Fix fonttools otlLib.optimize command line 2021-07-05 17:28:43 +01:00
Jany Belluz
604513a38f Fix a few comments 2021-07-05 17:28:43 +01:00
Jany Belluz
bba5e8b213 Add optional compaction of GPOS PairPos subtables in otlLib.optimize.gpos
See pull request: https://github.com/fonttools/fonttools/pull/2326

The new module `otlLib.optimize.gpos` provides `compact` functions that
can reduce the file size of GPOS PairPos lookups by splitting subtables
in a smart way to avoid storing zero-valued pairs.

The compaction methods are called from `otlLib.builder` and
`varLib.merger` so that static and variable fonts can benefit from the
optimization at compile time.

The new module `otlLib.optimize` is also executable, to allow running
the optimization on existing fonts.

The optimization is a trade-off because on the one hand it can reduce
significantly the byte size of the GPOS table (up to 50% in random
Google Fonts) but on the other hand it adds to the compilation time and
may make fonts very slightly bigger once compressed to WOFF2 (because
WOFF2 doesn't mind about zero values and compresses them very well).

As such, the optimization is off by default, and you can activate it by
providing the environment variable `FONTTOOLS_GPOS_COMPACT_MODE=5` for
example (values from 0 = off to 9 = max file size savings, but many more
subtables).
2021-07-05 17:28:43 +01:00
Khaled Hosny
a7ac2de5cd [tfmLib] New library for reading TFM files
New library for reading TeX Font Metrics files. Does not support writing
them back.

Fixes https://github.com/fonttools/fonttools/issues/2352
2021-07-05 03:24:25 +02:00
Khaled Hosny
383e70fc39 [sstruct] Accept pad byte format character
The list of format characters that sstruct accepts was missing “x” for
ignored pad bytes.
2021-07-05 01:33:16 +02:00
Khaled Hosny
bdd462f066 [sstruct] Accept bool format character
The list of format characters that sstruct accepts was missing “x” for
ignored pad booleans.
2021-07-03 13:50:08 +02:00
Khaled Hosny
617aee7f03 [sstruct] Minor
To reduce the noise in the next commits.
2021-07-03 13:49:53 +02:00
Cosimo Lupo
a0bd872f0e TupleVariation: make shared tuples order deterministic
most frequent first (like before https://github.com/fonttools/fonttools/pull/2351), only sort ties alphabetically
2021-07-02 12:52:54 +01:00
Garret Rieger
7f9e2c3808 sort shared tuples produced by Counter.most_common()
In python 3.7 and earlier most_common() sorts first by the item count and then arbitrarily in the event of ties. This can result in two identical instancing operations producing different binary results.
2021-06-30 17:00:59 -07:00
Cosimo Lupo
d0d59d2f2c Add PaintScale* and Paint{Rotate,Skew}* variants
This updates fonttools to match the latest draft COLRv1 spec at https://github.com/googlefonts/colr-gradients-spec/pull/290

Summary of changes:
- Added 8 new PaintScale* tables: with/without centers, uniform vs non-uniform
- Added *AroundCenter variants to PaintRotate and PaintSkew (default versions no longer have centerX/Y defaulting to origin)
- PaintRotate, PaintSkew and PaintComposite formats re-numbered
2021-06-28 18:38:47 +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
Takaaki Fuji
58d6ccf8ae Fix math.atan2 call
Shouldn't make any difference here, but math.atan2(y, x) should be the
correct order.
2021-06-25 09:47:21 +09:00
Takaaki Fuji
4c22d11aa7 Keep GuessSmoothPointPen in sync with fontPens
Imported 9b7ecb4 from fontPens, which is the version modified to accept
a parameterized tolerance. Recent changes in fontTools such as 2831096,
186e461 and 7d5530e were considered so that the diff will be minimal.
2021-06-25 09:39:58 +09:00
Behdad Esfahbod
f64f0b42f2 Consolidate bit_count / popCount methods
Fixes https://github.com/fonttools/fonttools/issues/2331
2021-06-04 10:15:51 -06:00
Cosimo Lupo
35dae02dea
Merge pull request #2318 from emuller-amazon/main
Fix parsing of post tables version 2.0 (#2314)
2021-06-03 15:40:30 +01:00
Eric Muller
e2d9919524 Address pull request comments 2021-06-01 07:16:53 -07:00
Cosimo Lupo
1df4f1eac1 subset: drop empty features unless 'size' with FeatureParams table
Fixes #2324
2021-05-27 09:33:29 -06:00
Eric Muller
add77ca3f7 Report error is post table version 2.0 is too small 2021-05-26 11:27:39 -07:00
Eric Muller
bb5d59300c Merge branch 'fonttools:main' into main 2021-05-25 09:46:42 -07:00
Cosimo Lupo
ee2aa264d5 Bump version: 4.24.4 → 4.24.5.dev0 2021-05-25 14:33:29 +01:00
Cosimo Lupo
b3acb8b984 Release 4.24.4 2021-05-25 14:33:29 +01:00
Cosimo Lupo
cf57ee0bbd
Merge pull request #2323 from fonttools/fix-instancer-valuerecord
instancer: Fix AttributeError when ValueRecord has XAdvDevice but no XAdvance
2021-05-25 14:25:45 +01:00
Cosimo Lupo
b8ce99962c [merger] make getattr(valueRecord, *) default to 0 if it has Device tables but corresponding value is not set
Fixes https://github.com/fonttools/fonttools/pull/2323
2021-05-25 12:36:17 +01:00
Behdad Esfahbod
7af43123d4 [otBase] Tiniest cleanup 2021-05-24 14:52:34 -06:00
Cosimo Lupo
96f0169d9d Bump version: 4.24.3 → 4.24.4.dev0 2021-05-20 19:33:34 +01:00
Cosimo Lupo
9d5c3adc7c Release 4.24.3 2021-05-20 19:33:34 +01:00
Cosimo Lupo
d1e2e0e381 otTables: ignore Format attribute in split.*Subst overflow-fixing methods
Fixes https://github.com/fonttools/fonttools/issues/2319
2021-05-20 19:19:37 +01:00
Eric Muller
212bb30c26 Fix parsing of post tables version 2.0 (#2314) 2021-05-20 09:32:26 -07:00