mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Document that overlapping spans aren't rendered to HTML correctly
Add some mitigation about why this is probably on OK limitation. PiperOrigin-RevId: 302907940
This commit is contained in:
parent
2555fb36b4
commit
92494ce44b
2 changed files with 30 additions and 0 deletions
|
|
@ -50,6 +50,17 @@ import java.util.List;
|
||||||
* Convert {@code text} into HTML, adding tags and styling to match any styling spans present.
|
* Convert {@code text} into HTML, adding tags and styling to match any styling spans present.
|
||||||
*
|
*
|
||||||
* <p>All textual content is HTML-escaped during the conversion.
|
* <p>All textual content is HTML-escaped during the conversion.
|
||||||
|
*
|
||||||
|
* <p>NOTE: The current implementation does not handle overlapping spans correctly, it will
|
||||||
|
* generate overlapping HTML tags that are invalid. In most cases this won't be a problem because:
|
||||||
|
*
|
||||||
|
* <ul>
|
||||||
|
* <li>Most subtitle formats use a tagged structure to carry formatting information (e.g. WebVTT
|
||||||
|
* and TTML), so the {@link Spanned} objects created by these decoders likely won't have
|
||||||
|
* overlapping spans.
|
||||||
|
* <li>WebView/Chromium (the intended destination of this HTML) gracefully handles overlapping
|
||||||
|
* tags and usually renders the same result as spanned text in a TextView.
|
||||||
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static String convert(@Nullable CharSequence text) {
|
public static String convert(@Nullable CharSequence text) {
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
|
|
|
||||||
|
|
@ -195,4 +195,23 @@ public class SpannedToHtmlConverterTest {
|
||||||
|
|
||||||
assertThat(html).isEqualTo("String with <i>italic and <b>bold</b></i> section");
|
assertThat(html).isEqualTo("String with <i>italic and <b>bold</b></i> section");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convert_overlappingSpans_producesInvalidHtml() {
|
||||||
|
SpannableString spanned = new SpannableString("String with italic and bold section");
|
||||||
|
spanned.setSpan(
|
||||||
|
new StyleSpan(Typeface.ITALIC),
|
||||||
|
0,
|
||||||
|
"String with italic and bold".length(),
|
||||||
|
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
spanned.setSpan(
|
||||||
|
new StyleSpan(Typeface.BOLD),
|
||||||
|
"String with italic ".length(),
|
||||||
|
"String with italic and bold section".length(),
|
||||||
|
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
|
||||||
|
String html = SpannedToHtmlConverter.convert(spanned);
|
||||||
|
|
||||||
|
assertThat(html).isEqualTo("<i>String with italic <b>and bold</i> section</b>");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue