mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-28 06:52:35 +01:00
Refactor (src/Logic/SubtitleFormats) part 5
This commit is contained in:
parent
bdf07a864a
commit
07d24a03f1
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user