3019 Commits

Author SHA1 Message Date
Miguel Sousa
5e115c1d2a [CFF2] Report the correct number of regions in the font
This change also makes the processing of the blend operator to be as described at https://www.microsoft.com/typography/otspec/cff2charstr.htm#section4.5
2017-03-23 17:12:31 -07:00
Cosimo Lupo
6ac3523d74
[_TTGlyphSet] fetch height and tsb from vmtx if available
The width and lsb from hmtx are already there

Fixes #893

https://github.com/fonttools/fonttools/pull/880#issuecomment-288558012
2017-03-23 12:51:16 +00:00
Behdad Esfahbod
1f372cc8ed [merge] Add TODO item re merging duplicate items 2017-03-22 15:03:52 -07:00
Cosimo Lupo
21944d3cc8
Bump version: 3.9.1 → 3.9.2.dev0 2017-03-20 09:59:58 +00:00
Cosimo Lupo
524db89b69
Release 3.9.1 2017-03-20 09:59:07 +00:00
Behdad Esfahbod
9798c30d57 [varLib.merger] Really recombine multiple PairPosFormat2 subtables...
Fixup for 49d311550c29f7501dd4bc91cb24074e3d607b77

Previous try was completely dropping the ParPosFormat2 subtables. Ouch!

Fixes https://github.com/fonttools/fonttools/issues/888
2017-03-17 20:30:56 -07:00
Miguel Sousa
e2d4fe9da8 minor 2017-03-17 07:48:22 -07:00
Miguel Sousa
4de5af36cb Add usage example of RecordingPen 2017-03-17 02:19:12 -07:00
Behdad Esfahbod
49d311550c [varLib.merger] Recombine multiple PairPosFormat2 subtables...
...if they were split because of offset overflows.

Fixes https://github.com/fonttools/fonttools/issues/888
for most common cases.
2017-03-16 17:51:59 -07:00
Behdad Esfahbod
92cb5d28d6 [varLib.merger] Shuffle _ClassDef_invert for more uses 2017-03-16 17:46:28 -07:00
Behdad Esfahbod
7f83d6d445 [varLib.merger] Add TODO item 2017-03-16 16:18:27 -07:00
Behdad Esfahbod
0f5a46b1f9 [varLib.merger] Only insert PairPosFormat1 if non-empty
This is proper fix for c8b2088162f1542dd29b2d370aa2a2c081452559
2017-03-16 16:15:10 -07:00
Behdad Esfahbod
c8b2088162 Revert "[varLib.merger] only insert merged PairPosFormat1 subtable if at least one font has one"
This reverts commit d83c2fb2090fa58f94fdf32d1aa2d2d8665cec05.

This is wrong. We should insert if and only iff there's at least one of the
fonts with a Format1. Yours doesn't look at all fonts. Since this one is not a
bugfix but improvement, I'll fix it separately.
2017-03-16 16:07:46 -07:00
Behdad Esfahbod
a2b23811a2 Merge pull request #887 from fonttools/class-kern-merge
[varLib.merger] Fix interpolating PairPos Format 2
2017-03-16 16:03:34 -07:00
Cosimo Lupo
23511fd302
[varLib.merger] set ClassDef{1,2}.Format using same logic as otTables.ClassDef.preWrite 2017-03-14 16:14:08 +00:00
Cosimo Lupo
e6125b353e
[varLib.merger] avoid reusing the same Class2Record (mutable) objects
Class2Record is mutable, hence doing `[rec2] * l.Class2Count` produces a list containing multiple references to the same instance. When later on we do the interpolation, modifying one would modify them all.
We need to instantiate distinct objects.

See 6f41c2ab53 (commitcomment-21310803)
2017-03-14 14:46:17 +00:00
Cosimo Lupo
d83c2fb209
[varLib.merger] only insert merged PairPosFormat1 subtable if at least one font has one 2017-03-14 14:29:10 +00:00
Cosimo Lupo
aad0d46069
[varLib.merger] fix IndexError with empty ClassDef1 in PairPosFormat2
https://github.com/fonttools/fonttools/pull/881#issue-213020690
2017-03-14 14:26:55 +00:00
justvanrossum
b05f2039b5 added missing import 2017-03-14 12:00:13 +01:00
Cosimo Lupo
ffb68042dc
Bump version: 3.9.0 → 3.9.1.dev0 2017-03-13 13:36:38 +00:00
Cosimo Lupo
7dc69f2ae2
Release 3.9.0 2017-03-13 13:35:18 +00:00
Cosimo Lupo
6f5a4f8365 Merge pull request #885 from miguelsousa/cff2-patch
[CFF2] Support ‘maxstack’
2017-03-13 09:33:19 +00:00
Miguel Sousa
bba1d9f225 [CFF2] Support ‘maxstack’ 2017-03-13 00:02:13 -07:00
Cosimo Lupo
b2825ff6b3
[varLib.builder] fix calculation of VarData.NumShorts
The problem was that `break` statement: we stopped searching for SHORT columns in each delta set after finding the first, but rows can contain more than one in any order.

Fixes https://github.com/googlei18n/fontmake/issues/271
2017-03-10 12:39:06 +00:00
Sascha Brawer
ea1adf42a7 [AAT] Add Char64 converter for 64-byte ASCII character strings
Used by Apple Advanced Typography tables, for example `gcid`.
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gcid.html

https://github.com/fonttools/fonttools/issues/178
2017-03-10 20:20:22 +08:00
Miguel Sousa
64d5119642 whitespace 2017-03-09 21:30:28 -08:00
Cosimo Lupo
f662391091 Merge pull request #883 from anthrotype/fix-empty-cff-delta
[cffLib/psCharStrings] fix IndexError with empty deltas
2017-03-09 19:39:54 +00:00
Sascha Brawer
189c722626 [feaLib] Clean up syntax tree for FeatureNames
The syntax tree representation now reflects the syntax of feature files.
Before this change, FeatureNames did not have their own `ast.Block`,
which had made the code quite messy.
2017-03-10 02:48:32 +08:00
Cosimo Lupo
2e46476671
[cffLib] fix IndexError when dumping toXML empty deltas
$ ttx -t CFF "font.otf"
Dumping "font.otf" to "font.ttx"...
Dumping 'CFF ' table...
ERROR: Unhandled exception has occurred
Traceback (most recent call last):
  File "fonttools/Lib/fontTools/ttx.py", line 384, in main
    process(jobs, options)
  File "fonttools/Lib/fontTools/ttx.py", line 358, in process
    action(input, output, options)
  File "fonttools/Lib/fontTools/misc/loggingTools.py", line 372, in wrapper
    return func(*args, **kwds)
  File "fonttools/Lib/fontTools/ttx.py", line 258, in ttDump
    newlinestr=options.newlinestr)
  File "fonttools/Lib/fontTools/ttLib/__init__.py", line 311, in saveXML
    self._tableToXML(tableWriter, tag, progress)
  File "fonttools/Lib/fontTools/ttLib/__init__.py", line 348, in _tableToXML
    table.toXML(writer, self, progress)
  File "fonttools/Lib/fontTools/ttLib/tables/C_F_F_.py", line 42, in toXML
    self.cff.toXML(writer, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 135, in toXML
    font.toXML(xmlWriter, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 2178, in toXML
    BaseDict.toXML(self, xmlWriter, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 2128, in toXML
    conv.xmlWrite(xmlWriter, name, value, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 1120, in xmlWrite
    value.toXML(xmlWriter, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 2128, in toXML
    conv.xmlWrite(xmlWriter, name, value, progress)
  File "fonttools/Lib/fontTools/cffLib.py", line 1089, in xmlWrite
    if isinstance(value[0], list):
IndexError: list index out of range
2017-03-09 15:40:52 +00:00
Cosimo Lupo
33b42f47b6
[cffLib/psCharStrings] fix IndexError with empty deltas
After 2b2aca1, DictCompiler/Decompiler's `arg_delta` method unconditionally attempts to get the first item to check if it's a list, but this fails with `IndexError` when the value is empty.

```
Traceback (most recent call last):
  [...]
  File "/Users/cosimolupo/Documents/Github/ufo2ft/Lib/ufo2ft/otfPostProcessor.py", line 15, in __init__
    otf.save(stream)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/ttLib/__init__.py", line 219, in save
    self._writeTable(tag, writer, done)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/ttLib/__init__.py", line 658, in _writeTable
    tabledata = self.getTableData(tag)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/ttLib/__init__.py", line 669, in getTableData
    return self.tables[tag].compile(self)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/ttLib/tables/C_F_F_.py", line 20, in compile
    self.cff.compile(f, otFont)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/cffLib.py", line 124, in compile
    writer.toFile(file)
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/cffLib.py", line 300, in toFile
    endPos = pos + item.getDataLength()
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/cffLib.py", line 1858, in getDataLength
    return len(self.compile("getDataLength"))
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/cffLib.py", line 1879, in compile
    data.append(arghandler(value))
  File "/Users/cosimolupo/Documents/Github/fonttools/Lib/fontTools/cffLib.py", line 1910, in arg_delta
    val0 = value[0]
IndexError: list index out of range
``
2017-03-09 14:21:38 +00:00
Sascha Brawer
bc0670f53f [feaLib] Simplify parser API by removing the ignore_comments option
https://github.com/fonttools/fonttools/pull/879#discussion_r104947968
https://github.com/fonttools/fonttools/issues/829
2017-03-09 22:17:58 +08:00
Sascha Brawer
04b1e8ada6 [feaLib] Recognize empty statements in all table blocks
Before this change, some table statements would allow empty statements
(just a semicolon) while others would not allow them. After this change,
we're more consistent.
2017-03-09 13:58:17 +01:00
Behdad Esfahbod
4e9806a443 [mtiLib] Be more lenient in script block parsing
Fixes https://github.com/googlei18n/fontmake/issues/258
2017-03-08 15:33:17 -08:00
Cosimo Lupo
857862b94f Merge pull request #879 from silnrsi/parsecomments
Add support for comments to parser
2017-03-08 20:55:16 +00:00
Behdad Esfahbod
fb0c60cd2c [varLib.merge] Fix tests
Set Coverage.Format to 1. This is rather arbitrary, which is exactly
why Coverage.Format doesn't make sense and should not have been
exposed to begin with.
2017-03-08 12:52:56 -08:00
Behdad Esfahbod
b73c61a3ab Revert "Revert "[merge] Fix for ClassDef.Format and Coverage.Format""
This reverts commit 7406e06aae34300cc2a17f990af5f33abc579afc.

Ouch. The revert of revert was not what I meant. :|
2017-03-08 12:49:56 -08:00
Behdad Esfahbod
7406e06aae Revert "[merge] Fix for ClassDef.Format and Coverage.Format"
This reverts commit 53d78d9956dbbfe50395bf8002b0308b375c02a9.

Now that Format is back in, merge it.

Should fix https://github.com/fonttools/fonttools/pull/878
2017-03-08 12:12:55 -08:00
Martin Hosken
5906b5358a Final changes to follow vagueries 2017-03-08 16:54:11 +00:00
Martin Hosken
2972d81d82 More pop8erry and try to minimise redundancy in the patch 2017-03-08 16:49:08 +00:00
Martin Hosken
c870cde47e Refactor to remove option in Lexer. Lexer always returns comments now 2017-03-08 16:29:55 +00:00
Martin Hosken
45a4a1f249 Add tests, rename _OMITs 2017-03-08 15:19:09 +00:00
Martin Hosken
90b57d2dec Fix bad colon 2017-03-08 14:15:34 +00:00
Martin Hosken
d5d4ea4ddc Tidy up space colon to colon in python statements 2017-03-08 14:05:00 +00:00
Martin Hosken
450d2b939e Add support for comments to parser 2017-03-08 13:50:06 +00:00
Cosimo Lupo
6731a906b4
[T_S_I_*] in VOLT's ascii tables, replace '\r' with '\n' when dumping XML
and viceversa, convert '\n' back to '\r' when reading from XML.

This restores the original newline handling of asciiTable, but only for VOLT's private tables.
2017-03-07 13:00:37 +00:00
Cosimo Lupo
996b4ba1bf
[asciiTable] don't normalize newlines when in {from,to}XML
b12a59c5e7 (commitcomment-21184558)
2017-03-07 12:59:32 +00:00
Behdad Esfahbod
b12a59c5e7 Actually add TTFA impl 2017-03-07 00:21:40 -08:00
Behdad Esfahbod
48bb7cda7c Add 'TTFA' table
Apparently this is an ASCII table used by ttfautohint to record
used settings.
2017-03-06 18:08:19 -08:00
Cosimo Lupo
ca235ea8a1
[cffLib] fix "TypeError: cannot use a string pattern on a bytes-like object"
This is just to make the tests pass, otherwise the following re.sub call fails with TypeError on Python 3.

However, I wonder why we need to replace all newlines with spaces in 'Notice' and 'Copyright' fields?

```
if name in ['Notice', 'Copyright']:
    value = re.sub(r"[\r\n]\s+", " ", value)
```

We shall ask Read about this.
2017-03-05 23:11:41 +00:00
ReadRoberts
f208bf3421
1) Fold back in the changes introduced by Just van Possum in patch 744
2) Moved the C_F_F__2_test.py files and script under Tests/, paralleling what was done the C_F_F test  files.
2017-03-05 22:53:05 +00:00