shaka-player 3.2.0 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build_and_test.yaml +73 -0
- package/.github/workflows/release.yaml +53 -0
- package/AUTHORS +3 -0
- package/CHANGELOG.md +182 -1
- package/CONTRIBUTORS +3 -0
- package/README.md +4 -4
- package/build/checkversion.py +1 -1
- package/build/generateExterns.js +1 -1
- package/build/misspellings.txt +1 -0
- package/build/shakaBuildHelpers.py +6 -5
- package/build/subprocessWindowsPatch.py +103 -0
- package/build/test.py +6 -0
- package/demo/common/assets.js +1 -1
- package/demo/index.html +1 -1
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +1 -1
- package/dist/demo.compiled.js +1 -1
- package/dist/deps.js +8 -8
- package/dist/locales.js +37 -37
- package/dist/receiver.compiled.debug.js +1 -1
- package/dist/receiver.compiled.js +1 -1
- package/dist/shaka-player.compiled.d.ts +195 -5
- package/dist/shaka-player.compiled.debug.d.ts +195 -5
- package/dist/shaka-player.compiled.debug.externs.js +226 -14
- package/dist/shaka-player.compiled.debug.js +424 -399
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +226 -14
- package/dist/shaka-player.compiled.js +826 -812
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +197 -16
- package/dist/shaka-player.ui.debug.d.ts +197 -16
- package/dist/shaka-player.ui.debug.externs.js +230 -27
- package/dist/shaka-player.ui.debug.js +466 -442
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +230 -27
- package/dist/shaka-player.ui.js +946 -932
- package/dist/shaka-player.ui.map +4 -4
- package/docs/tutorials/fairplay.md +1 -1
- package/docs/tutorials/faq.md +14 -0
- package/docs/tutorials/ui.md +5 -5
- package/externs/ima.js +4 -0
- package/externs/shaka/ads.js +25 -0
- package/externs/shaka/player.js +8 -0
- package/externs/shaka/text.js +10 -0
- package/karma.conf.js +20 -15
- package/lib/ads/ad_manager.js +46 -26
- package/lib/ads/client_side_ad_manager.js +82 -88
- package/lib/ads/server_side_ad_manager.js +45 -13
- package/lib/cast/cast_proxy.js +6 -2
- package/lib/cast/cast_receiver.js +5 -1
- package/lib/cast/cast_sender.js +2 -2
- package/lib/cea/sei_processor.js +24 -17
- package/lib/dash/dash_parser.js +131 -24
- package/lib/dash/segment_list.js +1 -1
- package/lib/dash/segment_template.js +1 -1
- package/lib/hls/hls_parser.js +74 -17
- package/lib/hls/manifest_text_parser.js +1 -0
- package/lib/media/closed_caption_parser.js +3 -1
- package/lib/media/content_workarounds.js +12 -0
- package/lib/media/drm_engine.js +20 -1
- package/lib/media/gap_jumping_controller.js +8 -4
- package/lib/media/media_source_engine.js +1 -2
- package/lib/media/playhead.js +1 -1
- package/lib/media/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- package/lib/media/segment_index.js +2 -1
- package/lib/media/segment_reference.js +19 -1
- package/lib/media/streaming_engine.js +8 -4
- package/lib/net/networking_engine.js +6 -1
- package/lib/offline/download_manager.js +1 -2
- package/lib/offline/storage.js +8 -9
- package/lib/player.js +129 -59
- package/lib/polyfill/aria.js +12 -2
- package/lib/polyfill/encryption_scheme.js +2 -0
- package/lib/polyfill/fullscreen.js +2 -0
- package/lib/polyfill/mathround.js +2 -0
- package/lib/polyfill/media_capabilities.js +73 -21
- package/lib/polyfill/mediasource.js +8 -0
- package/lib/polyfill/orientation.js +3 -1
- package/lib/polyfill/patchedmediakeys_apple.js +6 -4
- package/lib/polyfill/patchedmediakeys_ms.js +6 -4
- package/lib/polyfill/patchedmediakeys_nop.js +2 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +6 -4
- package/lib/polyfill/pip_webkit.js +2 -0
- package/lib/polyfill/storage_estimate.js +2 -0
- package/lib/polyfill/video_play_promise.js +2 -0
- package/lib/polyfill/videoplaybackquality.js +2 -0
- package/lib/polyfill/vttcue.js +2 -0
- package/lib/text/cue.js +6 -0
- package/lib/text/mp4_ttml_parser.js +3 -0
- package/lib/text/text_engine.js +14 -2
- package/lib/text/ttml_text_parser.js +135 -87
- package/lib/text/ui_text_displayer.js +213 -80
- package/lib/text/vtt_text_parser.js +4 -2
- package/lib/text/web_vtt_generator.js +21 -12
- package/lib/util/fake_event.js +53 -7
- package/lib/util/fake_event_target.js +21 -1
- package/lib/util/mp4_box_parsers.js +1 -1
- package/lib/util/periods.js +4 -1
- package/lib/util/platform.js +13 -1
- package/lib/util/stream_utils.js +105 -13
- package/lib/util/xml_utils.js +50 -12
- package/package.json +3 -6
- package/roadmap.md +24 -22
- package/test/cast/cast_proxy_unit.js +12 -6
- package/test/cast/cast_receiver_integration.js +1 -1
- package/test/cast/cast_utils_unit.js +1 -1
- package/test/cea/mp4_cea_parser_unit.js +26 -0
- package/test/dash/dash_parser_live_unit.js +43 -0
- package/test/dash/dash_parser_manifest_unit.js +222 -3
- package/test/hls/hls_parser_unit.js +79 -1
- package/test/media/closed_caption_parser_unit.js +20 -0
- package/test/media/drm_engine_integration.js +86 -2
- package/test/media/drm_engine_unit.js +57 -0
- package/test/media/playhead_unit.js +27 -1
- package/test/media/region_observer_unit.js +40 -5
- package/test/media/region_timeline_unit.js +40 -22
- package/test/media/streaming_engine_integration.js +2 -1
- package/test/media/streaming_engine_unit.js +145 -0
- package/test/player_integration.js +79 -8
- package/test/player_src_equals_integration.js +41 -8
- package/test/player_unit.js +14 -4
- package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
- package/test/test/assets/3675/dash_0.mpd +30 -0
- package/test/test/assets/3675/dash_1.mpd +30 -0
- package/test/test/assets/3675/dash_2.mpd +30 -0
- package/test/test/assets/3675/dash_3.mpd +30 -0
- package/test/test/assets/3675/dash_4.mpd +30 -0
- package/test/test/assets/3675/dash_5.mpd +26 -0
- package/test/test/assets/3675/init-stream0.m4s +0 -0
- package/test/test/assets/chapters.vtt +2 -2
- package/test/test/assets/chapters2.vtt +10 -0
- package/test/test/assets/empty_caption_video_init.mp4 +0 -0
- package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
- package/test/test/util/fake_ad_manager.js +11 -1
- package/test/test/util/ttml_utils.js +81 -0
- package/test/test/util/util.js +10 -7
- package/test/text/mp4_ttml_parser_unit.js +11 -18
- package/test/text/ttml_text_parser_unit.js +542 -220
- package/test/text/ui_text_displayer_unit.js +93 -20
- package/test/text/vtt_text_parser_unit.js +17 -1
- package/test/text/web_vtt_generator_unit.js +58 -3
- package/test/ui/localization_unit.js +15 -14
- package/test/ui/text_displayer_layout_unit.js +21 -8
- package/test/util/mp4_box_parsers_unit.js +28 -0
- package/test/util/stream_utils_unit.js +60 -3
- package/ui/cast_button.js +2 -3
- package/ui/controls.js +11 -6
- package/ui/less/buttons.less +0 -4
- package/ui/less/containers.less +6 -7
- package/ui/locales/ru.json +6 -6
- package/ui/localization.js +40 -87
- package/ui/pip_button.js +2 -3
- package/ui/seek_bar.js +1 -2
- package/ui/text_selection.js +1 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
goog.require('shaka.test.TtmlUtils');
|
|
7
8
|
goog.require('shaka.test.Util');
|
|
8
9
|
goog.require('shaka.text.Cue');
|
|
9
10
|
goog.require('shaka.text.CueRegion');
|
|
@@ -21,20 +22,23 @@ describe('TtmlTextParser', () => {
|
|
|
21
22
|
it('supports no cues', () => {
|
|
22
23
|
verifyHelper([],
|
|
23
24
|
'<tt></tt>',
|
|
24
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
25
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
26
|
+
{});
|
|
25
27
|
});
|
|
26
28
|
|
|
27
29
|
it('supports empty text string', () => {
|
|
28
30
|
verifyHelper([],
|
|
29
31
|
'',
|
|
30
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
32
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
33
|
+
{});
|
|
31
34
|
});
|
|
32
35
|
|
|
33
36
|
it('supports div with no cues but whitespace', () => {
|
|
34
37
|
verifyHelper(
|
|
35
38
|
[],
|
|
36
39
|
'<tt><body><div> \r\n </div></body></tt>',
|
|
37
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
40
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
41
|
+
{});
|
|
38
42
|
});
|
|
39
43
|
|
|
40
44
|
it('supports xml:space', () => {
|
|
@@ -60,7 +64,8 @@ describe('TtmlTextParser', () => {
|
|
|
60
64
|
},
|
|
61
65
|
],
|
|
62
66
|
'<tt xml:space="default">' + ttBody + '</tt>',
|
|
63
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
67
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
68
|
+
{startTime: 62.03, endTime: 62.05});
|
|
64
69
|
// When xml:space="preserve", take them into account.
|
|
65
70
|
verifyHelper(
|
|
66
71
|
[
|
|
@@ -85,7 +90,8 @@ describe('TtmlTextParser', () => {
|
|
|
85
90
|
},
|
|
86
91
|
],
|
|
87
92
|
'<tt xml:space="preserve">' + ttBody + '</tt>',
|
|
88
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
93
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
94
|
+
{startTime: 62.03, endTime: 62.05});
|
|
89
95
|
// The default value for xml:space is "default".
|
|
90
96
|
verifyHelper(
|
|
91
97
|
[
|
|
@@ -100,7 +106,8 @@ describe('TtmlTextParser', () => {
|
|
|
100
106
|
},
|
|
101
107
|
],
|
|
102
108
|
'<tt>' + ttBody + '</tt>',
|
|
103
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
109
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
110
|
+
{startTime: 62.03, endTime: 62.05});
|
|
104
111
|
|
|
105
112
|
// Any other value is rejected as an error.
|
|
106
113
|
errorHelper(shaka.util.Error.Code.INVALID_XML,
|
|
@@ -130,7 +137,8 @@ describe('TtmlTextParser', () => {
|
|
|
130
137
|
},
|
|
131
138
|
],
|
|
132
139
|
'<tt>' + ttBody + '</tt>',
|
|
133
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
140
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
141
|
+
{startTime: 62.03, endTime: 62.05});
|
|
134
142
|
});
|
|
135
143
|
|
|
136
144
|
it('rejects invalid ttml', () => {
|
|
@@ -199,7 +207,8 @@ describe('TtmlTextParser', () => {
|
|
|
199
207
|
'<span>First cue</span><br /><span>Second cue</span>' +
|
|
200
208
|
'</p>' +
|
|
201
209
|
'</div></body></tt>',
|
|
202
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
210
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
211
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
203
212
|
});
|
|
204
213
|
|
|
205
214
|
it('supports anonymous spans as nestedCues of paragraphs', () => {
|
|
@@ -234,7 +243,8 @@ describe('TtmlTextParser', () => {
|
|
|
234
243
|
'First cue<br />Second cue' +
|
|
235
244
|
'</p>' +
|
|
236
245
|
'</div></body></tt>',
|
|
237
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
246
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
247
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
238
248
|
});
|
|
239
249
|
|
|
240
250
|
it('supports multiple levels of nestedCues', () => {
|
|
@@ -292,7 +302,57 @@ describe('TtmlTextParser', () => {
|
|
|
292
302
|
'</span>' +
|
|
293
303
|
'</p>' +
|
|
294
304
|
'</div></body></tt>',
|
|
295
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
305
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
306
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it('inherits timing information of nested cues if unprovided', () => {
|
|
310
|
+
verifyHelper(
|
|
311
|
+
[
|
|
312
|
+
{
|
|
313
|
+
startTime: 62.05,
|
|
314
|
+
endTime: 3723.2,
|
|
315
|
+
nestedCues: [
|
|
316
|
+
{startTime: 62.05, endTime: 3723.2, payload: 'Test'},
|
|
317
|
+
],
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
'<tt><body>' +
|
|
321
|
+
'<div><p begin="01:02.05" end="01:02:03.200">' +
|
|
322
|
+
'<span>Test</span></p></div>' +
|
|
323
|
+
'</body></tt>',
|
|
324
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
325
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('does not discard cues with image subcues', () => {
|
|
329
|
+
verifyHelper(
|
|
330
|
+
[
|
|
331
|
+
{
|
|
332
|
+
startTime: 62.05,
|
|
333
|
+
endTime: 3723.2,
|
|
334
|
+
nestedCues: [
|
|
335
|
+
{
|
|
336
|
+
startTime: 62.05,
|
|
337
|
+
endTime: 3723.2,
|
|
338
|
+
payload: '',
|
|
339
|
+
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
340
|
+
},
|
|
341
|
+
],
|
|
342
|
+
},
|
|
343
|
+
],
|
|
344
|
+
'<tt ' +
|
|
345
|
+
'xmlns:ttm="http://www.w3.org/ns/ttml#metadata" ' +
|
|
346
|
+
'xmlns:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt">' +
|
|
347
|
+
'<metadata>' +
|
|
348
|
+
'<smpte:image imageType="PNG" encoding="Base64" xml:id="img_0">' +
|
|
349
|
+
'base64EncodedImage</smpte:image>' +
|
|
350
|
+
'</metadata><body><div>' +
|
|
351
|
+
'<p><div begin="01:02.05" end="01:02:03.200" ' +
|
|
352
|
+
'smpte:backgroundImage="#img_0"></div></p>' +
|
|
353
|
+
'</div></body></tt>',
|
|
354
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
355
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
296
356
|
});
|
|
297
357
|
|
|
298
358
|
it('supports colon formatted time', () => {
|
|
@@ -303,7 +363,8 @@ describe('TtmlTextParser', () => {
|
|
|
303
363
|
'<tt><body><div>' +
|
|
304
364
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
305
365
|
'</div></body></tt>',
|
|
306
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
366
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
367
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
307
368
|
});
|
|
308
369
|
|
|
309
370
|
it('accounts for offset', () => {
|
|
@@ -314,7 +375,8 @@ describe('TtmlTextParser', () => {
|
|
|
314
375
|
'<tt><body><div>' +
|
|
315
376
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
316
377
|
'</div></body></tt>',
|
|
317
|
-
{periodStart: 7, segmentStart: 0, segmentEnd: 0}
|
|
378
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0},
|
|
379
|
+
{startTime: 69.05, endTime: 3730.2});
|
|
318
380
|
});
|
|
319
381
|
|
|
320
382
|
it('supports nested cues with an offset', () => {
|
|
@@ -336,7 +398,8 @@ describe('TtmlTextParser', () => {
|
|
|
336
398
|
'<tt><body><div>' +
|
|
337
399
|
'<p begin="01:02.05" end="01:02:03.200"><span>Nested cue</span></p>' +
|
|
338
400
|
'</div></body></tt>',
|
|
339
|
-
{periodStart: 7, segmentStart: 0, segmentEnd: 0}
|
|
401
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0},
|
|
402
|
+
{startTime: 69.05, endTime: 3730.2});
|
|
340
403
|
});
|
|
341
404
|
|
|
342
405
|
it('supports time in 0.00h 0.00m 0.00s format', () => {
|
|
@@ -347,7 +410,8 @@ describe('TtmlTextParser', () => {
|
|
|
347
410
|
'<tt><body><div>' +
|
|
348
411
|
'<p begin="59.45m30ms" end="1.5h2.3s">Test</p>' +
|
|
349
412
|
'</div></body></tt>',
|
|
350
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
413
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
414
|
+
{startTime: 3567.03, endTime: 5402.3});
|
|
351
415
|
});
|
|
352
416
|
|
|
353
417
|
it('supports time with frame rate', () => {
|
|
@@ -360,7 +424,8 @@ describe('TtmlTextParser', () => {
|
|
|
360
424
|
'<body><div>' +
|
|
361
425
|
'<p begin="00:10:15:15" end="00:11:02:30">Test</p>' +
|
|
362
426
|
'</div></body></tt>',
|
|
363
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
427
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
428
|
+
{startTime: 615.5, endTime: 663});
|
|
364
429
|
});
|
|
365
430
|
|
|
366
431
|
it('supports time with frame rate multiplier', () => {
|
|
@@ -373,7 +438,8 @@ describe('TtmlTextParser', () => {
|
|
|
373
438
|
'<body><div>' +
|
|
374
439
|
'<p begin="00:10:15:15" end="00:11:02:30">Test</p>' +
|
|
375
440
|
'</div></body></tt>',
|
|
376
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
441
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
442
|
+
{startTime: 615.5, endTime: 663});
|
|
377
443
|
});
|
|
378
444
|
|
|
379
445
|
it('supports time with subframes', () => {
|
|
@@ -390,7 +456,8 @@ describe('TtmlTextParser', () => {
|
|
|
390
456
|
'<body><div>' +
|
|
391
457
|
'<p begin="00:10:15:15.1" end="00:11:02:29.2">Test</p>' +
|
|
392
458
|
'</div></body></tt>',
|
|
393
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
459
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
460
|
+
{startTime: Util.closeTo(615.5 + 1 / 60), endTime: 663});
|
|
394
461
|
});
|
|
395
462
|
|
|
396
463
|
it('supports time in frame format', () => {
|
|
@@ -403,7 +470,8 @@ describe('TtmlTextParser', () => {
|
|
|
403
470
|
'<body><div>' +
|
|
404
471
|
'<p begin="75f" end="300.3f">Test</p>' +
|
|
405
472
|
'</div></body></tt>',
|
|
406
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
473
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
474
|
+
{startTime: 2.5, endTime: Util.closeTo(10.01)});
|
|
407
475
|
});
|
|
408
476
|
|
|
409
477
|
it('supports time in tick format', () => {
|
|
@@ -416,7 +484,8 @@ describe('TtmlTextParser', () => {
|
|
|
416
484
|
'<body><div>' +
|
|
417
485
|
'<p begin="50t" end="60.2t">Test</p>' +
|
|
418
486
|
'</div></body></tt>',
|
|
419
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
487
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
488
|
+
{startTime: 5, endTime: Util.closeTo(6.02)});
|
|
420
489
|
});
|
|
421
490
|
|
|
422
491
|
it('supports time with duration', () => {
|
|
@@ -427,7 +496,39 @@ describe('TtmlTextParser', () => {
|
|
|
427
496
|
'<tt><body><div>' +
|
|
428
497
|
'<p begin="01:02.05" dur="5s">Test</p>' +
|
|
429
498
|
'</div></body></tt>',
|
|
430
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
499
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
500
|
+
{startTime: 62.05, endTime: 67.05});
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it('supports comments in the body', () => {
|
|
504
|
+
verifyHelper(
|
|
505
|
+
[],
|
|
506
|
+
'<tt><body><div>' +
|
|
507
|
+
'<!-- text-based TTML -->' +
|
|
508
|
+
'</div></body></tt>',
|
|
509
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
510
|
+
{});
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
it('does not inherit regions', () => {
|
|
514
|
+
verifyHelper(
|
|
515
|
+
[
|
|
516
|
+
{
|
|
517
|
+
startTime: 62.05,
|
|
518
|
+
endTime: 3723.2,
|
|
519
|
+
payload: 'Test',
|
|
520
|
+
},
|
|
521
|
+
],
|
|
522
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
523
|
+
'<layout>' +
|
|
524
|
+
'<region xml:id="subtitleArea" />' +
|
|
525
|
+
'</layout>' +
|
|
526
|
+
'<body region="subtitleArea"><div>' +
|
|
527
|
+
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
528
|
+
'</div></body></tt>',
|
|
529
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
530
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
531
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
431
532
|
});
|
|
432
533
|
|
|
433
534
|
it('parses alignment from textAlign attribute of a region', () => {
|
|
@@ -447,7 +548,9 @@ describe('TtmlTextParser', () => {
|
|
|
447
548
|
'<body region="subtitleArea"><div>' +
|
|
448
549
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
449
550
|
'</div></body></tt>',
|
|
450
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
551
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
552
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
553
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
451
554
|
});
|
|
452
555
|
|
|
453
556
|
it('allows non-standard namespace names', () => {
|
|
@@ -467,7 +570,9 @@ describe('TtmlTextParser', () => {
|
|
|
467
570
|
'<body region="subtitleArea"><div>' +
|
|
468
571
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
469
572
|
'</div></body></tt>',
|
|
470
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
573
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
574
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
575
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
471
576
|
});
|
|
472
577
|
|
|
473
578
|
it('parses alignment from <style> block with id on region', () => {
|
|
@@ -490,7 +595,9 @@ describe('TtmlTextParser', () => {
|
|
|
490
595
|
'<body region="subtitleArea"><div>' +
|
|
491
596
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
492
597
|
'</div></body></tt>',
|
|
493
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
598
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
599
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
600
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
494
601
|
});
|
|
495
602
|
|
|
496
603
|
it('parses alignment from <style> block with id on p', () => {
|
|
@@ -513,7 +620,9 @@ describe('TtmlTextParser', () => {
|
|
|
513
620
|
'<body region="subtitleArea"><div>' +
|
|
514
621
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
515
622
|
'</div></body></tt>',
|
|
516
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
623
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
624
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
625
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
517
626
|
});
|
|
518
627
|
|
|
519
628
|
it('supports region settings for horizontal text', () => {
|
|
@@ -523,13 +632,6 @@ describe('TtmlTextParser', () => {
|
|
|
523
632
|
startTime: 62.05,
|
|
524
633
|
endTime: 3723.2,
|
|
525
634
|
payload: 'Test',
|
|
526
|
-
region: {
|
|
527
|
-
id: 'subtitleArea',
|
|
528
|
-
viewportAnchorX: 50,
|
|
529
|
-
viewportAnchorY: 16,
|
|
530
|
-
width: 100,
|
|
531
|
-
height: 100,
|
|
532
|
-
},
|
|
533
635
|
},
|
|
534
636
|
],
|
|
535
637
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -539,7 +641,18 @@ describe('TtmlTextParser', () => {
|
|
|
539
641
|
'<body region="subtitleArea"><div>' +
|
|
540
642
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
541
643
|
'</div></body></tt>',
|
|
542
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
644
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
645
|
+
{
|
|
646
|
+
region: {
|
|
647
|
+
id: 'subtitleArea',
|
|
648
|
+
viewportAnchorX: 50,
|
|
649
|
+
viewportAnchorY: 16,
|
|
650
|
+
width: 100,
|
|
651
|
+
height: 100,
|
|
652
|
+
},
|
|
653
|
+
startTime: 62.05,
|
|
654
|
+
endTime: 3723.2,
|
|
655
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
543
656
|
|
|
544
657
|
verifyHelper(
|
|
545
658
|
[
|
|
@@ -547,12 +660,6 @@ describe('TtmlTextParser', () => {
|
|
|
547
660
|
startTime: 62.05,
|
|
548
661
|
endTime: 3723.2,
|
|
549
662
|
payload: 'Test',
|
|
550
|
-
region: {
|
|
551
|
-
viewportAnchorX: 50,
|
|
552
|
-
viewportAnchorY: 16,
|
|
553
|
-
width: 100,
|
|
554
|
-
height: 100,
|
|
555
|
-
},
|
|
556
663
|
},
|
|
557
664
|
],
|
|
558
665
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -563,7 +670,17 @@ describe('TtmlTextParser', () => {
|
|
|
563
670
|
'<body region="subtitleArea"><div>' +
|
|
564
671
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
565
672
|
'</div></body></tt>',
|
|
566
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
673
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
674
|
+
{
|
|
675
|
+
region: {
|
|
676
|
+
viewportAnchorX: 50,
|
|
677
|
+
viewportAnchorY: 16,
|
|
678
|
+
width: 100,
|
|
679
|
+
height: 100,
|
|
680
|
+
},
|
|
681
|
+
startTime: 62.05,
|
|
682
|
+
endTime: 3723.2,
|
|
683
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
567
684
|
|
|
568
685
|
verifyHelper(
|
|
569
686
|
[
|
|
@@ -571,12 +688,6 @@ describe('TtmlTextParser', () => {
|
|
|
571
688
|
startTime: 62.05,
|
|
572
689
|
endTime: 3723.2,
|
|
573
690
|
payload: 'Test',
|
|
574
|
-
region: {
|
|
575
|
-
viewportAnchorX: 50,
|
|
576
|
-
viewportAnchorY: 16,
|
|
577
|
-
width: 100,
|
|
578
|
-
height: 100,
|
|
579
|
-
},
|
|
580
691
|
},
|
|
581
692
|
],
|
|
582
693
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -587,7 +698,17 @@ describe('TtmlTextParser', () => {
|
|
|
587
698
|
'<body region="subtitleArea"><div>' +
|
|
588
699
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
589
700
|
'</div></body></tt>',
|
|
590
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
701
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
702
|
+
{
|
|
703
|
+
region: {
|
|
704
|
+
viewportAnchorX: 50,
|
|
705
|
+
viewportAnchorY: 16,
|
|
706
|
+
width: 100,
|
|
707
|
+
height: 100,
|
|
708
|
+
},
|
|
709
|
+
startTime: 62.05,
|
|
710
|
+
endTime: 3723.2,
|
|
711
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
591
712
|
});
|
|
592
713
|
|
|
593
714
|
it('supports region settings in pixels (origin)', () => {
|
|
@@ -597,19 +718,6 @@ describe('TtmlTextParser', () => {
|
|
|
597
718
|
startTime: 62.05,
|
|
598
719
|
endTime: 3723.2,
|
|
599
720
|
payload: 'Test',
|
|
600
|
-
region: {
|
|
601
|
-
id: 'subtitleArea',
|
|
602
|
-
viewportAnchorX: 50,
|
|
603
|
-
viewportAnchorY: 16,
|
|
604
|
-
regionAnchorX: 0,
|
|
605
|
-
regionAnchorY: 0,
|
|
606
|
-
width: 100,
|
|
607
|
-
height: 100,
|
|
608
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
609
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
610
|
-
viewportAnchorUnits: CueRegion.units.PX,
|
|
611
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
612
|
-
},
|
|
613
721
|
},
|
|
614
722
|
],
|
|
615
723
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -619,7 +727,24 @@ describe('TtmlTextParser', () => {
|
|
|
619
727
|
'<body region="subtitleArea"><div>' +
|
|
620
728
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
621
729
|
'</div></body></tt>',
|
|
622
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
730
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
731
|
+
{
|
|
732
|
+
region: {
|
|
733
|
+
id: 'subtitleArea',
|
|
734
|
+
viewportAnchorX: 50,
|
|
735
|
+
viewportAnchorY: 16,
|
|
736
|
+
regionAnchorX: 0,
|
|
737
|
+
regionAnchorY: 0,
|
|
738
|
+
width: 100,
|
|
739
|
+
height: 100,
|
|
740
|
+
heightUnits: CueRegion.units.PERCENTAGE,
|
|
741
|
+
widthUnits: CueRegion.units.PERCENTAGE,
|
|
742
|
+
viewportAnchorUnits: CueRegion.units.PX,
|
|
743
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
744
|
+
},
|
|
745
|
+
startTime: 62.05,
|
|
746
|
+
endTime: 3723.2,
|
|
747
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
623
748
|
});
|
|
624
749
|
|
|
625
750
|
it('supports region settings in pixels (extent)', () => {
|
|
@@ -629,19 +754,6 @@ describe('TtmlTextParser', () => {
|
|
|
629
754
|
startTime: 62.05,
|
|
630
755
|
endTime: 3723.2,
|
|
631
756
|
payload: 'Test',
|
|
632
|
-
region: {
|
|
633
|
-
id: 'subtitleArea',
|
|
634
|
-
viewportAnchorX: 0,
|
|
635
|
-
viewportAnchorY: 0,
|
|
636
|
-
regionAnchorX: 0,
|
|
637
|
-
regionAnchorY: 0,
|
|
638
|
-
width: 50,
|
|
639
|
-
height: 16,
|
|
640
|
-
heightUnits: CueRegion.units.PX,
|
|
641
|
-
widthUnits: CueRegion.units.PX,
|
|
642
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
643
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
644
|
-
},
|
|
645
757
|
},
|
|
646
758
|
],
|
|
647
759
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -651,7 +763,24 @@ describe('TtmlTextParser', () => {
|
|
|
651
763
|
'<body region="subtitleArea"><div>' +
|
|
652
764
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
653
765
|
'</div></body></tt>',
|
|
654
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
766
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
767
|
+
{
|
|
768
|
+
region: {
|
|
769
|
+
id: 'subtitleArea',
|
|
770
|
+
viewportAnchorX: 0,
|
|
771
|
+
viewportAnchorY: 0,
|
|
772
|
+
regionAnchorX: 0,
|
|
773
|
+
regionAnchorY: 0,
|
|
774
|
+
width: 50,
|
|
775
|
+
height: 16,
|
|
776
|
+
heightUnits: CueRegion.units.PX,
|
|
777
|
+
widthUnits: CueRegion.units.PX,
|
|
778
|
+
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
779
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
780
|
+
},
|
|
781
|
+
startTime: 62.05,
|
|
782
|
+
endTime: 3723.2,
|
|
783
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
655
784
|
});
|
|
656
785
|
|
|
657
786
|
it('supports region settings in pixels: origin (with global extent)', () => {
|
|
@@ -661,19 +790,6 @@ describe('TtmlTextParser', () => {
|
|
|
661
790
|
startTime: 62.05,
|
|
662
791
|
endTime: 3723.2,
|
|
663
792
|
payload: 'Test',
|
|
664
|
-
region: {
|
|
665
|
-
id: 'subtitleArea',
|
|
666
|
-
viewportAnchorX: 10,
|
|
667
|
-
viewportAnchorY: 10,
|
|
668
|
-
regionAnchorX: 0,
|
|
669
|
-
regionAnchorY: 0,
|
|
670
|
-
width: 100,
|
|
671
|
-
height: 100,
|
|
672
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
673
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
674
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
675
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
676
|
-
},
|
|
677
793
|
},
|
|
678
794
|
],
|
|
679
795
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" tts:extent="1920px 1080px">' +
|
|
@@ -683,7 +799,24 @@ describe('TtmlTextParser', () => {
|
|
|
683
799
|
'<body region="subtitleArea"><div>' +
|
|
684
800
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
685
801
|
'</div></body></tt>',
|
|
686
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
802
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
803
|
+
{
|
|
804
|
+
region: {
|
|
805
|
+
id: 'subtitleArea',
|
|
806
|
+
viewportAnchorX: 10,
|
|
807
|
+
viewportAnchorY: 10,
|
|
808
|
+
regionAnchorX: 0,
|
|
809
|
+
regionAnchorY: 0,
|
|
810
|
+
width: 100,
|
|
811
|
+
height: 100,
|
|
812
|
+
heightUnits: CueRegion.units.PERCENTAGE,
|
|
813
|
+
widthUnits: CueRegion.units.PERCENTAGE,
|
|
814
|
+
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
815
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
816
|
+
},
|
|
817
|
+
startTime: 62.05,
|
|
818
|
+
endTime: 3723.2,
|
|
819
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
687
820
|
});
|
|
688
821
|
|
|
689
822
|
it('supports region settings in pixels: extent (with global extent)', () => {
|
|
@@ -693,19 +826,6 @@ describe('TtmlTextParser', () => {
|
|
|
693
826
|
startTime: 62.05,
|
|
694
827
|
endTime: 3723.2,
|
|
695
828
|
payload: 'Test',
|
|
696
|
-
region: {
|
|
697
|
-
id: 'subtitleArea',
|
|
698
|
-
viewportAnchorX: 0,
|
|
699
|
-
viewportAnchorY: 0,
|
|
700
|
-
regionAnchorX: 0,
|
|
701
|
-
regionAnchorY: 0,
|
|
702
|
-
width: 30,
|
|
703
|
-
height: 30,
|
|
704
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
705
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
706
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
707
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
708
|
-
},
|
|
709
829
|
},
|
|
710
830
|
],
|
|
711
831
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" tts:extent="1920px 1080px">' +
|
|
@@ -716,7 +836,24 @@ describe('TtmlTextParser', () => {
|
|
|
716
836
|
'<body region="subtitleArea"><div>' +
|
|
717
837
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
718
838
|
'</div></body></tt>',
|
|
719
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
839
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
840
|
+
{
|
|
841
|
+
region: {
|
|
842
|
+
id: 'subtitleArea',
|
|
843
|
+
viewportAnchorX: 0,
|
|
844
|
+
viewportAnchorY: 0,
|
|
845
|
+
regionAnchorX: 0,
|
|
846
|
+
regionAnchorY: 0,
|
|
847
|
+
width: 30,
|
|
848
|
+
height: 30,
|
|
849
|
+
heightUnits: CueRegion.units.PERCENTAGE,
|
|
850
|
+
widthUnits: CueRegion.units.PERCENTAGE,
|
|
851
|
+
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
852
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
853
|
+
},
|
|
854
|
+
startTime: 62.05,
|
|
855
|
+
endTime: 3723.2,
|
|
856
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
720
857
|
});
|
|
721
858
|
|
|
722
859
|
it('supports region settings in percentage (origin)', () => {
|
|
@@ -726,29 +863,34 @@ describe('TtmlTextParser', () => {
|
|
|
726
863
|
startTime: 62.05,
|
|
727
864
|
endTime: 3723.2,
|
|
728
865
|
payload: 'Test',
|
|
729
|
-
region: {
|
|
730
|
-
id: 'subtitleArea',
|
|
731
|
-
viewportAnchorX: 50,
|
|
732
|
-
viewportAnchorY: 16,
|
|
733
|
-
regionAnchorX: 0,
|
|
734
|
-
regionAnchorY: 0,
|
|
735
|
-
width: 100,
|
|
736
|
-
height: 100,
|
|
737
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
738
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
739
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
740
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
741
|
-
},
|
|
742
866
|
},
|
|
743
867
|
],
|
|
744
|
-
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling"
|
|
868
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" ' +
|
|
869
|
+
'tts:extent="1920px 1080px">' +
|
|
745
870
|
'<layout>' +
|
|
746
871
|
'<region xml:id="subtitleArea" tts:origin="50% 16%"/>' +
|
|
747
872
|
'</layout>' +
|
|
748
873
|
'<body region="subtitleArea"><div>' +
|
|
749
874
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
750
875
|
'</div></body></tt>',
|
|
751
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
876
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
877
|
+
{
|
|
878
|
+
region: {
|
|
879
|
+
id: 'subtitleArea',
|
|
880
|
+
viewportAnchorX: 50,
|
|
881
|
+
viewportAnchorY: 16,
|
|
882
|
+
regionAnchorX: 0,
|
|
883
|
+
regionAnchorY: 0,
|
|
884
|
+
width: 100,
|
|
885
|
+
height: 100,
|
|
886
|
+
heightUnits: CueRegion.units.PERCENTAGE,
|
|
887
|
+
widthUnits: CueRegion.units.PERCENTAGE,
|
|
888
|
+
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
889
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
890
|
+
},
|
|
891
|
+
startTime: 62.05,
|
|
892
|
+
endTime: 3723.2,
|
|
893
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
752
894
|
});
|
|
753
895
|
|
|
754
896
|
it('supports region settings in percentage (extent)', () => {
|
|
@@ -758,22 +900,10 @@ describe('TtmlTextParser', () => {
|
|
|
758
900
|
startTime: 62.05,
|
|
759
901
|
endTime: 3723.2,
|
|
760
902
|
payload: 'Test',
|
|
761
|
-
region: {
|
|
762
|
-
id: 'subtitleArea',
|
|
763
|
-
viewportAnchorX: 0,
|
|
764
|
-
viewportAnchorY: 0,
|
|
765
|
-
regionAnchorX: 0,
|
|
766
|
-
regionAnchorY: 0,
|
|
767
|
-
width: 50,
|
|
768
|
-
height: 16,
|
|
769
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
770
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
771
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
772
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
773
|
-
},
|
|
774
903
|
},
|
|
775
904
|
],
|
|
776
|
-
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling"
|
|
905
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" ' +
|
|
906
|
+
'tts:extent="1920px 1080px">' +
|
|
777
907
|
'<layout>' +
|
|
778
908
|
'<region xml:id="subtitleArea" tts:extent="50% 16%" ' +
|
|
779
909
|
'tts:writingMode="lrtb" />' +
|
|
@@ -781,7 +911,24 @@ describe('TtmlTextParser', () => {
|
|
|
781
911
|
'<body region="subtitleArea"><div>' +
|
|
782
912
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
783
913
|
'</div></body></tt>',
|
|
784
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
914
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
915
|
+
{
|
|
916
|
+
region: {
|
|
917
|
+
id: 'subtitleArea',
|
|
918
|
+
viewportAnchorX: 0,
|
|
919
|
+
viewportAnchorY: 0,
|
|
920
|
+
regionAnchorX: 0,
|
|
921
|
+
regionAnchorY: 0,
|
|
922
|
+
width: 50,
|
|
923
|
+
height: 16,
|
|
924
|
+
heightUnits: CueRegion.units.PERCENTAGE,
|
|
925
|
+
widthUnits: CueRegion.units.PERCENTAGE,
|
|
926
|
+
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
927
|
+
scroll: CueRegion.scrollMode.NONE,
|
|
928
|
+
},
|
|
929
|
+
startTime: 62.05,
|
|
930
|
+
endTime: 3723.2,
|
|
931
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
785
932
|
});
|
|
786
933
|
|
|
787
934
|
it('supports region settings for vertical text', () => {
|
|
@@ -791,13 +938,6 @@ describe('TtmlTextParser', () => {
|
|
|
791
938
|
startTime: 62.05,
|
|
792
939
|
endTime: 3723.2,
|
|
793
940
|
payload: 'Test',
|
|
794
|
-
region: {
|
|
795
|
-
id: 'subtitleArea',
|
|
796
|
-
viewportAnchorX: 50,
|
|
797
|
-
viewportAnchorY: 16,
|
|
798
|
-
width: 100,
|
|
799
|
-
height: 100,
|
|
800
|
-
},
|
|
801
941
|
},
|
|
802
942
|
],
|
|
803
943
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -808,7 +948,18 @@ describe('TtmlTextParser', () => {
|
|
|
808
948
|
'<body region="subtitleArea"><div>' +
|
|
809
949
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
810
950
|
'</div></body></tt>',
|
|
811
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
951
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
952
|
+
{
|
|
953
|
+
region: {
|
|
954
|
+
id: 'subtitleArea',
|
|
955
|
+
viewportAnchorX: 50,
|
|
956
|
+
viewportAnchorY: 16,
|
|
957
|
+
width: 100,
|
|
958
|
+
height: 100,
|
|
959
|
+
},
|
|
960
|
+
startTime: 62.05,
|
|
961
|
+
endTime: 3723.2,
|
|
962
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
812
963
|
|
|
813
964
|
verifyHelper(
|
|
814
965
|
[
|
|
@@ -816,12 +967,6 @@ describe('TtmlTextParser', () => {
|
|
|
816
967
|
startTime: 62.05,
|
|
817
968
|
endTime: 3723.2,
|
|
818
969
|
payload: 'Test',
|
|
819
|
-
region: {
|
|
820
|
-
viewportAnchorX: 50,
|
|
821
|
-
viewportAnchorY: 16,
|
|
822
|
-
width: 100,
|
|
823
|
-
height: 100,
|
|
824
|
-
},
|
|
825
970
|
},
|
|
826
971
|
],
|
|
827
972
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -832,7 +977,17 @@ describe('TtmlTextParser', () => {
|
|
|
832
977
|
'<body region="subtitleArea"><div>' +
|
|
833
978
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
834
979
|
'</div></body></tt>',
|
|
835
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
980
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
981
|
+
{
|
|
982
|
+
region: {
|
|
983
|
+
viewportAnchorX: 50,
|
|
984
|
+
viewportAnchorY: 16,
|
|
985
|
+
width: 100,
|
|
986
|
+
height: 100,
|
|
987
|
+
},
|
|
988
|
+
startTime: 62.05,
|
|
989
|
+
endTime: 3723.2,
|
|
990
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
836
991
|
|
|
837
992
|
verifyHelper(
|
|
838
993
|
[
|
|
@@ -840,12 +995,6 @@ describe('TtmlTextParser', () => {
|
|
|
840
995
|
startTime: 62.05,
|
|
841
996
|
endTime: 3723.2,
|
|
842
997
|
payload: 'Test',
|
|
843
|
-
region: {
|
|
844
|
-
viewportAnchorX: 50,
|
|
845
|
-
viewportAnchorY: 16,
|
|
846
|
-
width: 100,
|
|
847
|
-
height: 100,
|
|
848
|
-
},
|
|
849
998
|
},
|
|
850
999
|
],
|
|
851
1000
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -856,7 +1005,17 @@ describe('TtmlTextParser', () => {
|
|
|
856
1005
|
'<body region="subtitleArea"><div>' +
|
|
857
1006
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
858
1007
|
'</div></body></tt>',
|
|
859
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1008
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1009
|
+
{
|
|
1010
|
+
region: {
|
|
1011
|
+
viewportAnchorX: 50,
|
|
1012
|
+
viewportAnchorY: 16,
|
|
1013
|
+
width: 100,
|
|
1014
|
+
height: 100,
|
|
1015
|
+
},
|
|
1016
|
+
startTime: 62.05,
|
|
1017
|
+
endTime: 3723.2,
|
|
1018
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
860
1019
|
});
|
|
861
1020
|
|
|
862
1021
|
it('supports percentages containing decimals', () => {
|
|
@@ -866,13 +1025,6 @@ describe('TtmlTextParser', () => {
|
|
|
866
1025
|
startTime: 62.05,
|
|
867
1026
|
endTime: 3723.2,
|
|
868
1027
|
payload: 'Test',
|
|
869
|
-
region: {
|
|
870
|
-
id: 'subtitleArea',
|
|
871
|
-
viewportAnchorX: 12.2,
|
|
872
|
-
viewportAnchorY: 50.005,
|
|
873
|
-
width: 100,
|
|
874
|
-
height: 100,
|
|
875
|
-
},
|
|
876
1028
|
},
|
|
877
1029
|
],
|
|
878
1030
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -883,7 +1035,18 @@ describe('TtmlTextParser', () => {
|
|
|
883
1035
|
'<body region="subtitleArea"><div>' +
|
|
884
1036
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
885
1037
|
'</div></body></tt>',
|
|
886
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1038
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1039
|
+
{
|
|
1040
|
+
region: {
|
|
1041
|
+
id: 'subtitleArea',
|
|
1042
|
+
viewportAnchorX: 12.2,
|
|
1043
|
+
viewportAnchorY: 50.005,
|
|
1044
|
+
width: 100,
|
|
1045
|
+
height: 100,
|
|
1046
|
+
},
|
|
1047
|
+
startTime: 62.05,
|
|
1048
|
+
endTime: 3723.2,
|
|
1049
|
+
}, {startTime: 62.05, endTime: 3723.2});
|
|
887
1050
|
});
|
|
888
1051
|
|
|
889
1052
|
it('supports writingMode setting', () => {
|
|
@@ -904,7 +1067,9 @@ describe('TtmlTextParser', () => {
|
|
|
904
1067
|
'<body region="subtitleArea"><div>' +
|
|
905
1068
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
906
1069
|
'</div></body></tt>',
|
|
907
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1070
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1071
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1072
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
908
1073
|
|
|
909
1074
|
verifyHelper(
|
|
910
1075
|
[
|
|
@@ -923,7 +1088,9 @@ describe('TtmlTextParser', () => {
|
|
|
923
1088
|
'<body region="subtitleArea"><div>' +
|
|
924
1089
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
925
1090
|
'</div></body></tt>',
|
|
926
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1091
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1092
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1093
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
927
1094
|
|
|
928
1095
|
verifyHelper(
|
|
929
1096
|
[
|
|
@@ -942,7 +1109,9 @@ describe('TtmlTextParser', () => {
|
|
|
942
1109
|
'<body region="subtitleArea"><div>' +
|
|
943
1110
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
944
1111
|
'</div></body></tt>',
|
|
945
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1112
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1113
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1114
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
946
1115
|
|
|
947
1116
|
verifyHelper(
|
|
948
1117
|
[
|
|
@@ -961,7 +1130,9 @@ describe('TtmlTextParser', () => {
|
|
|
961
1130
|
'<body region="subtitleArea"><div>' +
|
|
962
1131
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
963
1132
|
'</div></body></tt>',
|
|
964
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1133
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1134
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1135
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
965
1136
|
|
|
966
1137
|
verifyHelper(
|
|
967
1138
|
[
|
|
@@ -980,7 +1151,9 @@ describe('TtmlTextParser', () => {
|
|
|
980
1151
|
'<body region="subtitleArea"><div>' +
|
|
981
1152
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
982
1153
|
'</div></body></tt>',
|
|
983
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1154
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1155
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1156
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
984
1157
|
});
|
|
985
1158
|
|
|
986
1159
|
it('disregards empty divs and ps', () => {
|
|
@@ -996,7 +1169,8 @@ describe('TtmlTextParser', () => {
|
|
|
996
1169
|
'<div></div>' +
|
|
997
1170
|
'</body>' +
|
|
998
1171
|
'</tt>',
|
|
999
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1172
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1173
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1000
1174
|
|
|
1001
1175
|
verifyHelper(
|
|
1002
1176
|
[
|
|
@@ -1010,7 +1184,8 @@ describe('TtmlTextParser', () => {
|
|
|
1010
1184
|
'</div>' +
|
|
1011
1185
|
'</body>' +
|
|
1012
1186
|
'</tt>',
|
|
1013
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1187
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1188
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1014
1189
|
|
|
1015
1190
|
verifyHelper(
|
|
1016
1191
|
[],
|
|
@@ -1022,7 +1197,8 @@ describe('TtmlTextParser', () => {
|
|
|
1022
1197
|
'<div></div>' +
|
|
1023
1198
|
'</body>' +
|
|
1024
1199
|
'</tt>',
|
|
1025
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1200
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1201
|
+
{});
|
|
1026
1202
|
});
|
|
1027
1203
|
|
|
1028
1204
|
it('should let empty paragraphs with begin or end attributes through', () => {
|
|
@@ -1038,7 +1214,8 @@ describe('TtmlTextParser', () => {
|
|
|
1038
1214
|
'</div>' +
|
|
1039
1215
|
'</body>' +
|
|
1040
1216
|
'</tt>',
|
|
1041
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1217
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1218
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1042
1219
|
});
|
|
1043
1220
|
|
|
1044
1221
|
it('supports smpte:backgroundImage attribute', () => {
|
|
@@ -1048,7 +1225,6 @@ describe('TtmlTextParser', () => {
|
|
|
1048
1225
|
startTime: 62.05,
|
|
1049
1226
|
endTime: 3723.2,
|
|
1050
1227
|
payload: '',
|
|
1051
|
-
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1052
1228
|
},
|
|
1053
1229
|
],
|
|
1054
1230
|
'<tt ' +
|
|
@@ -1061,19 +1237,19 @@ describe('TtmlTextParser', () => {
|
|
|
1061
1237
|
'<body><div smpte:backgroundImage="#img_0">' +
|
|
1062
1238
|
'<p begin="01:02.05" end="01:02:03.200"></p>' +
|
|
1063
1239
|
'</div></body></tt>',
|
|
1064
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1240
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1241
|
+
{startTime: 62.05, endTime: 3723.2},
|
|
1242
|
+
{
|
|
1243
|
+
startTime: 62.05,
|
|
1244
|
+
endTime: 3723.2,
|
|
1245
|
+
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1246
|
+
isContainer: false,
|
|
1247
|
+
});
|
|
1065
1248
|
});
|
|
1066
1249
|
|
|
1067
1250
|
it('supports smpte:backgroundImage attribute in div element', () => {
|
|
1068
1251
|
verifyHelper(
|
|
1069
|
-
[
|
|
1070
|
-
{
|
|
1071
|
-
startTime: 0,
|
|
1072
|
-
endTime: 62.05,
|
|
1073
|
-
payload: '',
|
|
1074
|
-
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1075
|
-
},
|
|
1076
|
-
],
|
|
1252
|
+
[],
|
|
1077
1253
|
'<tt ' +
|
|
1078
1254
|
'xmlns:ttm="http://www.w3.org/ns/ttml#metadata" ' +
|
|
1079
1255
|
'xmlns:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt">' +
|
|
@@ -1084,7 +1260,14 @@ describe('TtmlTextParser', () => {
|
|
|
1084
1260
|
'<body><div begin="00:00.00" end="01:02.05" '+
|
|
1085
1261
|
'smpte:backgroundImage="#img_0"></div>' +
|
|
1086
1262
|
'</body></tt>',
|
|
1087
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1263
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1264
|
+
{startTime: 0, endTime: 62.05},
|
|
1265
|
+
{
|
|
1266
|
+
startTime: 0,
|
|
1267
|
+
endTime: 62.05,
|
|
1268
|
+
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1269
|
+
isContainer: false,
|
|
1270
|
+
});
|
|
1088
1271
|
});
|
|
1089
1272
|
|
|
1090
1273
|
it('supports smpte:backgroundImage attribute alt namespace', () => {
|
|
@@ -1108,7 +1291,8 @@ describe('TtmlTextParser', () => {
|
|
|
1108
1291
|
'<p begin="01:02.05" end="01:02:03.200" ' +
|
|
1109
1292
|
'smpte:backgroundImage="#img_0" />' +
|
|
1110
1293
|
'</div></body></tt>',
|
|
1111
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1294
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1295
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1112
1296
|
});
|
|
1113
1297
|
|
|
1114
1298
|
it('inserts line breaks for <br> tags', () => {
|
|
@@ -1136,7 +1320,8 @@ describe('TtmlTextParser', () => {
|
|
|
1136
1320
|
'<tt><body><div>' +
|
|
1137
1321
|
'<p begin="01:02.05" end="01:02:03.200">Line1<br/>Line2</p>' +
|
|
1138
1322
|
'</div></body></tt>',
|
|
1139
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1323
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1324
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1140
1325
|
|
|
1141
1326
|
verifyHelper(
|
|
1142
1327
|
[{
|
|
@@ -1169,7 +1354,36 @@ describe('TtmlTextParser', () => {
|
|
|
1169
1354
|
'<span>Line1<br/>Line2</span>' +
|
|
1170
1355
|
'</p>' +
|
|
1171
1356
|
'</div></body></tt>',
|
|
1172
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1357
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1358
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1359
|
+
});
|
|
1360
|
+
|
|
1361
|
+
it('allows old-standard namespace', () => {
|
|
1362
|
+
verifyHelper(
|
|
1363
|
+
[
|
|
1364
|
+
{
|
|
1365
|
+
startTime: 1,
|
|
1366
|
+
endTime: 2,
|
|
1367
|
+
payload: 'Test',
|
|
1368
|
+
cellResolution: {
|
|
1369
|
+
columns: 60,
|
|
1370
|
+
rows: 20,
|
|
1371
|
+
},
|
|
1372
|
+
fontSize: '67%',
|
|
1373
|
+
},
|
|
1374
|
+
],
|
|
1375
|
+
'<tt ' +
|
|
1376
|
+
'xmlns:ttp="http://www.w3.org/2006/10/ttaf1#parameter" ' +
|
|
1377
|
+
'xmlns:tts="http://www.w3.org/2006/10/ttaf1#styling" ' +
|
|
1378
|
+
'ttp:cellResolution="60 20">' +
|
|
1379
|
+
'<styling>' +
|
|
1380
|
+
'<style xml:id="s1" tts:fontSize="67%"/>' +
|
|
1381
|
+
'</styling>' +
|
|
1382
|
+
'<body><div>' +
|
|
1383
|
+
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1384
|
+
'</div></body></tt>',
|
|
1385
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1386
|
+
{startTime: 1, endTime: 2});
|
|
1173
1387
|
});
|
|
1174
1388
|
|
|
1175
1389
|
it('parses cue alignment from textAlign attribute', () => {
|
|
@@ -1194,7 +1408,9 @@ describe('TtmlTextParser', () => {
|
|
|
1194
1408
|
'<body region="subtitleArea"><div>' +
|
|
1195
1409
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
1196
1410
|
'</div></body></tt>',
|
|
1197
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1411
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1412
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1413
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1198
1414
|
});
|
|
1199
1415
|
|
|
1200
1416
|
it('parses text style information', () => {
|
|
@@ -1237,7 +1453,9 @@ describe('TtmlTextParser', () => {
|
|
|
1237
1453
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1238
1454
|
'<p begin="00:02.00" end="00:04.00" style="s2">Test 2</p>' +
|
|
1239
1455
|
'</div></body></tt>',
|
|
1240
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1456
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1457
|
+
{startTime: 1, endTime: 4, region: {id: 'subtitleArea'}},
|
|
1458
|
+
{startTime: 1, endTime: 4});
|
|
1241
1459
|
});
|
|
1242
1460
|
|
|
1243
1461
|
// Regression test for #2623
|
|
@@ -1273,7 +1491,8 @@ describe('TtmlTextParser', () => {
|
|
|
1273
1491
|
'<span style="s1">Test</span>' +
|
|
1274
1492
|
'</p>' +
|
|
1275
1493
|
'</div></body></tt>',
|
|
1276
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1494
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1495
|
+
{startTime: 1, endTime: 2});
|
|
1277
1496
|
});
|
|
1278
1497
|
|
|
1279
1498
|
it('parses wrapping option', () => {
|
|
@@ -1296,7 +1515,9 @@ describe('TtmlTextParser', () => {
|
|
|
1296
1515
|
'<body region="subtitleArea"><div>' +
|
|
1297
1516
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
1298
1517
|
'</div></body></tt>',
|
|
1299
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1518
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1519
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1520
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1300
1521
|
});
|
|
1301
1522
|
|
|
1302
1523
|
it('parses text decoration', () => {
|
|
@@ -1322,7 +1543,9 @@ describe('TtmlTextParser', () => {
|
|
|
1322
1543
|
'<body region="subtitleArea"><div>' +
|
|
1323
1544
|
'<p begin="01:02.05" end="01:02:03.200" style="s2">Test</p>' +
|
|
1324
1545
|
'</div></body></tt>',
|
|
1325
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1546
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1547
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1548
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1326
1549
|
});
|
|
1327
1550
|
|
|
1328
1551
|
it('cues should have default cellResolution', () => {
|
|
@@ -1345,7 +1568,8 @@ describe('TtmlTextParser', () => {
|
|
|
1345
1568
|
'<body><div>' +
|
|
1346
1569
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1347
1570
|
'</div></body></tt>',
|
|
1348
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1571
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1572
|
+
{startTime: 1, endTime: 2});
|
|
1349
1573
|
});
|
|
1350
1574
|
|
|
1351
1575
|
it('parses cellResolution', () => {
|
|
@@ -1372,7 +1596,8 @@ describe('TtmlTextParser', () => {
|
|
|
1372
1596
|
'<body><div>' +
|
|
1373
1597
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1374
1598
|
'</div></body></tt>',
|
|
1375
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1599
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1600
|
+
{startTime: 1, endTime: 2});
|
|
1376
1601
|
});
|
|
1377
1602
|
|
|
1378
1603
|
it('parses line padding', () => {
|
|
@@ -1400,7 +1625,8 @@ describe('TtmlTextParser', () => {
|
|
|
1400
1625
|
'<body><div>' +
|
|
1401
1626
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1402
1627
|
'</div></body></tt>',
|
|
1403
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1628
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1629
|
+
{startTime: 1, endTime: 2});
|
|
1404
1630
|
});
|
|
1405
1631
|
|
|
1406
1632
|
it('chooses style on element over style on region', () => {
|
|
@@ -1424,7 +1650,9 @@ describe('TtmlTextParser', () => {
|
|
|
1424
1650
|
'<body region="subtitleArea"><div>' +
|
|
1425
1651
|
'<p begin="01:02.05" end="01:02:03.200" style="s2">Test</p>' +
|
|
1426
1652
|
'</div></body></tt>',
|
|
1427
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1653
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1654
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1655
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1428
1656
|
});
|
|
1429
1657
|
|
|
1430
1658
|
it('can parse multiple cues', () => {
|
|
@@ -1437,7 +1665,8 @@ describe('TtmlTextParser', () => {
|
|
|
1437
1665
|
'<p begin="00:01.00" end="00:02.00">First cue</p>' +
|
|
1438
1666
|
'<p begin="00:03.00" end="00:04.00">Second cue</p>' +
|
|
1439
1667
|
'</div></body></tt>',
|
|
1440
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1668
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1669
|
+
{startTime: 1, endTime: 4});
|
|
1441
1670
|
});
|
|
1442
1671
|
|
|
1443
1672
|
// Regression test for https://github.com/google/shaka-player/issues/2478
|
|
@@ -1460,7 +1689,8 @@ describe('TtmlTextParser', () => {
|
|
|
1460
1689
|
'<tt><body><div>' +
|
|
1461
1690
|
'<p begin="01:02.05" end="01:02:03.200"><span>äöü</span></p>' +
|
|
1462
1691
|
'</div></body></tt>',
|
|
1463
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1692
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1693
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1464
1694
|
});
|
|
1465
1695
|
|
|
1466
1696
|
it('supports timing on multiple levels', () => {
|
|
@@ -1476,7 +1706,9 @@ describe('TtmlTextParser', () => {
|
|
|
1476
1706
|
'<p begin="3s" end="4s">First cue</p>' +
|
|
1477
1707
|
'<p begin="4s" end="5s">Second cue</p>' +
|
|
1478
1708
|
'</div></body></tt>',
|
|
1479
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1709
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1710
|
+
{startTime: 1, endTime: Infinity},
|
|
1711
|
+
{startTime: 3, endTime: Infinity});
|
|
1480
1712
|
|
|
1481
1713
|
verifyHelper(
|
|
1482
1714
|
[{
|
|
@@ -1499,7 +1731,9 @@ describe('TtmlTextParser', () => {
|
|
|
1499
1731
|
'<span begin="5s" end="6s">Second cue</span>' +
|
|
1500
1732
|
'</p>' +
|
|
1501
1733
|
'</div></body></tt>',
|
|
1502
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1734
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1735
|
+
{startTime: 1, endTime: Infinity},
|
|
1736
|
+
{startTime: 3, endTime: Infinity});
|
|
1503
1737
|
});
|
|
1504
1738
|
|
|
1505
1739
|
it('gets end time from parent directly if missing', () => {
|
|
@@ -1513,7 +1747,9 @@ describe('TtmlTextParser', () => {
|
|
|
1513
1747
|
'<p begin="3s" end="4s">First cue</p>' +
|
|
1514
1748
|
'<p begin="4s">Second cue</p>' +
|
|
1515
1749
|
'</div></body></tt>',
|
|
1516
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1750
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1751
|
+
{startTime: 1, endTime: 30},
|
|
1752
|
+
{startTime: 3, endTime: 30});
|
|
1517
1753
|
});
|
|
1518
1754
|
|
|
1519
1755
|
it('supports never-ending cues', () => {
|
|
@@ -1526,7 +1762,8 @@ describe('TtmlTextParser', () => {
|
|
|
1526
1762
|
'<p begin="1s">First cue</p>' +
|
|
1527
1763
|
'<p begin="2s">Second cue</p>' +
|
|
1528
1764
|
'</div></body></tt>',
|
|
1529
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1765
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1766
|
+
{startTime: 1, endTime: Infinity});
|
|
1530
1767
|
});
|
|
1531
1768
|
|
|
1532
1769
|
// Regression test for b/159050711
|
|
@@ -1542,8 +1779,8 @@ describe('TtmlTextParser', () => {
|
|
|
1542
1779
|
// Styles from regionStyle should apply only to the nested cue.
|
|
1543
1780
|
backgroundColor: '',
|
|
1544
1781
|
color: '',
|
|
1545
|
-
displayAlign: Cue.displayAlign.
|
|
1546
|
-
textAlign: Cue.textAlign.
|
|
1782
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1783
|
+
textAlign: Cue.textAlign.CENTER,
|
|
1547
1784
|
|
|
1548
1785
|
nestedCues: [
|
|
1549
1786
|
{
|
|
@@ -1568,7 +1805,7 @@ describe('TtmlTextParser', () => {
|
|
|
1568
1805
|
// Styles inherited from backgroundStyle via regionStyle via
|
|
1569
1806
|
// spanStyle
|
|
1570
1807
|
displayAlign: Cue.displayAlign.CENTER,
|
|
1571
|
-
textAlign: Cue.textAlign.
|
|
1808
|
+
textAlign: Cue.textAlign.END,
|
|
1572
1809
|
},
|
|
1573
1810
|
],
|
|
1574
1811
|
},
|
|
@@ -1582,7 +1819,7 @@ describe('TtmlTextParser', () => {
|
|
|
1582
1819
|
// spanStyle inherits attributes from regionStyle
|
|
1583
1820
|
' <style xml:id="pStyle" tts:fontSize="15px" />' +
|
|
1584
1821
|
' <style xml:id="spanStyle" style="regionStyle" ' +
|
|
1585
|
-
' tts:backgroundColor="white" />' +
|
|
1822
|
+
' tts:backgroundColor="white" tts:textAlign="end" />' +
|
|
1586
1823
|
// regionStyle inherits attributes from backgroundStyle
|
|
1587
1824
|
' <style xml:id="regionStyle" style="backgroundStyle" ' +
|
|
1588
1825
|
' tts:backgroundColor="transparent" tts:color="blue" />' +
|
|
@@ -1597,32 +1834,117 @@ describe('TtmlTextParser', () => {
|
|
|
1597
1834
|
' <span style="spanStyle">Test with spanStyle</span>' +
|
|
1598
1835
|
' </p>' +
|
|
1599
1836
|
'</div></body></tt>',
|
|
1600
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1837
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1838
|
+
{startTime: 0, endTime: 60});
|
|
1839
|
+
});
|
|
1840
|
+
|
|
1841
|
+
it('inherits alignment from parent regions', () => {
|
|
1842
|
+
verifyHelper(
|
|
1843
|
+
[
|
|
1844
|
+
{
|
|
1845
|
+
startTime: 0,
|
|
1846
|
+
endTime: 60,
|
|
1847
|
+
payload: '',
|
|
1848
|
+
fontSize: '',
|
|
1849
|
+
textAlign: Cue.textAlign.END,
|
|
1850
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1851
|
+
nestedCues: [
|
|
1852
|
+
{
|
|
1853
|
+
startTime: 0,
|
|
1854
|
+
endTime: 60,
|
|
1855
|
+
payload: 'Hello!',
|
|
1856
|
+
textAlign: Cue.textAlign.END,
|
|
1857
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1858
|
+
},
|
|
1859
|
+
],
|
|
1860
|
+
},
|
|
1861
|
+
],
|
|
1862
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
1863
|
+
'<head><layout>' +
|
|
1864
|
+
'<region xml:id="r1" tts:textAlign="end" tts:displayAlign="center" />' +
|
|
1865
|
+
'</layout></head>' +
|
|
1866
|
+
'<body><div><p begin="00:00" end="01:00" region="r1">' +
|
|
1867
|
+
'<span>Hello!</span>' +
|
|
1868
|
+
'</p></div></body></tt>',
|
|
1869
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1870
|
+
{startTime: 0, endTime: 60},
|
|
1871
|
+
);
|
|
1872
|
+
});
|
|
1873
|
+
|
|
1874
|
+
// Regression test for https://github.com/google/shaka-player/issues/3743
|
|
1875
|
+
it('inherits styles from other styles on nestedCues', () => {
|
|
1876
|
+
verifyHelper(
|
|
1877
|
+
[
|
|
1878
|
+
{
|
|
1879
|
+
// p element
|
|
1880
|
+
startTime: 0,
|
|
1881
|
+
endTime: 60,
|
|
1882
|
+
payload: '',
|
|
1883
|
+
fontSize: '',
|
|
1884
|
+
nestedCues: [
|
|
1885
|
+
{
|
|
1886
|
+
startTime: 0,
|
|
1887
|
+
endTime: 60,
|
|
1888
|
+
payload: 'A',
|
|
1889
|
+
fontSize: '16px',
|
|
1890
|
+
},
|
|
1891
|
+
{
|
|
1892
|
+
startTime: 0,
|
|
1893
|
+
endTime: 60,
|
|
1894
|
+
payload: '',
|
|
1895
|
+
fontSize: '',
|
|
1896
|
+
},
|
|
1897
|
+
{
|
|
1898
|
+
startTime: 0,
|
|
1899
|
+
endTime: 60,
|
|
1900
|
+
payload: 'B',
|
|
1901
|
+
fontSize: '16px',
|
|
1902
|
+
},
|
|
1903
|
+
],
|
|
1904
|
+
},
|
|
1905
|
+
],
|
|
1906
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
1907
|
+
'<head>' +
|
|
1908
|
+
' <styling>' +
|
|
1909
|
+
' <style tts:backgroundColor="rgba(0,0,0,100)" ' +
|
|
1910
|
+
' tts:displayAlign="center" ' +
|
|
1911
|
+
' tts:extent="80% 10%" ' +
|
|
1912
|
+
' tts:fontFamily="proportionalSansSerif" ' +
|
|
1913
|
+
' tts:fontSize="16px" ' +
|
|
1914
|
+
' tts:origin="10% 85%" ' +
|
|
1915
|
+
' tts:textAlign="center" ' +
|
|
1916
|
+
' xml:id="backgroundStyle"/>' +
|
|
1917
|
+
' <style style="backgroundStyle" ' +
|
|
1918
|
+
' tts:backgroundColor="transparent" ' +
|
|
1919
|
+
' tts:color="white" ' +
|
|
1920
|
+
' xml:id="speakerStyle"/>' +
|
|
1921
|
+
' </styling>' +
|
|
1922
|
+
' <layout>' +
|
|
1923
|
+
' <region style="speakerStyle" tts:zIndex="1" xml:id="speaker"/>' +
|
|
1924
|
+
' </layout>' +
|
|
1925
|
+
'</head>' +
|
|
1926
|
+
'<body><div>' +
|
|
1927
|
+
' <p begin="00:00" end="01:00" region="speaker">' +
|
|
1928
|
+
' A<br/>B' +
|
|
1929
|
+
' </p>' +
|
|
1930
|
+
'</div></body></tt>',
|
|
1931
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1932
|
+
{startTime: 0, endTime: 60});
|
|
1601
1933
|
});
|
|
1602
1934
|
|
|
1603
1935
|
/**
|
|
1604
1936
|
* @param {!Array} cues
|
|
1605
1937
|
* @param {string} text
|
|
1606
1938
|
* @param {shaka.extern.TextParser.TimeContext} time
|
|
1939
|
+
* @param {!Object} bodyProperties
|
|
1940
|
+
* @param {Object=} divProperties
|
|
1607
1941
|
*/
|
|
1608
|
-
function verifyHelper(cues, text, time) {
|
|
1942
|
+
function verifyHelper(cues, text, time, bodyProperties, divProperties) {
|
|
1609
1943
|
const data =
|
|
1610
1944
|
shaka.util.BufferUtils.toUint8(shaka.util.StringUtils.toUTF8(text));
|
|
1611
1945
|
const result = new shaka.text.TtmlTextParser().parseMedia(data, time);
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
if (cue.region) {
|
|
1615
|
-
cue.region = jasmine.objectContaining(cue.region);
|
|
1616
|
-
}
|
|
1617
|
-
|
|
1618
|
-
if (cue.nestedCues) {
|
|
1619
|
-
cue.nestedCues = cue.nestedCues.map(mapExpected);
|
|
1620
|
-
}
|
|
1621
|
-
|
|
1622
|
-
return jasmine.objectContaining(cue);
|
|
1623
|
-
};
|
|
1624
|
-
const expected = cues.map(mapExpected);
|
|
1625
|
-
expect(result).toEqual(expected);
|
|
1946
|
+
shaka.test.TtmlUtils.verifyHelper(
|
|
1947
|
+
cues, result, bodyProperties, divProperties);
|
|
1626
1948
|
}
|
|
1627
1949
|
|
|
1628
1950
|
|