17 Commits

Author SHA1 Message Date
Behdad Esfahbod
0283b1fd1d [varLib.featureVars] Rewrite algorithm
Whereas previous algorithm had exponential running time and return
value size, new one has quadratic.

For featureVars_test.py test case, for example, which is a pathological
test case of n sliding intervals, the number of output intervals of
various algorithms are:

- Previous algorithm: 2**n - 1
- New algorithm: n*(n-1)/2
- Optimal algorithm: 2*n - 1

Ie, we go from exponential to quadratic, whereas in this case the optimal
solution is linear.

Running time of said test, for n=20, goes from over 20s, to 0.06s.

The algorithm can be improved.  The overlayBox() function currently does
not try to shrink the remainder box.  Doing that will probably bring us
to optimal solution for this test case.

Fixes https://github.com/fonttools/fonttools/pull/1372

One test is failing.  Needs to be investigated that new output is correct,
and test expectations updated.
2018-11-09 14:30:46 -05:00
Behdad Esfahbod
de2179caee [varLib.featureVars] Update comment to match actual function output format 2018-11-09 12:15:37 -05:00
Behdad Esfahbod
c7e5a35515 [varLib.featureVars] Space 2018-11-09 12:11:48 -05:00
Behdad Esfahbod
60db91646c [varLib.featureVars] Add overlayFeatureVariations() 2018-11-09 11:17:17 -05:00
Behdad Esfahbod
a37dab4b74 [varLib.featureVars] Return exploded space from main entry point
Also, make font optional
2018-11-09 10:56:47 -05:00
Behdad Esfahbod
5560b26a5d [varLib] Avoid combinatorial explosion in featureVars
By merging duplicate regions.

Fixes https://github.com/fonttools/fonttools/issues/1370
2018-11-09 10:39:19 -05:00
justvanrossum
e45117aa02 Fixed bug that tried to get an attr off a LangSysRecord rather than a LangSys. Fixes #1365 2018-11-08 10:04:25 +01:00
Cosimo Lupo
6e9a24b45b
featureVars: mark module as experimental/subject-to-change 2018-06-14 15:25:09 +01:00
Cosimo Lupo
04dc7339fd
[featureVars] remove unused fvar code; normalized default space is always (-1.0, 1.0) 2018-04-18 12:07:06 +01:00
justvanrossum
978967983c removing normalization step: min/max values are now expected to be given in normalized coordinates 2018-04-18 08:51:45 +02:00
Cosimo Lupo
0f1c6b3cf4
[featureVars] add doctests for non intersecting spaces or regions 2018-04-17 16:53:33 +02:00
Cosimo Lupo
9a04811ec2
[featureVars] use itertools to get combinations of indices
and rename getPermutations to iterAllCombinations.

It's not really permutations we are after here, but more combinations
of indexes sorted by decreasing length, from more specific to less
2018-04-17 15:58:48 +02:00
Cosimo Lupo
0c20948341
clarify coordinates are expressed in 'raw design' values, not 'user'
this is what tripped the whole misunderstanding
2018-04-17 12:31:14 +02:00
Cosimo Lupo
2002a6c92c
Revert "featureVars: modify normalization using avar maps"
This reverts commit 081ca1327c69ad74839b95d3c5096868a5f25532.

https://github.com/fonttools/fonttools/pull/1240#issuecomment-381923485
2018-04-17 12:23:38 +02:00
Cosimo Lupo
081ca1327c
featureVars: modify normalization using avar maps 2018-04-16 18:38:58 +02:00
justvanrossum
4256e6c6bf make doctests independent of dict order repr 2018-04-16 10:33:30 +02:00
justvanrossum
16b7d424dd Module containing a function to add conditional substitutions to a variable font 2018-04-16 10:21:19 +02:00