1671 Commits

Author SHA1 Message Date
Cosimo Lupo
dfeacfba36 [varLib.models] minor
We need to use float (0.) rather than int (0) for the normalized axis
origin, otherwise some varLib roundtrip tests may fail.

E.g.

```diff
       <tuple>
-        <coord axis="wght" max="1.0" min="0.0" value="0.61"/>
+        <coord axis="wght" max="1.0" min="0" value="0.61"/>
```
2017-08-16 16:35:57 +01:00
Cosimo Lupo
04eacf13cd [varLib] include default maps for all avar axes, even without <map> elements
This is a follow-up to Jens' comment:

19c4b377b8 (commitcomment-23458151)

Now, if there's any axis that has 'interesting' segment maps (and thus
an avar table is added), we also ensure that for the rest of the axes
that aren't modified (either because no <map> elements are defined or
because an identity mapping is defined in the designspace), we always
have a non-empty segment maps array containing the three default maps:
{-1.0: -1.0, 0.0: 0.0, 1.0: 1.0}.

This is to work around CoreText and DirectWrite rendering issue with
empty avar segment maps arrays.
2017-08-16 16:30:11 +01:00
Behdad Esfahbod
f0c58ddf9b [varLib] Remove unused import 2017-08-09 21:43:44 -07:00
Behdad Esfahbod
a1629fa52b [varLib] Update supportScalar() to allow for OpenType-specific contraints
Part of https://github.com/fonttools/fonttools/issues/1020
2017-08-07 17:05:29 -07:00
justvanrossum
18fa7ccec0 supportScalar(): ignore an axis when its peak value is 0; fixes #1020 2017-08-07 13:16:24 +02:00
Erik van Blokland
4762865cac Makes it a bit easier to find out what is wrong with the values. 2017-08-05 20:37:37 +02:00
Behdad Esfahbod
b9151ffacb [varLib] Add assertions to make sure we merge similar ValueFormat2-zeroedness 2017-08-04 09:22:43 +01:00
Behdad Esfahbod
49f249b118 [varLib] Add faster tables first
Speeds up development speed :).
2017-08-04 09:07:38 +01:00
Behdad Esfahbod
f3031ce797 [varLib] Add comment 2017-08-04 08:55:34 +01:00
Behdad Esfahbod
010ea47de1 [varLib] Minor rename 2017-08-04 08:41:29 +01:00
Cosimo Lupo
b5ab6d3af3 [varLib] temporary workaround to make MVAR tests pass
https://travis-ci.org/fonttools/fonttools/jobs/260671300#L2519-L2519

Behdad will revert this later
2017-08-03 17:57:16 +01:00
Cosimo Lupo
74035147a0 [varLib] remove unused 'instances' argument in _add_avar 2017-08-03 14:57:02 +01:00
Behdad Esfahbod
3746f75d7f [varLib] Split _add_fvar_avar() into _add_fvar() and _add_avar() 2017-08-03 12:38:23 +01:00
Cosimo Lupo
19c4b377b8 [varLib] add predefined avar mappings to fix rendering in CoreText
Fixes https://github.com/googlei18n/fontmake/issues/295
2017-08-02 15:12:26 +01:00
Behdad Esfahbod
c55ef5257d [varLib] Flatten multiple tail PairPosFormat2 subtables before merging
Reuses the aligner.  Neat.
2017-08-01 19:06:40 +01:00
Behdad Esfahbod
eca0c441d1 [varLib] Factor out PairPosFormat2 matrix alignment code 2017-08-01 19:06:40 +01:00
Behdad Esfahbod
f2a1f3446b [varLib] Minor 2017-08-01 19:06:40 +01:00
Cosimo Lupo
ca1bb10aa8 [varLib] test avar mappings are 'interesting' after normalizing values
otherwise we could end up with unnecessary avar tables only containing
the standard maps.
2017-08-01 12:08:44 +01:00
Behdad Esfahbod
3d1f5ae7d4 [varLib.merger] Fixup on previous commit
Also drop Extension from self.
2017-07-28 18:33:01 +01:00
Behdad Esfahbod
f7c20cf895 [varLib.merger] Remove Extensions subtables before merging 2017-07-28 18:17:21 +01:00
Behdad Esfahbod
24db8b015b [varLib] Assert that avar -1,0,+1 mappings are as expected if they exist 2017-07-28 15:30:40 +01:00
Jens Kutilek
1136afd304 [varLib] Initialize the avar segment map with required default entries (#1014)
* Initialize the avar segment map with required default entries

* Set default values only after deciding that a segment map is needed for this axis

* Correct dict update call
2017-07-28 15:25:03 +01:00
Behdad Esfahbod
39ffa74128 Merge pull request #1019 from fonttools/varlib-iup-optimal
Varlib iup optimal
2017-07-28 12:09:27 +01:00
Cosimo Lupo
0ad14b67a9 [varLib] fix TypeError: zip object has no len on python3 2017-07-27 17:05:34 +01:00
Behdad Esfahbod
bb6ce80f63 [varLib] Speed up IUP optimizer by detecting more forced points 2017-07-26 14:13:18 -07:00
Behdad Esfahbod
3094926304 [varLib] Minor 2017-07-26 11:56:45 -07:00
Behdad Esfahbod
69206e290e [varLib] "Document" IUP DP algorithm for the case when forced set is empty 2017-07-22 18:48:23 -07:00
Behdad Esfahbod
e5ac044969 [varLib] Speed up IUP DP some more when forced set is empty
Pass a maximum lookback of n to the circle-breaking DP of size 2*n.

This should theoretically speed up that DP by a factor of 4 or 8 or something...
Empirically it's far from that, but solidly measurable.

Again, gvar table size got a slight improvement, which I didn't expect... It
might be that my one test is hitting lucky cases with point encodings.. or it
might be just me wishfully thinking so.
2017-07-22 18:46:16 -07:00
Behdad Esfahbod
91e4220193 [varLib] Speed up IUP DP when forced set is empty
Drives it into acceptable speed now.  Note that I'm getting better
gvar size after this patch, which I didn't expect.  So, either this
algorithm or the previous one was buggy. :(
2017-07-22 18:31:10 -07:00
Behdad Esfahbod
8dc5340b1d [varLib] Minor; Remove nonexistent attribute name from ignore list 2017-07-14 09:12:04 +01:00
Jens Kutilek
ebbbccae4c For SinglePos format 2, calculate ValueFormat from a list of value records 2017-07-06 10:38:36 +02:00
Jens Kutilek
68e9fcec59 Recalculate ValueFormat when merging SInglePos 2017-07-05 19:06:41 +02:00
Rob McKaughan
efabd5b049 Move assert outside of if at the bottom of _add_MVAR() per Behdad. 2017-06-22 15:15:58 -07:00
Rob McKaughan
ae451052b8 Changed 'if len(records) > 0' to 'if records' in _add_MVAR() 2017-06-20 15:30:28 -07:00
Rob McKaughan
7ed4c43395 Do not emit MVAR if there are no entries in the variation store 2017-06-20 15:01:23 -07:00
Behdad Esfahbod
7fa1ce1ca7 [varLib] Finish optimal IUP DP, however!
This slows down the DP by factor of 8 or so!  So, going to replace this last
brute-force step with something else.
2017-05-31 20:29:00 -04:00
Behdad Esfahbod
bd5fa12520 [varLib] A bit more refactoring towards optimal IUP 2017-05-31 20:12:59 -04:00
Behdad Esfahbod
05b1bed63b [varLib] Towards truly optimal IUP DP solution wrt circularity 2017-05-31 19:58:12 -04:00
Behdad Esfahbod
4a27f60d35 [varLib] More refactoring 2017-05-31 19:22:48 -04:00
Behdad Esfahbod
5ee58772cf [varLib] Improve IUP DP
Previously, it was always encoding first and last point.  Now it only always
encodes last point.  Soon resolving that too.  Shows another 0.5% savings in
gvar table size with Noto Sans Arabic.
2017-05-31 19:14:17 -04:00
Behdad Esfahbod
0b8c9e3a0c Revert "[varLib] Flip IUP DP to go back-to-front"
This reverts commit 3e35441c805b03d6d6eea5b24ce44f555c5fad56.

The DP is cleaner to work out front-to-back.
Will achieve the same effect by flipping the lists in a later commit.
2017-05-31 19:11:30 -04:00
Behdad Esfahbod
28ce62b782 [varLib] Refactor DP code into functions 2017-05-31 19:06:42 -04:00
Behdad Esfahbod
7db5868dba [varLib] Minor 2017-05-31 19:00:33 -04:00
Behdad Esfahbod
c79c27a841 [varLib] Add commentary of IUP DP mechanism 2017-05-29 16:13:46 -04:00
Behdad Esfahbod
3e35441c80 [varLib] Flip IUP DP to go back-to-front
Saves a few bytes (really, a few!).
2017-05-29 16:03:42 -04:00
Behdad Esfahbod
eeb13bba88 [varLib] Prepare IUP DP code to go back-to-front
That would produce smaller point numbers, which sometimes, results in
smaller encoding.
2017-05-29 15:59:29 -04:00
Behdad Esfahbod
c87c592d9e [varLib] Minor IUP renaming
Same functionality
2017-05-29 15:29:20 -04:00
Behdad Esfahbod
db8d0eeb5f [varLib] Speed up IUP optimization DP by 7.5x! 2017-05-29 15:06:55 -04:00
Behdad Esfahbod
2e80784ca7 [varLib] Use geometric distance for tolerance calculations 2017-05-28 23:45:36 -07:00
Behdad Esfahbod
1d148b10c5 [varLib] Start implementing optimal IUP solution
Not optimal right now, since first and last point are always included.
Also rather slow.  Takes about 12s for NotoSansArabic, and saves just
one percent in gvar size with a tolerance of 0.5 font units.
2017-05-28 23:45:36 -07:00