summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-01-11 00:27:55 +0100
committerGrigori Goronzy <greg@monster>2013-01-12 02:53:02 +0100
commit340ff8f4cbde87d2ce7d1133889e3afdd66d4e06 (patch)
treeeaee5e2333329e3d272fb559a571822d532f04d0
parentbbd6502caa2e6a023c863806c3aa63d7e3cf389d (diff)
downloadlibass-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.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c
index 8fa1689..3dcdf48 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;