From: Behdad Esfahbod Date: Fri, 11 May 2012 09:41:39 +0000 (+0200) Subject: [Indic] Move syllable tracking from Indic to generic layer X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cee7187447b76b22e1bb6136d137b35ac49c3a5d;p=platform%2Fupstream%2FlibHarfBuzzSharp.git [Indic] Move syllable tracking from Indic to generic layer This is to incorporate it into GSUB/GPOS processing. --- diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index 4bd8708..44ec65f 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -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); } diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index 682303a..bc2b0e1 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -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 diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 904c344..1785f55 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -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 diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh index bf7e43b..f860e7b 100644 --- a/src/hb-ot-layout-private.hh +++ b/src/hb-ot-layout-private.hh @@ -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, diff --git a/src/hb-ot-shape-complex-indic-machine.rl b/src/hb-ot-shape-complex-indic-machine.rl index 2ec2798..c53bd78 100644 --- a/src/hb-ot-shape-complex-indic-machine.rl +++ b/src/hb-ot-shape-complex-indic-machine.rl @@ -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++; } diff --git a/src/hb-ot-shape-complex-indic-private.hh b/src/hb-ot-shape-complex-indic-private.hh index d63b61a..0d18536 100644 --- a/src/hb-ot-shape-complex-indic-private.hh +++ b/src/hb-ot-shape-complex-indic-private.hh @@ -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 diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index e96dd78..dbd54f0 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -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); } diff --git a/src/hb-ot-shape-complex-private.hh b/src/hb-ot-shape-complex-private.hh index a4bc2f8..9b61f8e 100644 --- a/src/hb-ot-shape-complex-private.hh +++ b/src/hb-ot-shape-complex-private.hh @@ -38,12 +38,15 @@ #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 \