If applying a ligature lookup makes adjacent two glyphs that were not

Sat Jul 26 09:41:22 2003  Owen Taylor  <otaylor@redhat.com>

        * pango/opentype/ftxgsub.c (Lookup_LigatureSubst):
        If applying a ligature lookup makes adjacent two glyphs
        that were not originally adjacent, avoid making
        subsequent ligatures between those glyphs.
        (From FreeType, Werner Lemberg, 2001-08-22, 2001-08-23)
pull/1/head
Owen Taylor 22 years ago committed by Owen Taylor
parent b682482df7
commit 374960681e
  1. 27
      src/ftxgsub.c

@ -1194,7 +1194,8 @@
FT_UShort index, property; FT_UShort index, property;
FT_Error error; FT_Error error;
FT_UShort numlig, i, j, is_mark, first_is_mark = FALSE; FT_UShort numlig, i, j, is_mark, first_is_mark = FALSE;
FT_UShort* s_in; FT_UShort first_ligID, first_comp;
FT_UShort *s_in, *lig_in, *comp_in;
FT_UShort* c; FT_UShort* c;
TTO_Ligature* lig; TTO_Ligature* lig;
@ -1223,6 +1224,10 @@
continue; /* Not enough glyphs in input */ continue; /* Not enough glyphs in input */
s_in = &in->string[in->pos]; s_in = &in->string[in->pos];
lig_in = &in->ligIDs[in->pos];
comp_in = &in->components[in->pos];
first_ligID = *lig_in;
first_comp = *comp_in;
c = lig->Component; c = lig->Component;
is_mark = first_is_mark; is_mark = first_is_mark;
@ -1243,6 +1248,26 @@
break; break;
} }
/* don't apply a ligature lookup to glyphs with different
ligature IDs. Example:
'
^' ' ^
f ^ l ' -> fl ^ ' -> fl but not fl ^ -> fl */
if ( first_ligID != lig_in[j] )
break;
/* don't apply a ligature lookup to glyphs with different
component values. Example:
'
^' ' ^
f ^ f ' l -> ffl ^ ' -> ffl but not ffl ^ -> ffl */
if ( first_comp != comp_in[j] )
break;
if ( !( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) ) if ( !( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) )
is_mark = FALSE; is_mark = FALSE;

Loading…
Cancel
Save