[Indic] Move syllable tracking from Indic to generic layer
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 11 May 2012 09:41:39 +0000 (11:41 +0200)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 11 May 2012 09:41:39 +0000 (11:41 +0200)
This is to incorporate it into GSUB/GPOS processing.

src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-private.hh
src/hb-ot-shape-complex-indic-machine.rl
src/hb-ot-shape-complex-indic-private.hh
src/hb-ot-shape-complex-indic.cc
src/hb-ot-shape-complex-private.hh

index 4bd8708..44ec65f 100644 (file)
@@ -1501,6 +1501,7 @@ GPOS::position_finish (hb_buffer_t *buffer)
   for (unsigned int i = 0; i < len; i++)
     fix_mark_attachment (pos, i, direction);
 
+  HB_BUFFER_DEALLOCATE_VAR (buffer, syllable);
   HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props);
   HB_BUFFER_DEALLOCATE_VAR (buffer, props_cache);
 }
index 682303a..bc2b0e1 100644 (file)
@@ -1169,10 +1169,11 @@ GSUB::substitute_start (hb_buffer_t *buffer)
 {
   HB_BUFFER_ALLOCATE_VAR (buffer, props_cache);
   HB_BUFFER_ALLOCATE_VAR (buffer, lig_props);
+  HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
 
   unsigned int count = buffer->len;
   for (unsigned int i = 0; i < count; i++)
-    buffer->info[i].props_cache() = buffer->info[i].lig_props() = 0;
+    buffer->info[i].props_cache() = buffer->info[i].lig_props() = buffer->info[i].syllable() = 0;
 }
 
 void
index 904c344..1785f55 100644 (file)
@@ -34,9 +34,6 @@
 
 
 
-/* buffer var allocations */
-#define lig_props() var2.u8[3]
-
 /* unique ligature id */
 /* component number in the ligature (0 = base) */
 static inline void
index bf7e43b..f860e7b 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "hb-font-private.hh"
 #include "hb-buffer-private.hh"
+#include "hb-ot-shape-complex-private.hh"
 
 
 
@@ -40,9 +41,6 @@
  * GDEF
  */
 
-/* buffer var allocations */
-#define props_cache() var1.u16[1] /* glyph_props cache */
-
 /* XXX cleanup */
 typedef enum {
   HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED        = 0x0001,
index 2ec2798..c53bd78 100644 (file)
@@ -66,7 +66,7 @@ action found_non_indic { initial_reordering_non_indic (map, buffer, mask_array,
 
 action next_syllable {
   for (unsigned int i = last; i < p; i++)
-    info[i].indic_syllable() = syllable_serial;
+    info[i].syllable() = syllable_serial;
   last = p;
   syllable_serial++;
 }
index d63b61a..0d18536 100644 (file)
@@ -36,7 +36,6 @@
 /* buffer var allocations */
 #define indic_category() complex_var_persistent_u8_0() /* indic_category_t */
 #define indic_position() complex_var_persistent_u8_1() /* indic_matra_category_t */
-#define indic_syllable() complex_var_persistent_u8_2() /* serial */
 
 #define INDIC_TABLE_ELEMENT_TYPE uint8_t
 
index e96dd78..dbd54f0 100644 (file)
@@ -168,7 +168,6 @@ _hb_ot_shape_complex_setup_masks_indic (hb_ot_map_t *map, hb_buffer_t *buffer, h
 {
   HB_BUFFER_ALLOCATE_VAR (buffer, indic_category);
   HB_BUFFER_ALLOCATE_VAR (buffer, indic_position);
-  HB_BUFFER_ALLOCATE_VAR (buffer, indic_syllable);
 
   /* We cannot setup masks here.  We save information about characters
    * and setup masks later on in a pause-callback. */
@@ -697,16 +696,15 @@ final_reordering (const hb_ot_map_t *map,
 
   hb_glyph_info_t *info = buffer->info;
   unsigned int last = 0;
-  unsigned int last_syllable = info[0].indic_syllable();
+  unsigned int last_syllable = info[0].syllable();
   for (unsigned int i = 1; i < count; i++)
-    if (last_syllable != info[i].indic_syllable()) {
+    if (last_syllable != info[i].syllable()) {
       final_reordering_syllable (buffer, last, i);
       last = i;
-      last_syllable = info[last].indic_syllable();
+      last_syllable = info[last].syllable();
     }
   final_reordering_syllable (buffer, last, count);
 
-  HB_BUFFER_DEALLOCATE_VAR (buffer, indic_syllable);
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
 }
index a4bc2f8..9b61f8e 100644 (file)
 #define unicode_props0()       var1.u8[0]
 #define unicode_props1()       var1.u8[1]
 
+/* buffer var allocations, used during the GSUB/GPOS processing */
+#define props_cache()          var1.u16[1] /* GSUB/GPOS glyph_props cache */
+#define syllable()             var2.u8[0] /* GSUB/GPOS shaping boundaries */
+#define lig_props()            var2.u8[1] /* GSUB/GPOS ligature tracking */
+
 /* buffer var allocations, used by complex shapers */
-#define complex_var_persistent_u8_0()  var2.u8[0]
-#define complex_var_persistent_u8_1()  var2.u8[1]
-#define complex_var_persistent_u8_2()  var2.u8[2]
-#define complex_var_persistent_u16()   var2.u16[0]
-#define complex_var_temporary_u8()     var2.u8[3]
+#define complex_var_persistent_u8_0()  var2.u8[2]
+#define complex_var_persistent_u8_1()  var2.u8[3]
+#define complex_var_temporary_u8()     var2.u8[0]
 
 
 #define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \