Thanks!  This even answers some questions I was thinking about, but hadn't
asked.
I was wondering why I couldn't find any GSUB entries for combining
characters.  In one font I dumped with ttx, there were entries doing the
opposite: mapping 'aacute' -> 'a' + 'acute'.

Since hinting glyphs that are descendants of combining characters will help
few fonts, what other ways does the database need to use the GSUB table?
The only other use case I'm aware of are one to one substitutions providing
alternate forms of a glyph.

As for the tilde un-flattening, the approach I'm thinking of is to force
the tilde to be at least 2 pixels tall before grid fitting begins.  Would
this ever cause the tilde to be 3 pixels because of rounding?

On Thu, Jul 20, 2023 at 3:21 AM Werner LEMBERG <w...@gnu.org> wrote:

>
> > The next thing I'm doing for the adjustment database is making
> > combining characters work.  Currently, only precomposed characters
> > will be adjusted.  If my understanding is correct, this would mean
> > finding any lookups that map a character + combining character onto
> > a glyph, then apply the appropriate adjustments to that glyph.
>
> Yes.  I suggest that you use the `ttx` decompiler from fonttools and
> analyse the contents of a GSUB table of your favourite font.
>
>   https://pypi.org/project/fonttools/
>
> At the same time, use the `ftview` FreeType demo program with an
> appropriate `FT2_DEBUG` setting so that you can see what the current
> HarfBuzz code does for the given font.  Examples:
>
> ```
> ttx -t GSUB arial.ttf
> FT2_DEBUG="afshaper:7 afglobal:7 -v" \
>   ftview -l 2 -kq arial.ttf &> arial.log
> ```
>
> Option `-l 2` selects 'light' hinting (i.e., auto-hinting), `-kq`
> emulates the 'q' keypress (i.e., quitting immediately).  See appended
> files for `arial.ttf` version 7.00.
>
> In `arial.log`, the information coming from the 'afshaper' component
> tells you the affected GSUB lookups; this helps poking around in the
> XML data as produced by `ttx`.  The 'afglobal' information tells you
> the glyph indices covering a given script and feature (start with
> 'latn_dflt').
>
> You might also try a font editor of your choice (for example,
> FontForge, menu entry 'View->Show ATT') to further analyze how the
> GSUB data is constructed, and to get some visual feeling on what's
> going on.
>
> > Right now, I'm trying to figure out what features I need to look
> > inside to find these lookups.  Should I just search all features?
>
> Yes, I think so.  Since the auto-hinter is agnostic to the script and
> the used language, you have to have all information in advance.
>
> > After that, I'm going to tackle the tilde-flattening issue, and any
> > other similar marks that are getting flattened.
>
> Note that in most fonts you won't find any GSUB data for common
> combinations like 'a' + 'acute' -> 'aacute'.  Usually, such stuff gets
> handled by the GPOS table, i.e., instead of mapping two glyphs to a
> another single one, the accent gets moved to a better position.  In
> this case, the glyphs are rendered separately, *outside of FreeType's
> scope*.  This means that we can't do anything on the auto-hinter side
> to optimize the distance between the base and the accent glyph (see
> also the comment in file `afshaper.c` starting at line 308, and this
> nice article
> https://learn.microsoft.com/en-us/typography/develop/processing-part1).
>
> It thus probably makes sense to do the tilde stuff first.
>
>
>     Werner
>

Reply via email to