lavc/htmlsubtitles: improve line breaks handling
authorClément Bœsch <u@pkh.me>
Sat, 29 Jul 2017 19:09:54 +0000 (21:09 +0200)
committerClément Bœsch <u@pkh.me>
Tue, 1 Aug 2017 13:50:00 +0000 (15:50 +0200)
libavcodec/htmlsubtitles.c
libavcodec/tests/htmlsubtitles.c
tests/ref/fate/libavcodec-htmlsubtitles

index baed284..ae2c48b 100644 (file)
@@ -165,7 +165,7 @@ int ff_htmlmarkup_to_ass(void *log_ctx, AVBPrint *dst, const char *in)
 #define LIKELY_A_TAG_CHAR(x) (((x) >= '0' && (x) <= '9') || \
                               ((x) >= 'a' && (x) <= 'z') || \
                               ((x) >= 'A' && (x) <= 'Z') || \
-                               (x) == '_')
+                               (x) == '_' || (x) == '/')
                 for (i = 0; tagname[i]; i++) {
                     if (!LIKELY_A_TAG_CHAR(tagname[i])) {
                         likely_a_tag = 0;
@@ -237,7 +237,8 @@ int ff_htmlmarkup_to_ass(void *log_ctx, AVBPrint *dst, const char *in)
                     } else if (tagname[0] && !tagname[1] && strchr("bisu", av_tolower(tagname[0]))) {
                         av_bprintf(dst, "{\\%c%d}", (char)av_tolower(tagname[0]), !tag_close);
                         in += skip;
-                    } else if (!av_strcasecmp(tagname, "br")) {
+                    } else if (!av_strncasecmp(tagname, "br", 2) &&
+                               (!tagname[2] || (tagname[2] == '/' && !tagname[3]))) {
                         av_bprintf(dst, "\\N");
                         in += skip;
                     } else if (likely_a_tag) {
index d0b55a4..7c89ee9 100644 (file)
@@ -29,6 +29,8 @@ static const char * const test_cases[] = {
     "Foo <foo@bar.com>",                    // not a tag (not alnum)
 
     "<b> foo <I> bar </B> bla </i>",        // broken nesting
+
+    "A<br>B<BR/>C<br  / >D<  Br >E<brk><brk/>", // misc line breaks
 };
 
 int main(void)
index 702f0b7..66dd8e8 100644 (file)
@@ -5,3 +5,4 @@
 < font color=red >red</font> --> {\c&HFF&}red{\c}
 Foo <foo@bar.com> --> Foo <foo@bar.com>
 <b> foo <I> bar </B> bla </i> --> {\b1} foo {\i1} bar {\b0} bla {\i0}
+A<br>B<BR/>C<br  / >D<  Br >E<brk><brk/> --> A\NB\NC\ND\NE