From a35dc445e86ab433fe9f3937c95f2c1f18f58110 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Sun, 29 Sep 2002 19:05:01 +0000 Subject: [PATCH] Start of merges from freetype1 of OpenType fixes. Sun Sep 29 14:51:25 2002 Owen Taylor Start of merges from freetype1 of OpenType fixes. (2001-03-17 Werner Lemberg) * pango/opentype/ftxgdef.c pango/opentype/ftxgpos.c pango/opentype/ftxg\sub.c: More fixes for special marks. --- src/ftxgdef.c | 13 ++++++++----- src/ftxgpos.c | 6 +++--- src/ftxgsub.c | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/ftxgdef.c b/src/ftxgdef.c index e585286fc..67b268e93 100644 --- a/src/ftxgdef.c +++ b/src/ftxgdef.c @@ -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; diff --git a/src/ftxgpos.c b/src/ftxgpos.c index f9ba16795..c51a6d1f4 100644 --- a/src/ftxgpos.c +++ b/src/ftxgpos.c @@ -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++; diff --git a/src/ftxgsub.c b/src/ftxgsub.c index 6b9d4faf4..43a0181be 100644 --- a/src/ftxgsub.c +++ b/src/ftxgsub.c @@ -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] )