[Indic] Move syllable tracking from Indic to generic layer
This is to incorporate it into GSUB/GPOS processing.
This commit is contained in:
parent
3bf27a9f0e
commit
cee7187447
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 \
|
||||
|
|
Loading…
Reference in New Issue