[Indic] Move syllable tracking from Indic to generic layer

This is to incorporate it into GSUB/GPOS processing.
This commit is contained in:
Behdad Esfahbod 2012-05-11 11:41:39 +02:00
parent 3bf27a9f0e
commit cee7187447
8 changed files with 16 additions and 19 deletions

View File

@ -1501,6 +1501,7 @@ GPOS::position_finish (hb_buffer_t *buffer)
for (unsigned int i = 0; i < len; i++) for (unsigned int i = 0; i < len; i++)
fix_mark_attachment (pos, i, direction); fix_mark_attachment (pos, i, direction);
HB_BUFFER_DEALLOCATE_VAR (buffer, syllable);
HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props); HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props);
HB_BUFFER_DEALLOCATE_VAR (buffer, props_cache); HB_BUFFER_DEALLOCATE_VAR (buffer, props_cache);
} }

View File

@ -1169,10 +1169,11 @@ GSUB::substitute_start (hb_buffer_t *buffer)
{ {
HB_BUFFER_ALLOCATE_VAR (buffer, props_cache); HB_BUFFER_ALLOCATE_VAR (buffer, props_cache);
HB_BUFFER_ALLOCATE_VAR (buffer, lig_props); HB_BUFFER_ALLOCATE_VAR (buffer, lig_props);
HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
unsigned int count = buffer->len; unsigned int count = buffer->len;
for (unsigned int i = 0; i < count; i++) 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 void

View File

@ -34,9 +34,6 @@
/* buffer var allocations */
#define lig_props() var2.u8[3]
/* unique ligature id */ /* unique ligature id */
/* component number in the ligature (0 = base) */ /* component number in the ligature (0 = base) */
static inline void static inline void

View File

@ -33,6 +33,7 @@
#include "hb-font-private.hh" #include "hb-font-private.hh"
#include "hb-buffer-private.hh" #include "hb-buffer-private.hh"
#include "hb-ot-shape-complex-private.hh"
@ -40,9 +41,6 @@
* GDEF * GDEF
*/ */
/* buffer var allocations */
#define props_cache() var1.u16[1] /* glyph_props cache */
/* XXX cleanup */ /* XXX cleanup */
typedef enum { typedef enum {
HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED = 0x0001, HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED = 0x0001,

View File

@ -66,7 +66,7 @@ action found_non_indic { initial_reordering_non_indic (map, buffer, mask_array,
action next_syllable { action next_syllable {
for (unsigned int i = last; i < p; i++) for (unsigned int i = last; i < p; i++)
info[i].indic_syllable() = syllable_serial; info[i].syllable() = syllable_serial;
last = p; last = p;
syllable_serial++; syllable_serial++;
} }

View File

@ -36,7 +36,6 @@
/* buffer var allocations */ /* buffer var allocations */
#define indic_category() complex_var_persistent_u8_0() /* indic_category_t */ #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_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 #define INDIC_TABLE_ELEMENT_TYPE uint8_t

View 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_category);
HB_BUFFER_ALLOCATE_VAR (buffer, indic_position); HB_BUFFER_ALLOCATE_VAR (buffer, indic_position);
HB_BUFFER_ALLOCATE_VAR (buffer, indic_syllable);
/* We cannot setup masks here. We save information about characters /* We cannot setup masks here. We save information about characters
* and setup masks later on in a pause-callback. */ * 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; hb_glyph_info_t *info = buffer->info;
unsigned int last = 0; 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++) 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); final_reordering_syllable (buffer, last, i);
last = i; last = i;
last_syllable = info[last].indic_syllable(); last_syllable = info[last].syllable();
} }
final_reordering_syllable (buffer, last, count); 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_category);
HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position); HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
} }

View File

@ -38,12 +38,15 @@
#define unicode_props0() var1.u8[0] #define unicode_props0() var1.u8[0]
#define unicode_props1() var1.u8[1] #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 */ /* buffer var allocations, used by complex shapers */
#define complex_var_persistent_u8_0() var2.u8[0] #define complex_var_persistent_u8_0() var2.u8[2]
#define complex_var_persistent_u8_1() var2.u8[1] #define complex_var_persistent_u8_1() var2.u8[3]
#define complex_var_persistent_u8_2() var2.u8[2] #define complex_var_temporary_u8() var2.u8[0]
#define complex_var_persistent_u16() var2.u16[0]
#define complex_var_temporary_u8() var2.u8[3]
#define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \ #define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \