OTF GSUB lookup type 6 -- buggy fonts



The bug Read discusses below should be kept in mind for any libraries
for handling GSUB tables....

-JimC

--- Begin Message ---
If you have made or intend to make OpenType/CFF fonts with
chaining contextual substitution features, using either MakeOTF
or FontLab, please read the following carefully, and see if you
can answer the question at the end.

Everyone else can ignore this. Chaining  contextual substitution
feature rules are those where the target glyph string for the
substitution is preceded and/or followed by additional glyphs
that provide a required context for the substitution.

You may recall from the e-mail thread starting on 9/23/2002
"Contextual features in Adobe OpenType fonts" that Adobe and
Microsoft engineers diverged on the reading of the OpenType spec
covering (GSUB lookup type 6). As a result, there is a bug  in
fonts which have all of the properties:
    - OpenType (TTF or CFF)
    - and made with FontLab or MakeOTF
    - and contains chaining contextual substitution features (GSUB
      lookup type 6)
    - and one or more of the chaining contextual substitution rules
contain backtrack sequences with more than one glyph.

No font is affected unless it meets all of these criteria. The
bug affects only the specific feature rules that are chaining
contextual substitution rules which contain backtrack sequences
with more than one glyph.

For example (using Adobe FDK notation) the following
substitution WOULD be affected:
sub a b c' by c.alt      # context has backtrack of two glyphs

The following substitutions would NOT be affected:
sub a b' c d by b.alt    # context has only one glyph backtrack
                           (and two glyphs look-ahead)

The bug does not manifest itself now, as InDesign versions
1.0-2.0 were built with the same logic for handling GSUB lookup
type 6 as the fonts, and only InDesign can currently show the
affected feature rules. However, the next releases of InDesign
and any other app's that support OpenType layout are likely to
assume the correct logic for this lookup, and the  chaining
contextual substitution rules which have backtrack sequences
with multiple glyphs will not work in the affected fonts. This
will affect all Adobe OpenType fonts with the connecting
scripts, or 'ordn' or 'frac' features, which is most of them.

I am reminding the list of this issue because there is a small
possibility that the next releases of the Adobe apps can contain
code to identify most fonts with the incorrect GSUB lookup type
6 lookups in order to make them work right. It is not
practically possible to reliably identify these by examining the
layout feature structures. However, MakeOTF inserts a specific
set of library version numbers in the name table nameID 5
"Version", in addition to the font version. This will allow
identification of fonts built with a range of MakeOTF versions.
(FontLab fonts have the necessary text strings in the default
name table Version string, but the special case cannot catch
fonts where the editor customized the Version name table
string.)

However, even if the special case is implemented, we may not want
to cover fonts made with the FDK v1.5.4987, released in Sept
2002. The Sept 2002 release of MakeOTF does have an option to
build fonts with the correct format; in fact, the default option
is to do so. However, since no-one can test or use the relevant
features in such fonts with any existing application, we hope
that not one has yet done so.

If any developer on this list has shipped fonts which have
chaining contextual substitution rules with multi-glyph
backtrack sequences, and built them with the MakeOTF option set
to build the lookup table correctly, please respond immediately.
-- 
-----------------------------------------------------------------------------------------
Read K. Roberts			rroberts adobe com
Adobe Systems San Jose TW12 	(408)-536-4402 on Weds
San Francisco 			(415) 586-1334 Mon, Tues, Thurs, Fri

--- End Message ---


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]