diff --git a/src/Forms/AddToNames.cs b/src/Forms/AddToNames.cs index 171d548e6..478bc26d0 100644 --- a/src/Forms/AddToNames.cs +++ b/src/Forms/AddToNames.cs @@ -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; diff --git a/src/Forms/ChangeCasing.cs b/src/Forms/ChangeCasing.cs index d76804bd9..ed57a8029 100644 --- a/src/Forms/ChangeCasing.cs +++ b/src/Forms/ChangeCasing.cs @@ -69,14 +69,8 @@ namespace Nikse.SubtitleEdit.Forms internal void FixCasing(Subtitle subtitle, string language) { - var namesEtc = new List(); - var tmp = new List(); - 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)); diff --git a/src/Forms/ChangeCasingNames.cs b/src/Forms/ChangeCasingNames.cs index 409ad1d40..3d2f19c7e 100644 --- a/src/Forms/ChangeCasingNames.cs +++ b/src/Forms/ChangeCasingNames.cs @@ -124,16 +124,16 @@ namespace Nikse.SubtitleEdit.Forms private void FindAllNames() { - var namesEtcList = new List(); + 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"); diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index 6d2de2785..faebd83a3 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -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 _fixActions; private int _subtitleListViewIndex = -1; private bool _onlyListFixes = true; - private bool _batchMode = false; + private bool _batchMode; private string _autoDetectGoogleLanguage; private List _namesEtcList; private List _abbreviationList; private StringBuilder _newLog = new StringBuilder(); - private StringBuilder _appliedLog = new StringBuilder(); + private readonly StringBuilder _appliedLog = new StringBuilder(); private int _numberOfImportantLogMessages = 0; private List _deleteIndices = new List(); @@ -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 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(" 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 + "-") || text.Contains(Environment.NewLine + " -")) { - 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("-") || text.Contains(Environment.NewLine + " -")) { - 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(); - _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; diff --git a/src/Forms/Settings.cs b/src/Forms/Settings.cs index 7545858e9..df8db9b42 100644 --- a/src/Forms/Settings.cs +++ b/src/Forms/Settings.cs @@ -22,7 +22,7 @@ namespace Nikse.SubtitleEdit.Forms private int _ssaFontColor; private string _listBoxSearchString = string.Empty; private DateTime _listBoxSearchStringLastUsed = DateTime.Now; - private readonly List _wordListNamesEtc = new List(); + private List _wordListNamesEtc = new List(); private List _userWordList = new List(); 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(); var globalNamesEtc = new List(); - 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; diff --git a/src/Forms/SpellCheck.cs b/src/Forms/SpellCheck.cs index 862569a2f..35b8ddeb8 100644 --- a/src/Forms/SpellCheck.cs +++ b/src/Forms/SpellCheck.cs @@ -32,7 +32,7 @@ namespace Nikse.SubtitleEdit.Forms private SpellCheckAction _action = SpellCheckAction.Skip; private List _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 _namesEtcList = new List(); - private List _namesEtcMultiWordList = new List(); + private NamesList _namesList; + private HashSet _namesEtcList = new HashSet(); + private HashSet _namesEtcMultiWordList = new HashSet(); private List _namesEtcListUppercase = new List(); private List _namesEtcListWithApostrophe = new List(); private List _skipAllList = new List(); @@ -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 Split(string s) { - const string SplitChars = " -.,?!:;\"“”()[]{}|<>/+\r\n¿¡…—–♪♫„“"; + const string splitChars = " -.,?!:;\"“”()[]{}|<>/+\r\n¿¡…—–♪♫„“"; var list = new List(); 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(); - _namesEtcMultiWordList = new List(); _namesEtcListUppercase = new List(); _namesEtcListWithApostrophe = new List(); @@ -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); diff --git a/src/Logic/Dictionaries/NamesList.cs b/src/Logic/Dictionaries/NamesList.cs index d9aebab45..005747895 100644 --- a/src/Logic/Dictionaries/NamesList.cs +++ b/src/Logic/Dictionaries/NamesList.cs @@ -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 _namesList; + private readonly HashSet _namesMultiList; + private readonly string _languageName; - //private string _dictionaryFolder; - //private List _namesList; - //private List _namesMultiList; - - //public NamesList(string dictionaryFolder, string languageName) - //{ - // _dictionaryFolder = dictionaryFolder; - - // _namesList = new List(); - // _namesMultiList = new List(); - - // 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 _namesList, List _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(); + _namesMultiList = new HashSet(); + + if (useOnlineNamesEtc && !string.IsNullOrEmpty(namesEtcUrl)) { - var localNamesEtc = new List(); - 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 GetAllNames() + { + var list = new List(); + foreach (var name in _namesList) + { + list.Add(name); + } + foreach (var name in _namesMultiList) + { + list.Add(name); + } + return list; + } + + public HashSet GetNames() + { + return _namesList; + } + + public HashSet 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 namesList, HashSet 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 namesList, HashSet 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(); + var fileName = GetLocalNamesUserFileName(); + LoadNamesList(fileName, userList, userList); + + var namesDoc = new XmlDocument(); + if (File.Exists(fileName)) + { + namesDoc.Load(fileName); + } + else + { + namesDoc.LoadXml(""); + } + + 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(""); 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 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(""); - - 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 namesEtcList, List namesEtcMultiWordList, string languageName) - { - namesEtcList.Clear(); - namesEtcMultiWordList.Clear(); - - LoadGlobalNamesEtc(namesEtcList, namesEtcMultiWordList); - - string userNamesEtcXmlFileName = LoadLocalNamesEtc(namesEtcList, namesEtcMultiWordList, languageName); - return userNamesEtcXmlFileName; - } - - public static string LoadNamesEtcWordLists(HashSet namesEtcList, HashSet namesEtcMultiWordList, string languageName) - { - namesEtcList.Clear(); - namesEtcMultiWordList.Clear(); - - LoadGlobalNamesEtc(namesEtcList, namesEtcMultiWordList); - - string userNamesEtcXmlFileName = LoadLocalNamesEtc(namesEtcList, namesEtcMultiWordList, languageName); - return userNamesEtcXmlFileName; - } - - public static void LoadGlobalNamesEtc(List namesEtcList, List 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 namesEtcList, HashSet 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 namesEtcList, List 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 namesEtcList, HashSet 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 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 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)) { diff --git a/src/Logic/OCR/OcrFixEngine.cs b/src/Logic/OCR/OcrFixEngine.cs index 4a3b8804a..20b337e72 100644 --- a/src/Logic/OCR/OcrFixEngine.cs +++ b/src/Logic/OCR/OcrFixEngine.cs @@ -26,6 +26,7 @@ namespace Nikse.SubtitleEdit.Logic.Ocr private string _fiveLetterWordListLanguageName; private readonly OcrFixReplaceList _ocrFixReplaceList; + private NamesList _namesList; private HashSet _namesEtcList = new HashSet(); private HashSet _namesEtcListUppercase = new HashSet(); private HashSet _namesEtcListWithApostrophe = new HashSet(); @@ -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(); - _namesEtcMultiWordList = new HashSet(); - 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(); 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; diff --git a/src/Test/FixCommonErrorsTest.cs b/src/Test/FixCommonErrorsTest.cs index b696b844e..636530e69 100644 --- a/src/Test/FixCommonErrorsTest.cs +++ b/src/Test/FixCommonErrorsTest.cs @@ -22,19 +22,19 @@ namespace Test /// 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 /// 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, "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!"); } } @@ -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, "- 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"); } } @@ -192,7 +192,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"); } } @@ -208,7 +208,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "Hey!" + Environment.NewLine + "Boy!"); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Hey!" + Environment.NewLine + "Boy!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Hey!" + Environment.NewLine + "Boy!"); } } @@ -220,7 +220,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "(jones) seems their attackers headed north." + Environment.NewLine + "Hi!"); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "(jones) seems their attackers headed north." + Environment.NewLine + "Hi!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "(jones) seems their attackers headed north." + Environment.NewLine + "Hi!"); } } @@ -232,7 +232,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "Seems their 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, "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 + "Awesome it is!"); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- And..." + Environment.NewLine + "Awesome it is!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "- And..." + Environment.NewLine + "Awesome it is!"); } } @@ -268,7 +268,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "Awesome it is!"); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Awesome it is!"); } } @@ -280,7 +280,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "Awesome it is!"); 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!"); 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!"); 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, "What do i care."); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "What do i care."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "What do i care."); } } @@ -328,7 +328,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "To be a life-changing weekend" + Environment.NewLine + "for all of us."); target.FixInvalidItalicTags(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "To be a life-changing weekend" + Environment.NewLine + "for all of us."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "To be a life-changing weekend" + Environment.NewLine + "for all of us."); } } @@ -344,7 +344,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy!", "This is line one!" + Environment.NewLine + "Boy!"); target.FixMissingPeriodsAtEndOfLine(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy!"); } } @@ -356,7 +356,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy", "This is line one!" + Environment.NewLine + "Boy!"); target.FixMissingPeriodsAtEndOfLine(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); } } @@ -368,7 +368,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy", "This is line one!" + Environment.NewLine + "Boy!"); target.FixMissingPeriodsAtEndOfLine(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); } } @@ -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, "- 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!"); } } @@ -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, "TheBombshell will gone."); target.FixMissingSpaces(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The Bombshell will gone."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The Bombshell will gone."); } } @@ -536,7 +536,7 @@ namespace Test { InitializeFixCommonErrorsLine(target, "The Bombshellwill gone."); target.FixMissingSpaces(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "The Bombshell will gone."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "The Bombshell 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("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."); } @@ -652,8 +652,8 @@ namespace Test [DeploymentItem("SubtitleEdit.exe")] public void StartWithUppercaseAfterParagraphNormal3() { - 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."); } @@ -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("- 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?"); } @@ -702,8 +702,8 @@ namespace Test [DeploymentItem("SubtitleEdit.exe")] public void StartWithUppercaseAfterParagraphNormalDialog3() { - 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?"); } @@ -712,8 +712,8 @@ namespace Test [DeploymentItem("SubtitleEdit.exe")] public void StartWithUppercaseAfterParagraphNormalDialog4() { - 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?"); } @@ -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, "Chanchita, ¡¿copias?! Chanchita!!"); target.FixSpanishInvertedQuestionAndExclamationMarks(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Chanchita, ¡¿copias?! ¡¡Chanchita!!"); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Chanchita, ¡¿copias?! ¡¡Chanchita!!"); } } @@ -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, "- Mm-hmm."); target.FixHyphens(); - Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Mm-hmm."); + Assert.AreEqual(target.Subtitle.Paragraphs[0].Text, "Mm-hmm."); } } @@ -860,7 +860,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."); } } @@ -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()); Assert.AreEqual(res, "I-I'll see you."); }