1610 Commits

Author SHA1 Message Date
Sascha Brawer
d63885e337 [otTables] Use XML snippets for testing fromXML() methods
This should make the unit tests more readable, and it also prevents
failures where a changed fromXML() implementation fails to ignore
interspersed whitespace. This has recently caused some developer
nuisance; see https://github.com/behdad/fonttools/pull/367.

Instead of having a custom parser implementation, it would be nicer
to call the actual XMLReader. However, XMLReader has a deeply built-in
assumption that it is processing an entire TTX file. Changing this
assumption would certainly be possible, but it would need a re-write
of the XMLReader code; having a custom parser just for unit tests
seems less involved.
2015-09-11 15:44:29 +02:00
Cosimo Lupo
258bd6d8f3 [otTables] skip if element is not tuple when parsing MultipleSubst XML
the content of XML elements can be strings as well as (name, attrs, content)
tuples, so we can't use list comprehension here
2015-09-11 11:41:14 +01:00
Sascha Brawer
96da5a0f71 Support TTX format for MultipleSubst of FontTools 3.0 and earlier
Fix a backwards compatibility problem introduced by
1356a6775b
(pull request https://github.com/behdad/fonttools/pull/364), where new versions
of FontTools would not be able to process `<MultipleSubst>` elements
in TTX files generated by older FontTools releases.

Resolves https://github.com/behdad/fonttools/issues/355.
2015-09-11 08:19:20 +02:00
Sascha Brawer
17ab15c4af [feaLib] Implement GSUB lookup type 2 2015-09-10 15:28:02 +02:00
Sascha Brawer
1356a6775b [otTables] Simplify API for MultipleSubst
Resolves https://github.com/behdad/fonttools/issues/355

For making sure that `pyftsubset` still works after this change,
I have done the following steps:

* invoked Adobe's `makeotf` tool to build a custom font with a
  MultipleSubst lookup. This lookup decomposes two two ligatures,
  `c_t` and `f_f_i`, into their respective components.

* invoked the `pyftsubset` tool to produce a subset font with just
  the `c_t` ligature;

* checked with `ttx` that the newly produced subset font contains
  the requested `c_t` ligature and its components `c` and `t`,
  but does not contain not any of `f_f_i`, `f`, or `i`.
2015-09-10 14:56:07 +02:00
Sascha Brawer
8d8288a862 [otTables] Add unit tests for SimpleSubst, LigatureSubst and AlternateSubst 2015-09-10 10:05:23 +02:00
Sascha Brawer
bce961b575 [feaLib] Fix documentation typo
Thanks to @mashabow for noticing it.
701c72116d (commitcomment-13147708)
2015-09-10 07:13:10 +02:00
Sascha Brawer
044ea07863 Merge pull request #358 from brawer/ltag
Build ltag table also with Python 2.7
2015-09-09 20:32:22 +02:00
Sascha Brawer
7f70a79fc8 Build ltag table also with Python 2.7
Before this change, TTX (when running in Python 2.7) would fail
to compile a font if the input contained an `ltag` section.
With Python 3, it worked perfectly fine even before this change.

Resolves https://github.com/behdad/fonttools/issues/357
2015-09-09 20:24:08 +02:00
Cosimo Lupo
d89bcd422d [feaLib] adjust test data to changes in builder.LookupBuilder
'LookupList' elements now contains 'Lookup' elements, in turn containing one or more lookup subtables
2015-09-09 18:21:33 +01:00
Cosimo Lupo
df06ce4981 [otConverters] use enumerate in writeArray, as sets don't support indexing
the feaLib parser returns glyph classes as set objects
2015-09-09 18:16:44 +01:00
Cosimo Lupo
efea2c17de [feaLib] make LookupBuilder.build return Lookup instances, instead of raw subtables
The list of subtables should go in the 'SubTable' attribute of Lookup object.
This also sets the 'LookupType', 'LookupFlag' and 'SubTableCount' attributes.
2015-09-09 18:13:28 +01:00
Sascha Brawer
4846f9006f [feaLib] Use fontTools wrapper class for otTable's GSUB/GPOS tables
Resolves df740092d9 (commitcomment-13138084)
2015-09-09 17:00:27 +02:00
Sascha Brawer
91197a58a7 Merge pull request #350 from brawer/feaLib
[feaLib] Implement GSUB lookup types 1, 3 and 4
2015-09-09 15:14:01 +02:00
Sascha Brawer
5f5b07b8d7 Merge pull request #349 from brawer/glyphnames-beyond-bmp
Support non-BMP characters for synthetic glyph names
2015-09-09 15:03:06 +02:00
Cosimo Lupo
e5b67b2451 [ttx] raise GetoptError and print messages to sys.stderr 2015-09-09 13:13:17 +01:00
Cosimo Lupo
27e31e7e22 [ttx] add --flavor option for compiling to 'woff' or 'woff2' 2015-09-09 13:00:35 +01:00
Cosimo Lupo
f8e59445c1 [woff2] minor 2015-09-09 12:16:49 +01:00
Cosimo Lupo
563f32f877 [glyf] add 'padding' attribute to glyf table; assert is in (0, 1, 2, 4)
The default (1) keeps the current behaviour (i.e. only pad when we can
use short offsets). Optional values are 0 (no padding), 2 and 4.
2015-09-09 11:15:26 +01:00
Cosimo Lupo
895c54cf92 [textTools] reduce usage of str concat in pad function 2015-09-09 09:52:31 +01:00
Cosimo Lupo
ed03d57170 [woff2] make dummy glyphOrder based on gids when decompiling glyf table
Using TTFont.getGlyphOrder() would also require to decompile post and cmap tables.
But we don't need the actual glyph names in order to apply the WOFF2 glyf transform.
2015-09-08 17:01:59 +01:00
Sascha Brawer
a35291e8c1 [feaLib] Implement required qualifier on language statements 2015-09-08 15:55:54 +02:00
Sascha Brawer
a3783e1095 [feaLib] Reject language and script within feature aalt and size 2015-09-08 12:18:03 +02:00
Sascha Brawer
792a958d6c [feaLib] Implement parser for multiple substitutions (GSUB LookupType 2)
Actually building the GSUB table is not implemented yet, since this
will probably need changes to otTables.
2015-09-08 12:05:44 +02:00
Sascha Brawer
683a8f5dbc [feaLib] Reject duplicate languagesystem declarations 2015-09-08 10:56:07 +02:00
Sascha Brawer
b0bbce88b1 [feaLib] Implement Single Substitution (GSUB lookup type 1) 2015-09-08 10:33:07 +02:00
Sascha Brawer
86004df3b0 [feaLib] Reject script dflt and language DFLT
These are invalid casing variants of the frequently used
`script DFLT` and `language dflt`. Adobe's makeotf tool
does a similar check.
2015-09-08 09:26:24 +02:00
Sascha Brawer
20392fb491 [feaLib] Fix test failures caused by an earlier bug fix
An earlier change made sure that language tags would always be
four characters in length, even when ending in whitespace.
This made a few test cases in parser_test.py fail. By accident,
I had only run builder_test (instead of all unittest in fonttools)
before committing that change.
2015-09-07 22:05:10 +02:00
Sascha Brawer
c1ba66c2ea [feaLib] Write LangSysRecords to GSUB and GPOS tables 2015-09-07 22:03:50 +02:00
Sascha Brawer
6140a4ec2b [feaLib] Build ScriptList subtable
Also, fixed a bug that caused language tags to be sometimes stripped.
Added an assertion to verify that language tags are always 4 chars.
2015-09-07 21:34:10 +02:00
Sascha Brawer
d3c743bb27 [feaLib] Build feature tables 2015-09-07 17:22:37 +02:00
Sascha Brawer
2537a4da29 [feaLib] Enforce uniform lookup types inside named lookup blocks 2015-09-07 16:27:12 +02:00
Sascha Brawer
0963673d58 [feaLib] Rename a test case, for consistency with other test cases 2015-09-07 16:13:34 +02:00
Sascha Brawer
80de401c09 [feaLib] Implement ligature substitutions 2015-09-07 16:10:13 +02:00
Sascha Brawer
8e8a0d68c7 [feaLib] Prohibit script and language statements within named lookups 2015-09-07 13:33:44 +02:00
Sascha Brawer
5f2e55d5fc [feaLib] Emit lookups for alternate substitutions 2015-09-07 11:39:09 +02:00
Sascha Brawer
102c0e0e56 [feaLib] Handle languagesystem, script and languaguage statements
Currently, the compiler uses them to figure out which set of
languagesystems would apply for the current scope. However, this
information is not yet used for anything.
2015-09-07 11:39:09 +02:00
Sascha Brawer
701c72116d [feaLib] Make feaLib compliant with the PEP8 style guide
After this change, pep8 v1.6.2 reports no style guide violations.
2015-09-07 11:39:09 +02:00
Sascha Brawer
4f27ce3585 [feaLib] Ensure that "languagesystem DFLT dflt;" comes first
According the to the OpenType Feature File specification,
"languagesystem DFLT dflt;" must be the first languagesystem
statement in a file.
2015-09-07 11:39:09 +02:00
Sascha Brawer
df740092d9 [feaLib] Basic test framework for building OpenType features 2015-09-07 11:39:09 +02:00
Sascha Brawer
b54c04f1d4 [feaLib] Enforce language "dflt" for script "DFLT"
Also add ';' to some langaugesystem test cases. This makes the
snippets syntactically valid. The parser is still expected to
reject them for other reasons, just as before this change.
2015-09-07 11:39:09 +02:00
Sascha Brawer
9ddd313577 [feaLib] Merged LexerError and ParserError
This simplifies the public API to the library.  For clients, it does
not matter which exact component was detecting an error.  And we will
soon have more components; there would be little point in declaring
CompilerError, TableBuilderError, and so forth.
2015-09-07 11:39:09 +02:00
Sascha Brawer
f38cc9f821 Write XML for alternate glyphs (GSUB lookup type 3) in deterministic order
Before this change, the XML output for GSUB lookups of type 3
was not deterministic; multiple runs of TTX on the same font
could therefore emit the alternates in a different order.

Since alternate glyphs are sets, this change makes no semantic
difference to the output. However, a deterministic ordering
is needed for tests that compare GSUB tables in TTX format.
2015-09-07 11:21:17 +02:00
Sascha Brawer
07458f62dd Support non-BMP characters for synthetic glyph names
When a font supplies no glyph names in its 'post' table, fontTools
builds synthetic glyph names by reversing the 'cmap' table.
After this change, the library looks at all 'cmap' subtables for
Unicode, irrespective of format or platform. For example, glyph #4
in NotoSansOldItalic-Regular.ttf gets now named "u10300" instead of
"glyph00004".

Moved the code for building a reversed 'cmap' table into the cmap class,
for easier testing.
2015-09-04 12:20:54 +02:00
Behdad Esfahbod
58f86f318a 3.0 2015-08-31 18:57:15 +01:00
Behdad Esfahbod
9cbfede2a2 [subset] Minor: move pruning to right place 2015-08-24 12:48:47 +01:00
Behdad Esfahbod
6519752913 [subset] Speedup GSUB/GPOS.prune_pre_subset()
Instead of remapping used lookups, just nuke unused ones, as
subset_glyphs() does a remapping of used lookups already.
2015-08-24 12:45:29 +01:00
Behdad Esfahbod
8cc69ab2ed [subset] Remove no-op Lookup.prune_pre_subset() and deps 2015-08-24 12:08:27 +01:00
Behdad Esfahbod
89f0c0ce7f Speed up hdmx loading by using custom glyphnamed-list
The data-structure can be used in more places, but it's most beneficial in
this table since hdmx tables can have tens of ppem's, each having a dictionary
keyed by glyphnames...
2015-08-23 20:40:51 +01:00
Behdad Esfahbod
46840d2d32 [subset] Speed up subsetting of dictionaries
Speeds things up for the tables affected.  But more importantly, allows for
lazy-loading of hdmx using custom data-structure coming in next patch.
2015-08-23 20:39:34 +01:00