summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-08-01 22:53:04 -0400
committerBehdad Esfahbod <behdad@behdad.org>2009-08-01 22:53:04 -0400
commit55b6ef4545bda8f12ae4c82aba3a61e8e7c47868 (patch)
tree37b16f914bb9e6cb09fb9c377ba498c54676eedd
parent019d335ec7710eea286ed0294cda69aace4ebb96 (diff)
downloadpango-55b6ef4545bda8f12ae4c82aba3a61e8e7c47868.tar.gz
[HB] Cleanup public buffer structs
-rw-r--r--pango/opentype/hb-buffer-private.h46
-rw-r--r--pango/opentype/hb-buffer.c49
-rw-r--r--pango/opentype/hb-buffer.h35
-rw-r--r--pango/opentype/hb-ot-layout-gpos-private.h8
-rw-r--r--pango/opentype/hb-ot-layout-private.h5
-rw-r--r--pango/opentype/hb-ot-layout.cc20
6 files changed, 97 insertions, 66 deletions
diff --git a/pango/opentype/hb-buffer-private.h b/pango/opentype/hb-buffer-private.h
index a648a0eb..c8dd2607 100644
--- a/pango/opentype/hb-buffer-private.h
+++ b/pango/opentype/hb-buffer-private.h
@@ -36,6 +36,36 @@ HB_BEGIN_DECLS
#define HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
+typedef struct _hb_internal_glyph_info_t {
+ hb_codepoint_t codepoint;
+ uint32_t properties;
+ uint32_t cluster;
+ uint16_t component;
+ uint16_t lig_id;
+ uint32_t gproperty;
+} hb_internal_glyph_info_t;
+
+typedef struct _hb_internal_glyph_position_t {
+ hb_position_t x_pos;
+ hb_position_t y_pos;
+ hb_position_t x_advance;
+ hb_position_t y_advance;
+ hb_bool_t new_advance :1; /* if set, the advance width values are
+ absolute, i.e., they won't be
+ added to the original glyph's value
+ but rather replace them */
+ unsigned short back : 15; /* number of glyphs to go back
+ for drawing current glyph */
+ short cursive_chain : 16; /* character to which this connects,
+ may be positive or negative; used
+ only internally */
+} hb_internal_glyph_position_t;
+
+ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_internal_glyph_info_t));
+ASSERT_STATIC (sizeof (hb_glyph_position_t) == sizeof (hb_internal_glyph_position_t));
+ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t));
+
+
struct _hb_buffer_t {
hb_reference_count_t ref_count;
@@ -46,10 +76,10 @@ struct _hb_buffer_t {
unsigned int in_pos;
unsigned int out_pos;
- hb_glyph_info_t *in_string;
- hb_glyph_info_t *out_string;
- hb_glyph_info_t *alt_string;
- hb_glyph_position_t *positions;
+ hb_internal_glyph_info_t *in_string;
+ hb_internal_glyph_info_t *out_string;
+ hb_internal_glyph_info_t *alt_string;
+ hb_internal_glyph_position_t *positions;
hb_direction_t direction;
unsigned int max_lig_id;
@@ -88,16 +118,16 @@ _hb_buffer_allocate_lig_id (hb_buffer_t *buffer);
/* convenience macros */
-#define IN_GLYPH(pos) (buffer->in_string[(pos)].gindex)
+#define IN_GLYPH(pos) (buffer->in_string[(pos)].codepoint)
#define IN_INFO(pos) (&buffer->in_string[(pos)])
-#define IN_CURGLYPH() (buffer->in_string[buffer->in_pos].gindex)
+#define IN_CURGLYPH() (buffer->in_string[buffer->in_pos].codepoint)
#define IN_CURINFO() (&buffer->in_string[buffer->in_pos])
#define IN_PROPERTIES(pos) (buffer->in_string[(pos)].properties)
-#define IN_LIGID(pos) (buffer->in_string[(pos)].ligID)
+#define IN_LIGID(pos) (buffer->in_string[(pos)].lig_id)
#define IN_COMPONENT(pos) (buffer->in_string[(pos)].component)
#define POSITION(pos) (&buffer->positions[(pos)])
#define CURPOSITION() (&buffer->positions[buffer->in_pos])
-#define OUT_GLYPH(pos) (buffer->out_string[(pos)].gindex)
+#define OUT_GLYPH(pos) (buffer->out_string[(pos)].codepoint)
#define OUT_INFO(pos) (&buffer->out_string[(pos)])
HB_END_DECLS
diff --git a/pango/opentype/hb-buffer.c b/pango/opentype/hb-buffer.c
index 30ce2e8f..d995b127 100644
--- a/pango/opentype/hb-buffer.c
+++ b/pango/opentype/hb-buffer.c
@@ -29,6 +29,7 @@
#include <string.h>
+
static hb_buffer_t _hb_buffer_nil = {
HB_REFERENCE_COUNT_INVALID /* ref_count */
};
@@ -158,21 +159,21 @@ hb_buffer_ensure (hb_buffer_t *buffer, unsigned int size)
void
hb_buffer_add_glyph (hb_buffer_t *buffer,
- hb_codepoint_t glyph_index,
+ hb_codepoint_t codepoint,
unsigned int properties,
unsigned int cluster)
{
- hb_glyph_info_t *glyph;
+ hb_internal_glyph_info_t *glyph;
hb_buffer_ensure (buffer, buffer->in_length + 1);
glyph = &buffer->in_string[buffer->in_length];
- glyph->gindex = glyph_index;
+ glyph->codepoint = codepoint;
glyph->properties = properties;
glyph->cluster = cluster;
glyph->component = 0;
- glyph->ligID = 0;
- glyph->internal = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+ glyph->lig_id = 0;
+ glyph->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
buffer->in_length++;
}
@@ -217,7 +218,7 @@ _hb_buffer_swap (hb_buffer_t *buffer)
if (buffer->out_string != buffer->in_string)
{
- hb_glyph_info_t *tmp_string;
+ hb_internal_glyph_info_t *tmp_string;
tmp_string = buffer->in_string;
buffer->in_string = buffer->out_string;
buffer->out_string = tmp_string;
@@ -243,9 +244,9 @@ _hb_buffer_swap (hb_buffer_t *buffer)
will copied `num_out' times, otherwise `component' itself will
be used to fill the `component' fields.
- If `ligID' is 0xFFFF, the ligID value from buffer->in_pos
- will copied `num_out' times, otherwise `ligID' itself will
- be used to fill the `ligID' fields.
+ If `lig_id' is 0xFFFF, the lig_id value from buffer->in_pos
+ will copied `num_out' times, otherwise `lig_id' itself will
+ be used to fill the `lig_id' fields.
The properties for all replacement glyphs are taken
from the glyph at position `buffer->in_pos'.
@@ -258,7 +259,7 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
unsigned int num_out,
const uint16_t *glyph_data_be,
unsigned short component,
- unsigned short ligID)
+ unsigned short lig_id)
{
unsigned int i;
unsigned int properties;
@@ -274,18 +275,18 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
cluster = buffer->in_string[buffer->in_pos].cluster;
if (component == 0xFFFF)
component = buffer->in_string[buffer->in_pos].component;
- if (ligID == 0xFFFF)
- ligID = buffer->in_string[buffer->in_pos].ligID;
+ if (lig_id == 0xFFFF)
+ lig_id = buffer->in_string[buffer->in_pos].lig_id;
for (i = 0; i < num_out; i++)
{
- hb_glyph_info_t *info = &buffer->out_string[buffer->out_pos + i];
- info->gindex = hb_be_uint16 (glyph_data_be[i]);
+ hb_internal_glyph_info_t *info = &buffer->out_string[buffer->out_pos + i];
+ info->codepoint = hb_be_uint16 (glyph_data_be[i]);
info->properties = properties;
info->cluster = cluster;
info->component = component;
- info->ligID = ligID;
- info->internal = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+ info->lig_id = lig_id;
+ info->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
}
buffer->in_pos += num_in;
@@ -298,9 +299,9 @@ HB_INTERNAL void
_hb_buffer_add_output_glyph (hb_buffer_t *buffer,
hb_codepoint_t glyph_index,
unsigned short component,
- unsigned short ligID)
+ unsigned short lig_id)
{
- hb_glyph_info_t *info;
+ hb_internal_glyph_info_t *info;
if (buffer->out_string != buffer->in_string)
{
@@ -311,12 +312,12 @@ _hb_buffer_add_output_glyph (hb_buffer_t *buffer,
buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
info = &buffer->out_string[buffer->out_pos];
- info->gindex = glyph_index;
+ info->codepoint = glyph_index;
if (component != 0xFFFF)
info->component = component;
- if (ligID != 0xFFFF)
- info->ligID = ligID;
- info->internal = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+ if (lig_id != 0xFFFF)
+ info->lig_id = lig_id;
+ info->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
buffer->in_pos++;
buffer->out_pos++;
@@ -363,7 +364,7 @@ hb_buffer_get_len (hb_buffer_t *buffer)
hb_glyph_info_t *
hb_buffer_get_glyph_infos (hb_buffer_t *buffer)
{
- return buffer->in_string;
+ return (hb_glyph_info_t *) buffer->in_string;
}
/* Return value valid as long as buffer not modified */
@@ -373,5 +374,5 @@ hb_buffer_get_glyph_positions (hb_buffer_t *buffer)
if (buffer->in_length && !buffer->positions)
hb_buffer_clear_positions (buffer);
- return buffer->positions;
+ return (hb_glyph_position_t *) buffer->positions;
}
diff --git a/pango/opentype/hb-buffer.h b/pango/opentype/hb-buffer.h
index 4a37cdb8..069e6dd2 100644
--- a/pango/opentype/hb-buffer.h
+++ b/pango/opentype/hb-buffer.h
@@ -41,15 +41,13 @@ typedef enum _hb_direction_t {
HB_DIRECTION_BTT
} hb_direction_t;
-/* XXX these structs need review before we can commit to them */
-
typedef struct _hb_glyph_info_t {
- hb_codepoint_t gindex;
- unsigned int properties;
- unsigned int cluster;
- unsigned short component;
- unsigned short ligID;
- unsigned int internal;
+ hb_codepoint_t codepoint;
+ uint32_t properties;
+ uint32_t cluster;
+ uint16_t component;
+ uint16_t lig_id;
+ uint32_t internal;
} hb_glyph_info_t;
typedef struct _hb_glyph_position_t {
@@ -57,15 +55,16 @@ typedef struct _hb_glyph_position_t {
hb_position_t y_pos;
hb_position_t x_advance;
hb_position_t y_advance;
- unsigned short back; /* number of glyphs to go back
- for drawing current glyph */
- hb_bool_t new_advance; /* if set, the advance width values are
- absolute, i.e., they won't be
- added to the original glyph's value
- but rather replace them */
- short cursive_chain; /* character to which this connects,
- may be positive or negative; used
- only internally */
+ /* XXX these should all be replaced by "uint32_t internal" */
+ hb_bool_t new_advance :1; /* if set, the advance width values are
+ absolute, i.e., they won't be
+ added to the original glyph's value
+ but rather replace them */
+ unsigned short back : 15; /* number of glyphs to go back
+ for drawing current glyph */
+ short cursive_chain : 16; /* character to which this connects,
+ may be positive or negative; used
+ only internally */
} hb_glyph_position_t;
@@ -103,7 +102,7 @@ hb_buffer_ensure (hb_buffer_t *buffer,
void
hb_buffer_add_glyph (hb_buffer_t *buffer,
- hb_codepoint_t glyph_index,
+ hb_codepoint_t codepoint,
unsigned int properties,
unsigned int cluster);
diff --git a/pango/opentype/hb-ot-layout-gpos-private.h b/pango/opentype/hb-ot-layout-gpos-private.h
index b0695c1a..dafd7d76 100644
--- a/pango/opentype/hb-ot-layout-gpos-private.h
+++ b/pango/opentype/hb-ot-layout-gpos-private.h
@@ -58,7 +58,7 @@ struct ValueFormat : USHORT
const void apply_value (hb_ot_layout_t *layout,
const char *base,
const Value *values,
- hb_glyph_position_t *glyph_pos) const
+ hb_internal_glyph_position_t *glyph_pos) const
{
unsigned int x_ppem, y_ppem;
hb_16dot16_t x_scale, y_scale;
@@ -825,7 +825,7 @@ struct MarkBasePosFormat1
unsigned int index = base_index * classCount + mark_class;
(&base_array+base_array.matrix[index]).get_anchor (layout, IN_GLYPH (j), &base_x, &base_y);
- hb_glyph_position_t *o = POSITION (buffer->in_pos);
+ hb_internal_glyph_position_t *o = POSITION (buffer->in_pos);
o->x_pos = base_x - mark_x;
o->y_pos = base_y - mark_y;
o->x_advance = 0;
@@ -962,7 +962,7 @@ struct MarkLigPosFormat1
unsigned int index = comp_index * classCount + mark_class;
(&lig_attach+lig_attach.matrix[index]).get_anchor (layout, IN_GLYPH (j), &lig_x, &lig_y);
- hb_glyph_position_t *o = POSITION (buffer->in_pos);
+ hb_internal_glyph_position_t *o = POSITION (buffer->in_pos);
o->x_pos = lig_x - mark_x;
o->y_pos = lig_y - mark_y;
o->x_advance = 0;
@@ -1077,7 +1077,7 @@ struct MarkMarkPosFormat1
unsigned int index = mark2_index * classCount + mark1_class;
(&mark2_array+mark2_array.matrix[index]).get_anchor (layout, IN_GLYPH (j), &mark2_x, &mark2_y);
- hb_glyph_position_t *o = POSITION (buffer->in_pos);
+ hb_internal_glyph_position_t *o = POSITION (buffer->in_pos);
o->x_pos = mark2_x - mark1_x;
o->y_pos = mark2_y - mark1_y;
o->x_advance = 0;
diff --git a/pango/opentype/hb-ot-layout-private.h b/pango/opentype/hb-ot-layout-private.h
index 1ce32eda..48e9145d 100644
--- a/pango/opentype/hb-ot-layout-private.h
+++ b/pango/opentype/hb-ot-layout-private.h
@@ -29,6 +29,7 @@
#include "hb-private.h"
#include "hb-ot-layout.h"
+#include "hb-buffer-private.h"
typedef unsigned int hb_ot_layout_class_t;
@@ -78,13 +79,13 @@ _hb_ot_layout_set_glyph_property (hb_ot_layout_t *layout,
HB_INTERNAL hb_bool_t
_hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
- hb_glyph_info_t *ginfo,
+ hb_internal_glyph_info_t *ginfo,
unsigned int lookup_flags,
unsigned int *property);
HB_INTERNAL hb_bool_t
_hb_ot_layout_skip_mark (hb_ot_layout_t *layout,
- hb_glyph_info_t *ginfo,
+ hb_internal_glyph_info_t *ginfo,
unsigned int lookup_flags,
unsigned int *property);
diff --git a/pango/opentype/hb-ot-layout.cc b/pango/opentype/hb-ot-layout.cc
index 9e73737a..dd98d74f 100644
--- a/pango/opentype/hb-ot-layout.cc
+++ b/pango/opentype/hb-ot-layout.cc
@@ -176,15 +176,15 @@ _hb_ot_layout_get_glyph_property (hb_ot_layout_t *layout,
HB_INTERNAL hb_bool_t
_hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
- hb_glyph_info_t *ginfo,
+ hb_internal_glyph_info_t *ginfo,
unsigned int lookup_flags,
unsigned int *property_out)
{
unsigned int property;
- if (ginfo->internal == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
- ginfo->internal = _hb_ot_layout_get_glyph_property (layout, ginfo->gindex);
- property = ginfo->internal;
+ if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
+ ginfo->gproperty = _hb_ot_layout_get_glyph_property (layout, ginfo->codepoint);
+ property = ginfo->gproperty;
if (property_out)
*property_out = property;
@@ -200,7 +200,7 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
* lookup_flags has the set index.
*/
if (lookup_flags & LookupFlag::UseMarkFilteringSet)
- return layout->gdef->mark_set_covers (lookup_flags >> 16, ginfo->gindex);
+ return layout->gdef->mark_set_covers (lookup_flags >> 16, ginfo->codepoint);
/* The second byte of lookup_flags has the meaning
* "ignore marks of attachment type different than
@@ -215,15 +215,15 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
HB_INTERNAL hb_bool_t
_hb_ot_layout_skip_mark (hb_ot_layout_t *layout,
- hb_glyph_info_t *ginfo,
+ hb_internal_glyph_info_t *ginfo,
unsigned int lookup_flags,
unsigned int *property_out)
{
unsigned int property;
- if (ginfo->internal == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
- ginfo->internal = _hb_ot_layout_get_glyph_property (layout, ginfo->gindex);
- property = ginfo->internal;
+ if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
+ ginfo->gproperty = _hb_ot_layout_get_glyph_property (layout, ginfo->codepoint);
+ property = ginfo->gproperty;
if (property_out)
*property_out = property;
@@ -235,7 +235,7 @@ _hb_ot_layout_skip_mark (hb_ot_layout_t *layout,
/* If using mark filtering sets, the high short of lookup_flags has the set index. */
if (lookup_flags & LookupFlag::UseMarkFilteringSet)
- return !layout->gdef->mark_set_covers (lookup_flags >> 16, ginfo->gindex);
+ return !layout->gdef->mark_set_covers (lookup_flags >> 16, ginfo->codepoint);
/* The second byte of lookup_flags has the meaning "ignore marks of attachment type
* different than the attachment type specified." */