shaka-player 3.3.0 → 3.3.1
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/CHANGELOG.md +54 -0
- package/build/conformance.textproto +183 -169
- package/dist/controls.css +1 -1
- package/dist/deps.js +1 -1
- package/dist/locales.js +30 -30
- package/dist/shaka-player.compiled.d.ts +25 -2
- package/dist/shaka-player.compiled.debug.d.ts +25 -2
- package/dist/shaka-player.compiled.debug.externs.js +22 -1
- package/dist/shaka-player.compiled.debug.js +226 -222
- package/dist/shaka-player.compiled.debug.map +3 -3
- package/dist/shaka-player.compiled.externs.js +22 -1
- package/dist/shaka-player.compiled.js +814 -812
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +25 -2
- package/dist/shaka-player.ui.debug.d.ts +25 -2
- package/dist/shaka-player.ui.debug.externs.js +22 -1
- package/dist/shaka-player.ui.debug.js +244 -240
- package/dist/shaka-player.ui.debug.map +3 -3
- package/dist/shaka-player.ui.externs.js +22 -1
- package/dist/shaka-player.ui.js +995 -992
- package/dist/shaka-player.ui.map +4 -4
- package/externs/cmcd.js +186 -0
- package/externs/shaka/player.js +8 -0
- package/externs/shaka/text.js +10 -0
- package/lib/hls/hls_parser.js +30 -0
- package/lib/media/segment_index.js +2 -1
- package/lib/media/segment_reference.js +19 -1
- package/lib/media/streaming_engine.js +5 -2
- package/lib/player.js +23 -17
- package/lib/polyfill/media_capabilities.js +30 -15
- package/lib/text/cue.js +6 -0
- package/lib/text/ttml_text_parser.js +84 -58
- package/lib/text/ui_text_displayer.js +17 -11
- package/lib/util/cmcd_manager.js +47 -201
- package/lib/util/stream_utils.js +86 -10
- package/lib/util/xml_utils.js +19 -0
- package/package.json +2 -2
- package/test/media/drm_engine_unit.js +3 -3
- package/test/media/streaming_engine_integration.js +2 -1
- package/test/media/streaming_engine_unit.js +145 -0
- package/test/player_integration.js +41 -8
- package/test/player_src_equals_integration.js +41 -8
- package/test/player_unit.js +19 -9
- package/test/test/assets/chapters.vtt +2 -2
- package/test/test/assets/chapters2.vtt +10 -0
- package/test/test/util/ttml_utils.js +81 -0
- package/test/text/mp4_ttml_parser_unit.js +11 -18
- package/test/text/ttml_text_parser_unit.js +499 -230
- package/test/util/cmcd_manager_unit.js +29 -15
- package/test/util/stream_utils_unit.js +36 -30
- package/third_party/closure-uri/uri.js +21 -0
- package/ui/text_selection.js +1 -0
- package/externs/media_capabilities.js +0 -16
|
@@ -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,8 @@ 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});
|
|
296
307
|
});
|
|
297
308
|
|
|
298
309
|
it('inherits timing information of nested cues if unprovided', () => {
|
|
@@ -307,9 +318,11 @@ describe('TtmlTextParser', () => {
|
|
|
307
318
|
},
|
|
308
319
|
],
|
|
309
320
|
'<tt><body>' +
|
|
310
|
-
'<div><
|
|
321
|
+
'<div><p begin="01:02.05" end="01:02:03.200">' +
|
|
322
|
+
'<span>Test</span></p></div>' +
|
|
311
323
|
'</body></tt>',
|
|
312
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
324
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
325
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
313
326
|
});
|
|
314
327
|
|
|
315
328
|
it('does not discard cues with image subcues', () => {
|
|
@@ -334,11 +347,12 @@ describe('TtmlTextParser', () => {
|
|
|
334
347
|
'<metadata>' +
|
|
335
348
|
'<smpte:image imageType="PNG" encoding="Base64" xml:id="img_0">' +
|
|
336
349
|
'base64EncodedImage</smpte:image>' +
|
|
337
|
-
'</metadata><body>' +
|
|
338
|
-
'<
|
|
339
|
-
'smpte:backgroundImage="#img_0"></div></
|
|
340
|
-
'</body></tt>',
|
|
341
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
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});
|
|
342
356
|
});
|
|
343
357
|
|
|
344
358
|
it('supports colon formatted time', () => {
|
|
@@ -349,7 +363,8 @@ describe('TtmlTextParser', () => {
|
|
|
349
363
|
'<tt><body><div>' +
|
|
350
364
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
351
365
|
'</div></body></tt>',
|
|
352
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
366
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
367
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
353
368
|
});
|
|
354
369
|
|
|
355
370
|
it('accounts for offset', () => {
|
|
@@ -360,7 +375,8 @@ describe('TtmlTextParser', () => {
|
|
|
360
375
|
'<tt><body><div>' +
|
|
361
376
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
362
377
|
'</div></body></tt>',
|
|
363
|
-
{periodStart: 7, segmentStart: 0, segmentEnd: 0}
|
|
378
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0},
|
|
379
|
+
{startTime: 69.05, endTime: 3730.2});
|
|
364
380
|
});
|
|
365
381
|
|
|
366
382
|
it('supports nested cues with an offset', () => {
|
|
@@ -382,7 +398,8 @@ describe('TtmlTextParser', () => {
|
|
|
382
398
|
'<tt><body><div>' +
|
|
383
399
|
'<p begin="01:02.05" end="01:02:03.200"><span>Nested cue</span></p>' +
|
|
384
400
|
'</div></body></tt>',
|
|
385
|
-
{periodStart: 7, segmentStart: 0, segmentEnd: 0}
|
|
401
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0},
|
|
402
|
+
{startTime: 69.05, endTime: 3730.2});
|
|
386
403
|
});
|
|
387
404
|
|
|
388
405
|
it('supports time in 0.00h 0.00m 0.00s format', () => {
|
|
@@ -393,7 +410,8 @@ describe('TtmlTextParser', () => {
|
|
|
393
410
|
'<tt><body><div>' +
|
|
394
411
|
'<p begin="59.45m30ms" end="1.5h2.3s">Test</p>' +
|
|
395
412
|
'</div></body></tt>',
|
|
396
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
413
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
414
|
+
{startTime: 3567.03, endTime: 5402.3});
|
|
397
415
|
});
|
|
398
416
|
|
|
399
417
|
it('supports time with frame rate', () => {
|
|
@@ -406,7 +424,8 @@ describe('TtmlTextParser', () => {
|
|
|
406
424
|
'<body><div>' +
|
|
407
425
|
'<p begin="00:10:15:15" end="00:11:02:30">Test</p>' +
|
|
408
426
|
'</div></body></tt>',
|
|
409
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
427
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
428
|
+
{startTime: 615.5, endTime: 663});
|
|
410
429
|
});
|
|
411
430
|
|
|
412
431
|
it('supports time with frame rate multiplier', () => {
|
|
@@ -419,7 +438,8 @@ describe('TtmlTextParser', () => {
|
|
|
419
438
|
'<body><div>' +
|
|
420
439
|
'<p begin="00:10:15:15" end="00:11:02:30">Test</p>' +
|
|
421
440
|
'</div></body></tt>',
|
|
422
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
441
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
442
|
+
{startTime: 615.5, endTime: 663});
|
|
423
443
|
});
|
|
424
444
|
|
|
425
445
|
it('supports time with subframes', () => {
|
|
@@ -436,7 +456,8 @@ describe('TtmlTextParser', () => {
|
|
|
436
456
|
'<body><div>' +
|
|
437
457
|
'<p begin="00:10:15:15.1" end="00:11:02:29.2">Test</p>' +
|
|
438
458
|
'</div></body></tt>',
|
|
439
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
459
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
460
|
+
{startTime: Util.closeTo(615.5 + 1 / 60), endTime: 663});
|
|
440
461
|
});
|
|
441
462
|
|
|
442
463
|
it('supports time in frame format', () => {
|
|
@@ -449,7 +470,8 @@ describe('TtmlTextParser', () => {
|
|
|
449
470
|
'<body><div>' +
|
|
450
471
|
'<p begin="75f" end="300.3f">Test</p>' +
|
|
451
472
|
'</div></body></tt>',
|
|
452
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
473
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
474
|
+
{startTime: 2.5, endTime: Util.closeTo(10.01)});
|
|
453
475
|
});
|
|
454
476
|
|
|
455
477
|
it('supports time in tick format', () => {
|
|
@@ -462,7 +484,8 @@ describe('TtmlTextParser', () => {
|
|
|
462
484
|
'<body><div>' +
|
|
463
485
|
'<p begin="50t" end="60.2t">Test</p>' +
|
|
464
486
|
'</div></body></tt>',
|
|
465
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
487
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
488
|
+
{startTime: 5, endTime: Util.closeTo(6.02)});
|
|
466
489
|
});
|
|
467
490
|
|
|
468
491
|
it('supports time with duration', () => {
|
|
@@ -473,7 +496,8 @@ describe('TtmlTextParser', () => {
|
|
|
473
496
|
'<tt><body><div>' +
|
|
474
497
|
'<p begin="01:02.05" dur="5s">Test</p>' +
|
|
475
498
|
'</div></body></tt>',
|
|
476
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
499
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
500
|
+
{startTime: 62.05, endTime: 67.05});
|
|
477
501
|
});
|
|
478
502
|
|
|
479
503
|
it('supports comments in the body', () => {
|
|
@@ -482,7 +506,29 @@ describe('TtmlTextParser', () => {
|
|
|
482
506
|
'<tt><body><div>' +
|
|
483
507
|
'<!-- text-based TTML -->' +
|
|
484
508
|
'</div></body></tt>',
|
|
485
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
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});
|
|
486
532
|
});
|
|
487
533
|
|
|
488
534
|
it('parses alignment from textAlign attribute of a region', () => {
|
|
@@ -502,7 +548,9 @@ describe('TtmlTextParser', () => {
|
|
|
502
548
|
'<body region="subtitleArea"><div>' +
|
|
503
549
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
504
550
|
'</div></body></tt>',
|
|
505
|
-
{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});
|
|
506
554
|
});
|
|
507
555
|
|
|
508
556
|
it('allows non-standard namespace names', () => {
|
|
@@ -522,7 +570,9 @@ describe('TtmlTextParser', () => {
|
|
|
522
570
|
'<body region="subtitleArea"><div>' +
|
|
523
571
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
524
572
|
'</div></body></tt>',
|
|
525
|
-
{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});
|
|
526
576
|
});
|
|
527
577
|
|
|
528
578
|
it('parses alignment from <style> block with id on region', () => {
|
|
@@ -545,7 +595,9 @@ describe('TtmlTextParser', () => {
|
|
|
545
595
|
'<body region="subtitleArea"><div>' +
|
|
546
596
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
547
597
|
'</div></body></tt>',
|
|
548
|
-
{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});
|
|
549
601
|
});
|
|
550
602
|
|
|
551
603
|
it('parses alignment from <style> block with id on p', () => {
|
|
@@ -568,7 +620,9 @@ describe('TtmlTextParser', () => {
|
|
|
568
620
|
'<body region="subtitleArea"><div>' +
|
|
569
621
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
570
622
|
'</div></body></tt>',
|
|
571
|
-
{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});
|
|
572
626
|
});
|
|
573
627
|
|
|
574
628
|
it('supports region settings for horizontal text', () => {
|
|
@@ -578,13 +632,6 @@ describe('TtmlTextParser', () => {
|
|
|
578
632
|
startTime: 62.05,
|
|
579
633
|
endTime: 3723.2,
|
|
580
634
|
payload: 'Test',
|
|
581
|
-
region: {
|
|
582
|
-
id: 'subtitleArea',
|
|
583
|
-
viewportAnchorX: 50,
|
|
584
|
-
viewportAnchorY: 16,
|
|
585
|
-
width: 100,
|
|
586
|
-
height: 100,
|
|
587
|
-
},
|
|
588
635
|
},
|
|
589
636
|
],
|
|
590
637
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -594,7 +641,18 @@ describe('TtmlTextParser', () => {
|
|
|
594
641
|
'<body region="subtitleArea"><div>' +
|
|
595
642
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
596
643
|
'</div></body></tt>',
|
|
597
|
-
{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});
|
|
598
656
|
|
|
599
657
|
verifyHelper(
|
|
600
658
|
[
|
|
@@ -602,12 +660,6 @@ describe('TtmlTextParser', () => {
|
|
|
602
660
|
startTime: 62.05,
|
|
603
661
|
endTime: 3723.2,
|
|
604
662
|
payload: 'Test',
|
|
605
|
-
region: {
|
|
606
|
-
viewportAnchorX: 50,
|
|
607
|
-
viewportAnchorY: 16,
|
|
608
|
-
width: 100,
|
|
609
|
-
height: 100,
|
|
610
|
-
},
|
|
611
663
|
},
|
|
612
664
|
],
|
|
613
665
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -618,7 +670,17 @@ describe('TtmlTextParser', () => {
|
|
|
618
670
|
'<body region="subtitleArea"><div>' +
|
|
619
671
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
620
672
|
'</div></body></tt>',
|
|
621
|
-
{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});
|
|
622
684
|
|
|
623
685
|
verifyHelper(
|
|
624
686
|
[
|
|
@@ -626,12 +688,6 @@ describe('TtmlTextParser', () => {
|
|
|
626
688
|
startTime: 62.05,
|
|
627
689
|
endTime: 3723.2,
|
|
628
690
|
payload: 'Test',
|
|
629
|
-
region: {
|
|
630
|
-
viewportAnchorX: 50,
|
|
631
|
-
viewportAnchorY: 16,
|
|
632
|
-
width: 100,
|
|
633
|
-
height: 100,
|
|
634
|
-
},
|
|
635
691
|
},
|
|
636
692
|
],
|
|
637
693
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -642,7 +698,17 @@ describe('TtmlTextParser', () => {
|
|
|
642
698
|
'<body region="subtitleArea"><div>' +
|
|
643
699
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
644
700
|
'</div></body></tt>',
|
|
645
|
-
{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});
|
|
646
712
|
});
|
|
647
713
|
|
|
648
714
|
it('supports region settings in pixels (origin)', () => {
|
|
@@ -652,19 +718,6 @@ describe('TtmlTextParser', () => {
|
|
|
652
718
|
startTime: 62.05,
|
|
653
719
|
endTime: 3723.2,
|
|
654
720
|
payload: 'Test',
|
|
655
|
-
region: {
|
|
656
|
-
id: 'subtitleArea',
|
|
657
|
-
viewportAnchorX: 50,
|
|
658
|
-
viewportAnchorY: 16,
|
|
659
|
-
regionAnchorX: 0,
|
|
660
|
-
regionAnchorY: 0,
|
|
661
|
-
width: 100,
|
|
662
|
-
height: 100,
|
|
663
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
664
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
665
|
-
viewportAnchorUnits: CueRegion.units.PX,
|
|
666
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
667
|
-
},
|
|
668
721
|
},
|
|
669
722
|
],
|
|
670
723
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -674,7 +727,24 @@ describe('TtmlTextParser', () => {
|
|
|
674
727
|
'<body region="subtitleArea"><div>' +
|
|
675
728
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
676
729
|
'</div></body></tt>',
|
|
677
|
-
{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});
|
|
678
748
|
});
|
|
679
749
|
|
|
680
750
|
it('supports region settings in pixels (extent)', () => {
|
|
@@ -684,19 +754,6 @@ describe('TtmlTextParser', () => {
|
|
|
684
754
|
startTime: 62.05,
|
|
685
755
|
endTime: 3723.2,
|
|
686
756
|
payload: 'Test',
|
|
687
|
-
region: {
|
|
688
|
-
id: 'subtitleArea',
|
|
689
|
-
viewportAnchorX: 0,
|
|
690
|
-
viewportAnchorY: 0,
|
|
691
|
-
regionAnchorX: 0,
|
|
692
|
-
regionAnchorY: 0,
|
|
693
|
-
width: 50,
|
|
694
|
-
height: 16,
|
|
695
|
-
heightUnits: CueRegion.units.PX,
|
|
696
|
-
widthUnits: CueRegion.units.PX,
|
|
697
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
698
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
699
|
-
},
|
|
700
757
|
},
|
|
701
758
|
],
|
|
702
759
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -706,7 +763,24 @@ describe('TtmlTextParser', () => {
|
|
|
706
763
|
'<body region="subtitleArea"><div>' +
|
|
707
764
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
708
765
|
'</div></body></tt>',
|
|
709
|
-
{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});
|
|
710
784
|
});
|
|
711
785
|
|
|
712
786
|
it('supports region settings in pixels: origin (with global extent)', () => {
|
|
@@ -716,19 +790,6 @@ describe('TtmlTextParser', () => {
|
|
|
716
790
|
startTime: 62.05,
|
|
717
791
|
endTime: 3723.2,
|
|
718
792
|
payload: 'Test',
|
|
719
|
-
region: {
|
|
720
|
-
id: 'subtitleArea',
|
|
721
|
-
viewportAnchorX: 10,
|
|
722
|
-
viewportAnchorY: 10,
|
|
723
|
-
regionAnchorX: 0,
|
|
724
|
-
regionAnchorY: 0,
|
|
725
|
-
width: 100,
|
|
726
|
-
height: 100,
|
|
727
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
728
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
729
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
730
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
731
|
-
},
|
|
732
793
|
},
|
|
733
794
|
],
|
|
734
795
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" tts:extent="1920px 1080px">' +
|
|
@@ -738,7 +799,24 @@ describe('TtmlTextParser', () => {
|
|
|
738
799
|
'<body region="subtitleArea"><div>' +
|
|
739
800
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
740
801
|
'</div></body></tt>',
|
|
741
|
-
{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});
|
|
742
820
|
});
|
|
743
821
|
|
|
744
822
|
it('supports region settings in pixels: extent (with global extent)', () => {
|
|
@@ -748,19 +826,6 @@ describe('TtmlTextParser', () => {
|
|
|
748
826
|
startTime: 62.05,
|
|
749
827
|
endTime: 3723.2,
|
|
750
828
|
payload: 'Test',
|
|
751
|
-
region: {
|
|
752
|
-
id: 'subtitleArea',
|
|
753
|
-
viewportAnchorX: 0,
|
|
754
|
-
viewportAnchorY: 0,
|
|
755
|
-
regionAnchorX: 0,
|
|
756
|
-
regionAnchorY: 0,
|
|
757
|
-
width: 30,
|
|
758
|
-
height: 30,
|
|
759
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
760
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
761
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
762
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
763
|
-
},
|
|
764
829
|
},
|
|
765
830
|
],
|
|
766
831
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling" tts:extent="1920px 1080px">' +
|
|
@@ -771,7 +836,24 @@ describe('TtmlTextParser', () => {
|
|
|
771
836
|
'<body region="subtitleArea"><div>' +
|
|
772
837
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
773
838
|
'</div></body></tt>',
|
|
774
|
-
{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});
|
|
775
857
|
});
|
|
776
858
|
|
|
777
859
|
it('supports region settings in percentage (origin)', () => {
|
|
@@ -781,29 +863,34 @@ describe('TtmlTextParser', () => {
|
|
|
781
863
|
startTime: 62.05,
|
|
782
864
|
endTime: 3723.2,
|
|
783
865
|
payload: 'Test',
|
|
784
|
-
region: {
|
|
785
|
-
id: 'subtitleArea',
|
|
786
|
-
viewportAnchorX: 50,
|
|
787
|
-
viewportAnchorY: 16,
|
|
788
|
-
regionAnchorX: 0,
|
|
789
|
-
regionAnchorY: 0,
|
|
790
|
-
width: 100,
|
|
791
|
-
height: 100,
|
|
792
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
793
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
794
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
795
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
796
|
-
},
|
|
797
866
|
},
|
|
798
867
|
],
|
|
799
|
-
'<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">' +
|
|
800
870
|
'<layout>' +
|
|
801
871
|
'<region xml:id="subtitleArea" tts:origin="50% 16%"/>' +
|
|
802
872
|
'</layout>' +
|
|
803
873
|
'<body region="subtitleArea"><div>' +
|
|
804
874
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
805
875
|
'</div></body></tt>',
|
|
806
|
-
{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});
|
|
807
894
|
});
|
|
808
895
|
|
|
809
896
|
it('supports region settings in percentage (extent)', () => {
|
|
@@ -813,22 +900,10 @@ describe('TtmlTextParser', () => {
|
|
|
813
900
|
startTime: 62.05,
|
|
814
901
|
endTime: 3723.2,
|
|
815
902
|
payload: 'Test',
|
|
816
|
-
region: {
|
|
817
|
-
id: 'subtitleArea',
|
|
818
|
-
viewportAnchorX: 0,
|
|
819
|
-
viewportAnchorY: 0,
|
|
820
|
-
regionAnchorX: 0,
|
|
821
|
-
regionAnchorY: 0,
|
|
822
|
-
width: 50,
|
|
823
|
-
height: 16,
|
|
824
|
-
heightUnits: CueRegion.units.PERCENTAGE,
|
|
825
|
-
widthUnits: CueRegion.units.PERCENTAGE,
|
|
826
|
-
viewportAnchorUnits: CueRegion.units.PERCENTAGE,
|
|
827
|
-
scroll: CueRegion.scrollMode.NONE,
|
|
828
|
-
},
|
|
829
903
|
},
|
|
830
904
|
],
|
|
831
|
-
'<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">' +
|
|
832
907
|
'<layout>' +
|
|
833
908
|
'<region xml:id="subtitleArea" tts:extent="50% 16%" ' +
|
|
834
909
|
'tts:writingMode="lrtb" />' +
|
|
@@ -836,7 +911,24 @@ describe('TtmlTextParser', () => {
|
|
|
836
911
|
'<body region="subtitleArea"><div>' +
|
|
837
912
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
838
913
|
'</div></body></tt>',
|
|
839
|
-
{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});
|
|
840
932
|
});
|
|
841
933
|
|
|
842
934
|
it('supports region settings for vertical text', () => {
|
|
@@ -846,13 +938,6 @@ describe('TtmlTextParser', () => {
|
|
|
846
938
|
startTime: 62.05,
|
|
847
939
|
endTime: 3723.2,
|
|
848
940
|
payload: 'Test',
|
|
849
|
-
region: {
|
|
850
|
-
id: 'subtitleArea',
|
|
851
|
-
viewportAnchorX: 50,
|
|
852
|
-
viewportAnchorY: 16,
|
|
853
|
-
width: 100,
|
|
854
|
-
height: 100,
|
|
855
|
-
},
|
|
856
941
|
},
|
|
857
942
|
],
|
|
858
943
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -863,7 +948,18 @@ describe('TtmlTextParser', () => {
|
|
|
863
948
|
'<body region="subtitleArea"><div>' +
|
|
864
949
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
865
950
|
'</div></body></tt>',
|
|
866
|
-
{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});
|
|
867
963
|
|
|
868
964
|
verifyHelper(
|
|
869
965
|
[
|
|
@@ -871,12 +967,6 @@ describe('TtmlTextParser', () => {
|
|
|
871
967
|
startTime: 62.05,
|
|
872
968
|
endTime: 3723.2,
|
|
873
969
|
payload: 'Test',
|
|
874
|
-
region: {
|
|
875
|
-
viewportAnchorX: 50,
|
|
876
|
-
viewportAnchorY: 16,
|
|
877
|
-
width: 100,
|
|
878
|
-
height: 100,
|
|
879
|
-
},
|
|
880
970
|
},
|
|
881
971
|
],
|
|
882
972
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -887,7 +977,17 @@ describe('TtmlTextParser', () => {
|
|
|
887
977
|
'<body region="subtitleArea"><div>' +
|
|
888
978
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
889
979
|
'</div></body></tt>',
|
|
890
|
-
{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});
|
|
891
991
|
|
|
892
992
|
verifyHelper(
|
|
893
993
|
[
|
|
@@ -895,12 +995,6 @@ describe('TtmlTextParser', () => {
|
|
|
895
995
|
startTime: 62.05,
|
|
896
996
|
endTime: 3723.2,
|
|
897
997
|
payload: 'Test',
|
|
898
|
-
region: {
|
|
899
|
-
viewportAnchorX: 50,
|
|
900
|
-
viewportAnchorY: 16,
|
|
901
|
-
width: 100,
|
|
902
|
-
height: 100,
|
|
903
|
-
},
|
|
904
998
|
},
|
|
905
999
|
],
|
|
906
1000
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -911,7 +1005,17 @@ describe('TtmlTextParser', () => {
|
|
|
911
1005
|
'<body region="subtitleArea"><div>' +
|
|
912
1006
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
913
1007
|
'</div></body></tt>',
|
|
914
|
-
{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});
|
|
915
1019
|
});
|
|
916
1020
|
|
|
917
1021
|
it('supports percentages containing decimals', () => {
|
|
@@ -921,13 +1025,6 @@ describe('TtmlTextParser', () => {
|
|
|
921
1025
|
startTime: 62.05,
|
|
922
1026
|
endTime: 3723.2,
|
|
923
1027
|
payload: 'Test',
|
|
924
|
-
region: {
|
|
925
|
-
id: 'subtitleArea',
|
|
926
|
-
viewportAnchorX: 12.2,
|
|
927
|
-
viewportAnchorY: 50.005,
|
|
928
|
-
width: 100,
|
|
929
|
-
height: 100,
|
|
930
|
-
},
|
|
931
1028
|
},
|
|
932
1029
|
],
|
|
933
1030
|
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
@@ -938,7 +1035,18 @@ describe('TtmlTextParser', () => {
|
|
|
938
1035
|
'<body region="subtitleArea"><div>' +
|
|
939
1036
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
940
1037
|
'</div></body></tt>',
|
|
941
|
-
{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});
|
|
942
1050
|
});
|
|
943
1051
|
|
|
944
1052
|
it('supports writingMode setting', () => {
|
|
@@ -959,7 +1067,9 @@ describe('TtmlTextParser', () => {
|
|
|
959
1067
|
'<body region="subtitleArea"><div>' +
|
|
960
1068
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
961
1069
|
'</div></body></tt>',
|
|
962
|
-
{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});
|
|
963
1073
|
|
|
964
1074
|
verifyHelper(
|
|
965
1075
|
[
|
|
@@ -978,7 +1088,9 @@ describe('TtmlTextParser', () => {
|
|
|
978
1088
|
'<body region="subtitleArea"><div>' +
|
|
979
1089
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
980
1090
|
'</div></body></tt>',
|
|
981
|
-
{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});
|
|
982
1094
|
|
|
983
1095
|
verifyHelper(
|
|
984
1096
|
[
|
|
@@ -997,7 +1109,9 @@ describe('TtmlTextParser', () => {
|
|
|
997
1109
|
'<body region="subtitleArea"><div>' +
|
|
998
1110
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
999
1111
|
'</div></body></tt>',
|
|
1000
|
-
{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});
|
|
1001
1115
|
|
|
1002
1116
|
verifyHelper(
|
|
1003
1117
|
[
|
|
@@ -1016,7 +1130,9 @@ describe('TtmlTextParser', () => {
|
|
|
1016
1130
|
'<body region="subtitleArea"><div>' +
|
|
1017
1131
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
1018
1132
|
'</div></body></tt>',
|
|
1019
|
-
{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});
|
|
1020
1136
|
|
|
1021
1137
|
verifyHelper(
|
|
1022
1138
|
[
|
|
@@ -1035,7 +1151,9 @@ describe('TtmlTextParser', () => {
|
|
|
1035
1151
|
'<body region="subtitleArea"><div>' +
|
|
1036
1152
|
'<p begin="01:02.05" end="01:02:03.200">Test</p>' +
|
|
1037
1153
|
'</div></body></tt>',
|
|
1038
|
-
{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});
|
|
1039
1157
|
});
|
|
1040
1158
|
|
|
1041
1159
|
it('disregards empty divs and ps', () => {
|
|
@@ -1051,7 +1169,8 @@ describe('TtmlTextParser', () => {
|
|
|
1051
1169
|
'<div></div>' +
|
|
1052
1170
|
'</body>' +
|
|
1053
1171
|
'</tt>',
|
|
1054
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1172
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1173
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1055
1174
|
|
|
1056
1175
|
verifyHelper(
|
|
1057
1176
|
[
|
|
@@ -1065,7 +1184,8 @@ describe('TtmlTextParser', () => {
|
|
|
1065
1184
|
'</div>' +
|
|
1066
1185
|
'</body>' +
|
|
1067
1186
|
'</tt>',
|
|
1068
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1187
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1188
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1069
1189
|
|
|
1070
1190
|
verifyHelper(
|
|
1071
1191
|
[],
|
|
@@ -1077,7 +1197,8 @@ describe('TtmlTextParser', () => {
|
|
|
1077
1197
|
'<div></div>' +
|
|
1078
1198
|
'</body>' +
|
|
1079
1199
|
'</tt>',
|
|
1080
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1200
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1201
|
+
{});
|
|
1081
1202
|
});
|
|
1082
1203
|
|
|
1083
1204
|
it('should let empty paragraphs with begin or end attributes through', () => {
|
|
@@ -1093,7 +1214,8 @@ describe('TtmlTextParser', () => {
|
|
|
1093
1214
|
'</div>' +
|
|
1094
1215
|
'</body>' +
|
|
1095
1216
|
'</tt>',
|
|
1096
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1217
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1218
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1097
1219
|
});
|
|
1098
1220
|
|
|
1099
1221
|
it('supports smpte:backgroundImage attribute', () => {
|
|
@@ -1103,7 +1225,6 @@ describe('TtmlTextParser', () => {
|
|
|
1103
1225
|
startTime: 62.05,
|
|
1104
1226
|
endTime: 3723.2,
|
|
1105
1227
|
payload: '',
|
|
1106
|
-
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1107
1228
|
},
|
|
1108
1229
|
],
|
|
1109
1230
|
'<tt ' +
|
|
@@ -1116,19 +1237,19 @@ describe('TtmlTextParser', () => {
|
|
|
1116
1237
|
'<body><div smpte:backgroundImage="#img_0">' +
|
|
1117
1238
|
'<p begin="01:02.05" end="01:02:03.200"></p>' +
|
|
1118
1239
|
'</div></body></tt>',
|
|
1119
|
-
{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
|
+
});
|
|
1120
1248
|
});
|
|
1121
1249
|
|
|
1122
1250
|
it('supports smpte:backgroundImage attribute in div element', () => {
|
|
1123
1251
|
verifyHelper(
|
|
1124
|
-
[
|
|
1125
|
-
{
|
|
1126
|
-
startTime: 0,
|
|
1127
|
-
endTime: 62.05,
|
|
1128
|
-
payload: '',
|
|
1129
|
-
backgroundImage: 'data:image/png;base64,base64EncodedImage',
|
|
1130
|
-
},
|
|
1131
|
-
],
|
|
1252
|
+
[],
|
|
1132
1253
|
'<tt ' +
|
|
1133
1254
|
'xmlns:ttm="http://www.w3.org/ns/ttml#metadata" ' +
|
|
1134
1255
|
'xmlns:smpte="http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt">' +
|
|
@@ -1139,7 +1260,14 @@ describe('TtmlTextParser', () => {
|
|
|
1139
1260
|
'<body><div begin="00:00.00" end="01:02.05" '+
|
|
1140
1261
|
'smpte:backgroundImage="#img_0"></div>' +
|
|
1141
1262
|
'</body></tt>',
|
|
1142
|
-
{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
|
+
});
|
|
1143
1271
|
});
|
|
1144
1272
|
|
|
1145
1273
|
it('supports smpte:backgroundImage attribute alt namespace', () => {
|
|
@@ -1163,7 +1291,8 @@ describe('TtmlTextParser', () => {
|
|
|
1163
1291
|
'<p begin="01:02.05" end="01:02:03.200" ' +
|
|
1164
1292
|
'smpte:backgroundImage="#img_0" />' +
|
|
1165
1293
|
'</div></body></tt>',
|
|
1166
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1294
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1295
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1167
1296
|
});
|
|
1168
1297
|
|
|
1169
1298
|
it('inserts line breaks for <br> tags', () => {
|
|
@@ -1191,7 +1320,8 @@ describe('TtmlTextParser', () => {
|
|
|
1191
1320
|
'<tt><body><div>' +
|
|
1192
1321
|
'<p begin="01:02.05" end="01:02:03.200">Line1<br/>Line2</p>' +
|
|
1193
1322
|
'</div></body></tt>',
|
|
1194
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1323
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1324
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1195
1325
|
|
|
1196
1326
|
verifyHelper(
|
|
1197
1327
|
[{
|
|
@@ -1224,7 +1354,36 @@ describe('TtmlTextParser', () => {
|
|
|
1224
1354
|
'<span>Line1<br/>Line2</span>' +
|
|
1225
1355
|
'</p>' +
|
|
1226
1356
|
'</div></body></tt>',
|
|
1227
|
-
{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});
|
|
1228
1387
|
});
|
|
1229
1388
|
|
|
1230
1389
|
it('parses cue alignment from textAlign attribute', () => {
|
|
@@ -1249,7 +1408,9 @@ describe('TtmlTextParser', () => {
|
|
|
1249
1408
|
'<body region="subtitleArea"><div>' +
|
|
1250
1409
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
1251
1410
|
'</div></body></tt>',
|
|
1252
|
-
{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});
|
|
1253
1414
|
});
|
|
1254
1415
|
|
|
1255
1416
|
it('parses text style information', () => {
|
|
@@ -1295,7 +1456,9 @@ describe('TtmlTextParser', () => {
|
|
|
1295
1456
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1296
1457
|
'<p begin="00:02.00" end="00:04.00" style="s2">Test 2</p>' +
|
|
1297
1458
|
'</div></body></tt>',
|
|
1298
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1459
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1460
|
+
{startTime: 1, endTime: 4, region: {id: 'subtitleArea'}},
|
|
1461
|
+
{startTime: 1, endTime: 4});
|
|
1299
1462
|
});
|
|
1300
1463
|
|
|
1301
1464
|
it('uses text color if tts:textOutline does not specify color', () => {
|
|
@@ -1318,7 +1481,8 @@ describe('TtmlTextParser', () => {
|
|
|
1318
1481
|
'<body region="subtitleArea"><div>' +
|
|
1319
1482
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1320
1483
|
'</div></body></tt>',
|
|
1321
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1484
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1485
|
+
{startTime: 1, endTime: 2});
|
|
1322
1486
|
});
|
|
1323
1487
|
|
|
1324
1488
|
it('does not add an outline if tts:textOutline only contains color', () => {
|
|
@@ -1339,7 +1503,8 @@ describe('TtmlTextParser', () => {
|
|
|
1339
1503
|
'<body region="subtitleArea"><div>' +
|
|
1340
1504
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1341
1505
|
'</div></body></tt>',
|
|
1342
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1506
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1507
|
+
{startTime: 1, endTime: 2});
|
|
1343
1508
|
});
|
|
1344
1509
|
|
|
1345
1510
|
// Regression test for #2623
|
|
@@ -1375,7 +1540,8 @@ describe('TtmlTextParser', () => {
|
|
|
1375
1540
|
'<span style="s1">Test</span>' +
|
|
1376
1541
|
'</p>' +
|
|
1377
1542
|
'</div></body></tt>',
|
|
1378
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1543
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1544
|
+
{startTime: 1, endTime: 2});
|
|
1379
1545
|
});
|
|
1380
1546
|
|
|
1381
1547
|
it('parses wrapping option', () => {
|
|
@@ -1398,7 +1564,9 @@ describe('TtmlTextParser', () => {
|
|
|
1398
1564
|
'<body region="subtitleArea"><div>' +
|
|
1399
1565
|
'<p begin="01:02.05" end="01:02:03.200" style="s1">Test</p>' +
|
|
1400
1566
|
'</div></body></tt>',
|
|
1401
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1567
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1568
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1569
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1402
1570
|
});
|
|
1403
1571
|
|
|
1404
1572
|
it('parses text decoration', () => {
|
|
@@ -1424,7 +1592,9 @@ describe('TtmlTextParser', () => {
|
|
|
1424
1592
|
'<body region="subtitleArea"><div>' +
|
|
1425
1593
|
'<p begin="01:02.05" end="01:02:03.200" style="s2">Test</p>' +
|
|
1426
1594
|
'</div></body></tt>',
|
|
1427
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1595
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1596
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1597
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1428
1598
|
});
|
|
1429
1599
|
|
|
1430
1600
|
it('cues should have default cellResolution', () => {
|
|
@@ -1447,7 +1617,8 @@ describe('TtmlTextParser', () => {
|
|
|
1447
1617
|
'<body><div>' +
|
|
1448
1618
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1449
1619
|
'</div></body></tt>',
|
|
1450
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1620
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1621
|
+
{startTime: 1, endTime: 2});
|
|
1451
1622
|
});
|
|
1452
1623
|
|
|
1453
1624
|
it('parses cellResolution', () => {
|
|
@@ -1474,7 +1645,8 @@ describe('TtmlTextParser', () => {
|
|
|
1474
1645
|
'<body><div>' +
|
|
1475
1646
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1476
1647
|
'</div></body></tt>',
|
|
1477
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1648
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1649
|
+
{startTime: 1, endTime: 2});
|
|
1478
1650
|
});
|
|
1479
1651
|
|
|
1480
1652
|
it('parses line padding', () => {
|
|
@@ -1502,7 +1674,8 @@ describe('TtmlTextParser', () => {
|
|
|
1502
1674
|
'<body><div>' +
|
|
1503
1675
|
'<p begin="00:01.00" end="00:02.00" style="s1">Test</p>' +
|
|
1504
1676
|
'</div></body></tt>',
|
|
1505
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1677
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1678
|
+
{startTime: 1, endTime: 2});
|
|
1506
1679
|
});
|
|
1507
1680
|
|
|
1508
1681
|
it('chooses style on element over style on region', () => {
|
|
@@ -1526,7 +1699,9 @@ describe('TtmlTextParser', () => {
|
|
|
1526
1699
|
'<body region="subtitleArea"><div>' +
|
|
1527
1700
|
'<p begin="01:02.05" end="01:02:03.200" style="s2">Test</p>' +
|
|
1528
1701
|
'</div></body></tt>',
|
|
1529
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1702
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1703
|
+
{startTime: 62.05, endTime: 3723.2, region: {id: 'subtitleArea'}},
|
|
1704
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1530
1705
|
});
|
|
1531
1706
|
|
|
1532
1707
|
it('can parse multiple cues', () => {
|
|
@@ -1539,7 +1714,8 @@ describe('TtmlTextParser', () => {
|
|
|
1539
1714
|
'<p begin="00:01.00" end="00:02.00">First cue</p>' +
|
|
1540
1715
|
'<p begin="00:03.00" end="00:04.00">Second cue</p>' +
|
|
1541
1716
|
'</div></body></tt>',
|
|
1542
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1717
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1718
|
+
{startTime: 1, endTime: 4});
|
|
1543
1719
|
});
|
|
1544
1720
|
|
|
1545
1721
|
// Regression test for https://github.com/google/shaka-player/issues/2478
|
|
@@ -1562,7 +1738,8 @@ describe('TtmlTextParser', () => {
|
|
|
1562
1738
|
'<tt><body><div>' +
|
|
1563
1739
|
'<p begin="01:02.05" end="01:02:03.200"><span>äöü</span></p>' +
|
|
1564
1740
|
'</div></body></tt>',
|
|
1565
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1741
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1742
|
+
{startTime: 62.05, endTime: 3723.2});
|
|
1566
1743
|
});
|
|
1567
1744
|
|
|
1568
1745
|
it('supports timing on multiple levels', () => {
|
|
@@ -1578,7 +1755,9 @@ describe('TtmlTextParser', () => {
|
|
|
1578
1755
|
'<p begin="3s" end="4s">First cue</p>' +
|
|
1579
1756
|
'<p begin="4s" end="5s">Second cue</p>' +
|
|
1580
1757
|
'</div></body></tt>',
|
|
1581
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1758
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1759
|
+
{startTime: 1, endTime: Infinity},
|
|
1760
|
+
{startTime: 3, endTime: Infinity});
|
|
1582
1761
|
|
|
1583
1762
|
verifyHelper(
|
|
1584
1763
|
[{
|
|
@@ -1601,7 +1780,9 @@ describe('TtmlTextParser', () => {
|
|
|
1601
1780
|
'<span begin="5s" end="6s">Second cue</span>' +
|
|
1602
1781
|
'</p>' +
|
|
1603
1782
|
'</div></body></tt>',
|
|
1604
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1783
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1784
|
+
{startTime: 1, endTime: Infinity},
|
|
1785
|
+
{startTime: 3, endTime: Infinity});
|
|
1605
1786
|
});
|
|
1606
1787
|
|
|
1607
1788
|
it('gets end time from parent directly if missing', () => {
|
|
@@ -1615,7 +1796,9 @@ describe('TtmlTextParser', () => {
|
|
|
1615
1796
|
'<p begin="3s" end="4s">First cue</p>' +
|
|
1616
1797
|
'<p begin="4s">Second cue</p>' +
|
|
1617
1798
|
'</div></body></tt>',
|
|
1618
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1799
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1800
|
+
{startTime: 1, endTime: 30},
|
|
1801
|
+
{startTime: 3, endTime: 30});
|
|
1619
1802
|
});
|
|
1620
1803
|
|
|
1621
1804
|
it('supports never-ending cues', () => {
|
|
@@ -1628,7 +1811,8 @@ describe('TtmlTextParser', () => {
|
|
|
1628
1811
|
'<p begin="1s">First cue</p>' +
|
|
1629
1812
|
'<p begin="2s">Second cue</p>' +
|
|
1630
1813
|
'</div></body></tt>',
|
|
1631
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1814
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1815
|
+
{startTime: 1, endTime: Infinity});
|
|
1632
1816
|
});
|
|
1633
1817
|
|
|
1634
1818
|
// Regression test for b/159050711
|
|
@@ -1644,8 +1828,8 @@ describe('TtmlTextParser', () => {
|
|
|
1644
1828
|
// Styles from regionStyle should apply only to the nested cue.
|
|
1645
1829
|
backgroundColor: '',
|
|
1646
1830
|
color: '',
|
|
1647
|
-
displayAlign: Cue.displayAlign.
|
|
1648
|
-
textAlign: Cue.textAlign.
|
|
1831
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1832
|
+
textAlign: Cue.textAlign.CENTER,
|
|
1649
1833
|
|
|
1650
1834
|
nestedCues: [
|
|
1651
1835
|
{
|
|
@@ -1670,7 +1854,7 @@ describe('TtmlTextParser', () => {
|
|
|
1670
1854
|
// Styles inherited from backgroundStyle via regionStyle via
|
|
1671
1855
|
// spanStyle
|
|
1672
1856
|
displayAlign: Cue.displayAlign.CENTER,
|
|
1673
|
-
textAlign: Cue.textAlign.
|
|
1857
|
+
textAlign: Cue.textAlign.END,
|
|
1674
1858
|
},
|
|
1675
1859
|
],
|
|
1676
1860
|
},
|
|
@@ -1684,7 +1868,7 @@ describe('TtmlTextParser', () => {
|
|
|
1684
1868
|
// spanStyle inherits attributes from regionStyle
|
|
1685
1869
|
' <style xml:id="pStyle" tts:fontSize="15px" />' +
|
|
1686
1870
|
' <style xml:id="spanStyle" style="regionStyle" ' +
|
|
1687
|
-
' tts:backgroundColor="white" />' +
|
|
1871
|
+
' tts:backgroundColor="white" tts:textAlign="end" />' +
|
|
1688
1872
|
// regionStyle inherits attributes from backgroundStyle
|
|
1689
1873
|
' <style xml:id="regionStyle" style="backgroundStyle" ' +
|
|
1690
1874
|
' tts:backgroundColor="transparent" tts:color="blue" />' +
|
|
@@ -1699,32 +1883,117 @@ describe('TtmlTextParser', () => {
|
|
|
1699
1883
|
' <span style="spanStyle">Test with spanStyle</span>' +
|
|
1700
1884
|
' </p>' +
|
|
1701
1885
|
'</div></body></tt>',
|
|
1702
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0}
|
|
1886
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1887
|
+
{startTime: 0, endTime: 60});
|
|
1888
|
+
});
|
|
1889
|
+
|
|
1890
|
+
it('inherits alignment from parent regions', () => {
|
|
1891
|
+
verifyHelper(
|
|
1892
|
+
[
|
|
1893
|
+
{
|
|
1894
|
+
startTime: 0,
|
|
1895
|
+
endTime: 60,
|
|
1896
|
+
payload: '',
|
|
1897
|
+
fontSize: '',
|
|
1898
|
+
textAlign: Cue.textAlign.END,
|
|
1899
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1900
|
+
nestedCues: [
|
|
1901
|
+
{
|
|
1902
|
+
startTime: 0,
|
|
1903
|
+
endTime: 60,
|
|
1904
|
+
payload: 'Hello!',
|
|
1905
|
+
textAlign: Cue.textAlign.END,
|
|
1906
|
+
displayAlign: Cue.displayAlign.CENTER,
|
|
1907
|
+
},
|
|
1908
|
+
],
|
|
1909
|
+
},
|
|
1910
|
+
],
|
|
1911
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
1912
|
+
'<head><layout>' +
|
|
1913
|
+
'<region xml:id="r1" tts:textAlign="end" tts:displayAlign="center" />' +
|
|
1914
|
+
'</layout></head>' +
|
|
1915
|
+
'<body><div><p begin="00:00" end="01:00" region="r1">' +
|
|
1916
|
+
'<span>Hello!</span>' +
|
|
1917
|
+
'</p></div></body></tt>',
|
|
1918
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1919
|
+
{startTime: 0, endTime: 60},
|
|
1920
|
+
);
|
|
1921
|
+
});
|
|
1922
|
+
|
|
1923
|
+
// Regression test for https://github.com/google/shaka-player/issues/3743
|
|
1924
|
+
it('inherits styles from other styles on nestedCues', () => {
|
|
1925
|
+
verifyHelper(
|
|
1926
|
+
[
|
|
1927
|
+
{
|
|
1928
|
+
// p element
|
|
1929
|
+
startTime: 0,
|
|
1930
|
+
endTime: 60,
|
|
1931
|
+
payload: '',
|
|
1932
|
+
fontSize: '',
|
|
1933
|
+
nestedCues: [
|
|
1934
|
+
{
|
|
1935
|
+
startTime: 0,
|
|
1936
|
+
endTime: 60,
|
|
1937
|
+
payload: 'A',
|
|
1938
|
+
fontSize: '16px',
|
|
1939
|
+
},
|
|
1940
|
+
{
|
|
1941
|
+
startTime: 0,
|
|
1942
|
+
endTime: 60,
|
|
1943
|
+
payload: '',
|
|
1944
|
+
fontSize: '',
|
|
1945
|
+
},
|
|
1946
|
+
{
|
|
1947
|
+
startTime: 0,
|
|
1948
|
+
endTime: 60,
|
|
1949
|
+
payload: 'B',
|
|
1950
|
+
fontSize: '16px',
|
|
1951
|
+
},
|
|
1952
|
+
],
|
|
1953
|
+
},
|
|
1954
|
+
],
|
|
1955
|
+
'<tt xmlns:tts="http://www.w3.org/ns/ttml#styling">' +
|
|
1956
|
+
'<head>' +
|
|
1957
|
+
' <styling>' +
|
|
1958
|
+
' <style tts:backgroundColor="rgba(0,0,0,100)" ' +
|
|
1959
|
+
' tts:displayAlign="center" ' +
|
|
1960
|
+
' tts:extent="80% 10%" ' +
|
|
1961
|
+
' tts:fontFamily="proportionalSansSerif" ' +
|
|
1962
|
+
' tts:fontSize="16px" ' +
|
|
1963
|
+
' tts:origin="10% 85%" ' +
|
|
1964
|
+
' tts:textAlign="center" ' +
|
|
1965
|
+
' xml:id="backgroundStyle"/>' +
|
|
1966
|
+
' <style style="backgroundStyle" ' +
|
|
1967
|
+
' tts:backgroundColor="transparent" ' +
|
|
1968
|
+
' tts:color="white" ' +
|
|
1969
|
+
' xml:id="speakerStyle"/>' +
|
|
1970
|
+
' </styling>' +
|
|
1971
|
+
' <layout>' +
|
|
1972
|
+
' <region style="speakerStyle" tts:zIndex="1" xml:id="speaker"/>' +
|
|
1973
|
+
' </layout>' +
|
|
1974
|
+
'</head>' +
|
|
1975
|
+
'<body><div>' +
|
|
1976
|
+
' <p begin="00:00" end="01:00" region="speaker">' +
|
|
1977
|
+
' A<br/>B' +
|
|
1978
|
+
' </p>' +
|
|
1979
|
+
'</div></body></tt>',
|
|
1980
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0},
|
|
1981
|
+
{startTime: 0, endTime: 60});
|
|
1703
1982
|
});
|
|
1704
1983
|
|
|
1705
1984
|
/**
|
|
1706
1985
|
* @param {!Array} cues
|
|
1707
1986
|
* @param {string} text
|
|
1708
1987
|
* @param {shaka.extern.TextParser.TimeContext} time
|
|
1988
|
+
* @param {!Object} bodyProperties
|
|
1989
|
+
* @param {Object=} divProperties
|
|
1709
1990
|
*/
|
|
1710
|
-
function verifyHelper(cues, text, time) {
|
|
1991
|
+
function verifyHelper(cues, text, time, bodyProperties, divProperties) {
|
|
1711
1992
|
const data =
|
|
1712
1993
|
shaka.util.BufferUtils.toUint8(shaka.util.StringUtils.toUTF8(text));
|
|
1713
1994
|
const result = new shaka.text.TtmlTextParser().parseMedia(data, time);
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
if (cue.region) {
|
|
1717
|
-
cue.region = jasmine.objectContaining(cue.region);
|
|
1718
|
-
}
|
|
1719
|
-
|
|
1720
|
-
if (cue.nestedCues) {
|
|
1721
|
-
cue.nestedCues = cue.nestedCues.map(mapExpected);
|
|
1722
|
-
}
|
|
1723
|
-
|
|
1724
|
-
return jasmine.objectContaining(cue);
|
|
1725
|
-
};
|
|
1726
|
-
const expected = cues.map(mapExpected);
|
|
1727
|
-
expect(result).toEqual(expected);
|
|
1995
|
+
shaka.test.TtmlUtils.verifyHelper(
|
|
1996
|
+
cues, result, bodyProperties, divProperties);
|
|
1728
1997
|
}
|
|
1729
1998
|
|
|
1730
1999
|
|