7271 Commits

Author SHA1 Message Date
Cosimo Lupo
499d97464d
instancer_test: use caplog fixture 2019-05-31 19:57:53 +01:00
Cosimo Lupo
3d5f5c0a36
Tests/conftest.py: disable fontTools.configLogger globally during tests
otherwise it causes sides effects since logging state is global and should only
be done when __name__ == '__main__'.

We can capture logging messages via the caplog pytest fixture
2019-05-31 19:57:52 +01:00
Cosimo Lupo
1febf7f5a2
minor formatting 2019-05-31 12:37:31 +01:00
Cosimo Lupo
06ad903ef1
instancer: rename locals from snake_case to camelCase for consistency
the rest of the instancer module uses camelCase, no point in having both styles within the same module
2019-05-31 12:26:03 +01:00
Cosimo Lupo
de2d5382ba
instancer: add more info to module-level docstring 2019-05-31 12:26:03 +01:00
Cosimo Lupo
333ec85985
Merge pull request #1626 from anthrotype/instancer-feature-vars
instancer: bugfixes and tests for instantiateFeatureVariations
2019-05-31 10:50:41 +01:00
Cosimo Lupo
b0ede1a3c6
instancer_test: add tests for normalizeAxisLimits function
coverage is now 97%, good enough
2019-05-30 14:10:26 +01:00
Cosimo Lupo
68bbc74a78
instancer_test: add tests for main() function 2019-05-30 13:56:58 +01:00
Cosimo Lupo
b528ff67f0
instancer_test: add unit tests for parseLimits 2019-05-30 13:35:56 +01:00
Cosimo Lupo
b878b867c0
instancer: don't break on unsupported condition formats
continue checking subsequent condition tables in case the other may
be format=1 and may reference a pinned axis; in which case, these
conditions need to be dropped from the condition set, or the whole
record needs to be dropped if the instance coordinate is outside the
condition range.
Condition tables within a condition set are associated with a AND
boolean operator, so if any one doesn't match, the whole set doesn't
apply. Even if we don't recognize one condition format, if we do
ascertain that another condition table does not match the current
partial instance location, we can drop the FeatureVariation record
since it doesn't apply.
2019-05-30 13:13:06 +01:00
Cosimo Lupo
874947c00b
instancer_test: make new test font with FeatureVariations
instead of reading off existing FeatureVars.ttx test file.
This gives us more flexibility to add more tests, and keeps the input
values closer to the expected results
2019-05-30 13:13:06 +01:00
Cosimo Lupo
afc194db19
featureVars: populate counts on OT tables
this is done automatically upon compiling; however it's good to do it here
as well, in case one wants to pass the updated font directly to other modules
like 'subset' which requires these fields to be present -- without having
to first compile and decompile.
2019-05-30 12:29:23 +01:00
Cosimo Lupo
36f2775d6c
instancer: always keep FeatureVariationRecords with unknown condition format
there was a logic issue in the function that checks whether a FeatureVariationRecord
has a unique set of condition (was returning False instead of True for unsupported condition).
It's safer to always keep such records with unknown condition formats as new formats
may be added in the future. A warning is already issued in these cases.
2019-05-30 11:22:01 +01:00
Cosimo Lupo
823f0fc021
instancer: fix invalid operand '-'; dict.keys() returns list in py27 2019-05-29 19:33:36 +01:00
Cosimo Lupo
3560267a0b
instancer_test: add tests for instantiateFeatureVariations
using the same test file FeatureVars.ttx used by varLib_test.py
2019-05-29 19:24:02 +01:00
Cosimo Lupo
5a3c3334fe
instancer: fix typo in logger name 2019-05-29 19:22:02 +01:00
Cosimo Lupo
11c662ee4d
instancer: only keep unique FeatureVariationRecords
After partial instancing, multiple FeatureVariationRecords may end up with
the same set of conditions (e.g. if one references two axes, one of which
is dropped, and a subsequent one also references the same axis that was
kept in the preceding record's condition set, and the min/max values are
the same for both records).
Therefore, we make sure only the first unique record with a given
configuration of conditions is kept. Any additional records with identical
conditions will never match the current context so they can be dropped.
2019-05-29 18:33:36 +01:00
Cosimo Lupo
60754aab8e
instancer: prune unreferenced lookups in instantiateFeatureVariations
the 'prune_lookups' method is dynamically set on the table_G_S_U_B class
only after importing the fontTools.subset module
2019-05-29 18:33:35 +01:00
Cosimo Lupo
7867c582da
instancer: remap axis indices in instantiateFeatureVariations
ConditionTable.AxisIndex needs to change when dropping axes, to
refer to the same axis in the modified fvar.axes array.

There was also another bug when a condition was not met,
and the `applies` flag (initialised to `True`) was not set to
`False`, thus substutions were incorrectly applied.
2019-05-29 18:20:11 +01:00
Cosimo Lupo
e2c0acf1c2
Merge remote-tracking branch 'origin/master' into partial-instancer 2019-05-29 18:04:54 +01:00
Cosimo Lupo
e3fcf3d459
Merge pull request #1618 from anthrotype/instancer-tests
instancer: add tests for instantiateVariableFont main function
2019-05-29 18:03:35 +01:00
Cosimo Lupo
8f88131a78
FeatureVars.ttx: fix up expected test results after aa8a5bc 2019-05-29 13:48:11 +01:00
Cosimo Lupo
aa8a5bc616
featureVars: avoid duplicate refs to 'rvrn' feature in default langsys
the buildGSUB function creates an empty GSUB with no FeatureRecords, so the
FeatureIndex list should be empty initially; the index of the newly created
rvrn feature record will be appended later on by addFeatureVariationsRaw
function.
2019-05-29 13:40:57 +01:00
Cosimo Lupo
bec188c816
Bump version: 3.42.0 → 3.42.1.dev0 2019-05-28 12:07:55 +01:00
Cosimo Lupo
a0b8ff8b35
Release 3.42.0 2019-05-28 12:07:54 +01:00
Cosimo Lupo
ecd96cfdbc
Update changelog [skip ci] 2019-05-28 12:05:41 +01:00
Cosimo Lupo
2275015df6
README: mention latest Unicode 12.0 [skip ci] 2019-05-28 11:32:48 +01:00
Cosimo Lupo
cbab74f7fc
update unicodedata2 backport for Unicode 12.0 2019-05-28 11:30:35 +01:00
Cosimo Lupo
95028fb52f
requirements: pin scipy and munkres versions for py27 2019-05-28 11:30:34 +01:00
Cosimo Lupo
89f42079b6
Merge pull request #1619 from schriftgestalt/tsType-type
fix sign of fsType
2019-05-28 03:38:20 -04:00
Behdad Esfahbod
ce21271c2d [subset] Use _list_subset() more 2019-05-27 13:56:46 -04:00
Behdad Esfahbod
77b394101f [subset] Skip out-of-range class values in mark attachment
Fixes https://github.com/fonttools/fonttools/issues/1478
2019-05-27 13:52:26 -04:00
Behdad Esfahbod
d38e26d324 [subset] Whitespace 2019-05-27 13:44:20 -04:00
Behdad Esfahbod
2ac470b96b Ouch, fix indentation
My bad.  Really sorry.
2019-05-25 17:18:35 -04:00
Behdad Esfahbod
0442d9062a Improve allEqual 2019-05-25 16:12:24 -04:00
Miguel Sousa
5045fb720c
Merge pull request #1621 from fonttools/fb-empty-dsig
fontBuilder: Don't add a stub signature to DSIG
2019-05-25 12:56:18 -07:00
Miguel Sousa
9fb0cac564 fontBuilder: Don't add a stub signature to DSIG
An empty DSIG is enough to make MS applications happy and also fixes an error reported by MS Font Validator
2019-05-25 10:09:13 -07:00
schriftgestalt
47f8d06d9a fix sign of fsType 2019-05-23 17:40:01 +02:00
Cosimo Lupo
6efc66e0fc
instancer_test: test instantiateVariableFont main function
Added new test VF font (a subset of NotoSans-VF only containing glyphs 'A', 'Agrave' and 'T');
the VF was instanced with varLib.mutator, producing a series of full instances, which are
included as ttx files as well.
The tests run the partial instancer twice, once only instancing wght, then again for wdth,
and assert that the generated instance is identical to those.
2019-05-21 18:42:39 -04:00
Cosimo Lupo
17254fe37a
varLib.merger: Class2Record.Value{1,2} may not be initialised to None
When importing from TTX, these attribute are not there.
2019-05-21 18:42:38 -04:00
Cosimo Lupo
1fdee0454a
instancer: also in GDEF 1.3 VarStore is optional and can be None 2019-05-21 18:42:13 -04:00
Cosimo Lupo
4051976f48
Merge remote-tracking branch 'origin/master' into partial-instancer 2019-05-21 14:54:42 -04:00
Cosimo Lupo
058165dc5c
instancer: mention special None and 'drop' in docstring and --help 2019-05-21 14:40:26 -04:00
Cosimo Lupo
0e9c5d9fe8
instancer: rename 'None' to 'drop'
https://github.com/fonttools/fonttools/pull/1617#issuecomment-494455729
2019-05-21 14:06:44 -04:00
Cosimo Lupo
3bc983e78d
instancer: skip instantiating GPOS/GDEF if GDEF version < 0x00010003
in which case GDEF doesn't have a VarStore attatched, thus GPOS can't have variations
2019-05-21 12:17:27 -04:00
Cosimo Lupo
0cc4ab164e
Merge pull request #1617 from anthrotype/populate-axis-defaults
instancer: make 'None' mean to drop an axis, or pinning at default
2019-05-21 11:47:06 -04:00
Cosimo Lupo
28fb29e758
instancer: make 'None' mean to drop an axis, or pinning at default
This allows to drop an axis (aka L1 instancing) without knowing the
axis' actual default value from fvar table. One can simply call
`instantiateVariableFont` function with a `None` value for a given
axis (i.e. axis_limits={'wght': None}); the `None` value is replaced
by the axis default value as per fvar table.

The same can be done from the console script as well.
The special string literal 'None' is parsed as the Python `None`
object. E.g.:

$ fonttools varLib.instancer MyFont-VF.ttf wght=None
2019-05-20 17:31:46 -04:00
Khaled Hosny
83db5ed132
Merge pull request #1614 from khaledhosny/varlib-gdef-glyphclass
[varLib] Fix merging GDEF.GlyphClassDef in mutator
2019-05-18 04:52:37 +02:00
Khaled Hosny
7e5644a0a8 [varLib] Fix merging GDEF.GlyphClassDef in mutator
The code was setting GlyphClassDef.classDefs for the base font to an
empty dict then reading it from all fonts. It accidentally works when
creating variable fonts because the GlyphClassDef of the other fonts
will be used, but when mutating there is only one font.

Fix by reading the glyph classes before assigning to an empty dict.
2019-05-18 04:44:34 +02:00
Khaled Hosny
6f5bb7822f
Merge pull request #1613 from khaledhosny/varlib-cli-logging
[varLib] Command-line options to configure logging
2019-05-18 03:59:10 +02:00