summaryrefslogtreecommitdiffstats
path: root/libass/ass_shaper.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_shaper.c')
-rw-r--r--libass/ass_shaper.c13
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
*/