17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Copyright © 1998-2004 David Turner and Werner Lemberg 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Copyright © 2004,2007,2009 Red Hat, Inc. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Copyright © 2011,2012 Google, Inc. 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * This is part of HarfBuzz, a text shaping library. 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * Permission is hereby granted, without written agreement and without 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * software and its documentation for any purpose, provided that the 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * above copyright notice and the following two paragraphs appear in 12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch * all copies of this software. 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * DAMAGE. 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * Red Hat Author(s): Owen Taylor, Behdad Esfahbod 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) * Google Author(s): Behdad Esfahbod 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) */ 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#ifndef HB_H_IN 316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#error "Include <hb.h> instead." 326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#ifndef HB_BUFFER_H 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#define HB_BUFFER_H 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "hb-common.h" 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "hb-unicode.h" 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "hb-font.h" 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)HB_BEGIN_DECLS 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef struct hb_glyph_info_t { 456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_codepoint_t codepoint; 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_mask_t mask; 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) uint32_t cluster; 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) /*< private >*/ 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_var_int_t var1; 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_var_int_t var2; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} hb_glyph_info_t; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef struct hb_glyph_position_t { 556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_position_t x_advance; 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_position_t y_advance; 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_position_t x_offset; 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_position_t y_offset; 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) /*< private >*/ 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_var_int_t var; 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} hb_glyph_position_t; 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef struct hb_segment_properties_t { 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_direction_t direction; 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_script_t script; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch hb_language_t language; 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /*< private >*/ 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void *reserved1; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void *reserved2; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} hb_segment_properties_t; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, \ 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HB_SCRIPT_INVALID, \ 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HB_LANGUAGE_INVALID, \ 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NULL, \ 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NULL} 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_bool_t 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_segment_properties_equal (const hb_segment_properties_t *a, 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const hb_segment_properties_t *b); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochunsigned int 85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_segment_properties_hash (const hb_segment_properties_t *p); 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * hb_buffer_t 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)typedef struct hb_buffer_t hb_buffer_t; 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_t * 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_create (void); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_t * 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)hb_buffer_get_empty (void); 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_t * 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_reference (hb_buffer_t *buffer); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochhb_buffer_destroy (hb_buffer_t *buffer); 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_bool_t 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_set_user_data (hb_buffer_t *buffer, 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_user_data_key_t *key, 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void * data, 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_destroy_func_t destroy, 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_bool_t replace); 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void * 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_get_user_data (hb_buffer_t *buffer, 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_user_data_key_t *key); 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)typedef enum { 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HB_BUFFER_CONTENT_TYPE_INVALID = 0, 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HB_BUFFER_CONTENT_TYPE_UNICODE, 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HB_BUFFER_CONTENT_TYPE_GLYPHS 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} hb_buffer_content_type_t; 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void 1266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_set_content_type (hb_buffer_t *buffer, 1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_buffer_content_type_t content_type); 1286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_content_type_t 1306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_get_content_type (hb_buffer_t *buffer); 1316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void 1346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_set_unicode_funcs (hb_buffer_t *buffer, 1356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_unicode_funcs_t *unicode_funcs); 1366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_unicode_funcs_t * 1386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_get_unicode_funcs (hb_buffer_t *buffer); 1396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void 1416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_set_direction (hb_buffer_t *buffer, 1426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_direction_t direction); 1436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_direction_t 1456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_get_direction (hb_buffer_t *buffer); 1466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void 1486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)hb_buffer_set_script (hb_buffer_t *buffer, 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) hb_script_t script); 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_script_t 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_get_script (hb_buffer_t *buffer); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_set_language (hb_buffer_t *buffer, 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) hb_language_t language); 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_language_t 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_get_language (hb_buffer_t *buffer); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_set_segment_properties (hb_buffer_t *buffer, 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const hb_segment_properties_t *props); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_get_segment_properties (hb_buffer_t *buffer, 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) hb_segment_properties_t *props); 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_guess_segment_properties (hb_buffer_t *buffer); 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef enum { /*< flags >*/ 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_BUFFER_FLAG_DEFAULT = 0x00000000u, 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_BUFFER_FLAG_BOT = 0x00000001u, /* Beginning-of-text */ 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_BUFFER_FLAG_EOT = 0x00000002u, /* End-of-text */ 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} hb_buffer_flags_t; 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)hb_buffer_set_flags (hb_buffer_t *buffer, 1836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) hb_buffer_flags_t flags); 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_flags_t 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_get_flags (hb_buffer_t *buffer); 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Sets codepoint used to replace invalid UTF-8/16/32 entries. 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * Default is 0xFFFDu. */ 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void 1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)hb_buffer_set_replacement_codepoint (hb_buffer_t *buffer, 1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) hb_codepoint_t replacement); 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)hb_codepoint_t 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)hb_buffer_get_replacement_codepoint (hb_buffer_t *buffer); 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* Resets the buffer. Afterwards it's as if it was just created, 2038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * except that it has a larger buffer allocated perhaps... */ 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_reset (hb_buffer_t *buffer); 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Like reset, but does NOT clear unicode_funcs and replacement_codepoint. */ 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_clear_contents (hb_buffer_t *buffer); 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* Returns false if allocation failed */ 212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_bool_t 213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_buffer_pre_allocate (hb_buffer_t *buffer, 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int size); 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Returns false if allocation has failed before */ 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_bool_t 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_allocation_successful (hb_buffer_t *buffer); 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)hb_buffer_reverse (hb_buffer_t *buffer); 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)hb_buffer_reverse_clusters (hb_buffer_t *buffer); 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Filling the buffer in */ 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_add (hb_buffer_t *buffer, 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hb_codepoint_t codepoint, 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) unsigned int cluster); 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_add_utf8 (hb_buffer_t *buffer, 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const char *text, 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int text_length, 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned int item_offset, 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int item_length); 241ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void 243ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_buffer_add_utf16 (hb_buffer_t *buffer, 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const uint16_t *text, 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int text_length, 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) unsigned int item_offset, 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int item_length); 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)hb_buffer_add_utf32 (hb_buffer_t *buffer, 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const uint32_t *text, 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int text_length, 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned int item_offset, 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int item_length); 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Like add_utf32 but does NOT check for invalid Unicode codepoints. */ 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_add_codepoints (hb_buffer_t *buffer, 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const hb_codepoint_t *text, 260ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int text_length, 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned int item_offset, 262ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int item_length); 263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 264ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 265ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* Clears any new items added at the end */ 266ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_bool_t 267ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_buffer_set_length (hb_buffer_t *buffer, 268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch unsigned int length); 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 270ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* Return value valid as long as buffer not modified */ 271ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochunsigned int 272ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_buffer_get_length (hb_buffer_t *buffer); 273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 274ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* Getting glyphs out of the buffer */ 2757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* Return value valid as long as buffer not modified */ 277ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochhb_glyph_info_t * 2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhb_buffer_get_glyph_infos (hb_buffer_t *buffer, 2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned int *length); 280bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Return value valid as long as buffer not modified */ 282bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochhb_glyph_position_t * 2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_get_glyph_positions (hb_buffer_t *buffer, 2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) unsigned int *length); 285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* Reorders a glyph buffer to have canonical in-cluster glyph order / position. 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The resulting clusters should behave identical to pre-reordering clusters. 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * NOTE: This has nothing to do with Unicode normalization. */ 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void 2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)hb_buffer_normalize_glyphs (hb_buffer_t *buffer); 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)/* 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Serialize 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 297effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 298effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtypedef enum { /*< flags >*/ 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u, 300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u, 301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u, 302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} hb_buffer_serialize_flags_t; 304 305typedef enum { 306 HB_BUFFER_SERIALIZE_FORMAT_TEXT = HB_TAG('T','E','X','T'), 307 HB_BUFFER_SERIALIZE_FORMAT_JSON = HB_TAG('J','S','O','N'), 308 HB_BUFFER_SERIALIZE_FORMAT_INVALID = HB_TAG_NONE 309} hb_buffer_serialize_format_t; 310 311/* len=-1 means str is NUL-terminated. */ 312hb_buffer_serialize_format_t 313hb_buffer_serialize_format_from_string (const char *str, int len); 314 315const char * 316hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format); 317 318const char ** 319hb_buffer_serialize_list_formats (void); 320 321/* Returns number of items, starting at start, that were serialized. */ 322unsigned int 323hb_buffer_serialize_glyphs (hb_buffer_t *buffer, 324 unsigned int start, 325 unsigned int end, 326 char *buf, 327 unsigned int buf_size, 328 unsigned int *buf_consumed, /* May be NULL */ 329 hb_font_t *font, /* May be NULL */ 330 hb_buffer_serialize_format_t format, 331 hb_buffer_serialize_flags_t flags); 332 333hb_bool_t 334hb_buffer_deserialize_glyphs (hb_buffer_t *buffer, 335 const char *buf, 336 int buf_len, /* -1 means nul-terminated */ 337 const char **end_ptr, /* May be NULL */ 338 hb_font_t *font, /* May be NULL */ 339 hb_buffer_serialize_format_t format); 340 341 342HB_END_DECLS 343 344#endif /* HB_BUFFER_H */ 345