Update of GPOS and GSUB support to OpenType 1.3 (From FreeType, Werner
Fri Jul 25 23:07:06 2003 Owen Taylor <otaylor@redhat.com> Update of GPOS and GSUB support to OpenType 1.3 (From FreeType, Werner Lemberg, 2001-08-08) * pango/opentype/ftxopen.h: Add RIGHT_TO_LEFT LookupFlag * pango/opentype/ftxgpos.c (GPOS_Instance): Add 'first' member to mark the beginning of a chain of cursive connections. * pango/opentype/ftxgpos.c (Do_String_Lookup): If the RIGHT_TO_FLAG flag is set, shift cursive chain up so last glyph is on the baseline.
This commit is contained in:
parent
6f74f18b77
commit
15a69e4a12
|
@ -43,6 +43,8 @@
|
||||||
FT_UShort load_flags; /* how the glyph should be loaded */
|
FT_UShort load_flags; /* how the glyph should be loaded */
|
||||||
FT_Bool r2l;
|
FT_Bool r2l;
|
||||||
|
|
||||||
|
FT_UShort first; /* the first glyph in a chain of
|
||||||
|
cursive connections */
|
||||||
FT_UShort last; /* the last valid glyph -- used
|
FT_UShort last; /* the last valid glyph -- used
|
||||||
with cursive positioning */
|
with cursive positioning */
|
||||||
FT_Pos anchor_x; /* the coordinates of the anchor point */
|
FT_Pos anchor_x; /* the coordinates of the anchor point */
|
||||||
|
@ -2089,6 +2091,8 @@
|
||||||
gpi->last = 0xFFFF;
|
gpi->last = 0xFFFF;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if ( gpi->first == 0xFFFF )
|
||||||
|
gpi->first = in->pos;
|
||||||
gpi->last = in->pos;
|
gpi->last = in->pos;
|
||||||
gpi->anchor_x = exit_x;
|
gpi->anchor_x = exit_x;
|
||||||
gpi->anchor_y = exit_y;
|
gpi->anchor_y = exit_y;
|
||||||
|
@ -6120,8 +6124,11 @@
|
||||||
FT_UShort* p_in = in->properties;
|
FT_UShort* p_in = in->properties;
|
||||||
|
|
||||||
int nesting_level = 0;
|
int nesting_level = 0;
|
||||||
|
UShort i;
|
||||||
|
TT_Pos offset;
|
||||||
|
|
||||||
|
|
||||||
|
gpi->first = 0xFFFF;
|
||||||
gpi->last = 0xFFFF; /* no last valid glyph for cursive pos. */
|
gpi->last = 0xFFFF; /* no last valid glyph for cursive pos. */
|
||||||
|
|
||||||
in->pos = 0;
|
in->pos = 0;
|
||||||
|
@ -6153,6 +6160,22 @@
|
||||||
error = TTO_Err_Not_Covered;
|
error = TTO_Err_Not_Covered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* test whether we have to adjust the offsets for cursive connections */
|
||||||
|
|
||||||
|
if ( gpi->first != 0xFFFF && gpi->last == 0xFFFF &&
|
||||||
|
gpos->LookupList.Lookup[lookup_index].LookupFlag & RIGHT_TO_LEFT )
|
||||||
|
{
|
||||||
|
offset = out[in->pos].y_pos;
|
||||||
|
|
||||||
|
/* no horizontal offsets (for vertical writing direction)
|
||||||
|
supported yet */
|
||||||
|
|
||||||
|
for ( i = gpi->first; i <= in->pos; i++ )
|
||||||
|
out[i].y_pos -= offset;
|
||||||
|
|
||||||
|
gpi->first = 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
if ( error == TTO_Err_Not_Covered )
|
if ( error == TTO_Err_Not_Covered )
|
||||||
(in->pos)++;
|
(in->pos)++;
|
||||||
else
|
else
|
||||||
|
|
|
@ -156,8 +156,12 @@ extern "C" {
|
||||||
|
|
||||||
|
|
||||||
/* Possible LookupFlag bit masks. `IGNORE_SPECIAL_MARKS' comes from the
|
/* Possible LookupFlag bit masks. `IGNORE_SPECIAL_MARKS' comes from the
|
||||||
OpenType 1.2 specification. */
|
OpenType 1.2 specification; RIGHT_TO_LEFT has been (re)introduced in
|
||||||
|
OpenType 1.3 -- if set, the last glyph in a cursive attachment
|
||||||
|
sequence has to be positioned on the baseline -- regardless of the
|
||||||
|
writing direction. */
|
||||||
|
|
||||||
|
#define RIGHT_TO_LEFT 0x0001
|
||||||
#define IGNORE_BASE_GLYPHS 0x0002
|
#define IGNORE_BASE_GLYPHS 0x0002
|
||||||
#define IGNORE_LIGATURES 0x0004
|
#define IGNORE_LIGATURES 0x0004
|
||||||
#define IGNORE_MARKS 0x0008
|
#define IGNORE_MARKS 0x0008
|
||||||
|
|
Loading…
Reference in New Issue