hb-ot-shape-complex-private.hh 4.5 KB
Newer Older
1
/*
B
Behdad Esfahbod 已提交
2
 * Copyright © 2010  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
 */

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

static inline void
114
hb_ot_shape_complex_collect_features (hb_ot_shape_planner_t *planner,
115 116
				      const hb_segment_properties_t  *props)
{
117
  switch (planner->shaper) {
B
Behdad Esfahbod 已提交
118 119 120
    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;
121 122 123 124
  }
}


B
Behdad Esfahbod 已提交
125 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.
 */

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

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 已提交
140
    case hb_ot_complex_shaper_indic:	_hb_ot_shape_complex_setup_masks_indic (c);	return;
B
Behdad Esfahbod 已提交
141 142 143 144
    case hb_ot_complex_shaper_none:	default:					return;
  }
}

145 146 147 148

HB_END_DECLS

#endif /* HB_OT_SHAPE_COMPLEX_PRIVATE_HH */