Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Add missing decode() in svg font embedding path. #10046

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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 5, 2018

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented Dec 19, 2017

Otherwise,

rcParams["svg.fonttype"] = "svgfont"; title("foo"); savefig("/tmp/test.svg")

fails (on Py3) with

  File ".../backend_svg.py", line 86, in escape_attrib
    s = s.replace("&", "&")
TypeError: a bytes-like object is required, not 'str'

The encoding of entry 1, 0, 0, 4 in the sfnt table is macroman
(https://www.freetype.org/freetype2/docs/reference/ft2-truetype_tables.html#TT_MAC_ID_XXX).

Note that after the fix is applied, the resulting svg file still appears
to be unopenable by inkscape, so the fix is not complete, but hopefully
a step in the correct direction.


Of course, this suggests that the svg.fonttype = svgfont codepath is untested, which is another problem :p

In practice it appears that the svg font standard isn't that popular or well supported, see https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_fonts.

PR Summary

PR Checklist

  • Has Pytest style unit tests
  • Code is PEP 8 compliant
  • New features are documented, with examples if plot related
  • Documentation is sphinx and numpydoc compliant
  • Added an entry to doc/users/next_whats_new/ if major new feature (follow instructions in README.rst there)
  • Documented in doc/api/api_changes.rst if API changed in a backward-incompatible way

Otherwise,

    rcParams["svg.fonttype"] = "svgfont"; title("foo"); savefig("/tmp/test.svg")

fails (on Py3) with

      File ".../backend_svg.py", line 86, in escape_attrib
        s = s.replace("&", "&")
    TypeError: a bytes-like object is required, not 'str'

The encoding of entry 1, 0, 0, 4 in the sfnt table is macroman
(https://www.freetype.org/freetype2/docs/reference/ft2-truetype_tables.html#TT_MAC_ID_XXX).

Note that after the fix is applied, the resulting svg file still appears
to be unopenable by inkscape, so the fix is not complete, but hopefully
a step in the correct direction.
@QuLogic
Copy link
Member

QuLogic commented Dec 19, 2017

Can you use mac_roman instead? Partly because that's the codec name, but mostly because I keep reading it as macro-man.

@anntzer
Copy link
Contributor Author

anntzer commented Dec 19, 2017

done

@tacaswell
Copy link
Member

I have also been reading it as 'macro-man' and puzzling at why they would come up with that name!

@dstansby dstansby merged commit 58ddc36 into matplotlib:master Jan 5, 2018
@anntzer anntzer deleted the svg-font branch January 5, 2018 10:52
@QuLogic QuLogic modified the milestones: needs sorting, v2.2.0 Feb 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants