changeset 27210:71cec8a6d23d

Fix \fn without an argument consuming the next '\'.
author eugeni
date Wed, 09 Jul 2008 15:05:56 +0000
parents 73777e127a82
children 580ddfaa46d4
files libass/ass_render.c
diffstat 1 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libass/ass_render.c	Wed Jul 09 08:12:42 2008 +0000
+++ b/libass/ass_render.c	Wed Jul 09 15:05:56 2008 +0000
@@ -679,11 +679,11 @@
  * \param pwr multiplier for some tag effects (comes from \t tags)
  */
 static char* parse_tag(char* p, double pwr) {
-#define skip_all(x) if (*p == (x)) ++p; else { \
-	while ((*p != (x)) && (*p != '}') && (*p != 0)) {++p;} }
+#define skip_to(x) while ((*p != (x)) && (*p != '}') && (*p != 0)) { ++p;}
 #define skip(x) if (*p == (x)) ++p; else { return p; }
 	
-	skip_all('\\');
+	skip_to('\\');
+	skip('\\');
 	if ((*p == '}') || (*p == 0))
 		return p;
 
@@ -787,7 +787,7 @@
 	} else if (mystrcmp(&p, "fn")) {
 		char* start = p;
 		char* family;
-		skip_all('\\');
+		skip_to('\\');
 		if (p > start) {
 			family = malloc(p - start + 1);
 			strncpy(family, start, p - start);
@@ -928,7 +928,8 @@
 		}
 		while (*p == '\\')
 			p = parse_tag(p, k); // maybe k*pwr ? no, specs forbid nested \t's 
-		skip_all(')'); // FIXME: better skip(')'), but much more tags support required
+		skip_to(')'); // in case there is some unknown tag or a comment
+		skip(')');
 	} else if (mystrcmp(&p, "clip")) {
 		int x0, y0, x1, y1;
 		int res = 1;
@@ -1031,7 +1032,7 @@
 	return p;
 
 #undef skip
-#undef skip_all
+#undef skip_to
 }
 
 /**