First refactor of "names etc list"

This commit is contained in:
niksedk 2014-10-02 18:26:45 +02:00
parent 80d11ac294
commit 4547e9590c
9 changed files with 529 additions and 663 deletions

View File

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Logic.Dictionaries;
namespace Nikse.SubtitleEdit.Forms
{
@ -132,7 +133,9 @@ namespace Nikse.SubtitleEdit.Forms
if (string.IsNullOrEmpty(languageName))
languageName = "en_US";
if (Nikse.SubtitleEdit.Logic.Dictionaries.NamesList.AddWordToLocalNamesEtcList(textBoxAddName.Text, languageName))
var namesList = new NamesList(Configuration.DictionariesFolder, languageName, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
if (namesList.Add(textBoxAddName.Text, languageName))
DialogResult = DialogResult.OK;
else
DialogResult = DialogResult.Cancel;

View File

@ -69,14 +69,8 @@ namespace Nikse.SubtitleEdit.Forms
internal void FixCasing(Subtitle subtitle, string language)
{
var namesEtc = new List<string>();
var tmp = new List<string>();
NamesList.LoadNamesEtcWordLists(tmp, tmp, language);
foreach (string s in tmp)
{
if (s.Contains('.'))
namesEtc.Add(s);
}
var namesList = new NamesList(Configuration.DictionariesFolder, language, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
var namesEtc = namesList.GetAllNames();
// Longer names must be first
namesEtc.Sort((s1, s2) => s2.Length.CompareTo(s1.Length));

View File

@ -124,16 +124,16 @@ namespace Nikse.SubtitleEdit.Forms
private void FindAllNames()
{
var namesEtcList = new List<string>();
string language = Utilities.AutoDetectLanguageName("en_US", _subtitle);
if (string.IsNullOrEmpty(language))
language = "en_US";
var namesList = new NamesList(Configuration.DictionariesFolder, language, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
// Will contains both one word names and multi names
var namesEtcList = namesList.GetAllNames();
//string languageCode = Utilities.AutoDetectGoogleLanguage(_subtitle);
string languageCode = Utilities.AutoDetectLanguageName("en_US", _subtitle);
if (string.IsNullOrEmpty(languageCode))
languageCode = "en_US";
NamesList.LoadNamesEtcWordLists(namesEtcList, namesEtcList, languageCode);
if (languageCode.StartsWith("en"))
if (language.StartsWith("en"))
{
if (namesEtcList.Contains("Black"))
namesEtcList.Remove("Black");

View File

@ -1,4 +1,9 @@
using System;
using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Dictionaries;
using Nikse.SubtitleEdit.Logic.Forms;
using Nikse.SubtitleEdit.Logic.Ocr;
using Nikse.SubtitleEdit.Logic.SubtitleFormats;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
@ -6,10 +11,6 @@ using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Ocr;
using Nikse.SubtitleEdit.Logic.SubtitleFormats;
using Nikse.SubtitleEdit.Logic.Forms;
namespace Nikse.SubtitleEdit.Forms
{
@ -127,7 +128,7 @@ namespace Nikse.SubtitleEdit.Forms
public bool Descending { get; set; }
}
public Subtitle _subtitle;
public Subtitle Subtitle;
private SubtitleFormat _format;
private Encoding _encoding = Encoding.UTF8;
private Subtitle _originalSubtitle;
@ -136,12 +137,12 @@ namespace Nikse.SubtitleEdit.Forms
private List<FixItem> _fixActions;
private int _subtitleListViewIndex = -1;
private bool _onlyListFixes = true;
private bool _batchMode = false;
private bool _batchMode;
private string _autoDetectGoogleLanguage;
private List<string> _namesEtcList;
private List<string> _abbreviationList;
private StringBuilder _newLog = new StringBuilder();
private StringBuilder _appliedLog = new StringBuilder();
private readonly StringBuilder _appliedLog = new StringBuilder();
private int _numberOfImportantLogMessages = 0;
private List<int> _deleteIndices = new List<int>();
@ -154,7 +155,7 @@ namespace Nikse.SubtitleEdit.Forms
{
_autoDetectGoogleLanguage = language;
var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterISOLanguageName = ci.ThreeLetterISOLanguageName;
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName;
comboBoxLanguage.Items.Clear();
foreach (CultureInfo x in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
@ -170,16 +171,16 @@ namespace Nikse.SubtitleEdit.Forms
languageIndex = j;
break;
}
else if (xci.TwoLetterISOLanguageName == "en")
if (xci.TwoLetterISOLanguageName == "en")
{
languageIndex = j;
}
j++;
}
comboBoxLanguage.SelectedIndex = languageIndex;
AddFixActions(threeLetterISOLanguageName);
AddFixActions(threeLetterIsoLanguageName);
_originalSubtitle = new Subtitle(subtitle); // copy constructor
_subtitle = new Subtitle(subtitle); // copy constructor
Subtitle = new Subtitle(subtitle); // copy constructor
_format = format;
_encoding = encoding;
_onlyListFixes = false;
@ -205,7 +206,7 @@ namespace Nikse.SubtitleEdit.Forms
{
_autoDetectGoogleLanguage = language;
var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterISOLanguageName = ci.ThreeLetterISOLanguageName;
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName;
comboBoxLanguage.Items.Clear();
foreach (CultureInfo x in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
@ -221,7 +222,7 @@ namespace Nikse.SubtitleEdit.Forms
languageIndex = j;
break;
}
else if (xci.TwoLetterISOLanguageName == "en")
if (xci.TwoLetterISOLanguageName == "en")
{
languageIndex = j;
}
@ -229,10 +230,10 @@ namespace Nikse.SubtitleEdit.Forms
}
comboBoxLanguage.SelectedIndex = languageIndex;
AddFixActions(threeLetterISOLanguageName);
AddFixActions(threeLetterIsoLanguageName);
_originalSubtitle = new Subtitle(subtitle); // copy constructor
_subtitle = new Subtitle(subtitle); // copy constructor
Subtitle = new Subtitle(subtitle); // copy constructor
_format = format;
_encoding = encoding;
_onlyListFixes = true;
@ -243,7 +244,7 @@ namespace Nikse.SubtitleEdit.Forms
_totalErrors = 0;
_batchMode = true;
RunSelectedActions();
_originalSubtitle = _subtitle;
_originalSubtitle = Subtitle;
}
public void Initialize(Subtitle subtitle, SubtitleFormat format, Encoding encoding)
@ -254,7 +255,7 @@ namespace Nikse.SubtitleEdit.Forms
if (_autoDetectGoogleLanguage.Equals("zh", StringComparison.OrdinalIgnoreCase))
_autoDetectGoogleLanguage = "zh-CHS"; // Note that "zh-CHS" (Simplified Chinese) and "zh-CHT" (Traditional Chinese) are neutral cultures
CultureInfo ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterISOLanguageName = ci.ThreeLetterISOLanguageName;
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName;
comboBoxLanguage.Items.Clear();
foreach (CultureInfo x in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
@ -270,7 +271,7 @@ namespace Nikse.SubtitleEdit.Forms
languageIndex = j;
break;
}
else if (xci.TwoLetterISOLanguageName == "en")
if (xci.TwoLetterISOLanguageName == "en")
{
languageIndex = j;
}
@ -278,10 +279,10 @@ namespace Nikse.SubtitleEdit.Forms
}
comboBoxLanguage.SelectedIndex = languageIndex;
AddFixActions(threeLetterISOLanguageName);
AddFixActions(threeLetterIsoLanguageName);
_originalSubtitle = new Subtitle(subtitle); // copy constructor
_subtitle = new Subtitle(subtitle); // copy constructor
Subtitle = new Subtitle(subtitle); // copy constructor
_format = format;
_encoding = encoding;
InitUI();
@ -340,7 +341,7 @@ namespace Nikse.SubtitleEdit.Forms
Activate();
}
private void AddFixActions(string threeLetterISOLanguageName)
private void AddFixActions(string threeLetterIsoLanguageName)
{
_turkishAnsiIndex = -1;
_danishLetterIIndex = -1;
@ -375,9 +376,9 @@ namespace Nikse.SubtitleEdit.Forms
_fixActions.Add(new FixItem(_language.FixMissingOpenBracket, _language.FixMissingOpenBracketExample, delegate { FixMissingOpenBracket(); }, ce.FixMissingOpenBracketTicked));
if (string.IsNullOrEmpty(_language.FixOcrErrorExample))
_fixActions.Add(new FixItem(_language.FixCommonOcrErrors, "D0n't -> Don't", delegate { FixOcrErrorsViaReplaceList(threeLetterISOLanguageName); }, ce.FixOcrErrorsViaReplaceListTicked));
_fixActions.Add(new FixItem(_language.FixCommonOcrErrors, "D0n't -> Don't", delegate { FixOcrErrorsViaReplaceList(threeLetterIsoLanguageName); }, ce.FixOcrErrorsViaReplaceListTicked));
else
_fixActions.Add(new FixItem(_language.FixCommonOcrErrors, _language.FixOcrErrorExample, delegate { FixOcrErrorsViaReplaceList(threeLetterISOLanguageName); }, ce.FixOcrErrorsViaReplaceListTicked));
_fixActions.Add(new FixItem(_language.FixCommonOcrErrors, _language.FixOcrErrorExample, delegate { FixOcrErrorsViaReplaceList(threeLetterIsoLanguageName); }, ce.FixOcrErrorsViaReplaceListTicked));
_fixActions.Add(new FixItem(_language.FixUppercaseIInsindeLowercaseWords, _language.FixUppercaseIInsindeLowercaseWordsExample, delegate { FixUppercaseIInsideWords(); }, ce.UppercaseIInsideLowercaseWordTicked));
_fixActions.Add(new FixItem(_language.FixLowercaseIToUppercaseI, _language.FixLowercaseIToUppercaseIExample, delegate { FixAloneLowercaseIToUppercaseI(); }, ce.AloneLowercaseIToUppercaseIEnglishTicked));
@ -467,8 +468,8 @@ namespace Nikse.SubtitleEdit.Forms
private void FixLargeFonts()
{
Graphics graphics = this.CreateGraphics();
SizeF textSize = graphics.MeasureString(buttonCancel.Text, this.Font);
var graphics = CreateGraphics();
var textSize = graphics.MeasureString(buttonCancel.Text, Font);
if (textSize.Height > buttonCancel.Height - 4)
{
subtitleListView1.InitializeTimestampColumnWidths(this);
@ -497,7 +498,7 @@ namespace Nikse.SubtitleEdit.Forms
{
var item = new ListViewItem(string.Empty) { Checked = true };
var subItem = new ListViewItem.ListViewSubItem(item, p.Number.ToString());
var subItem = new ListViewItem.ListViewSubItem(item, p.Number.ToString(CultureInfo.InvariantCulture));
item.SubItems.Add(subItem);
subItem = new ListViewItem.ListViewSubItem(item, action);
item.SubItems.Add(subItem);
@ -518,7 +519,7 @@ namespace Nikse.SubtitleEdit.Forms
if (_onlyListFixes || _batchMode)
return true;
string ln = p.Number.ToString();
string ln = p.Number.ToString(CultureInfo.InvariantCulture);
foreach (ListViewItem item in listViewFixes.Items)
{
if (item.SubItems[1].Text == ln && item.SubItems[2].Text == action)
@ -561,16 +562,16 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction1 = _language.RemovedEmptyLineAtTop;
string fixAction2 = _language.RemovedEmptyLineAtBottom;
if (_subtitle.Paragraphs.Count == 0)
if (Subtitle.Paragraphs.Count == 0)
return;
int emptyLinesRemoved = 0;
int firstNumber = _subtitle.Paragraphs[0].Number;
int firstNumber = Subtitle.Paragraphs[0].Number;
listViewFixes.BeginUpdate();
for (int i = _subtitle.Paragraphs.Count - 1; i >= 0; i--)
for (int i = Subtitle.Paragraphs.Count - 1; i >= 0; i--)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (!string.IsNullOrEmpty(p.Text))
{
string text = p.Text.Trim(' ');
@ -596,14 +597,14 @@ namespace Nikse.SubtitleEdit.Forms
}
// this must be the very last action done, or line numbers will be messed up!!!
for (int i = _subtitle.Paragraphs.Count - 1; i >= 0; i--)
for (int i = Subtitle.Paragraphs.Count - 1; i >= 0; i--)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (string.IsNullOrEmpty(p.Text))
{
if (AllowFix(p, fixAction0))
{
_subtitle.Paragraphs.RemoveAt(i);
Subtitle.Paragraphs.RemoveAt(i);
emptyLinesRemoved++;
AddFixToListView(p, fixAction0, p.Text, string.Format("[{0}]", _language.RemovedEmptyLine));
_deleteIndices.Add(i);
@ -616,7 +617,7 @@ namespace Nikse.SubtitleEdit.Forms
{
LogStatus(_language.RemovedEmptyLinesUnsedLineBreaks, string.Format(_language.EmptyLinesRemovedX, emptyLinesRemoved));
_totalFixes += emptyLinesRemoved;
_subtitle.Renumber(firstNumber);
Subtitle.Renumber(firstNumber);
}
}
@ -625,9 +626,9 @@ namespace Nikse.SubtitleEdit.Forms
// negative display time
string fixAction = _language.FixOverlappingDisplayTime;
int noOfOverlappingDisplayTimesFixed = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
Paragraph oldP = new Paragraph(p);
if (p.Duration.TotalMilliseconds < 0) // negative display time...
{
@ -635,8 +636,8 @@ namespace Nikse.SubtitleEdit.Forms
string status = string.Format(_language.StartTimeLaterThanEndTime,
i + 1, p.StartTime, p.EndTime, p.Text, Environment.NewLine);
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph next = _subtitle.GetParagraphOrDefault(i + 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
Paragraph next = Subtitle.GetParagraphOrDefault(i + 1);
double wantedDisplayTime = Utilities.GetOptimalDisplayMilliseconds(p.Text) * 0.9;
@ -684,10 +685,10 @@ namespace Nikse.SubtitleEdit.Forms
}
// overlapping display time
for (int i = 1; i < _subtitle.Paragraphs.Count; i++)
for (int i = 1; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph p = Subtitle.Paragraphs[i];
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
Paragraph target = prev;
string oldCurrent = p.ToString();
string oldPrevious = prev.ToString();
@ -864,15 +865,15 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixShortDisplayTime;
int noOfShortDisplayTimes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
var skip = p.StartTime.IsMaxTime || p.EndTime.IsMaxTime;
double displayTime = p.Duration.TotalMilliseconds;
if (!skip && displayTime < Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds)
{
Paragraph next = _subtitle.GetParagraphOrDefault(i + 1);
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph next = Subtitle.GetParagraphOrDefault(i + 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
if (next == null || (p.StartTime.TotalMilliseconds + Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds) < next.StartTime.TotalMilliseconds)
{
Paragraph temp = new Paragraph(p);
@ -920,9 +921,9 @@ namespace Nikse.SubtitleEdit.Forms
{
temp.EndTime.TotalMilliseconds++;
}
Paragraph next = _subtitle.GetParagraphOrDefault(i + 1);
Paragraph nextNext = _subtitle.GetParagraphOrDefault(i + 2);
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph next = Subtitle.GetParagraphOrDefault(i + 1);
Paragraph nextNext = Subtitle.GetParagraphOrDefault(i + 2);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
double diffMs = temp.Duration.TotalMilliseconds - p.Duration.TotalMilliseconds;
// Normal - just make current subtitle duration longer
@ -1041,9 +1042,9 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction = _language.FixInvalidItalicTag;
int noOfInvalidHtmlTags = 0;
listViewFixes.BeginUpdate();
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
var text = _subtitle.Paragraphs[i].Text;
var text = Subtitle.Paragraphs[i].Text;
if (text.Contains('<'))
{
text = text.Replace(beginTag.ToUpper(), beginTag).Replace(endTag.ToUpper(), endTag);
@ -1052,12 +1053,12 @@ namespace Nikse.SubtitleEdit.Forms
text = Utilities.FixInvalidItalicTags(text);
if (text != oldText)
{
if (AllowFix(_subtitle.Paragraphs[i], fixAction))
if (AllowFix(Subtitle.Paragraphs[i], fixAction))
{
_subtitle.Paragraphs[i].Text = text;
Subtitle.Paragraphs[i].Text = text;
_totalFixes++;
noOfInvalidHtmlTags++;
AddFixToListView(_subtitle.Paragraphs[i], fixAction, oldText, text);
AddFixToListView(Subtitle.Paragraphs[i], fixAction, oldText, text);
}
}
}
@ -1072,9 +1073,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixLongDisplayTime;
int noOfLongDisplayTimes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
double maxDisplayTime = Utilities.GetOptimalDisplayMilliseconds(p.Text) * 8.0;
if (maxDisplayTime > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds)
maxDisplayTime = Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds;
@ -1111,9 +1112,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.BreakLongLine;
int noOfLongLines = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string[] lines = p.Text.Split(Utilities.NewLineChars, StringSplitOptions.RemoveEmptyEntries);
bool tooLong = false;
foreach (string line in lines)
@ -1151,9 +1152,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.MergeShortLine;
int noOfShortLines = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string s = Utilities.RemoveHtmlTags(p.Text);
if (s.Replace(Environment.NewLine, " ").Replace(" ", " ").Length < Configuration.Settings.Tools.MergeLinesShorterThan && p.Text.Contains(Environment.NewLine))
@ -1190,9 +1191,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.MergeShortLineAll;
int noOfShortLines = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string s = Utilities.RemoveHtmlTags(p.Text);
if (s.Replace(Environment.NewLine, " ").Replace(" ", " ").Length < Configuration.Settings.Tools.MergeLinesShorterThan && p.Text.Contains(Environment.NewLine))
@ -1221,9 +1222,9 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction = _language.UnneededSpace;
int doubleSpaces = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string oldText = p.Text;
p.Text = Utilities.RemoveUnneededSpaces(p.Text, Language);
@ -1255,9 +1256,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.UnneededPeriod;
int unneededPeriods = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (p.Text.Contains("!." + Environment.NewLine))
{
if (AllowFix(p, fixAction))
@ -1335,9 +1336,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixMissingSpace;
int missingSpaces = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
// missing space after comma ","
Match match = FixMissingSpacesReComma.Match(p.Text);
@ -1698,13 +1699,13 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.AddMissingQuote;
int noOfFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (Utilities.CountTagInText(p.Text, "\"") == 1)
{
Paragraph next = _subtitle.GetParagraphOrDefault(i + 1);
Paragraph next = Subtitle.GetParagraphOrDefault(i + 1);
if (next != null)
{
double betweenMilliseconds = next.StartTime.TotalMilliseconds - p.EndTime.TotalMilliseconds;
@ -1716,7 +1717,7 @@ namespace Nikse.SubtitleEdit.Forms
next = null; // seems to have valid quotes, so no spanning
}
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
if (prev != null)
{
double betweenMilliseconds = p.StartTime.TotalMilliseconds - prev.EndTime.TotalMilliseconds;
@ -1880,9 +1881,9 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction = _language.FixUppercaseIInsideLowercaseWord;
int uppercaseIsInsideLowercaseWords = 0;
// bool isLineContinuation = false;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string oldText = p.Text;
Match match = ReAfterLowercaseLetter.Match(p.Text);
@ -2006,9 +2007,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixDoubleApostrophes;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (p.Text.Contains("''"))
{
@ -2030,10 +2031,10 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixMissingPeriodAtEndOfLine;
int missigPeriodsAtEndOfLine = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph next = _subtitle.GetParagraphOrDefault(i + 1);
Paragraph p = Subtitle.Paragraphs[i];
Paragraph next = Subtitle.GetParagraphOrDefault(i + 1);
string nextText = string.Empty;
if (next != null)
nextText = Utilities.RemoveHtmlTags(next.Text).TrimStart('-', '"', '„').TrimStart();
@ -2190,10 +2191,11 @@ namespace Nikse.SubtitleEdit.Forms
if (_namesEtcList == null)
{
_namesEtcList = new List<string>();
string languageTwoLetterCode = Utilities.AutoDetectGoogleLanguage(_subtitle);
string languageTwoLetterCode = Utilities.AutoDetectGoogleLanguage(Subtitle);
// Will contains both one word names and multi names
Nikse.SubtitleEdit.Logic.Dictionaries.NamesList.LoadNamesEtcWordLists(_namesEtcList, _namesEtcList, languageTwoLetterCode);
var namesList = new NamesList(Configuration.DictionariesFolder, languageTwoLetterCode, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
_namesEtcList = namesList.GetAllNames();
}
}
@ -2217,10 +2219,10 @@ namespace Nikse.SubtitleEdit.Forms
listViewFixes.BeginUpdate();
string fixAction = _language.FixFirstLetterToUppercaseAfterParagraph;
int fixedStartWithUppercaseLetterAfterParagraphTicked = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph p = Subtitle.Paragraphs[i];
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
string oldText = p.Text;
string fixedText = FixStartWithUppercaseLetterAfterParagraph(p, prev, _encoding, Language);
@ -2548,9 +2550,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.StartWithUppercaseLetterAfterPeriodInsideParagraph;
int noOfFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string oldText = p.Text;
StripableText st = new StripableText(p.Text);
if (p.Text.Length > 3)
@ -2606,7 +2608,7 @@ namespace Nikse.SubtitleEdit.Forms
}
}
if (noOfFixes > 0)
LogStatus(_language.StartWithUppercaseLetterAfterPeriodInsideParagraph, noOfFixes.ToString());
LogStatus(_language.StartWithUppercaseLetterAfterPeriodInsideParagraph, noOfFixes.ToString(CultureInfo.InvariantCulture));
}
private void FixStartWithUppercaseLetterAfterColon()
@ -2614,10 +2616,10 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction = _language.StartWithUppercaseLetterAfterColon;
int noOfFixes = 0;
listViewFixes.BeginUpdate();
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph last = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph p = Subtitle.Paragraphs[i];
Paragraph last = Subtitle.GetParagraphOrDefault(i - 1);
string oldText = p.Text;
int skipCount = 0;
@ -2656,12 +2658,12 @@ namespace Nikse.SubtitleEdit.Forms
skipCount = p.Text.Substring(j).IndexOf('>') - p.Text.Substring(j).IndexOf("<font ", StringComparison.Ordinal);
else if (IsTurkishLittleI(s, _encoding, Language))
{
p.Text = p.Text.Remove(j, 1).Insert(j, GetTurkishUppercaseLetter(s, _encoding).ToString());
p.Text = p.Text.Remove(j, 1).Insert(j, GetTurkishUppercaseLetter(s, _encoding).ToString(CultureInfo.InvariantCulture));
lastWasColon = false;
}
else if (char.IsLower(s))
{
p.Text = p.Text.Remove(j, 1).Insert(j, char.ToUpper(s).ToString());
p.Text = p.Text.Remove(j, 1).Insert(j, char.ToUpper(s).ToString(CultureInfo.InvariantCulture));
lastWasColon = false;
}
else if (!(" " + Environment.NewLine).Contains(s))
@ -2679,7 +2681,7 @@ namespace Nikse.SubtitleEdit.Forms
}
listViewFixes.EndUpdate();
if (noOfFixes > 0)
LogStatus(_language.StartWithUppercaseLetterAfterColon, noOfFixes.ToString());
LogStatus(_language.StartWithUppercaseLetterAfterColon, noOfFixes.ToString(CultureInfo.InvariantCulture));
}
private bool IsAbbreviation(string text, int index)
@ -2702,15 +2704,15 @@ namespace Nikse.SubtitleEdit.Forms
return abbreviations.Contains(word + ".");
}
public void FixOcrErrorsViaReplaceList(string threeLetterISOLanguageName)
public void FixOcrErrorsViaReplaceList(string threeLetterIsoLanguageName)
{
var ocrFixEngine = new OcrFixEngine(threeLetterISOLanguageName, null, this);
var ocrFixEngine = new OcrFixEngine(threeLetterIsoLanguageName, null, this);
string fixAction = _language.FixCommonOcrErrors;
int noOfFixes = 0;
string lastLine = string.Empty;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
var p = _subtitle.Paragraphs[i];
var p = Subtitle.Paragraphs[i];
string text = ocrFixEngine.FixOcrErrors(p.Text, i, lastLine, false, OcrFixEngine.AutoGuessLevel.Cautious);
lastLine = text;
if (p.Text != text)
@ -2734,9 +2736,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.RemoveSpaceBetweenNumber;
int noOfFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
Match match = RemoveSpaceBetweenNumbersRegEx.Match(text);
int counter = 0;
@ -2776,9 +2778,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixDialogsOnOneLine;
int noOfFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
string oldText = text;
if (text.Contains(" - ") && !text.Contains(Environment.NewLine))
@ -2858,9 +2860,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixTurkishAnsi;
int noOfFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
string oldText = text;
text = text.Replace("Ý", "İ");
@ -2888,9 +2890,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixLowercaseIToUppercaseI;
int iFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string oldText = p.Text;
string s = p.Text;
@ -2976,9 +2978,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixHyphen;
int iFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
if (text.TrimStart().StartsWith('-') ||
@ -2993,7 +2995,7 @@ namespace Nikse.SubtitleEdit.Forms
text.Contains(Environment.NewLine + "<I>-") ||
text.Contains(Environment.NewLine + "<I> -"))
{
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
if (prev == null || !Utilities.RemoveHtmlTags(prev.Text).TrimEnd().EndsWith('-'))
{
@ -3081,7 +3083,7 @@ namespace Nikse.SubtitleEdit.Forms
}
else if (text.StartsWith("<font ", StringComparison.Ordinal))
{
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
if (prev == null || !Utilities.RemoveHtmlTags(prev.Text).TrimEnd().EndsWith('-'))
{
string oldText = p.Text;
@ -3111,9 +3113,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixHyphen;
int iFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
if (text.TrimStart().StartsWith('-') ||
@ -3128,7 +3130,7 @@ namespace Nikse.SubtitleEdit.Forms
text.Contains(Environment.NewLine + "<I>-") ||
text.Contains(Environment.NewLine + "<I> -"))
{
Paragraph prev = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph prev = Subtitle.GetParagraphOrDefault(i - 1);
if (prev == null || !Utilities.RemoveHtmlTags(prev.Text).TrimEnd().EndsWith('-'))
{
@ -3203,9 +3205,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.Fix3PlusLine;
int iFixes = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
if (Utilities.CountTagInText(text, Environment.NewLine) > 1)
@ -3230,9 +3232,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixMusicNotation;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string[] musicSymbols = Configuration.Settings.Tools.MusicSymbolToReplace.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string oldText = p.Text;
@ -3269,9 +3271,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixDoubleDash;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
string text = p.Text;
string oldText = p.Text;
@ -3334,9 +3336,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixDoubleGreaterThan;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (p.Text.StartsWith(">> "))
{
@ -3370,9 +3372,9 @@ namespace Nikse.SubtitleEdit.Forms
string fixAction = _language.FixEllipsesStart;
int fixCount = 0;
listViewFixes.BeginUpdate();
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
var text = p.Text;
if (text.Contains("..") && AllowFix(p, fixAction))
{
@ -3462,9 +3464,9 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixMissingOpenBracket;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph p = Subtitle.Paragraphs[i];
if (AllowFix(p, fixAction))
{
@ -4116,9 +4118,9 @@ namespace Nikse.SubtitleEdit.Forms
Regex regExIStand = new Regex(@"\bistand\b", RegexOptions.Compiled);
Regex regExIOevrigt = new Regex(@"\biøvrigt\b", RegexOptions.Compiled);
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
string text = _subtitle.Paragraphs[i].Text;
string text = Subtitle.Paragraphs[i].Text;
string oldText = text;
if (littleIRegex.IsMatch(text))
@ -4167,10 +4169,10 @@ namespace Nikse.SubtitleEdit.Forms
if (text != oldText)
{
_subtitle.Paragraphs[i].Text = text;
Subtitle.Paragraphs[i].Text = text;
fixCount++;
_totalFixes++;
AddFixToListView(_subtitle.Paragraphs[i], fixAction, oldText, text);
AddFixToListView(Subtitle.Paragraphs[i], fixAction, oldText, text);
}
}
if (fixCount > 0)
@ -4186,10 +4188,10 @@ namespace Nikse.SubtitleEdit.Forms
{
string fixAction = _language.FixSpanishInvertedQuestionAndExclamationMarks;
int fixCount = 0;
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = _subtitle.Paragraphs[i];
Paragraph last = _subtitle.GetParagraphOrDefault(i - 1);
Paragraph p = Subtitle.Paragraphs[i];
Paragraph last = Subtitle.GetParagraphOrDefault(i - 1);
bool wasLastLineClosed = last == null || last.Text.EndsWith('?') || last.Text.EndsWith('!') || last.Text.EndsWith('.') ||
last.Text.EndsWith(':') || last.Text.EndsWith(')') || last.Text.EndsWith(']');
@ -4213,7 +4215,7 @@ namespace Nikse.SubtitleEdit.Forms
}
if (fixCount > 0)
LogStatus(_language.FixSpanishInvertedQuestionAndExclamationMarks, fixCount.ToString());
LogStatus(_language.FixSpanishInvertedQuestionAndExclamationMarks, fixCount.ToString(CultureInfo.InvariantCulture));
}
private void FixSpanishInvertedLetter(char mark, string inverseMark, Paragraph p, Paragraph last, ref bool wasLastLineClosed, string fixAction, ref int fixCount)
@ -4358,7 +4360,7 @@ namespace Nikse.SubtitleEdit.Forms
}
if (idx < p.Text.Length)
{
p.Text = p.Text.Insert(idx, mark.ToString());
p.Text = p.Text.Insert(idx, mark.ToString(CultureInfo.InvariantCulture));
if (p.Text.Contains("¡¿") && p.Text.Contains("!?"))
p.Text = p.Text.Replace("!?", "?!");
if (p.Text.Contains("¿¡") && p.Text.Contains("?!"))
@ -4456,7 +4458,7 @@ namespace Nikse.SubtitleEdit.Forms
_newLog = new StringBuilder();
_deleteIndices = new List<int>();
_subtitle = new Subtitle(_originalSubtitle);
Subtitle = new Subtitle(_originalSubtitle);
foreach (ListViewItem item in listView1.Items)
{
if (item.Checked && item.Index != IndexRemoveEmptyLines)
@ -4726,7 +4728,7 @@ namespace Nikse.SubtitleEdit.Forms
}
}
return new string[] { sb.ToString(), sb2.ToString() };
return new[] { sb.ToString(), sb2.ToString() };
}
private void SaveConfiguration()
@ -4881,12 +4883,12 @@ namespace Nikse.SubtitleEdit.Forms
_originalSubtitle.Paragraphs[_subtitleListViewIndex].Text = text;
subtitleListView1.SetText(_subtitleListViewIndex, text);
EnableOKButton();
EnableOkButton();
UpdateListSyntaxColoring();
}
}
private void EnableOKButton()
private void EnableOkButton()
{
if (!_hasFixesBeenMade)
{
@ -4976,13 +4978,13 @@ namespace Nikse.SubtitleEdit.Forms
private void UpdateListSyntaxColoring()
{
if (_subtitle == null || _subtitle.Paragraphs.Count == 0 || _subtitleListViewIndex < 0 || _subtitleListViewIndex >= _subtitle.Paragraphs.Count)
if (Subtitle == null || Subtitle.Paragraphs.Count == 0 || _subtitleListViewIndex < 0 || _subtitleListViewIndex >= Subtitle.Paragraphs.Count)
return;
subtitleListView1.SyntaxColorLine(_subtitle.Paragraphs, _subtitleListViewIndex, _subtitle.Paragraphs[_subtitleListViewIndex]);
Paragraph next = _subtitle.GetParagraphOrDefault(_subtitleListViewIndex + 1);
subtitleListView1.SyntaxColorLine(Subtitle.Paragraphs, _subtitleListViewIndex, Subtitle.Paragraphs[_subtitleListViewIndex]);
Paragraph next = Subtitle.GetParagraphOrDefault(_subtitleListViewIndex + 1);
if (next != null)
subtitleListView1.SyntaxColorLine(_subtitle.Paragraphs, _subtitleListViewIndex + 1, _subtitle.Paragraphs[_subtitleListViewIndex + 1]);
subtitleListView1.SyntaxColorLine(Subtitle.Paragraphs, _subtitleListViewIndex + 1, Subtitle.Paragraphs[_subtitleListViewIndex + 1]);
}
private void MaskedTextBox_TextChanged(object sender, EventArgs e)
@ -5062,7 +5064,7 @@ namespace Nikse.SubtitleEdit.Forms
_totalFixes = 0;
_totalErrors = 0;
RunSelectedActions();
_originalSubtitle = new Subtitle(_subtitle);
_originalSubtitle = new Subtitle(Subtitle);
subtitleListView1.Fill(_originalSubtitle);
RefreshFixes();
if (listViewFixes.Items.Count == 0)
@ -5142,7 +5144,7 @@ namespace Nikse.SubtitleEdit.Forms
string oldText = textBoxListViewText.Text;
textBoxListViewText.Text = Utilities.AutoBreakLine(textBoxListViewText.Text, Language);
if (oldText != textBoxListViewText.Text)
EnableOKButton();
EnableOkButton();
}
}
@ -5151,7 +5153,7 @@ namespace Nikse.SubtitleEdit.Forms
string oldText = textBoxListViewText.Text;
textBoxListViewText.Text = Utilities.UnbreakLine(textBoxListViewText.Text);
if (oldText != textBoxListViewText.Text)
EnableOKButton();
EnableOkButton();
}
private void ToolStripMenuItemDeleteClick(object sender, EventArgs e)
@ -5424,7 +5426,7 @@ namespace Nikse.SubtitleEdit.Forms
private void comboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
if (_subtitle != null)
if (Subtitle != null)
{
var ci = (CultureInfo)comboBoxLanguage.SelectedItem;
_autoDetectGoogleLanguage = ci.TwoLetterISOLanguageName;

View File

@ -22,7 +22,7 @@ namespace Nikse.SubtitleEdit.Forms
private int _ssaFontColor;
private string _listBoxSearchString = string.Empty;
private DateTime _listBoxSearchStringLastUsed = DateTime.Now;
private readonly List<string> _wordListNamesEtc = new List<string>();
private List<string> _wordListNamesEtc = new List<string>();
private List<string> _userWordList = new List<string>();
private OcrFixReplaceList _ocrFixReplaceList;
private readonly string _oldVlcLocation;
@ -1803,8 +1803,8 @@ namespace Nikse.SubtitleEdit.Forms
var task = Task.Factory.StartNew(() =>
{
// names etc
_wordListNamesEtc.Clear();
NamesList.LoadNamesEtcWordLists(_wordListNamesEtc, _wordListNamesEtc, language);
var namesList = new NamesList(Configuration.DictionariesFolder, language, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
_wordListNamesEtc = namesList.GetAllNames();
_wordListNamesEtc.Sort();
return _wordListNamesEtc;
});
@ -1841,7 +1841,8 @@ namespace Nikse.SubtitleEdit.Forms
string text = textBoxNameEtc.Text.Trim();
if (!string.IsNullOrEmpty(language) && text.Length > 1 && !_wordListNamesEtc.Contains(text))
{
NamesList.AddWordToLocalNamesEtcList(text, language);
var namesList = new NamesList(Configuration.DictionariesFolder, language, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
namesList.Add(text, language);
LoadNamesEtc(language, true);
labelStatus.Text = string.Format(Configuration.Settings.Language.Settings.WordAddedX, text);
textBoxNameEtc.Text = string.Empty;
@ -1891,51 +1892,18 @@ namespace Nikse.SubtitleEdit.Forms
int removeCount = 0;
var namesEtc = new List<string>();
var globalNamesEtc = new List<string>();
string localNamesEtcFileName = NamesList.LoadLocalNamesEtc(namesEtc, namesEtc, language);
NamesList.LoadGlobalNamesEtc(globalNamesEtc, globalNamesEtc);
var namesList = new NamesList(Configuration.DictionariesFolder, language, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
for (int idx = listBoxNamesEtc.SelectedIndices.Count - 1; idx >= 0; idx--)
{
index = listBoxNamesEtc.SelectedIndices[idx];
text = listBoxNamesEtc.Items[index].ToString();
if (namesEtc.Contains(text))
{
namesEtc.Remove(text);
removeCount++;
}
if (globalNamesEtc.Contains(text))
{
globalNamesEtc.Remove(text);
removeCount++;
}
namesList.Remove(text, language);
removeCount++;
listBoxNamesEtc.Items.RemoveAt(index);
}
if (removeCount > 0)
{
namesEtc.Sort();
var doc = new XmlDocument();
doc.Load(localNamesEtcFileName);
doc.DocumentElement.RemoveAll();
foreach (string name in namesEtc)
{
XmlNode node = doc.CreateElement("name");
node.InnerText = name;
doc.DocumentElement.AppendChild(node);
}
doc.Save(localNamesEtcFileName);
LoadNamesEtc(language, false); // reload
globalNamesEtc.Sort();
doc = new XmlDocument();
doc.Load(Utilities.DictionaryFolder + "names_etc.xml");
doc.DocumentElement.RemoveAll();
foreach (string name in globalNamesEtc)
{
XmlNode node = doc.CreateElement("name");
node.InnerText = name;
doc.DocumentElement.AppendChild(node);
}
doc.Save(Utilities.DictionaryFolder + "names_etc.xml");
LoadNamesEtc(language, true); // reload
if (index < listBoxNamesEtc.Items.Count)
@ -2498,7 +2466,7 @@ namespace Nikse.SubtitleEdit.Forms
MessageBox.Show(string.Format(Configuration.Settings.Language.Settings.ShortcutIsNotValid, sb));
return;
}
else if (sb.ToString() == "[CapsLock]")
if (sb.ToString() == "[CapsLock]")
{
MessageBox.Show(string.Format(Configuration.Settings.Language.Settings.ShortcutIsNotValid, sb));
return;

View File

@ -32,7 +32,7 @@ namespace Nikse.SubtitleEdit.Forms
private SpellCheckAction _action = SpellCheckAction.Skip;
private List<string> _suggestions;
private string _currentAction = null;
private string _currentAction;
public SpellCheckAction Action { get { return _action; } set { _action = value; } }
public string ChangeWord { get { return textBoxWord.Text; } set { textBoxWord.Text = value; } }
public string ChangeWholeText { get { return textBoxWholeText.Text; } }
@ -42,8 +42,9 @@ namespace Nikse.SubtitleEdit.Forms
get { return _currentIndex; }
}
private List<string> _namesEtcList = new List<string>();
private List<string> _namesEtcMultiWordList = new List<string>();
private NamesList _namesList;
private HashSet<string> _namesEtcList = new HashSet<string>();
private HashSet<string> _namesEtcMultiWordList = new HashSet<string>();
private List<string> _namesEtcListUppercase = new List<string>();
private List<string> _namesEtcListWithApostrophe = new List<string>();
private List<string> _skipAllList = new List<string>();
@ -64,16 +65,16 @@ namespace Nikse.SubtitleEdit.Forms
private Subtitle _subtitle;
private string _originalWord;
private int _noOfSkippedWords = 0;
private int _noOfChangedWords = 0;
private int _noOfCorrectWords = 0;
private int _noOfNamesEtc = 0;
private int _noOfAddedWords = 0;
private int _noOfSkippedWords;
private int _noOfChangedWords;
private int _noOfCorrectWords;
private int _noOfNamesEtc;
private int _noOfAddedWords;
private bool _firstChange = true;
private string _languageName;
private Main _mainWindow;
private string _currentDictionary = null;
private string _currentDictionary;
public class SuggestionParameter
{
@ -137,8 +138,8 @@ namespace Nikse.SubtitleEdit.Forms
private void FixLargeFonts()
{
Graphics graphics = this.CreateGraphics();
SizeF textSize = graphics.MeasureString(buttonAbort.Text, this.Font);
var graphics = CreateGraphics();
var textSize = graphics.MeasureString(buttonAbort.Text, Font);
if (textSize.Height > buttonAbort.Height - 4)
{
int newButtonHeight = (int)(textSize.Height + 7 + 0.5);
@ -499,7 +500,9 @@ namespace Nikse.SubtitleEdit.Forms
}
if (!ChangeWord.EndsWith('\''))
_namesEtcListWithApostrophe.Add(ChangeWord + "'");
NamesList.AddWordToLocalNamesEtcList(ChangeWord, _languageName);
var namesList = new NamesList(Configuration.DictionariesFolder, _languageName, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
namesList.Add(ChangeWord, _languageName);
}
break;
case SpellCheckAction.ChangeWholeText:
@ -507,8 +510,6 @@ namespace Nikse.SubtitleEdit.Forms
_currentParagraph.Text = ChangeWholeText;
_mainWindow.ChangeWholeTextMainPart(ref _noOfChangedWords, ref _firstChange, _currentIndex, _currentParagraph);
break;
default:
break;
}
labelActionInfo.Text = string.Empty;
@ -656,7 +657,7 @@ namespace Nikse.SubtitleEdit.Forms
}
else if (_namesEtcListUppercase.Contains(_currentWord)
|| _namesEtcListWithApostrophe.Contains(_currentWord)
|| NamesList.IsInNamesEtcMultiWordList(_namesEtcMultiWordList, _currentParagraph.Text, _currentWord)) //TODO: verify this!
|| _namesList.IsInNamesEtcMultiWordList(_currentParagraph.Text, _currentWord)) //TODO: verify this!
{
_noOfNamesEtc++;
}
@ -756,47 +757,44 @@ namespace Nikse.SubtitleEdit.Forms
DoAction(SpellCheckAction.ChangeAll);
return;
}
else if (AutoFixNames && _currentWord.Length > 3 && suggestions.Contains(_currentWord.ToUpper()))
if (AutoFixNames && _currentWord.Length > 3 && suggestions.Contains(_currentWord.ToUpper()))
{ // does not work well with two letter words like "da" and "de" which get auto-corrected to "DA" and "DE"
ChangeWord = _currentWord.ToUpper();
DoAction(SpellCheckAction.ChangeAll);
return;
}
else if (AutoFixNames && _currentWord.Length > 1 && _namesEtcList.Contains(char.ToUpper(_currentWord[0]) + _currentWord.Substring(1)))
if (AutoFixNames && _currentWord.Length > 1 && _namesEtcList.Contains(char.ToUpper(_currentWord[0]) + _currentWord.Substring(1)))
{
ChangeWord = char.ToUpper(_currentWord[0]) + _currentWord.Substring(1);
DoAction(SpellCheckAction.ChangeAll);
return;
}
if (_prefix != null && _prefix == "''" && _currentWord.EndsWith("''"))
{
_prefix = string.Empty;
_currentSpellCheckWord.Index += 2;
_currentWord = _currentWord.Trim('\'');
}
if (_prefix != null && _prefix == "'" && _currentWord.EndsWith('\''))
{
_prefix = string.Empty;
_currentSpellCheckWord.Index++;
_currentWord = _currentWord.Trim('\'');
}
if (_postfix != null && _postfix == "'")
{
_currentSpellCheckWord.Text = _currentWord + _postfix;
Initialize(_languageName, _currentSpellCheckWord, suggestions, _currentParagraph.Text, string.Format(Configuration.Settings.Language.Main.LineXOfY, (_currentIndex + 1), _subtitle.Paragraphs.Count));
}
else
{
if (_prefix != null && _prefix == "''" && _currentWord.EndsWith("''"))
{
_prefix = string.Empty;
_currentSpellCheckWord.Index += 2;
_currentWord = _currentWord.Trim('\'');
}
if (_prefix != null && _prefix == "'" && _currentWord.EndsWith('\''))
{
_prefix = string.Empty;
_currentSpellCheckWord.Index++;
_currentWord = _currentWord.Trim('\'');
}
if (_postfix != null && _postfix == "'")
{
_currentSpellCheckWord.Text = _currentWord + _postfix;
Initialize(_languageName, _currentSpellCheckWord, suggestions, _currentParagraph.Text, string.Format(Configuration.Settings.Language.Main.LineXOfY, (_currentIndex + 1), _subtitle.Paragraphs.Count));
}
else
{
_currentSpellCheckWord.Text = _currentWord;
Initialize(_languageName, _currentSpellCheckWord, suggestions, _currentParagraph.Text, string.Format(Configuration.Settings.Language.Main.LineXOfY, (_currentIndex + 1), _subtitle.Paragraphs.Count));
}
if (!this.Visible)
this.ShowDialog(_mainWindow);
return; // wait for user input
_currentSpellCheckWord.Text = _currentWord;
Initialize(_languageName, _currentSpellCheckWord, suggestions, _currentParagraph.Text, string.Format(Configuration.Settings.Language.Main.LineXOfY, (_currentIndex + 1), _subtitle.Paragraphs.Count));
}
if (!Visible)
ShowDialog(_mainWindow);
return; // wait for user input
}
}
@ -806,15 +804,15 @@ namespace Nikse.SubtitleEdit.Forms
private static List<SpellCheckWord> Split(string s)
{
const string SplitChars = " -.,?!:;\"“”()[]{}|<>/+\r\n¿¡…—♪♫„“";
const string splitChars = " -.,?!:;\"“”()[]{}|<>/+\r\n¿¡…—♪♫„“";
var list = new List<SpellCheckWord>();
var sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
if (SplitChars.Contains(s[i]))
if (splitChars.Contains(s[i]))
{
if (sb.Length > 0)
list.Add(new SpellCheckWord() { Text = sb.ToString(), Index = i - sb.Length });
list.Add(new SpellCheckWord { Text = sb.ToString(), Index = i - sb.Length });
sb = new StringBuilder();
}
else
@ -823,7 +821,7 @@ namespace Nikse.SubtitleEdit.Forms
}
}
if (sb.Length > 0)
list.Add(new SpellCheckWord() { Text = sb.ToString(), Index = s.Length - 1 - sb.Length });
list.Add(new SpellCheckWord { Text = sb.ToString(), Index = s.Length - 1 - sb.Length });
return list;
}
@ -901,7 +899,6 @@ namespace Nikse.SubtitleEdit.Forms
if (text.Contains('.') || text.Contains('-'))
{
int i = 0;
string id = string.Format("_@{0}_", i);
foreach (string wordWithDashesOrPeriods in _wordsWithDashesOrPeriods)
{
bool found = true;
@ -912,7 +909,6 @@ namespace Nikse.SubtitleEdit.Forms
if (indexStart >= 0)
{
found = true;
int endIndexPlus = indexStart + wordWithDashesOrPeriods.Length;
bool startOk = indexStart == 0 || (@" (['""" + Environment.NewLine).Contains(text[indexStart - 1]);
bool endOk = endIndexPlus == text.Length;
@ -921,7 +917,7 @@ namespace Nikse.SubtitleEdit.Forms
if (startOk && endOk)
{
i++;
id = string.Format("_@{0}_", i);
string id = string.Format("_@{0}_", i);
replaceIds.Add(id);
replaceNames.Add(wordWithDashesOrPeriods);
text = text.Remove(indexStart, wordWithDashesOrPeriods.Length).Insert(indexStart, id);
@ -946,7 +942,7 @@ namespace Nikse.SubtitleEdit.Forms
LanguageStructure.Main mainLanguage = Configuration.Settings.Language.Main;
if (_noOfChangedWords > 0 || _noOfAddedWords > 0 || _noOfSkippedWords > 0 || completedMessage == Configuration.Settings.Language.SpellCheck.SpellCheckCompleted)
{
this.Hide();
Hide();
if (Configuration.Settings.Tools.SpellCheckShowCompletedMessage)
{
var form = new DialogDoNotShowAgain(_mainWindow.Title + " - " + mainLanguage.SpellCheck,
@ -996,8 +992,6 @@ namespace Nikse.SubtitleEdit.Forms
LanguageStructure.Main mainLanguage = Configuration.Settings.Language.Main;
_mainWindow = mainWindow;
_namesEtcList = new List<string>();
_namesEtcMultiWordList = new List<string>();
_namesEtcListUppercase = new List<string>();
_namesEtcListWithApostrophe = new List<string>();
@ -1035,7 +1029,10 @@ namespace Nikse.SubtitleEdit.Forms
_languageName = Utilities.AutoDetectLanguageName(_languageName, subtitle);
string dictionary = Utilities.DictionaryFolder + _languageName;
NamesList.LoadNamesEtcWordLists(_namesEtcList, _namesEtcMultiWordList, _languageName);
_namesList = new NamesList(Configuration.DictionariesFolder, _languageName, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
_namesEtcList = _namesList.GetNames();
_namesEtcMultiWordList = _namesList.GetMultiNames();
foreach (string namesItem in _namesEtcList)
_namesEtcListUppercase.Add(namesItem.ToUpper());
@ -1200,7 +1197,7 @@ namespace Nikse.SubtitleEdit.Forms
format = "Undo: {0}";
string undoText = string.Format(format, text);
_undoList.Add(new UndoObject()
_undoList.Add(new UndoObject
{
CurrentIndex = _currentIndex,
UndoText = undoText,
@ -1270,14 +1267,12 @@ namespace Nikse.SubtitleEdit.Forms
if (!undo.UndoWord.EndsWith('\''))
_namesEtcListWithApostrophe.Remove(undo.UndoWord + "'");
NamesList.RemoveFromLocalNamesEtcList(undo.UndoWord, _languageName);
_namesList.Remove(undo.UndoWord, _languageName);
}
break;
case SpellCheckAction.ChangeWholeText:
_subtitle = _mainWindow.UndoFromSpellCheck(undo.Subtitle);
break;
default:
break;
}
_undoList.RemoveAt(_undoList.Count - 1);

View File

@ -1,338 +1,241 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml;
namespace Nikse.SubtitleEdit.Logic.Dictionaries
{
public class NamesList
{
private readonly string _dictionaryFolder;
private readonly HashSet<string> _namesList;
private readonly HashSet<string> _namesMultiList;
private readonly string _languageName;
//private string _dictionaryFolder;
//private List<string> _namesList;
//private List<string> _namesMultiList;
//public NamesList(string dictionaryFolder, string languageName)
//{
// _dictionaryFolder = dictionaryFolder;
// _namesList = new List<string>();
// _namesMultiList = new List<string>();
// LoadNamesList(Path.Combine(_dictionaryFolder, "names_etc.xml"), _namesList, _namesMultiList);
// LoadNamesList(Path.Combine(_dictionaryFolder, GetLocalNamesFileName(languageName)), _namesList, _namesMultiList);
// LoadNamesList(Path.Combine(_dictionaryFolder, GetLocalNamesUserFileName(languageName)), _namesList, _namesMultiList);
//}
//private string GetLocalNamesFileName(string languageName)
//{
// if (languageName.Length == 2)
// {
// string[] files = Directory.GetFiles(_dictionaryFolder, languageName + "_??_names_etc.xml");
// if (files.Length > 0)
// return localNamesFileName = files[0];
// }
// return Path.Combine(_dictionaryFolder, languageName + "_names_etc.xml");
//}
//private string GetLocalNamesUserFileName(string languageName)
//{
// if (languageName.Length == 2)
// {
// string[] files = Directory.GetFiles(_dictionaryFolder, languageName + "_??_names_etc_user.xml");
// if (files.Length > 0)
// return localNamesFileName = files[0];
// }
// return Path.Combine(_dictionaryFolder, languageName + "_names_etc_user.xml");
//}
//private void LoadNamesList(string fileName, List<string> _namesList, List<string> _namesMultiList)
//{
// if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName))
// return;
// var namesDoc = new XmlDocument();
// namesDoc.Load(fileName)
// if (namesDoc == null || namesDoc.DocumentElement == null)
// return;
// foreach (XmlNode node in namesDoc.DocumentElement.SelectNodes("name"))
// {
// string s = node.InnerText.Trim();
// if (s.Contains(' '))
// {
// if (!namesEtcMultiWordList.Contains(s))
// namesEtcMultiWordList.Add(s);
// }
// else
// {
// if (!namesEtcList.Contains(s))
// namesEtcList.Add(s);
// }
// }
//}
public static bool RemoveFromLocalNamesEtcList(string word, string languageName)
public NamesList(string dictionaryFolder, string languageName, bool useOnlineNamesEtc, string namesEtcUrl)
{
word = word.Trim();
if (word.Length > 1)
_dictionaryFolder = dictionaryFolder;
_languageName = languageName;
_namesList = new HashSet<string>();
_namesMultiList = new HashSet<string>();
if (useOnlineNamesEtc && !string.IsNullOrEmpty(namesEtcUrl))
{
var localNamesEtc = new List<string>();
string userNamesEtcXmlFileName = LoadLocalNamesEtc(localNamesEtc, localNamesEtc, languageName);
try
{
var xml = Utilities.DownloadString(Configuration.Settings.WordLists.NamesEtcUrl);
var namesDoc = new XmlDocument();
namesDoc.LoadXml(xml);
LoadNames(_namesList, _namesMultiList, namesDoc);
}
catch (Exception exception)
{
LoadNamesList(Path.Combine(_dictionaryFolder, "names_etc.xml"), _namesList, _namesMultiList);
System.Diagnostics.Debug.WriteLine(exception.Message);
}
}
if (!localNamesEtc.Contains(word))
return false;
localNamesEtc.Remove(word);
localNamesEtc.Sort();
LoadNamesList(GetLocalNamesFileName(), _namesList, _namesMultiList);
var userFile = GetLocalNamesUserFileName();
LoadNamesList(userFile, _namesList, _namesMultiList);
UnloadRemovedNames(userFile);
}
public List<string> GetAllNames()
{
var list = new List<string>();
foreach (var name in _namesList)
{
list.Add(name);
}
foreach (var name in _namesMultiList)
{
list.Add(name);
}
return list;
}
public HashSet<string> GetNames()
{
return _namesList;
}
public HashSet<string> GetMultiNames()
{
return _namesMultiList;
}
private void UnloadRemovedNames(string fileName)
{
if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName))
return;
var namesDoc = new XmlDocument();
namesDoc.Load(fileName);
if (namesDoc.DocumentElement == null)
return;
foreach (XmlNode node in namesDoc.DocumentElement.SelectNodes("removed_name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (_namesMultiList.Contains(s))
_namesMultiList.Remove(s);
}
else if (_namesList.Contains(s))
{
_namesList.Remove(s);
}
}
}
private string GetLocalNamesFileName()
{
if (_languageName.Length == 2)
{
string[] files = Directory.GetFiles(_dictionaryFolder, _languageName + "_??_names_etc.xml");
if (files.Length > 0)
return files[0];
}
return Path.Combine(_dictionaryFolder, _languageName + "_names_etc.xml");
}
private string GetLocalNamesUserFileName()
{
if (_languageName.Length == 2)
{
string[] files = Directory.GetFiles(_dictionaryFolder, _languageName + "_??_names_etc_user.xml");
if (files.Length > 0)
return files[0];
}
return Path.Combine(_dictionaryFolder, _languageName + "_names_etc_user.xml");
}
private void LoadNamesList(string fileName, HashSet<string> namesList, HashSet<string> namesMultiList)
{
if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName))
return;
var namesDoc = new XmlDocument();
namesDoc.Load(fileName);
if (namesDoc.DocumentElement == null)
return;
LoadNames(namesList, namesMultiList, namesDoc);
}
private static void LoadNames(HashSet<string> namesList, HashSet<string> namesMultiList, XmlDocument namesDoc)
{
foreach (XmlNode node in namesDoc.DocumentElement.SelectNodes("name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (!namesMultiList.Contains(s))
namesMultiList.Add(s);
}
else if (!namesList.Contains(s))
{
namesList.Add(s);
}
}
}
public bool Remove(string name, string languageName)
{
name = name.Trim();
if (name.Length > 1 && _namesList.Contains(name) || _namesMultiList.Contains(name))
{
if (_namesList.Contains(name))
_namesList.Remove(name);
if (_namesMultiList.Contains(name))
_namesMultiList.Remove(name);
var userList = new HashSet<string>();
var fileName = GetLocalNamesUserFileName();
LoadNamesList(fileName, userList, userList);
var namesDoc = new XmlDocument();
if (File.Exists(fileName))
{
namesDoc.Load(fileName);
}
else
{
namesDoc.LoadXml("<ignore_words />");
}
if (userList.Contains(name))
{
userList.Remove(name);
XmlNode nodeToRemove = null;
foreach (XmlNode node in namesDoc.DocumentElement.SelectNodes("name"))
{
if (node.InnerText == name)
{
nodeToRemove = node;
break;
}
}
if (nodeToRemove != null)
namesDoc.DocumentElement.RemoveChild(nodeToRemove);
}
else
{
XmlNode node = namesDoc.CreateElement("removed_name");
node.InnerText = name;
namesDoc.DocumentElement.AppendChild(node);
}
namesDoc.Save(fileName);
return true;
}
return false;
}
public bool Add(string name, string languageName)
{
name = name.Trim();
if (name.Length > 1)
{
if (name.Contains(' '))
{
if (!_namesMultiList.Contains(name))
_namesMultiList.Add(name);
}
else if (!_namesList.Contains(name))
{
_namesList.Add(name);
}
var fileName = GetLocalNamesUserFileName();
var namesEtcDoc = new XmlDocument();
if (File.Exists(userNamesEtcXmlFileName))
namesEtcDoc.Load(userNamesEtcXmlFileName);
if (File.Exists(fileName))
namesEtcDoc.Load(fileName);
else
namesEtcDoc.LoadXml("<ignore_words />");
XmlNode de = namesEtcDoc.DocumentElement;
if (de != null)
{
de.RemoveAll();
foreach (var name in localNamesEtc)
{
XmlNode node = namesEtcDoc.CreateElement("name");
node.InnerText = name;
de.AppendChild(node);
}
namesEtcDoc.Save(userNamesEtcXmlFileName);
XmlNode node = namesEtcDoc.CreateElement("name");
node.InnerText = name;
de.AppendChild(node);
namesEtcDoc.Save(fileName);
}
return true;
}
return false;
}
public static bool AddWordToLocalNamesEtcList(string word, string languageName)
{
word = word.Trim();
if (word.Length > 1)
{
var localNamesEtc = new List<string>();
string userNamesEtcXmlFileName = LoadLocalNamesEtc(localNamesEtc, localNamesEtc, languageName);
if (localNamesEtc.Contains(word))
return false;
localNamesEtc.Add(word);
localNamesEtc.Sort();
var namesEtcDoc = new XmlDocument();
if (File.Exists(userNamesEtcXmlFileName))
namesEtcDoc.Load(userNamesEtcXmlFileName);
else
namesEtcDoc.LoadXml("<ignore_words />");
XmlNode de = namesEtcDoc.DocumentElement;
if (de != null)
{
de.RemoveAll();
foreach (var name in localNamesEtc)
{
XmlNode node = namesEtcDoc.CreateElement("name");
node.InnerText = name;
de.AppendChild(node);
}
namesEtcDoc.Save(userNamesEtcXmlFileName);
}
return true;
}
return false;
}
public static string LoadNamesEtcWordLists(List<string> namesEtcList, List<string> namesEtcMultiWordList, string languageName)
{
namesEtcList.Clear();
namesEtcMultiWordList.Clear();
LoadGlobalNamesEtc(namesEtcList, namesEtcMultiWordList);
string userNamesEtcXmlFileName = LoadLocalNamesEtc(namesEtcList, namesEtcMultiWordList, languageName);
return userNamesEtcXmlFileName;
}
public static string LoadNamesEtcWordLists(HashSet<string> namesEtcList, HashSet<string> namesEtcMultiWordList, string languageName)
{
namesEtcList.Clear();
namesEtcMultiWordList.Clear();
LoadGlobalNamesEtc(namesEtcList, namesEtcMultiWordList);
string userNamesEtcXmlFileName = LoadLocalNamesEtc(namesEtcList, namesEtcMultiWordList, languageName);
return userNamesEtcXmlFileName;
}
public static void LoadGlobalNamesEtc(List<string> namesEtcList, List<string> namesEtcMultiWordList)
{
// Load names etc list (names/noise words)
var namesEtcDoc = new XmlDocument();
bool loaded = false;
if (Configuration.Settings.WordLists.UseOnlineNamesEtc && !string.IsNullOrEmpty(Configuration.Settings.WordLists.NamesEtcUrl))
{
try
{
var xml = Utilities.DownloadString(Configuration.Settings.WordLists.NamesEtcUrl);
namesEtcDoc.LoadXml(xml);
loaded = true;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace);
}
}
if (!loaded && File.Exists(Utilities.DictionaryFolder + "names_etc.xml"))
{
namesEtcDoc.Load(Utilities.DictionaryFolder + "names_etc.xml");
}
if (namesEtcDoc.DocumentElement != null)
foreach (XmlNode node in namesEtcDoc.DocumentElement.SelectNodes("name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (!namesEtcMultiWordList.Contains(s))
namesEtcMultiWordList.Add(s);
}
else
{
if (!namesEtcList.Contains(s))
namesEtcList.Add(s);
}
}
}
public static void LoadGlobalNamesEtc(HashSet<string> namesEtcList, HashSet<string> namesEtcMultiWordList)
{
// Load names etc list (names/noise words)
var namesEtcDoc = new XmlDocument();
bool loaded = false;
if (Configuration.Settings.WordLists.UseOnlineNamesEtc && !string.IsNullOrEmpty(Configuration.Settings.WordLists.NamesEtcUrl))
{
try
{
var xml = Utilities.DownloadString(Configuration.Settings.WordLists.NamesEtcUrl);
namesEtcDoc.LoadXml(xml);
loaded = true;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace);
}
}
if (!loaded && File.Exists(Utilities.DictionaryFolder + "names_etc.xml"))
{
namesEtcDoc.Load(Utilities.DictionaryFolder + "names_etc.xml");
}
if (namesEtcDoc.DocumentElement != null)
foreach (XmlNode node in namesEtcDoc.DocumentElement.SelectNodes("name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (!namesEtcMultiWordList.Contains(s))
namesEtcMultiWordList.Add(s);
}
else
{
if (!namesEtcList.Contains(s))
namesEtcList.Add(s);
}
}
}
public static string LoadLocalNamesEtc(List<string> namesEtcList, List<string> namesEtcMultiWordList, string languageName)
{
string userNamesEtcXmlFileName = Utilities.DictionaryFolder + languageName + "_names_etc.xml";
if (languageName.Length == 2)
{
string[] files = Directory.GetFiles(Utilities.DictionaryFolder, languageName + "_??_names_etc.xml");
if (files.Length > 0)
userNamesEtcXmlFileName = files[0];
}
if (File.Exists(userNamesEtcXmlFileName))
{
var namesEtcDoc = new XmlDocument();
namesEtcDoc.Load(userNamesEtcXmlFileName);
foreach (XmlNode node in namesEtcDoc.DocumentElement.SelectNodes("name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (!namesEtcMultiWordList.Contains(s))
namesEtcMultiWordList.Add(s);
}
else
{
if (!namesEtcList.Contains(s))
namesEtcList.Add(s);
}
}
}
return userNamesEtcXmlFileName;
}
public static string LoadLocalNamesEtc(HashSet<string> namesEtcList, HashSet<string> namesEtcMultiWordList, string languageName)
{
string userNamesEtcXmlFileName = Utilities.DictionaryFolder + languageName + "_names_etc.xml";
if (languageName.Length == 2)
{
string[] files = Directory.GetFiles(Utilities.DictionaryFolder, languageName + "_??_names_etc.xml");
if (files.Length > 0)
userNamesEtcXmlFileName = files[0];
}
if (File.Exists(userNamesEtcXmlFileName))
{
var namesEtcDoc = new XmlDocument();
namesEtcDoc.Load(userNamesEtcXmlFileName);
foreach (XmlNode node in namesEtcDoc.DocumentElement.SelectNodes("name"))
{
string s = node.InnerText.Trim();
if (s.Contains(' '))
{
if (!namesEtcMultiWordList.Contains(s))
namesEtcMultiWordList.Add(s);
}
else
{
if (!namesEtcList.Contains(s))
namesEtcList.Add(s);
}
}
}
return userNamesEtcXmlFileName;
}
public static bool IsInNamesEtcMultiWordList(List<string> namesEtcMultiWordList, string line, string word)
public bool IsInNamesEtcMultiWordList(string line, string word)
{
string text = line.Replace(Environment.NewLine, " ");
text = text.Replace(" ", " ");
foreach (string s in namesEtcMultiWordList)
{
if (s.Contains(word) && text.Contains(s))
{
if (s.StartsWith(word + " ", StringComparison.Ordinal) || s.EndsWith(" " + word, StringComparison.Ordinal) || s.Contains(" " + word + " "))
return true;
if (word == s)
return true;
}
}
return false;
}
public static bool IsInNamesEtcMultiWordList(HashSet<string> namesEtcMultiWordList, string line, string word)
{
string text = line.Replace(Environment.NewLine, " ");
text = text.Replace(" ", " ");
foreach (string s in namesEtcMultiWordList)
foreach (string s in _namesMultiList)
{
if (s.Contains(word) && text.Contains(s))
{

View File

@ -26,6 +26,7 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
private string _fiveLetterWordListLanguageName;
private readonly OcrFixReplaceList _ocrFixReplaceList;
private NamesList _namesList;
private HashSet<string> _namesEtcList = new HashSet<string>();
private HashSet<string> _namesEtcListUppercase = new HashSet<string>();
private HashSet<string> _namesEtcListWithApostrophe = new HashSet<string>();
@ -89,22 +90,22 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
LoadSpellingDictionariesViaDictionaryFileName("eng", new CultureInfo("en-GB"), "en_GB.dic", true);
return;
}
else if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_ca", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_CA.dic")))
if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_ca", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_CA.dic")))
{
LoadSpellingDictionariesViaDictionaryFileName("eng", new CultureInfo("en-CA"), "en_CA.dic", true);
return;
}
else if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_au", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_AU.dic")))
if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_au", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_AU.dic")))
{
LoadSpellingDictionariesViaDictionaryFileName("eng", new CultureInfo("en-AU"), "en_AU.dic", true);
return;
}
else if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_za", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_ZA.dic")))
if (!string.IsNullOrEmpty(hunspellName) && threeLetterIsoLanguageName == "eng" && hunspellName.Equals("en_za", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(dictionaryFolder, "en_ZA.dic")))
{
LoadSpellingDictionariesViaDictionaryFileName("eng", new CultureInfo("en-ZA"), "en_ZA.dic", true);
return;
}
else if (threeLetterIsoLanguageName == "eng" && File.Exists(Path.Combine(dictionaryFolder, "en_US.dic")))
if (threeLetterIsoLanguageName == "eng" && File.Exists(Path.Combine(dictionaryFolder, "en_US.dic")))
{
LoadSpellingDictionariesViaDictionaryFileName("eng", new CultureInfo("en-US"), "en_US.dic", true);
return;
@ -199,10 +200,9 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
}
// Load names etc list (names/noise words)
_namesEtcList = new HashSet<string>();
_namesEtcMultiWordList = new HashSet<string>();
NamesList.LoadNamesEtcWordLists(_namesEtcList, _namesEtcMultiWordList, _fiveLetterWordListLanguageName);
_namesList = new NamesList(Configuration.DictionariesFolder, _fiveLetterWordListLanguageName, Configuration.Settings.WordLists.UseOnlineNamesEtc, Configuration.Settings.WordLists.NamesEtcUrl);
_namesEtcList = _namesList.GetNames();
_namesEtcMultiWordList = _namesList.GetMultiNames();
_namesEtcListUppercase = new HashSet<string>();
foreach (string name in _namesEtcList)
_namesEtcListUppercase.Add(name.ToUpper());
@ -1237,7 +1237,8 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
}
}
NamesList.AddWordToLocalNamesEtcList(s, _fiveLetterWordListLanguageName);
if (_namesList != null)
_namesList.Add(s, _fiveLetterWordListLanguageName);
}
catch
{
@ -1387,7 +1388,7 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
if (word.Length > 2 && _namesEtcListWithApostrophe.Contains(word))
return true;
if (NamesList.IsInNamesEtcMultiWordList(_namesEtcMultiWordList, line, word))
if (_namesList != null && _namesList.IsInNamesEtcMultiWordList(line, word))
return true;
return false;

View File

@ -22,19 +22,19 @@ namespace Test
///</summary>
public TestContext TestContext { get; set; }
private static Nikse.SubtitleEdit.Forms.FixCommonErrors GetFixCommonErrorsLib()
private static FixCommonErrors GetFixCommonErrorsLib()
{
return new Nikse.SubtitleEdit.Forms.FixCommonErrors();
return new FixCommonErrors();
}
private static void InitializeFixCommonErrorsLine(Nikse.SubtitleEdit.Forms.FixCommonErrors target, string line)
private static void InitializeFixCommonErrorsLine(FixCommonErrors target, string line)
{
var subtitle = new Subtitle();
subtitle.Paragraphs.Add(new Paragraph(line, 100, 10000));
target.Initialize(subtitle, new SubRip(), System.Text.Encoding.UTF8);
}
private static void InitializeFixCommonErrorsLine(Nikse.SubtitleEdit.Forms.FixCommonErrors target, string line, string line2)
private static void InitializeFixCommonErrorsLine(FixCommonErrors target, string line, string line2)
{
var subtitle = new Subtitle();
subtitle.Paragraphs.Add(new Paragraph(line, 100, 10000));
@ -53,7 +53,7 @@ namespace Test
/// </summary>
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
var buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
@ -62,7 +62,7 @@ namespace Test
}
//Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
@ -129,7 +129,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "This is" + Environment.NewLine + "short!");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is short!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is short!");
}
}
@ -141,7 +141,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "This I'm pretty sure is not a" + Environment.NewLine + "short line, that should be merged!!!");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This I'm pretty sure is not a" + Environment.NewLine + "short line, that should be merged!!!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This I'm pretty sure is not a" + Environment.NewLine + "short line, that should be merged!!!");
}
}
@ -153,7 +153,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>This is" + Environment.NewLine + "short!</i>");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>This is short!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>This is short!</i>");
}
}
@ -165,7 +165,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Hallo!" + Environment.NewLine + "- Hi");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hallo!" + Environment.NewLine + "- Hi");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Hallo!" + Environment.NewLine + "- Hi");
}
}
@ -177,7 +177,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>- Hallo!" + Environment.NewLine + "- Hi</i>");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>- Hallo!" + Environment.NewLine + "- Hi</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>- Hallo!" + Environment.NewLine + "- Hi</i>");
}
}
@ -192,7 +192,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>- Hallo!</i>" + Environment.NewLine + "<i>- Hi<i>");
target.FixShortLines();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>- Hallo!</i>" + Environment.NewLine + "<i>- Hi<i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>- Hallo!</i>" + Environment.NewLine + "<i>- Hi<i>");
}
}
@ -208,7 +208,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>Hey!" + Environment.NewLine + "<i>Boy!");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>Hey!</i>" + Environment.NewLine + "<i>Boy!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>Hey!</i>" + Environment.NewLine + "<i>Boy!</i>");
}
}
@ -220,7 +220,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>(jones) seems their attackers headed north." + Environment.NewLine + "<i>Hi!</i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>(jones) seems their attackers headed north." + Environment.NewLine + "Hi!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>(jones) seems their attackers headed north." + Environment.NewLine + "Hi!</i>");
}
}
@ -232,7 +232,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Seems their <i>attackers headed north.");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Seems their attackers headed north.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Seems their attackers headed north.");
}
}
@ -244,7 +244,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i></i>test");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "test");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "test");
}
}
@ -256,7 +256,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- And..." + Environment.NewLine + "<i>Awesome it is!");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- And..." + Environment.NewLine + "<i>Awesome it is!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- And..." + Environment.NewLine + "<i>Awesome it is!</i>");
}
}
@ -268,7 +268,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Awesome it is!</i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>Awesome it is!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>Awesome it is!</i>");
}
}
@ -280,7 +280,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Awesome it is!<i></i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Awesome it is!");
}
}
@ -292,7 +292,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Awesome it is!<i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Awesome it is!");
}
}
@ -304,7 +304,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Awesome it is!</i><i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Awesome it is!");
}
}
@ -316,7 +316,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "</i>What do i care.</i>");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>What do i care.</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>What do i care.</i>");
}
}
@ -328,7 +328,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>To be a life-changing weekend</i>" + Environment.NewLine + "<i>for all of us.");
target.FixInvalidItalicTags();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>To be a life-changing weekend" + Environment.NewLine + "for all of us.</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>To be a life-changing weekend" + Environment.NewLine + "for all of us.</i>");
}
}
@ -344,7 +344,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "<i>Boy!</i>", "This is line one!" + Environment.NewLine + "<i>Boy!</i>");
target.FixMissingPeriodsAtEndOfLine();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "<i>Boy!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "<i>Boy!</i>");
}
}
@ -356,7 +356,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "<i>Boy</i>", "This is line one!" + Environment.NewLine + "<i>Boy!</i>");
target.FixMissingPeriodsAtEndOfLine();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "<i>Boy.</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "<i>Boy.</i>");
}
}
@ -368,7 +368,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>This is line one!" + Environment.NewLine + "Boy</i>", "This is line one!" + Environment.NewLine + "<i>Boy!</i>");
target.FixMissingPeriodsAtEndOfLine();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>This is line one!" + Environment.NewLine + "Boy.</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>This is line one!" + Environment.NewLine + "Boy.</i>");
}
}
@ -380,7 +380,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "”... and gently down I laid her. ”");
target.FixMissingPeriodsAtEndOfLine();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "”... and gently down I laid her. ”");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "”... and gently down I laid her. ”");
}
}
@ -396,7 +396,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Hi Joe!" + Environment.NewLine + "- Hi Pete!");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
}
}
@ -408,7 +408,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Hi Joe!" + Environment.NewLine + "Hi Pete!");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
}
}
@ -420,7 +420,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>- Hi Joe!" + Environment.NewLine + "Hi Pete!</i>");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>- Hi Joe!" + Environment.NewLine + "- Hi Pete!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>- Hi Joe!" + Environment.NewLine + "- Hi Pete!</i>");
}
}
@ -432,7 +432,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Hi Joe!" + Environment.NewLine + "- Hi Pete!");
}
}
@ -444,7 +444,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Hi!" + Environment.NewLine + "- Hi Pete!");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hi!" + Environment.NewLine + "- Hi Pete!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Hi!" + Environment.NewLine + "- Hi Pete!");
}
}
@ -456,7 +456,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Five-Both?" + Environment.NewLine + "- T... T... Ten...");
target.FixHyphensAdd();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Five-Both?" + Environment.NewLine + "- T... T... Ten...");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- Five-Both?" + Environment.NewLine + "- T... T... Ten...");
}
}
@ -472,7 +472,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "(laughing/clapping)");
target.FixOcrErrorsViaReplaceList("eng");
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "(laughing/clapping)");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "(laughing/clapping)");
}
}
@ -484,7 +484,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "The font is ita/ic!");
target.FixOcrErrorsViaReplaceList("eng");
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The font is italic!"); // will fail if English dictionary is not found
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The font is italic!"); // will fail if English dictionary is not found
}
}
@ -496,7 +496,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "The clock is 12 a.m.");
target.FixOcrErrorsViaReplaceList("eng");
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The clock is 12 a.m.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The clock is 12 a.m.");
}
}
@ -508,7 +508,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- I'll ring her." + Environment.NewLine + "- ...in a lot of trouble.");
target.FixOcrErrorsViaReplaceList("eng");
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- I'll ring her." + Environment.NewLine + "- ...in a lot of trouble.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- I'll ring her." + Environment.NewLine + "- ...in a lot of trouble.");
}
}
@ -524,7 +524,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "The<i>Bombshell</i> will gone.");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The <i>Bombshell</i> will gone.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The <i>Bombshell</i> will gone.");
}
}
@ -536,7 +536,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "The <i>Bombshell</i>will gone.");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The <i>Bombshell</i> will gone.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The <i>Bombshell</i> will gone.");
}
}
@ -548,7 +548,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "It will be okay.It surely will be!");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "It will be okay. It surely will be!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "It will be okay. It surely will be!");
}
}
@ -560,7 +560,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "you can't get out.Alright?");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "you can't get out. Alright?");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "you can't get out. Alright?");
}
}
@ -572,7 +572,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "What did Dr. Gey say?");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "What did Dr. Gey say?");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "What did Dr. Gey say?");
}
}
@ -584,7 +584,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Go to the O.R. now!");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Go to the O.R. now!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Go to the O.R. now!");
}
}
@ -596,7 +596,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Email niksedk@gmail.Com now!");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Email niksedk@gmail.Com now!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Email niksedk@gmail.Com now!");
}
}
@ -608,7 +608,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Go to www.nikse.dk for more info");
target.FixMissingSpaces();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Go to www.nikse.dk for more info");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Go to www.nikse.dk for more info");
}
}
@ -624,7 +624,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "♪ you like to move it...");
target.FixStartWithUppercaseLetterAfterParagraph();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "♪ You like to move it...");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "♪ You like to move it...");
}
}
@ -632,8 +632,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormal1()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("bye.", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("bye.", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "Bye.");
}
@ -642,8 +642,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormal2()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("<i>bye.</i>", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("<i>bye.</i>", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "<i>Bye.</i>");
}
@ -652,8 +652,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormal3()
{
Paragraph prev = new Paragraph("<i>Bye.</i>", 0, 1000);
Paragraph p = new Paragraph("<i>bye.</i>", 1200, 5000);
var prev = new Paragraph("<i>Bye.</i>", 0, 1000);
var p = new Paragraph("<i>bye.</i>", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "<i>Bye.</i>");
}
@ -662,8 +662,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormal4()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("bye." + Environment.NewLine + "bye.", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("bye." + Environment.NewLine + "bye.", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "Bye." + Environment.NewLine + "Bye.");
}
@ -672,8 +672,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalNoChange1()
{
Paragraph prev = new Paragraph("Bye,", 0, 1000);
Paragraph p = new Paragraph("bye.", 1200, 5000);
var prev = new Paragraph("Bye,", 0, 1000);
var p = new Paragraph("bye.", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "bye.");
}
@ -682,8 +682,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialog1()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("- Moss! Jesus Christ!" + Environment.NewLine + "- what is it?", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("- Moss! Jesus Christ!" + Environment.NewLine + "- what is it?", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "- Moss! Jesus Christ!" + Environment.NewLine + "- What is it?");
}
@ -692,8 +692,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialog2()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("<i>- Moss! Jesus Christ!" + Environment.NewLine + "- what is it?</i>", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("<i>- Moss! Jesus Christ!" + Environment.NewLine + "- what is it?</i>", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "<i>- Moss! Jesus Christ!" + Environment.NewLine + "- What is it?</i>");
}
@ -702,8 +702,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialog3()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("<i>- Moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- what is it?</i>", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("<i>- Moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- what is it?</i>", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "<i>- Moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- What is it?</i>");
}
@ -712,8 +712,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialog4()
{
Paragraph prev = new Paragraph("Bye.", 0, 1000);
Paragraph p = new Paragraph("<i>- moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- what is it?</i>", 1200, 5000);
var prev = new Paragraph("Bye.", 0, 1000);
var p = new Paragraph("<i>- moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- what is it?</i>", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "<i>- Moss! Jesus Christ!</i>" + Environment.NewLine + "<i>- What is it?</i>");
}
@ -722,8 +722,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalNoChange2()
{
Paragraph prev = new Paragraph("Bye", 0, 1000);
Paragraph p = new Paragraph("bye.", 1200, 5000);
var prev = new Paragraph("Bye", 0, 1000);
var p = new Paragraph("bye.", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "bye.");
}
@ -732,8 +732,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialogNoChange1()
{
Paragraph prev = new Paragraph("Bye -", 0, 1000);
Paragraph p = new Paragraph("- moss!", 1200, 5000);
var prev = new Paragraph("Bye -", 0, 1000);
var p = new Paragraph("- moss!", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "- moss!");
}
@ -742,8 +742,8 @@ namespace Test
[DeploymentItem("SubtitleEdit.exe")]
public void StartWithUppercaseAfterParagraphNormalDialogNoChange2()
{
Paragraph prev = new Paragraph("Bye -", 0, 1000);
Paragraph p = new Paragraph("- moss!" + Environment.NewLine + " - Bye.", 1200, 5000);
var prev = new Paragraph("Bye -", 0, 1000);
var p = new Paragraph("- moss!" + Environment.NewLine + " - Bye.", 1200, 5000);
var fixedText = FixCommonErrors.FixStartWithUppercaseLetterAfterParagraph(p, prev, System.Text.Encoding.UTF8, "en");
Assert.AreEqual(fixedText, "- moss!" + Environment.NewLine + " - Bye.");
}
@ -760,7 +760,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Cómo estás?");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¿Cómo estás?");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¿Cómo estás?");
}
}
@ -772,7 +772,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Cómo estás!");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¡Cómo estás!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¡Cómo estás!");
}
}
@ -784,7 +784,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "¡¡PARA!!");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¡¡PARA!!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¡¡PARA!!");
}
}
@ -796,7 +796,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "¡¡¡PARA!!!");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¡¡¡PARA!!!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¡¡¡PARA!!!");
}
}
@ -808,7 +808,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "¿Cómo estás?!");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¡¿Cómo estás?!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¡¿Cómo estás?!");
}
}
@ -820,7 +820,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>Chanchita, ¡¿copias?! Chanchita!!</i>");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>Chanchita, ¡¿copias?! ¡¡Chanchita!!</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>Chanchita, ¡¿copias?! ¡¡Chanchita!!</i>");
}
}
@ -832,7 +832,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "¡Cómo estás?");
target.FixSpanishInvertedQuestionAndExclamationMarks();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "¿¡Cómo estás!?");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "¿¡Cómo estás!?");
}
}
@ -848,7 +848,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<i>- Mm-hmm.</i>");
target.FixHyphens();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<i>Mm-hmm.</i>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<i>Mm-hmm.</i>");
}
}
@ -860,7 +860,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "<font color='red'>- Mm-hmm.</font>");
target.FixHyphens();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "<font color='red'>Mm-hmm.</font>");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "<font color='red'>Mm-hmm.</font>");
}
}
@ -872,7 +872,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Mm-hmm.");
target.FixHyphens();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Mm-hmm.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Mm-hmm.");
}
}
@ -884,7 +884,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- I-I never thought of that.");
target.FixHyphens();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "I-I never thought of that.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "I-I never thought of that.");
}
}
@ -896,7 +896,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- Uh-huh.");
target.FixHyphens();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Uh-huh.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Uh-huh.");
}
}
@ -978,7 +978,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "This is no troubIe!");
target.FixUppercaseIInsideWords();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is no trouble!");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is no trouble!");
}
}
@ -990,7 +990,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "- I'll ring her." + Environment.NewLine + "- ...In a lot of trouble.");
target.FixUppercaseIInsideWords();
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- I'll ring her." + Environment.NewLine + "- ...In a lot of trouble.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- I'll ring her." + Environment.NewLine + "- ...In a lot of trouble.");
}
}
@ -1002,7 +1002,7 @@ namespace Test
{
InitializeFixCommonErrorsLine(target, "Yeah, see, that's not mine.");
target.FixOcrErrorsViaReplaceList("eng");
Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Yeah, see, that's not mine.");
Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Yeah, see, that's not mine.");
}
}
@ -1013,8 +1013,8 @@ namespace Test
var form = new GoToLine();
Configuration.Settings.Tools.OcrFixUseHardcodedRules = true;
//string input = "i'I'll see you.";
string input = "l-l'll see you.";
Nikse.SubtitleEdit.Logic.Ocr.OcrFixEngine ofe = new Nikse.SubtitleEdit.Logic.Ocr.OcrFixEngine("eng", "us_en", form);
const string input = "l-l'll see you.";
var ofe = new Nikse.SubtitleEdit.Logic.Ocr.OcrFixEngine("eng", "us_en", form);
var res = ofe.FixOcrErrorsViaHardcodedRules(input, "Previous line.", new HashSet<string>());
Assert.AreEqual(res, "I-I'll see you.");
}