Refactor (src/Logic/SubtitleFormats) part 5

This commit is contained in:
ivandrofly 2015-07-30 01:02:48 +01:00
parent bdf07a864a
commit 07d24a03f1
7 changed files with 72 additions and 64 deletions

View File

@ -30,7 +30,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
public override bool IsMine(List<string> lines, string fileName)
{
Subtitle subtitle = new Subtitle();
var subtitle = new Subtitle();
LoadSubtitle(subtitle, lines, fileName);
return subtitle.Paragraphs.Count > _errorCount;
}
@ -72,7 +72,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
subtitle.Paragraphs.Clear();
foreach (string line in lines)
{
if (line.StartsWith("-->> "))
if (line.StartsWith("-->> ", StringComparison.Ordinal))
{
string timePart = line.Substring(4).Trim();
if (timePart.Length > 0)

View File

@ -39,9 +39,10 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
sb.AppendLine("@ This file written with the Avid Caption plugin, version 1");
sb.AppendLine();
sb.AppendLine("<begin subtitles>");
const string writeFormat = "{0} {1}{2}{3}{2}";
foreach (Paragraph p in subtitle.Paragraphs)
{
sb.AppendLine(string.Format("{0} {1}{2}{3}{2}", p.StartTime.ToHHMMSSFF(), EncodeEndTimeCode(p.EndTime), Environment.NewLine, HtmlUtil.RemoveHtmlTags(p.Text, true)));
sb.AppendLine(string.Format(writeFormat, p.StartTime.ToHHMMSSFF(), EncodeEndTimeCode(p.EndTime), Environment.NewLine, HtmlUtil.RemoveHtmlTags(p.Text, true)));
//00:50:34:22 00:50:39:13
//Ich muss dafür sorgen,
//dass die Epsteins weiterleben

View File

@ -9,7 +9,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
public class CapMakerPlus : SubtitleFormat
{
private static readonly Regex regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled);
public override string Extension
@ -148,7 +147,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
FileInfo fi = new FileInfo(fileName);
var fi = new FileInfo(fileName);
if (fi.Length >= 640 && fi.Length < 1024000) // not too small or too big
{
if (fileName.EndsWith(".cap", StringComparison.OrdinalIgnoreCase))

View File

@ -62,21 +62,21 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
get
{
if (DiskFormatCode.StartsWith("STL23"))
if (DiskFormatCode.StartsWith("STL23", StringComparison.Ordinal))
return 23.0;
if (DiskFormatCode.StartsWith("STL24"))
if (DiskFormatCode.StartsWith("STL24", StringComparison.Ordinal))
return 24.0;
if (DiskFormatCode.StartsWith("STL25"))
if (DiskFormatCode.StartsWith("STL25", StringComparison.Ordinal))
return 25.0;
if (DiskFormatCode.StartsWith("STL29"))
if (DiskFormatCode.StartsWith("STL29", StringComparison.Ordinal))
return 29.0;
if (DiskFormatCode.StartsWith("STL35"))
if (DiskFormatCode.StartsWith("STL35", StringComparison.Ordinal))
return 35.0;
if (DiskFormatCode.StartsWith("STL48"))
if (DiskFormatCode.StartsWith("STL48", StringComparison.Ordinal))
return 48.0;
if (DiskFormatCode.StartsWith("STL50"))
if (DiskFormatCode.StartsWith("STL50", StringComparison.Ordinal))
return 50.0;
if (DiskFormatCode.StartsWith("STL60"))
if (DiskFormatCode.StartsWith("STL60", StringComparison.Ordinal))
return 60.0;
return 30.0; // should be DiskFormatcode STL30.01
}
@ -332,7 +332,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
if (header.DisplayStandardCode == "0")
newline = encoding.GetString(new byte[] { 0x8A }); //8Ah=CR/LF
// newline = encoding.GetString(new byte[] { 0x85, 0x8A, 0x0D, 0x84, 0x80 }); //85h=boxing off, 8Ah=CR/LF, 84h=boxing on, 80h, Italics on
// newline = encoding.GetString(new byte[] { 0x85, 0x8A, 0x0D, 0x84, 0x80 }); //85h=boxing off, 8Ah=CR/LF, 84h=boxing on, 80h, Italics on
TextField = TextField.Replace(Environment.NewLine, newline);
@ -514,11 +514,11 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
else if (header.DisplayStandardCode == "0" && header.MaximumNumberOfDisplayableRows == "02") // open subtitling
rows = 15;
if (p.Text.StartsWith("{\\an7}") || p.Text.StartsWith("{\\an8}") || p.Text.StartsWith("{\\an9}"))
if (p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal))
{
tti.VerticalPosition = 1; // top (vertical)
}
else if (p.Text.StartsWith("{\\an4}") || p.Text.StartsWith("{\\an5}") || p.Text.StartsWith("{\\an6}"))
else if (p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal))
{
tti.VerticalPosition = (byte)(rows / 2); // middle (vertical)
}
@ -531,11 +531,11 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
}
tti.JustificationCode = saveOptions.JustificationCode;
if (p.Text.StartsWith("{\\an1}") || p.Text.StartsWith("{\\an4}") || p.Text.StartsWith("{\\an7}"))
if (p.Text.StartsWith("{\\an1}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an7}", StringComparison.Ordinal))
{
tti.JustificationCode = 1; // 01h=left-justified text
}
else if (p.Text.StartsWith("{\\an3}") || p.Text.StartsWith("{\\an6}") || p.Text.StartsWith("{\\an9}"))
else if (p.Text.StartsWith("{\\an3}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal))
{
tti.JustificationCode = 3; // 03h=right-justified
}
@ -547,7 +547,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
tti.SubtitleNumber = (ushort)subtitleNumber;
tti.TextField = p.Text;
int startTag = tti.TextField.IndexOf('}');
if (tti.TextField.StartsWith("{\\") && startTag > 0 && startTag < 10)
if (tti.TextField.StartsWith("{\\", StringComparison.Ordinal) && startTag > 0 && startTag < 10)
{
tti.TextField = tti.TextField.Remove(0, startTag + 1);
}
@ -579,15 +579,15 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
byte[] buffer = FileUtil.ReadAllBytesShared(fileName);
EbuGeneralSubtitleInformation header = ReadHeader(buffer);
if (header.DiskFormatCode.StartsWith("STL23") ||
header.DiskFormatCode.StartsWith("STL24") ||
header.DiskFormatCode.StartsWith("STL25") ||
header.DiskFormatCode.StartsWith("STL29") ||
header.DiskFormatCode.StartsWith("STL30") ||
header.DiskFormatCode.StartsWith("STL35") ||
header.DiskFormatCode.StartsWith("STL48") ||
header.DiskFormatCode.StartsWith("STL50") ||
header.DiskFormatCode.StartsWith("STL60"))
if (header.DiskFormatCode.StartsWith("STL23", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL24", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL25", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL29", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL30", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL35", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL48", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL50", StringComparison.Ordinal) ||
header.DiskFormatCode.StartsWith("STL60", StringComparison.Ordinal))
{
return Utilities.IsInteger(header.CodePageNumber) || fileName.EndsWith("stl", StringComparison.OrdinalIgnoreCase);
}
@ -688,7 +688,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
if (header.CharacterCodeTableNumber == "00")
{
//note that 0xC1—0xCF combines characters - http://en.wikipedia.org/wiki/ISO/IEC_6937
Encoding encoding = Encoding.GetEncoding(20269);
var encoding = Encoding.GetEncoding(20269);
string next = encoding.GetString(buffer, index + 1, 1);
switch (buffer[index])
{
@ -932,22 +932,22 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
}
if (header.CharacterCodeTableNumber == "01") // Latin/Cyrillic alphabet - from ISO 8859/5-1988
{
Encoding encoding = Encoding.GetEncoding("ISO-8859-5");
var encoding = Encoding.GetEncoding("ISO-8859-5");
return encoding.GetString(buffer, index, 1);
}
if (header.CharacterCodeTableNumber == "02") // Latin/Arabic alphabet - from ISO 8859/6-1987
{
Encoding encoding = Encoding.GetEncoding("ISO-8859-6");
var encoding = Encoding.GetEncoding("ISO-8859-6");
return encoding.GetString(buffer, index, 1);
}
if (header.CharacterCodeTableNumber == "03") // Latin/Greek alphabet - from ISO 8859/7-1987
{
Encoding encoding = Encoding.GetEncoding("ISO-8859-7"); // or ISO-8859-1 ?
var encoding = Encoding.GetEncoding("ISO-8859-7"); // or ISO-8859-1 ?
return encoding.GetString(buffer, index, 1);
}
if (header.CharacterCodeTableNumber == "04") // Latin/Hebrew alphabet - from ISO 8859/8-1988
{
Encoding encoding = Encoding.GetEncoding("ISO-8859-8");
var encoding = Encoding.GetEncoding("ISO-8859-8");
return encoding.GetString(buffer, index, 1);
}
@ -1016,28 +1016,36 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
switch (b)
{
case 0x00:
case 0x10: color = "Black";
case 0x10:
color = "Black";
break;
case 0x01:
case 0x11: color = "Red";
case 0x11:
color = "Red";
break;
case 0x02:
case 0x12: color = "Green";
case 0x12:
color = "Green";
break;
case 0x03:
case 0x13: color = "Yellow";
case 0x13:
color = "Yellow";
break;
case 0x04:
case 0x14: color = "Blue";
case 0x14:
color = "Blue";
break;
case 0x05:
case 0x15: color = "Magenta";
case 0x15:
color = "Magenta";
break;
case 0x06:
case 0x16: color = "Cyan";
case 0x16:
color = "Cyan";
break;
case 0x07:
case 0x17: color = "White";
case 0x17:
color = "White";
break;
}
}

View File

@ -24,8 +24,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
public override bool IsMine(List<string> lines, string fileName)
{
Subtitle subtitle = new Subtitle();
this.LoadSubtitle(subtitle, lines, fileName);
var subtitle = new Subtitle();
LoadSubtitle(subtitle, lines, fileName);
return subtitle.Paragraphs.Count > 0;
}
@ -35,7 +35,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine +
"<EEG708Captions/>";
XmlDocument xml = new XmlDocument();
var xml = new XmlDocument();
xml.LoadXml(xmlStructure);
foreach (Paragraph p in subtitle.Paragraphs)
@ -63,14 +63,14 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
_errorCount = 0;
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
lines.ForEach(line => sb.AppendLine(line));
string allText = sb.ToString();
if (!allText.Contains("<EEG708Captions") || !allText.Contains("<Caption"))
return;
XmlDocument xml = new XmlDocument();
var xml = new XmlDocument();
xml.XmlResolver = null;
try
{
@ -116,14 +116,13 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
private static TimeCode DecodeTimeCode(string[] parts)
{
string hour = parts[0];
string minutes = parts[1];
string seconds = parts[2];
string frames = parts[3];
var hour = int.Parse(parts[0]);
var minutes = int.Parse(parts[1]);
var seconds = int.Parse(parts[2]);
var frames = int.Parse(parts[3]);
TimeCode tc = new TimeCode(int.Parse(hour), int.Parse(minutes), int.Parse(seconds), FramesToMillisecondsMax999(int.Parse(frames)));
return tc;
return new TimeCode(hour, minutes, seconds, FramesToMillisecondsMax999(frames));
}
}
}
}

View File

@ -43,10 +43,11 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
var sb = new StringBuilder();
//double lastEndTimeMilliseconds = -1;
const string writeFormat = "{0}{1}";
foreach (Paragraph p in subtitle.Paragraphs)
{
// if (p.StartTime.TotalMilliseconds == lastEndTimeMilliseconds)
sb.AppendFormat("{0}{1}", HtmlUtil.RemoveHtmlTags(p.Text, true), EncodeTimeCode(p.EndTime));
sb.AppendFormat(writeFormat, HtmlUtil.RemoveHtmlTags(p.Text, true), EncodeTimeCode(p.EndTime));
//else
// sb.Append(string.Format("{0}{1}{2}", EncodeTimeCode(p.StartTime), HtmlUtil.RemoveHtmlTags(p.Text), EncodeTimeCode(p.EndTime)));
//lastEndTimeMilliseconds = p.EndTime.TotalMilliseconds;

View File

@ -8,7 +8,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
public class FabSubtitler : SubtitleFormat
{
private static Regex regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d:\d\d \d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled);
private static readonly Regex regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d:\d\d \d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled);
public override string Extension
{
@ -34,14 +34,15 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
public override string ToText(Subtitle subtitle, string title)
{
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
int index = 0;
const string writeFormat = "{0} {1}{2}{3}{2}";
foreach (Paragraph p in subtitle.Paragraphs)
{
//00:50:34:22 00:50:39:13
//Ich muss dafür sorgen,
//dass die Epsteins weiterleben
sb.AppendLine(string.Format("{0} {1}{2}{3}{2}", EncodeTimeCode(p.StartTime), EncodeTimeCode(p.EndTime), Environment.NewLine, HtmlUtil.RemoveHtmlTags(p.Text)));
sb.AppendLine(string.Format(writeFormat, EncodeTimeCode(p.StartTime), EncodeTimeCode(p.EndTime), Environment.NewLine, HtmlUtil.RemoveHtmlTags(p.Text)));
index++;
}
return sb.ToString();
@ -95,13 +96,12 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
private static TimeCode DecodeTimeCode(string[] parts)
{
//00:00:07:12
string hour = parts[0];
string minutes = parts[1];
string seconds = parts[2];
string frames = parts[3];
TimeCode tc = new TimeCode(int.Parse(hour), int.Parse(minutes), int.Parse(seconds), FramesToMillisecondsMax999(int.Parse(frames)));
return tc;
var hour = int.Parse(parts[0]);
var minutes = int.Parse(parts[1]);
var seconds = int.Parse(parts[2]);
var frames = int.Parse(parts[3]);
return new TimeCode(hour, minutes, seconds, FramesToMillisecondsMax999(frames));
}
}
}
}