Patches from FreeType

Patch FreeType Pango Qt
freetype-00-optional-backtrack Y--
Basically the same idea as pango-00-empty-class-def.
freetype-01-id-in-h-file Y--
Irrelevant for Pango/Qt since the FreeType2 code is not done as an extension.
freetype-02-attach-class-leak Y--
Irrelevant for Pango/Qt; freeing memory is done a different way.
freetype-03-special-marks IYN
pango-08-special-marks
pango-25-ignore-special-marks
See GNOME bug 118456 for details on what is fixed in the second Pango patch; the original FreeType code doesn't interpret the high byte of LookupFlags correctly.
freetype-04-mark-base-pos-ligature YYN
pango-09-mark-base-pos-ligature
qt-consonant-nukta covers a small part of this.
freetype-05-context-subst-2 YY-
pango-14-context-subst-2
qt-not-covered has this and more.
freetype-06-opentype-1-3 YYN
pango-15-extension
pango-16-right-to-left-flag
freetype-07-ligature-ids ???
freetype-08-ligature-components
pango-18-ligatures
These patches have a bad effect on some Indic rendering and it's not clear they are correct. See GNOME bug 118472 and mail to devel@freetype.org.
freetype-09-borland-warnings Y--
freetype-10-formatting Y--
freetype-11-backtrack-order YYN
pango-17-backtrack-order

Y = patch applied; N = patch not applied; I = incompletely fixed; ? = more information needed; - = not applicable

Patches from Pango

Patch FreeType Pango Qt
pango-00-empty-class-def NYI
pango-11-class-def-seek
pango-22-class-def-seek-2
Qt has the first patch, but not the fixes in the second two.
pango-01-free-on-failure NYY
pango-02-gdef-mark-attach NYN
pango-04-out-of-frame-access
pango-06-mark-attach-classdef
The second patch contains a random memory leak fix as well.
pango-03-not-covered NYN
pango-23-not-covered-2
TT_GPOS/GSUB_Apply_String() was returning TTO_Err_Not_Covered if just the last lookup failed; second patch also contains fixes for memory leaks on error.
pango-05-empty-device-table NYN
pango-07-empty-script NYI
qt-empty-script does the same thing; this patch is considerably cleaner.
pango-10-new-gdef -Y-
Extra functionality Pango needed for synthesizing a GDEF table for older Arabic fonts.
pango-12-null-index NYN
Lookup_ChainContextSubst2() is an example of calling Get_Class() with NULL index.
pango-24-lookahead NYN
pango-26-chain-format3 NYN

Y = patch applied; N = patch not applied; I = incompletely fixed; ? = more information needed; - = not applicable

Patches from Qt

Patch FreeType Pango Qt
qt-bin-searches ??Y
This patch rewrites the binary searches in ftxopen.c, presumably for performance reasons.
qt-check-property ??Y
This patch reorders the code for handling many lookups so that Coverage_Index() is called before Check_Property(). Presumably this was done for performance reasons, and makes some sense. The global GlyphClassDef table is likely to be bigger and more expensive to search than the per-lookup coverage tables. (Though it seems that if finding out glyph class definition values is a problem, they could be cached-per-glyph instead of repeatedly computed for each lookup.)
qt-compiler-warning-fix --Y
This patch suppresses various unused-parameter and signed/unsigned-comparison warnings; only really relevant if you are compiling with such warnings enabled.
qt-consonant-nukta --Y
freetype-04-mark-base-pos-ligature covers this and more.
qt-disable-mark-attach --Y
Disables handling of MarkAttachClassDef; the fixes in pango-02-gdef-mark-attach should make this unnecessary.
qt-double-subscript ??Y
This patch comments out the code that, for class-based lookups, treats references to classes not in the ClassDef table the same as references to class 0. It seems that any font where this would matter is buggy, however the comment claims it breaks Mangal. One wonders if the code was initially added to FreeType because of a misinterpretation of system where uncovered glyphs are treated as being in class 0. If this patch is correct, much further simplification is possible, since the tracking of ClassDef.Defined isn't needed at all.
qt-empty-script --Y
pango-07-empty-script is a cleaner version of this.
qt-ligature-component ??Y
Apparently the ligature-ID system in the FreeType code didn't work right in some cases for Lookup_MarkLigPos(). This patch looks suspiciously like a hack-around, but it's not clear what the right fix is without knowing the font and input in question.
qt-mem-leak NYI
pango-20-mem-leak
pango-21-more-mem-leak
Some of the fixes in pango-21-more-mem-leak are needed in Qt as well.
qt-not-covered NYY
pango-19-not-covered
freetype-05-context-subst-2 covers part of this.
qt-one-feature-at-a-time --Y
This large patch contains two different things; one part of it replaces FT_GSUB/GPOS_Apply_String() with FT_GSUB/GPOS_Apply_Feature(); apparently this substitution allowed a performance increase by not having to allocate a new temporary string each time. It also contains glyph_copy(), an optimized version of ADD_String for the case where only one glyph is being added to the output string.
qt-optimize-out-switches --Y
This patches eliminates a bunch of switch statements in favor of if/else, or, in one case, an array lookup. The utility of this patch may mostly relate to global changes in the Qt port where all the files were combined into one compilation and 'inline' extensively used.

Y = patch applied; N = patch not applied; I = incompletely fixed; ? = more information needed; - = not applicable

ChangeLog