Sun Sep 29 14:51:25 2002 Owen Taylor Start of merges from freetype1 of OpenType fixes. * pango/opentype/ftxgdef.c pango/opentype/ftxgpos.c pango/opentype/ftxgsub.c: More fixes for special marks. (2001-03-17 Werner Lemberg) Index: ftxgdef.c =================================================================== RCS file: /cvs/gnome/pango/pango/opentype/ftxgdef.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -p -r1.6 -r1.7 --- ftxgdef.c 10 May 2002 18:44:47 -0000 1.6 +++ ftxgdef.c 29 Sep 2002 19:05:00 -0000 1.7 @@ -1152,14 +1152,17 @@ if ( error ) return error; - /* This is OpenType 1.2 */ - if ( flags & IGNORE_SPECIAL_MARKS ) + { + /* This is OpenType 1.2 */ + if ( (flags & 0xFF00) != *property ) return TTO_Err_Not_Covered; - - if ( flags & *property ) - return TTO_Err_Not_Covered; + } + else { + if ( flags & *property ) + return TTO_Err_Not_Covered; + } } return TT_Err_Ok; Index: ftxgsub.c =================================================================== RCS file: /cvs/gnome/pango/pango/opentype/ftxgsub.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -p -r1.4 -r1.5 --- ftxgsub.c 7 Aug 2002 17:01:52 -0000 1.4 +++ ftxgsub.c 29 Sep 2002 19:05:01 -0000 1.5 @@ -1203,7 +1203,7 @@ if ( CHECK_Property( gdef, in->string[in->pos], flags, &property ) ) return error; - if ( property == TTO_MARK ) + if ( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) first_is_mark = TRUE; error = Coverage_Index( &ls->Coverage, in->string[in->pos], &index ); @@ -1243,7 +1243,7 @@ break; } - if ( property != TTO_MARK ) + if ( !( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) ) is_mark = FALSE; if ( s_in[j] != c[i - 1] ) Index: ftxgpos.c =================================================================== RCS file: /cvs/gnome/pango/pango/opentype/ftxgpos.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -p -r1.5 -r1.6 --- ftxgpos.c 7 May 2002 20:38:50 -0000 1.5 +++ ftxgpos.c 29 Sep 2002 19:05:00 -0000 1.6 @@ -1694,7 +1694,7 @@ TTO_GPOSHeader* gpos = gpi->gpos; - if ( in->pos >= in->length ) + if ( in->pos >= in->length - 1 ) return TTO_Err_Not_Covered; /* Not enough glyphs in stream */ if ( context_length != 0xFFFF && context_length < 2 ) @@ -2355,7 +2355,7 @@ if ( error ) return error; - if ( property != TTO_MARK ) + if ( !( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) ) break; i++; @@ -2763,7 +2763,7 @@ if ( error ) return error; - if ( property != TTO_MARK ) + if ( !( property == TTO_MARK || property & IGNORE_SPECIAL_MARKS ) ) break; i++;