Lines Matching refs:buffer

29 #include "harfbuzz-buffer-private.h"
33 /* Here is how the buffer works internally:
50 * called, out_string is moved over to an alternate buffer (alt_string), and
51 * its current contents (out_length entries) are copied to the alt buffer.
56 * The buffer->separate_out boolean keeps status of whether out_string points
63 HB_Buffer_ensure( HB_Buffer buffer,
66 HB_UInt new_allocated = buffer->allocated;
75 if ( buffer->positions )
77 if ( REALLOC_ARRAY( buffer->positions, new_allocated, HB_PositionRec ) )
81 if ( REALLOC_ARRAY( buffer->in_string, new_allocated, HB_GlyphItemRec ) )
84 if ( buffer->separate_out )
86 if ( REALLOC_ARRAY( buffer->alt_string, new_allocated, HB_GlyphItemRec ) )
89 buffer->out_string = buffer->alt_string;
93 buffer->out_string = buffer->in_string;
95 if ( buffer->alt_string )
97 if ( REALLOC_ARRAY( buffer->alt_string, new_allocated, HB_GlyphItemRec ) )
102 buffer->allocated = new_allocated;
109 HB_Buffer_duplicate_out_buffer( HB_Buffer buffer )
111 if ( !buffer->alt_string )
115 if ( ALLOC_ARRAY( buffer->alt_string, buffer->allocated, HB_GlyphItemRec ) )
119 buffer->out_string = buffer->alt_string;
120 memcpy( buffer->out_string, buffer->in_string, buffer->out_length * sizeof (buffer->out_string[0]) );
121 buffer->separate_out = TRUE;
131 HB_Buffer buffer;
134 if ( ALLOC( buffer, sizeof( HB_BufferRec ) ) )
137 buffer->allocated = 0;
138 buffer->in_string = NULL;
139 buffer->alt_string = NULL;
140 buffer->positions = NULL;
142 HB_Buffer_clear( buffer );
144 *pbuffer = buffer;
150 HB_Buffer_free( HB_Buffer buffer )
152 FREE( buffer->in_string );
153 FREE( buffer->alt_string );
154 buffer->out_string = NULL;
155 FREE( buffer->positions );
156 FREE( buffer );
160 HB_Buffer_clear( HB_Buffer buffer )
162 buffer->in_length = 0;
163 buffer->out_length = 0;
164 buffer->in_pos = 0;
165 buffer->out_pos = 0;
166 buffer->out_string = buffer->in_string;
167 buffer->separate_out = FALSE;
168 buffer->max_ligID = 0;
172 HB_Buffer_add_glyph( HB_Buffer buffer,
180 error = HB_Buffer_ensure( buffer, buffer->in_length + 1 );
184 glyph = &buffer->in_string[buffer->in_length];
192 buffer->in_length++;
200 _hb_buffer_clear_output( HB_Buffer buffer )
202 buffer->out_length = 0;
203 buffer->out_pos = 0;
204 buffer->out_string = buffer->in_string;
205 buffer->separate_out = FALSE;
209 _hb_buffer_clear_positions( HB_Buffer buffer )
211 if ( !buffer->positions )
215 if ( ALLOC_ARRAY( buffer->positions, buffer->allocated, HB_PositionRec ) )
219 memset (buffer->positions, 0, sizeof (buffer->positions[0]) * buffer->in_length);
225 _hb_buffer_swap( HB_Buffer buffer )
231 if ( buffer->separate_out )
233 tmp_string = buffer->in_string;
234 buffer->in_string = buffer->out_string;
235 buffer->out_string = tmp_string;
236 buffer->alt_string = buffer->out_string;
239 tmp_length = buffer->in_length;
240 buffer->in_length = buffer->out_length;
241 buffer->out_length = tmp_length;
243 tmp_pos = buffer->in_pos;
244 buffer->in_pos = buffer->out_pos;
245 buffer->out_pos = tmp_pos;
249 to `buffer->out_string', advancing the in array pointer in the structure
254 If `component' is 0xFFFF, the component value from buffer->in_pos
258 If `ligID' is 0xFFFF, the ligID value from buffer->in_pos
263 from the glyph at position `buffer->in_pos'.
265 The cluster value for the glyph at position buffer->in_pos is used
268 _hb_buffer_add_output_glyphs( HB_Buffer buffer,
280 error = HB_Buffer_ensure( buffer, buffer->out_pos + num_out );
284 if ( !buffer->separate_out )
286 error = HB_Buffer_duplicate_out_buffer( buffer );
291 properties = buffer->in_string[buffer->in_pos].properties;
292 cluster = buffer->in_string[buffer->in_pos].cluster;
294 component = buffer->in_string[buffer->in_pos].component;
296 ligID = buffer->in_string[buffer->in_pos].ligID;
300 HB_GlyphItem item = &buffer->out_string[buffer->out_pos + i];
310 buffer->in_pos += num_in;
311 buffer->out_pos += num_out;
313 buffer->out_length = buffer->out_pos;
319 _hb_buffer_add_output_glyph( HB_Buffer buffer,
326 return _hb_buffer_add_output_glyphs ( buffer, 1, 1,
331 _hb_buffer_copy_output_glyph ( HB_Buffer buffer )
335 error = HB_Buffer_ensure( buffer, buffer->out_pos + 1 );
339 if ( buffer->separate_out )
341 buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
344 buffer->in_pos++;
345 buffer->out_pos++;
346 buffer->out_length = buffer->out_pos;
352 _hb_buffer_replace_output_glyph( HB_Buffer buffer,
361 error = _hb_buffer_copy_output_glyph ( buffer );
365 buffer->out_string[buffer->out_pos-1].gindex = glyph_index;
369 return _hb_buffer_add_output_glyph( buffer, glyph_index, 0xFFFF, 0xFFFF );
376 _hb_buffer_allocate_ligid( HB_Buffer buffer )
378 buffer->max_ligID++;
379 if (HB_UNLIKELY (buffer->max_ligID == 0))
380 buffer->max_ligID++;
382 return buffer->max_ligID;