OpenType-1.4 update: backtrack information is stored with the item closest

Fri Jul 25 23:38:07 2003  Owen Taylor  <otaylor@redhat.com>

        * pango/opentype/ftxgpos.c pango/opentype/ftxgsub.c:
        OpenType-1.4 update: backtrack information is stored with the
        item closest to the input first (From FreeType,
        Werner Lemberg, 2002-09-26)
This commit is contained in:
Owen Taylor 2003-07-26 03:45:44 +00:00 committed by Owen Taylor
parent 15a69e4a12
commit 06c12109de
2 changed files with 35 additions and 15 deletions

View File

@ -5264,7 +5264,7 @@
curr_pos = 0;
s_in = &in->string[curr_pos];
for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
{
while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
{
@ -5277,11 +5277,21 @@
break;
}
if ( s_in[j] != curr_cpr.Backtrack[i - 1] )
/* In OpenType 1.3, it is undefined whether the offsets of
backtrack glyphs is in logical order or not. Version 1.4
will clarify this:
Logical order - a b c d e f g h i j
i
Input offsets - 0 1
Backtrack offsets - 3 2 1 0
Lookahead offsets - 0 1 2 3 */
if ( s_in[j] != curr_cpr.Backtrack[i] )
break;
}
if ( i != 0 )
if ( i != bgc )
continue;
}
@ -5465,7 +5475,7 @@
known_backtrack_classes = i;
}
if ( bc[bgc - 1 - i] != backtrack_classes[i] )
if ( bc[i] != backtrack_classes[i] )
break;
}
@ -5613,7 +5623,7 @@
s_in = &in->string[curr_pos];
bc = ccpf3->BacktrackCoverage;
for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
{
while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
{
@ -5626,7 +5636,7 @@
return TTO_Err_Not_Covered;
}
error = Coverage_Index( &bc[i - 1], s_in[j], &index );
error = Coverage_Index( &bc[i], s_in[j], &index );
if ( error )
return error;
}
@ -5656,8 +5666,8 @@
return error;
}
/* we are starting for lookahead glyphs right after the last context
glyph */
/* we are starting to check for lookahead glyphs right after the
last context glyph */
curr_pos = j;
s_in = &in->string[curr_pos];

View File

@ -3423,13 +3423,13 @@
if ( bgc )
{
/* Since we don't know in advance the number of glyphs to inspect,
/* since we don't know in advance the number of glyphs to inspect,
we search backwards for matches in the backtrack glyph array */
curr_pos = 0;
s_in = &in->string[curr_pos];
for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
{
while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
{
@ -3442,11 +3442,21 @@
break;
}
if ( s_in[j] != curr_csr.Backtrack[i - 1] )
/* In OpenType 1.3, it is undefined whether the offsets of
backtrack glyphs is in logical order or not. Version 1.4
will clarify this:
Logical order - a b c d e f g h i j
i
Input offsets - 0 1
Backtrack offsets - 3 2 1 0
Lookahead offsets - 0 1 2 3 */
if ( s_in[j] != curr_csr.Backtrack[i] )
break;
}
if ( i != 0 )
if ( i != bgc )
continue;
}
@ -3630,7 +3640,7 @@
known_backtrack_classes = i;
}
if ( bc[bgc - 1 - i] != backtrack_classes[i] )
if ( bc[i] != backtrack_classes[i] )
break;
}
@ -3777,7 +3787,7 @@
s_in = &in->string[curr_pos];
bc = ccsf3->BacktrackCoverage;
for ( i = bgc, j = in->pos - 1; i > 0; i--, j-- )
for ( i = 0, j = in->pos - 1; i < bgc; i++, j-- )
{
while ( CHECK_Property( gdef, s_in[j], flags, &property ) )
{
@ -3790,7 +3800,7 @@
return TTO_Err_Not_Covered;
}
error = Coverage_Index( &bc[i - 1], s_in[j], &index );
error = Coverage_Index( &bc[i], s_in[j], &index );
if ( error )
return error;
}