summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2014-01-08 03:39:36 +0200
committerOleg Oshmyan <chortos@inbox.lv>2014-01-08 03:39:36 +0200
commit0b36713ae21722102f435e4645ac79dfccba6730 (patch)
tree3adb0f97a65f1303005a8655c3141dac5c7a8ef9
parent50c53a1330e61d14808630b9d054b9aaaa9b0031 (diff)
downloadlibass-0b36713ae21722102f435e4645ac79dfccba6730.tar.bz2
libass-0b36713ae21722102f435e4645ac79dfccba6730.tar.xz
Terminate drawings on {
This brings us in line with VSFilter and also fixes Google Code issue #101.
-rw-r--r--libass/ass_render.c15
1 files 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) {