15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2007,2008,2009 Red Hat, Inc. 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright © 2012,2013 Google, Inc. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is part of HarfBuzz, a text shaping library. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, without written agreement and without 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * software and its documentation for any purpose, provided that the 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * above copyright notice and the following two paragraphs appear in 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all copies of this software. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGE. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Red Hat Author(s): Behdad Esfahbod 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Google Author(s): Behdad Esfahbod 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HB_OT_LAYOUT_PRIVATE_HH 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_OT_LAYOUT_PRIVATE_HH 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-private.hh" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-font-private.hh" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-buffer-private.hh" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-set-private.hh" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * GDEF 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef enum 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /* The following three match LookupFlags::Ignore* numbers. */ 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH = 0x02u, 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE = 0x04u, 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_MARK = 0x08u, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /* The following are used internally; not derived from GDEF. */ 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED = 0x10u, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_LIGATED = 0x20u, 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED = 0x40u, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED | 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_LIGATED | 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} hb_ot_layout_glyph_class_mask_t; 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * GSUB/GPOS 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL hb_bool_t 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_lookup_would_substitute_fast (hb_face_t *face, 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int lookup_index, 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const hb_codepoint_t *glyphs, 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int glyphs_length, 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_bool_t zero_context); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Should be called before all the substitute_lookup's are done. */ 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_substitute_start (hb_font_t *font, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_buffer_t *buffer); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct hb_ot_layout_lookup_accelerator_t; 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace OT { 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct hb_apply_context_t; 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct SubstLookup; 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_substitute_lookup (OT::hb_apply_context_t *c, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OT::SubstLookup &lookup, 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const hb_ot_layout_lookup_accelerator_t &accel); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Should be called after all the substitute_lookup's are done */ 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_substitute_finish (hb_font_t *font, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_buffer_t *buffer); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Should be called before all the position_lookup's are done. Resets positions to zero. */ 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_position_start (hb_font_t *font, 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_buffer_t *buffer); 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Should be called after all the position_lookup's are done */ 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)hb_ot_layout_position_finish (hb_font_t *font, 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_buffer_t *buffer); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_ot_layout_t 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace OT { 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct GDEF; 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct GSUB; 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct GPOS; 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct hb_ot_layout_lookup_accelerator_t 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template <typename TLookup> 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) inline void init (const TLookup &lookup) 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) digest.init (); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) lookup.add_coverage (&digest); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template <typename TLookup> 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) inline void fini (const TLookup &lookup HB_UNUSED) 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_set_digest_t digest; 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct hb_ot_layout_t 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_blob_t *gdef_blob; 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_blob_t *gsub_blob; 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_blob_t *gpos_blob; 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const struct OT::GDEF *gdef; 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const struct OT::GSUB *gsub; 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const struct OT::GPOS *gpos; 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int gsub_lookup_count; 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int gpos_lookup_count; 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_ot_layout_lookup_accelerator_t *gsub_accels; 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_ot_layout_lookup_accelerator_t *gpos_accels; 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL hb_ot_layout_t * 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_ot_layout_create (hb_face_t *face); 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)HB_INTERNAL void 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_ot_layout_destroy (hb_ot_layout_t *layout); 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define hb_ot_layout_from_face(face) ((hb_ot_layout_t *) face->shaper_data.ot) 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Buffer var routines. 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* buffer var allocations, used during the entire shaping process */ 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define unicode_props0() var2.u8[0] 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define unicode_props1() var2.u8[1] 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* buffer var allocations, used during the GSUB/GPOS processing */ 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define glyph_props() var1.u16[0] /* GDEF glyph properties */ 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define lig_props() var1.u8[2] /* GSUB/GPOS ligature tracking */ 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define syllable() var1.u8[3] /* GSUB/GPOS shaping boundaries */ 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* unicode_props */ 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)enum { 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MASK0_ZWJ = 0x20u, 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MASK0_ZWNJ = 0x40u, 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MASK0_IGNORABLE = 0x80u, 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MASK0_GEN_CAT = 0x1Fu 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /* XXX This shouldn't be inlined, or at least not while is_default_ignorable() is inline. */ 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) | 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (unicode->is_default_ignorable (info->codepoint) ? MASK0_IGNORABLE : 0) | 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (info->codepoint == 0x200Cu ? MASK0_ZWNJ : 0) | 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (info->codepoint == 0x200Du ? MASK0_ZWJ : 0); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->unicode_props1() = unicode->modified_combining_class (info->codepoint); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_general_category (hb_glyph_info_t *info, 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hb_unicode_general_category_t gen_cat) 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->unicode_props0() = (unsigned int) gen_cat | ((info->unicode_props0()) & ~MASK0_GEN_CAT); 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline hb_unicode_general_category_t 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_get_general_category (const hb_glyph_info_t *info) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return (hb_unicode_general_category_t) (info->unicode_props0() & MASK0_GEN_CAT); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int modified_class) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info->unicode_props1() = modified_class; 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline unsigned int 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return info->unicode_props1(); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline hb_bool_t 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->unicode_props0() & MASK0_IGNORABLE); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline hb_bool_t 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_is_zwnj (const hb_glyph_info_t *info) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->unicode_props0() & MASK0_ZWNJ); 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline hb_bool_t 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_hb_glyph_info_is_zwj (const hb_glyph_info_t *info) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->unicode_props0() & MASK0_ZWJ); 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_flip_joiners (hb_glyph_info_t *info) 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->unicode_props0() ^= MASK0_ZWNJ | MASK0_ZWJ; 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* lig_props: aka lig_id / lig_comp 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * When a ligature is formed: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - The ligature glyph and any marks in between all the same newly allocated 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * lig_id, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - The ligature glyph will get lig_num_comps set to the number of components 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - The marks get lig_comp > 0, reflecting which component of the ligature 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * they were applied to. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - This is used in GPOS to attach marks to the right component of a ligature 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * in MarkLigPos, 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - Note that when marks are ligated together, much of the above is skipped 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * and the current lig_id reused. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * When a multiple-substitution is done: 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - All resulting glyphs will have lig_id = 0, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - The resulting glyphs will have lig_comp = 0, 1, 2, ... respectively. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - This is used in GPOS to attach marks to the first component of a 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * multiple substitution in MarkBasePos. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The numbers are also used in GPOS to do mark-to-mark positioning only 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * to marks that belong to the same component of the same ligature. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static inline void 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_clear_lig_props (hb_glyph_info_t *info) 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->lig_props() = 0; 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IS_LIG_BASE 0x10 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline void 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_lig_props_for_ligature (hb_glyph_info_t *info, 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int lig_id, 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int lig_num_comps) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->lig_props() = (lig_id << 5) | IS_LIG_BASE | (lig_num_comps & 0x0F); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline void 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_lig_props_for_mark (hb_glyph_info_t *info, 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int lig_id, 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned int lig_comp) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->lig_props() = (lig_id << 5) | (lig_comp & 0x0F); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline void 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_lig_props_for_component (hb_glyph_info_t *info, unsigned int comp) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) _hb_glyph_info_set_lig_props_for_mark (info, 0, comp); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline unsigned int 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_get_lig_id (const hb_glyph_info_t *info) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return info->lig_props() >> 5; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline bool 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_ligated_internal (const hb_glyph_info_t *info) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->lig_props() & IS_LIG_BASE); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline unsigned int 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_get_lig_comp (const hb_glyph_info_t *info) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (_hb_glyph_info_ligated_internal (info)) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return info->lig_props() & 0x0F; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline unsigned int 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_get_lig_num_comps (const hb_glyph_info_t *info) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if ((info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) && 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) _hb_glyph_info_ligated_internal (info)) 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return info->lig_props() & 0x0F; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static inline uint8_t 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_allocate_lig_id (hb_buffer_t *buffer) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint8_t lig_id = buffer->next_serial () & 0x07; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (unlikely (!lig_id)) 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) lig_id = _hb_allocate_lig_id (buffer); /* in case of overflow */ 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lig_id; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* glyph_props: */ 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_set_glyph_props (hb_glyph_info_t *info, unsigned int props) 346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) info->glyph_props() = props; 348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline unsigned int 351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_get_glyph_props (const hb_glyph_info_t *info) 352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return info->glyph_props(); 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline bool 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_is_base_glyph (const hb_glyph_info_t *info) 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH); 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline bool 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_is_ligature (const hb_glyph_info_t *info) 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE); 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline bool 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_is_mark (const hb_glyph_info_t *info) 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static inline bool 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_substituted (const hb_glyph_info_t *info) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED); 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static inline bool 381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_glyph_info_ligated (const hb_glyph_info_t *info) 382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED); 384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline bool 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)_hb_glyph_info_multiplied (const hb_glyph_info_t *info) 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED); 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline bool 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)_hb_glyph_info_ligated_and_didnt_multiply (const hb_glyph_info_t *info) 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return _hb_glyph_info_ligated (info) && !_hb_glyph_info_multiplied (info); 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)_hb_glyph_info_clear_ligated_and_multiplied (hb_glyph_info_t *info) 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_LIGATED | 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED); 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Allocation / deallocation. */ 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_buffer_allocate_unicode_vars (hb_buffer_t *buffer) 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props0); 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props1); 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_buffer_deallocate_unicode_vars (hb_buffer_t *buffer) 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props0); 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props1); 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 42303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)_hb_buffer_assert_unicode_vars (hb_buffer_t *buffer) 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles){ 42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) HB_BUFFER_ASSERT_VAR (buffer, unicode_props0); 42603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) HB_BUFFER_ASSERT_VAR (buffer, unicode_props1); 42703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 42803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 42903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)static inline void 430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_buffer_allocate_gsubgpos_vars (hb_buffer_t *buffer) 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_ALLOCATE_VAR (buffer, glyph_props); 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_ALLOCATE_VAR (buffer, lig_props); 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_ALLOCATE_VAR (buffer, syllable); 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static inline void 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_hb_buffer_deallocate_gsubgpos_vars (hb_buffer_t *buffer) 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_DEALLOCATE_VAR (buffer, syllable); 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props); 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_props); 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)static inline void 44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)_hb_buffer_assert_gsubgpos_vars (hb_buffer_t *buffer) 44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles){ 44803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) HB_BUFFER_ASSERT_VAR (buffer, glyph_props); 44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) HB_BUFFER_ASSERT_VAR (buffer, lig_props); 45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) HB_BUFFER_ASSERT_VAR (buffer, syllable); 45103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 45203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Make sure no one directly touches our props... */ 454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#undef unicode_props0 455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#undef unicode_props1 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#undef lig_props 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#undef glyph_props 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HB_OT_LAYOUT_PRIVATE_HH */ 461