Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
393b3425
Commit
393b3425
authored
May 19, 2008
by
Jean-Baptiste Kempf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Formatting cleaning
parent
cffe2dbb
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
168 additions
and
165 deletions
+168
-165
modules/codec/subtitles/subsdec.c
modules/codec/subtitles/subsdec.c
+168
-165
No files found.
modules/codec/subtitles/subsdec.c
View file @
393b3425
...
...
@@ -580,212 +580,215 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
psz_tag
[
0
]
=
'\0'
;
if
(
psz_html_start
!
=
NULL
)
if
(
psz_html_start
=
=
NULL
)
{
char
*
psz_html
=
psz_html_start
;
free
(
psz_tag
);
return
NULL
;
}
char
*
psz_html
=
psz_html_start
;
strcpy
(
psz_html
,
"<text>"
);
psz_html
+=
6
;
strcpy
(
psz_html
,
"<text>"
);
psz_html
+=
6
;
while
(
*
psz_subtitle
)
while
(
*
psz_subtitle
)
{
if
(
*
psz_subtitle
==
'\n'
)
{
strcpy
(
psz_html
,
"<br/>"
);
psz_html
+=
5
;
psz_subtitle
++
;
}
else
if
(
*
psz_subtitle
==
'<'
)
{
if
(
*
psz_subtitle
==
'\n'
)
if
(
!
strncasecmp
(
psz_subtitle
,
"<br/>"
,
5
)
)
{
strcpy
(
psz_html
,
"<br/>"
);
psz_html
+=
5
;
psz_subtitle
++
;
psz_subtitle
+=
5
;
}
else
if
(
*
psz_subtitle
==
'<'
)
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<b>"
,
3
)
)
{
if
(
!
strncasecmp
(
psz_subtitle
,
"<br/>"
,
5
))
{
strcpy
(
psz_html
,
"<br/>"
);
psz_html
+=
5
;
psz_subtitle
+=
5
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<b>"
,
3
)
)
{
strcpy
(
psz_html
,
"<b>"
);
strcat
(
psz_tag
,
"b"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<i>"
,
3
)
)
{
strcpy
(
psz_html
,
"<i>"
);
strcat
(
psz_tag
,
"i"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<u>"
,
3
)
)
{
strcpy
(
psz_html
,
"<u>"
);
strcat
(
psz_tag
,
"u"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<font "
,
6
))
{
const
char
*
psz_attribs
[]
=
{
"face=
\"
"
,
"family=
\"
"
,
"size=
\"
"
,
"color=
\"
"
,
"outline-color=
\"
"
,
"shadow-color=
\"
"
,
"outline-level=
\"
"
,
"shadow-level=
\"
"
,
"back-color=
\"
"
,
"alpha=
\"
"
,
NULL
};
strcpy
(
psz_html
,
"<font "
);
strcat
(
psz_tag
,
"f"
);
psz_html
+=
6
;
psz_subtitle
+=
6
;
strcpy
(
psz_html
,
"<b>"
);
strcat
(
psz_tag
,
"b"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<i>"
,
3
)
)
{
strcpy
(
psz_html
,
"<i>"
);
strcat
(
psz_tag
,
"i"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<u>"
,
3
)
)
{
strcpy
(
psz_html
,
"<u>"
);
strcat
(
psz_tag
,
"u"
);
psz_html
+=
3
;
psz_subtitle
+=
3
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"<font "
,
6
))
{
const
char
*
psz_attribs
[]
=
{
"face=
\"
"
,
"family=
\"
"
,
"size=
\"
"
,
"color=
\"
"
,
"outline-color=
\"
"
,
"shadow-color=
\"
"
,
"outline-level=
\"
"
,
"shadow-level=
\"
"
,
"back-color=
\"
"
,
"alpha=
\"
"
,
NULL
};
while
(
*
psz_subtitle
!=
'>'
)
{
int
k
;
strcpy
(
psz_html
,
"<font "
);
strcat
(
psz_tag
,
"f"
);
psz_html
+=
6
;
psz_subtitle
+=
6
;
for
(
k
=
0
;
psz_attribs
[
k
];
k
++
)
{
int
i_len
=
strlen
(
psz_attribs
[
k
]
)
;
while
(
*
psz_subtitle
!=
'>'
)
{
int
k
;
if
(
!
strncasecmp
(
psz_subtitle
,
psz_attribs
[
k
],
i_len
)
)
{
i_len
+=
strcspn
(
psz_subtitle
+
i_len
,
"
\"
"
)
+
1
;
for
(
k
=
0
;
psz_attribs
[
k
];
k
++
)
{
int
i_len
=
strlen
(
psz_attribs
[
k
]
)
;
strncpy
(
psz_html
,
psz_subtitle
,
i_len
);
psz_html
+=
i_len
;
psz_subtitle
+=
i_len
;
break
;
}
}
if
(
psz_attribs
[
k
]
==
NULL
)
if
(
!
strncasecmp
(
psz_subtitle
,
psz_attribs
[
k
],
i_len
))
{
/* Jump over unrecognised tag */
int
i_len
=
strcspn
(
psz_subtitle
,
"
\"
"
)
+
1
;
i_len
+=
strcspn
(
psz_subtitle
+
i_len
,
"
\"
"
)
+
1
;
strncpy
(
psz_html
,
psz_subtitle
,
i_len
);
psz_html
+=
i_len
;
psz_subtitle
+=
i_len
;
break
;
}
while
(
*
psz_subtitle
==
' '
)
*
psz_html
++
=
*
psz_subtitle
++
;
}
*
psz_html
++
=
*
psz_subtitle
++
;
}
else
if
(
!
strncmp
(
psz_subtitle
,
"</"
,
2
))
{
bool
b_match
=
false
;
int
i_len
=
strlen
(
psz_tag
)
-
1
;
char
*
psz_lastTag
=
NULL
;
if
(
i_len
>=
0
)
if
(
psz_attribs
[
k
]
==
NULL
)
{
psz_lastTag
=
psz_tag
+
i_len
;
i
_len
=
0
;
/* Jump over unrecognised tag */
i
nt
i_len
=
strcspn
(
psz_subtitle
,
"
\"
"
)
+
1
;
switch
(
*
psz_lastTag
)
{
case
'b'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</b>"
,
4
);
i_len
=
4
;
break
;
case
'i'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</i>"
,
4
);
i_len
=
4
;
break
;
case
'u'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</u>"
,
4
);
i_len
=
4
;
break
;
case
'f'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</font>"
,
7
);
i_len
=
7
;
break
;
}
i_len
+=
strcspn
(
psz_subtitle
+
i_len
,
"
\"
"
)
+
1
;
psz_subtitle
+=
i_len
;
}
if
(
!
b_match
)
while
(
*
psz_subtitle
==
' '
)
*
psz_html
++
=
*
psz_subtitle
++
;
}
*
psz_html
++
=
*
psz_subtitle
++
;
}
else
if
(
!
strncmp
(
psz_subtitle
,
"</"
,
2
))
{
bool
b_match
=
false
;
int
i_len
=
strlen
(
psz_tag
)
-
1
;
char
*
psz_lastTag
=
NULL
;
if
(
i_len
>=
0
)
{
psz_lastTag
=
psz_tag
+
i_len
;
i_len
=
0
;
switch
(
*
psz_lastTag
)
{
/* Not well formed -- kill everything */
free
(
psz_html_start
);
psz_html_start
=
NULL
;
case
'b'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</b>"
,
4
);
i_len
=
4
;
break
;
case
'i'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</i>"
,
4
);
i_len
=
4
;
break
;
case
'u'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</u>"
,
4
);
i_len
=
4
;
break
;
case
'f'
:
b_match
=
!
strncasecmp
(
psz_subtitle
,
"</font>"
,
7
);
i_len
=
7
;
break
;
}
*
psz_lastTag
=
'\0'
;
strncpy
(
psz_html
,
psz_subtitle
,
i_len
);
psz_html
+=
i_len
;
psz_subtitle
+=
i_len
;
}
else
if
(
!
b_match
)
{
psz_subtitle
+=
strcspn
(
psz_subtitle
,
">"
);
/* Not well formed -- kill everything */
free
(
psz_html_start
);
psz_html_start
=
NULL
;
break
;
}
*
psz_lastTag
=
'\0'
;
strncpy
(
psz_html
,
psz_subtitle
,
i_len
);
psz_html
+=
i_len
;
psz_subtitle
+=
i_len
;
}
else
if
(
*
psz_subtitle
==
'&'
)
else
{
if
(
!
strncasecmp
(
psz_subtitle
,
"<"
,
4
))
{
strcpy
(
psz_html
,
"<"
);
psz_html
+=
4
;
psz_subtitle
+=
4
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
">"
,
4
))
{
strcpy
(
psz_html
,
">"
);
psz_html
+=
4
;
psz_subtitle
+=
4
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"&"
,
5
))
{
strcpy
(
psz_html
,
"&"
);
psz_html
+=
5
;
psz_subtitle
+=
5
;
}
else
{
strcpy
(
psz_html
,
"&"
);
psz_html
+=
5
;
psz_subtitle
++
;
}
psz_subtitle
+=
strcspn
(
psz_subtitle
,
">"
);
}
}
else
if
(
*
psz_subtitle
==
'&'
)
{
if
(
!
strncasecmp
(
psz_subtitle
,
"<"
,
4
))
{
strcpy
(
psz_html
,
"<"
);
psz_html
+=
4
;
psz_subtitle
+=
4
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
">"
,
4
))
{
strcpy
(
psz_html
,
">"
);
psz_html
+=
4
;
psz_subtitle
+=
4
;
}
else
if
(
!
strncasecmp
(
psz_subtitle
,
"&"
,
5
))
{
strcpy
(
psz_html
,
"&"
);
psz_html
+=
5
;
psz_subtitle
+=
5
;
}
else
{
*
psz_html
=
*
psz_subtitle
;
if
(
psz_html
>
psz_html_start
)
{
/* Check for double whitespace */
if
(((
*
psz_html
==
' '
)
||
(
*
psz_html
==
'\t'
))
&&
((
*
(
psz_html
-
1
)
==
' '
)
||
(
*
(
psz_html
-
1
)
==
'\t'
)))
{
strcpy
(
psz_html
,
NO_BREAKING_SPACE
);
psz_html
+=
strlen
(
NO_BREAKING_SPACE
)
-
1
;
}
}
psz_html
++
;
strcpy
(
psz_html
,
"&"
);
psz_html
+=
5
;
psz_subtitle
++
;
}
if
(
(
size_t
)(
psz_html
-
psz_html_start
)
>
i_buf_size
-
10
)
}
else
{
*
psz_html
=
*
psz_subtitle
;
if
(
psz_html
>
psz_html_start
)
{
int
i_len
=
psz_html
-
psz_html_start
;
i_buf_size
+=
100
;
psz_html_start
=
realloc
(
psz_html_start
,
i_buf_size
);
psz_html
=
psz_html_start
+
i_len
;
*
psz_html
=
'\0'
;
/* Check for double whitespace */
if
(((
*
psz_html
==
' '
)
||
(
*
psz_html
==
'\t'
))
&&
((
*
(
psz_html
-
1
)
==
' '
)
||
(
*
(
psz_html
-
1
)
==
'\t'
)))
{
strcpy
(
psz_html
,
NO_BREAKING_SPACE
);
psz_html
+=
strlen
(
NO_BREAKING_SPACE
)
-
1
;
}
}
psz_html
++
;
psz_subtitle
++
;
}
strcpy
(
psz_html
,
"</text>"
);
psz_html
+=
7
;
if
(
psz_tag
[
0
]
!=
'\0'
)
if
(
(
size_t
)(
psz_html
-
psz_html_start
)
>
i_buf_size
-
10
)
{
/* Not well formed -- kill everything */
free
(
psz_html_start
);
psz_html_start
=
NULL
;
}
else
if
(
psz_html_start
)
{
/* Shrink the memory requirements */
psz_html_start
=
realloc
(
psz_html_start
,
psz_html
-
psz_html_start
+
1
);
int
i_len
=
psz_html
-
psz_html_start
;
i_buf_size
+=
100
;
psz_html_start
=
realloc
(
psz_html_start
,
i_buf_size
);
psz_html
=
psz_html_start
+
i_len
;
*
psz_html
=
'\0'
;
}
}
strcpy
(
psz_html
,
"</text>"
);
psz_html
+=
7
;
if
(
psz_tag
[
0
]
!=
'\0'
)
{
/* Not well formed -- kill everything */
free
(
psz_html_start
);
psz_html_start
=
NULL
;
}
else
if
(
psz_html_start
)
{
/* Shrink the memory requirements */
psz_html_start
=
realloc
(
psz_html_start
,
psz_html
-
psz_html_start
+
1
);
}
free
(
psz_tag
);
return
psz_html_start
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment