4299 Commits

Author SHA1 Message Date
Erik van Blokland
07cb0c3ac1 Localised names roundtrip in test. 2017-07-27 14:51:35 +02: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
Cosimo Lupo
dca96c9c55 [cffLib] get TopDict by index as well as by name
There can only be one TopDict in an OpenType font, whether CFF or CFF2;
plus in the latter, TopDict INDEX and Names INDEX are gone, just the
one TopDict is left. Most of the time, one simple wants to get to
that single TopDict instance.

So instead of doing this:

topDict = font['CFF '].cff.values()[0]

one can alternatively do this now:

topDict = font['CFF '].cff[0]
2017-07-26 18:53:42 +01:00
Cosimo Lupo
212ac26147 Merge pull request #1015 from robmck-ms/master
Add AxisValueFormat4 for STAT table v1.2  from OT v1.8.2.
2017-07-25 20:39:00 +01:00
Cosimo Lupo
ae89c0d5ca [ttx] drop the 'n' from "an TTX" 2017-07-25 20:35:55 +01:00
Cosimo Lupo
2d9ca0b2bd [ttx] remove mention to otf2ttf.py Snippet from help message
https://github.com/fonttools/fonttools/pull/1016#issuecomment-317847536
2017-07-25 20:33:41 +01:00
Dave Crossland
32fa8bc86b ttx.py Clarify help text
Confusion reported at https://groups.google.com/forum/#!topic/fonttools/7ocZWHbsCLw
2017-07-25 11:16:47 -04:00
Rob McKaughan
b8e2d90cda Add AxisValueFormat4 for STAT table v1.2 from OT v1.8.2. 2017-07-24 16:12:31 -07:00
Cosimo Lupo
25aad9041d minor: fix doctest failing on latest pypy
Expected:
    [-0.0, -0.0, -0.0]
Got:
    [0.0, 0.0, 0.0]
2017-07-24 16:47:07 +01:00
Cosimo Lupo
8ca53c6a17 [name] fix bcp46 language tag for Mac langID=9: 'si' -> 'sl'
Fixes #1013
2017-07-24 13:03:38 +01: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
Cosimo Lupo
4d9291fe71 [plistlib] in python3, explicitly use fmt=PlistFormat.FMT_XML
Otherwise it will try to sniff the plist format and call `seek`
method on the file object, but the zip filesystem does not support
that...

UnsupportedOperation: seek
2017-07-21 17:46:00 +01:00
Cosimo Lupo
f1f4e120f5 [filesystem] exclude '__MACOSX' metadata dir contained in zip file 2017-07-21 17:43:00 +01:00
Cosimo Lupo
a06da7681e fixup 2017-07-21 16:45:22 +01:00
Cosimo Lupo
ec8d58f0b8 [filesystem] in listDirectory, always use Unix '/' as separator
the _NOFS implementation is using `os.listdir` which uses the
native `os.sep`; however, pyfilesystem2 FS paths always uses forward
slashes '/'.
2017-07-21 16:40:28 +01:00
Cosimo Lupo
2bef40c30d [ufoLib] use self.fileSystem.joinPath instead of reader.joinPath 2017-07-21 14:11:13 +01:00
Cosimo Lupo
e3d89cee7f [ufoLib] fix listing images dir; pass a file object to pngValidator 2017-07-21 14:08:41 +01:00
Cosimo Lupo
c06c38cadb [ufoLib] UFOReader.getFileModificationTime is used by defcon 2017-07-21 14:05:59 +01:00
Cosimo Lupo
22a6f917e4 [filesystem] implement 'create' argument for _NOFS.movedir
in pyfilesystem2, movedir copies the content from one directory to
antoher, optionally creating the destination if create=True.

When the destination is exists and is a directory, shutil.move moves
the source directory inside the destinatinn directory.

shutil.copytree also fails if the destination already exists; so here
we resort to distutils.dir_util.copy_tree (it's part of python std lib)
2017-07-21 14:04:10 +01:00
Cosimo Lupo
3c0d41bac9 [filesystem] use the current ZipFS API; create "contents" dir
The 'mode' and 'allow_zip_64' arguments are no longer there in
pyfileststem2's zipfs module; allow_zip_64 is the default now,
and the 'mode' is replaced by a 'write' boolean argument

The "contents" root dir must be created manually.
2017-07-21 13:53:49 +01:00
Cosimo Lupo
46f32d4cd4 [filesystem] print exception in readPlist 2017-07-21 13:43:33 +01:00
Cosimo Lupo
337a68715e [filesystem] getinfo now returns a namespace, not a dict
We bumped the minimum required fonttools to 3.10, so
we can use the backported SimpleNamespace as the return
value of _NOFS.getinfo method.
2017-07-21 13:41:14 +01:00
Cosimo Lupo
1de6eb1eb5 [filesystem] pass create=True to movedir
otherwise it raises `ResourceNotFound`
2017-07-21 13:33:15 +01:00
Cosimo Lupo
590d00ba11 [filesystem] use unicode strings for path names
as pyfilesystem2 works internally with unicode strings, some methods
(e.g. self._fs.exists()) fail with TypeError if passed bytes strings
(on python 2 bytes == str).

We decode bytes path strings using the system's default filesystem
encoding.
2017-07-21 13:29:33 +01:00
Cosimo Lupo
62cc1c5805 [filesystem] allow to init FileSystem class from another instance 2017-07-21 13:23:04 +01:00
Cosimo Lupo
07ba88f55a [filesystem] fs.zipfs module no longer exports ZipOperError
it's unused anyway
2017-07-21 13:13:15 +01:00
Cosimo Lupo
758307d8bb [filesystem] use os.path if not haveFS 2017-07-21 12:59:56 +01:00
Cosimo Lupo
af8b0e3224 [filesystem] use removetree as removedir was removed from pyfilesystem2
https://github.com/PyFilesystem/pyfilesystem2/issues/32
2017-07-21 10:14:58 +01:00
Cosimo Lupo
50f381dec6 test_UFOConversion: remove test1To2 as support for UFO1 is deprecated 2017-07-21 10:14:16 +01:00
Cosimo Lupo
055e52f932 Merge branch 'master' into ufo4 2017-07-21 10:07:37 +01:00
Cosimo Lupo
c0d672ba70 [subset] return value from _DehintingT2Decompiler.op_hintmask
The `_SimpleT2Decompiler.execute` method expects that handlers for
hintmask/cntrmask operators return a tuple of (hintMaskBytes, index).
The index value is used to skip to the next token following the
hintmask bytes.
However, the `_DehintingT2Decompiler.op_hintmask` method was returning
None, thus the hintmask bytes were evaluated as the following token
instead of being consumed as such; but since in legacy python 2
`isinstance(token, basestring)` is True for both operators and
hintmask bytes, the latter might sometimes be wrongly interpreted
as operators!

For example, the hintmask bits '0110111101110010', encoded as a
bytes string `'\x6f\x72'` was being confused for the unimplemented
`'or'` operator...

Fixes #1006
2017-07-20 21:45:30 +01:00
Cosimo Lupo
72baa5a7d5 [cffLib/psCharStrings] remove cffCtx, pass down isCFF2
* Removed `CFFContext`
* Added `isCFF2` argument to CFFFontSet.decompile/compile, used from
  respective ttLib classes
* Index classes get a `isCFF2` argument in constructor (used for
  decompiling); must be True/False if `file` argument is not None;
  it is stored as self._isCFF2 to support lazy loading
* Removed `TopDictData` class; reuse same `TopDictIndexCompiler` for
  both CFF and CFF2
* `CFFWriter` and all `*Compiler` classes get an `isCFF2` argument;
  defaults to the parent compiler's `isCFF2` attribute
* Removed `size` argument from `produceItem` method as unused and
  useless (`len(data)` is the same)
* psCharStrings: removed useless ByteCodeBase class
* A reference to the TopDict's VarStoreData is passed down to all
  the FontDicts' PrivateDict, so it can be used to get the number of
  regions while decompiling blend and vsindex operators

See dicussion:
https://github.com/fonttools/fonttools/pull/968#issuecomment-309920007
2017-07-19 18:18:58 +01:00
Miguel Sousa
12b7c60a68 [feaLib] Cap nameID value to the maximum defined by OT spec
a9d260bfa2 (commitcomment-23115168)
2017-07-15 16:44:17 -07:00
Miguel Sousa
a9d260bfa2 [feaLib] Enable setting nameIDs greater than 255
Fixes #1003
2017-07-15 08:21:09 -07:00
Behdad Esfahbod
8dc5340b1d [varLib] Minor; Remove nonexistent attribute name from ignore list 2017-07-14 09:12:04 +01:00
Miguel Sousa
4a8c1511ec [otData] Label AxisNameID as NameID 2017-07-14 00:08:52 -07:00
Miguel Sousa
9aa3247603 [ttLib] Support CFF2 in getGlyphSet() 2017-07-13 01:13:46 -07:00
Miguel Sousa
dbf78fe930 [psCharStrings] Fix assert 2017-07-12 22:50:06 -07:00
Cosimo Lupo
93e19e36bf cffLib: whitespace, removed unused variables, and other PEP8 fixes 2017-07-10 10:47:20 +01:00
Cosimo Lupo
83d983545f cffLib: use @property getter/setter for isCFF2 2017-07-10 10:47:20 +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
ReadRoberts
386f16a233 Fix formatting for init function. 2017-06-20 16:23:52 -07:00
ReadRoberts
1a6c2fe191 Delete recursive setting of self.cffCtx.isCFF2; this is not needed, since this field is now gets its value from self.major, which is already set. 2017-06-20 16:23:52 -07:00
ReadRoberts
38cde93a1c psCharStrings.py. Fix bug: allow T1 charstrings to not have private attribute. 2017-06-20 16:23:52 -07:00
ReadRoberts
7acfe1f6a8 Fix bug in changing class API’s while doing work to remove global state. Needed to make ‘private’ argument to SimpleT2Decompiler __init__() be optional. It is not needed by CFF decompilation. 2017-06-20 16:23:52 -07:00