diff options
author | wm4 <wm4@nowhere> | 2013-01-11 00:27:55 +0100 |
---|---|---|
committer | Grigori Goronzy <greg@monster> | 2013-01-12 02:53:02 +0100 |
commit | 340ff8f4cbde87d2ce7d1133889e3afdd66d4e06 (patch) | |
tree | eaee5e2333329e3d272fb559a571822d532f04d0 | |
parent | bbd6502caa2e6a023c863806c3aa63d7e3cf389d (diff) | |
download | libass-340ff8f4cbde87d2ce7d1133889e3afdd66d4e06.tar.bz2 libass-340ff8f4cbde87d2ce7d1133889e3afdd66d4e06.tar.xz |
Make closing ')' optional for some ASS tags
It appears VSFilter generally accepts the tag anyway if closing ')' are
missing in tags like \pos(1,2). Since they're not strictly needed
anyway, make the last ')' optional in order to make parsing more
tolerant against broken subs.
Fixes issue #79.
-rw-r--r-- | libass/ass_parse.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 8fa1689e..3dcdf481 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -433,7 +433,7 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) ass_msg(render_priv->library, MSGL_DBG2, "movement: (%f, %f) -> (%f, %f)", x1, y1, x2, y2); } - skip(')'); + skipopt(')'); delta_t = t2 - t1; t = render_priv->time - render_priv->state.event->Start; if (t < t1) @@ -542,7 +542,7 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) mystrtod(&p, &v1); skip(','); mystrtod(&p, &v2); - skip(')'); + skipopt(')'); ass_msg(render_priv->library, MSGL_DBG2, "pos(%f, %f)", v1, v2); if (render_priv->state.evt_type == EVENT_POSITIONED) { ass_msg(render_priv->library, MSGL_V, "Subtitle has a new \\pos " @@ -586,7 +586,7 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) skip(','); mystrtoll(&p, &t4); } - skip(')'); + skipopt(')'); if ((render_priv->state.parsed_tags & PARSED_FADE) == 0) { render_priv->state.fade = interpolate_alpha(render_priv->time - @@ -600,7 +600,7 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) mystrtoi(&p, &v1); skip(','); mystrtoi(&p, &v2); - skip(')'); + skipopt(')'); ass_msg(render_priv->library, MSGL_DBG2, "org(%d, %d)", v1, v2); if (!render_priv->state.have_origin) { render_priv->state.org_x = v1; @@ -657,7 +657,7 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, double pwr) while (*p == '\\') p = parse_tag(render_priv, p, k); // maybe k*pwr ? no, specs forbid nested \t's skip_to(')'); // in case there is some unknown tag or a comment - skip(')'); + skipopt(')'); } else if (mystrcmp(&p, "clip")) { char *start = p; int x0, y0, x1, y1; |