Add prefer_decomposed() complex-shaper callback
This allows the Indic shaper to request decomposed characters. This will handle split matra for free. Other shapers prefer precomposed characters.
This commit is contained in:
parent
d6b9c6d200
commit
02cdf743c2
|
@ -183,6 +183,12 @@ _hb_ot_shape_complex_collect_features_arabic (hb_ot_map_builder_t *map, const hb
|
||||||
map->add_bool_feature (HB_TAG('c','s','w','h'));
|
map->add_bool_feature (HB_TAG('c','s','w','h'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
_hb_ot_shape_complex_prefer_decomposed_arabic (void)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_hb_ot_shape_complex_setup_masks_arabic (hb_ot_map_t *map, hb_buffer_t *buffer)
|
_hb_ot_shape_complex_setup_masks_arabic (hb_ot_map_t *map, hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -309,6 +309,13 @@ _hb_ot_shape_complex_collect_features_indic (hb_ot_map_builder_t *map, const hb_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
_hb_ot_shape_complex_prefer_decomposed_indic (void)
|
||||||
|
{
|
||||||
|
/* We want split matras decomposed by the common shaping logic. */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
found_syllable (hb_ot_map_t *map, hb_buffer_t *buffer,
|
found_syllable (hb_ot_map_t *map, hb_buffer_t *buffer,
|
||||||
unsigned int start, unsigned int end)
|
unsigned int start, unsigned int end)
|
||||||
|
|
|
@ -42,6 +42,12 @@ _hb_ot_shape_complex_collect_features_default (hb_ot_map_builder_t *map, const h
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
_hb_ot_shape_complex_prefer_decomposed_default (void)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_hb_ot_shape_complex_setup_masks_default (hb_ot_map_t *map, hb_buffer_t *buffer)
|
_hb_ot_shape_complex_setup_masks_default (hb_ot_map_t *map, hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -140,7 +140,34 @@ hb_ot_shape_complex_collect_features (hb_ot_complex_shaper_t shaper,
|
||||||
switch (shaper) {
|
switch (shaper) {
|
||||||
default:
|
default:
|
||||||
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
||||||
case hb_ot_complex_shaper_##name: _hb_ot_shape_complex_collect_features_##name (map, props); return;
|
case hb_ot_complex_shaper_##name: _hb_ot_shape_complex_collect_features_##name (map, props); return;
|
||||||
|
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
||||||
|
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prefer_decomposed()
|
||||||
|
*
|
||||||
|
* Called during shape_execute().
|
||||||
|
*
|
||||||
|
* Shapers should return TRUE if it prefers decomposed (NFD) input rather than precomposed (NFC).
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef bool hb_ot_shape_complex_prefer_decomposed_func_t (void);
|
||||||
|
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
||||||
|
HB_INTERNAL hb_ot_shape_complex_prefer_decomposed_func_t _hb_ot_shape_complex_prefer_decomposed_##name;
|
||||||
|
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
||||||
|
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
hb_ot_shape_complex_prefer_decomposed (hb_ot_complex_shaper_t shaper)
|
||||||
|
{
|
||||||
|
switch (shaper) {
|
||||||
|
default:
|
||||||
|
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
||||||
|
case hb_ot_complex_shaper_##name: return _hb_ot_shape_complex_prefer_decomposed_##name ();
|
||||||
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
||||||
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
||||||
}
|
}
|
||||||
|
@ -168,7 +195,7 @@ hb_ot_shape_complex_setup_masks (hb_ot_complex_shaper_t shaper,
|
||||||
switch (shaper) {
|
switch (shaper) {
|
||||||
default:
|
default:
|
||||||
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) \
|
||||||
case hb_ot_complex_shaper_##name: _hb_ot_shape_complex_setup_masks_##name (map, buffer); return;
|
case hb_ot_complex_shaper_##name: _hb_ot_shape_complex_setup_masks_##name (map, buffer); return;
|
||||||
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS
|
||||||
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
#undef HB_COMPLEX_SHAPER_IMPLEMENT
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue