gfx/harfbuzz/src/hb-ot-shape-private.hh

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

michael@0 1 /*
michael@0 2 * Copyright © 2010 Google, Inc.
michael@0 3 *
michael@0 4 * This is part of HarfBuzz, a text shaping library.
michael@0 5 *
michael@0 6 * Permission is hereby granted, without written agreement and without
michael@0 7 * license or royalty fees, to use, copy, modify, and distribute this
michael@0 8 * software and its documentation for any purpose, provided that the
michael@0 9 * above copyright notice and the following two paragraphs appear in
michael@0 10 * all copies of this software.
michael@0 11 *
michael@0 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
michael@0 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
michael@0 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
michael@0 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
michael@0 16 * DAMAGE.
michael@0 17 *
michael@0 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
michael@0 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
michael@0 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
michael@0 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
michael@0 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
michael@0 23 *
michael@0 24 * Google Author(s): Behdad Esfahbod
michael@0 25 */
michael@0 26
michael@0 27 #ifndef HB_OT_SHAPE_PRIVATE_HH
michael@0 28 #define HB_OT_SHAPE_PRIVATE_HH
michael@0 29
michael@0 30 #include "hb-private.hh"
michael@0 31
michael@0 32 #include "hb-ot-map-private.hh"
michael@0 33 #include "hb-ot-layout-private.hh"
michael@0 34
michael@0 35
michael@0 36
michael@0 37 struct hb_ot_shape_plan_t
michael@0 38 {
michael@0 39 hb_segment_properties_t props;
michael@0 40 const struct hb_ot_complex_shaper_t *shaper;
michael@0 41 hb_ot_map_t map;
michael@0 42 const void *data;
michael@0 43 hb_mask_t rtlm_mask, frac_mask, numr_mask, dnom_mask;
michael@0 44 hb_mask_t kern_mask;
michael@0 45 unsigned int has_frac : 1;
michael@0 46 unsigned int has_kern : 1;
michael@0 47
michael@0 48 inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
michael@0 49 {
michael@0 50 unsigned int table_index;
michael@0 51 switch (table_tag) {
michael@0 52 case HB_OT_TAG_GSUB: table_index = 0; break;
michael@0 53 case HB_OT_TAG_GPOS: table_index = 1; break;
michael@0 54 default: return;
michael@0 55 }
michael@0 56 map.collect_lookups (table_index, lookups);
michael@0 57 }
michael@0 58 inline void substitute (hb_font_t *font, hb_buffer_t *buffer) const { map.substitute (this, font, buffer); }
michael@0 59 inline void position (hb_font_t *font, hb_buffer_t *buffer) const { map.position (this, font, buffer); }
michael@0 60
michael@0 61 void finish (void) { map.finish (); }
michael@0 62 };
michael@0 63
michael@0 64 struct hb_ot_shape_planner_t
michael@0 65 {
michael@0 66 /* In the order that they are filled in. */
michael@0 67 hb_face_t *face;
michael@0 68 hb_segment_properties_t props;
michael@0 69 const struct hb_ot_complex_shaper_t *shaper;
michael@0 70 hb_ot_map_builder_t map;
michael@0 71
michael@0 72 hb_ot_shape_planner_t (const hb_shape_plan_t *master_plan) :
michael@0 73 face (master_plan->face_unsafe),
michael@0 74 props (master_plan->props),
michael@0 75 shaper (NULL),
michael@0 76 map (face, &props) {}
michael@0 77 ~hb_ot_shape_planner_t (void) { map.finish (); }
michael@0 78
michael@0 79 inline void compile (hb_ot_shape_plan_t &plan)
michael@0 80 {
michael@0 81 plan.props = props;
michael@0 82 plan.shaper = shaper;
michael@0 83 map.compile (plan.map);
michael@0 84
michael@0 85 plan.rtlm_mask = plan.map.get_1_mask (HB_TAG ('r','t','l','m'));
michael@0 86 plan.frac_mask = plan.map.get_1_mask (HB_TAG ('f','r','a','c'));
michael@0 87 plan.numr_mask = plan.map.get_1_mask (HB_TAG ('n','u','m','r'));
michael@0 88 plan.dnom_mask = plan.map.get_1_mask (HB_TAG ('d','n','o','m'));
michael@0 89
michael@0 90 plan.kern_mask = plan.map.get_mask (HB_DIRECTION_IS_HORIZONTAL (plan.props.direction) ?
michael@0 91 HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
michael@0 92
michael@0 93 plan.has_frac = plan.frac_mask || (plan.numr_mask && plan.dnom_mask);
michael@0 94 plan.has_kern = !!plan.kern_mask;
michael@0 95 }
michael@0 96
michael@0 97 private:
michael@0 98 NO_COPY (hb_ot_shape_planner_t);
michael@0 99 };
michael@0 100
michael@0 101
michael@0 102 #endif /* HB_OT_SHAPE_PRIVATE_HH */

mercurial