|
|
|
@ -212,13 +212,46 @@ struct hb_buffer_t |
|
|
|
|
unsigned int num_out, |
|
|
|
|
const hb_codepoint_t *glyph_data); |
|
|
|
|
|
|
|
|
|
HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index); |
|
|
|
|
inline void replace_glyph (hb_codepoint_t glyph_index) |
|
|
|
|
{ |
|
|
|
|
if (unlikely (out_info != info || out_len != idx)) { |
|
|
|
|
if (unlikely (!make_room_for (1, 1))) return; |
|
|
|
|
out_info[out_len] = info[idx]; |
|
|
|
|
} |
|
|
|
|
out_info[out_len].codepoint = glyph_index; |
|
|
|
|
|
|
|
|
|
idx++; |
|
|
|
|
out_len++; |
|
|
|
|
} |
|
|
|
|
/* Makes a copy of the glyph at idx to output and replace glyph_index */ |
|
|
|
|
HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index); |
|
|
|
|
HB_INTERNAL void output_info (const hb_glyph_info_t &glyph_info); |
|
|
|
|
inline hb_glyph_info_t & output_glyph (hb_codepoint_t glyph_index) |
|
|
|
|
{ |
|
|
|
|
if (unlikely (!make_room_for (0, 1))) return Crap(hb_glyph_info_t); |
|
|
|
|
|
|
|
|
|
out_info[out_len] = info[idx]; |
|
|
|
|
out_info[out_len].codepoint = glyph_index; |
|
|
|
|
|
|
|
|
|
out_len++; |
|
|
|
|
|
|
|
|
|
return out_info[out_len - 1]; |
|
|
|
|
} |
|
|
|
|
inline void output_info (const hb_glyph_info_t &glyph_info) |
|
|
|
|
{ |
|
|
|
|
if (unlikely (!make_room_for (0, 1))) return; |
|
|
|
|
|
|
|
|
|
out_info[out_len] = glyph_info; |
|
|
|
|
|
|
|
|
|
out_len++; |
|
|
|
|
} |
|
|
|
|
/* Copies glyph at idx to output but doesn't advance idx */ |
|
|
|
|
HB_INTERNAL void copy_glyph (void); |
|
|
|
|
HB_INTERNAL bool move_to (unsigned int i); /* i is output-buffer index. */ |
|
|
|
|
inline void copy_glyph (void) |
|
|
|
|
{ |
|
|
|
|
if (unlikely (!make_room_for (0, 1))) return; |
|
|
|
|
|
|
|
|
|
out_info[out_len] = info[idx]; |
|
|
|
|
|
|
|
|
|
out_len++; |
|
|
|
|
} |
|
|
|
|
/* Copies glyph at idx to output and advance idx.
|
|
|
|
|
* If there's no output, just advance idx. */ |
|
|
|
|
inline void |
|
|
|
@ -235,10 +268,11 @@ struct hb_buffer_t |
|
|
|
|
|
|
|
|
|
idx++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Advance idx without copying to output. */ |
|
|
|
|
inline void skip_glyph (void) { idx++; } |
|
|
|
|
|
|
|
|
|
inline void skip_glyph (void) |
|
|
|
|
{ |
|
|
|
|
idx++; |
|
|
|
|
} |
|
|
|
|
inline void reset_masks (hb_mask_t mask) |
|
|
|
|
{ |
|
|
|
|
for (unsigned int j = 0; j < len; j++) |
|
|
|
@ -275,6 +309,8 @@ struct hb_buffer_t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Internal methods */ |
|
|
|
|
HB_INTERNAL bool move_to (unsigned int i); /* i is output-buffer index. */ |
|
|
|
|
|
|
|
|
|
HB_INTERNAL bool enlarge (unsigned int size); |
|
|
|
|
|
|
|
|
|
inline bool ensure (unsigned int size) |
|
|
|
|