< Summary - Jellyfin

Information
Class: MediaBrowser.MediaEncoding.Subtitles.TtmlWriter
Assembly: MediaBrowser.MediaEncoding
File(s): /srv/git/jellyfin/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 26
Coverable lines: 26
Total lines: 60
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Write(...)0%620%

File(s)

/srv/git/jellyfin/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs

#LineLine coverage
 1using System.IO;
 2using System.Text;
 3using System.Text.RegularExpressions;
 4using System.Threading;
 5using MediaBrowser.Model.MediaInfo;
 6
 7namespace MediaBrowser.MediaEncoding.Subtitles
 8{
 9    /// <summary>
 10    /// TTML subtitle writer.
 11    /// </summary>
 12    public partial class TtmlWriter : ISubtitleWriter
 13    {
 14        [GeneratedRegex(@"\\n", RegexOptions.IgnoreCase)]
 15        private static partial Regex NewLineEscapeRegex();
 16
 17        /// <inheritdoc />
 18        public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
 19        {
 20            // Example: https://github.com/zmalltalker/ttml2vtt/blob/master/data/sample.xml
 21            // Parser example: https://github.com/mozilla/popcorn-js/blob/master/parsers/parserTTML/popcorn.parserTTML.j
 22
 023            using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
 24            {
 025                writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
 026                writer.WriteLine("<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:tts=\"http://www.w3.org/2006/04/ttaf1#st
 27
 028                writer.WriteLine("<head>");
 029                writer.WriteLine("<styling>");
 030                writer.WriteLine("<style id=\"italic\" tts:fontStyle=\"italic\" />");
 031                writer.WriteLine("<style id=\"left\" tts:textAlign=\"left\" />");
 032                writer.WriteLine("<style id=\"center\" tts:textAlign=\"center\" />");
 033                writer.WriteLine("<style id=\"right\" tts:textAlign=\"right\" />");
 034                writer.WriteLine("</styling>");
 035                writer.WriteLine("</head>");
 36
 037                writer.WriteLine("<body>");
 038                writer.WriteLine("<div>");
 39
 040                foreach (var trackEvent in info.TrackEvents)
 41                {
 042                    var text = trackEvent.Text;
 43
 044                    text = NewLineEscapeRegex().Replace(text, "<br/>");
 45
 046                    writer.WriteLine(
 047                        "<p begin=\"{0}\" dur=\"{1}\">{2}</p>",
 048                        trackEvent.StartPositionTicks,
 049                        trackEvent.EndPositionTicks - trackEvent.StartPositionTicks,
 050                        text);
 51                }
 52
 053                writer.WriteLine("</div>");
 054                writer.WriteLine("</body>");
 55
 056                writer.WriteLine("</tt>");
 057            }
 058        }
 59    }
 60}