]> git.sesse.net Git - vlc/blobdiff - modules/codec/subtitles/subsdec.c
Added support for \N \n and \h in subtitles.
[vlc] / modules / codec / subtitles / subsdec.c
index f6af33c48e894cbff2c4e4d1c971148a0e7976c4..80b25626a5926cbc28edd86f07938250d4bba3c2 100644 (file)
@@ -634,7 +634,7 @@ static char *StripTags( char *psz_subtitle )
  * to be carrying style information. Over time people have used them that way.
  * In the absence of specifications from which to work, the tags supported
  * have been restricted to the simple set permitted by the USF DTD, ie. :
- *  Basic: <br>, <i>, <b>, <u>
+ *  Basic: <br>, <i>, <b>, <u>, <s>
  *  Extended: <font>
  *    Attributes: face
  *                family
@@ -728,6 +728,11 @@ static char *CreateHtmlSubtitle( int *pi_align, char *psz_subtitle )
                 HtmlCopy( &psz_html, &psz_subtitle, "<u>" );
                 strcat( psz_tag, "u" );
             }
+            else if( !strncasecmp( psz_subtitle, "<s>", 3 ) )
+            {
+                HtmlCopy( &psz_html, &psz_subtitle, "<s>" );
+                strcat( psz_tag, "s" );
+            }
             else if( !strncasecmp( psz_subtitle, "<font ", 6 ))
             {
                 const char *psz_attribs[] = { "face=", "family=", "size=",
@@ -813,6 +818,10 @@ static char *CreateHtmlSubtitle( int *pi_align, char *psz_subtitle )
                         b_match = !strncasecmp( psz_subtitle, "</u>", 4 );
                         i_len   = 4;
                         break;
+                    case 's':
+                        b_match = !strncasecmp( psz_subtitle, "</s>", 4 );
+                        i_len   = 4;
+                        break;
                     case 'f':
                         b_match = !strncasecmp( psz_subtitle, "</font>", 7 );
                         i_len   = 7;
@@ -940,6 +949,31 @@ static char *CreateHtmlSubtitle( int *pi_align, char *psz_subtitle )
             /* Hide {\stupidity} */
             psz_subtitle = strchr( psz_subtitle, '}' ) + 1;
         }
+        else if( psz_subtitle[0] == '{' && psz_subtitle[1] == 'Y'
+                && psz_subtitle[2] == ':' && strchr( psz_subtitle, '}' ) )
+        {
+            /* Hide {Y:stupidity} */
+            psz_subtitle = strchr( psz_subtitle, '}' ) + 1;
+        }
+        else if( psz_subtitle[0] == '\\' && psz_subtitle[1] )
+        {
+            if( psz_subtitle[1] == 'N' || psz_subtitle[1] == 'n' )
+            {
+                HtmlPut( &psz_html, "<br/>" );
+                psz_subtitle += 2;
+            }
+            else if( psz_subtitle[1] == 'h' )
+            {
+                /* Non breakable space */
+                HtmlPut( &psz_html, NO_BREAKING_SPACE );
+                psz_subtitle += 2;
+            }
+            else
+            {
+                HtmlPut( &psz_html, "\\" );
+                psz_subtitle++;
+            }
+        }
         else
         {
             *psz_html = *psz_subtitle;
@@ -1000,6 +1034,9 @@ static char *CreateHtmlSubtitle( int *pi_align, char *psz_subtitle )
                 case 'u':
                     HtmlPut( &psz_html, "</u>" );
                     break;
+                case 's':
+                    HtmlPut( &psz_html, "</s>" );
+                    break;
                 case 'f':
                     HtmlPut( &psz_html, "/font>" );
                     break;