hb-buffer.h 2.8 KB
Newer Older
1 2
/*
 * Copyright (C) 1998-2004  David Turner and Werner Lemberg
B
Behdad Esfahbod 已提交
3
 * Copyright (C) 2004,2007,2009  Red Hat, Inc.
4
 *
5
 * This is part of HarfBuzz, an OpenType Layout engine library.
6
 *
7 8 9 10 11
 * Permission is hereby granted, without written agreement and without
 * license or royalty fees, to use, copy, modify, and distribute this
 * software and its documentation for any purpose, provided that the
 * above copyright notice and the following two paragraphs appear in
 * all copies of this software.
12
 *
13 14 15 16 17 18 19 20 21 22 23 24 25
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 *
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 *
 * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
26
 */
27

28 29
#ifndef HB_BUFFER_H
#define HB_BUFFER_H
30

31
#include "hb-common.h"
32

B
Behdad Esfahbod 已提交
33
HB_BEGIN_DECLS
34

B
Behdad Esfahbod 已提交
35 36
/* XXX  Hide structs? */

37
typedef struct HB_GlyphItemRec_ {
38 39 40 41 42 43
  hb_codepoint_t gindex;
  unsigned int   properties;
  unsigned int   cluster;
  unsigned short component;
  unsigned short ligID;
  unsigned short gproperty;
44 45 46
} HB_GlyphItemRec, *HB_GlyphItem;

typedef struct HB_PositionRec_ {
47 48 49 50 51 52 53 54 55 56 57 58 59
  hb_position_t  x_pos;
  hb_position_t  y_pos;
  hb_position_t  x_advance;
  hb_position_t  y_advance;
  unsigned short back;		/* number of glyphs to go back
				   for drawing current glyph   */
  hb_bool_t      new_advance;	/* if set, the advance width values are
				   absolute, i.e., they won't be
				   added to the original glyph's value
				   but rather replace them.            */
  short          cursive_chain; /* character to which this connects,
				   may be positive or negative; used
				   only internally                     */
60 61 62
} HB_PositionRec, *HB_Position;


63 64
typedef struct _hb_buffer_t {
  unsigned int allocated;
65

66 67 68 69
  unsigned int in_length;
  unsigned int out_length;
  unsigned int in_pos;
  unsigned int out_pos;
70

71
  hb_bool_t     separate_out;
72 73
  HB_GlyphItem  in_string;
  HB_GlyphItem  out_string;
74
  HB_GlyphItem  alt_string;
75
  HB_Position   positions;
76 77
  unsigned int  max_ligID;
} HB_BufferRec, *HB_Buffer, hb_buffer_t;
78

79 80
hb_buffer_t *
hb_buffer_new (void);
81

82
void
83
hb_buffer_free (hb_buffer_t *buffer);
84

85
void
86
hb_buffer_clear (hb_buffer_t *buffer);
87

88 89 90 91 92
void
hb_buffer_add_glyph (hb_buffer_t    *buffer,
		     hb_codepoint_t  glyph_index,
		     unsigned int    properties,
		     unsigned int    cluster);
93

B
Behdad Esfahbod 已提交
94
HB_END_DECLS
95

96
#endif /* HB_BUFFER_H */