2
* Copyright (C) 1998-2004 David Turner and Werner Lemberg
3
* Copyright (C) 2004,2007,2009 Red Hat, Inc.
5
* This is part of HarfBuzz, an OpenType Layout engine library.
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.
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
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.
25
* Red Hat Author(s): Owen Taylor, Behdad Esfahbod
31
#include "hb-common.h"
35
typedef struct _hb_buffer_t hb_buffer_t;
37
typedef enum _hb_direction_t {
44
typedef struct _hb_glyph_info_t {
45
hb_codepoint_t codepoint;
52
typedef struct _hb_glyph_position_t {
55
hb_position_t x_advance;
56
hb_position_t y_advance;
57
/* XXX these should all be replaced by "uint32_t internal" */
58
uint32_t new_advance :1; /* if set, the advance width values are
59
absolute, i.e., they won't be
60
added to the original glyph's value
61
but rather replace them */
62
uint32_t back : 15; /* number of glyphs to go back
63
for drawing current glyph */
64
int32_t cursive_chain : 16; /* character to which this connects,
65
may be positive or negative; used
67
} hb_glyph_position_t;
71
hb_buffer_create (unsigned int pre_alloc_size);
74
hb_buffer_reference (hb_buffer_t *buffer);
77
hb_buffer_get_reference_count (hb_buffer_t *buffer);
80
hb_buffer_destroy (hb_buffer_t *buffer);
84
hb_buffer_set_direction (hb_buffer_t *buffer,
85
hb_direction_t direction);
88
hb_buffer_get_direction (hb_buffer_t *buffer);
92
hb_buffer_clear (hb_buffer_t *buffer);
95
hb_buffer_clear_positions (hb_buffer_t *buffer);
98
hb_buffer_ensure (hb_buffer_t *buffer,
102
hb_buffer_reverse (hb_buffer_t *buffer);
105
/* Filling the buffer in */
108
hb_buffer_add_glyph (hb_buffer_t *buffer,
109
hb_codepoint_t codepoint,
111
unsigned int cluster);
114
hb_buffer_add_utf8 (hb_buffer_t *buffer,
116
unsigned int text_length,
117
unsigned int item_offset,
118
unsigned int item_length);
121
hb_buffer_add_utf16 (hb_buffer_t *buffer,
122
const uint16_t *text,
123
unsigned int text_length,
124
unsigned int item_offset,
125
unsigned int item_length);
128
hb_buffer_add_utf32 (hb_buffer_t *buffer,
129
const uint32_t *text,
130
unsigned int text_length,
131
unsigned int item_offset,
132
unsigned int item_length);
135
/* Getting glyphs out of the buffer */
137
/* Return value valid as long as buffer not modified */
139
hb_buffer_get_len (hb_buffer_t *buffer);
141
/* Return value valid as long as buffer not modified */
143
hb_buffer_get_glyph_infos (hb_buffer_t *buffer);
145
/* Return value valid as long as buffer not modified */
146
hb_glyph_position_t *
147
hb_buffer_get_glyph_positions (hb_buffer_t *buffer);
152
#endif /* HB_BUFFER_H */