From 0b36713ae21722102f435e4645ac79dfccba6730 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Wed, 8 Jan 2014 03:39:36 +0200 Subject: Terminate drawings on { This brings us in line with VSFilter and also fixes Google Code issue #101. --- libass/ass_render.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libass/ass_render.c b/libass/ass_render.c index 25a33e5..dbc487c 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1755,9 +1755,16 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, if (!in_tag && *p == '{') { // '\0' goes here p++; in_tag = 1; + if (render_priv->state.drawing_mode) { + // A drawing definition has just ended. + // Exit and create the drawing now lest we + // accidentally let it consume later text + // or be affected by later override tags. + // See Google Code issues #47 and #101. + break; + } } if (in_tag) { - int prev_drawing_mode = render_priv->state.drawing_mode; p = parse_tag(render_priv, p, 1.); if (*p == '}') { // end of tag p++; @@ -1766,12 +1773,6 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, ass_msg(render_priv->library, MSGL_V, "Unable to parse: '%.30s'", p); } - if (prev_drawing_mode && !render_priv->state.drawing_mode) { - // Drawing mode was just disabled. We must exit and draw it - // immediately, instead of letting further tags affect it. - // See bug #47. - break; - } } else { code = get_next_char(render_priv, &p); if (code && render_priv->state.drawing_mode) { -- cgit v1.2.3