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