Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 1998-2004  David Turner and Werner Lemberg
      3  * Copyright (C) 2004,2007  Red Hat, Inc.
      4  *
      5  * This is part of HarfBuzz, an OpenType Layout engine library.
      6  *
      7  * Permission is hereby granted, without written agreement and without
      8  * license or royalty fees, to use, copy, modify, and distribute this
      9  * software and its documentation for any purpose, provided that the
     10  * above copyright notice and the following two paragraphs appear in
     11  * all copies of this software.
     12  *
     13  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
     14  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
     15  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
     16  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
     17  * DAMAGE.
     18  *
     19  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
     20  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     21  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
     22  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
     23  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
     24  *
     25  * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
     26  */
     27 
     28 #ifndef HARFBUZZ_BUFFER_H
     29 #define HARFBUZZ_BUFFER_H
     30 
     31 #include "harfbuzz-global.h"
     32 
     33 HB_BEGIN_HEADER
     34 
     35 typedef struct HB_GlyphItemRec_ {
     36   HB_UInt     gindex;
     37   HB_UInt     properties;
     38   HB_UInt     cluster;
     39   HB_UShort   component;
     40   HB_UShort   ligID;
     41   HB_UShort   gproperties;
     42 } HB_GlyphItemRec, *HB_GlyphItem;
     43 
     44 typedef struct HB_PositionRec_ {
     45   HB_Fixed   x_pos;
     46   HB_Fixed   y_pos;
     47   HB_Fixed   x_advance;
     48   HB_Fixed   y_advance;
     49   HB_UShort  back;            /* number of glyphs to go back
     50 				 for drawing current glyph   */
     51   HB_Bool    new_advance;     /* if set, the advance width values are
     52 				 absolute, i.e., they won't be
     53 				 added to the original glyph's value
     54 				 but rather replace them.            */
     55   HB_Short  cursive_chain;   /* character to which this connects,
     56 				 may be positive or negative; used
     57 				 only internally                     */
     58 } HB_PositionRec, *HB_Position;
     59 
     60 
     61 typedef struct HB_BufferRec_{
     62   HB_UInt    allocated;
     63 
     64   HB_UInt    in_length;
     65   HB_UInt    out_length;
     66   HB_UInt    in_pos;
     67   HB_UInt    out_pos;
     68 
     69   HB_Bool       separate_out;
     70   HB_GlyphItem  in_string;
     71   HB_GlyphItem  out_string;
     72   HB_GlyphItem  alt_string;
     73   HB_Position   positions;
     74   HB_UShort      max_ligID;
     75 } HB_BufferRec, *HB_Buffer;
     76 
     77 HB_Error
     78 hb_buffer_new( HB_Buffer *buffer );
     79 
     80 void
     81 hb_buffer_free( HB_Buffer buffer );
     82 
     83 void
     84 hb_buffer_clear( HB_Buffer buffer );
     85 
     86 HB_Error
     87 hb_buffer_add_glyph( HB_Buffer buffer,
     88 		      HB_UInt    glyph_index,
     89 		      HB_UInt    properties,
     90 		      HB_UInt    cluster );
     91 
     92 HB_END_HEADER
     93 
     94 #endif /* HARFBUZZ_BUFFER_H */
     95