6288 Commits

Author SHA1 Message Date
Jany Belluz
ec4bcf54c9 Check for descriptor types with hasattr() to allow custom classes that don't inherit the default descriptors 2022-06-01 12:00:52 +01:00
Nikolaus Waxweiler
42e4d66184
Merge pull request #2609 from fonttools/ds5-add-some-polish
[designspaceLib] Add some polish to the v5 paths
2022-05-04 16:13:03 +01:00
Nikolaus Waxweiler
fc174a9170 Undo warning 2022-05-04 14:54:07 +01:00
Nikolaus Waxweiler
26bf33bb60 Use assert instead of standalone error 2022-05-04 14:37:08 +01:00
Cosimo Lupo
b488d10768
Merge pull request #2611 from tshinnic/svglib_parser_real_number_format
Handle one more valid real number format in svgLib parse_path()
2022-05-04 08:27:24 +01:00
Cosimo Lupo
a09e80b1b1
Merge pull request #2596 from tshinnic/path_arc_rx_ry_nonnegative
Protect SVG path parsing from negative rx ry on arc commands
2022-05-04 08:14:15 +01:00
Thomas Shinnick
5abfef15e1 Handle one more valid real number format in svgLib parse_path()
Using svg.draw(pen) and parse_path() from svgLib threw exception
     ValueError: could not convert string to float: 'a'
on a SVG <path> string generated by Inkscape. Altering the path
string might object to other string bits like 'Z' or 'v', or
give even stranger exceptions.

Finally tracked it down to the path containing particular valid
numbers like "-4e-5" or "1e-4". Changing these to "-4.0e-5" or
"1.0e-4" would stop the exceptions. The parse_path() was not
accepting valid SVG real numbers.

The specification for real number formats is a bit of a mess in
CSS land right now, but the reassuringly concrete spec is:
    https://www.w3.org/TR/css-syntax-3/#number-token-diagram
which allows a real number having an exponent but without having
a fractional part, such as the number "1e3".

This change updates an RE to make fractional parts optional,
and adds a test for this valid SVG number format.
2022-05-03 17:48:14 -05:00
Nikolaus Waxweiler
ada9828121 Add some proper exceptions 2022-04-29 16:56:50 +01:00
Cosimo Lupo
0e43b0e2c3 [subset] Fix subsetting SinglePosFormat2 when ValueFormat=0
If a font has SinglePosFormat2 subtable with ValueFormat=0, then it contains a Value list with all None values.
Even though we don't build such inefficient tables, they do exist in the wild, as #2602 demostrates so we should handle those nicely, by downgrading them to Format1 with a single None value
2022-04-27 16:03:23 +01:00
Cosimo Lupo
ba8880e9f1 Bump version: 4.33.3 → 4.33.4.dev0 2022-04-26 10:51:16 +01:00
Cosimo Lupo
b9621ff427 Release 4.33.3 2022-04-26 10:51:15 +01:00
Nikolaus Waxweiler
d8bf4c3123 Fix typo to actually transfer font references 2022-04-26 10:15:37 +01:00
mike maxfield
47bbe6f7ca correct naming of dataclasses '__post_init__' method 2022-04-23 16:18:41 -06:00
Thomas Shinnick
812d05c122 Protect SVG path parsing from negative rx ry on arc commands
SVG documentation has an explicit requirement that _consumers_
of path arc commands accept and *correct* certain bad values.
This includes using the absolute value of the arc command's rx
and ry radius parameters.

See "9.5.1. Out-of-range elliptical arc parameters"
https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands

Lib\fontTools\svgLib\path\parser.py is missing any guard against
negative values for rx and ry parameter. Adding an abs() to each
value read will implement the SVG specification.

A problem was seen here while most programs and browsers handle
bad arc commands just fine. A bug report has been registered with
Inkscape (!) to protect any other non-SVG compliant programs.
See https://gitlab.com/inkscape/inbox/-/issues/6857 for more details.
2022-04-23 01:36:30 -05:00
Cosimo Lupo
37767203b0 Bump version: 4.33.2 → 4.33.3.dev0 2022-04-22 19:26:47 +01:00
Cosimo Lupo
e569154033 Release 4.33.2 2022-04-22 19:26:47 +01:00
Cosimo Lupo
350f893e17 [otBase] demote repacker ERROR to WARNING, only 1 per loop; don't exit at firstfail
Fixes https://github.com/fonttools/fonttools/issues/2594
2022-04-22 19:05:54 +01:00
Cosimo Lupo
f68ce14d7a [otBase] log the name of uharfbuzz exception 2022-04-22 15:31:34 +01:00
Cosimo Lupo
fe81aa729a Bump version: 4.33.1 → 4.33.2.dev0 2022-04-22 11:38:46 +01:00
Cosimo Lupo
04b835d04f Release 4.33.1 2022-04-22 11:38:46 +01:00
Cosimo Lupo
20de0784c2 send DeprecationWarning if FONTTOOLS_GPOS_COMPACT_MODE env var is set
and factor out shared code to read the env var
2022-04-22 11:32:43 +01:00
Cosimo Lupo
f8611bf848 [optimize.gpos] use the same default for config and env var 2022-04-22 11:18:00 +01:00
Jany Belluz
0bd2834d1e Fix ufo2ft regression by bringing back the env var for now 2022-04-22 10:14:16 +01:00
Cosimo Lupo
36e8eb2ada Bump version: 4.33.0 → 4.33.1.dev0 2022-04-21 19:29:35 +01:00
Cosimo Lupo
f81ec49a66 Release 4.33.0 2022-04-21 19:29:35 +01:00
Cosimo Lupo
bb1dbf4198 drop the 'X' from recalcAvgCharWidth method name 2022-04-21 19:02:39 +01:00
Cosimo Lupo
ee2d83d4b3 [merge] use recalcXAvgCharWidth method on merged font
Fixes #2538, supersedes #2590
2022-04-21 18:56:05 +01:00
Cosimo Lupo
12942feb6b [subset] use recalcXAvgCharWidth method 2022-04-21 18:46:11 +01:00
Cosimo Lupo
5455f5388d [fontBuilder] use recalcXAvgCharWidth method
slightly different rounding method but it doesn't really matter
2022-04-21 18:45:38 +01:00
Cosimo Lupo
3731056401 [OS/2] define recalcXAvgCharWidth method
copied from current subsetter code (matches ufo2ft's outlineCompiler)
2022-04-21 18:44:44 +01:00
Cosimo Lupo
af6804bed5 make USE_HARFBUZZ_REPACKER a 3-state option, defaults to auto
if explicitly enabled, it will raise ImportError if uharfbuzz is not found, and will propagate the uharfbuzz error instead of silently falling back to the pure-python serializer
2022-04-21 18:11:20 +01:00
Cosimo Lupo
7588062413 [configTools] remove cached set and simplify checking option id 2022-04-21 17:18:32 +01:00
Cosimo Lupo
e9bec87d1a [configTools] Make Option eq=False so cmp/hash by id 2022-04-21 16:21:53 +01:00
Cosimo Lupo
ade9ce1173 [testTools] FakeFont needs a cfg attribute too 2022-04-21 15:56:11 +01:00
Cosimo Lupo
ec79257960 [optimize.gpos] declare/re-export option from module 2022-04-21 15:46:12 +01:00
Cosimo Lupo
1bb9607b72 [subset] add --no-harfbuzz-repacker CLI flag 2022-04-21 15:46:12 +01:00
Cosimo Lupo
c204537073 [otBase] check USE_HARFBUZZ_REPACKER in TTFont.cfg, add more logging 2022-04-21 15:46:12 +01:00
Cosimo Lupo
fea57a5cea [config] register USE_HARFBUZZ_REPACKER option 2022-04-21 15:46:12 +01:00
Cosimo Lupo
e5d674ea5e [configTools] accept either str or Option in Config mapping API 2022-04-21 15:46:12 +01:00
Cosimo Lupo
9a0dfbd403 [configTools] add copy constructor to Options 2022-04-21 14:31:58 +01:00
Cosimo Lupo
5aa8986179 [configTools] add __repr__ to Options mapping
print the default value only for brevity
2022-04-21 14:31:58 +01:00
Just van Rossum
0ffe320b77 [cmap] don't handle expected case in exception handler, to avoid confusing tracebacks, such as seen in #2584 2022-04-18 09:15:01 +02:00
Cosimo Lupo
e92dd05101
Merge pull request #2552 from qxliu76/add_hb_repack
Use Harfbuzz Repacker for packing GSUB/GPOS tables
2022-04-14 20:03:18 +01:00
Cosimo Lupo
2c458719de
Merge pull request #2580 from skef/bg1899
Handle implicit CFF2 closepath within T2OutlineExtractor
2022-04-14 20:03:01 +01:00
Qunxin Liu
fe196bf88e Use Harfbuzz Repacker for packing GSUB/GPOS tables 2022-04-14 10:42:50 -07:00
Jany Belluz
abc0441957 [config] Add new config module and use it for GPOS compression level 2022-04-14 15:23:02 +01:00
Jany Belluz
e530c2fa1c [misc] Add new configTools module 2022-04-14 15:20:52 +01:00
Skef Iterum
520ee0236d Handle implicit CFF2 closePath within T2OutlineExtractor 2022-04-14 07:19:44 -07:00
Jany Belluz
2ea5dc3496 [varLib] Add support for designspace 5 + STAT generation + tests 2022-04-14 15:05:50 +01:00
Jany Belluz
35e560603e [designspaceLib] Add designspace 5 code 2022-04-14 15:03:58 +01:00