hb-ot-shape-complex-private.hh 4.6 KB
Newer Older
1
/*
B
Behdad Esfahbod 已提交
2
 * Copyright © 2010,2011  Google, Inc.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
 *
 *  This is part of HarfBuzz, a text shaping library.
 *
 * Permission is hereby granted, without written agreement and without
 * license or royalty fees, to use, copy, modify, and distribute this
 * software and its documentation for any purpose, provided that the
 * above copyright notice and the following two paragraphs appear in
 * all copies of this software.
 *
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 *
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 *
 * Google Author(s): Behdad Esfahbod
 */

#ifndef HB_OT_SHAPE_COMPLEX_PRIVATE_HH
#define HB_OT_SHAPE_COMPLEX_PRIVATE_HH

30
#include "hb-private.hh"
31

B
Behdad Esfahbod 已提交
32
#include "hb-ot-shape-private.hh"
33 34 35 36 37 38 39

HB_BEGIN_DECLS


static inline hb_ot_complex_shaper_t
hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
{
40 41
  switch ((int) props->script)
  {
42
    case HB_SCRIPT_ARABIC:
43
    case HB_SCRIPT_MANDAIC:
44
    case HB_SCRIPT_MONGOLIAN:
B
Behdad Esfahbod 已提交
45 46
    case HB_SCRIPT_NKO:
    case HB_SCRIPT_SYRIAC:
47 48
      return hb_ot_complex_shaper_arabic;

B
Behdad Esfahbod 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
    /* TODO: These are all the scripts that the ucd/IndicSyllabicCategory.txt covers.
     * Quite possibly many of these need no shaping, and some other are encoded visually.
     * Needs to be refined.
     */
    case HB_SCRIPT_BALINESE:
    case HB_SCRIPT_BATAK:
    case HB_SCRIPT_BENGALI:
    case HB_SCRIPT_BRAHMI:
    case HB_SCRIPT_BUGINESE:
    case HB_SCRIPT_BUHID:
    case HB_SCRIPT_CHAM:
    case HB_SCRIPT_DEVANAGARI:
    case HB_SCRIPT_GUJARATI:
    case HB_SCRIPT_GURMUKHI:
    case HB_SCRIPT_HANUNOO:
    case HB_SCRIPT_JAVANESE:
    case HB_SCRIPT_KAITHI:
    case HB_SCRIPT_KANNADA:
    case HB_SCRIPT_KAYAH_LI:
    case HB_SCRIPT_KHAROSHTHI:
    case HB_SCRIPT_KHMER:
    case HB_SCRIPT_LAO:
    case HB_SCRIPT_LEPCHA:
    case HB_SCRIPT_LIMBU:
    case HB_SCRIPT_MALAYALAM:
    case HB_SCRIPT_MEETEI_MAYEK:
    case HB_SCRIPT_MYANMAR:
    case HB_SCRIPT_NEW_TAI_LUE:
    case HB_SCRIPT_ORIYA:
    case HB_SCRIPT_PHAGS_PA:
    case HB_SCRIPT_REJANG:
    case HB_SCRIPT_SAURASHTRA:
    case HB_SCRIPT_SINHALA:
    case HB_SCRIPT_SUNDANESE:
    case HB_SCRIPT_SYLOTI_NAGRI:
    case HB_SCRIPT_TAGALOG:
    case HB_SCRIPT_TAGBANWA:
    case HB_SCRIPT_TAI_LE:
    case HB_SCRIPT_TAI_THAM:
    case HB_SCRIPT_TAI_VIET:
    case HB_SCRIPT_TAMIL:
    case HB_SCRIPT_TELUGU:
    case HB_SCRIPT_THAI:
    case HB_SCRIPT_TIBETAN:
      return hb_ot_complex_shaper_indic;

95 96 97 98 99 100 101 102 103 104
    default:
      return hb_ot_complex_shaper_none;
  }
}



/*
 * collect_features()
 *
B
Behdad Esfahbod 已提交
105 106 107
 * Called during shape_plan().
 *
 * Shapers should use plan->map to add their features.
108 109
 */

B
Behdad Esfahbod 已提交
110 111 112
typedef void hb_ot_shape_complex_collect_features_func_t (hb_ot_shape_planner_t *plan, const hb_segment_properties_t  *props);
HB_INTERNAL hb_ot_shape_complex_collect_features_func_t _hb_ot_shape_complex_collect_features_arabic;
HB_INTERNAL hb_ot_shape_complex_collect_features_func_t _hb_ot_shape_complex_collect_features_indic;
113 114

static inline void
115
hb_ot_shape_complex_collect_features (hb_ot_shape_planner_t *planner,
116 117
				      const hb_segment_properties_t  *props)
{
118
  switch (planner->shaper) {
B
Behdad Esfahbod 已提交
119 120 121
    case hb_ot_complex_shaper_arabic:	_hb_ot_shape_complex_collect_features_arabic	(planner, props);	return;
    case hb_ot_complex_shaper_indic:	_hb_ot_shape_complex_collect_features_indic	(planner, props);	return;
    case hb_ot_complex_shaper_none:	default:								return;
122 123 124 125
  }
}


B
Behdad Esfahbod 已提交
126 127 128 129 130 131 132
/* setup_masks()
 *
 * Called during shape_execute().
 *
 * Shapers should use c->plan.map to get feature masks and set on buffer.
 */

B
Behdad Esfahbod 已提交
133 134 135
typedef void hb_ot_shape_complex_setup_masks_func_t (hb_ot_shape_context_t *c);
HB_INTERNAL hb_ot_shape_complex_setup_masks_func_t _hb_ot_shape_complex_setup_masks_arabic;
HB_INTERNAL hb_ot_shape_complex_setup_masks_func_t _hb_ot_shape_complex_setup_masks_indic;
B
Behdad Esfahbod 已提交
136 137 138 139 140 141

static inline void
hb_ot_shape_complex_setup_masks (hb_ot_shape_context_t *c)
{
  switch (c->plan->shaper) {
    case hb_ot_complex_shaper_arabic:	_hb_ot_shape_complex_setup_masks_arabic (c);	return;
B
Behdad Esfahbod 已提交
142
    case hb_ot_complex_shaper_indic:	_hb_ot_shape_complex_setup_masks_indic (c);	return;
B
Behdad Esfahbod 已提交
143 144 145 146
    case hb_ot_complex_shaper_none:	default:					return;
  }
}

147 148 149 150

HB_END_DECLS

#endif /* HB_OT_SHAPE_COMPLEX_PRIVATE_HH */