Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Replace ttconv by plain python for pdf subsetting#18181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
1da1a4c
to4a488fa
Compare
Cool, I wanted to do that, except for it breaking images, like you've found. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I didn't completely finish the second commit yet, though it seems good.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
src/_path.h Outdated
while (q >= str && *q == '0') { --q; } | ||
// If the end is a decimal point, delete that too | ||
if (q >= str && *q == '.') { --q; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Stylistically, this might be against PEP7.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I know, but I think splitting things on their own lines (as was done before) makes the code really harder to follow because the information density is so low...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I went for a slight variation which does respect pep7.
586edd9
todd0482b
CompareThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Nice! Looks like much of the complexity is for bug-compatibility with ttconv, which I hope we can remove later.
Instead of walking through FT_Outline ourselves, use FreeType'sFT_Outline_Decompose to decompose glyphs into paths.Fixes incorrect positioning of first and last control points of certaincontours; compare e.g.```pythonfrom pylab import *from matplotlib.textpath import TextPathfrom matplotlib.patches import PathPatchrcParams["mathtext.fontset"] = "stixsans"path = TextPath((0, 0), r"$\delta$", size=72)plot(*path.vertices.T, ".-", lw=.5)gca().add_patch(PathPatch(path, alpha=.5))gca().set(aspect="equal")show()```before and after the patch (before the patch, the inner loop was notproperly closed). (Technically, I believe the earlier bug affectedstart/end-of-contours that are implicitly created per the ttf format atthe midpoint between two conic control points.)A few SVG files need to be updated too.
d81d35b
to385894b
Compare--c; | ||
} | ||
try { | ||
buffer.append(str, c + 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Second parameter is size, isn't it? Or is cppreference wrong, since it seems to compile...
buffer.append(str,c+1); | |
buffer.append(str,c-str+1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This is using the
template< class InputIt >basic_string& append( InputIt first, InputIt last );
overload, not the
basic_string& append( const CharT* s, size_type count );
one.
Uh oh!
There was an error while loading.Please reload this page.
One thing I forgot to mention is that the Py_DTSF_ADD_DOT_0 change also fixes a separate bug in |
Quite a bit of work goes into reproducing quirks of the old ttconv codein order not to update baseline images, but this can easily be droppedonce the new baseline images system goes in.figure_align_label.pdf gets modified because of tiny differences inoutline extraction (due to the ttconv emulation); there's already thesvg test that tests the fixed-dpi case so I feel OK deleting it.This also fixes ttc subsetting for pdf output (cf. changes intest_font_manager.py).
Should we wait for the baseline image PR before merging this? |
I put in all the bug-compat code explicitly to minimize the image diffs; I'd say the remaining svg diffs are nottoo large, but I'm not in a big hurry either. |
I'll merge since@anntzer is the main person concerned with images changing 😉 |
Uh oh!
There was an error while loading.Please reload this page.
PR Summary
First commit:
Switch from a hand-written glyph outline decomposer to FreeType's one.
Instead of walking through FT_Outline ourselves, use FreeType's
FT_Outline_Decompose to decompose glyphs into paths.
Fixes incorrect positioning of first and last control points of certain
contours; compare e.g.
before and after the patch (before the patch, the inner loop was not
properly closed). (Technically, I believe the earlier bug affected
start/end-of-contours that are implicitly created per the ttf format at
the midpoint between two conic control points.)
before:

after:

A few SVG files need to be updated too.
Second commit:
Stop using ttconv for pdf.
Quite a bit of work goes into reproducing quirks of the old ttconv code
in order not to update baseline images, but this can easily be dropped
once the new baseline images system goes in.
figure_align_label.pdf gets modified because of tiny differences in
outline extraction (due to the ttconv emulation); there's already the
svg test that tests the fixed-dpi case so I feel OK deleting it.
This also fixes ttc subsetting for pdf output (cf. changes in
test_font_manager.py).
(PostScript is not done yet, but it's basically the same idea, it's just the header that's different.)
Fixes#17197. I'll skip adding a new font for the test, because in essence we're "just" relying on FreeType handing us the right outlines.
PR Checklist