ReadRoberts
83379be568
CFF2 Subr items can have values on the stack after the last operator. These were not getting written to XML. Added new class CFFSubr so that we can make an assertion error in this case if the item is not a CFF2 Subr, and otherwise write the last values on the stack to the XML file
2017-11-02 11:36:10 -07:00
ReadRoberts
8b02b5a294
Fixed issue with reading/writing PrivateDict BlueValues to ttx file. To date, BlueValue arguments have been written as absolute coordinate values, reflecting the history of the CFF ttx table format. However, Behdad Esfahbod pointed out that it is not always possible to roundtrip between the absolute values in the ttx file and the CFF2 default font value and the delta list. This update changes the ttx format so that in PrivateDict BlueValues, the default font values are written as absolute coordinates, preserving continuity with how CFF tables are written, but the region values are written as the deltas from the VariationStore delta list.
...
This also fixes fonttools/fonttools/issues/1030.
Although the roundtrip is generally possible when a VariationStore is built from source font data using the Superpolator model, it is possible to build region definitions that do not follow this model. Behdad cited the Skia "Q" example, where the tail of the Q is affected by two regions defined as:
min=0 peak=0.5 max=0.51 delta=+10
min=0.49 peak=0.5 max=0.51 delta=-10
2017-11-02 11:31:47 -07:00
Masaya Nakamura
3708f2c8d3
Don't cache charString bounds
...
https://github.com/fonttools/fonttools/pull/970#discussion_r117903692
2017-08-01 10:54:47 +09:00
Masaya Nakamura
22dfcd94a1
[cffLib] Use None instead of initialBounds
...
https://github.com/fonttools/fonttools/pull/970#discussion_r117621101
2017-08-01 10:53:29 +09:00
Masaya Nakamura
b22b59f730
[cffLib] Use intRect() for FontBBox rounding
...
AFDKO seems to calculate bounds and side bearings in this manner.
2017-08-01 10:51:47 +09:00
Masaya Nakamura
b84ee6744d
[cffLib] Recalc CFF's FontBBox when compiling
2017-08-01 10:51:47 +09: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
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
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
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
133fe84012
Fix bug in compiling FDSelect: wasn’t passing cffCtx to class initializer.
2017-06-20 16:23:52 -07:00
ReadRoberts
af23a781e4
Removed global state from cffLib.py; introduced instance-specific context class instead. Also deprecated maxstack operator, per OpenType spec update 1.8.1, as this simplified some of the context passing logic. Still not thoroughly tested; convertCFFToCFF2() function has not yet been updated to work with new logic.
2017-06-20 16:23:52 -07:00
ReadRoberts
8e723e48db
Eliminated duplicate or unused functions from TopDictIndex
2017-06-20 16:23:52 -07:00
ReadRoberts
a1760781f6
Folded CFF2 classes into CFF classes. Removed:
...
TopDictData; folded into TopDictIndex
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
ReadRoberts
d6dd5e26ac
Delete the TopDict2 class definition, now that it is no longer used.
2017-06-20 16:23:52 -07:00
ReadRoberts
73e1128498
Folded CFF2 classes into CFF classes. Removed:
...
TopDict2
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
ReadRoberts
c3504de397
Folded CFF2 classes into CFF classes. Removed:
...
PrivateDict2
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
ReadRoberts
ee6fdaea43
cffLib. TopDict2 still need specific order list for operators that is different than TopDict.
2017-06-20 16:23:52 -07:00
ReadRoberts
d6cb880513
Revert "Folded CFF2 classes into CFF classes. Removed:"
...
This reverts commit ff14e2361b8fcbb8fd753b7ef5f02a74ad004dc7.
2017-06-20 16:23:52 -07:00
ReadRoberts
cf77e143c5
Folded CFF2 classes into CFF classes. Removed:
...
TopDict2
PrivateDict2
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
ReadRoberts
1c53437e39
Folded CFF2 classes into CFF classes. Removed:
...
TopDict2Decompiler
PrivateDict2Decompiler
PrivateDict2Compiler
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
ReadRoberts
c33ae5c96a
Folded CFF2 classes into CFF classes. Removed:
...
SimpleCFF2DEcompiler
CFF2CharString
GlobalSubrsIndex2
SubrsIndex2
CharstringIndex2
Working towards using one set of classes for both CFF2 and CFF data.
2017-06-20 16:23:52 -07:00
justvanrossum
a72f26e5a4
Added missing default for UnderlinePosition. Closes #983 .
2017-06-09 06:55:02 +02:00
Behdad Esfahbod
462b7f8683
[cffLib.specializer] When copying iterables, cast to list specifically
...
See 41445b8449
2017-05-20 18:34:20 -07:00
Behdad Esfahbod
4fd719159a
[cffLib.specializer] Enforce minimum number of arguments in all ops
2017-05-08 14:09:02 -06:00
Behdad Esfahbod
0cbe43483d
[cffLib.specializer] Fix width-extraction code when stack is empty
2017-05-08 14:06:26 -06:00
Behdad Esfahbod
a3743828ce
[cffLib.specializer] Default ignoreErrors to False
...
Ouch. I meant False. I think I changed it to True for testing and accidentally committed it.
2017-05-08 14:05:10 -06:00
Behdad Esfahbod
a71639f8b6
[cffLib.specializer] Add minor TODO items
2017-05-08 13:01:43 -06:00
Behdad Esfahbod
30b804003e
[cffLib.specializer] Add programToString and stringToProgram from _test.py
2017-05-07 22:12:19 -06:00
Behdad Esfahbod
3720c6e020
[cffLib.specializer] Fix combining of more ops into rlinecurve / rcurveline
...
Fixes failing tests.
2017-05-07 12:54:31 -06:00
Miguel Sousa
3f9eeec58d
[cffLib.specializer] Fix DeprecationWarnings in py3
2017-05-06 23:20:11 -07:00
Behdad Esfahbod
8432c04bb1
[cffLib.specializer] Remove -3 hack that was to match AFDKO
2017-05-06 17:54:05 -06:00
Behdad Esfahbod
2fd2e4a7cf
[cffLib.specializer] Add TODO item
2017-05-06 14:14:54 -06:00
Behdad Esfahbod
0bf5044d12
[cffLib.specializer] Implement width extraction in programToCommands()
...
Test:
./fonttools cffLib.specializer 7 0 8 rmoveto 1 2 3 4 5 0 rrcurvet
2017-05-06 13:12:58 -06:00
Behdad Esfahbod
bef46993f6
[cffLib.specializer] Use bool() cast instead of comparison to 0
...
Makes it work on custom types better.
2017-05-06 05:02:22 -06:00
Behdad Esfahbod
d1d36ce66b
[cffLib.specializer] Minor
2017-05-06 04:58:59 -06:00
Behdad Esfahbod
d3947b86d2
[cffLib.specializer] Fix bug introduced in c9653e98c6da7770a13faebd4a218f5d1d362536
...
Test case (which apparently is not covered by our current tests!):
./fonttools cffLib.specializer 1 2 3 4 5 0 rrcurveto
2017-05-06 04:28:45 -06:00
Behdad Esfahbod
050bcc0c8a
[cffLib.specializer] Minor adjustments to previous commit
2017-05-06 03:49:06 -06:00
Behdad Esfahbod
c9653e98c6
[cffLib.specializer] Fix curve merging logic!
...
Found that elegant model I've been looking for, yay! My previous modeling
was overly complicating the problem, and failing at solving all corner cases.
New one should fix them all!
2017-05-06 03:23:00 -06:00
Behdad Esfahbod
e35976900a
[cffLib.specializer] Fix typo in peephole optimization
2017-05-06 03:00:39 -06:00
Behdad Esfahbod
d8fcb3a12a
[cffLib.specializer] Fix orientation propagation through a pizza spline
2017-05-06 02:06:58 -06:00
Behdad Esfahbod
a5ca6c49f2
[cffLib.specializer] Fix hvcurveto/vhcurveto argument swapping logic
...
Fixes remaining 2 failing tests.
2017-05-06 01:44:19 -06:00
Behdad Esfahbod
df7f36e234
[cffLib.specializer] Fix logic for choosing vhcurveto vs hvcurveto
...
Fixes 2 of the 4 failing tests.
2017-05-06 01:41:07 -06:00
Behdad Esfahbod
b81250b10d
[cffLib.specializer] Fix typo
2017-05-06 01:25:57 -06:00
Behdad Esfahbod
c3a94fd4e5
[cffLib.specializer] Finish specializing curves
...
This is complete now. Unhooked and lightly tested.
2017-05-05 21:07:43 -06:00
Behdad Esfahbod
86a398b5c3
[cffLib.specializer] Implement rlinecurve and rcurveline
2017-05-05 17:05:04 -06:00
Behdad Esfahbod
a3c1ebbfce
[cffLib.specializer] Make progress on specialization
...
The core is in. The real fun is not yet.
2017-05-05 16:56:00 -06:00
Behdad Esfahbod
f32ad88953
[cffLib.specializer] Making progress on specialization
2017-05-05 16:56:00 -06:00
Behdad Esfahbod
dabbc3077f
Rename cffLib.opSpecializer to cffLib.specializer
2017-05-05 16:56:00 -06:00