1*2d1272b8SAndroid Build Coastguard Worker /*
2*2d1272b8SAndroid Build Coastguard Worker * Copyright © 2007,2008,2009,2010 Red Hat, Inc.
3*2d1272b8SAndroid Build Coastguard Worker * Copyright © 2010,2012,2013 Google, Inc.
4*2d1272b8SAndroid Build Coastguard Worker *
5*2d1272b8SAndroid Build Coastguard Worker * This is part of HarfBuzz, a text shaping library.
6*2d1272b8SAndroid Build Coastguard Worker *
7*2d1272b8SAndroid Build Coastguard Worker * Permission is hereby granted, without written agreement and without
8*2d1272b8SAndroid Build Coastguard Worker * license or royalty fees, to use, copy, modify, and distribute this
9*2d1272b8SAndroid Build Coastguard Worker * software and its documentation for any purpose, provided that the
10*2d1272b8SAndroid Build Coastguard Worker * above copyright notice and the following two paragraphs appear in
11*2d1272b8SAndroid Build Coastguard Worker * all copies of this software.
12*2d1272b8SAndroid Build Coastguard Worker *
13*2d1272b8SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14*2d1272b8SAndroid Build Coastguard Worker * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15*2d1272b8SAndroid Build Coastguard Worker * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16*2d1272b8SAndroid Build Coastguard Worker * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17*2d1272b8SAndroid Build Coastguard Worker * DAMAGE.
18*2d1272b8SAndroid Build Coastguard Worker *
19*2d1272b8SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20*2d1272b8SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21*2d1272b8SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22*2d1272b8SAndroid Build Coastguard Worker * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23*2d1272b8SAndroid Build Coastguard Worker * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24*2d1272b8SAndroid Build Coastguard Worker *
25*2d1272b8SAndroid Build Coastguard Worker * Red Hat Author(s): Behdad Esfahbod
26*2d1272b8SAndroid Build Coastguard Worker * Google Author(s): Behdad Esfahbod
27*2d1272b8SAndroid Build Coastguard Worker */
28*2d1272b8SAndroid Build Coastguard Worker
29*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_OT_LAYOUT_GPOS_TABLE_HH
30*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_GPOS_TABLE_HH
31*2d1272b8SAndroid Build Coastguard Worker
32*2d1272b8SAndroid Build Coastguard Worker #include "OT/Layout/GPOS/GPOS.hh"
33*2d1272b8SAndroid Build Coastguard Worker
34*2d1272b8SAndroid Build Coastguard Worker namespace OT {
35*2d1272b8SAndroid Build Coastguard Worker namespace Layout {
36*2d1272b8SAndroid Build Coastguard Worker namespace GPOS_impl {
37*2d1272b8SAndroid Build Coastguard Worker
38*2d1272b8SAndroid Build Coastguard Worker // TODO(garretrieger): Move into new layout directory.
39*2d1272b8SAndroid Build Coastguard Worker /* Out-of-class implementation for methods recursing */
40*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_NO_OT_LAYOUT
41*2d1272b8SAndroid Build Coastguard Worker template <typename context_t>
dispatch_recurse_func(context_t * c,unsigned int lookup_index)42*2d1272b8SAndroid Build Coastguard Worker /*static*/ typename context_t::return_t PosLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
43*2d1272b8SAndroid Build Coastguard Worker {
44*2d1272b8SAndroid Build Coastguard Worker const PosLookup &l = c->face->table.GPOS.get_relaxed ()->table->get_lookup (lookup_index);
45*2d1272b8SAndroid Build Coastguard Worker return l.dispatch (c);
46*2d1272b8SAndroid Build Coastguard Worker }
47*2d1272b8SAndroid Build Coastguard Worker
48*2d1272b8SAndroid Build Coastguard Worker template <>
49*2d1272b8SAndroid Build Coastguard Worker inline hb_closure_lookups_context_t::return_t
dispatch_recurse_func(hb_closure_lookups_context_t * c,unsigned this_index)50*2d1272b8SAndroid Build Coastguard Worker PosLookup::dispatch_recurse_func<hb_closure_lookups_context_t> (hb_closure_lookups_context_t *c, unsigned this_index)
51*2d1272b8SAndroid Build Coastguard Worker {
52*2d1272b8SAndroid Build Coastguard Worker const PosLookup &l = c->face->table.GPOS.get_relaxed ()->table->get_lookup (this_index);
53*2d1272b8SAndroid Build Coastguard Worker return l.closure_lookups (c, this_index);
54*2d1272b8SAndroid Build Coastguard Worker }
55*2d1272b8SAndroid Build Coastguard Worker
56*2d1272b8SAndroid Build Coastguard Worker template <>
dispatch_recurse_func(hb_ot_apply_context_t * c,unsigned int lookup_index)57*2d1272b8SAndroid Build Coastguard Worker inline bool PosLookup::dispatch_recurse_func<hb_ot_apply_context_t> (hb_ot_apply_context_t *c, unsigned int lookup_index)
58*2d1272b8SAndroid Build Coastguard Worker {
59*2d1272b8SAndroid Build Coastguard Worker auto *gpos = c->face->table.GPOS.get_relaxed ();
60*2d1272b8SAndroid Build Coastguard Worker const PosLookup &l = gpos->table->get_lookup (lookup_index);
61*2d1272b8SAndroid Build Coastguard Worker unsigned int saved_lookup_props = c->lookup_props;
62*2d1272b8SAndroid Build Coastguard Worker unsigned int saved_lookup_index = c->lookup_index;
63*2d1272b8SAndroid Build Coastguard Worker c->set_lookup_index (lookup_index);
64*2d1272b8SAndroid Build Coastguard Worker c->set_lookup_props (l.get_props ());
65*2d1272b8SAndroid Build Coastguard Worker
66*2d1272b8SAndroid Build Coastguard Worker bool ret = false;
67*2d1272b8SAndroid Build Coastguard Worker auto *accel = gpos->get_accel (lookup_index);
68*2d1272b8SAndroid Build Coastguard Worker ret = accel && accel->apply (c, l.get_subtable_count (), false);
69*2d1272b8SAndroid Build Coastguard Worker
70*2d1272b8SAndroid Build Coastguard Worker c->set_lookup_index (saved_lookup_index);
71*2d1272b8SAndroid Build Coastguard Worker c->set_lookup_props (saved_lookup_props);
72*2d1272b8SAndroid Build Coastguard Worker return ret;
73*2d1272b8SAndroid Build Coastguard Worker }
74*2d1272b8SAndroid Build Coastguard Worker #endif
75*2d1272b8SAndroid Build Coastguard Worker
76*2d1272b8SAndroid Build Coastguard Worker } /* namespace GPOS_impl */
77*2d1272b8SAndroid Build Coastguard Worker } /* namespace Layout */
78*2d1272b8SAndroid Build Coastguard Worker } /* namespace OT */
79*2d1272b8SAndroid Build Coastguard Worker
80*2d1272b8SAndroid Build Coastguard Worker
81*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */
82