diff options
author | Oleg Oshmyan <chortos@inbox.lv> | 2014-01-08 03:39:36 +0200 |
---|---|---|
committer | Oleg Oshmyan <chortos@inbox.lv> | 2014-01-08 03:39:36 +0200 |
commit | 0b36713ae21722102f435e4645ac79dfccba6730 (patch) | |
tree | 3adb0f97a65f1303005a8655c3141dac5c7a8ef9 /libass/ass_render.c | |
parent | 50c53a1330e61d14808630b9d054b9aaaa9b0031 (diff) | |
download | libass-0b36713ae21722102f435e4645ac79dfccba6730.tar.bz2 libass-0b36713ae21722102f435e4645ac79dfccba6730.tar.xz |
Terminate drawings on {
This brings us in line with VSFilter
and also fixes Google Code issue #101.
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 25a33e5d..dbc487ce 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) { |