Skip to content
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

Extract kerning and shaping tables from fonts? #85

Open
mikemorris opened this issue Mar 24, 2015 · 4 comments
Open

Extract kerning and shaping tables from fonts? #85

mikemorris opened this issue Mar 24, 2015 · 4 comments

Comments

@mikemorris
Copy link
Contributor

tl;dr Can we use ICU or HarfBuzz to extract shaping and kerning tables from a font?

From discussion with @nickidlugash on adding kerning support:

FreeType only supports kerning via the (rather simple) ‘kern’ table. For the interpretation of kerning data in the (highly sophisticated) ‘GPOS’ table you need a higher-level library like ICU or HarfBuzz since it can be context dependent (this is, the kerning may vary depending on the position within a text string, for example).
http://freetype.org/freetype2/docs/glyphs/glyphs-4.html

  • FreeType has limited support for reading kerning tables and running FT_Get_Kerning for all possible glyph pairs seems like a terrible idea.
  • We'll need to integrate HarfBuzz (and a JavaScript equivalent?) into our rendering engines at some point for complex text shaping, could we handle kerning at this point too?
  • Is it possible to use ICU or HarfBuzz to extract shaping and kerning tables from a font at upload time to be stashed on S3 and used later for rendering, rather than having to load the full font file into HarfBuzz/ICU?
@springmeyer
Copy link
Contributor

Good questions, I'll add this tidbit:

FreeType can now use the HarfBuzz library to greatly improve the
      auto-hinting of  fonts that  use OpenType features:  Many glyphs
      that are part  of such features but don't have  cmap entries are
      now handled  properly, for  example small caps  or superscripts.
      Define the configuration  macro FT_CONFIG_OPTION_USE_HARFBUZZ to
      activate HarfBuzz support

http://sourceforge.net/projects/freetype/files/freetype2/2.5.3/

@mattdesl
Copy link
Contributor

mattdesl commented May 6, 2015

Opentype.js has also been working on basic GPOS parsing:
opentypejs/opentype.js#19

@mikemorris
Copy link
Contributor Author

Current thinking is to implement something like Harfbuzz's reference_table method to extract and dump the binary SFNT table data while node-fontnik has the font open in FreeType, and write a custom backend for HarfBuzz to read this data by itself rather than needing to open up a font file at shaping time. @lbud is digging into how this will work.

I started working on porting pomax/A-binary-parser-generator to Node.js with Browserify today to try extracting and parsing the shaping tables in JavaScript, but I think that approach will end up being slower, more difficult and result in less useful data (JavaScript objects instead of binary data HarfBuzz expects) than just doing this through FreeType.

@felipesanches
Copy link

I just posted a few comments here while I actually intended to post them to issue #95. I have just deleted them from here and posted them to the correct issue. Sorry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants