8042 Commits

Author SHA1 Message Date
Behdad Esfahbod
e53764a16d In calcIntBounds(), round values
The glyph coordinates in glyf table are going to be rounded when
writing out, so we should use the same mode of conversion to
integers.  Otherwise the xMin of a glyph might end up being
different from its actual minimum X.
2016-06-07 15:47:02 -07:00
Behdad Esfahbod
d1424e9d5a Improve solveCubic() against rounding issues
Might fix https://github.com/behdad/fonttools/issues/617
2016-06-07 14:16:42 -07:00
Tal Leming
fff92b9dfd Merge branch 'master' into ufo4
# Conflicts:
#	Lib/ufoLib/glifLib.py
2016-06-07 13:27:05 -04:00
Tal Leming
c9ced7f718 Use fs.path instead of os.path. 2016-06-07 13:24:30 -04:00
Behdad Esfahbod
c794ff85d6 Fix typo in comments 2016-06-06 22:06:33 -07:00
Cosimo Lupo
971a92bfe8 glifLib: use len() to check if ElementTree.Element is empty or contains children 2016-06-05 19:07:45 +01:00
Cosimo Lupo
fed7cef3cf validators: check isinstance of collections.Mapping rather than dict
The `collections` module provides a set of abstract base classes that can be used to
test whether a class provides a particular interface (e.g. whether it is a mapping).

It's better if ufoLib uses that with `isinstance` rather than requiring instances of
`dict`, or subclasses of `dict`.
2016-06-05 16:16:02 +01:00
Cosimo Lupo
fc4f810f61 plistFromETree: use len(element) to check if there are subelements to avoid FutureWarning 2016-06-05 16:03:24 +01:00
moyogo
70a60433f8 [feaLib]: fix unescape_mac_name_string() and unescape_windows_name_string() 2016-06-01 17:33:15 +01:00
Adrien Tétar
81e6c235af glifLib: fixup contour validation code 2016-05-31 09:59:02 -07:00
Denis Moyogo Jacquerye
04d96d7fe0 test: split tests in test_GLIF1 and test_GLIF2 2016-05-31 09:46:57 -07:00
Denis Moyogo Jacquerye
b8f4145d76 glifLib: raise error when text is in <glyph> and in <outline> 2016-05-31 14:33:58 +01:00
Denis Moyogo Jacquerye
49c9640f73 test: split GLIF1 and GLIF2 tests 2016-05-31 11:25:12 +01:00
Denis Moyogo Jacquerye
16e2c0f308 use unicode_literals 2016-05-31 11:23:05 +01:00
Tal Leming
f5a8299e59 Don't restrict what can be removed at the filesystem level. 2016-05-28 12:02:54 -04:00
justvanrossum
123d7c10b6 Found a font that has an empty SingleSubst mapping. While that's silly, it's not necessarily illegal. FontTools, however, would crash with an AssertionError upon compilation. Fixed. 2016-05-28 22:20:31 +09:00
Behdad Esfahbod
18f70c75c5 [varLib] Add interpolation functions
Untested.
2016-05-26 13:34:37 -07:00
Ben Kiel
317214dfb1 If structure is zip, make sure saved file is ufos 2016-05-24 11:21:00 -05:00
Ben Kiel
26863a2b79 Update __init__.py
Add in ufoz for testing.
2016-05-24 11:07:53 -05:00
Adrien Tétar
8044d2fb88 Use ElementTree in glifLib and drop embedded XML parsing infrastructure 2016-05-20 11:11:15 -07:00
Khaled Hosny
f88c43d105 Check for file attribute before deleting it
I don’t know why this is happening, but I’m getting attribute error when
I build https://github.com/khaledhosny/mada with compreffor
optimisations on.
2016-05-19 20:50:10 +02:00
Tal Leming
29db50cd01 Remove plistlib shim. 2016-05-16 15:02:19 -04:00
Tal Leming
ca217854ba Remove local testing code. 2016-05-16 14:58:32 -04:00
Tal Leming
173669b265 Add a fallback for OSFS when fs isn't installed. 2016-05-16 14:57:46 -04:00
Cosimo Lupo
ca8e49b6f5 subset: fix typo
Ouch.
2016-05-16 17:05:46 +01:00
Cosimo Lupo
920c6a8249 subset: set maxp.maxStorage to 0 when --no-hinting option is passed
'maxStorage' is the maximum number of Storage Area locations used.
If there's no hinting, it should be 0.
2016-05-16 15:57:17 +01:00
Tal Leming
db9467ff1e Merge branch 'master' into ufo4 2016-05-16 10:24:09 -04:00
Tal Leming
4d26482e9a Add an optimized implementation of the kerning value lookup algorithm from the spec.
The optimization is that the caller can provide glyph to group mappings.
2016-05-16 10:22:38 -04:00
Cosimo Lupo
6c1c2a44d1 cffLib: use tostr() when getting SID of indexed string (or we end up with duplicates in py3)
I noticed this issue while porting compreffor to py3. In my test fonts, the binary
CFF tables as generated with python 2 sometimes were slightly different from the
ones generated with python 3, although the TTX dump was identical!

It turns out, when running in Python 3, cffLib adds extra entries to the
list of CFF indexed strings, because of bytes vs str.

The `IndexedStrings.getSID` method takes an input string 's' and and returns
the SID integer for that string. If it's a new string, it gets appended to the
list, as well as to an internal strings-to-SID mapping, so that the same SID
value is returned for any given string.

The problem with python 3 was that, if the input string was of `bytes` type
instead of `str`, then the test for inclusion (the dict's `__contains__`)
would return False, and as a result the "same" string (e.g. "Regular" and
b"Regular") could be encoded twice in the list of CFF strings.

(yes, we desperately need unit tests for cffLib...)
2016-05-16 13:11:46 +01:00
justvanrossum
650aae7cf3 making error and warning consistent #604 2016-05-13 07:10:47 +02:00
justvanrossum
1394416821 Better error message for broken hmtx/vmtx table, addressing #604. 2016-05-13 07:07:52 +02:00
Behdad Esfahbod
26bb99e1c3 [subset] Whitespace 2016-05-12 13:40:14 +02:00
Behdad Esfahbod
cd914c9575 [subset] Protect against some more prematurely-short arrays 2016-05-12 13:40:14 +02:00
Behdad Esfahbod
85750a864a [subset] Protect against prematurely-short arrays GPOS 2016-05-12 13:40:14 +02:00
Behdad Esfahbod
18e53dbdf5 [varLib] Minor 2016-05-12 13:40:14 +02:00
Rod Sheeter
df2c2c7128 Verify that we can see individual parts of timing messages 2016-05-11 17:39:37 -07:00
Rod Sheeter
74e7400097 Minimal change to allow Google Fonts to easily capture subset timings serverside via log handler. 2016-05-11 12:59:37 -07:00
Masaya Nakamura
a8c7788d66 Fix _getGlyphSetFormatVersion3() 2016-05-11 17:50:14 +09:00
Cosimo Lupo
a796b03366 py23: raise Py23Error when using 'xrange'
see https://github.com/behdad/fonttools/pull/600#issuecomment-216935319
2016-05-04 18:31:13 +01:00
Cosimo Lupo
7efb32b2de py23: always use iterator whether one uses 'range' (py3) or 'xrange' (py2) 2016-05-04 17:16:39 +01:00
Tal Leming
08f8f114cb Implement writing to package or ZIP.
This has only been lightly tested. It slightly breaks defcon, but I'll
deal with that later.
2016-05-04 10:53:43 -04:00
Tal Leming
59d723b9f8 GlyphSet tweaks. 2016-05-03 10:17:48 -04:00
Tal Leming
622b7c9352 ZIPs will contain a single root directory that packages will not. Abstract this. 2016-05-03 09:59:26 -04:00
Tal Leming
45910b6131 Initial work on reading single file UFO.
This is a work in progress update of UFOReader and UFOWriter that
supports UFO in its package and zipped forms. Reading works. Writing is
not yet implemented.

I'm building a base file system (that lives on top of fs for now and
maybe in the long term) that the reader and writer then subclass. This
base class implements the file system interaction so that the reader
and writer can be blissfully ignorant about file systems.

Additionally, I ran into a problem with the local plistlib.py creating
an import error, so I've temporarily renamed it plistlibShim.py so that
I can continue working.

Did I mention that this is a work in progress? It's a work in progress.
2016-05-02 23:06:25 -04:00
Khaled Hosny
b5afd862e1 [glyf] Round component offset before compiling
We can get a float here.
2016-04-30 00:16:15 +02:00
Cosimo Lupo
70ec8513d0 varLib: use cElementTree if available to parse designspace
The C implementation of ElementTree is included in CPython since 2.5.
It's got the same API and is up to 20 times faster than the Python implementation.
We'd better use it.
2016-04-28 09:56:21 +01:00
Behdad Esfahbod
7a9c6be76c [mtiLib] Warn if trailing tabs are found 2016-04-27 17:04:25 -07:00
Behdad Esfahbod
71633457df [mtiLib] Ignore trailing tabs 2016-04-27 16:58:38 -07:00
Behdad Esfahbod
973270e7f9 [mtiLib] Assert that glyph name is not empty 2016-04-27 16:58:33 -07:00
Sascha Brawer
9f287353f3 [CPAL] Support CPAL table version 1 2016-04-27 13:15:45 +02:00