[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++)
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);
}

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, 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

View 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

View 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,

View 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++;
}

View 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

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_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);
}

View File

@ -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 \