11512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod/*
21512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Copyright (C) 1998-2004  David Turner and Werner Lemberg
31512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Copyright (C) 2004,2007  Red Hat, Inc.
41512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
51512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * This is part of HarfBuzz, an OpenType Layout engine library.
61512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
71512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Permission is hereby granted, without written agreement and without
81512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
91512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * software and its documentation for any purpose, provided that the
101512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
111512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * all copies of this software.
121512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
131512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
141512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
151512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
161512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
171512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * DAMAGE.
181512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
191512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
201512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
211512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
221512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
231512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
241512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
251512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
261512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod */
271512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
281512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#ifndef HARFBUZZ_BUFFER_PRIVATE_H
291512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define HARFBUZZ_BUFFER_PRIVATE_H
301512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
311512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#include "harfbuzz-impl.h"
321512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#include "harfbuzz-buffer.h"
331512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
341512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_BEGIN_HEADER
351512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
361512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define HB_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
371512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
381512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL void
391512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_swap( HB_Buffer buffer );
401512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
411512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL void
421512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_clear_output( HB_Buffer buffer );
431512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
441512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
451512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_clear_positions( HB_Buffer buffer );
461512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
471512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
481512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_add_output_glyphs( HB_Buffer  buffer,
491512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort  num_in,
501512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort  num_out,
511512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort *glyph_data,
521512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort  component,
531512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort  ligID );
541512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
551512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
561512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_add_output_glyph ( HB_Buffer buffer,
571512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UInt   glyph_index,
581512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort component,
591512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			      HB_UShort ligID );
601512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
611512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
621512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_copy_output_glyph ( HB_Buffer buffer );
631512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
641512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
651512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_replace_output_glyph ( HB_Buffer buffer,
661512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				  HB_UInt   glyph_index,
671512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				  HB_Bool   inplace );
681512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
691512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_UShort
701512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_buffer_allocate_ligid( HB_Buffer buffer );
711512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
721512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
731512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod/* convenience macros */
741512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
751512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_GLYPH( pos )        (buffer->in_string[(pos)].gindex)
761512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_ITEM( pos )         (&buffer->in_string[(pos)])
771512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_CURGLYPH()          (buffer->in_string[buffer->in_pos].gindex)
781512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_CURITEM()           (&buffer->in_string[buffer->in_pos])
791512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_PROPERTIES( pos )   (buffer->in_string[(pos)].properties)
801512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_LIGID( pos )        (buffer->in_string[(pos)].ligID)
811512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define IN_COMPONENT( pos )    (buffer->in_string[(pos)].component)
821512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define POSITION( pos )        (&buffer->positions[(pos)])
831512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define OUT_GLYPH( pos )       (buffer->out_string[(pos)].gindex)
841512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define OUT_ITEM( pos )        (&buffer->out_string[(pos)])
851512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
861512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define CHECK_Property( gdef, index, flags, property )					\
871512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod          ( ( error = _HB_GDEF_Check_Property( (gdef), (index), (flags),		\
881512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                                      (property) ) ) != HB_Err_Ok )
891512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
901512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define ADD_String( buffer, num_in, num_out, glyph_data, component, ligID )             \
911512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod          ( ( error = _hb_buffer_add_output_glyphs( (buffer),                            \
921512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod						    (num_in), (num_out),                \
931512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                                                    (glyph_data), (component), (ligID)  \
941512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                                                  ) ) != HB_Err_Ok )
951512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define ADD_Glyph( buffer, glyph_index, component, ligID )				\
961512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod          ( ( error = _hb_buffer_add_output_glyph( (buffer),                             \
971512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                                                    (glyph_index), (component), (ligID) \
981512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                                                  ) ) != HB_Err_Ok )
991512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define REPLACE_Glyph( buffer, glyph_index, nesting_level )				\
1001512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod          ( ( error = _hb_buffer_replace_output_glyph( (buffer), (glyph_index),		\
1011512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod						      (nesting_level) == 1 ) ) != HB_Err_Ok )
1021512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define COPY_Glyph( buffer )								\
1031512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod	  ( (error = _hb_buffer_copy_output_glyph ( buffer ) ) != HB_Err_Ok )
1041512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
1051512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_END_HEADER
1061512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
1071512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#endif /* HARFBUZZ_BUFFER_PRIVATE_H */
108