diff options
Diffstat (limited to 'libass/ass_shaper.c')
-rw-r--r-- | libass/ass_shaper.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libass/ass_shaper.c b/libass/ass_shaper.c index 15dc549..16026f5 100644 --- a/libass/ass_shaper.c +++ b/libass/ass_shaper.c @@ -45,6 +45,7 @@ struct ass_shaper { // OpenType features int n_features; hb_feature_t *features; + hb_language_t language; // Glyph metrics cache, to speed up shaping Cache *metrics_cache; }; @@ -428,6 +429,7 @@ static void shape_harfbuzz(ASS_Shaper *shaper, GlyphInfo *glyphs, size_t len) set_run_features(shaper, glyphs + k); hb_buffer_set_direction(runs[run].buf, direction ? HB_DIRECTION_RTL : HB_DIRECTION_LTR); + hb_buffer_set_language(runs[run].buf, shaper->language); hb_buffer_add_utf32(runs[run].buf, shaper->event_text + k, i - k + 1, 0, i - k + 1); hb_shape(runs[run].font, runs[run].buf, shaper->features, @@ -559,6 +561,17 @@ void ass_shaper_set_base_direction(ASS_Shaper *shaper, FriBidiParType dir) } /** + * \brief Set language hint. Some languages have specific character variants, + * like Serbian Cyrillic. + * \param lang ISO 639-1 two-letter language code + */ +void ass_shaper_set_language(ASS_Shaper *shaper, const char *code) +{ + printf("setting language to '%s'\n", code); + shaper->language = hb_language_from_string(code); +} + +/** * \brief Shape an event's text. Calculates directional runs and shapes them. * \param text_info event's text */ |