27 #ifndef HB_OT_SHAPE_COMPLEX_INDIC_HH
28 #define HB_OT_SHAPE_COMPLEX_INDIC_HH
36 #define indic_category() complex_var_u8_category()
37 #define indic_position() complex_var_u8_auxiliary()
75 #define MEDIAL_FLAGS (FLAG (OT_CM))
82 #define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CS) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
83 #define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
176 #define INDIC_COMBINE_CATEGORIES(S,M) \
178 static_assert_expr (S < 255 && M < 255) + \
182 S == INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL || \
183 S == INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK || \
184 S == INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER || \
185 S == INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA || \
186 S == INDIC_SYLLABIC_CATEGORY_VIRAMA || \
187 S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT || \
189 ? M : INDIC_MATRA_CATEGORY_NOT_APPLICABLE \
203 if (_hb_glyph_info_ligated (&
info))
return false;
225 #define IN_HALF_BLOCK(u, Base) (((u) & ~0x7Fu) == (Base))
227 #define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x0900u))
228 #define IS_BENG(u) (IN_HALF_BLOCK (u, 0x0980u))
229 #define IS_GURU(u) (IN_HALF_BLOCK (u, 0x0A00u))
230 #define IS_GUJR(u) (IN_HALF_BLOCK (u, 0x0A80u))
231 #define IS_ORYA(u) (IN_HALF_BLOCK (u, 0x0B00u))
232 #define IS_TAML(u) (IN_HALF_BLOCK (u, 0x0B80u))
233 #define IS_TELU(u) (IN_HALF_BLOCK (u, 0x0C00u))
234 #define IS_KNDA(u) (IN_HALF_BLOCK (u, 0x0C80u))
235 #define IS_MLYM(u) (IN_HALF_BLOCK (u, 0x0D00u))
236 #define IS_SINH(u) (IN_HALF_BLOCK (u, 0x0D80u))
239 #define MATRA_POS_LEFT(u) POS_PRE_M
240 #define MATRA_POS_RIGHT(u) ( \
241 IS_DEVA(u) ? POS_AFTER_SUB : \
242 IS_BENG(u) ? POS_AFTER_POST : \
243 IS_GURU(u) ? POS_AFTER_POST : \
244 IS_GUJR(u) ? POS_AFTER_POST : \
245 IS_ORYA(u) ? POS_AFTER_POST : \
246 IS_TAML(u) ? POS_AFTER_POST : \
247 IS_TELU(u) ? (u <= 0x0C42u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
248 IS_KNDA(u) ? (u < 0x0CC3u || u > 0xCD6u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
249 IS_MLYM(u) ? POS_AFTER_POST : \
250 IS_SINH(u) ? POS_AFTER_SUB : \
253 #define MATRA_POS_TOP(u) ( \
254 IS_DEVA(u) ? POS_AFTER_SUB : \
255 IS_GURU(u) ? POS_AFTER_POST : \
256 IS_GUJR(u) ? POS_AFTER_SUB : \
257 IS_ORYA(u) ? POS_AFTER_MAIN : \
258 IS_TAML(u) ? POS_AFTER_SUB : \
259 IS_TELU(u) ? POS_BEFORE_SUB : \
260 IS_KNDA(u) ? POS_BEFORE_SUB : \
261 IS_SINH(u) ? POS_AFTER_SUB : \
264 #define MATRA_POS_BOTTOM(u) ( \
265 IS_DEVA(u) ? POS_AFTER_SUB : \
266 IS_BENG(u) ? POS_AFTER_SUB : \
267 IS_GURU(u) ? POS_AFTER_POST : \
268 IS_GUJR(u) ? POS_AFTER_POST : \
269 IS_ORYA(u) ? POS_AFTER_SUB : \
270 IS_TAML(u) ? POS_AFTER_POST : \
271 IS_TELU(u) ? POS_BEFORE_SUB : \
272 IS_KNDA(u) ? POS_BEFORE_SUB : \
273 IS_MLYM(u) ? POS_AFTER_POST : \
274 IS_SINH(u) ? POS_AFTER_SUB : \
330 if (
unlikely (hb_in_range<hb_codepoint_t> (
u, 0x0953u, 0x0954u)))
333 else if (
unlikely (hb_in_ranges<hb_codepoint_t> (
u, 0x0A72u, 0x0A73u,
338 else if (
unlikely (hb_in_range<hb_codepoint_t> (
u, 0x1CE2u, 0x1CE8u)))
346 else if (
unlikely (hb_in_ranges<hb_codepoint_t> (
u, 0xA8F2u, 0xA8F7u,
372 else if (
unlikely (hb_in_range<hb_codepoint_t> (
u, 0x2010u, 0x2011u)))
387 else if (cat ==
OT_M)
389 pos = matra_position_indic (
u,
pos);
400 info.indic_category() = cat;
408 zero_context = zero_context_;
409 map->get_stage_lookups (0,
410 map->get_feature_stage (0, feature_tag),
415 unsigned int glyphs_count,
418 for (
unsigned int i = 0;
i <
count;
i++)
small capitals from c petite p scientific f u
small capitals from c petite p scientific i
[1]
QMap< QString, QString > map
[6]
hb_array_t< T > hb_array(T *array, unsigned int length)
hb_bool_t hb_ot_layout_lookup_would_substitute(hb_face_t *face, unsigned int lookup_index, const hb_codepoint_t *glyphs, unsigned int glyphs_length, hb_bool_t zero_context)
#define MATRA_POS_BOTTOM(u)
HB_INTERNAL uint16_t hb_indic_get_categories(hb_codepoint_t u)
#define MATRA_POS_RIGHT(u)
indic_syllabic_category_t
@ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER
@ INDIC_SYLLABIC_CATEGORY_BINDU
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED
@ INDIC_SYLLABIC_CATEGORY_VOWEL
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER
@ INDIC_SYLLABIC_CATEGORY_NUMBER
@ INDIC_SYLLABIC_CATEGORY_VIRAMA
@ INDIC_SYLLABIC_CATEGORY_VISARGA
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER
@ INDIC_SYLLABIC_CATEGORY_TONE_MARK
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER
@ INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT
@ INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER
@ INDIC_SYLLABIC_CATEGORY_TONE_LETTER
@ INDIC_SYLLABIC_CATEGORY_AVAGRAHA
@ INDIC_SYLLABIC_CATEGORY_NON_JOINER
@ INDIC_SYLLABIC_CATEGORY_PURE_KILLER
@ INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT
@ INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER
@ INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER
@ INDIC_SYLLABIC_CATEGORY_JOINER
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA
@ INDIC_SYLLABIC_CATEGORY_OTHER
@ INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER
@ INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER
@ INDIC_SYLLABIC_CATEGORY_CONSONANT
@ INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL
@ INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER
@ INDIC_SYLLABIC_CATEGORY_NUKTA
@ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED
#define MATRA_POS_LEFT(u)
@ INDIC_MATRA_CATEGORY_RIGHT
@ INDIC_MATRA_CATEGORY_TOP_AND_LEFT
@ INDIC_MATRA_CATEGORY_TOP_AND_RIGHT
@ INDIC_MATRA_CATEGORY_TOP
@ INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT
@ INDIC_MATRA_CATEGORY_OVERSTRUCK
@ INDIC_MATRA_CATEGORY_LEFT
@ INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM
@ INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT
@ INDIC_MATRA_CATEGORY_BOTTOM
@ INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_LEFT
@ INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT
@ INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT
@ INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT
@ INDIC_MATRA_CATEGORY_NOT_APPLICABLE
backing_store_ptr info
[4]
GLenum GLenum GLsizei count
bool lfind(const T &x, unsigned *pos=nullptr, hb_not_found_t not_found=HB_NOT_FOUND_DONT_STORE, unsigned int to_store=(unsigned int) -1) const
void init(const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
bool would_substitute(const hb_codepoint_t *glyphs, unsigned int glyphs_count, hb_face_t *face) const