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
..
2018-10-24 19:08:11 +02:00
2018-09-27 17:41:09 -04:00