2017-10-31 07:34:59 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
|
|
|
|
namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|
|
|
|
{
|
|
|
|
|
public class UnknownSubtitle86 : SubtitleFormat
|
|
|
|
|
{
|
|
|
|
|
private static readonly Regex RegexTimeCodes = new Regex(@"^\[\d\d\.\d\d\.\d\d\] ", RegexOptions.Compiled);
|
|
|
|
|
|
|
|
|
|
public override string Extension => ".txt";
|
|
|
|
|
|
|
|
|
|
public override string Name => "Unknown 86";
|
|
|
|
|
|
|
|
|
|
public override string ToText(Subtitle subtitle, string title)
|
|
|
|
|
{
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
foreach (var p in subtitle.Paragraphs)
|
|
|
|
|
{
|
|
|
|
|
string text = HtmlUtil.RemoveHtmlTags(p.Text);
|
|
|
|
|
text = text.Replace(Environment.NewLine, " ");
|
|
|
|
|
sb.AppendLine($"[{p.StartTime.Hours:00}.{p.StartTime.Minutes:00}.{p.StartTime.Seconds:00}] {text}");
|
|
|
|
|
}
|
|
|
|
|
return sb.ToString().Trim();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
|
|
|
|
{
|
|
|
|
|
_errorCount = 0;
|
|
|
|
|
foreach (string line in lines)
|
|
|
|
|
{
|
|
|
|
|
bool success = false;
|
|
|
|
|
string s = line.TrimStart();
|
|
|
|
|
if (s.StartsWith('[') && RegexTimeCodes.Match(s).Success)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string[] parts = s.Substring(1, 8).Split('.');
|
|
|
|
|
if (parts.Length == 3)
|
|
|
|
|
{
|
|
|
|
|
int hours = int.Parse(parts[0]);
|
|
|
|
|
int minutes = int.Parse(parts[1]);
|
|
|
|
|
int seconds = int.Parse(parts[2]);
|
|
|
|
|
string text = s.Remove(0, 10).TrimStart();
|
|
|
|
|
text = text.Replace("|", Environment.NewLine);
|
|
|
|
|
var start = new TimeCode(hours, minutes, seconds, 0);
|
|
|
|
|
double duration = Utilities.GetOptimalDisplayMilliseconds(text);
|
|
|
|
|
var end = new TimeCode(start.TotalMilliseconds + duration);
|
|
|
|
|
|
|
|
|
|
var p = new Paragraph(start, end, Utilities.AutoBreakLine(text));
|
|
|
|
|
subtitle.Paragraphs.Add(p);
|
|
|
|
|
success = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
_errorCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!success)
|
2019-01-19 14:40:37 +01:00
|
|
|
|
{
|
2017-10-31 07:34:59 +01:00
|
|
|
|
_errorCount++;
|
2019-01-19 14:40:37 +01:00
|
|
|
|
}
|
2017-10-31 07:34:59 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int index = 0;
|
|
|
|
|
foreach (var p in subtitle.Paragraphs)
|
|
|
|
|
{
|
|
|
|
|
var next = subtitle.GetParagraphOrDefault(index + 1);
|
|
|
|
|
if (next != null && next.StartTime.TotalMilliseconds <= p.EndTime.TotalMilliseconds)
|
2019-01-19 14:40:37 +01:00
|
|
|
|
{
|
2017-10-31 07:34:59 +01:00
|
|
|
|
p.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - Configuration.Settings.General.MinimumMillisecondsBetweenLines;
|
2019-01-19 14:40:37 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-10-31 07:34:59 +01:00
|
|
|
|
if (p.Duration.TotalMilliseconds > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds)
|
2019-01-19 14:40:37 +01:00
|
|
|
|
{
|
2017-10-31 07:34:59 +01:00
|
|
|
|
p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds;
|
2019-01-19 14:40:37 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-10-31 07:34:59 +01:00
|
|
|
|
index++;
|
|
|
|
|
p.Number = index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|