mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-25 12:44:46 +01:00
Minor performance fixes (mostly subtitle loading)
This commit is contained in:
parent
2315a0f9cf
commit
19b1822e7d
@ -102,7 +102,7 @@ Email: mailto:nikse.dk@gmail.com</AboutText1>
|
||||
<SourceVideoFile>Source video file:</SourceVideoFile>
|
||||
<GenerateWaveFormData>Generate wave form data</GenerateWaveFormData>
|
||||
<PleaseWait>This may take a few minutes - please wait</PleaseWait>
|
||||
<VlcMediaPlayerNotFoundTitle>VLC Media Player not found</VlcMediaPlayerNotFoundTitle>
|
||||
<VlcMediaPlayerNotFoundTitle>VLC media player not found</VlcMediaPlayerNotFoundTitle>
|
||||
<VlcMediaPlayerNotFound>Subtitle Edit needs VLC media player 1.1.x or newer for extracting audio data.</VlcMediaPlayerNotFound>
|
||||
<GoToVlcMediaPlayerHomePage>Do you want to go to the VLC media player home page?</GoToVlcMediaPlayerHomePage>
|
||||
<GeneratingPeakFile>Generating peak file...</GeneratingPeakFile>
|
||||
@ -1497,8 +1497,8 @@ can edit in same subtitle file (collaboration)</Information>
|
||||
<ManagedDirectXDescription>Microsoft.DirectX.AudioVideoPlayback - .NET Managed code from DirectX</ManagedDirectXDescription>
|
||||
<MPlayer>MPlayer</MPlayer>
|
||||
<MPlayerDescription>MPlayer2/Mplayer</MPlayerDescription>
|
||||
<VlcMediaPlayer>VLC Media Player</VlcMediaPlayer>
|
||||
<VlcMediaPlayerDescription>libvlc.dll from VLC Media Player 1.1.0 or newer</VlcMediaPlayerDescription>
|
||||
<VlcMediaPlayer>VLC media player</VlcMediaPlayer>
|
||||
<VlcMediaPlayerDescription>libvlc.dll from VLC media player 1.1.0 or newer</VlcMediaPlayerDescription>
|
||||
<VlcBrowseToLabel>VLC path (only needed if you're using the portable version of VLC)</VlcBrowseToLabel>
|
||||
<ShowStopButton>Show stop button</ShowStopButton>
|
||||
<ShowMuteButton>Show mute button</ShowMuteButton>
|
||||
|
@ -185,7 +185,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
else
|
||||
{
|
||||
int index = newText.ToLower().IndexOf(findWhat.ToLower());
|
||||
int index = newText.IndexOf(findWhat, StringComparison.OrdinalIgnoreCase);
|
||||
while (index >= 0)
|
||||
{
|
||||
if (index < newText.Length)
|
||||
@ -194,7 +194,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
newText = newText.Substring(0, index) + replaceWith;
|
||||
|
||||
hit = true;
|
||||
index = newText.ToLower().IndexOf(findWhat.ToLower(), index + replaceWith.Length);
|
||||
index = newText.IndexOf(findWhat, index + replaceWith.Length, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
@ -764,7 +765,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
if (code.Length == 4)
|
||||
{
|
||||
sb.Append(code + " ");
|
||||
if (code.StartsWith("9") || code.StartsWith("8")) // control codes must be double
|
||||
if (code.StartsWith('9') || code.StartsWith('8')) // control codes must be double
|
||||
sb.Append(code + " ");
|
||||
code = string.Empty;
|
||||
}
|
||||
@ -849,7 +850,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
|
||||
public static SCCPositionAndStyle GetColorAndPosition(string code)
|
||||
{
|
||||
switch (code.ToLower())
|
||||
switch (code.ToLower(CultureInfo.InvariantCulture))
|
||||
{
|
||||
|
||||
//NO x-coordinate?
|
||||
@ -1598,7 +1599,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
TimeCode startTime = ParseTimeCode(s.Substring(0, match.Length - 1));
|
||||
string text = GetSccText(s.Substring(match.Index), ref _errorCount);
|
||||
|
||||
if (text == "942c 942c" || text == "942c")
|
||||
if (string.Compare(text, "942c 942c", StringComparison.Ordinal) == 0 || string.Compare(text, "942c", StringComparison.Ordinal) == 0)
|
||||
{
|
||||
p.EndTime = new TimeCode(startTime.TotalMilliseconds);
|
||||
}
|
||||
@ -1638,13 +1639,13 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
string part = parts[k];
|
||||
if (part.Length == 4)
|
||||
{
|
||||
if (part == "94ae" || part == "9420" || string.Compare(part, "94ad", StringComparison.OrdinalIgnoreCase) == 0 || part == "9426")
|
||||
if (string.Compare(part, "94ae", StringComparison.Ordinal) == 0 || string.Compare(part, "9420", StringComparison.Ordinal) == 0 || string.Compare(part, "94ad", StringComparison.OrdinalIgnoreCase) == 0 || part == "9426")
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
string nextPart = string.Empty;
|
||||
if (part.StartsWith("9") || part.StartsWith("8"))
|
||||
if (part.StartsWith('9') || part.StartsWith('8'))
|
||||
{
|
||||
if (k + 1 < parts.Length && parts[k + 1] == part)
|
||||
k++;
|
||||
@ -1717,7 +1718,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
|
||||
private static string GetLetter(string hexCode)
|
||||
{
|
||||
int index = _letterCodes.IndexOf(hexCode.ToLower());
|
||||
int index = _letterCodes.IndexOf(hexCode.ToLower(CultureInfo.InvariantCulture));
|
||||
if (index < 0)
|
||||
return null;
|
||||
|
||||
|
@ -7,6 +7,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class SonyDVDArchitectExplicitDuration : SubtitleFormat
|
||||
{
|
||||
|
||||
private static Regex 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);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".sub"; }
|
||||
@ -50,7 +53,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
//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)
|
||||
@ -60,9 +62,14 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
string l = line;
|
||||
string s = l;
|
||||
bool success = false;
|
||||
var match = regex.Match(s);
|
||||
if (s.Length > 26 && match.Success)
|
||||
bool isTimeCode = false;
|
||||
|
||||
if (s.Length > 26 && s.IndexOf(':') == 2)
|
||||
{
|
||||
var match = regex.Match(s);
|
||||
if (match.Success)
|
||||
{
|
||||
isTimeCode = true;
|
||||
s = s.Substring(0, match.Length);
|
||||
s = s.Replace("\t", ":");
|
||||
s = s.Replace(".", ":");
|
||||
@ -91,7 +98,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
else if (l.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
|
||||
}
|
||||
if (!isTimeCode && l.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
{
|
||||
lastParagraph.Text += Environment.NewLine + l.Trim();
|
||||
success = true;
|
||||
|
@ -7,6 +7,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class SonyDVDArchitectLineAndDuration : SubtitleFormat
|
||||
{
|
||||
private static Regex regex = new Regex(@"^\d+\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".txt"; }
|
||||
@ -61,20 +63,22 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
|
||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||
{ //22 00:04:19:12 00:04:21:09 00:00:01:21
|
||||
|
||||
var regex = new Regex(@"^\d+\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled);
|
||||
_errorCount = 0;
|
||||
Paragraph lastParagraph = null;
|
||||
int count = 0;
|
||||
foreach (string line in lines)
|
||||
{
|
||||
string s = line;
|
||||
bool isTimeCode = false;
|
||||
if (s.Length > 0)
|
||||
{
|
||||
bool success = false;
|
||||
var match = regex.Match(s);
|
||||
if (s.Length > 31 && match.Success)
|
||||
if (s.Length > 31 && s.IndexOf(':') > 1)
|
||||
{
|
||||
var match = regex.Match(s);
|
||||
if (match.Success)
|
||||
{
|
||||
isTimeCode = true;
|
||||
if (lastParagraph != null)
|
||||
subtitle.Paragraphs.Add(lastParagraph);
|
||||
|
||||
@ -84,7 +88,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
lastParagraph = new Paragraph(start, end, string.Empty);
|
||||
success = true;
|
||||
}
|
||||
else if (line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
}
|
||||
if (!isTimeCode && line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
{
|
||||
lastParagraph.Text = (lastParagraph.Text + Environment.NewLine + line).Trim();
|
||||
success = true;
|
||||
@ -112,5 +117,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
TimeCode tc = new TimeCode(int.Parse(hour), int.Parse(minutes), int.Parse(seconds), FramesToMillisecondsMax999(int.Parse(frames)));
|
||||
return tc;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class SonyDVDArchitectTabs : SubtitleFormat
|
||||
{
|
||||
private static Regex regex = new Regex(@"^\d\d:\d\d:\d\d:\d\d[ \t]+\d\d:\d\d:\d\d:\d\d[ \t]+", RegexOptions.Compiled);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".sub"; }
|
||||
@ -49,7 +51,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
//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)
|
||||
@ -57,9 +58,13 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
if (line.Trim().Length > 0)
|
||||
{
|
||||
bool success = false;
|
||||
var match = regex.Match(line);
|
||||
if (line.Length > 26 && match.Success)
|
||||
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);
|
||||
@ -87,7 +92,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
else if (line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
}
|
||||
if (!isTimeCode && line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4)
|
||||
{
|
||||
lastParagraph.Text += Environment.NewLine + line.Trim();
|
||||
success = true;
|
||||
|
@ -7,6 +7,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class SonyDVDArchitectWithLineNumbers : SubtitleFormat
|
||||
{
|
||||
private static Regex regexTimeCode = new Regex(@"^\d\d\d\d \d\d:\d\d:\d\d:\d\d \d\d:\d\d:\d\d:\d\d", RegexOptions.Compiled);
|
||||
private static Regex regex1DigitMillisecs = new Regex(@"^\d\d\d\d \d\d\d:\d\d:\d\d:\d \d\d\d:\d\d:\d\d:\d", RegexOptions.Compiled);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".sub"; }
|
||||
@ -48,8 +51,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{ // 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:\d\d:\d\d", RegexOptions.Compiled);
|
||||
var regex1DigitMillisecs = new Regex(@"^\d\d\d\d \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)
|
||||
@ -58,7 +59,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
if (s.Length > 0)
|
||||
{
|
||||
bool success = false;
|
||||
var match = regex.Match(s);
|
||||
if (line.IndexOf(':') > 0)
|
||||
{
|
||||
var match = regexTimeCode.Match(s);
|
||||
var match1DigitMillisecs = regex1DigitMillisecs.Match(s);
|
||||
if (s.Length > 31 && match.Success)
|
||||
{
|
||||
@ -121,6 +124,12 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
lastParagraph.Text += Environment.NewLine + line.Trim();
|
||||
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++;
|
||||
}
|
||||
|
@ -7,6 +7,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class SpruceWithSpace : 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);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".stl"; }
|
||||
@ -89,10 +92,9 @@ $TapeOffset = FALSE
|
||||
//00:01:54:19,00:01:56:17,We should be thankful|they accepted our offer.
|
||||
_errorCount = 0;
|
||||
subtitle.Paragraphs.Clear();
|
||||
var regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d:\d\d, \d\d:\d\d:\d\d:\d\d,.+", RegexOptions.Compiled);
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (regexTimeCodes.IsMatch(line))
|
||||
if (line.IndexOf(':') == 2 && regexTimeCodes.IsMatch(line))
|
||||
{
|
||||
string start = line.Substring(0, 11);
|
||||
string end = line.Substring(13, 11);
|
||||
|
@ -7,6 +7,10 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class StructuredTitles : SubtitleFormat
|
||||
{
|
||||
private static Regex regexTimeCodes = new Regex(@"^\d\d\d\d : \d\d:\d\d:\d\d:\d\d,\d\d:\d\d:\d\d:\d\d,\d\d", RegexOptions.Compiled);
|
||||
private static Regex regexSomeCodes = new Regex(@"^\d\d \d\d \d\d", RegexOptions.Compiled);
|
||||
private static Regex regexText = new Regex(@"^[A-Z]\d[A-Z]\d\d ", RegexOptions.Compiled);
|
||||
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".txt"; }
|
||||
@ -73,12 +77,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
_errorCount = 0;
|
||||
Paragraph p = null;
|
||||
subtitle.Paragraphs.Clear();
|
||||
var regexTimeCodes = new Regex(@"^\d\d\d\d : \d\d:\d\d:\d\d:\d\d,\d\d:\d\d:\d\d:\d\d,\d\d", RegexOptions.Compiled);
|
||||
var regexSomeCodes = new Regex(@"^\d\d \d\d \d\d", RegexOptions.Compiled);
|
||||
var regexText = new Regex(@"^[A-Z]\d[A-Z]\d\d ", RegexOptions.Compiled);
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (regexTimeCodes.IsMatch(line))
|
||||
if (line.IndexOf(':') == 5 && regexTimeCodes.IsMatch(line))
|
||||
{
|
||||
if (p != null)
|
||||
subtitle.Paragraphs.Add(p);
|
||||
@ -100,7 +101,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
else
|
||||
p.Text += Environment.NewLine + line.Substring(5).Trim();
|
||||
}
|
||||
else if (regexSomeCodes.IsMatch(line))
|
||||
else if (line.Length < 10 && regexSomeCodes.IsMatch(line))
|
||||
{
|
||||
}
|
||||
else if (line.Trim().Length == 0)
|
||||
|
@ -7,6 +7,8 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class UnknownSubtitle4 : SubtitleFormat
|
||||
{
|
||||
private static Regex regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d.\d+, \d\d:\d\d:\d\d.\d+$", RegexOptions.Compiled);
|
||||
|
||||
private enum ExpectingLine
|
||||
{
|
||||
TimeCodes,
|
||||
@ -74,8 +76,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
|
||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||
{
|
||||
var regexTimeCodes = new Regex(@"^\d\d:\d\d:\d\d.\d+, \d\d:\d\d:\d\d.\d+$", RegexOptions.Compiled);
|
||||
|
||||
var paragraph = new Paragraph();
|
||||
ExpectingLine expecting = ExpectingLine.TimeCodes;
|
||||
_errorCount = 0;
|
||||
@ -83,7 +83,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
subtitle.Paragraphs.Clear();
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (regexTimeCodes.IsMatch(line))
|
||||
if (line.IndexOf(':') == 2 && regexTimeCodes.IsMatch(line))
|
||||
{
|
||||
string[] parts = line.Split(new[] { ':', ',', '.', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length == 8)
|
||||
|
@ -7,6 +7,9 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
public class UnknownSubtitle6 : SubtitleFormat
|
||||
{
|
||||
private static Regex regexBeforeText = new Regex(@"^\d\s+\d\s+\d\s+\d\s+\d\s+\d$", RegexOptions.Compiled);
|
||||
private static Regex regexTimeCodes = new Regex(@"^\d+\s+\d+$", RegexOptions.Compiled);
|
||||
|
||||
private enum ExpectingLine
|
||||
{
|
||||
TimeCodes,
|
||||
@ -73,9 +76,6 @@ SRPSKI
|
||||
|
||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||
{
|
||||
var regexBeforeText = new Regex(@"^\d\s+\d\s+\d\s+\d\s+\d\s+\d$", RegexOptions.Compiled);
|
||||
var regexTimeCodes = new Regex(@"^\d+\s+\d+$", RegexOptions.Compiled);
|
||||
|
||||
var paragraph = new Paragraph();
|
||||
ExpectingLine expecting = ExpectingLine.TimeCodes;
|
||||
_errorCount = 0;
|
||||
@ -83,7 +83,6 @@ SRPSKI
|
||||
subtitle.Paragraphs.Clear();
|
||||
foreach (string line in lines)
|
||||
{
|
||||
|
||||
string s = line.Trim();
|
||||
if (regexTimeCodes.IsMatch(s))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user