public Paragraph(TimeCode startTime, TimeCode endTime, string text)
 {
     StartTime = startTime;
     EndTime = endTime;
     Text = text;
     ID = GenerateId();
 }
Example #2
0
 public Paragraph(string text, double startTotalMilliseconds, double endTotalMilliseconds)
 {
     StartTime = new TimeCode(startTotalMilliseconds);
     EndTime = new TimeCode(endTotalMilliseconds);
     Text = text;
     ID = GenerateId();
 }
 private static string MakeTimeCode(TimeCode timeCode, Paragraph last)
 {
     double start = 0;
     if (last != null)
         start = last.EndTime.TotalSeconds;
     return string.Format("{0:0.0#}", (timeCode.TotalSeconds - start));
 }
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {
            _errorCount = 0;

            var sb = new StringBuilder();
            lines.ForEach(line => sb.AppendLine(line));
            var xml = new XmlDocument { XmlResolver = null };
            xml.LoadXml(sb.ToString().Trim());

            foreach (XmlNode node in xml.DocumentElement.SelectNodes("text"))
            {
                try
                {
                    string start = node.Attributes["t"].InnerText;
                    string dur = node.Attributes["d"].InnerText;
                    TimeCode startTimeCode = GetTimeCode(start);
                    var endTimeCode = new TimeCode(startTimeCode.TotalMilliseconds + GetTimeCode(dur).TotalMilliseconds);
                    var p = new Paragraph(startTimeCode, endTimeCode, node.InnerText.Replace("   ", " ").Replace("  ", " "));
                    subtitle.Paragraphs.Add(p);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    _errorCount++;
                }
            }
            subtitle.Renumber();
        }
 public override string ToText(Subtitle subtitle, string title)
 {
     var sb = new StringBuilder();
     sb.AppendLine("Title: " + title);
     sb.AppendLine("Translator: No Author");
     sb.AppendLine("Date: " + DateTime.Now.ToString("dd-MM-yyyy").Replace("-", ".")); //  25.08.2011
     double milliseconds = 0;
     if (subtitle.Paragraphs.Count > 0)
         milliseconds = subtitle.Paragraphs[subtitle.Paragraphs.Count - 1].EndTime.TotalMilliseconds;
     var tc = new TimeCode(milliseconds);
     sb.AppendLine(string.Format("Duration: {0:00}:{1:00}:{2:00}:{3:00}", tc.Hours, tc.Minutes, tc.Seconds, MillisecondsToFramesMaxFrameRate(tc.Milliseconds))); // 01:20:49:12
     sb.AppendLine("Program start: 00:00:00:00");
     sb.AppendLine("Title count: " + subtitle.Paragraphs.Count);
     sb.AppendLine();
     sb.AppendLine("#\tIn\tOut\tDuration");
     sb.AppendLine();
     int count = 0;
     foreach (Paragraph p in subtitle.Paragraphs)
     {
         count++;
         string text = Utilities.RemoveHtmlTags(p.Text);
         sb.AppendLine(string.Format("{13}\t{0:00}:{1:00}:{2:00}:{3:00}\t{4:00}:{5:00}:{6:00}:{7:00}\t{8:00}:{9:00}:{10:00}:{11:00}\r\n{12}" + Environment.NewLine,
                                     p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFramesMaxFrameRate(p.StartTime.Milliseconds),
                                     p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFramesMaxFrameRate(p.EndTime.Milliseconds),
                                     p.Duration.Hours, p.Duration.Minutes, p.Duration.Seconds, MillisecondsToFramesMaxFrameRate(p.Duration.Milliseconds),
                                     text, count));
     }
     return sb.ToString().Trim() + Environment.NewLine + Environment.NewLine + Environment.NewLine;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="Paragraph"/> class.
 /// </summary>
 /// <param name="startTime">
 /// The start time.
 /// </param>
 /// <param name="endTime">
 /// The end time.
 /// </param>
 /// <param name="text">
 /// The text.
 /// </param>
 public Paragraph(TimeCode startTime, TimeCode endTime, string text)
 {
     this.StartTime = startTime;
     this.EndTime = endTime;
     this.Text = text;
     this.ID = this.GenerateId();
 }
Example #7
0
 internal static string ConvertToTimeString(TimeCode time)
 {
     var timeCodeFormat = Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormat.Trim().ToLowerInvariant();
     if (timeCodeFormat == "source" && !string.IsNullOrWhiteSpace(Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormatSource))
     {
         timeCodeFormat = Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormatSource.Trim().ToLowerInvariant();
     }
     switch (timeCodeFormat)
     {
         case "source":
         case "seconds":
             return string.Format(CultureInfo.InvariantCulture, "{0:0.0##}s", time.TotalSeconds);
         case "milliseconds":
             return string.Format(CultureInfo.InvariantCulture, "{0}ms", time.TotalMilliseconds);
         case "ticks":
             return string.Format(CultureInfo.InvariantCulture, "{0}t", TimeSpan.FromMilliseconds(time.TotalMilliseconds).Ticks);
         case "hh:mm:ss.ms":
             return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00}.{3:000}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
         case "hh:mm:ss.ms-two-digits":
             return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, (int)Math.Round(time.Milliseconds / 10.0));
         case "hh:mm:ss,ms":
             return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00},{3:000}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
         default:
             return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds));
     }
 }
Example #8
0
        public override string ToText(Subtitle subtitle, string title)
        {
            var sb = new StringBuilder();
            if (!string.IsNullOrEmpty(subtitle.Header) && (subtitle.Header.Contains("[ar:") || subtitle.Header.Contains("[ti:")))
                sb.Append(subtitle.Header);

            for (int i = 0; i < subtitle.Paragraphs.Count; i++)
            {
                Paragraph p = subtitle.Paragraphs[i];
                Paragraph next = null;
                if (i + 1 < subtitle.Paragraphs.Count)
                    next = subtitle.Paragraphs[i + 1];

                string text = Utilities.RemoveHtmlTags(p.Text);
                text = text.Replace(Environment.NewLine, " "); // text = text.Replace(Environment.NewLine, "|");
                sb.AppendLine(string.Format("[{0:00}:{1:00}.{2:00}]{3}", p.StartTime.Hours * 60 + p.StartTime.Minutes, p.StartTime.Seconds, (int)Math.Round(p.StartTime.Milliseconds / 10.0), text));

                if (next == null || next.StartTime.TotalMilliseconds - p.EndTime.TotalMilliseconds > 100)
                {
                    TimeCode tc = new TimeCode(TimeSpan.FromMilliseconds(p.EndTime.TotalMilliseconds));
                    sb.AppendLine(string.Format("[{0:00}:{1:00}.{2:00}]{3}", tc.Hours * 60 + tc.Minutes, tc.Seconds, (int)Math.Round(tc.Milliseconds / 10.0), string.Empty));
                }
            }
            return sb.ToString().Trim();
        }
 private void buttonReset_Click(object sender, EventArgs e)
 {
     VideoOffset = new TimeCode();
     DoNotaddVideoOffsetToTimeCodes = checkBoxKeepTimeCodes.Checked;
     Reset = true;
     DialogResult = DialogResult.OK;
 }
Example #10
0
 private void buttonOK_Click(object sender, EventArgs e)
 {
     VideoOffset = timeUpDownVideoPosition.TimeCode;
     FromCurrentVideoPosition = checkBoxFromCurrentPosition.Checked;
     DoNotaddVideoOffsetToTimeCodes = checkBoxKeepTimeCodes.Checked;
     DialogResult = DialogResult.OK;
 }
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {   //00:02:09:34   00:02:13:07 - Hvad mener du så om konkurrencen?- Jo, det er helt fint.
            //00:02:14:02   00:02:16:41 - Var det den rigtige der vandt?- Ja, bestemt.
            //newline = \r (0D)

            _errorCount = 0;
            Paragraph lastParagraph = null;
            foreach (string line in lines)
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }

                bool success = false;
                bool isTimeCode = false;
                if (line.Length > 26 && line.IndexOf(':') == 2)
                {
                    var match = Regex.Match(line);
                    if (match.Success)
                    {
                        isTimeCode = true;
                        string s = line.Substring(0, match.Length);
                        s = s.Replace('\t', ':');
                        s = s.Replace(" ", string.Empty);
                        s = s.Trim().TrimEnd(':').TrimEnd();
                        string[] parts = s.Split(':');
                        if (parts.Length == 8)
                        {
                            int hours = int.Parse(parts[0]);
                            int minutes = int.Parse(parts[1]);
                            int seconds = int.Parse(parts[2]);
                            int milliseconds = int.Parse(parts[3]) * 10;
                            var start = new TimeCode(hours, minutes, seconds, milliseconds);

                            hours = int.Parse(parts[4]);
                            minutes = int.Parse(parts[5]);
                            seconds = int.Parse(parts[6]);
                            milliseconds = int.Parse(parts[7]) * 10;
                            var end = new TimeCode(hours, minutes, seconds, milliseconds);

                            string text = line.Substring(match.Length).TrimStart();
                            text = text.Replace("|", Environment.NewLine);

                            lastParagraph = new Paragraph(start, end, text);
                            subtitle.Paragraphs.Add(lastParagraph);
                            success = true;
                        }
                    }
                }
                if (!isTimeCode && lastParagraph != null && Utilities.GetNumberOfLines(lastParagraph.Text) < 5)
                {
                    lastParagraph.Text += Environment.NewLine + line.Trim();
                    success = true;
                }
                if (!success)
                    _errorCount++;
            }
            subtitle.Renumber();
        }
        /// <summary>
        /// Get formatting object for body element
        /// </summary>
        /// <param name="regionId"></param>
        /// <param name="tick"></param>
        /// <returns></returns>
        public override FormattingObject GetFormattingObject(TimeCode tick)
        {

            Block block = null;

            if (TemporallyActive(tick))
            {
                block = new Block(this);

                foreach (var child in Children)
                {
                    if (child is DivElement)
                    {
                        var fo = (child as DivElement).GetFormattingObject(tick);
                        if (fo != null)
                        {
                            fo.Parent = block;
                            block.Children.Add(fo);
                        }
                    }

                    if (child is SetElement)
                    {
                        var fo = ((child as SetElement).GetFormattingObject(tick)) as Animation;
                        if (fo != null)
                        {
                            // fo.Parent = block;
                            block.Animations.Add(fo);
                        }
                    }
                }
            }
            return block;
        }
Example #13
0
 private static void WriteTimeCode(FileStream fs, TimeCode tc)
 {
     fs.WriteByte((byte)(tc.Hours));
     fs.WriteByte((byte)(tc.Minutes));
     fs.WriteByte((byte)(tc.Seconds));
     fs.WriteByte((byte)(MillisecondsToFramesMaxFrameRate(tc.Milliseconds)));
 }
 private static string EncodeTimeCode(TimeCode time)
 {
     //00:50
     int seconds = time.Seconds;
     if (time.Milliseconds >= 500)
         seconds++;
     return string.Format("{0}:{1:00}", time.Hours * 60 + time.Minutes, time.Seconds);
 }
Example #15
0
 private static string EncodeTimeCode(TimeCode time)
 {
     //00:03:15:22 (last is frame)
     int sec = time.Seconds;
     if (time.Milliseconds >= 500)
         sec++;
     return string.Format("{0:00}:{1:00}:{2:00}:", time.Hours, time.Minutes, sec);
 }
 /// <summary>
 /// Return formatting object for br element
 /// </summary>
 /// <param name="regionId"></param>
 /// <param name="tick"></param>
 /// <returns></returns>
 public override FormattingObject GetFormattingObject(TimeCode tick)
 {
     if (TemporallyActive(tick))
     {
         return new InlineContent(this);
     }
     return null;
 }
Example #17
0
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {
            // 00:04:10:92 - 00:04:13:32    Raise Yourself To Help Mankind
            // 00:04:27:92 - 00:04:30:92    الجهة المتولية للمسئولية الاجتماعية لشركتنا.

            _errorCount = 0;
            Paragraph lastParagraph = null;
            foreach (string line in lines)
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }

                bool success = false;

                Match match = null;
                if (line.Length > 26 && line[2] == ':')
                    match = Regex.Match(line);

                if (match != null && match.Success)
                {
                    string s = line.Substring(0, match.Length);
                    s = s.Replace(" - ", ":");
                    s = s.Replace(" ", string.Empty);
                    string[] parts = s.Split(':');
                    if (parts.Length == 8)
                    {
                        int hours = int.Parse(parts[0]);
                        int minutes = int.Parse(parts[1]);
                        int seconds = int.Parse(parts[2]);
                        int milliseconds = int.Parse(parts[3]) * 10;
                        var start = new TimeCode(hours, minutes, seconds, milliseconds);

                        hours = int.Parse(parts[4]);
                        minutes = int.Parse(parts[5]);
                        seconds = int.Parse(parts[6]);
                        milliseconds = int.Parse(parts[7]) * 10;
                        var end = new TimeCode(hours, minutes, seconds, milliseconds);

                        string text = line.Substring(match.Length).TrimStart();
                        text = text.Replace("|", Environment.NewLine);

                        lastParagraph = new Paragraph(start, end, text);
                        subtitle.Paragraphs.Add(lastParagraph);
                        success = true;
                    }
                }
                else if (lastParagraph != null && Utilities.GetNumberOfLines(lastParagraph.Text) < 5)
                {
                    lastParagraph.Text += Environment.NewLine + line.Trim();
                    success = true;
                }
                if (!success)
                    _errorCount++;
            }
            subtitle.Renumber();
        }
Example #18
0
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {
            var paragraph = new Paragraph();
            ExpectingLine expecting = ExpectingLine.TimeStart;
            _errorCount = 0;

            subtitle.Paragraphs.Clear();
            char[] splitChars = { ':', ']', '[', ' ' };
            foreach (string line in lines)
            {
                if (line.StartsWith('[') && RegexTimeCode.IsMatch(line))
                {
                    string[] parts = line.Split(splitChars, StringSplitOptions.RemoveEmptyEntries);
                    if (parts.Length == 3)
                    {
                        try
                        {
                            int startHours = int.Parse(parts[0]);
                            int startMinutes = int.Parse(parts[1]);
                            int startSeconds = int.Parse(parts[2]);
                            var tc = new TimeCode(startHours, startMinutes, startSeconds, 0);
                            if (expecting == ExpectingLine.TimeStart)
                            {
                                paragraph = new Paragraph();
                                paragraph.StartTime = tc;
                                expecting = ExpectingLine.Text;
                            }
                            else if (expecting == ExpectingLine.TimeEnd)
                            {
                                paragraph.EndTime = tc;
                                expecting = ExpectingLine.TimeStart;
                                subtitle.Paragraphs.Add(paragraph);
                                paragraph = new Paragraph();
                            }
                        }
                        catch
                        {
                            _errorCount++;
                            expecting = ExpectingLine.TimeStart;
                        }
                    }
                }
                else
                {
                    if (expecting == ExpectingLine.Text)
                    {
                        if (line.Length > 0)
                        {
                            string text = line.Replace("|", Environment.NewLine);
                            paragraph.Text = text;
                            expecting = ExpectingLine.TimeEnd;
                        }
                    }
                }
            }
            subtitle.Renumber();
        }
 private static string EncodeTime(TimeCode time)
 {
     //3:15:22
     if (time.Hours > 0)
         return string.Format("{0:00}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds / 10);
     if (time.Minutes > 9)
         return string.Format("{0:00}:{1:00}.{2:00}", time.Minutes, time.Seconds, time.Milliseconds / 10);
     return string.Format("{0}:{1:00}.{2:00}", time.Minutes, time.Seconds, time.Milliseconds / 10);
 }
Example #20
0
 public Paragraph(int startFrame, int endFrame, string text)
 {
     StartTime = new TimeCode(0, 0, 0, 0);
     EndTime = new TimeCode(0, 0, 0, 0);
     StartFrame = startFrame;
     EndFrame = endFrame;
     Text = text;
     ID = GenerateId();
 }
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {   //00:02:10.354  00:02:13.047    00:00:02.693    Her er endnu en tekstfil fra DVD-Architect.Med 2 linier.
            //00:02:14.018  00:02:19.018    00:00:05.000    - Prøvetekst 2- Linie 2
            //newline = \r (0D)

            var regex = new Regex(@"^\d\d:\d\d:\d\d\.\d\d\d[ \t]+\d\d:\d\d:\d\d\.\d\d\d[ \t]+\d\d:\d\d:\d\d\.\d\d\d[ \t]+", RegexOptions.Compiled);
            _errorCount = 0;
            Paragraph lastParagraph = null;
            foreach (string line in lines)
            {
                if (line.Trim().Length > 0)
                {
                    string l = line;
                    string s = l;
                    bool success = false;
                    var match = regex.Match(s);
                    if (s.Length > 26 && match.Success)
                    {
                        s = s.Substring(0, match.Length);
                        s = s.Replace("\t", ":");
                        s = s.Replace(".", ":");
                        s = s.Replace(" ", string.Empty);
                        s = s.Trim().TrimEnd(':').TrimEnd();
                        string[] parts = s.Split(':');
                        if (parts.Length == 12)
                        {
                            int hours = int.Parse(parts[0]);
                            int minutes = int.Parse(parts[1]);
                            int seconds = int.Parse(parts[2]);
                            int milliseconds = int.Parse(parts[3]);
                            var start = new TimeCode(hours, minutes, seconds, milliseconds);

                            hours = int.Parse(parts[4]);
                            minutes = int.Parse(parts[5]);
                            seconds = int.Parse(parts[6]);
                            milliseconds = int.Parse(parts[7]);
                            var end = new TimeCode(hours, minutes, seconds, milliseconds);

                            string text = l.Substring(match.Length).TrimStart();
                            text = text.Replace("|", Environment.NewLine);

                            lastParagraph = new Paragraph(start, end, text);
                            subtitle.Paragraphs.Add(lastParagraph);
                            success = true;
                        }
                    }
                    else if (l.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
                    {
                        lastParagraph.Text += Environment.NewLine + l.Trim();
                        success = true;
                    }
                    if (!success && l.Trim().Length > 0)
                        _errorCount++;
                }
            }
            subtitle.Renumber(1);
        }
 /// <summary>
 /// Return formatting object for region element
 /// </summary>
 /// <param name="regionId"></param>
 /// <param name="tick"></param>
 /// <returns></returns>
 public override FormattingObject GetFormattingObject(TimeCode tick)
 {
     if (TemporallyActive(tick))
     {
         return new BlockContainer(this);
     }
     else
     {
         return null;
     }
 }
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {   //00:02:09:34   00:02:13:07 - Hvad mener du så om konkurrencen?- Jo, det er helt fint.
            //00:02:14:02   00:02:16:41 - Var det den rigtige der vandt?- Ja, bestemt.
            //newline = \r (0D)

            var regex = new Regex(@"^\d\d:\d\d:\d\d:\d\d[ \t]+\d\d:\d\d:\d\d:\d\d[ \t]+", RegexOptions.Compiled);
            _errorCount = 0;
            Paragraph lastParagraph = null;
            foreach (string line in lines)
            {
                if (line.Trim().Length > 0)
                {
                    bool success = false;
                    var match = regex.Match(line);
                    if (line.Length > 26 && match.Success)
                    {
                        string s = line.Substring(0, match.Length);
                        s = s.Replace("\t", ":");
                        s = s.Replace(" ", string.Empty);
                        s = s.Trim().TrimEnd(':').TrimEnd();
                        string[] parts = s.Split(':');
                        if (parts.Length == 8)
                        {
                            int hours = int.Parse(parts[0]);
                            int minutes = int.Parse(parts[1]);
                            int seconds = int.Parse(parts[2]);
                            int milliseconds = int.Parse(parts[3]) * 10;
                            var start = new TimeCode(hours, minutes, seconds, milliseconds);

                            hours = int.Parse(parts[4]);
                            minutes = int.Parse(parts[5]);
                            seconds = int.Parse(parts[6]);
                            milliseconds = int.Parse(parts[7]) * 10;
                            var end = new TimeCode(hours, minutes, seconds, milliseconds);

                            string text = line.Substring(match.Length).TrimStart();
                            text = text.Replace("|", Environment.NewLine);

                            lastParagraph = new Paragraph(start, end, text);
                            subtitle.Paragraphs.Add(lastParagraph);
                            success = true;
                        }
                    }
                    else if (line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
                    {
                        lastParagraph.Text += Environment.NewLine + line.Trim();
                        success = true;
                    }
                    if (!success)
                        _errorCount++;
                }
            }
            subtitle.Renumber(1);
        }
Example #24
0
 internal static string ConvertToTimeString(TimeCode time)
 {
     if (string.IsNullOrEmpty(Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormat))
         return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds));
     else if (Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormat.Trim().ToLower() == "seconds")
         return string.Format(CultureInfo.InvariantCulture, "{0:0.0#}s", time.TotalSeconds);
     else if (Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormat.Trim().ToLower() == "milliseconds")
         return string.Format(CultureInfo.InvariantCulture, "{0}ms", time.TotalMilliseconds);
     else if (Configuration.Settings.SubtitleSettings.TimedText10TimeCodeFormat.Trim().ToLower() == "ticks")
         return string.Format(CultureInfo.InvariantCulture, "{0}t", TimeSpan.FromMilliseconds(time.TotalMilliseconds).Ticks);
     return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds));
 }
Example #25
0
 public SetVideoOffset()
 {
     InitializeComponent();
     _videoOffset = new TimeCode(0);
     Text = Configuration.Settings.Language.SetVideoOffset.Title;
     labelDescription.Text = Configuration.Settings.Language.SetVideoOffset.Description;
     checkBoxFromCurrentPosition.Text = Configuration.Settings.Language.SetVideoOffset.RelativeToCurrentVideoPosition;
     buttonReset.Text = Configuration.Settings.Language.SetVideoOffset.Reset;
     buttonOK.Text = Configuration.Settings.Language.General.Ok;
     buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
     UiUtil.FixLargeFonts(this, buttonOK);
 }
        public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
        {   // 00:04:10:92 - 00:04:13:32    Raise Yourself To Help Mankind
            // 00:04:27:92 - 00:04:30:92    الجهة المتولية للمسئولية الاجتماعية لشركتنا.

            var regex = new Regex(@"^\d\d:\d\d:\d\d:\d\d[ ]+-[ ]+\d\d:\d\d:\d\d:\d\d", RegexOptions.Compiled);
            _errorCount = 0;
            Paragraph lastParagraph = null;
            foreach (string line in lines)
            {
                if (line.Trim().Length > 0)
                {
                    bool success = false;
                    var match = regex.Match(line);
                    if (line.Length > 26 && match.Success)
                    {
                        string s = line.Substring(0, match.Length);
                        s = s.Replace(" - ", ":");
                        s = s.Replace(" ", string.Empty);
                        string[] parts = s.Split(':');
                        if (parts.Length ==  8)
                        {
                            int hours = int.Parse(parts[0]);
                            int minutes = int.Parse(parts[1]);
                            int seconds = int.Parse(parts[2]);
                            int milliseconds = int.Parse(parts[3]) * 10;
                            var start = new TimeCode(hours, minutes, seconds, milliseconds);

                            hours = int.Parse(parts[4]);
                            minutes = int.Parse(parts[5]);
                            seconds = int.Parse(parts[6]);
                            milliseconds = int.Parse(parts[7]) * 10;
                            var end = new TimeCode(hours, minutes, seconds, milliseconds);

                            string text = line.Substring(match.Length).TrimStart();
                            text = text.Replace("|", Environment.NewLine);

                            lastParagraph = new Paragraph(start, end, text);
                            subtitle.Paragraphs.Add(lastParagraph);
                            success = true;
                        }
                    }
                    else if (line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
                    {
                        lastParagraph.Text += Environment.NewLine + line.Trim();
                        success = true;
                    }
                    if (!success)
                        _errorCount++;
                }
            }
            subtitle.Renumber(1);
        }
        /// <summary>
        /// Return the formatting object for set element
        /// </summary>
        /// <param name="regionId"></param>
        /// <param name="tick"></param>
        /// <returns></returns>
        public override FormattingObject GetFormattingObject(TimeCode tick)
        {

            if (TemporallyActive(tick))
            {
                var animation = new Animation(this);
                return animation;
            }
            else
            {
                return null;
            }
        }
Example #28
0
        private static TimeCode DecodeTimeCode(byte[] buffer, int index)
        {
            int hour = buffer[index];
            int minutes = buffer[index + 1];
            int seconds = buffer[index + 2];
            int frames = buffer[index + 3];

            int milliseconds = (int)((1000.0 / Configuration.Settings.General.CurrentFrameRate) * frames);
            if (milliseconds > 999)
                milliseconds = 999;

            TimeCode tc = new TimeCode(hour, minutes, seconds, milliseconds);
            return tc;
        }
Example #29
0
        private static List<string> GenerateTimes(string[] words, string text, TimeCode start, TimeCode end)
        {
            var list = new List<string>();

            double total = 0.0;
            for (int i = 0; i < words.Length; i++)
            {
                string word = words[i];
                double percent = (word.Length + 1.0) * 100 / text.Length;
                list.Add(Convert.ToInt64(start.TotalMilliseconds + (total * (end.TotalMilliseconds - start.TotalMilliseconds) / 100.0)).ToString());
                total += percent;
            }
            return list;
        }
Example #30
0
 private static bool GetTimeCode(TimeCode timeCode, string timeString)
 {
     try
     {
         string[] timeParts = timeString.Split(":.".ToCharArray());
         timeCode.Hours = int.Parse(timeParts[0]);
         timeCode.Minutes = int.Parse(timeParts[1]);
         timeCode.Seconds = int.Parse(timeParts[2]);
         timeCode.Milliseconds = int.Parse(timeParts[3]);
         return true;
     }
     catch
     {
         return false;
     }
 }
Example #31
0
 private static string EncodeTimeCode(TimeCode time)
 {
     //00:50:39:13 (last is frame)
     return(string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds)));
 }
 private void buttonOK_Click(object sender, EventArgs e)
 {
     VideoOffset = timeUpDownVideoPosition.TimeCode;
     FromCurrentVideoPosition = checkBoxFromCurrentPosition.Checked;
     DialogResult             = DialogResult.OK;
 }
Example #33
0
 private string ConvertToTimeString(TimeCode time)
 {
     return($"{time.Hours:00}:{time.Minutes:00}:{time.Seconds:00}:{MsToFramesMaxFrameRate(time.Milliseconds, _frameRate):00}");
 }
 private static Paragraph MakeTextParagraph(StringBuilder text, Paragraph p, TimeCode start, TimeCode end)
 {
     p = new Paragraph(start, end, text.ToString().Trim());
     if (p.Text.StartsWith(",b" + Environment.NewLine))
     {
         p.Text = "<i>" + p.Text.Remove(0, 2).Trim() + "</i>";
     }
     else if (p.Text.StartsWith(",1" + Environment.NewLine))
     {
         p.Text = "{\\an8}" + p.Text.Remove(0, 2).Trim();
     }
     else if (p.Text.StartsWith(",12" + Environment.NewLine))
     {
         p.Text = "{\\an8}" + p.Text.Remove(0, 3).Trim();
     }
     return(p);
 }
Example #35
0
 private static string EncodeTimeCode(TimeCode time)
 {
     return(time.ToHHMMSSFF());
 }
Example #36
0
        public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName)
        {
            // 00:04:10:92 - 00:04:13:32    Raise Yourself To Help Mankind
            // 00:04:27:92 - 00:04:30:92    الجهة المتولية للمسئولية الاجتماعية لشركتنا.

            _errorCount = 0;
            Paragraph lastParagraph = null;

            foreach (string line in lines)
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }

                bool success = false;

                Match match = null;
                if (line.Length > 26 && line[2] == ':')
                {
                    match = Regex.Match(line);
                }

                if (match != null && match.Success)
                {
                    string s = line.Substring(0, match.Length);
                    s = s.Replace(" - ", ":");
                    s = s.RemoveChar(' ');
                    string[] parts = s.Split(':');
                    if (parts.Length == 8)
                    {
                        int hours        = int.Parse(parts[0]);
                        int minutes      = int.Parse(parts[1]);
                        int seconds      = int.Parse(parts[2]);
                        int milliseconds = int.Parse(parts[3]) * 10;
                        var start        = new TimeCode(hours, minutes, seconds, milliseconds);

                        hours        = int.Parse(parts[4]);
                        minutes      = int.Parse(parts[5]);
                        seconds      = int.Parse(parts[6]);
                        milliseconds = int.Parse(parts[7]) * 10;
                        var end = new TimeCode(hours, minutes, seconds, milliseconds);

                        string text = line.Substring(match.Length).TrimStart();
                        text = text.Replace("|", Environment.NewLine);

                        lastParagraph = new Paragraph(start, end, text);
                        subtitle.Paragraphs.Add(lastParagraph);
                        success = true;
                    }
                }
                else if (lastParagraph != null && Utilities.GetNumberOfLines(lastParagraph.Text) < 5)
                {
                    lastParagraph.Text += Environment.NewLine + line.Trim();
                    success             = true;
                }
                if (!success)
                {
                    _errorCount++;
                }
            }
            subtitle.Renumber();
        }
Example #37
0
 private static string MakeTimeCode(TimeCode tc)
 {
     return(string.Format("{0:00}:{1:00}:{2:00};{3:00}", tc.Hours, tc.Minutes, tc.Seconds, MillisecondsToFramesMaxFrameRate(tc.Milliseconds)));
 }
Example #38
0
        public Cavena890SaveOptions(Subtitle subtitle, string subtitleFileName)
        {
            UiUtil.PreInitialize(this);
            InitializeComponent();
            UiUtil.FixFonts(this);

            buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
            buttonOK.Text     = Configuration.Settings.Language.General.Ok;

            timeUpDownStartTime.ForceHHMMSSFF();
            timeUpDownStartTime.TimeCode = new TimeCode(TimeCode.ParseHHMMSSFFToMilliseconds(Configuration.Settings.SubtitleSettings.Cavena890StartOfMessage));
            textBoxTranslatedTitle.Text  = Configuration.Settings.SubtitleSettings.CurrentCavena89Title;
            textBoxOriginalTitle.Text    = Configuration.Settings.SubtitleSettings.CurrentCavena890riginalTitle;
            textBoxTranslator.Text       = Configuration.Settings.SubtitleSettings.CurrentCavena890Translator;
            textBoxComment.Text          = Configuration.Settings.SubtitleSettings.CurrentCavena89Comment;
            if (string.IsNullOrWhiteSpace(textBoxComment.Text))
            {
                textBoxComment.Text = "Made with Subtitle Edit";
            }

            if (string.IsNullOrWhiteSpace(Configuration.Settings.SubtitleSettings.CurrentCavena89Title))
            {
                string title = Path.GetFileNameWithoutExtension(subtitleFileName) ?? string.Empty;
                if (title.Length > 28)
                {
                    title = title.Substring(0, 28);
                }
                textBoxTranslatedTitle.Text = title;
            }

            var language = LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle);

            switch (language)
            {
            case "he":
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdHebrew;
                comboBoxLanguage.SelectedIndex = 5;
                break;

            case "ru":
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdRussian;
                comboBoxLanguage.SelectedIndex = 6;
                break;

            case "ro":
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdRomanian;
                comboBoxLanguage.SelectedIndex = 7;
                break;

            case "zh":
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdChineseSimplified;
                comboBoxLanguage.SelectedIndex = 2;
                break;

            case "da":
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdDanish;
                comboBoxLanguage.SelectedIndex = 1;
                break;

            default:
                Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdEnglish;
                comboBoxLanguage.SelectedIndex = 4;
                break;
            }
        }
Example #39
0
        private void buttonImport_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter   = "Cavena 890 (*.890)|*.890";
            openFileDialog1.FileName = string.Empty;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                var buffer = FileUtil.ReadAllBytesShared(openFileDialog1.FileName);
                if (buffer.Length > 270)
                {
                    var s = System.Text.Encoding.ASCII.GetString(buffer, 40, 28);
                    textBoxTranslatedTitle.Text = s.Replace("\0", string.Empty);

                    s = System.Text.Encoding.ASCII.GetString(buffer, 218, 28);
                    textBoxOriginalTitle.Text = s.Replace("\0", string.Empty);

                    s = System.Text.Encoding.ASCII.GetString(buffer, 68, 28);
                    textBoxTranslator.Text = s.Replace("\0", string.Empty);

                    s = System.Text.Encoding.ASCII.GetString(buffer, 148, 24);
                    textBoxComment.Text = s.Replace("\0", string.Empty);

                    s = System.Text.Encoding.ASCII.GetString(buffer, 256, 11);
                    timeUpDownStartTime.TimeCode = new TimeCode(TimeCode.ParseHHMMSSFFToMilliseconds(s));

                    switch (buffer[146])
                    {
                    case Cavena890.LanguageIdHebrew:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdHebrew;
                        comboBoxLanguage.SelectedIndex = 5;
                        break;

                    case Cavena890.LanguageIdRussian:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdRussian;
                        comboBoxLanguage.SelectedIndex = 6;
                        break;

                    case Cavena890.LanguageIdChineseSimplified:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdChineseSimplified;
                        comboBoxLanguage.SelectedIndex = 2;
                        break;

                    case Cavena890.LanguageIdChineseTraditional:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdChineseSimplified;
                        comboBoxLanguage.SelectedIndex = 3;
                        break;

                    case Cavena890.LanguageIdDanish:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdDanish;
                        comboBoxLanguage.SelectedIndex = 1;
                        break;

                    case Cavena890.LanguageIdRomanian:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdRomanian;
                        comboBoxLanguage.SelectedIndex = 7;
                        break;

                    default:
                        Configuration.Settings.SubtitleSettings.CurrentCavena89LanguageId = Cavena890.LanguageIdEnglish;
                        comboBoxLanguage.SelectedIndex = 4;
                        break;
                    }
                }
            }
        }
Example #40
0
 private static string EncodeTimeCode(TimeCode time)
 {
     //[00:00:07.12]
     return(string.Format("[{0:00}:{1:00}:{2:00}.{3:00}]", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds)));
 }
Example #41
0
 private static string EncodeTimeCode(TimeCode time)
 {
     return(string.Format(" #{0:00}:{1:00}:{2:00}-{3:0}# ", time.Hours, time.Minutes, time.Seconds, Math.Round(time.Milliseconds / 100.0, 0)));
 }
Example #42
0
 private string ConvertToTimeString(TimeCode time)
 {
     return(string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MsToFramesMaxFrameRate(time.Milliseconds, _frameRate)));
 }
Example #43
0
        public void MakeAnimation()
        {
            TypewriterParagraphs = new List <Paragraph>();
            var      duration    = _paragraph.Duration.TotalMilliseconds - (double)numericUpDownDelay.Value * TimeCode.BaseUnit;
            var      stepsLength = CalculateStepLength(_paragraph.Text, duration);
            double   startMilliseconds;
            double   endMilliseconds;
            TimeCode start;
            TimeCode end;
            var      index        = 0;
            var      text         = string.Empty;
            var      tagOn        = false;
            var      tag          = string.Empty;
            var      i            = 0;
            var      beforeEndTag = string.Empty;
            var      alignment    = string.Empty;

            while (i < _paragraph.Text.Length)
            {
                if (i == 0 && _paragraph.Text.StartsWith("{\\", StringComparison.Ordinal) && _paragraph.Text.IndexOf('}') > 2)
                {
                    var j = i;
                    while (j < _paragraph.Text.Length &&
                           _paragraph.Text.Substring(j).StartsWith("{\\", StringComparison.Ordinal) &&
                           _paragraph.Text.Substring(j).IndexOf('}', j) > 2)
                    {
                        var idx = _paragraph.Text.IndexOf('}', j);
                        i = idx;
                        j = i + 1;
                    }
                    alignment = _paragraph.Text.Substring(0, j);
                }
                else if (_paragraph.Text.Substring(i).StartsWith("{\\", StringComparison.Ordinal) && _paragraph.Text.IndexOf('}', i) > 0)
                {
                    var endIndex = _paragraph.Text.IndexOf('}', i);
                    if (endIndex >= 0)
                    {
                        var assaTag = _paragraph.Text.Substring(i, endIndex - i + 1);
                        text += assaTag;
                        i     = endIndex + 1;
                        continue;
                    }
                }
                else if (tagOn)
                {
                    tag += _paragraph.Text[i];
                    if (_paragraph.Text[i] == '>')
                    {
                        tagOn = false;
                        if (tag.StartsWith("<font ", StringComparison.InvariantCultureIgnoreCase))
                        {
                            beforeEndTag = "</font>";
                        }
                        else if (tag == "<i>")
                        {
                            beforeEndTag = "</i>";
                        }
                        else if (tag == "<b>")
                        {
                            beforeEndTag = "</b>";
                        }
                        else if (tag == "<u>")
                        {
                            beforeEndTag = "</u>";
                        }
                    }
                }
                else if (_paragraph.Text[i] == '<')
                {
                    tagOn        = true;
                    tag         += _paragraph.Text[i];
                    beforeEndTag = string.Empty;
                }
                else
                {
                    text += tag + _paragraph.Text[i];
                    tag   = string.Empty;

                    startMilliseconds  = index * stepsLength;
                    startMilliseconds += _paragraph.StartTime.TotalMilliseconds;
                    endMilliseconds    = (index + 1) * stepsLength - 1;
                    endMilliseconds   += _paragraph.StartTime.TotalMilliseconds;
                    start              = new TimeCode(startMilliseconds);
                    end = new TimeCode(endMilliseconds);
                    TypewriterParagraphs.Add(new Paragraph(start, end, alignment + text + beforeEndTag)
                    {
                        Extra = _paragraph.Extra
                    });
                    index++;
                }

                i++;
            }

            if (numericUpDownDelay.Value > 0)
            {
                startMilliseconds  = index * stepsLength;
                startMilliseconds += _paragraph.StartTime.TotalMilliseconds;
                endMilliseconds    = _paragraph.EndTime.TotalMilliseconds;
                start              = new TimeCode(startMilliseconds);
                end = new TimeCode(endMilliseconds);
                TypewriterParagraphs.Add(new Paragraph(start, end, _paragraph.Text)
                {
                    Extra = _paragraph.Extra
                });
            }
            else if (TypewriterParagraphs.Count > 0)
            {
                TypewriterParagraphs[TypewriterParagraphs.Count - 1].EndTime.TotalMilliseconds = _paragraph.EndTime.TotalMilliseconds;
            }
        }
 private static string EncodeTimeCode(TimeCode time)
 {
     return(time.TotalSeconds.ToString(CultureInfo.InvariantCulture));
 }
Example #45
0
 private static string EncodeTimeCode(TimeCode time)
 {
     //00:03:15:22 (last is frame)
     return(time.ToHHMMSSFF());
 }
Example #46
0
        private static string EncodeTimeCode(TimeCode time)
        {
            var s = time.ToHHMMSSFF();

            return(AddSpaces(s));
        }
Example #47
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="startTC"></param>
 /// <param name="endTC"></param>
 public EraseSegment(TimeCode startTC, TimeCode endTC)
 {
     Cmd1 = Cmd1.xxxRequest;
     Cmd2 = (byte)xxxRequest.EraseSegment;
 }
Example #48
0
        /// <summary>
        /// Gets the thumbnail frame of the asset at the specific position.
        /// </summary>
        /// <param name="asset">The asset to extract the thumbnail from.</param>
        /// <returns>The thumbnail uri string.</returns>
        /// <param name="timeCode">The timecode to get the frame.</param>
        public string GetThumbnailSource(Asset asset, TimeCode timeCode)
        {
            string getFrame = String.Format(CultureInfo.InvariantCulture, GetFrameTimeCodeTemplate, asset.ProviderUri, timeCode);

            return(String.Concat(this.mediaServicesUri.ToString(), getFrame));
        }
Example #49
0
 public static string ConvertToTimeString(TimeCode time)
 {
     return($"{time.Hours:00}:{time.Minutes:00}:{time.Seconds:00}:{time.Milliseconds / 4:000}");
 }
        public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName)
        {
            _errorCount = 0;
            subtitle.Paragraphs.Clear();
            var       text   = new StringBuilder();
            var       header = new StringBuilder();
            Paragraph p      = null;

            for (int i = 0; i < lines.Count; i++)
            {
                string line = lines[i].Trim();
                if (subtitle.Paragraphs.Count == 0 && line.StartsWith(";") || line.Length == 0)
                {
                    header.AppendLine(line);
                }
                else if (RegexTimeCode.IsMatch(line))
                {
                    var timeParts = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (timeParts.Length == 1)
                    {
                        try
                        {
                            TimeCode start = DecodeTimeCode(timeParts[0]);
                            if (p != null && p.EndTime.TotalMilliseconds == 0)
                            {
                                p.EndTime.TotalMilliseconds = start.TotalMilliseconds - Configuration.Settings.General.MininumMillisecondsBetweenLines;
                            }
                            TimeCode end = new TimeCode(0, 0, 0, 0);
                            p = MakeTextParagraph(text, p, start, end);
                            subtitle.Paragraphs.Add(p);
                            text = new StringBuilder();
                        }
                        catch
                        {
                            _errorCount++;
                        }
                    }
                    else if (timeParts.Length == 2)
                    {
                        try
                        {
                            TimeCode start = DecodeTimeCode(timeParts[0]);
                            if (p != null && p.EndTime.TotalMilliseconds == 0)
                            {
                                p.EndTime.TotalMilliseconds = start.TotalMilliseconds - Configuration.Settings.General.MininumMillisecondsBetweenLines;
                            }
                            TimeCode end = DecodeTimeCode(timeParts[1]);
                            p = MakeTextParagraph(text, p, start, end);
                            subtitle.Paragraphs.Add(p);
                            text = new StringBuilder();
                        }
                        catch
                        {
                            _errorCount++;
                        }
                    }
                }
                else if (line.Trim().Length > 0)
                {
                    text.AppendLine(line.Trim().Replace("|", "♪"));
                    if (text.Length > 5000)
                    {
                        return;
                    }
                }
                else
                {
                    text = new StringBuilder();
                }
            }
            subtitle.Header = header.ToString();
            subtitle.Renumber(1);
        }
Example #51
0
 private static string MakeTimeCode(TimeCode tc)
 {
     return($"{tc.Hours:00}:{tc.Minutes:00}:{tc.Seconds:00};{MillisecondsToFramesMaxFrameRate(tc.Milliseconds):00}");
 }
Example #52
0
 internal static string ConvertToTimeString(TimeCode time)
 {
     return(Convert.ToInt64(Math.Round(time.TotalMilliseconds)).ToString(CultureInfo.InvariantCulture));
 }
Example #53
0
 private static string EncodeTimeCode(TimeCode time)
 {
     //00:03:15:22 (last is frame)
     return($"{time.Hours:00}:{time.Minutes:00}:{time.Seconds:00}:{MillisecondsToFramesMaxFrameRate(time.Milliseconds):00}");
 }
Example #54
0
 private string EncodeTimeCode(TimeCode time)
 {
     return(string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFramesMaxFrameRate(time.Milliseconds)));
 }
Example #55
0
 private string EncodeTimeCode(TimeCode time)
 {
     //00:03:15:22 (last is frame)
     return(string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)));
 }
Example #56
0
 private static string ConvertToTimeString(TimeCode time)
 {
     return(string.Format("{0:00}:{1:00}:{2:00}.{3:000}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds));
 }
Example #57
0
 private static string EncodeDuration(TimeCode timeCode)
 {
     return(string.Format("{0:00}:{1:00}", timeCode.Seconds, MillisecondsToFramesMaxFrameRate(timeCode.Milliseconds)));
 }
Example #58
0
        public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName)
        {
            _errorCount = 0;

            var sb = new StringBuilder();

            lines.ForEach(line => sb.AppendLine(line));
            var xml = new XmlDocument {
                XmlResolver = null
            };

            xml.LoadXml(sb.ToString().RemoveControlCharactersButWhiteSpace().Trim());

            var nsmgr = new XmlNamespaceManager(xml.NameTable);

            nsmgr.AddNamespace("ttaf1", xml.DocumentElement.NamespaceURI);

            XmlNode div = xml.DocumentElement.SelectSingleNode("//ttaf1:body", nsmgr).SelectSingleNode("ttaf1:div", nsmgr);

            if (div == null)
            {
                div = xml.DocumentElement.SelectSingleNode("//ttaf1:body", nsmgr).FirstChild;
            }

            var styleDic = new Dictionary <string, string>();

            foreach (XmlNode node in xml.DocumentElement.SelectNodes("//ttaf1:style", nsmgr))
            {
                if (node.Attributes["tts:fontStyle"] != null && node.Attributes["xml:id"] != null)
                {
                    styleDic.Add(node.Attributes["xml:id"].Value, node.Attributes["tts:fontStyle"].Value);
                }
            }
            bool couldBeFrames = true;
            bool couldBeMillisecondsWithMissingLastDigit = true;

            foreach (XmlNode node in div.ChildNodes)
            {
                try
                {
                    var pText = new StringBuilder();
                    foreach (XmlNode innerNode in node.ChildNodes)
                    {
                        switch (innerNode.Name.Replace("tt:", string.Empty))
                        {
                        case "br":
                            pText.AppendLine();
                            break;

                        case "span":
                            bool italic = false;
                            if (innerNode.Attributes["style"] != null && styleDic.ContainsKey(innerNode.Attributes["style"].Value))
                            {
                                if (styleDic[innerNode.Attributes["style"].Value].Contains("italic"))
                                {
                                    italic = true;
                                    pText.Append("<i>");
                                }
                            }
                            if (!italic && innerNode.Attributes != null)
                            {
                                var fs = innerNode.Attributes.GetNamedItem("tts:fontStyle");
                                if (fs != null && fs.Value == "italic")
                                {
                                    italic = true;
                                    pText.Append("<i>");
                                }
                            }
                            if (innerNode.HasChildNodes)
                            {
                                foreach (XmlNode innerInnerNode in innerNode.ChildNodes)
                                {
                                    if (innerInnerNode.Name == "br" || innerInnerNode.Name == "tt:br")
                                    {
                                        pText.AppendLine();
                                    }
                                    else
                                    {
                                        pText.Append(innerInnerNode.InnerText);
                                    }
                                }
                            }
                            else
                            {
                                pText.Append(innerNode.InnerText);
                            }
                            if (italic)
                            {
                                pText.Append("</i>");
                            }
                            break;

                        case "i":
                            pText.Append("<i>" + innerNode.InnerText + "</i>");
                            break;

                        case "b":
                            pText.Append("<b>" + innerNode.InnerText + "</b>");
                            break;

                        default:
                            pText.Append(innerNode.InnerText);
                            break;
                        }
                    }

                    string start = null; // = node.Attributes["begin"].InnerText;
                    string end   = null; // = node.Attributes["begin"].InnerText;
                    string dur   = null; // = node.Attributes["begin"].InnerText;
                    foreach (XmlAttribute attr in node.Attributes)
                    {
                        if (attr.Name.EndsWith("begin", StringComparison.Ordinal))
                        {
                            start = attr.InnerText;
                        }
                        else if (attr.Name.EndsWith("end", StringComparison.Ordinal))
                        {
                            end = attr.InnerText;
                        }
                        else if (attr.Name.EndsWith("duration", StringComparison.Ordinal))
                        {
                            dur = attr.InnerText;
                        }
                    }
                    //string start = node.Attributes["begin"].InnerText;
                    string text = pText.ToString();
                    text = text.Replace(Environment.NewLine + "</i>", "</i>" + Environment.NewLine);
                    text = text.Replace("<i></i>", string.Empty).Trim();
                    if (end != null)
                    {
                        if (end.Length != 11 || end.Substring(8, 1) != ":" || start == null ||
                            start.Length != 11 || start.Substring(8, 1) != ":")
                        {
                            couldBeFrames = false;
                        }

                        if (couldBeMillisecondsWithMissingLastDigit && (end.Length != 11 || start == null || start.Length != 11 || end.Substring(8, 1) != "." | start.Substring(8, 1) != "."))
                        {
                            couldBeMillisecondsWithMissingLastDigit = false;
                        }

                        //string end = node.Attributes["end"].InnerText;
                        double dBegin, dEnd;
                        if (!start.Contains(':') && Utilities.CountTagInText(start, '.') == 1 &&
                            !end.Contains(':') && Utilities.CountTagInText(end, '.') == 1 &&
                            double.TryParse(start, NumberStyles.Float, CultureInfo.InvariantCulture, out dBegin) && double.TryParse(end, NumberStyles.Float, CultureInfo.InvariantCulture, out dEnd))
                        {
                            subtitle.Paragraphs.Add(new Paragraph(text, dBegin * TimeCode.BaseUnit, dEnd * TimeCode.BaseUnit));
                        }
                        else
                        {
                            if (start.Length == 8 && start[2] == ':' && start[5] == ':' &&
                                end.Length == 8 && end[2] == ':' && end[5] == ':')
                            {
                                var p     = new Paragraph();
                                var parts = start.Split(new[] { ':' });
                                p.StartTime = new TimeCode(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), 0);
                                parts       = end.Split(new[] { ':' });
                                p.EndTime   = new TimeCode(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), 0);
                                p.Text      = text;
                                subtitle.Paragraphs.Add(p);
                            }
                            else
                            {
                                subtitle.Paragraphs.Add(new Paragraph(TimedText10.GetTimeCode(start, false), TimedText10.GetTimeCode(end, false), text));
                            }
                        }
                    }
                    else if (dur != null)
                    {
                        if (dur.Length != 11 || dur.Substring(8, 1) != ":" || start == null ||
                            start.Length != 11 || start.Substring(8, 1) != ":")
                        {
                            couldBeFrames = false;
                        }

                        if (couldBeMillisecondsWithMissingLastDigit && (dur.Length != 11 || start == null || start.Length != 11 || dur.Substring(8, 1) != "." | start.Substring(8, 1) != "."))
                        {
                            couldBeMillisecondsWithMissingLastDigit = false;
                        }

                        TimeCode duration  = TimedText10.GetTimeCode(dur, false);
                        TimeCode startTime = TimedText10.GetTimeCode(start, false);
                        var      endTime   = new TimeCode(startTime.TotalMilliseconds + duration.TotalMilliseconds);
                        subtitle.Paragraphs.Add(new Paragraph(startTime, endTime, text));
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    _errorCount++;
                }
            }
            subtitle.RemoveEmptyLines();

            if (couldBeFrames)
            {
                bool all30OrBelow = true;
                foreach (Paragraph p in subtitle.Paragraphs)
                {
                    if (p.StartTime.Milliseconds > 30 || p.EndTime.Milliseconds > 30)
                    {
                        all30OrBelow = false;
                    }
                }
                if (all30OrBelow)
                {
                    foreach (Paragraph p in subtitle.Paragraphs)
                    {
                        p.StartTime.Milliseconds = SubtitleFormat.FramesToMillisecondsMax999(p.StartTime.Milliseconds);
                        p.EndTime.Milliseconds   = SubtitleFormat.FramesToMillisecondsMax999(p.EndTime.Milliseconds);
                    }
                }
            }
            else if (couldBeMillisecondsWithMissingLastDigit)
            {
                foreach (Paragraph p in subtitle.Paragraphs)
                {
                    p.StartTime.Milliseconds *= 10;
                    p.EndTime.Milliseconds   *= 10;
                }
            }

            subtitle.Renumber();
        }
Example #59
0
 private static string EncodeTimeCode(TimeCode timeCode)
 {
     return($"{timeCode.Hours}:{timeCode.Minutes:00}:{timeCode.Seconds:00}:{MillisecondsToFramesMaxFrameRate(timeCode.Milliseconds):00}");
 }
Example #60
0
 private static string EncodeTime(TimeCode time)
 {
     return(string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds / 10.0));
 }