From baba6fcc79e1bee5727be37755da57dee91d2ea4 Mon Sep 17 00:00:00 2001 From: Alvaro Velad Date: Mon, 10 Jan 2022 11:28:54 +0100 Subject: [PATCH 1/2] Fix TTML - font-size is not applied in nested cues --- lib/text/ttml_text_parser.js | 21 +++++++++-- test/text/ttml_text_parser_unit.js | 60 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/lib/text/ttml_text_parser.js b/lib/text/ttml_text_parser.js index d652050374..01711041dd 100644 --- a/lib/text/ttml_text_parser.js +++ b/lib/text/ttml_text_parser.js @@ -154,7 +154,8 @@ shaka.text.TtmlTextParser = class { const cue = TtmlTextParser.parseCue_( p, time.periodStart, rateInfo, metadataElements, styles, regionElements, cueRegions, whitespaceTrim, - /* isNested= */ false, cellResolutionInfo); + /* isNested= */ false, cellResolutionInfo, + /* parentCueElement= */ null); if (cue) { cues.push(cue); } @@ -164,7 +165,8 @@ shaka.text.TtmlTextParser = class { const cue = TtmlTextParser.parseCue_( div, time.periodStart, rateInfo, metadataElements, styles, regionElements, cueRegions, whitespaceTrim, - /* isNested= */ false, cellResolutionInfo); + /* isNested= */ false, cellResolutionInfo, + /* parentCueElement= */ null); if (cue) { cues.push(cue); } @@ -188,12 +190,13 @@ shaka.text.TtmlTextParser = class { * @param {boolean} whitespaceTrim * @param {boolean} isNested * @param {?{columns: number, rows: number}} cellResolution + * @param {?Element} parentCueElement * @return {shaka.text.Cue} * @private */ static parseCue_( cueNode, offset, rateInfo, metadataElements, styles, regionElements, - cueRegions, whitespaceTrim, isNested, cellResolution) { + cueRegions, whitespaceTrim, isNested, cellResolution, parentCueElement) { /** @type {Element} */ let cueElement; /** @type {Element} */ @@ -245,6 +248,7 @@ shaka.text.TtmlTextParser = class { localWhitespaceTrim, /* isNested= */ true, cellResolution, + cueElement, ); // This node may or may not generate a nested cue. @@ -358,10 +362,19 @@ shaka.text.TtmlTextParser = class { const isLeaf = nestedCues.length == 0; + let regionElementForStyle = regionElement; + if (parentCueElement && isNested && !cueElement.getAttribute('region') && + !cueElement.getAttribute('style')) { + regionElementForStyle = + shaka.text.TtmlTextParser.getElementsFromCollection_( + parentCueElement, 'region', regionElements, /* prefix= */ '')[0]; + } + + shaka.text.TtmlTextParser.addStyle_( cue, cueElement, - regionElement, + regionElementForStyle, imageElement, styles, isNested, diff --git a/test/text/ttml_text_parser_unit.js b/test/text/ttml_text_parser_unit.js index a20c3ca67a..ddd8e62d98 100644 --- a/test/text/ttml_text_parser_unit.js +++ b/test/text/ttml_text_parser_unit.js @@ -1702,6 +1702,66 @@ describe('TtmlTextParser', () => { {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); + // Regression test for https://github.com/google/shaka-player/issues/3743 + it('inherits styles from other styles on nestedCues', () => { + verifyHelper( + [ + { + // p element + startTime: 0, + endTime: 60, + payload: '', + fontSize: '', + nestedCues: [ + { + startTime: 0, + endTime: 60, + payload: 'A', + fontSize: '16px', + }, + { + startTime: 0, + endTime: 60, + payload: '', + fontSize: '', + }, + { + startTime: 0, + endTime: 60, + payload: 'B', + fontSize: '16px', + }, + ], + }, + ], + '' + + '' + + ' ' + + '