12e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod/* 22e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * Copyright © 2009 Red Hat, Inc. 32e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * Copyright © 2011 Google, Inc. 42e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * 52e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 62e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * 72e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * Permission is hereby granted, without written agreement and without 82e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 92e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * software and its documentation for any purpose, provided that the 102e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * above copyright notice and the following two paragraphs appear in 112e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * all copies of this software. 122e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * 132e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 142e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 152e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 162e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 172e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * DAMAGE. 182e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * 192e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 202e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 212e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 222e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 232e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 242e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * 252e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * Red Hat Author(s): Behdad Esfahbod 262e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * Google Author(s): Behdad Esfahbod 272e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod */ 282e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 292e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#ifndef HB_FACE_PRIVATE_HH 302e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#define HB_FACE_PRIVATE_HH 312e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 322e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#include "hb-private.hh" 332e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 342e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#include "hb-object-private.hh" 352e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#include "hb-shaper-private.hh" 362e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#include "hb-shape-plan-private.hh" 372e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 382e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 392e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod/* 402e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod * hb_face_t 412e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod */ 422e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 432e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbodstruct hb_face_t { 442e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_object_header_t header; 452e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod ASSERT_POD (); 462e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 472e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_bool_t immutable; 482e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 492e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_reference_table_func_t reference_table_func; 502e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod void *user_data; 512e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_destroy_func_t destroy; 522e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 532e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod unsigned int index; 542e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod mutable unsigned int upem; 552e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod mutable unsigned int num_glyphs; 562e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 572e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod struct hb_shaper_data_t shaper_data; 582e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 592e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod struct plan_node_t { 602e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_shape_plan_t *shape_plan; 612e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod plan_node_t *next; 622e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod } *shape_plans; 632e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 642e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 652e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod inline hb_blob_t *reference_table (hb_tag_t tag) const 662e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod { 672e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod hb_blob_t *blob; 682e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 692e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod if (unlikely (!this || !reference_table_func)) 702e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod return hb_blob_get_empty (); 712e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 722e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod blob = reference_table_func (/*XXX*/const_cast<hb_face_t *> (this), tag, user_data); 732e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod if (unlikely (!blob)) 742e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod return hb_blob_get_empty (); 752e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 762e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod return blob; 772e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod } 782e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 792e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod inline HB_PURE_FUNC unsigned int get_upem (void) const 802e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod { 812e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod if (unlikely (!upem)) 822e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod load_upem (); 832e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod return upem; 842e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod } 852e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 862e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod inline unsigned int get_num_glyphs (void) const 872e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod { 882e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod if (unlikely (num_glyphs == (unsigned int) -1)) 892e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod load_num_glyphs (); 902e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod return num_glyphs; 912e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod } 922e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 932e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod private: 942e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod HB_INTERNAL void load_upem (void) const; 952e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod HB_INTERNAL void load_num_glyphs (void) const; 962e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod}; 972e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 982e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbodextern HB_INTERNAL const hb_face_t _hb_face_nil; 992e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 1002e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS 1012e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, face); 1022e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#include "hb-shaper-list.hh" 1032e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#undef HB_SHAPER_IMPLEMENT 1042e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#undef HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS 1052e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 1062e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod 1072e3a07abdf97b0ad2105c3a52f3ff0e0b60b29c4Behdad Esfahbod#endif /* HB_FACE_PRIVATE_HH */ 108