|
From: | Steve Hartwell |
Subject: | Re: [ft-devel] [patch] TrueType GX/AAT validator |
Date: | Wed, 24 Aug 2005 07:39:01 -0700 |
User-agent: | Mozilla Thunderbird 1.0.2 (Windows/20050317) |
on 8/23/2005 1:57 PM George Williams wrote:
No, if I recall correctly the glyph action table is trimmed, so an action table containing large glyph IDs would not necessarily be huge. At any rate, these transient glyph IDs have been used since 'mort' tables were introduced; 'morx' is just a longword-aligned version of 'mort'.In addition, gxvalid doesn't check "temporal glyph ID" used in the chained State Machines (in "mort" and "morx" tables).I've never seen it in a 'mort' table, it is much less likely to occur there. A 'morx' table allows a compact representation of substitution tables associated with a state machine, while a 'mort' table requires a per-glyph lookup. So using a glyph ID like 32000 (Zapfino does) would require a huge lookup.
--- to: address@hiddenGeorge is correct in suggesting that to verify all correct use of these transient glyph IDs, you would have to run all the state machines (the "halting" problem). However, a reasonable shortcut would be to examine all of the glyph action tables, and to verify that for any "anyGlyphID -> aTransientGlyphID" mapping (where 'aTransientGlyphID' is an id greater than the number of actual glyphs) that there is a corresponding "aTransientGlyphID -> anyGlyphID" somewhere else in the same chain. This is not a comprehensive check, since there is no guarantee that the substitution actually occurs, but as a longtime 'mort/morx' table developer, I would say that this would cover a large part of the errors in practice.
If you have not already done so, reading the ICU layout sources might shed some light on some of the many good questions raised on this thread.
Thanks very much for your fine work on this validator; I'm looking forward to using (and possibly extending) it when my free time permits,
Regards, Steve Hartwell http://stevehartwell.home.comcast.net/proj/fontinspector
[Prev in Thread] | Current Thread | [Next in Thread] |