hb-ot-shape-complex-private.hh revision f91136cb528e298651c4a8a8a1d6dc54136e09ce
149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod/*
2359dcaa0d33271025ca42a5f54ecbac7ae3b56d3Behdad Esfahbod * Copyright © 2010,2011  Google, Inc.
349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * Permission is hereby granted, without written agreement and without
749baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
849baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * software and its documentation for any purpose, provided that the
949baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
1049baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * all copies of this software.
1149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
1249baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
1349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
1449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
1549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
1649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * DAMAGE.
1749baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
1849baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
1949baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
2049baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
2149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
2249baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
2449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * Google Author(s): Behdad Esfahbod
2549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod */
2649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
2749baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod#ifndef HB_OT_SHAPE_COMPLEX_PRIVATE_HH
2849baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod#define HB_OT_SHAPE_COMPLEX_PRIVATE_HH
2949baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
30c57d454accff66e5f2c58006e8fb40bc020b6182Behdad Esfahbod#include "hb-private.hh"
3149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
3276f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod#include "hb-ot-map-private.hh"
3349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
3449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
3549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
36b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod/* buffer var allocations, used during the entire shaping process */
3776f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod#define general_category() var1.u8[0] /* unicode general_category (hb_unicode_general_category_t) */
3876f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod#define combining_class() var1.u8[1] /* unicode combining_class (uint8_t) */
3976f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod
40b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod/* buffer var allocations, used by complex shapers */
41b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_persistent_u8_0()	var2.u8[0]
42b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_persistent_u8_1()	var2.u8[1]
43b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_persistent_u16()	var2.u16[0]
44b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_temporary_u8_0()	var2.u8[2]
45b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_temporary_u8_1()	var2.u8[3]
46b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod#define complex_var_temporary_u16()	var2.u16[1]
47b65c06025d2b54a44f716e030d4b10072c65bea8Behdad Esfahbod
4876f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod
49d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \
50d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPER_IMPLEMENT (default) /* should be first */ \
51d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPER_IMPLEMENT (arabic) \
52d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
53d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  /* ^--- Add new shapers here */
54d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod
5576f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbodenum hb_ot_complex_shaper_t {
56d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) hb_ot_complex_shaper_##name,
57d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
58e8eedf2687f05372bf5476e84139d01ba67c9f73Behdad Esfahbod  /* Just here to avoid enum trailing comma: */
59e8eedf2687f05372bf5476e84139d01ba67c9f73Behdad Esfahbod  hb_ot_complex_shaper_generic = hb_ot_complex_shaper_default
60d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
6176f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod};
6276f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod
6349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbodstatic inline hb_ot_complex_shaper_t
6449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbodhb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
6549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod{
6662879eebd9965179af8602ba29ac0a64a739b757Behdad Esfahbod  switch ((int) props->script)
6762879eebd9965179af8602ba29ac0a64a739b757Behdad Esfahbod  {
68d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod    default:
69d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod      return hb_ot_complex_shaper_default;
70d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod
7149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod    case HB_SCRIPT_ARABIC:
72b0e7378fa9a4fc6fc74d9b3c27d927602eaacc5bBehdad Esfahbod    case HB_SCRIPT_MANDAIC:
73d86a5b3c5752abcc791724035ba4115958e6b5e2Behdad Esfahbod    case HB_SCRIPT_MONGOLIAN:
74b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_NKO:
75b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_SYRIAC:
7649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod      return hb_ot_complex_shaper_arabic;
7749baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
78bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod#if 0
79bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    /* Note:
80bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod     *
81bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod     * These disabled scripts are listed in ucd/IndicSyllabicCategory.txt, but according
82f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod     * to Martin Hosken and Jonathan Kew do not require complex shaping.
83f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod     *
84f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod     * TODO We should automate figuring out which scripts do not need complex shaping
85bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod     *
86bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod     * TODO We currently keep data for these scripts in our indic table.  Need to fix the
87bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod     * generator to not do that.
88b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod     */
89bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod
90bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    /* Simple? */
91b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_BATAK:
92b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_BRAHMI:
93183224684a45d7dcd7d28510d4383a7a7cb3dff3Behdad Esfahbod    case HB_SCRIPT_BUHID:
94bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_HANUNOO:
95bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_MEETEI_MAYEK:
96bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_SAURASHTRA:
97bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod
98bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    /* Simple */
99bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_KAYAH_LI:
100bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_LAO:
101bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_LIMBU:
102bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_PHAGS_PA:
103bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_SYLOTI_NAGRI:
104bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_TAGALOG:
105bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_TAGBANWA:
106bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_TAI_LE:
107bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_TAI_VIET:
108bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_THAI:
109bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_TIBETAN:
110bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod
111bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    /* May need Indic treatment in the future? */
112bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_MYANMAR:
113bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod#endif
114bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod
115bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_BALINESE:
116bc187e5ac7433f5561b0e97e8c62172c73883f3fBehdad Esfahbod    case HB_SCRIPT_BENGALI:
117b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_BUGINESE:
118f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod    case HB_SCRIPT_CHAKMA:
119b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_CHAM:
120b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_DEVANAGARI:
121b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_GUJARATI:
122b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_GURMUKHI:
123b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_JAVANESE:
124b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_KAITHI:
125b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_KANNADA:
126b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_KHAROSHTHI:
127b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_KHMER:
128b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_LEPCHA:
129b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_MALAYALAM:
130b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_NEW_TAI_LUE:
1317a4a848db27d1605195f677c9c8632cde558aa05Behdad Esfahbod    case HB_SCRIPT_ORIYA:
1327a4a848db27d1605195f677c9c8632cde558aa05Behdad Esfahbod    case HB_SCRIPT_REJANG:
133f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod    case HB_SCRIPT_SHARADA:
134b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_SINHALA:
135b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_SUNDANESE:
136b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_TAI_THAM:
137f91136cb528e298651c4a8a8a1d6dc54136e09ceBehdad Esfahbod    case HB_SCRIPT_TAKRI:
138b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_TAMIL:
139b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod    case HB_SCRIPT_TELUGU:
140b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod      return hb_ot_complex_shaper_indic;
141b9ddbd55930228422e82b34a141ad1b6093f5376Behdad Esfahbod
142d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod    /* ^--- Add new shapers here */
14349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod  }
14449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod}
14549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
14649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
14749baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
14849baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod/*
14949baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod * collect_features()
15049baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod *
15113403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod * Called during shape_plan().
15213403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod *
15376f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod * Shapers should use map to add their features and callbacks.
15449baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod */
15549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
15676f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbodtypedef void hb_ot_shape_complex_collect_features_func_t (hb_ot_map_builder_t *map, const hb_segment_properties_t  *props);
157d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
158d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_INTERNAL hb_ot_shape_complex_collect_features_func_t _hb_ot_shape_complex_collect_features_##name;
159d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
160d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
16149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
16249baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbodstatic inline void
16376f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbodhb_ot_shape_complex_collect_features (hb_ot_complex_shaper_t shaper,
16476f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod				      hb_ot_map_builder_t *map,
16549baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod				      const hb_segment_properties_t  *props)
16649baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod{
16776f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod  switch (shaper) {
1683361c9a323575309d9fd55fe076697a3e22073c0Behdad Esfahbod    default:
169d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
17002cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod    case hb_ot_complex_shaper_##name:	_hb_ot_shape_complex_collect_features_##name (map, props); return;
17102cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod    HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
17202cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
17302cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod  }
17402cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod}
17502cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod
17602cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod
17702cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod/*
17802cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod * prefer_decomposed()
17902cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod *
18002cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod * Called during shape_execute().
18102cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod *
18202cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod * Shapers should return TRUE if it prefers decomposed (NFD) input rather than precomposed (NFC).
18302cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod */
18402cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod
18502cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbodtypedef bool hb_ot_shape_complex_prefer_decomposed_func_t (void);
18602cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
18702cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod  HB_INTERNAL hb_ot_shape_complex_prefer_decomposed_func_t _hb_ot_shape_complex_prefer_decomposed_##name;
18802cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod  HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
18902cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
19002cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod
19102cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbodstatic inline bool
19202cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbodhb_ot_shape_complex_prefer_decomposed (hb_ot_complex_shaper_t shaper)
19302cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod{
19402cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod  switch (shaper) {
19502cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod    default:
19602cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
19702cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod    case hb_ot_complex_shaper_##name:	return _hb_ot_shape_complex_prefer_decomposed_##name ();
198d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod    HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
199d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
20049baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod  }
20149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod}
20249baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
20349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
20413403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod/* setup_masks()
20513403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod *
20613403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod * Called during shape_execute().
20713403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod *
20876f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod * Shapers should use map to get feature masks and set on buffer.
20913403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod */
21013403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod
21176f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbodtypedef void hb_ot_shape_complex_setup_masks_func_t (hb_ot_map_t *map, hb_buffer_t *buffer);
212d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
213d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_INTERNAL hb_ot_shape_complex_setup_masks_func_t _hb_ot_shape_complex_setup_masks_##name;
214d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod  HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
215d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
21613403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod
21713403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbodstatic inline void
21876f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbodhb_ot_shape_complex_setup_masks (hb_ot_complex_shaper_t shaper,
21976f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod				 hb_ot_map_t *map,
22076f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod				 hb_buffer_t *buffer)
22113403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod{
22276f76812ac7cca8ac6935952a2360d5e151480faBehdad Esfahbod  switch (shaper) {
2233361c9a323575309d9fd55fe076697a3e22073c0Behdad Esfahbod    default:
224d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
22502cdf743c2ec345a44d4fcf865594b6ac13fccd0Behdad Esfahbod    case hb_ot_complex_shaper_##name:	_hb_ot_shape_complex_setup_masks_##name (map, buffer); return;
226d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod    HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
227d05dded1676924e8894c90f7a7c3527b492bcdffBehdad Esfahbod#undef HB_COMPLEX_SHAPER_IMPLEMENT
22813403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod  }
22913403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod}
23013403bc67a01e0d4908fb964093fd02ddd11c580Behdad Esfahbod
23149baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
23249baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod
23349baa1f69efb0e3c62e45bd59dd88459a84bf390Behdad Esfahbod#endif /* HB_OT_SHAPE_COMPLEX_PRIVATE_HH */
234