6327 Commits

Author SHA1 Message Date
Behdad Esfahbod
d4da819ce6 Space 2018-11-18 20:28:25 -05:00
Cosimo Lupo
f99afc70d3
Merge pull request #1326 from BoboTiG/fix-resource-leak
Fix several ResourceWarning: unclosed file and some related improvement
2018-11-16 23:00:24 +00:00
Behdad Esfahbod
e30b830403
Merge pull request #1368 from fonttools/varLib-sparse-masters
[varLib] Support sparse masters
2018-11-15 15:00:00 -08:00
Behdad Esfahbod
f530e3e398
Merge pull request #1372 from fonttools/varLib-faster-featureVars
[varLib] Far faster featureVars
2018-11-15 14:59:48 -08:00
Cosimo Lupo
87894641c0 pytest 4.0 doesn't recognize module name if listed in 'testpaths'
'fontTools' is not a folder name, but the import name of the package
where we have some doctests to be discovered and run.

even though we have --pyargs option (which makes pytest first attempt
to treat any positional arguments as module import names), with the
latest pytest 4.0.0 our tests started to fail as if the new pytest
is evaluating the default 'testpaths' (as defined in setup.cfg, used
when no arguments are supplied to pytest) _before_ the --pyargs
option, and thus it thinks that 'fontTools' is a directory name
instead of a package name...

This a workaround. It also means that if one runs `pytest` without
arguments, only the tests inside `Tests` directory are going to be
run automatically, and not also the doctests inside fontTools package.

When running the test suite using tox, all tests are run, both
those in Tests folder and the doctests in fontTools.
2018-11-15 08:47:20 +00:00
Behdad Esfahbod
0ab515b39e [subset] If charString dehinted to empty, add "endchar"
Fixes https://github.com/fonttools/fonttools/issues/1379
2018-11-15 01:30:26 -05:00
Behdad Esfahbod
5856740486 Improve error message 2018-11-15 01:26:57 -05:00
Behdad Esfahbod
49772b136f [varLib] Comment 2018-11-14 10:07:51 -05:00
Behdad Esfahbod
8d441779e5 [varLib] Fix PairPosFormat2 merging
See comments.

Fixes https://github.com/googlei18n/fontmake/issues/470
2018-11-13 22:30:42 -05:00
Behdad Esfahbod
d067cb7df7 Revert "[varLib] Skip empty glyphs"
This reverts commit 446ee2a4d011909eaa14fa5ccbd8c4d6df3329de.

https://github.com/fonttools/fonttools/pull/1368#issuecomment-437689015
2018-11-12 09:53:28 -05:00
Behdad Esfahbod
16aa66c384 [varLib.featureVars] Update test expectation 2018-11-10 15:24:11 -05:00
Behdad Esfahbod
2295e27dca [varLib.featureVars] Remove unused intersectBoxes() 2018-11-10 15:19:10 -05:00
Behdad Esfahbod
f1a9c6c036 Move popCount() into new fontTools.misc.intTools 2018-11-10 15:16:52 -05:00
Behdad Esfahbod
7111b253b1 Move hashdict into new fontTools.misc.dictTools 2018-11-10 15:14:36 -05:00
Behdad Esfahbod
0adc304c7b [varLib.featureVars] Add TODO for moving things to fontTools.misc 2018-11-10 15:09:35 -05:00
justvanrossum
29cc726363 fix test expected data 2018-11-10 15:07:18 -05:00
justvanrossum
49b7333cf5 According to the spec, this number should be 0x00010000. 2018-11-10 15:07:18 -05:00
Behdad Esfahbod
5c1ca73123 [varLib] Rename allSame() to allEqual()
Being same ("is") is not the same as being equal ("=="), even though
the two are equal most of the time.
2018-11-10 15:06:07 -05:00
Behdad Esfahbod
e85a9755ef [varLib.featureVars] Merge same-subsitutions rules as well 2018-11-09 23:59:33 -05:00
Behdad Esfahbod
f6bfc4139d [varLib.featureVars] Add quadratic test
We get the optimal solution.
2018-11-09 18:59:28 -05:00
Behdad Esfahbod
34241a819b [varLib.featureVars] Drop fully-occluded remainder boxes
Re-land the correct version.
2018-11-09 16:13:21 -05:00
Behdad Esfahbod
95e13008e1 Revert "[varLib.featureVars] Drop fully-occluded remainder boxes"
This reverts commit edecdce0a576b2e15e21711bcc73ae9beba0c527.

Was wrong.  Will figure out the correct version.
2018-11-09 16:08:01 -05:00
Behdad Esfahbod
8005d43146 [varLib.featureVars] Enable test now that it passes 2018-11-09 16:04:21 -05:00
Behdad Esfahbod
edecdce0a5 [varLib.featureVars] Drop fully-occluded remainder boxes 2018-11-09 15:52:18 -05:00
Behdad Esfahbod
7d5fbe1605 [varLib.featureVars] Improve new algorithm to its full potential
See 0283b1f.

By finishing overlayBox() to cull remainder box when possible, we generate
far fewer spurious boxes, if any.

For the featureVars_test.py test case, this now generates optimal output,
that is, 2*n - 1 boxes.

Running time for n=20 stays at 0.06s, which is probably Python startup
time.

Running time for n=100 is down from 2.5s with unoptimized new algorithm,
to 0.17s for this and number of output boxes from 5050 to the optimal 199.

Fixes #1372 again
2018-11-09 15:35:58 -05:00
Behdad Esfahbod
f2b26304ff [varLib.featureVars] Py3 2018-11-09 14:54:13 -05:00
Behdad Esfahbod
0be1636176 [varLib.featureVars] Optimize popCount()
While might look like unjustified micro-optimizing, for featureVars_test.py with
n=100, speeds up 10%.  From 2.5s to 2.2s.
2018-11-09 14:34:15 -05:00
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
5a34805d05 [varLib.featureVars] Improve test 2018-11-09 11:55:11 -05:00
Behdad Esfahbod
133607f4b1 [varLib.featureVars] Add test 2018-11-09 11:47:49 -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
Behdad Esfahbod
fa303ea07a [varLib] Comment 2018-11-09 09:57:09 -05:00
Behdad Esfahbod
0a0fc2a09e [varLib] Minor 2018-11-09 09:53:56 -05:00
Behdad Esfahbod
7711755b2c [varLib] Add mapper to allSameAs() and use it 2018-11-09 09:51:53 -05:00
Behdad Esfahbod
bff73edcfd [varLib] Add models.allNone 2018-11-09 09:48:02 -05:00
Behdad Esfahbod
7326cb59f3 [varLib] Limit ClassDef merger to GDEF.GlyphClassDef
Would be wrong to change a glyph from class0 to non-zero in a ClassDef2
kind of situation.  Contain this code to where it was written for.
2018-11-09 09:41:08 -05:00
Behdad Esfahbod
41d07bd8f1 [varLib] Minor 2018-11-09 09:40:06 -05:00
Behdad Esfahbod
ec509540f2 [varLib] Fixup MarkMark merging 2018-11-09 01:46:15 -05:00
Behdad Esfahbod
48e918ab7e [varLib] Minor 2018-11-09 01:35:20 -05:00
Behdad Esfahbod
b21a39861b [varLib] Add sparse masters to MarkMarkPos
Untested.
2018-11-09 01:17:51 -05:00
Behdad Esfahbod
dfff5134e5 [varLib] Towards sharing merge logic of MarkBasePos for MarkMarkPos 2018-11-09 01:02:45 -05:00
Behdad Esfahbod
babc6d878a [varLib] More XML redundancy test failure fixes 2018-11-09 00:56:20 -05:00
Behdad Esfahbod
479b52e13d [varLib] When merging MarkBasePos, retain original coverage objects
Just such that their existing .Format is preserved, as that is written out
to the XML file, and would break the test suite if not there.

Stupid to write Coverage Format to XML.  Oh well...
2018-11-09 00:51:53 -05:00
Behdad Esfahbod
11a679df21 [varLib] Allow sparse masters in GPOS MarkBasePos lookups
Part of https://github.com/googlei18n/fontmake/issues/88
Part of https://github.com/fonttools/fonttools/issues/1355
2018-11-09 00:41:25 -05:00
Behdad Esfahbod
0d85fc57d0 [varLib] Fix recursing object tree in varStore
Was barfing on Coverage objects if they didn't have .Format.  Ouch!
2018-11-09 00:00:33 -05:00
Behdad Esfahbod
7cda1c1a97 [varLib] Add models.allSameAs() 2018-11-08 23:41:09 -05:00