1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/harfbuzz/src/hb-buffer.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,323 @@ 1.4 +/* 1.5 + * Copyright © 1998-2004 David Turner and Werner Lemberg 1.6 + * Copyright © 2004,2007,2009 Red Hat, Inc. 1.7 + * Copyright © 2011,2012 Google, Inc. 1.8 + * 1.9 + * This is part of HarfBuzz, a text shaping library. 1.10 + * 1.11 + * Permission is hereby granted, without written agreement and without 1.12 + * license or royalty fees, to use, copy, modify, and distribute this 1.13 + * software and its documentation for any purpose, provided that the 1.14 + * above copyright notice and the following two paragraphs appear in 1.15 + * all copies of this software. 1.16 + * 1.17 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 1.18 + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 1.19 + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 1.20 + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 1.21 + * DAMAGE. 1.22 + * 1.23 + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 1.24 + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 1.25 + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 1.26 + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 1.27 + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 1.28 + * 1.29 + * Red Hat Author(s): Owen Taylor, Behdad Esfahbod 1.30 + * Google Author(s): Behdad Esfahbod 1.31 + */ 1.32 + 1.33 +#ifndef HB_H_IN 1.34 +#error "Include <hb.h> instead." 1.35 +#endif 1.36 + 1.37 +#ifndef HB_BUFFER_H 1.38 +#define HB_BUFFER_H 1.39 + 1.40 +#include "hb-common.h" 1.41 +#include "hb-unicode.h" 1.42 +#include "hb-font.h" 1.43 + 1.44 +HB_BEGIN_DECLS 1.45 + 1.46 + 1.47 +typedef struct hb_glyph_info_t { 1.48 + hb_codepoint_t codepoint; 1.49 + hb_mask_t mask; 1.50 + uint32_t cluster; 1.51 + 1.52 + /*< private >*/ 1.53 + hb_var_int_t var1; 1.54 + hb_var_int_t var2; 1.55 +} hb_glyph_info_t; 1.56 + 1.57 +typedef struct hb_glyph_position_t { 1.58 + hb_position_t x_advance; 1.59 + hb_position_t y_advance; 1.60 + hb_position_t x_offset; 1.61 + hb_position_t y_offset; 1.62 + 1.63 + /*< private >*/ 1.64 + hb_var_int_t var; 1.65 +} hb_glyph_position_t; 1.66 + 1.67 + 1.68 +typedef struct hb_segment_properties_t { 1.69 + hb_direction_t direction; 1.70 + hb_script_t script; 1.71 + hb_language_t language; 1.72 + /*< private >*/ 1.73 + void *reserved1; 1.74 + void *reserved2; 1.75 +} hb_segment_properties_t; 1.76 + 1.77 +#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, \ 1.78 + HB_SCRIPT_INVALID, \ 1.79 + HB_LANGUAGE_INVALID, \ 1.80 + NULL, \ 1.81 + NULL} 1.82 + 1.83 +hb_bool_t 1.84 +hb_segment_properties_equal (const hb_segment_properties_t *a, 1.85 + const hb_segment_properties_t *b); 1.86 + 1.87 +unsigned int 1.88 +hb_segment_properties_hash (const hb_segment_properties_t *p); 1.89 + 1.90 + 1.91 + 1.92 +/* 1.93 + * hb_buffer_t 1.94 + */ 1.95 + 1.96 +typedef struct hb_buffer_t hb_buffer_t; 1.97 + 1.98 +hb_buffer_t * 1.99 +hb_buffer_create (void); 1.100 + 1.101 +hb_buffer_t * 1.102 +hb_buffer_get_empty (void); 1.103 + 1.104 +hb_buffer_t * 1.105 +hb_buffer_reference (hb_buffer_t *buffer); 1.106 + 1.107 +void 1.108 +hb_buffer_destroy (hb_buffer_t *buffer); 1.109 + 1.110 +hb_bool_t 1.111 +hb_buffer_set_user_data (hb_buffer_t *buffer, 1.112 + hb_user_data_key_t *key, 1.113 + void * data, 1.114 + hb_destroy_func_t destroy, 1.115 + hb_bool_t replace); 1.116 + 1.117 +void * 1.118 +hb_buffer_get_user_data (hb_buffer_t *buffer, 1.119 + hb_user_data_key_t *key); 1.120 + 1.121 + 1.122 +typedef enum { 1.123 + HB_BUFFER_CONTENT_TYPE_INVALID = 0, 1.124 + HB_BUFFER_CONTENT_TYPE_UNICODE, 1.125 + HB_BUFFER_CONTENT_TYPE_GLYPHS 1.126 +} hb_buffer_content_type_t; 1.127 + 1.128 +void 1.129 +hb_buffer_set_content_type (hb_buffer_t *buffer, 1.130 + hb_buffer_content_type_t content_type); 1.131 + 1.132 +hb_buffer_content_type_t 1.133 +hb_buffer_get_content_type (hb_buffer_t *buffer); 1.134 + 1.135 + 1.136 +void 1.137 +hb_buffer_set_unicode_funcs (hb_buffer_t *buffer, 1.138 + hb_unicode_funcs_t *unicode_funcs); 1.139 + 1.140 +hb_unicode_funcs_t * 1.141 +hb_buffer_get_unicode_funcs (hb_buffer_t *buffer); 1.142 + 1.143 +void 1.144 +hb_buffer_set_direction (hb_buffer_t *buffer, 1.145 + hb_direction_t direction); 1.146 + 1.147 +hb_direction_t 1.148 +hb_buffer_get_direction (hb_buffer_t *buffer); 1.149 + 1.150 +void 1.151 +hb_buffer_set_script (hb_buffer_t *buffer, 1.152 + hb_script_t script); 1.153 + 1.154 +hb_script_t 1.155 +hb_buffer_get_script (hb_buffer_t *buffer); 1.156 + 1.157 +void 1.158 +hb_buffer_set_language (hb_buffer_t *buffer, 1.159 + hb_language_t language); 1.160 + 1.161 + 1.162 +hb_language_t 1.163 +hb_buffer_get_language (hb_buffer_t *buffer); 1.164 + 1.165 +void 1.166 +hb_buffer_set_segment_properties (hb_buffer_t *buffer, 1.167 + const hb_segment_properties_t *props); 1.168 + 1.169 +void 1.170 +hb_buffer_get_segment_properties (hb_buffer_t *buffer, 1.171 + hb_segment_properties_t *props); 1.172 + 1.173 +void 1.174 +hb_buffer_guess_segment_properties (hb_buffer_t *buffer); 1.175 + 1.176 + 1.177 +typedef enum { /*< flags >*/ 1.178 + HB_BUFFER_FLAG_DEFAULT = 0x00000000u, 1.179 + HB_BUFFER_FLAG_BOT = 0x00000001u, /* Beginning-of-text */ 1.180 + HB_BUFFER_FLAG_EOT = 0x00000002u, /* End-of-text */ 1.181 + HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u 1.182 +} hb_buffer_flags_t; 1.183 + 1.184 +void 1.185 +hb_buffer_set_flags (hb_buffer_t *buffer, 1.186 + hb_buffer_flags_t flags); 1.187 + 1.188 +hb_buffer_flags_t 1.189 +hb_buffer_get_flags (hb_buffer_t *buffer); 1.190 + 1.191 + 1.192 +/* Resets the buffer. Afterwards it's as if it was just created, 1.193 + * except that it has a larger buffer allocated perhaps... */ 1.194 +void 1.195 +hb_buffer_reset (hb_buffer_t *buffer); 1.196 + 1.197 +/* Like reset, but does NOT clear unicode_funcs. */ 1.198 +void 1.199 +hb_buffer_clear_contents (hb_buffer_t *buffer); 1.200 + 1.201 +/* Returns false if allocation failed */ 1.202 +hb_bool_t 1.203 +hb_buffer_pre_allocate (hb_buffer_t *buffer, 1.204 + unsigned int size); 1.205 + 1.206 + 1.207 +/* Returns false if allocation has failed before */ 1.208 +hb_bool_t 1.209 +hb_buffer_allocation_successful (hb_buffer_t *buffer); 1.210 + 1.211 +void 1.212 +hb_buffer_reverse (hb_buffer_t *buffer); 1.213 + 1.214 +void 1.215 +hb_buffer_reverse_clusters (hb_buffer_t *buffer); 1.216 + 1.217 + 1.218 +/* Filling the buffer in */ 1.219 + 1.220 +void 1.221 +hb_buffer_add (hb_buffer_t *buffer, 1.222 + hb_codepoint_t codepoint, 1.223 + unsigned int cluster); 1.224 + 1.225 +void 1.226 +hb_buffer_add_utf8 (hb_buffer_t *buffer, 1.227 + const char *text, 1.228 + int text_length, 1.229 + unsigned int item_offset, 1.230 + int item_length); 1.231 + 1.232 +void 1.233 +hb_buffer_add_utf16 (hb_buffer_t *buffer, 1.234 + const uint16_t *text, 1.235 + int text_length, 1.236 + unsigned int item_offset, 1.237 + int item_length); 1.238 + 1.239 +void 1.240 +hb_buffer_add_utf32 (hb_buffer_t *buffer, 1.241 + const uint32_t *text, 1.242 + int text_length, 1.243 + unsigned int item_offset, 1.244 + int item_length); 1.245 + 1.246 + 1.247 +/* Clears any new items added at the end */ 1.248 +hb_bool_t 1.249 +hb_buffer_set_length (hb_buffer_t *buffer, 1.250 + unsigned int length); 1.251 + 1.252 +/* Return value valid as long as buffer not modified */ 1.253 +unsigned int 1.254 +hb_buffer_get_length (hb_buffer_t *buffer); 1.255 + 1.256 +/* Getting glyphs out of the buffer */ 1.257 + 1.258 +/* Return value valid as long as buffer not modified */ 1.259 +hb_glyph_info_t * 1.260 +hb_buffer_get_glyph_infos (hb_buffer_t *buffer, 1.261 + unsigned int *length); 1.262 + 1.263 +/* Return value valid as long as buffer not modified */ 1.264 +hb_glyph_position_t * 1.265 +hb_buffer_get_glyph_positions (hb_buffer_t *buffer, 1.266 + unsigned int *length); 1.267 + 1.268 + 1.269 +/* Reorders a glyph buffer to have canonical in-cluster glyph order / position. 1.270 + * The resulting clusters should behave identical to pre-reordering clusters. 1.271 + * NOTE: This has nothing to do with Unicode normalization. */ 1.272 +void 1.273 +hb_buffer_normalize_glyphs (hb_buffer_t *buffer); 1.274 + 1.275 + 1.276 +/* 1.277 + * Serialize 1.278 + */ 1.279 + 1.280 +typedef enum { /*< flags >*/ 1.281 + HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u, 1.282 + HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u, 1.283 + HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u, 1.284 + HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u 1.285 +} hb_buffer_serialize_flags_t; 1.286 + 1.287 +typedef enum { 1.288 + HB_BUFFER_SERIALIZE_FORMAT_TEXT = HB_TAG('T','E','X','T'), 1.289 + HB_BUFFER_SERIALIZE_FORMAT_JSON = HB_TAG('J','S','O','N'), 1.290 + HB_BUFFER_SERIALIZE_FORMAT_INVALID = HB_TAG_NONE 1.291 +} hb_buffer_serialize_format_t; 1.292 + 1.293 +/* len=-1 means str is NUL-terminated. */ 1.294 +hb_buffer_serialize_format_t 1.295 +hb_buffer_serialize_format_from_string (const char *str, int len); 1.296 + 1.297 +const char * 1.298 +hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format); 1.299 + 1.300 +const char ** 1.301 +hb_buffer_serialize_list_formats (void); 1.302 + 1.303 +/* Returns number of items, starting at start, that were serialized. */ 1.304 +unsigned int 1.305 +hb_buffer_serialize_glyphs (hb_buffer_t *buffer, 1.306 + unsigned int start, 1.307 + unsigned int end, 1.308 + char *buf, 1.309 + unsigned int buf_size, 1.310 + unsigned int *buf_consumed, /* May be NULL */ 1.311 + hb_font_t *font, /* May be NULL */ 1.312 + hb_buffer_serialize_format_t format, 1.313 + hb_buffer_serialize_flags_t flags); 1.314 + 1.315 +hb_bool_t 1.316 +hb_buffer_deserialize_glyphs (hb_buffer_t *buffer, 1.317 + const char *buf, 1.318 + int buf_len, /* -1 means nul-terminated */ 1.319 + const char **end_ptr, /* May be NULL */ 1.320 + hb_font_t *font, /* May be NULL */ 1.321 + hb_buffer_serialize_format_t format); 1.322 + 1.323 + 1.324 +HB_END_DECLS 1.325 + 1.326 +#endif /* HB_BUFFER_H */