[pango/harfbuzz-ng: 22/57] [HB] Cleanup public buffer structs



commit 55b6ef4545bda8f12ae4c82aba3a61e8e7c47868
Author: Behdad Esfahbod <behdad behdad org>
Date:   Sat Aug 1 22:53:04 2009 -0400

    [HB] Cleanup public buffer structs

 pango/opentype/hb-buffer-private.h         |   46 +++++++++++++++++++++----
 pango/opentype/hb-buffer.c                 |   49 ++++++++++++++-------------
 pango/opentype/hb-buffer.h                 |   35 ++++++++++----------
 pango/opentype/hb-ot-layout-gpos-private.h |    8 ++--
 pango/opentype/hb-ot-layout-private.h      |    5 ++-
 pango/opentype/hb-ot-layout.cc             |   20 ++++++------
 6 files changed, 97 insertions(+), 66 deletions(-)
---
diff --git a/pango/opentype/hb-buffer-private.h b/pango/opentype/hb-buffer-private.h
index a648a0e..c8dd260 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 30ce2e8..d995b12 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 4a37cdb..069e6dd 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 b0695c1..dafd7d7 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 1ce32ed..48e9145 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 9e73737..dd98d74 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." */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]