@ -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 ;