diff --git a/LanguageMaster.xml b/LanguageMaster.xml index 6632e120c..a8b7ca047 100644 --- a/LanguageMaster.xml +++ b/LanguageMaster.xml @@ -227,11 +227,7 @@ Note: Do check free disk space. File name ending TS settings... Remove line-breaks - Delete lines Try to use source encoding - Delete first lines - Delete last lines - Delete lines containing "Language" in output file name Matroska (.mkv) "Language" in output file name: {0} Two letter language code @@ -2110,9 +2106,6 @@ can edit in same subtitle file (collaboration) List view and text box List view Text box - Use syntax coloring - Html color - ASSA color Update Focus set video position Toggle dock/undock of video controls @@ -2124,8 +2117,6 @@ can edit in same subtitle file (collaboration) Set start, auto duration and go to next Set end, next start and go to next Key down=set start, Key up=set end and go to next - Set start and set end of previous (minus min gap) - Set start and set end of previous and go to next (minus min gap) Move selected lines 100 ms forward Move selected lines 100 ms back Move start {0} ms back @@ -2160,7 +2151,6 @@ can edit in same subtitle file (collaboration) Insert new subtitle at key-down, set end time at key-up Merge dialog (insert dashes) Go to next line - Go to next line and set cursor at end Go to previous line Go to current line start Go to current line end @@ -2284,7 +2274,6 @@ can edit in same subtitle file (collaboration) Move last word from first line down (current subtitle) Selection to lowercase Selection to uppercase - Toggle casing of selection (propercase/uppercase/lowercase) Selection to Ruby (Japanese) Toggle auto duration Auto break text diff --git a/libse/AudioToText/PocketSphinx/ResultReader.cs b/libse/AudioToText/PocketSphinx/ResultReader.cs index ce1a1b2e0..eaedb7cbb 100644 --- a/libse/AudioToText/PocketSphinx/ResultReader.cs +++ b/libse/AudioToText/PocketSphinx/ResultReader.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; -using Nikse.SubtitleEdit.Core.AudioToText.PhocketSphinx; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.AudioToText.PocketSphinx { diff --git a/libse/AudioToText/PocketSphinx/SubtitleGenerator.cs b/libse/AudioToText/PocketSphinx/SubtitleGenerator.cs index b63b01d4a..6840202a3 100644 --- a/libse/AudioToText/PocketSphinx/SubtitleGenerator.cs +++ b/libse/AudioToText/PocketSphinx/SubtitleGenerator.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Nikse.SubtitleEdit.Core.AudioToText.PhocketSphinx; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Dictionaries; namespace Nikse.SubtitleEdit.Core.AudioToText.PocketSphinx diff --git a/libse/AudioToText/ResultText.cs b/libse/AudioToText/ResultText.cs index f02fe4fce..2afac8f16 100644 --- a/libse/AudioToText/ResultText.cs +++ b/libse/AudioToText/ResultText.cs @@ -1,6 +1,4 @@ -using System; - -namespace Nikse.SubtitleEdit.Core.AudioToText.PhocketSphinx +namespace Nikse.SubtitleEdit.Core.AudioToText { public class ResultText { diff --git a/libse/BluRaySup/BluRaySupParser.cs b/libse/BluRaySup/BluRaySupParser.cs index 62e0e8a98..3c72a1664 100644 --- a/libse/BluRaySup/BluRaySupParser.cs +++ b/libse/BluRaySup/BluRaySupParser.cs @@ -25,6 +25,7 @@ using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.BluRaySup { diff --git a/libse/BluRaySup/BluRaySupPicture.cs b/libse/BluRaySup/BluRaySupPicture.cs index fb4f450d6..0d435d7de 100644 --- a/libse/BluRaySup/BluRaySupPicture.cs +++ b/libse/BluRaySup/BluRaySupPicture.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.BluRaySup { diff --git a/libse/CDG/CdgToImageList.cs b/libse/CDG/CdgToImageList.cs index ab2d1d120..94d098a1d 100644 --- a/libse/CDG/CdgToImageList.cs +++ b/libse/CDG/CdgToImageList.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Forms.FixCommonErrors; namespace Nikse.SubtitleEdit.Core.CDG diff --git a/libse/BmpReader.cs b/libse/Common/BmpReader.cs similarity index 92% rename from libse/BmpReader.cs rename to libse/Common/BmpReader.cs index 5ccc6e32c..d9149fc53 100644 --- a/libse/BmpReader.cs +++ b/libse/Common/BmpReader.cs @@ -1,6 +1,6 @@ using System; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class BmpReader { diff --git a/libse/BookmarkPersistence.cs b/libse/Common/BookmarkPersistence.cs similarity index 98% rename from libse/BookmarkPersistence.cs rename to libse/Common/BookmarkPersistence.cs index 4417521eb..9d11e40a4 100644 --- a/libse/BookmarkPersistence.cs +++ b/libse/Common/BookmarkPersistence.cs @@ -3,7 +3,7 @@ using System.IO; using System.Text; using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class BookmarkPersistence { diff --git a/libse/CharUtils.cs b/libse/Common/CharUtils.cs similarity index 94% rename from libse/CharUtils.cs rename to libse/Common/CharUtils.cs index 16e6d61e8..6ea301790 100644 --- a/libse/CharUtils.cs +++ b/libse/Common/CharUtils.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class CharUtils { diff --git a/libse/Configuration.cs b/libse/Common/Configuration.cs similarity index 97% rename from libse/Configuration.cs rename to libse/Common/Configuration.cs index d8973da08..34ac75491 100644 --- a/libse/Configuration.cs +++ b/libse/Common/Configuration.cs @@ -1,248 +1,248 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Nikse.SubtitleEdit.Core -{ - /// - /// Configuration settings via Singleton pattern - /// - public class Configuration - { - private static readonly Lazy Instance = new Lazy(() => new Configuration()); - - private readonly Lazy _settings; - private readonly IEnumerable _encodings; - - public static readonly string BaseDirectory = GetBaseDirectory(); - public static readonly string DataDirectory = GetDataDirectory(); - public static readonly string TesseractOriginalDirectory = BaseDirectory + "Tesseract302" + Path.DirectorySeparatorChar; - public static readonly string DictionariesDirectory = DataDirectory + "Dictionaries" + Path.DirectorySeparatorChar; - public static readonly string SpectrogramsDirectory = DataDirectory + "Spectrograms" + Path.DirectorySeparatorChar; - public static readonly string SceneChangesDirectory = DataDirectory + "SceneChanges" + Path.DirectorySeparatorChar; - public static readonly string AutoBackupDirectory = DataDirectory + "AutoBackup" + Path.DirectorySeparatorChar; - public static readonly string VobSubCompareDirectory = DataDirectory + "VobSub" + Path.DirectorySeparatorChar; - public static readonly string TesseractDirectory = DataDirectory + "Tesseract500.Alpha.20200328" + Path.DirectorySeparatorChar; - public static readonly string Tesseract302Directory = DataDirectory + "Tesseract302" + Path.DirectorySeparatorChar; - public static readonly string WaveformsDirectory = DataDirectory + "Waveforms" + Path.DirectorySeparatorChar; - public static readonly string PluginsDirectory = DataDirectory + "Plugins" + Path.DirectorySeparatorChar; - public static readonly string IconsDirectory = BaseDirectory + "Icons" + Path.DirectorySeparatorChar; - public static readonly string OcrDirectory = DataDirectory + "Ocr" + Path.DirectorySeparatorChar; - public static readonly string SettingsFileName = DataDirectory + "Settings.xml"; - public static readonly string TesseractDataDirectory = GetTesseractDataDirectory(); - public static readonly string Tesseract302DataDirectory = GetTesseract302DataDirectory(); - - public static readonly string DefaultLinuxFontName = "DejaVu Serif"; - - private Configuration() - { - _encodings = GetAvailableEncodings(); - _settings = new Lazy(Settings.GetSettings); - } - - private const int PlatformWindows = 1; - private const int PlatformLinux = 2; - private const int PlatformMac = 3; - private static int _platform; - - public static bool IsRunningOnWindows - { - get - { - if (_platform == 0) - { - _platform = GetPlatform(); - } - return _platform == PlatformWindows; - } - } - - public static bool IsRunningOnLinux - { - get - { - if (_platform == 0) - { - _platform = GetPlatform(); - } - return _platform == PlatformLinux; - } - } - - public static bool IsRunningOnMac - { - get - { - if (_platform == 0) - { - _platform = GetPlatform(); - } - return _platform == PlatformMac; - } - } - - private static int GetPlatform() - { - // Current versions of Mono report MacOSX platform as Unix - return Environment.OSVersion.Platform == PlatformID.MacOSX || (Environment.OSVersion.Platform == PlatformID.Unix && Directory.Exists("/Applications") && Directory.Exists("/System") && Directory.Exists("/Users")) - ? PlatformMac - : Environment.OSVersion.Platform == PlatformID.Unix - ? PlatformLinux - : PlatformWindows; - } - - public static Settings Settings => Instance.Value._settings.Value; - - public static IEnumerable AvailableEncodings => Instance.Value._encodings; - - private static string GetInstallerPath() - { - const string valueName = "InstallLocation"; - var value = RegistryUtil.GetValue(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1", valueName); - if (value != null && Directory.Exists(value)) - { - return value; - } - - value = RegistryUtil.GetValue(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1", valueName); - if (value != null && Directory.Exists(value)) - { - return value; - } - - return null; - } - - private static string GetBaseDirectory() - { - var assembly = System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly(); - return Path.GetDirectoryName(assembly.Location) + Path.DirectorySeparatorChar; - } - - private static string GetDataDirectory() - { - // hack for unit tests - var assembly = System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly(); - var srcTestResultsIndex = assembly.Location.IndexOf(@"\src\TestResults", StringComparison.Ordinal); - if (srcTestResultsIndex > 0) - { - var debugOrReleaseFolderName = "Release"; -#if DEBUG - debugOrReleaseFolderName = "Debug"; -#endif - return $@"{assembly.Location.Substring(0, srcTestResultsIndex)}\src\Test\bin\{debugOrReleaseFolderName}\"; - } - - var appDataRoamingPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Subtitle Edit"); - if (IsRunningOnLinux || IsRunningOnMac) - { - if (!Directory.Exists(appDataRoamingPath) && !File.Exists(Path.Combine(BaseDirectory, ".PACKAGE-MANAGER"))) - { - try - { - var path = Path.Combine(Directory.CreateDirectory(Path.Combine(BaseDirectory, "Dictionaries")).FullName, "not-a-word-list"); - File.Create(path).Close(); - File.Delete(path); - return BaseDirectory; // user installation - } - catch - { - // ignored - } - } - Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries")); - return appDataRoamingPath + Path.DirectorySeparatorChar; // system installation - } - - var installerPath = GetInstallerPath(); - var hasUninstallFiles = Directory.GetFiles(BaseDirectory, "unins*.*").Length > 0; - var hasDictionaryFolder = Directory.Exists(Path.Combine(BaseDirectory, "Dictionaries")); - - if ((installerPath == null || !installerPath.TrimEnd(Path.DirectorySeparatorChar).Equals(BaseDirectory.TrimEnd(Path.DirectorySeparatorChar), StringComparison.OrdinalIgnoreCase)) - && !hasUninstallFiles && (hasDictionaryFolder || !Directory.Exists(Path.Combine(appDataRoamingPath, "Dictionaries")))) - { - return BaseDirectory; - } - - if (Directory.Exists(appDataRoamingPath)) - { - return appDataRoamingPath + Path.DirectorySeparatorChar; - } - - try - { - Directory.CreateDirectory(appDataRoamingPath); - Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries")); - return appDataRoamingPath + Path.DirectorySeparatorChar; - } - catch - { - throw new Exception("Please re-install Subtitle Edit (installer version)"); - } - } - - private static string GetTesseractDataDirectory() - { - if (IsRunningOnLinux || IsRunningOnMac) - { - if (Directory.Exists("/usr/share/tesseract-ocr/4.00/tessdata")) - { - return "/usr/share/tesseract-ocr/4.00/tessdata"; - } - - if (Directory.Exists("/usr/share/tesseract-ocr/tessdata")) - { - return "/usr/share/tesseract-ocr/tessdata"; - } - - if (Directory.Exists("/usr/share/tessdata")) - { - return "/usr/share/tessdata"; - } - } - return Path.Combine(TesseractDirectory, "tessdata"); - } - - private static string GetTesseract302DataDirectory() - { - if (IsRunningOnLinux || IsRunningOnMac) - { - if (Directory.Exists("/usr/share/tesseract-ocr/tessdata")) - { - return "/usr/share/tesseract-ocr/tessdata"; - } - - if (Directory.Exists("/usr/share/tesseract/tessdata")) - { - return "/usr/share/tesseract/tessdata"; - } - - if (Directory.Exists("/usr/share/tessdata")) - { - return "/usr/share/tessdata"; - } - } - return Path.Combine(Tesseract302Directory, "tessdata"); - } - - private static IEnumerable GetAvailableEncodings() - { - var encodings = new List(); - foreach (var ei in Encoding.GetEncodings()) - { - try - { - encodings.Add(Encoding.GetEncoding(ei.CodePage)); - } - catch - { - // though advertised, this code page is not supported - } - } - return encodings.AsEnumerable(); - } - - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace Nikse.SubtitleEdit.Core.Common +{ + /// + /// Configuration settings via Singleton pattern + /// + public class Configuration + { + private static readonly Lazy Instance = new Lazy(() => new Configuration()); + + private readonly Lazy _settings; + private readonly IEnumerable _encodings; + + public static readonly string BaseDirectory = GetBaseDirectory(); + public static readonly string DataDirectory = GetDataDirectory(); + public static readonly string TesseractOriginalDirectory = BaseDirectory + "Tesseract302" + Path.DirectorySeparatorChar; + public static readonly string DictionariesDirectory = DataDirectory + "Dictionaries" + Path.DirectorySeparatorChar; + public static readonly string SpectrogramsDirectory = DataDirectory + "Spectrograms" + Path.DirectorySeparatorChar; + public static readonly string SceneChangesDirectory = DataDirectory + "SceneChanges" + Path.DirectorySeparatorChar; + public static readonly string AutoBackupDirectory = DataDirectory + "AutoBackup" + Path.DirectorySeparatorChar; + public static readonly string VobSubCompareDirectory = DataDirectory + "VobSub" + Path.DirectorySeparatorChar; + public static readonly string TesseractDirectory = DataDirectory + "Tesseract500.Alpha.20200328" + Path.DirectorySeparatorChar; + public static readonly string Tesseract302Directory = DataDirectory + "Tesseract302" + Path.DirectorySeparatorChar; + public static readonly string WaveformsDirectory = DataDirectory + "Waveforms" + Path.DirectorySeparatorChar; + public static readonly string PluginsDirectory = DataDirectory + "Plugins" + Path.DirectorySeparatorChar; + public static readonly string IconsDirectory = BaseDirectory + "Icons" + Path.DirectorySeparatorChar; + public static readonly string OcrDirectory = DataDirectory + "Ocr" + Path.DirectorySeparatorChar; + public static readonly string SettingsFileName = DataDirectory + "Settings.xml"; + public static readonly string TesseractDataDirectory = GetTesseractDataDirectory(); + public static readonly string Tesseract302DataDirectory = GetTesseract302DataDirectory(); + + public static readonly string DefaultLinuxFontName = "DejaVu Serif"; + + private Configuration() + { + _encodings = GetAvailableEncodings(); + _settings = new Lazy(Settings.GetSettings); + } + + private const int PlatformWindows = 1; + private const int PlatformLinux = 2; + private const int PlatformMac = 3; + private static int _platform; + + public static bool IsRunningOnWindows + { + get + { + if (_platform == 0) + { + _platform = GetPlatform(); + } + return _platform == PlatformWindows; + } + } + + public static bool IsRunningOnLinux + { + get + { + if (_platform == 0) + { + _platform = GetPlatform(); + } + return _platform == PlatformLinux; + } + } + + public static bool IsRunningOnMac + { + get + { + if (_platform == 0) + { + _platform = GetPlatform(); + } + return _platform == PlatformMac; + } + } + + private static int GetPlatform() + { + // Current versions of Mono report MacOSX platform as Unix + return Environment.OSVersion.Platform == PlatformID.MacOSX || (Environment.OSVersion.Platform == PlatformID.Unix && Directory.Exists("/Applications") && Directory.Exists("/System") && Directory.Exists("/Users")) + ? PlatformMac + : Environment.OSVersion.Platform == PlatformID.Unix + ? PlatformLinux + : PlatformWindows; + } + + public static Settings Settings => Instance.Value._settings.Value; + + public static IEnumerable AvailableEncodings => Instance.Value._encodings; + + private static string GetInstallerPath() + { + const string valueName = "InstallLocation"; + var value = RegistryUtil.GetValue(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1", valueName); + if (value != null && Directory.Exists(value)) + { + return value; + } + + value = RegistryUtil.GetValue(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1", valueName); + if (value != null && Directory.Exists(value)) + { + return value; + } + + return null; + } + + private static string GetBaseDirectory() + { + var assembly = System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly(); + return Path.GetDirectoryName(assembly.Location) + Path.DirectorySeparatorChar; + } + + private static string GetDataDirectory() + { + // hack for unit tests + var assembly = System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly(); + var srcTestResultsIndex = assembly.Location.IndexOf(@"\src\TestResults", StringComparison.Ordinal); + if (srcTestResultsIndex > 0) + { + var debugOrReleaseFolderName = "Release"; +#if DEBUG + debugOrReleaseFolderName = "Debug"; +#endif + return $@"{assembly.Location.Substring(0, srcTestResultsIndex)}\src\Test\bin\{debugOrReleaseFolderName}\"; + } + + var appDataRoamingPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Subtitle Edit"); + if (IsRunningOnLinux || IsRunningOnMac) + { + if (!Directory.Exists(appDataRoamingPath) && !File.Exists(Path.Combine(BaseDirectory, ".PACKAGE-MANAGER"))) + { + try + { + var path = Path.Combine(Directory.CreateDirectory(Path.Combine(BaseDirectory, "Dictionaries")).FullName, "not-a-word-list"); + File.Create(path).Close(); + File.Delete(path); + return BaseDirectory; // user installation + } + catch + { + // ignored + } + } + Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries")); + return appDataRoamingPath + Path.DirectorySeparatorChar; // system installation + } + + var installerPath = GetInstallerPath(); + var hasUninstallFiles = Directory.GetFiles(BaseDirectory, "unins*.*").Length > 0; + var hasDictionaryFolder = Directory.Exists(Path.Combine(BaseDirectory, "Dictionaries")); + + if ((installerPath == null || !installerPath.TrimEnd(Path.DirectorySeparatorChar).Equals(BaseDirectory.TrimEnd(Path.DirectorySeparatorChar), StringComparison.OrdinalIgnoreCase)) + && !hasUninstallFiles && (hasDictionaryFolder || !Directory.Exists(Path.Combine(appDataRoamingPath, "Dictionaries")))) + { + return BaseDirectory; + } + + if (Directory.Exists(appDataRoamingPath)) + { + return appDataRoamingPath + Path.DirectorySeparatorChar; + } + + try + { + Directory.CreateDirectory(appDataRoamingPath); + Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries")); + return appDataRoamingPath + Path.DirectorySeparatorChar; + } + catch + { + throw new Exception("Please re-install Subtitle Edit (installer version)"); + } + } + + private static string GetTesseractDataDirectory() + { + if (IsRunningOnLinux || IsRunningOnMac) + { + if (Directory.Exists("/usr/share/tesseract-ocr/4.00/tessdata")) + { + return "/usr/share/tesseract-ocr/4.00/tessdata"; + } + + if (Directory.Exists("/usr/share/tesseract-ocr/tessdata")) + { + return "/usr/share/tesseract-ocr/tessdata"; + } + + if (Directory.Exists("/usr/share/tessdata")) + { + return "/usr/share/tessdata"; + } + } + return Path.Combine(TesseractDirectory, "tessdata"); + } + + private static string GetTesseract302DataDirectory() + { + if (IsRunningOnLinux || IsRunningOnMac) + { + if (Directory.Exists("/usr/share/tesseract-ocr/tessdata")) + { + return "/usr/share/tesseract-ocr/tessdata"; + } + + if (Directory.Exists("/usr/share/tesseract/tessdata")) + { + return "/usr/share/tesseract/tessdata"; + } + + if (Directory.Exists("/usr/share/tessdata")) + { + return "/usr/share/tessdata"; + } + } + return Path.Combine(Tesseract302Directory, "tessdata"); + } + + private static IEnumerable GetAvailableEncodings() + { + var encodings = new List(); + foreach (var ei in Encoding.GetEncodings()) + { + try + { + encodings.Add(Encoding.GetEncoding(ei.CodePage)); + } + catch + { + // though advertised, this code page is not supported + } + } + return encodings.AsEnumerable(); + } + + } +} diff --git a/libse/ContinuationUtilities.cs b/libse/Common/ContinuationUtilities.cs similarity index 99% rename from libse/ContinuationUtilities.cs rename to libse/Common/ContinuationUtilities.cs index 9c1a4ddb1..4deb49a37 100644 --- a/libse/ContinuationUtilities.cs +++ b/libse/Common/ContinuationUtilities.cs @@ -1,10 +1,10 @@ -using Nikse.SubtitleEdit.Core.Enums; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Enums; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class ContinuationUtilities { diff --git a/libse/CultureExtensions.cs b/libse/Common/CultureExtensions.cs similarity index 96% rename from libse/CultureExtensions.cs rename to libse/Common/CultureExtensions.cs index cf6df81b5..cd0637cf5 100644 --- a/libse/CultureExtensions.cs +++ b/libse/Common/CultureExtensions.cs @@ -1,6 +1,6 @@ using System.Globalization; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class CultureExtensions { diff --git a/libse/DialogSplitMerge.cs b/libse/Common/DialogSplitMerge.cs similarity index 99% rename from libse/DialogSplitMerge.cs rename to libse/Common/DialogSplitMerge.cs index 4d13332e6..fb57b55ad 100644 --- a/libse/DialogSplitMerge.cs +++ b/libse/Common/DialogSplitMerge.cs @@ -1,9 +1,9 @@ -using Nikse.SubtitleEdit.Core.Enums; -using System; +using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Enums; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class DialogSplitMerge { diff --git a/libse/DvdSubtitleLanguage.cs b/libse/Common/DvdSubtitleLanguage.cs similarity index 99% rename from libse/DvdSubtitleLanguage.cs rename to libse/Common/DvdSubtitleLanguage.cs index 2c105d22e..702915938 100644 --- a/libse/DvdSubtitleLanguage.cs +++ b/libse/Common/DvdSubtitleLanguage.cs @@ -4,7 +4,7 @@ using System.Collections.ObjectModel; using System.Globalization; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class DvdSubtitleLanguage { diff --git a/libse/FastBitmap.cs b/libse/Common/FastBitmap.cs similarity index 98% rename from libse/FastBitmap.cs rename to libse/Common/FastBitmap.cs index ff2402648..f273ad4dd 100644 --- a/libse/FastBitmap.cs +++ b/libse/Common/FastBitmap.cs @@ -4,7 +4,7 @@ using System; using System.Drawing; using System.Drawing.Imaging; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public unsafe class FastBitmap { diff --git a/libse/FastFileStream.cs b/libse/Common/FastFileStream.cs similarity index 98% rename from libse/FastFileStream.cs rename to libse/Common/FastFileStream.cs index 946340ac5..c4f3ca9ab 100644 --- a/libse/FastFileStream.cs +++ b/libse/Common/FastFileStream.cs @@ -1,7 +1,7 @@ using System; using System.IO; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { /// /// Exposes a around a file, supporting synchronous read operations. diff --git a/libse/FilePathComparer.cs b/libse/Common/FilePathComparer.cs similarity index 98% rename from libse/FilePathComparer.cs rename to libse/Common/FilePathComparer.cs index 8600d92c6..a8f170aed 100644 --- a/libse/FilePathComparer.cs +++ b/libse/Common/FilePathComparer.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public abstract class FilePathComparer : IEqualityComparer, IComparer { diff --git a/libse/FileUtil.cs b/libse/Common/FileUtil.cs similarity index 96% rename from libse/FileUtil.cs rename to libse/Common/FileUtil.cs index e733102fa..ad6167cb2 100644 --- a/libse/FileUtil.cs +++ b/libse/Common/FileUtil.cs @@ -1,568 +1,568 @@ -using Nikse.SubtitleEdit.Core.ContainerFormats; -using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; -using Nikse.SubtitleEdit.Core.ContainerFormats.Mp4; -using Nikse.SubtitleEdit.Core.VobSub; -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; - -namespace Nikse.SubtitleEdit.Core -{ - /// - /// File related utilities. - /// - public static class FileUtil - { - /// - /// Opens a binary file in read/write shared mode, reads the contents of the file into a - /// byte array, and then closes the file. - /// - /// The file to open for reading. - /// A byte array containing the contents of the file. - public static byte[] ReadAllBytesShared(string path) - { - using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var index = 0; - var fileLength = fs.Length; - if (fileLength > int.MaxValue) - { - throw new IOException("File too long"); - } - - var count = (int)fileLength; - var bytes = new byte[count]; - while (count > 0) - { - var n = fs.Read(bytes, index, count); - if (n == 0) - { - throw new InvalidOperationException("End of file reached before expected"); - } - - index += n; - count -= n; - } - return bytes; - } - } - - public static List ReadAllLinesShared(string path, Encoding encoding) - { - return encoding.GetString(ReadAllBytesShared(path)).SplitToLines(); - } - - public static string ReadAllTextShared(string path, Encoding encoding) - { - return encoding.GetString(ReadAllBytesShared(path)); - } - - public static bool IsZip(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[4]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 0x50 // P - && buffer[1] == 0x4B // K - && buffer[2] == 0x03 // (ETX) - && buffer[3] == 0x04; // (EOT) - } - } - public static bool Is7Zip(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[6]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 0x37 // 7 - && buffer[1] == 0x7a // z - && buffer[2] == 0xbc - && buffer[3] == 0xaf - && buffer[4] == 0x27 - && buffer[5] == 0x1c; - } - } - - public static bool IsRar(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[4]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 0x52 // R - && buffer[1] == 0x61 // a - && buffer[2] == 0x72 // r - && buffer[3] == 0x21; // ! - } - } - - public static bool IsPng(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[8]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 137 - && buffer[1] == 80 - && buffer[2] == 78 - && buffer[3] == 71 - && buffer[4] == 13 - && buffer[5] == 10 - && buffer[6] == 26 - && buffer[7] == 10; - } - } - - public static bool IsSrr(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[3]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 0x69 - && buffer[1] == 0x69 - && buffer[2] == 0x69; - } - } - - public static bool IsJpg(string fileName) - { - // jpeg header - always starts with FFD8 (Start Of Image marker) + FF + a unknown byte (most often E0 or E1 though) - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[3]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - return buffer[0] == 0xFF - && buffer[1] == 0xD8 - && buffer[2] == 0xFF; - } - } - - public static bool IsTorrentFile(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[11]; - fs.Read(buffer, 0, buffer.Length); - return Encoding.ASCII.GetString(buffer, 0, buffer.Length) == "d8:announce"; - } - } - - public static bool IsBluRaySup(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[2]; - fs.Read(buffer, 0, buffer.Length); - return buffer[0] == 0x50 // P - && buffer[1] == 0x47; // G - } - } - - public static bool IsTransportStream(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[3761]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count != buffer.Length) - { - return false; - } - - // allow for some random bytes in the beginning - for (int i = 0; i < 255; i++) - { - if (buffer[i] == Packet.SynchronizationByte && buffer[i + 188] == Packet.SynchronizationByte && buffer[i + 188 * 2] == Packet.SynchronizationByte) - { - return true; - } - } - - return buffer[0] == 0x54 && buffer[1] == 0x46 && buffer[2] == 0x72 && buffer[3760] == Packet.SynchronizationByte; // Topfield REC TS file - } - } - - public static bool IsM2TransportStream(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - return TransportStreamParser.IsM2TransportStream(fs); - } - } - - public static bool IsMpeg2PrivateStream2(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[4]; - fs.Read(buffer, 0, buffer.Length); - return VobSubParser.IsPrivateStream2(buffer, 0); - } - } - - public static bool IsVobSub(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[4]; - fs.Read(buffer, 0, buffer.Length); - return VobSubParser.IsMpeg2PackHeader(buffer) - || VobSubParser.IsPrivateStream1(buffer, 0); - } - } - - public static bool IsSpDvdSup(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[SpHeader.SpHeaderLength]; - if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) - { - return false; - } - - var header = new SpHeader(buffer); - if (header.Identifier != "SP" || header.NextBlockPosition < 5) - { - return false; - } - - buffer = new byte[header.NextBlockPosition]; - if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) - { - return false; - } - - buffer = new byte[SpHeader.SpHeaderLength]; - if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) - { - return false; - } - - header = new SpHeader(buffer); - return header.Identifier == "SP"; - } - } - - /// - /// Checks if file is an MXF file - /// - /// Input file - /// true if file is an MXF file, otherwise false - public static bool IsMaterialExchangeFormat(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[65536]; - var count = fs.Read(buffer, 0, buffer.Length); - if (count < 100) - { - return false; - } - - for (int i = 0; i < count - 11; i++) - { - //Header Partition PackId = 06 0E 2B 34 02 05 01 01 0D 01 02 - if (buffer[i + 00] == 0x06 && - buffer[i + 01] == 0x0E && - buffer[i + 02] == 0x2B && - buffer[i + 03] == 0x34 && - buffer[i + 04] == 0x02 && - buffer[i + 05] == 0x05 && - buffer[i + 06] == 0x01 && - buffer[i + 07] == 0x01 && - buffer[i + 08] == 0x0D && - buffer[i + 09] == 0x01 && - buffer[i + 10] == 0x02) - { - return true; - } - } - } - return false; - } - - public static bool IsRtf(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[10]; - if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) - { - return false; - } - - var text = Encoding.ASCII.GetString(buffer); - var textUtf8 = Encoding.ASCII.GetString(buffer, 3, 7); - return text.Trim().StartsWith("{\\rtf1\\", StringComparison.Ordinal) || - textUtf8.Trim().StartsWith("{\\rtf1\\", StringComparison.Ordinal); - } - } - - public static bool HasUtf8Bom(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var buffer = new byte[3]; - fs.Read(buffer, 0, buffer.Length); - return buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf; - } - } - - public static bool IsSubtitleFileAllBinaryZeroes(string fileName) - { - using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - if (fs.Length < 10) - { - return false; // too short to be a proper subtitle file - } - - int numberOfBytes = 1; - var buffer = new byte[1024]; - while (numberOfBytes > 0) - { - numberOfBytes = fs.Read(buffer, 0, buffer.Length); - for (int i = 0; i < numberOfBytes; i++) - { - if (buffer[i] > 0) - { - return false; - } - } - } - } - return true; - } - - public static bool IsFile(string path) - { - if (!Path.IsPathRooted(path)) - { - return false; - } - - return (File.GetAttributes(path) & FileAttributes.Directory) != FileAttributes.Directory; - } - - public static bool IsDirectory(string path) - { - if (!Path.IsPathRooted(path)) - { - return false; - } - - return (File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory; - } - - public static bool IsPlainText(string fileName) - { - var fileInfo = new FileInfo(fileName); - if (fileInfo.Length < 20) - { - return false; // too short to be plain text - } - - if (fileInfo.Length > 5000000) - { - return false; // too large to be plain text - } - - var enc = LanguageAutoDetect.GetEncodingFromFile(fileName); - var s = ReadAllTextShared(fileName, enc); - - int numberCount = 0; - int letterCount = 0; - int len = s.Length; - - for (int i = 0; i < len; i++) - { - var ch = s[i]; - if (char.IsLetter(ch) || " -,.!?[]()\r\n".Contains(ch)) - { - letterCount++; - } - else if (char.IsControl(ch) && ch != '\t') // binary found - { - return false; - } - else if (CharUtils.IsDigit(ch)) - { - numberCount++; - } - } - if (len < 100) - { - return numberCount < 5 && letterCount > 20; - } - - var numberPatternMatches = new Regex(@"\d+[.:,; -]\d+").Matches(s); - if (numberPatternMatches.Count > 30) - { - return false; // looks like time codes - } - - var largeBlocksOfLargeNumbers = new Regex(@"\d{3,8}").Matches(s); - if (largeBlocksOfLargeNumbers.Count > 30) - { - return false; // looks like time codes - } - - if (len < 1000 && largeBlocksOfLargeNumbers.Count > 10) - { - return false; // looks like time codes - } - - var partsWithMoreThan100CharsOfNonNumbers = new Regex(@"[^\d]{150,100000}").Matches(s); - if (partsWithMoreThan100CharsOfNonNumbers.Count > 10) - { - return true; // looks like text - } - - var numberThreshold = len * 0.015 + 25; - var letterThreshold = len * 0.8; - return numberCount < numberThreshold && letterCount > letterThreshold; - } - - public static VideoInfo TryReadVideoInfoViaMatroskaHeader(string fileName) - { - var info = new VideoInfo { Success = false }; - using (var matroska = new MatroskaFile(fileName)) - { - if (matroska.IsValid) - { - matroska.GetInfo(out var frameRate, out var width, out var height, out var milliseconds, out var videoCodec); - - info.Width = width; - info.Height = height; - info.FramesPerSecond = frameRate; - info.Success = true; - info.TotalMilliseconds = milliseconds; - info.TotalSeconds = milliseconds / TimeCode.BaseUnit; - info.TotalFrames = info.TotalSeconds * frameRate; - info.VideoCodec = videoCodec; - } - } - return info; - } - - public static VideoInfo TryReadVideoInfoViaAviHeader(string fileName) - { - var info = new VideoInfo { Success = false }; - - try - { - using (var rp = new RiffParser()) - { - if (rp.TryOpenFile(fileName) && rp.FileType == RiffParser.CkidAvi) - { - var dh = new RiffDecodeHeader(rp); - dh.ProcessMainAvi(); - info.FileType = RiffParser.FromFourCc(rp.FileType); - info.Width = dh.Width; - info.Height = dh.Height; - info.FramesPerSecond = dh.FrameRate; - info.TotalFrames = dh.TotalFrames; - info.TotalMilliseconds = dh.TotalMilliseconds; - info.TotalSeconds = info.TotalMilliseconds / TimeCode.BaseUnit; - info.VideoCodec = dh.VideoHandler; - info.Success = true; - } - } - } - catch - { - // ignored - } - - return info; - } - - public static VideoInfo TryReadVideoInfoViaMp4(string fileName) - { - var info = new VideoInfo { Success = false }; - - try - { - var mp4Parser = new MP4Parser(fileName); - if (mp4Parser.Moov != null && mp4Parser.VideoResolution.X > 0) - { - info.Width = mp4Parser.VideoResolution.X; - info.Height = mp4Parser.VideoResolution.Y; - info.TotalMilliseconds = mp4Parser.Duration.TotalSeconds; - info.VideoCodec = "MP4"; - info.FramesPerSecond = mp4Parser.FrameRate; - info.Success = true; - } - } - catch - { - // ignored - } - - return info; - } - - public static string GetTempFileName(string extension) - { - return Path.GetTempPath() + Guid.NewGuid() + extension; - } - - public static void WriteAllText(string fileName, string contents, TextEncoding encoding) - { - if (encoding.DisplayName == TextEncoding.Utf8WithoutBom) - { - var outputEnc = new UTF8Encoding(false); // create encoding with no BOM - using (var file = new StreamWriter(fileName, false, outputEnc)) // open file with encoding - { - file.Write(contents); - } - } - else - { - File.WriteAllText(fileName, contents, encoding.Encoding); - } - } - - public static bool IsMatroskaFile(string fileName) - { - var validator = new MatroskaFile(fileName); - return validator.IsValid; - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.ContainerFormats; +using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; +using Nikse.SubtitleEdit.Core.ContainerFormats.Mp4; +using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; +using Nikse.SubtitleEdit.Core.VobSub; + +namespace Nikse.SubtitleEdit.Core.Common +{ + /// + /// File related utilities. + /// + public static class FileUtil + { + /// + /// Opens a binary file in read/write shared mode, reads the contents of the file into a + /// byte array, and then closes the file. + /// + /// The file to open for reading. + /// A byte array containing the contents of the file. + public static byte[] ReadAllBytesShared(string path) + { + using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var index = 0; + var fileLength = fs.Length; + if (fileLength > int.MaxValue) + { + throw new IOException("File too long"); + } + + var count = (int)fileLength; + var bytes = new byte[count]; + while (count > 0) + { + var n = fs.Read(bytes, index, count); + if (n == 0) + { + throw new InvalidOperationException("End of file reached before expected"); + } + + index += n; + count -= n; + } + return bytes; + } + } + + public static List ReadAllLinesShared(string path, Encoding encoding) + { + return encoding.GetString(ReadAllBytesShared(path)).SplitToLines(); + } + + public static string ReadAllTextShared(string path, Encoding encoding) + { + return encoding.GetString(ReadAllBytesShared(path)); + } + + public static bool IsZip(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[4]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 0x50 // P + && buffer[1] == 0x4B // K + && buffer[2] == 0x03 // (ETX) + && buffer[3] == 0x04; // (EOT) + } + } + public static bool Is7Zip(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[6]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 0x37 // 7 + && buffer[1] == 0x7a // z + && buffer[2] == 0xbc + && buffer[3] == 0xaf + && buffer[4] == 0x27 + && buffer[5] == 0x1c; + } + } + + public static bool IsRar(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[4]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 0x52 // R + && buffer[1] == 0x61 // a + && buffer[2] == 0x72 // r + && buffer[3] == 0x21; // ! + } + } + + public static bool IsPng(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[8]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 137 + && buffer[1] == 80 + && buffer[2] == 78 + && buffer[3] == 71 + && buffer[4] == 13 + && buffer[5] == 10 + && buffer[6] == 26 + && buffer[7] == 10; + } + } + + public static bool IsSrr(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[3]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 0x69 + && buffer[1] == 0x69 + && buffer[2] == 0x69; + } + } + + public static bool IsJpg(string fileName) + { + // jpeg header - always starts with FFD8 (Start Of Image marker) + FF + a unknown byte (most often E0 or E1 though) + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[3]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + return buffer[0] == 0xFF + && buffer[1] == 0xD8 + && buffer[2] == 0xFF; + } + } + + public static bool IsTorrentFile(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[11]; + fs.Read(buffer, 0, buffer.Length); + return Encoding.ASCII.GetString(buffer, 0, buffer.Length) == "d8:announce"; + } + } + + public static bool IsBluRaySup(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[2]; + fs.Read(buffer, 0, buffer.Length); + return buffer[0] == 0x50 // P + && buffer[1] == 0x47; // G + } + } + + public static bool IsTransportStream(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[3761]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count != buffer.Length) + { + return false; + } + + // allow for some random bytes in the beginning + for (int i = 0; i < 255; i++) + { + if (buffer[i] == Packet.SynchronizationByte && buffer[i + 188] == Packet.SynchronizationByte && buffer[i + 188 * 2] == Packet.SynchronizationByte) + { + return true; + } + } + + return buffer[0] == 0x54 && buffer[1] == 0x46 && buffer[2] == 0x72 && buffer[3760] == Packet.SynchronizationByte; // Topfield REC TS file + } + } + + public static bool IsM2TransportStream(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + return TransportStreamParser.IsM2TransportStream(fs); + } + } + + public static bool IsMpeg2PrivateStream2(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[4]; + fs.Read(buffer, 0, buffer.Length); + return VobSubParser.IsPrivateStream2(buffer, 0); + } + } + + public static bool IsVobSub(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[4]; + fs.Read(buffer, 0, buffer.Length); + return VobSubParser.IsMpeg2PackHeader(buffer) + || VobSubParser.IsPrivateStream1(buffer, 0); + } + } + + public static bool IsSpDvdSup(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[SpHeader.SpHeaderLength]; + if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) + { + return false; + } + + var header = new SpHeader(buffer); + if (header.Identifier != "SP" || header.NextBlockPosition < 5) + { + return false; + } + + buffer = new byte[header.NextBlockPosition]; + if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) + { + return false; + } + + buffer = new byte[SpHeader.SpHeaderLength]; + if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) + { + return false; + } + + header = new SpHeader(buffer); + return header.Identifier == "SP"; + } + } + + /// + /// Checks if file is an MXF file + /// + /// Input file + /// true if file is an MXF file, otherwise false + public static bool IsMaterialExchangeFormat(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[65536]; + var count = fs.Read(buffer, 0, buffer.Length); + if (count < 100) + { + return false; + } + + for (int i = 0; i < count - 11; i++) + { + //Header Partition PackId = 06 0E 2B 34 02 05 01 01 0D 01 02 + if (buffer[i + 00] == 0x06 && + buffer[i + 01] == 0x0E && + buffer[i + 02] == 0x2B && + buffer[i + 03] == 0x34 && + buffer[i + 04] == 0x02 && + buffer[i + 05] == 0x05 && + buffer[i + 06] == 0x01 && + buffer[i + 07] == 0x01 && + buffer[i + 08] == 0x0D && + buffer[i + 09] == 0x01 && + buffer[i + 10] == 0x02) + { + return true; + } + } + } + return false; + } + + public static bool IsRtf(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[10]; + if (fs.Read(buffer, 0, buffer.Length) != buffer.Length) + { + return false; + } + + var text = Encoding.ASCII.GetString(buffer); + var textUtf8 = Encoding.ASCII.GetString(buffer, 3, 7); + return text.Trim().StartsWith("{\\rtf1\\", StringComparison.Ordinal) || + textUtf8.Trim().StartsWith("{\\rtf1\\", StringComparison.Ordinal); + } + } + + public static bool HasUtf8Bom(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var buffer = new byte[3]; + fs.Read(buffer, 0, buffer.Length); + return buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf; + } + } + + public static bool IsSubtitleFileAllBinaryZeroes(string fileName) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + if (fs.Length < 10) + { + return false; // too short to be a proper subtitle file + } + + int numberOfBytes = 1; + var buffer = new byte[1024]; + while (numberOfBytes > 0) + { + numberOfBytes = fs.Read(buffer, 0, buffer.Length); + for (int i = 0; i < numberOfBytes; i++) + { + if (buffer[i] > 0) + { + return false; + } + } + } + } + return true; + } + + public static bool IsFile(string path) + { + if (!Path.IsPathRooted(path)) + { + return false; + } + + return (File.GetAttributes(path) & FileAttributes.Directory) != FileAttributes.Directory; + } + + public static bool IsDirectory(string path) + { + if (!Path.IsPathRooted(path)) + { + return false; + } + + return (File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory; + } + + public static bool IsPlainText(string fileName) + { + var fileInfo = new FileInfo(fileName); + if (fileInfo.Length < 20) + { + return false; // too short to be plain text + } + + if (fileInfo.Length > 5000000) + { + return false; // too large to be plain text + } + + var enc = LanguageAutoDetect.GetEncodingFromFile(fileName); + var s = ReadAllTextShared(fileName, enc); + + int numberCount = 0; + int letterCount = 0; + int len = s.Length; + + for (int i = 0; i < len; i++) + { + var ch = s[i]; + if (char.IsLetter(ch) || " -,.!?[]()\r\n".Contains(ch)) + { + letterCount++; + } + else if (char.IsControl(ch) && ch != '\t') // binary found + { + return false; + } + else if (CharUtils.IsDigit(ch)) + { + numberCount++; + } + } + if (len < 100) + { + return numberCount < 5 && letterCount > 20; + } + + var numberPatternMatches = new Regex(@"\d+[.:,; -]\d+").Matches(s); + if (numberPatternMatches.Count > 30) + { + return false; // looks like time codes + } + + var largeBlocksOfLargeNumbers = new Regex(@"\d{3,8}").Matches(s); + if (largeBlocksOfLargeNumbers.Count > 30) + { + return false; // looks like time codes + } + + if (len < 1000 && largeBlocksOfLargeNumbers.Count > 10) + { + return false; // looks like time codes + } + + var partsWithMoreThan100CharsOfNonNumbers = new Regex(@"[^\d]{150,100000}").Matches(s); + if (partsWithMoreThan100CharsOfNonNumbers.Count > 10) + { + return true; // looks like text + } + + var numberThreshold = len * 0.015 + 25; + var letterThreshold = len * 0.8; + return numberCount < numberThreshold && letterCount > letterThreshold; + } + + public static VideoInfo TryReadVideoInfoViaMatroskaHeader(string fileName) + { + var info = new VideoInfo { Success = false }; + using (var matroska = new MatroskaFile(fileName)) + { + if (matroska.IsValid) + { + matroska.GetInfo(out var frameRate, out var width, out var height, out var milliseconds, out var videoCodec); + + info.Width = width; + info.Height = height; + info.FramesPerSecond = frameRate; + info.Success = true; + info.TotalMilliseconds = milliseconds; + info.TotalSeconds = milliseconds / TimeCode.BaseUnit; + info.TotalFrames = info.TotalSeconds * frameRate; + info.VideoCodec = videoCodec; + } + } + return info; + } + + public static VideoInfo TryReadVideoInfoViaAviHeader(string fileName) + { + var info = new VideoInfo { Success = false }; + + try + { + using (var rp = new RiffParser()) + { + if (rp.TryOpenFile(fileName) && rp.FileType == RiffParser.CkidAvi) + { + var dh = new RiffDecodeHeader(rp); + dh.ProcessMainAvi(); + info.FileType = RiffParser.FromFourCc(rp.FileType); + info.Width = dh.Width; + info.Height = dh.Height; + info.FramesPerSecond = dh.FrameRate; + info.TotalFrames = dh.TotalFrames; + info.TotalMilliseconds = dh.TotalMilliseconds; + info.TotalSeconds = info.TotalMilliseconds / TimeCode.BaseUnit; + info.VideoCodec = dh.VideoHandler; + info.Success = true; + } + } + } + catch + { + // ignored + } + + return info; + } + + public static VideoInfo TryReadVideoInfoViaMp4(string fileName) + { + var info = new VideoInfo { Success = false }; + + try + { + var mp4Parser = new MP4Parser(fileName); + if (mp4Parser.Moov != null && mp4Parser.VideoResolution.X > 0) + { + info.Width = mp4Parser.VideoResolution.X; + info.Height = mp4Parser.VideoResolution.Y; + info.TotalMilliseconds = mp4Parser.Duration.TotalSeconds; + info.VideoCodec = "MP4"; + info.FramesPerSecond = mp4Parser.FrameRate; + info.Success = true; + } + } + catch + { + // ignored + } + + return info; + } + + public static string GetTempFileName(string extension) + { + return Path.GetTempPath() + Guid.NewGuid() + extension; + } + + public static void WriteAllText(string fileName, string contents, TextEncoding encoding) + { + if (encoding.DisplayName == TextEncoding.Utf8WithoutBom) + { + var outputEnc = new UTF8Encoding(false); // create encoding with no BOM + using (var file = new StreamWriter(fileName, false, outputEnc)) // open file with encoding + { + file.Write(contents); + } + } + else + { + File.WriteAllText(fileName, contents, encoding.Encoding); + } + } + + public static bool IsMatroskaFile(string fileName) + { + var validator = new MatroskaFile(fileName); + return validator.IsValid; + } + } +} diff --git a/libse/FixCasing.cs b/libse/Common/FixCasing.cs similarity index 99% rename from libse/FixCasing.cs rename to libse/Common/FixCasing.cs index dc96ad1a3..e7ff1ce3d 100644 --- a/libse/FixCasing.cs +++ b/libse/Common/FixCasing.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using Nikse.SubtitleEdit.Core.Dictionaries; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class FixCasing { diff --git a/libse/FixDurationLimits.cs b/libse/Common/FixDurationLimits.cs similarity index 97% rename from libse/FixDurationLimits.cs rename to libse/Common/FixDurationLimits.cs index e57b85686..0ac33c7c5 100644 --- a/libse/FixDurationLimits.cs +++ b/libse/Common/FixDurationLimits.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class FixDurationLimits { diff --git a/libse/HistoryItem.cs b/libse/Common/HistoryItem.cs similarity index 96% rename from libse/HistoryItem.cs rename to libse/Common/HistoryItem.cs index ee5d42415..e43ba3bd6 100644 --- a/libse/HistoryItem.cs +++ b/libse/Common/HistoryItem.cs @@ -1,52 +1,52 @@ -using System; -using System.Collections.Generic; - -namespace Nikse.SubtitleEdit.Core -{ - public class HistoryItem - { - public int Index { get; set; } - public DateTime Timestamp { get; set; } - public string Description { get; set; } - public string FileName { get; set; } - public DateTime FileModified { get; set; } - public Subtitle Subtitle { get; set; } - public string SubtitleFormatFriendlyName { get; set; } - public Subtitle OriginalSubtitle { get; set; } - public string OriginalSubtitleFileName { get; set; } - public List RedoParagraphs { get; set; } - public List RedoParagraphsAlternate { get; set; } - public int RedoLineIndex { get; set; } - public int RedoLinePosition { get; set; } - public int RedoLinePositionAlternate { get; set; } - public string RedoFileName { get; set; } - public DateTime RedoFileModified { get; set; } - public string RedoOriginalFileName { get; set; } - public int LineIndex { get; set; } - public int LinePosition { get; set; } - public int LinePositionAlternate { get; set; } - - public HistoryItem(int index, Subtitle subtitle, string description, string fileName, DateTime fileModified, string subtitleFormatFriendlyName, Subtitle originalSubtitle, string originalSubtitleFileName, int lineIndex, int linePosition, int linePositionAlternate) - { - Index = index; - Timestamp = DateTime.Now; - Subtitle = new Subtitle(subtitle); - Description = description; - FileName = fileName; - FileModified = fileModified; - SubtitleFormatFriendlyName = subtitleFormatFriendlyName; - OriginalSubtitle = new Subtitle(originalSubtitle); - OriginalSubtitleFileName = originalSubtitleFileName; - LineIndex = lineIndex; - LinePosition = linePosition; - LinePositionAlternate = linePositionAlternate; - RedoLineIndex = -1; - RedoLinePosition = -1; - } - - public string ToHHMMSS() - { - return $"{Timestamp.Hour:00}:{Timestamp.Minute:00}:{Timestamp.Second:00}"; - } - } -} +using System; +using System.Collections.Generic; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public class HistoryItem + { + public int Index { get; set; } + public DateTime Timestamp { get; set; } + public string Description { get; set; } + public string FileName { get; set; } + public DateTime FileModified { get; set; } + public Subtitle Subtitle { get; set; } + public string SubtitleFormatFriendlyName { get; set; } + public Subtitle OriginalSubtitle { get; set; } + public string OriginalSubtitleFileName { get; set; } + public List RedoParagraphs { get; set; } + public List RedoParagraphsAlternate { get; set; } + public int RedoLineIndex { get; set; } + public int RedoLinePosition { get; set; } + public int RedoLinePositionAlternate { get; set; } + public string RedoFileName { get; set; } + public DateTime RedoFileModified { get; set; } + public string RedoOriginalFileName { get; set; } + public int LineIndex { get; set; } + public int LinePosition { get; set; } + public int LinePositionAlternate { get; set; } + + public HistoryItem(int index, Subtitle subtitle, string description, string fileName, DateTime fileModified, string subtitleFormatFriendlyName, Subtitle originalSubtitle, string originalSubtitleFileName, int lineIndex, int linePosition, int linePositionAlternate) + { + Index = index; + Timestamp = DateTime.Now; + Subtitle = new Subtitle(subtitle); + Description = description; + FileName = fileName; + FileModified = fileModified; + SubtitleFormatFriendlyName = subtitleFormatFriendlyName; + OriginalSubtitle = new Subtitle(originalSubtitle); + OriginalSubtitleFileName = originalSubtitleFileName; + LineIndex = lineIndex; + LinePosition = linePosition; + LinePositionAlternate = linePositionAlternate; + RedoLineIndex = -1; + RedoLinePosition = -1; + } + + public string ToHHMMSS() + { + return $"{Timestamp.Hour:00}:{Timestamp.Minute:00}:{Timestamp.Second:00}"; + } + } +} diff --git a/libse/HtmlUtil.cs b/libse/Common/HtmlUtil.cs similarity index 97% rename from libse/HtmlUtil.cs rename to libse/Common/HtmlUtil.cs index 7ce5db612..59577dc66 100644 --- a/libse/HtmlUtil.cs +++ b/libse/Common/HtmlUtil.cs @@ -1,910 +1,910 @@ -using System; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; - -namespace Nikse.SubtitleEdit.Core -{ - /// - /// HTML specific string manipulations. - /// - public static class HtmlUtil - { - public static string TagItalic => "i"; - public static string TagBold => "b"; - public static string TagUnderline => "u"; - public static string TagFont => "font"; - public static string TagCyrillicI => "\u0456"; // Cyrillic Small Letter Byelorussian-Ukrainian i (http://graphemica.com/%D1%96) - - private static readonly Regex TagOpenRegex = new Regex(@"<\s*(?:/\s*)?(\w+)[^>]*>", RegexOptions.Compiled); - - /// - /// Remove all of the specified opening and closing tags from the source HTML string. - /// - /// The source string to search for specified HTML tags. - /// The HTML tags to remove. - /// A new string without the specified opening and closing tags. - public static string RemoveOpenCloseTags(string source, params string[] tags) - { - if (string.IsNullOrEmpty(source) || source.IndexOf('<') < 0) - { - return source; - } - - // This pattern matches these tag formats: - // - // < tag*> - // - // < /tag*> - // - // < / tag*> - return TagOpenRegex.Replace(source, m => tags.Contains(m.Groups[1].Value, StringComparer.OrdinalIgnoreCase) ? string.Empty : m.Value); - } - - /// - /// Converts a string to an HTML-encoded string using named character references. - /// - /// The string to encode. - /// An encoded string. - public static string EncodeNamed(string source) - { - if (string.IsNullOrEmpty(source)) - { - return string.Empty; - } - - var encoded = new StringBuilder(source.Length); - foreach (var ch in source) - { - switch (ch) - { - case '<': - encoded.Append("<"); - break; - case '>': - encoded.Append(">"); - break; - case '"': - encoded.Append("""); - break; - case '&': - encoded.Append("&"); - break; - case '\'': - encoded.Append("'"); - break; - case ' ': - encoded.Append(" "); - break; - case '–': - encoded.Append("–"); - break; - case '—': - encoded.Append("—"); - break; - case '¡': - encoded.Append("¡"); - break; - case '¿': - encoded.Append("¿"); - break; - case '“': - encoded.Append("“"); - break; - case '”': - encoded.Append("”"); - break; - case '‘': - encoded.Append("‘"); - break; - case '’': - encoded.Append("’"); - break; - case '«': - encoded.Append("«"); - break; - case '»': - encoded.Append("»"); - break; - case '¢': - encoded.Append("¢"); - break; - case '©': - encoded.Append("©"); - break; - case '÷': - encoded.Append("÷"); - break; - case 'µ': - encoded.Append("µ"); - break; - case '·': - encoded.Append("·"); - break; - case '¶': - encoded.Append("¶"); - break; - case '±': - encoded.Append("±"); - break; - case '€': - encoded.Append("€"); - break; - case '£': - encoded.Append("£"); - break; - case '®': - encoded.Append("®"); - break; - case '§': - encoded.Append("§"); - break; - case '™': - encoded.Append("™"); - break; - case '¥': - encoded.Append("¥"); - break; - case 'á': - encoded.Append("á"); - break; - case 'Á': - encoded.Append("Á"); - break; - case 'à': - encoded.Append("à"); - break; - case 'À': - encoded.Append("À"); - break; - case 'â': - encoded.Append("â"); - break; - case 'Â': - encoded.Append("Â"); - break; - case 'å': - encoded.Append("å"); - break; - case 'Å': - encoded.Append("Å"); - break; - case 'ã': - encoded.Append("ã"); - break; - case 'Ã': - encoded.Append("Ã"); - break; - case 'ä': - encoded.Append("ä"); - break; - case 'Ä': - encoded.Append("Ä"); - break; - case 'æ': - encoded.Append("æ"); - break; - case 'Æ': - encoded.Append("Æ"); - break; - case 'ç': - encoded.Append("ç"); - break; - case 'Ç': - encoded.Append("Ç"); - break; - case 'é': - encoded.Append("é"); - break; - case 'É': - encoded.Append("É"); - break; - case 'è': - encoded.Append("è"); - break; - case 'È': - encoded.Append("È"); - break; - case 'ê': - encoded.Append("ê"); - break; - case 'Ê': - encoded.Append("Ê"); - break; - case 'ë': - encoded.Append("ë"); - break; - case 'Ë': - encoded.Append("Ë"); - break; - case 'í': - encoded.Append("í"); - break; - case 'Í': - encoded.Append("Í"); - break; - case 'ì': - encoded.Append("ì"); - break; - case 'Ì': - encoded.Append("Ì"); - break; - case 'î': - encoded.Append("î"); - break; - case 'Î': - encoded.Append("Î"); - break; - case 'ï': - encoded.Append("ï"); - break; - case 'Ï': - encoded.Append("Ï"); - break; - case 'ñ': - encoded.Append("ñ"); - break; - case 'Ñ': - encoded.Append("Ñ"); - break; - case 'ó': - encoded.Append("ó"); - break; - case 'Ó': - encoded.Append("Ó"); - break; - case 'ò': - encoded.Append("ò"); - break; - case 'Ò': - encoded.Append("Ò"); - break; - case 'ô': - encoded.Append("ô"); - break; - case 'Ô': - encoded.Append("Ô"); - break; - case 'ø': - encoded.Append("ø"); - break; - case 'Ø': - encoded.Append("Ø"); - break; - case 'õ': - encoded.Append("õ"); - break; - case 'Õ': - encoded.Append("Õ"); - break; - case 'ö': - encoded.Append("ö"); - break; - case 'Ö': - encoded.Append("Ö"); - break; - case 'ß': - encoded.Append("ß"); - break; - case 'ú': - encoded.Append("ú"); - break; - case 'Ú': - encoded.Append("Ú"); - break; - case 'ù': - encoded.Append("ù"); - break; - case 'Ù': - encoded.Append("Ù"); - break; - case 'û': - encoded.Append("û"); - break; - case 'Û': - encoded.Append("Û"); - break; - case 'ü': - encoded.Append("ü"); - break; - case 'Ü': - encoded.Append("Ü"); - break; - case 'ÿ': - encoded.Append("ÿ"); - break; - default: - if (ch > 127) - { - encoded.Append("&#" + (int)ch + ";"); - } - else - { - encoded.Append(ch); - } - break; - } - } - return encoded.ToString(); - } - - /// - /// Converts a string to an HTML-encoded string using numeric character references. - /// - /// The string to encode. - /// An encoded string. - public static string EncodeNumeric(string source) - { - if (string.IsNullOrEmpty(source)) - { - return string.Empty; - } - - var encoded = new StringBuilder(source.Length); - foreach (var ch in source) - { - if (ch == ' ') - { - encoded.Append("&#"); - encoded.Append(160); //   - encoded.Append(';'); - } - else if (ch > 127 || ch == '<' || ch == '>' || ch == '"' || ch == '&' || ch == '\'') - { - encoded.Append("&#"); - encoded.Append((int)ch); - encoded.Append(';'); - } - else - { - encoded.Append(ch); - } - } - return encoded.ToString(); - } - - public static string RemoveHtmlTags(string input, bool alsoSsaTags = false) - { - if (input == null || input.Length < 3) - { - return input; - } - - var s = input; - if (alsoSsaTags) - { - s = Utilities.RemoveSsaTags(s); - } - - if (!s.Contains('<')) - { - return s; - } - - if (s.Contains("< ")) - { - s = FixInvalidItalicTags(s); - } - - if (s.IndexOf('x') > 0) - { - s = s.Replace("", string.Empty).Replace("", string.Empty); - } - - // v tag from WebVTT - var indexOfVTag = s.IndexOf("= 0) - { - var indexOfEndVTag = s.IndexOf('>', indexOfVTag); - if (indexOfEndVTag >= 0) - { - s = s.Remove(indexOfVTag, indexOfEndVTag - indexOfVTag + 1); - s = s.Replace("", string.Empty); - } - } - - return RemoveCommonHtmlTags(s); - } - - /// - /// Optimized method to remove common html tags, like , , , and - /// - /// Text to remove html tags from - /// Text stripped from common html tags - private static string RemoveCommonHtmlTags(string s) - { - char[] array = new char[s.Length]; - int arrayIndex = 0; - bool inside = false; - - for (int i = 0; i < s.Length; i++) - { - char ch = s[i]; - if (ch == '<' && i < s.Length - 2) - { - var next = s[i + 1]; - var nextNext = s[i + 2]; - if (nextNext == '>' && - (next == 'i' || // - next == 'I' || // - next == 'b' || // - next == 'B' || // - next == 'u' || // - next == 'U')) // - { - inside = true; - continue; - } - if (next == '/' && i < s.Length - 3) - { - var nextNextNext = s[i + 3]; - if (nextNextNext == '>' && - (nextNext == 'i' || // - nextNext == 'I' || // - nextNext == 'b' || // - nextNext == 'B' || // - nextNext == 'u' || // - nextNext == 'U')) // - { - inside = true; - continue; - } - } - if (nextNext == '/' && i < s.Length - 3) - { // some bad end tags sometimes seen - var nextNextNext = s[i + 3]; - if (nextNextNext == '>' && - (next == 'i' || // - next == 'I' || // - next == 'b' || // - next == 'B' || // - next == 'u' || // - next == 'U')) // - { - inside = true; - continue; - } - } - if ((next == 'f' || next == 'F') && s.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase)) // - { - inside = true; - continue; - } - } - if (inside && ch == '>') - { - inside = false; - continue; - } - if (!inside) - { - array[arrayIndex] = ch; - arrayIndex++; - } - } - return new string(array, 0, arrayIndex); - } - - public static bool IsUrl(string text) - { - if (string.IsNullOrWhiteSpace(text) || text.Length < 6 || !text.Contains('.') || text.Contains(' ')) - { - return false; - } - - var allLower = text.ToLowerInvariant(); - if (allLower.StartsWith("http://", StringComparison.Ordinal) || allLower.StartsWith("https://", StringComparison.Ordinal) || - allLower.StartsWith("www.", StringComparison.Ordinal) || allLower.EndsWith(".org", StringComparison.Ordinal) || - allLower.EndsWith(".com", StringComparison.Ordinal) || allLower.EndsWith(".net", StringComparison.Ordinal)) - { - return true; - } - - if (allLower.Contains(".org/") || allLower.Contains(".com/") || allLower.Contains(".net/")) - { - return true; - } - - return false; - } - - public static bool StartsWithUrl(string text) - { - if (string.IsNullOrWhiteSpace(text)) - { - return false; - } - - var arr = text.Trim().TrimEnd('.').TrimEnd().Split(); - if (arr.Length == 0) - { - return false; - } - - return IsUrl(arr[0]); - } - - private static readonly string[] UppercaseTags = { "", "", "", "", "", "", "" }; - - public static string FixUpperTags(string input) - { - if (string.IsNullOrEmpty(input) || !input.Contains('<')) - { - return input; - } - - var text = input; - var idx = text.IndexOfAny(UppercaseTags, StringComparison.Ordinal); - while (idx >= 0) - { - var endIdx = text.IndexOf('>', idx + 2); - if (endIdx < idx) - { - break; - } - - var tag = text.Substring(idx, endIdx - idx).ToLowerInvariant(); - text = text.Remove(idx, endIdx - idx).Insert(idx, tag); - idx = text.IndexOfAny(UppercaseTags, StringComparison.Ordinal); - } - return text; - } - - public static string FixInvalidItalicTags(string input) - { - var text = input; - - var preTags = string.Empty; - if (text.StartsWith("{\\", StringComparison.Ordinal)) - { - var endIdx = text.IndexOf('}', 2); - if (endIdx > 2) - { - preTags = text.Substring(0, endIdx + 1); - text = text.Remove(0, endIdx + 1); - } - } - - const string beginTag = ""; - const string endTag = ""; - - text = text.Replace("< i >", beginTag); - text = text.Replace("< i>", beginTag); - text = text.Replace("", beginTag); - text = text.Replace("< I >", beginTag); - text = text.Replace("< I>", beginTag); - text = text.Replace("", beginTag); - text = text.Replace("", endTag); - text = text.Replace("< /i>", endTag); - text = text.Replace("", endTag); - text = text.Replace("< /i >", endTag); - text = text.Replace("", endTag); - text = text.Replace("", endTag); - text = text.Replace("< / i>", endTag); - text = text.Replace("", endTag); - text = text.Replace("< / I >", endTag); - text = text.Replace("< /I>", endTag); - text = text.Replace("", endTag); - text = text.Replace("< /I >", endTag); - text = text.Replace("", endTag); - text = text.Replace("", endTag); - text = text.Replace("< / I>", endTag); - text = text.Replace("", beginTag); - text = text.Replace("", endTag); - - text = text.Replace(" ", "_@_"); - text = text.Replace(" _@_", "_@_"); - text = text.Replace(" _@_ ", "_@_"); - text = text.Replace("_@_", " "); - - if (text.Contains(beginTag)) - { - text = text.Replace("", endTag); - text = text.Replace("", endTag); - } - else - { - text = text.Replace("", string.Empty); - text = text.Replace("", string.Empty); - } - - text = text.Replace(beginTag + beginTag, beginTag); - text = text.Replace(endTag + endTag, endTag); - - int italicBeginTagCount = Utilities.CountTagInText(text, beginTag); - int italicEndTagCount = Utilities.CountTagInText(text, endTag); - int noOfLines = Utilities.GetNumberOfLines(text); - if (italicBeginTagCount + italicEndTagCount > 0) - { - if (italicBeginTagCount == 1 && italicEndTagCount == 1 && text.IndexOf(beginTag, StringComparison.Ordinal) > text.IndexOf(endTag, StringComparison.Ordinal)) - { - const string pattern = "___________@"; - text = text.Replace(beginTag, pattern); - text = text.Replace(endTag, beginTag); - text = text.Replace(pattern, endTag); - } - - if (italicBeginTagCount == 2 && italicEndTagCount == 0) - { - int firstIndex = text.IndexOf(beginTag, StringComparison.Ordinal); - int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); - int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag, StringComparison.Ordinal) + Environment.NewLine.Length; - if (noOfLines == 2 && lastIndex == lastIndexWithNewLine && firstIndex < 2) - { - text = text.Replace(Environment.NewLine, endTag + Environment.NewLine) + endTag; - } - else - { - text = text.Remove(lastIndex, beginTag.Length).Insert(lastIndex, endTag); - } - } - - if (italicBeginTagCount == 1 && italicEndTagCount == 2) - { - int firstIndex = text.IndexOf(endTag, StringComparison.Ordinal); - if (text.StartsWith("--", StringComparison.Ordinal) || - text.StartsWith("- -", StringComparison.Ordinal) || - text.StartsWith("- -", StringComparison.Ordinal) || - text.StartsWith("- -", StringComparison.Ordinal)) - { - text = text.Remove(0, 5); - } - else if (firstIndex == 0) - { - text = text.Remove(0, 4); - } - else - { - text = text.Substring(0, firstIndex) + text.Substring(firstIndex + endTag.Length); - } - } - - if (italicBeginTagCount == 2 && italicEndTagCount == 1) - { - var lines = text.SplitToLines(); - if (lines.Count == 2 && lines[0].StartsWith(beginTag, StringComparison.Ordinal) && lines[0].EndsWith(endTag, StringComparison.Ordinal) && - lines[1].StartsWith(beginTag, StringComparison.Ordinal)) - { - text = text.TrimEnd() + endTag; - } - else - { - int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); - if (text.Length > lastIndex + endTag.Length) - { - text = text.Substring(0, lastIndex) + text.Substring(lastIndex - 1 + endTag.Length); - } - else - { - text = text.Substring(0, lastIndex - 1) + endTag; - } - } - if (text.StartsWith(beginTag, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal) && text.Contains(endTag + Environment.NewLine + beginTag)) - { - text = text.Replace(endTag + Environment.NewLine + beginTag, Environment.NewLine); - } - } - - if (italicBeginTagCount == 1 && italicEndTagCount == 0) - { - int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag, StringComparison.Ordinal) + Environment.NewLine.Length; - int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); - - if (text.StartsWith(beginTag, StringComparison.Ordinal)) - { - text += endTag; - } - else if (noOfLines == 2 && lastIndex == lastIndexWithNewLine) - { - text += endTag; - } - else - { - text = text.Replace(beginTag, string.Empty); - } - } - - if (italicBeginTagCount == 0 && italicEndTagCount == 1) - { - var cleanText = RemoveOpenCloseTags(text, TagItalic, TagBold, TagUnderline, TagCyrillicI); - bool isFixed = false; - - // Foo. - if (text.EndsWith(endTag, StringComparison.Ordinal) && !cleanText.StartsWith('-') && !cleanText.Contains(Environment.NewLine + "-")) - { - text = beginTag + text; - isFixed = true; - } - - // - Foo | - Foo. - // - Bar. | - Foo. - if (!isFixed && Utilities.GetNumberOfLines(cleanText) == 2) - { - int newLineIndex = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - if (newLineIndex > 0) - { - var firstLine = text.Substring(0, newLineIndex).Trim(); - var secondLine = text.Substring(newLineIndex + 2).Trim(); - if (firstLine.EndsWith(endTag, StringComparison.Ordinal)) - { - firstLine = beginTag + firstLine; - isFixed = true; - } - if (secondLine.EndsWith(endTag, StringComparison.Ordinal)) - { - secondLine = beginTag + secondLine; - isFixed = true; - } - text = firstLine + Environment.NewLine + secondLine; - } - } - if (!isFixed) - { - text = text.Replace(endTag, string.Empty); - } - } - - // - foo. - // - bar. - if (italicBeginTagCount == 0 && italicEndTagCount == 2 && text.Contains(endTag + Environment.NewLine, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal)) - { - text = text.Replace(endTag, string.Empty); - text = beginTag + text + endTag; - } - - if (italicBeginTagCount == 0 && italicEndTagCount == 2 && text.StartsWith(endTag, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal)) - { - int firstIndex = text.IndexOf(endTag, StringComparison.Ordinal); - text = text.Remove(firstIndex, endTag.Length).Insert(firstIndex, beginTag); - } - - // Foo - // Bar - if (italicBeginTagCount == 2 && italicEndTagCount == 2 && noOfLines == 2) - { - int index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - if (index > 0 && text.Length > index + (beginTag.Length + endTag.Length)) - { - var firstLine = text.Substring(0, index).Trim(); - var secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); - - if (firstLine.Length > 10 && firstLine.StartsWith("- ", StringComparison.Ordinal) && firstLine.EndsWith(endTag, StringComparison.Ordinal)) - { - text = "- " + firstLine.Remove(0, 5) + Environment.NewLine + secondLine; - text = text.Replace("- ", "- "); - index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - firstLine = text.Substring(0, index).Trim(); - secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); - } - if (secondLine.Length > 10 && secondLine.StartsWith("- ", StringComparison.Ordinal) && secondLine.EndsWith(endTag, StringComparison.Ordinal)) - { - text = firstLine + Environment.NewLine + "- " + secondLine.Remove(0, 5); - text = text.Replace("- ", "- "); - index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - firstLine = text.Substring(0, index).Trim(); - secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); - } - - if (Utilities.StartsAndEndsWithTag(firstLine, beginTag, endTag) && Utilities.StartsAndEndsWithTag(secondLine, beginTag, endTag)) - { - text = text.Replace(beginTag, string.Empty).Replace(endTag, string.Empty).Trim(); - text = beginTag + text + endTag; - } - } - - //FALCONE: I didn't think
it was going to be you, - var colIdx = text.IndexOf(':'); - if (colIdx >= 0 && Utilities.CountTagInText(text, beginTag) + Utilities.CountTagInText(text, endTag) == 4 && text.Length > colIdx + 1 && !char.IsDigit(text[colIdx + 1])) - { - var firstLine = text.Substring(0, index); - var secondLine = text.Substring(index).TrimStart(); - - var secIdxCol = secondLine.IndexOf(':'); - if (secIdxCol < 0 || !Utilities.IsBetweenNumbers(secondLine, secIdxCol)) - { - var idx = firstLine.IndexOf(':'); - if (idx > 1) - { - var pre = text.Substring(0, idx + 1).TrimStart(); - text = text.Remove(0, idx + 1); - text = FixInvalidItalicTags(text).Trim(); - if (text.StartsWith(" ", StringComparison.OrdinalIgnoreCase)) - { - text = Utilities.RemoveSpaceBeforeAfterTag(text, beginTag); - } - - text = pre + " " + text; - } - } - } - } - - //- You think they're they gone? - //- That can't be. - if (italicBeginTagCount == 3 && italicEndTagCount == 1 && noOfLines == 2) - { - var newLineIdx = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - var firstLine = text.Substring(0, newLineIdx).Trim(); - var secondLine = text.Substring(newLineIdx).Trim(); - - if ((Utilities.StartsAndEndsWithTag(firstLine, beginTag, beginTag) && Utilities.StartsAndEndsWithTag(secondLine, beginTag, endTag)) || - (Utilities.StartsAndEndsWithTag(secondLine, beginTag, beginTag) && Utilities.StartsAndEndsWithTag(firstLine, beginTag, endTag))) - { - text = text.Replace(beginTag, string.Empty); - text = text.Replace(endTag, string.Empty); - text = text.Replace(" ", " ").Trim(); - text = beginTag + text + endTag; - } - } - - if (noOfLines == 3) - { - var lines = text.SplitToLines(); - if ((italicBeginTagCount == 3 && italicEndTagCount == 2) || (italicBeginTagCount == 2 && italicEndTagCount == 3)) - { - int numberOfItalics = 0; - foreach (var line in lines) - { - if (line.StartsWith(beginTag, StringComparison.Ordinal)) - { - numberOfItalics++; - } - - if (line.EndsWith(endTag, StringComparison.Ordinal)) - { - numberOfItalics++; - } - } - if (numberOfItalics == 5) - { // fix missing tag - text = "" + text.Replace("", string.Empty).Replace("", string.Empty) + ""; - } - } - } - - text = text.Replace("", string.Empty); - text = text.Replace(" ", string.Empty); - text = text.Replace(" ", string.Empty); - } - return preTags + text; - } - - public static string ToggleTag(string input, string tag) - { - var text = input; - if (text.IndexOf("<" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0 || - text.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0) - { - text = text.Replace("<" + tag + ">", string.Empty); - text = text.Replace("", string.Empty); - text = text.Replace("<" + tag.ToUpperInvariant() + ">", string.Empty); - text = text.Replace("", string.Empty); - } - else - { - int indexOfEndBracket = text.IndexOf('}'); - if (text.StartsWith("{\\", StringComparison.Ordinal) && indexOfEndBracket > 1 && indexOfEndBracket < 6) - { - text = $"{text.Substring(0, indexOfEndBracket + 1)}<{tag}>{text.Remove(0, indexOfEndBracket + 1)}"; - } - else - { - text = $"<{tag}>{text}"; - } - } - return text; - } - - } -} +using System; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace Nikse.SubtitleEdit.Core.Common +{ + /// + /// HTML specific string manipulations. + /// + public static class HtmlUtil + { + public static string TagItalic => "i"; + public static string TagBold => "b"; + public static string TagUnderline => "u"; + public static string TagFont => "font"; + public static string TagCyrillicI => "\u0456"; // Cyrillic Small Letter Byelorussian-Ukrainian i (http://graphemica.com/%D1%96) + + private static readonly Regex TagOpenRegex = new Regex(@"<\s*(?:/\s*)?(\w+)[^>]*>", RegexOptions.Compiled); + + /// + /// Remove all of the specified opening and closing tags from the source HTML string. + /// + /// The source string to search for specified HTML tags. + /// The HTML tags to remove. + /// A new string without the specified opening and closing tags. + public static string RemoveOpenCloseTags(string source, params string[] tags) + { + if (string.IsNullOrEmpty(source) || source.IndexOf('<') < 0) + { + return source; + } + + // This pattern matches these tag formats: + // + // < tag*> + // + // < /tag*> + // + // < / tag*> + return TagOpenRegex.Replace(source, m => tags.Contains(m.Groups[1].Value, StringComparer.OrdinalIgnoreCase) ? string.Empty : m.Value); + } + + /// + /// Converts a string to an HTML-encoded string using named character references. + /// + /// The string to encode. + /// An encoded string. + public static string EncodeNamed(string source) + { + if (string.IsNullOrEmpty(source)) + { + return string.Empty; + } + + var encoded = new StringBuilder(source.Length); + foreach (var ch in source) + { + switch (ch) + { + case '<': + encoded.Append("<"); + break; + case '>': + encoded.Append(">"); + break; + case '"': + encoded.Append("""); + break; + case '&': + encoded.Append("&"); + break; + case '\'': + encoded.Append("'"); + break; + case ' ': + encoded.Append(" "); + break; + case '–': + encoded.Append("–"); + break; + case '—': + encoded.Append("—"); + break; + case '¡': + encoded.Append("¡"); + break; + case '¿': + encoded.Append("¿"); + break; + case '“': + encoded.Append("“"); + break; + case '”': + encoded.Append("”"); + break; + case '‘': + encoded.Append("‘"); + break; + case '’': + encoded.Append("’"); + break; + case '«': + encoded.Append("«"); + break; + case '»': + encoded.Append("»"); + break; + case '¢': + encoded.Append("¢"); + break; + case '©': + encoded.Append("©"); + break; + case '÷': + encoded.Append("÷"); + break; + case 'µ': + encoded.Append("µ"); + break; + case '·': + encoded.Append("·"); + break; + case '¶': + encoded.Append("¶"); + break; + case '±': + encoded.Append("±"); + break; + case '€': + encoded.Append("€"); + break; + case '£': + encoded.Append("£"); + break; + case '®': + encoded.Append("®"); + break; + case '§': + encoded.Append("§"); + break; + case '™': + encoded.Append("™"); + break; + case '¥': + encoded.Append("¥"); + break; + case 'á': + encoded.Append("á"); + break; + case 'Á': + encoded.Append("Á"); + break; + case 'à': + encoded.Append("à"); + break; + case 'À': + encoded.Append("À"); + break; + case 'â': + encoded.Append("â"); + break; + case 'Â': + encoded.Append("Â"); + break; + case 'å': + encoded.Append("å"); + break; + case 'Å': + encoded.Append("Å"); + break; + case 'ã': + encoded.Append("ã"); + break; + case 'Ã': + encoded.Append("Ã"); + break; + case 'ä': + encoded.Append("ä"); + break; + case 'Ä': + encoded.Append("Ä"); + break; + case 'æ': + encoded.Append("æ"); + break; + case 'Æ': + encoded.Append("Æ"); + break; + case 'ç': + encoded.Append("ç"); + break; + case 'Ç': + encoded.Append("Ç"); + break; + case 'é': + encoded.Append("é"); + break; + case 'É': + encoded.Append("É"); + break; + case 'è': + encoded.Append("è"); + break; + case 'È': + encoded.Append("È"); + break; + case 'ê': + encoded.Append("ê"); + break; + case 'Ê': + encoded.Append("Ê"); + break; + case 'ë': + encoded.Append("ë"); + break; + case 'Ë': + encoded.Append("Ë"); + break; + case 'í': + encoded.Append("í"); + break; + case 'Í': + encoded.Append("Í"); + break; + case 'ì': + encoded.Append("ì"); + break; + case 'Ì': + encoded.Append("Ì"); + break; + case 'î': + encoded.Append("î"); + break; + case 'Î': + encoded.Append("Î"); + break; + case 'ï': + encoded.Append("ï"); + break; + case 'Ï': + encoded.Append("Ï"); + break; + case 'ñ': + encoded.Append("ñ"); + break; + case 'Ñ': + encoded.Append("Ñ"); + break; + case 'ó': + encoded.Append("ó"); + break; + case 'Ó': + encoded.Append("Ó"); + break; + case 'ò': + encoded.Append("ò"); + break; + case 'Ò': + encoded.Append("Ò"); + break; + case 'ô': + encoded.Append("ô"); + break; + case 'Ô': + encoded.Append("Ô"); + break; + case 'ø': + encoded.Append("ø"); + break; + case 'Ø': + encoded.Append("Ø"); + break; + case 'õ': + encoded.Append("õ"); + break; + case 'Õ': + encoded.Append("Õ"); + break; + case 'ö': + encoded.Append("ö"); + break; + case 'Ö': + encoded.Append("Ö"); + break; + case 'ß': + encoded.Append("ß"); + break; + case 'ú': + encoded.Append("ú"); + break; + case 'Ú': + encoded.Append("Ú"); + break; + case 'ù': + encoded.Append("ù"); + break; + case 'Ù': + encoded.Append("Ù"); + break; + case 'û': + encoded.Append("û"); + break; + case 'Û': + encoded.Append("Û"); + break; + case 'ü': + encoded.Append("ü"); + break; + case 'Ü': + encoded.Append("Ü"); + break; + case 'ÿ': + encoded.Append("ÿ"); + break; + default: + if (ch > 127) + { + encoded.Append("&#" + (int)ch + ";"); + } + else + { + encoded.Append(ch); + } + break; + } + } + return encoded.ToString(); + } + + /// + /// Converts a string to an HTML-encoded string using numeric character references. + /// + /// The string to encode. + /// An encoded string. + public static string EncodeNumeric(string source) + { + if (string.IsNullOrEmpty(source)) + { + return string.Empty; + } + + var encoded = new StringBuilder(source.Length); + foreach (var ch in source) + { + if (ch == ' ') + { + encoded.Append("&#"); + encoded.Append(160); //   + encoded.Append(';'); + } + else if (ch > 127 || ch == '<' || ch == '>' || ch == '"' || ch == '&' || ch == '\'') + { + encoded.Append("&#"); + encoded.Append((int)ch); + encoded.Append(';'); + } + else + { + encoded.Append(ch); + } + } + return encoded.ToString(); + } + + public static string RemoveHtmlTags(string input, bool alsoSsaTags = false) + { + if (input == null || input.Length < 3) + { + return input; + } + + var s = input; + if (alsoSsaTags) + { + s = Utilities.RemoveSsaTags(s); + } + + if (!s.Contains('<')) + { + return s; + } + + if (s.Contains("< ")) + { + s = FixInvalidItalicTags(s); + } + + if (s.IndexOf('x') > 0) + { + s = s.Replace("", string.Empty).Replace("", string.Empty); + } + + // v tag from WebVTT + var indexOfVTag = s.IndexOf("= 0) + { + var indexOfEndVTag = s.IndexOf('>', indexOfVTag); + if (indexOfEndVTag >= 0) + { + s = s.Remove(indexOfVTag, indexOfEndVTag - indexOfVTag + 1); + s = s.Replace("", string.Empty); + } + } + + return RemoveCommonHtmlTags(s); + } + + /// + /// Optimized method to remove common html tags, like , , , and + /// + /// Text to remove html tags from + /// Text stripped from common html tags + private static string RemoveCommonHtmlTags(string s) + { + char[] array = new char[s.Length]; + int arrayIndex = 0; + bool inside = false; + + for (int i = 0; i < s.Length; i++) + { + char ch = s[i]; + if (ch == '<' && i < s.Length - 2) + { + var next = s[i + 1]; + var nextNext = s[i + 2]; + if (nextNext == '>' && + (next == 'i' || // + next == 'I' || // + next == 'b' || // + next == 'B' || // + next == 'u' || // + next == 'U')) // + { + inside = true; + continue; + } + if (next == '/' && i < s.Length - 3) + { + var nextNextNext = s[i + 3]; + if (nextNextNext == '>' && + (nextNext == 'i' || // + nextNext == 'I' || // + nextNext == 'b' || // + nextNext == 'B' || // + nextNext == 'u' || // + nextNext == 'U')) // + { + inside = true; + continue; + } + } + if (nextNext == '/' && i < s.Length - 3) + { // some bad end tags sometimes seen + var nextNextNext = s[i + 3]; + if (nextNextNext == '>' && + (next == 'i' || // + next == 'I' || // + next == 'b' || // + next == 'B' || // + next == 'u' || // + next == 'U')) // + { + inside = true; + continue; + } + } + if ((next == 'f' || next == 'F') && s.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase)) // + { + inside = true; + continue; + } + } + if (inside && ch == '>') + { + inside = false; + continue; + } + if (!inside) + { + array[arrayIndex] = ch; + arrayIndex++; + } + } + return new string(array, 0, arrayIndex); + } + + public static bool IsUrl(string text) + { + if (string.IsNullOrWhiteSpace(text) || text.Length < 6 || !text.Contains('.') || text.Contains(' ')) + { + return false; + } + + var allLower = text.ToLowerInvariant(); + if (allLower.StartsWith("http://", StringComparison.Ordinal) || allLower.StartsWith("https://", StringComparison.Ordinal) || + allLower.StartsWith("www.", StringComparison.Ordinal) || allLower.EndsWith(".org", StringComparison.Ordinal) || + allLower.EndsWith(".com", StringComparison.Ordinal) || allLower.EndsWith(".net", StringComparison.Ordinal)) + { + return true; + } + + if (allLower.Contains(".org/") || allLower.Contains(".com/") || allLower.Contains(".net/")) + { + return true; + } + + return false; + } + + public static bool StartsWithUrl(string text) + { + if (string.IsNullOrWhiteSpace(text)) + { + return false; + } + + var arr = text.Trim().TrimEnd('.').TrimEnd().Split(); + if (arr.Length == 0) + { + return false; + } + + return IsUrl(arr[0]); + } + + private static readonly string[] UppercaseTags = { "", "", "", "", "", "", "" }; + + public static string FixUpperTags(string input) + { + if (string.IsNullOrEmpty(input) || !input.Contains('<')) + { + return input; + } + + var text = input; + var idx = text.IndexOfAny(UppercaseTags, StringComparison.Ordinal); + while (idx >= 0) + { + var endIdx = text.IndexOf('>', idx + 2); + if (endIdx < idx) + { + break; + } + + var tag = text.Substring(idx, endIdx - idx).ToLowerInvariant(); + text = text.Remove(idx, endIdx - idx).Insert(idx, tag); + idx = text.IndexOfAny(UppercaseTags, StringComparison.Ordinal); + } + return text; + } + + public static string FixInvalidItalicTags(string input) + { + var text = input; + + var preTags = string.Empty; + if (text.StartsWith("{\\", StringComparison.Ordinal)) + { + var endIdx = text.IndexOf('}', 2); + if (endIdx > 2) + { + preTags = text.Substring(0, endIdx + 1); + text = text.Remove(0, endIdx + 1); + } + } + + const string beginTag = ""; + const string endTag = ""; + + text = text.Replace("< i >", beginTag); + text = text.Replace("< i>", beginTag); + text = text.Replace("", beginTag); + text = text.Replace("< I >", beginTag); + text = text.Replace("< I>", beginTag); + text = text.Replace("", beginTag); + text = text.Replace("", endTag); + text = text.Replace("< /i>", endTag); + text = text.Replace("", endTag); + text = text.Replace("< /i >", endTag); + text = text.Replace("", endTag); + text = text.Replace("", endTag); + text = text.Replace("< / i>", endTag); + text = text.Replace("", endTag); + text = text.Replace("< / I >", endTag); + text = text.Replace("< /I>", endTag); + text = text.Replace("", endTag); + text = text.Replace("< /I >", endTag); + text = text.Replace("", endTag); + text = text.Replace("", endTag); + text = text.Replace("< / I>", endTag); + text = text.Replace("", beginTag); + text = text.Replace("", endTag); + + text = text.Replace(" ", "_@_"); + text = text.Replace(" _@_", "_@_"); + text = text.Replace(" _@_ ", "_@_"); + text = text.Replace("_@_", " "); + + if (text.Contains(beginTag)) + { + text = text.Replace("", endTag); + text = text.Replace("", endTag); + } + else + { + text = text.Replace("", string.Empty); + text = text.Replace("", string.Empty); + } + + text = text.Replace(beginTag + beginTag, beginTag); + text = text.Replace(endTag + endTag, endTag); + + int italicBeginTagCount = Utilities.CountTagInText(text, beginTag); + int italicEndTagCount = Utilities.CountTagInText(text, endTag); + int noOfLines = Utilities.GetNumberOfLines(text); + if (italicBeginTagCount + italicEndTagCount > 0) + { + if (italicBeginTagCount == 1 && italicEndTagCount == 1 && text.IndexOf(beginTag, StringComparison.Ordinal) > text.IndexOf(endTag, StringComparison.Ordinal)) + { + const string pattern = "___________@"; + text = text.Replace(beginTag, pattern); + text = text.Replace(endTag, beginTag); + text = text.Replace(pattern, endTag); + } + + if (italicBeginTagCount == 2 && italicEndTagCount == 0) + { + int firstIndex = text.IndexOf(beginTag, StringComparison.Ordinal); + int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); + int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag, StringComparison.Ordinal) + Environment.NewLine.Length; + if (noOfLines == 2 && lastIndex == lastIndexWithNewLine && firstIndex < 2) + { + text = text.Replace(Environment.NewLine, endTag + Environment.NewLine) + endTag; + } + else + { + text = text.Remove(lastIndex, beginTag.Length).Insert(lastIndex, endTag); + } + } + + if (italicBeginTagCount == 1 && italicEndTagCount == 2) + { + int firstIndex = text.IndexOf(endTag, StringComparison.Ordinal); + if (text.StartsWith("--", StringComparison.Ordinal) || + text.StartsWith("- -", StringComparison.Ordinal) || + text.StartsWith("- -", StringComparison.Ordinal) || + text.StartsWith("- -", StringComparison.Ordinal)) + { + text = text.Remove(0, 5); + } + else if (firstIndex == 0) + { + text = text.Remove(0, 4); + } + else + { + text = text.Substring(0, firstIndex) + text.Substring(firstIndex + endTag.Length); + } + } + + if (italicBeginTagCount == 2 && italicEndTagCount == 1) + { + var lines = text.SplitToLines(); + if (lines.Count == 2 && lines[0].StartsWith(beginTag, StringComparison.Ordinal) && lines[0].EndsWith(endTag, StringComparison.Ordinal) && + lines[1].StartsWith(beginTag, StringComparison.Ordinal)) + { + text = text.TrimEnd() + endTag; + } + else + { + int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); + if (text.Length > lastIndex + endTag.Length) + { + text = text.Substring(0, lastIndex) + text.Substring(lastIndex - 1 + endTag.Length); + } + else + { + text = text.Substring(0, lastIndex - 1) + endTag; + } + } + if (text.StartsWith(beginTag, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal) && text.Contains(endTag + Environment.NewLine + beginTag)) + { + text = text.Replace(endTag + Environment.NewLine + beginTag, Environment.NewLine); + } + } + + if (italicBeginTagCount == 1 && italicEndTagCount == 0) + { + int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag, StringComparison.Ordinal) + Environment.NewLine.Length; + int lastIndex = text.LastIndexOf(beginTag, StringComparison.Ordinal); + + if (text.StartsWith(beginTag, StringComparison.Ordinal)) + { + text += endTag; + } + else if (noOfLines == 2 && lastIndex == lastIndexWithNewLine) + { + text += endTag; + } + else + { + text = text.Replace(beginTag, string.Empty); + } + } + + if (italicBeginTagCount == 0 && italicEndTagCount == 1) + { + var cleanText = RemoveOpenCloseTags(text, TagItalic, TagBold, TagUnderline, TagCyrillicI); + bool isFixed = false; + + // Foo. + if (text.EndsWith(endTag, StringComparison.Ordinal) && !cleanText.StartsWith('-') && !cleanText.Contains(Environment.NewLine + "-")) + { + text = beginTag + text; + isFixed = true; + } + + // - Foo | - Foo. + // - Bar. | - Foo. + if (!isFixed && Utilities.GetNumberOfLines(cleanText) == 2) + { + int newLineIndex = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + if (newLineIndex > 0) + { + var firstLine = text.Substring(0, newLineIndex).Trim(); + var secondLine = text.Substring(newLineIndex + 2).Trim(); + if (firstLine.EndsWith(endTag, StringComparison.Ordinal)) + { + firstLine = beginTag + firstLine; + isFixed = true; + } + if (secondLine.EndsWith(endTag, StringComparison.Ordinal)) + { + secondLine = beginTag + secondLine; + isFixed = true; + } + text = firstLine + Environment.NewLine + secondLine; + } + } + if (!isFixed) + { + text = text.Replace(endTag, string.Empty); + } + } + + // - foo. + // - bar. + if (italicBeginTagCount == 0 && italicEndTagCount == 2 && text.Contains(endTag + Environment.NewLine, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal)) + { + text = text.Replace(endTag, string.Empty); + text = beginTag + text + endTag; + } + + if (italicBeginTagCount == 0 && italicEndTagCount == 2 && text.StartsWith(endTag, StringComparison.Ordinal) && text.EndsWith(endTag, StringComparison.Ordinal)) + { + int firstIndex = text.IndexOf(endTag, StringComparison.Ordinal); + text = text.Remove(firstIndex, endTag.Length).Insert(firstIndex, beginTag); + } + + // Foo + // Bar + if (italicBeginTagCount == 2 && italicEndTagCount == 2 && noOfLines == 2) + { + int index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + if (index > 0 && text.Length > index + (beginTag.Length + endTag.Length)) + { + var firstLine = text.Substring(0, index).Trim(); + var secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); + + if (firstLine.Length > 10 && firstLine.StartsWith("- ", StringComparison.Ordinal) && firstLine.EndsWith(endTag, StringComparison.Ordinal)) + { + text = "- " + firstLine.Remove(0, 5) + Environment.NewLine + secondLine; + text = text.Replace("- ", "- "); + index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + firstLine = text.Substring(0, index).Trim(); + secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); + } + if (secondLine.Length > 10 && secondLine.StartsWith("- ", StringComparison.Ordinal) && secondLine.EndsWith(endTag, StringComparison.Ordinal)) + { + text = firstLine + Environment.NewLine + "- " + secondLine.Remove(0, 5); + text = text.Replace("- ", "- "); + index = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + firstLine = text.Substring(0, index).Trim(); + secondLine = text.Substring(index + Environment.NewLine.Length).Trim(); + } + + if (Utilities.StartsAndEndsWithTag(firstLine, beginTag, endTag) && Utilities.StartsAndEndsWithTag(secondLine, beginTag, endTag)) + { + text = text.Replace(beginTag, string.Empty).Replace(endTag, string.Empty).Trim(); + text = beginTag + text + endTag; + } + } + + //FALCONE: I didn't think
it was going to be you, + var colIdx = text.IndexOf(':'); + if (colIdx >= 0 && Utilities.CountTagInText(text, beginTag) + Utilities.CountTagInText(text, endTag) == 4 && text.Length > colIdx + 1 && !char.IsDigit(text[colIdx + 1])) + { + var firstLine = text.Substring(0, index); + var secondLine = text.Substring(index).TrimStart(); + + var secIdxCol = secondLine.IndexOf(':'); + if (secIdxCol < 0 || !Utilities.IsBetweenNumbers(secondLine, secIdxCol)) + { + var idx = firstLine.IndexOf(':'); + if (idx > 1) + { + var pre = text.Substring(0, idx + 1).TrimStart(); + text = text.Remove(0, idx + 1); + text = FixInvalidItalicTags(text).Trim(); + if (text.StartsWith(" ", StringComparison.OrdinalIgnoreCase)) + { + text = Utilities.RemoveSpaceBeforeAfterTag(text, beginTag); + } + + text = pre + " " + text; + } + } + } + } + + //- You think they're they gone? + //- That can't be. + if (italicBeginTagCount == 3 && italicEndTagCount == 1 && noOfLines == 2) + { + var newLineIdx = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + var firstLine = text.Substring(0, newLineIdx).Trim(); + var secondLine = text.Substring(newLineIdx).Trim(); + + if ((Utilities.StartsAndEndsWithTag(firstLine, beginTag, beginTag) && Utilities.StartsAndEndsWithTag(secondLine, beginTag, endTag)) || + (Utilities.StartsAndEndsWithTag(secondLine, beginTag, beginTag) && Utilities.StartsAndEndsWithTag(firstLine, beginTag, endTag))) + { + text = text.Replace(beginTag, string.Empty); + text = text.Replace(endTag, string.Empty); + text = text.Replace(" ", " ").Trim(); + text = beginTag + text + endTag; + } + } + + if (noOfLines == 3) + { + var lines = text.SplitToLines(); + if ((italicBeginTagCount == 3 && italicEndTagCount == 2) || (italicBeginTagCount == 2 && italicEndTagCount == 3)) + { + int numberOfItalics = 0; + foreach (var line in lines) + { + if (line.StartsWith(beginTag, StringComparison.Ordinal)) + { + numberOfItalics++; + } + + if (line.EndsWith(endTag, StringComparison.Ordinal)) + { + numberOfItalics++; + } + } + if (numberOfItalics == 5) + { // fix missing tag + text = "" + text.Replace("", string.Empty).Replace("", string.Empty) + ""; + } + } + } + + text = text.Replace("", string.Empty); + text = text.Replace(" ", string.Empty); + text = text.Replace(" ", string.Empty); + } + return preTags + text; + } + + public static string ToggleTag(string input, string tag) + { + var text = input; + if (text.IndexOf("<" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0 || + text.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0) + { + text = text.Replace("<" + tag + ">", string.Empty); + text = text.Replace("", string.Empty); + text = text.Replace("<" + tag.ToUpperInvariant() + ">", string.Empty); + text = text.Replace("", string.Empty); + } + else + { + int indexOfEndBracket = text.IndexOf('}'); + if (text.StartsWith("{\\", StringComparison.Ordinal) && indexOfEndBracket > 1 && indexOfEndBracket < 6) + { + text = $"{text.Substring(0, indexOfEndBracket + 1)}<{tag}>{text.Remove(0, indexOfEndBracket + 1)}"; + } + else + { + text = $"<{tag}>{text}"; + } + } + return text; + } + + } +} diff --git a/libse/IfoParser.cs b/libse/Common/IfoParser.cs similarity index 99% rename from libse/IfoParser.cs rename to libse/Common/IfoParser.cs index c70daa5ff..f6e5c90ec 100644 --- a/libse/IfoParser.cs +++ b/libse/Common/IfoParser.cs @@ -4,7 +4,7 @@ using System.Drawing; using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class IfoParser : IDisposable { diff --git a/libse/ImageSplitterItem.cs b/libse/Common/ImageSplitterItem.cs similarity index 95% rename from libse/ImageSplitterItem.cs rename to libse/Common/ImageSplitterItem.cs index eff750ae2..1b329e57b 100644 --- a/libse/ImageSplitterItem.cs +++ b/libse/Common/ImageSplitterItem.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class ImageSplitterItem { diff --git a/libse/Iso639Dash2LanguageCode.cs b/libse/Common/Iso639Dash2LanguageCode.cs similarity index 99% rename from libse/Iso639Dash2LanguageCode.cs rename to libse/Common/Iso639Dash2LanguageCode.cs index 33c154f79..b6283341e 100644 --- a/libse/Iso639Dash2LanguageCode.cs +++ b/libse/Common/Iso639Dash2LanguageCode.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { ///
/// Language codes according to ISO 639.2 https://www.loc.gov/standards/iso639-2/php/code_list.php diff --git a/libse/IsoCountryCodes.cs b/libse/Common/IsoCountryCodes.cs similarity index 99% rename from libse/IsoCountryCodes.cs rename to libse/Common/IsoCountryCodes.cs index 1e08125fb..b3ceb2efe 100644 --- a/libse/IsoCountryCodes.cs +++ b/libse/Common/IsoCountryCodes.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class IsoCountryCodes { diff --git a/libse/LanguageAutoDetect.cs b/libse/Common/LanguageAutoDetect.cs similarity index 97% rename from libse/LanguageAutoDetect.cs rename to libse/Common/LanguageAutoDetect.cs index 72d887961..583643cc5 100644 --- a/libse/LanguageAutoDetect.cs +++ b/libse/Common/LanguageAutoDetect.cs @@ -1,1490 +1,1490 @@ -using Nikse.SubtitleEdit.Core.DetectEncoding; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; - -namespace Nikse.SubtitleEdit.Core -{ - public static class LanguageAutoDetect - { - - private static int GetCount(string text, params string[] words) - { - var options = RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture; - var pattern = "\\b(" + string.Join("|", words) + ")\\b"; - return Regex.Matches(text, pattern, options).Count; - } - - private static int GetCountContains(string text, params string[] words) - { - int count = 0; - foreach (var w in words) - { - var regEx = new Regex(w); - count += regEx.Matches(text).Count; - } - return count; - } - - public static string AutoDetectGoogleLanguage(Encoding encoding) - { - switch (encoding.CodePage) - { - case 860: - return "pt"; // Portuguese - case 28599: - case 1254: - return "tr"; // Turkish - case 28598: - case 1255: - return "he"; // Hebrew - case 28596: - case 1256: - return "ar"; // Arabic - case 1258: - return "vi"; // Vietnamese - case 949: - case 1361: - case 20949: - case 51949: - case 50225: - return "ko"; // Korean - case 1253: - case 28597: - return "el"; // Greek - case 50220: - case 50221: - case 50222: - case 51932: - case 20932: - case 10001: - return "ja"; // Japanese - case 20000: - case 20002: - case 20936: - case 950: - case 52936: - case 54936: - case 51936: - return "zh"; // Chinese - default: - return null; - } - } - - private static readonly string[] AutoDetectWordsEnglish = - { - "we", "are", "and", "your", "what", "[TW]hat's", "You're", "(any|some|every)thing", "money", "because", "human", "because", "welcome", "really", "something", "confusing", "about", "know", "people", "other", "which", "would", - "these", "could" - }; - - private static readonly string[] AutoDetectWordsDanish = - { - "vi", "han", "og", "jeg", "var", "men", "gider", "bliver", "virkelig", "kommer", "tilbage", "Hej", "længere", "gjorde", "dig", "havde", "[Uu]ndskyld", "arbejder", "vidste", "troede", "stadigvæk", "[Mm]åske", "første", "gik", - "fortælle", "begyndt", "spørgsmål", "pludselig" - }; - - private static readonly string[] AutoDetectWordsNorwegian = - { - "vi", "og", "jeg", "var", "men", "igjen", "Nei", "Hei", "noen", "gjøre", "kanskje", "[Tt]renger", "tenker", "skjer", "møte", "veldig", "takk", "penger", "konsept", "hjelp", "forsvunnet", - "skutt", "sterkt", "minste", "første", "fortsette", "inneholder", "gikk", "fortelle", "begynt", "spørsmål", "plutselig" - }; - - private static readonly string[] AutoDetectWordsSwedish = - { - "vi", "är", "och", "Jag", "inte", "för", "måste", "Öppna", "Förlåt", "nånting", "ingenting", "jävla", "Varför", "[Ss]nälla", "fattar", "själv", "säger", "öppna", "jävligt", "dörren", "göra", "behöver", "tillbaka", "Varför", - "träffa", "kanske", "säga", "hände", "honom", "hennes", "veckor", "tänker", "själv", "pratar", "mycket", "mamma", "dödade", "Ursäkta", "säger", "senaste", "håller", "förstår", "veckan", "varför", "tycker", "första", "gick", - "berätta", "börjat", "människor", "frågor", "fråga", "plötsligt", "skämt" - }; - - private static readonly string[] AutoDetectWordsSpanish = - { - "qué", "eso", "muy", "estoy?", "ahora", "hay", "tú", "así", "cuando", "cómo", "él", "sólo", "quiero", "gracias", "puedo", "bueno", "soy", "hacer", "fue", "eres", "usted", "tienes", "puede", "[Ss]eñor", "ese", "voy", "quién", - "creo", "hola", "dónde", "sus", "verdad", "quieres", "mucho", "entonces", "estaba", "tiempo", "esa", "mejor", "hombre", "hace", "dios", "también", "están", "siempre", "hasta", "ahí", "siento", - "puedes", "Dónde", "está", "estoy", "Vámonos", "vistiendo", "Caliente", "chimenea" - }; - - private static readonly string[] AutoDetectWordsItalian = - { - "Buongiorno", "Grazie", "Cosa", "quest[ao]", "quell[ao]", "tutt[io]", "[st]uo", "qualcosa", "ancora", "sono", "bene", "più", "andare", "essere", "venire", "abbiamo", "andiamo", "ragazzi", "signore", "numero", "giorno", - "propriamente", "sensitivo", "negativo", "davvero", "faccio", "voglio", "vuole", "perché", "allora", "niente", "anche", "stai", "detto", "fatto", "hanno", "molto", "stato", "siamo", "così", "vuoi", "noi", "vero", "loro", - "fare", "gli", "due" - }; - - private static readonly string[] AutoDetectWordsFrench = - { - "pas", "[vn]ous", "ça", "une", "pour", "[mt]oi", "dans", "elle", "tout", "plus", "[bmt]on", "suis", "avec", "oui", "fait", "ils", "être", "faire", "comme", "était", "quoi", "ici", "veux", - "vouloir", "quelque", "pouvoir", "rien", "dit", "où", "votre", "pourquoi", "sont", "cette", "peux", "alors", "comment", "avez", "très", "même", "merci", "ont", "aussi", "chose", "voir", - "allez", "tous", "ces", "deux", "avoir", " pouvoir", "même", "œil", "sœur", - }; - - private static readonly string[] AutoDetectWordsPortuguese = - { - "[Nn]ão", "[Ee]ntão", "uma", "ele", "bem", "isso", "você", "sim", "meu", "muito", "estou", "ela", "fazer", "tem", "já", "minha", "tudo", "só", "tenho", "agora", "vou", "seu", "quem", "há", - "lhe", "quero", "nós", "são", "ter", "coisa", "dizer", "eles", "pode", "bom", "mesmo", "mim", "estava", "assim", "estão", "até", "quer", "temos", "acho", "obrigado", "também", "tens", - "deus", "quê", "ainda", "noite", "conversar", "Desculpe", "verdade" - }; - - private static readonly string[] AutoDetectWordsGerman = - { - "und", "auch", "sich", "bin", "hast", "möchte", "müssen", "weiß", "[Vv]ielleicht", "Warum", "jetzt", "Verdammt", "bist", "Darum", "sitzt", "Setz", "Das ist", "Du bist", "nicht", "Scheiße", - "Nein", "für", "gesagt", "zwei", "richtig" - }; - - private static readonly string[] AutoDetectWordsDutch = - { - "van", "een", "[Hh]et", "m(ij|ij)", "z(ij|ij)n", "hebben", "alleen", "Waarom" - }; - - private static readonly string[] AutoDetectWordsPolish = - { - "Czy", "ale", "ty", "siê", "się", "jest", "mnie", "Proszę", "życie", "statku", "życia", "Czyli", "Wszystko", "Wiem", "Przepraszam", "dobrze", "chciałam", "Dziękuję", "Żołnierzyk", "Łowca", "został", "stało", "dolarów", - "wiadomości", "Dobrze", "będzie", "Dzień", "przyszłość", "Uratowałaś", "Cześć", "Trzeba", "zginąć", "walczyć", "ludzkość", "maszyny", "Jeszcze", "okrążenie", "wyścigu", "porządku", "detektywie", - "przebieralni", "który" - }; - - private static readonly string[] AutoDetectWordsGreek = - { - "μου", "[Εε]ίναι", "αυτό", "Τόμπυ", "καλά", "Ενταξει", "πρεπει", "Λοιπον", "τιποτα", "ξερεις" - }; - - private static readonly string[] AutoDetectWordsRussian = - { - "[Ээч]?то", "[Нн]е", "[ТтМмбв]ы", "Да", "[Нн]ет", "Он", "его", "тебя", "как", "меня", "Но", "всё", "мне", "вас", "знаю", "ещё", "за", "нас", "чтобы", "был" - }; - - private static readonly string[] AutoDetectWordsBulgarian = - { - "[Кк]акво", "тук", "може", "Как", "Да", "Ваше", "нещо", "беше", "Добре", "трябва", "става", "Джоузи", "Защо", "дяволите", "Сиянието", "Трябва", "години", "Стивън", "Благодаря" - }; - - private static readonly string[] AutoDetectWordsUkrainian = - { - "[Нн]і", "[Пп]ривіт", "[Цц]е", "[Щщ]о", "[Йй]ого", "[Вв]ін", "[Яя]к", "[Гг]аразд", "[Яя]кщо", "[Мм]ені", "[Тт]вій", "[Її]х", "[Вв]ітаю", "[Дд]якую", "вже", "було", "був", "цього", - "нічого", "немає", "може", "знову", "бо", "щось", "щоб", "цим", "тобі", "хотів", "твоїх", "мої", "мій", "має", "їм", "йому", "дуже" - }; - - private static readonly string[] AutoDetectWordsAlbanian = - { - "është", "këtë", "Unë", "mirë", "shumë", "Çfarë", "çfarë", "duhet", "Është", "mbrapa", "Faleminderit", "vërtet", "diçka", "gjithashtu", "gjithe", "eshte", "shume", "vetem", "tënde", - "çmendur", "vullnetin", "vdekur" - }; - - private static readonly string[] AutoDetectWordsArabic = - { - "من", "هل", "لا", "في", "لقد", "ما", "ماذا", "يا", "هذا", "إلى", "على", "أنا", "أنت", "حسناً", "أيها", "كان", "كيف", "يكون", "هذه", "هذان", "الذي", "التي", "الذين", "هناك", "هنالك" - }; - - private static readonly string[] AutoDetectWordsFarsi = - { - "این", "برای", "اون", "سیب", "کال", "رو", "خيلي", "آره", "بود", "اون", "نيست", "اينجا", "باشه", "سلام", "ميکني", "داري", "چيزي", "چرا", "خوبه" - }; - - private static readonly string[] AutoDetectWordsHebrew = - { - "אתה", "אולי", "הוא", "בסדר", "יודע", "טוב" - }; - - private static readonly string[] AutoDetectWordsVietnamese = - { - "không", "[Tt]ôi", "anh", "đó", "ông", "tôi", "phải", "người", "được", "Cậu", "chúng", "chuyện", "muốn", "những", "nhiều" - }; - - private static readonly string[] AutoDetectWordsHungarian = - { - "hogy", "lesz", "tudom", "vagy", "mondtam", "még", "vagyok", "csak", "Hát", "felesége", "Csak", "utána", "jött", - "Miért", "Akkor", "magát", "holnap", "Tudja", "Köszönöm", "élet", "Örvendek", "vissza", "hogy", "tudom", "Rendben", - "Istenem", "Gyerünk", "értem", "vagyok", "hiszem", "történt", "rendben", "olyan", "őket", "vannak", "mindig", "Kérlek", - "Gyere", "kicsim", "vagyunk" - }; - - private static readonly string[] AutoDetectWordsTurkish = - { - "için", "Tamam", "Hayır", "benim", "daha", "deðil", "önce", "lazým", "çalýþýyor", "Aldırma", - "burada", "efendim", "şey", "çok", "Çok", "için", "Merhaba", "Evet", "kötü", "musun", - "güzel", "çünkü", "büyük", "Bebeğim", "olduğunu", "istiyorum", "değilsin", "bilmiyorum", - "otursana", "Selam", "Tabii","konuda","istiyor","Tetekkürler", "istemiyorum", "Gerçekte" - }; - - private static readonly string[] AutoDetectWordsCroatianAndSerbian = - { - "sam", "ali", "nije", "Nije", "samo", "ovo", "kako", "dobro", "Dobro", "sve", "tako", "će", "mogu", "ću", "zašto", "nešto", "za", "misliš", "možeš", "možemo", "ništa", "znaš", "ćemo", "znam" - }; - private static readonly string[] AutoDetectWordsCroatian = - { - "što", "ovdje", "gdje", "kamo", "tko", "prije", "uvijek", "vrijeme", "vidjeti", "netko", "vidio", "nitko", "bok", "lijepo", "oprosti", "htio", "mjesto", "oprostite", "čovjek", "dolje", "čovječe", "dvije", "dijete", "dio", - "poslije", "događa", "vjerovati", "vjerojatno", "vjerujem", "točno", "razumijem", "vidjela", "cijeli", "svijet", "obitelj", "volio", "sretan", "dovraga", "svijetu", "htjela", "vidjeli", "negdje", "želio", "ponovno", - "djevojka", "umrijeti", "čovjeka", "mjesta", "djeca", "osjećam", "uopće", "djecu", "naprijed", "obitelji", "doista", "mjestu", "lijepa", "također", "riječ", "tijelo" - }; - private static readonly string[] AutoDetectWordsSerbian = - { - "šta", "ovde", "gde", "ko", "pre", "uvek", "vreme", "videti", "neko", "video", "niko", "ćao", "lepo", "izvini", "hteo", "mesto", "izvinite", "čovek", "dole", "čoveče", "dve", "dete", "deo", "posle", "dešava", "verovati", - "verovatno", "verujem", "tačno", "razumem", "videla", "ceo", "svet", "porodica", "voleo", "srećan", "dođavola", "svetu", "htela", "videli", "negde", "želeo", "ponovo", "devojka", "umreti", "čoveka", "mesta", "deca", "osećam", - "uopšte", "decu", "napred", "porodicu", "zaista", "mestu", "lepa", "takođe", "reč", "telo" - }; - - private static readonly string[] AutoDetectWordsSerbianCyrillic = - { - "сам", "али", "није", "само", "ово", "како", "добро", "све", "тако", "ће", "могу", "ћу", "зашто", "нешто", "за", "шта", "овде", "бити", "чини", "учениче", "побегне", "остати", "Један", "Назад", "Молим" - }; - - private static readonly string[] AutoDetectWordsIndonesian = - { - "yang", "tahu", "bisa", "akan", "tahun", "tapi", "dengan", "untuk", "rumah", "dalam", "sudah", "bertemu" - }; - - private static readonly string[] AutoDetectWordsThai = - { - "ผู้กอง", "โรเบิร์ต", "วิตตอเรีย", "เข้าใจมั้ย", "คุณตำรวจ", "ราเชล", "เพื่อน", "เลดดิส", "พระเจ้า", "เท็ดดี้", "หัวหน้า", "แอนดรูว์", "ขอโทษครับ", "ขอบคุณ", "วาร์กัส", "ทุกคน", - "ไม่เอาน่า", "อิซานะ", "มจริง", "รับทราบ", "พอคะ", "ครับ", "อยาตขาป", "ยินดีทีดรูจักคะ", "ปลอดภัยดีนะ", "ทุกคน", "ตอนที", "ขอบคุณครับ", "ขอทษนะคะ", "ขอทษคะ" - }; - - private static readonly string[] AutoDetectWordsKorean = - { - "사루", "거야", "엄마", "그리고", "아니야", "하지만", "말이야", "그들은", "우리가", "엄마가", "괜찮아", "일어나", "잘했어", "뭐라고", "있어요", - "있어요", "보여줘", "괜찮아요", "목소릴", "기억이", "저주를", "좋아요" - }; - - private static readonly string[] AutoDetectWordsMacedonian = - { - "господине", "Нема", "господине", "работа", "вселената", "Може", "треба", "Треба", "слетување", "капсулата", "време", "Френдшип", "Прием", "Добро", "пресметки", "Благодарам", "нешто", "Благодарам", "орбитата", "инженер", - "Харисон", "Фала", "тоалет", "орбита", "знаеме", "Супервизор", "жени", "Добра", "требаат", "што", "дeкa", "eшe", "кучe", "Руиз", "кучeто", "кучињa", "Бјути", "имa", "многу", "кучињaтa", "AДЗЖ", "Животни", "моЖe", "мaчe", - "мecто", "имaмe", "мaчињa", "пpвото", "пpaвaт", "нeшто", "колку" - }; - - private static readonly string[] AutoDetectWordsFinnish = - { - "että", "kuin", "minä", "mitään", "Mutta", "siitä", "täällä", "poika", "Kiitos", "enää", "vielä", "tässä", "sulkeutuu", "Soitetaan", "Soita", "Onnistui", "Mitä", "Etuovi", "tippiä", "antaa", "Onko", "Hidasta", "tuntia", - "tilata", "päästä", "palolaitokselle", "hätänumeroon", "aikaa", "Tämä", "Sinulla", "Palauttaa", "Kiitos", "Arvostele", "Älä", "toimi", "televisiota", "takaisin", "reitin", "pitäisi", "palauttaa", "nopeamman", "mitään", - "meidät", "maksaa", "kuullut", "kaikki", "jälkeen", "ihmiset", "hätäkeskukseen", "hiljaa", "haluat", "enää", "enemmän", "auttaa", "Tunkeilijahälytys", "Pysähdy", "Princen", "Käänny", "Kyllä", "Kiva", "Haluatko", "Haluan" - }; - - private static readonly string[] AutoDetectWordsRomanian = - { - "pentru", "oamenii", "decât", "[Vv]reau", "[Ss]înt", "Asteaptã", "Fãrã", "aici", "domnule", "trãiascã", "niciodatã", "înseamnã", "vorbesti", "fãcut", "spune", "făcut", "când", "aici", "Asta", "văzut", "dacă", "câteva", - "amândoi", "Când", "totuși", "mașină", "aceeași", "întâmplat", "niște", "ziua", "noastră", "cunoscut", "decat", "[Tt]rebuie", "[Aa]cum", "Poate", "vrea", "soare", "nevoie", "daca", "echilibrul", "vorbesti", "zeului", - "atunci", "memoria", "soarele" - }; - - // Czech and Slovak languages have many common words (especially when non flexed) - private static readonly string[] AutoDetectWordsCzechAndSlovak = - { - "[Oo]n[ao]?", "[Jj]?si", "[Aa]le", "[Tt]en(to)?", "[Rr]ok", "[Tt]ak", "[Aa]by", "[Tt]am", "[Jj]ed(en|na|no)", "[Nn]ež", "[Aa]ni", "[Bb]ez", "[Dd]obr[ýáé]", "[Vv]šak", "[Cc]el[ýáé]", "[Nn]ov[ýáé]", "[Dd]ruh[ýáé]", "jsem", - "poøádku", "Pojïme", "háje", "není", "Jdeme", "všecko", "jsme", "Prosím", "Vezmi", "když", "Takže", "Dìkuji", "prechádzku", "všetko", "Poïme", "potom", "Takže", "Neviem", "budúcnosti", "trochu" - }; - // differences between Czech and Slovak languages / Czech words / please keep the words aligned between these languages for better comparison - private static readonly string[] AutoDetectWordsCzech = - { - ".*[Řř].*", ".*[ůě].*", "[Bb]ýt", "[Jj]sem", "[Jj]si", "[Jj]á", "[Mm]ít", "[Aa]no", "[Nn]e", "[Nn]ic", "[Dd]en", "[Jj]en", "[Cc]o", "[Jj]ak[o]?", "[Nn]ebo", "[Pp]ři", "[Pp]ro", "[Pp]řed.*", "[Jj](ít|du|de|deme|dou)", - "[Mm]ezi", "[Jj]eště", "[Čč]lověk", "[Pp]odle", "[Dd]alší" - }; - // differences between Czech and Slovak languages / Slovak words / please keep the words aligned between these languages for better comparison - private static readonly string[] AutoDetectWordsSlovak = - { - ".*[Ôô].*", ".*[ä].*", "[Bb]yť", "[Ss]om", "[Ss]i", "[Jj]a", "[Mm]ať", "[Áá]no", "[Nn]ie", "[Nn]ič", "[Dd]eň", "[Ll]en", "[Čč]o", "[Aa]ko", "[Aa]?[Ll]ebo", "[Pp]ri", "[Pp]re", "[Pp]red.*", "([Íí]sť|[Ii](dem|de|deme|dú))", - "[Mm]edzi", "[Ee]šte", "[Čč]lovek", "[Pp]odľa", "[Ďď]alš(í|ia|ie)" - }; - - private static readonly string[] AutoDetectWordsLatvian = - { - "Paldies", "neesmu ", "nezinu", "viòð", "viņš", "viņu", "kungs", "esmu", "Viņš", "Velns", "viņa", "dievs", "Pagaidi", "varonis", "agrāk", "varbūt" - }; - - private static readonly string[] AutoDetectWordsLithuanian = - { - "tavęs", "veidai", "apie", "jums", "Veidai", "Kaip", "kaip", "reikia", "Šūdas", "frensis", "Ačiū", "vilsonai", "Palauk", "Veidas", "viskas", "Tikrai", "manęs", "Tačiau", "žmogau", "Flagai", "Prašau", "Džiune", "Nakties", - "šviesybe", "Supratau", "komanda", "reikia", "apie", "Kodėl", "mūsų", "Ačiū", "vyksta" - }; - - private static readonly string[] AutoDetectWordsHindi = - { - "एक", "और", "को", "का", "यह", "सकते", "लिए", "करने", "भारतीय", "सकता", "भारत", "तकनीक", "कंप्यूटिंग", "उपकरण", "भाषाओं", "भाषा", "कंप्यूटर", "आप", "आपको", "अपने", "लेकिन", "करना", "सकता", "बहुत", "चाहते", "अच्छा", "वास्तव", - "लगता", "इसलिए", "शेल्डन", "धन्यवाद।", "तरह", "करता", "चाहता", "कोशिश", "करते", "किया", "अजीब", "सिर्फ", "शुरू" - }; - - private static readonly string[] AutoDetectWordsUrdu = - { - "نہیں", "ایک", "ہیں", "کیا", "اور", "لئے", "ٹھیک", "ہوں", "مجھے", "تھا", "کرنے", "صرف", "ارے", "یہاں", "بہت", "لیکن", "ساتھ", "اپنے", "اچھا", "میرے", "چاہتا", "انہوں", "تمہیں" - }; - - private static readonly string[] AutoDetectWordsSinhalese = - { - "කරන්න", "නැහැ", "කියල", "මගේ", "එයා", "ඔයාට", "කැප්ටන්", "ඔයාගේ", "පුළුවන්", "හැම", "වගේ", "වෙන්න", "ඕනා", "නෙමේ", "තියෙන්නේ", "වගේම", "දන්නවා", "වෙනවා", "එහෙම", "හිතන්නේ", "කියලා", "කරනවා", "යන්න", "දෙයක්", "තියනවා", - "හොදයි", "දෙන්න", "එකක්", "මොනාද", "කියන්න", "කරන්නේ", "වෙන්නේ", "රොජර්ස්", "දාන්න", "කරලා", "ඔයාව", "වෙලා", "කොහොමද", "කිවුවා", "ඔබට", "රාවුල්" - }; - - private static string AutoDetectGoogleLanguage(string text, int bestCount) - { - int count = GetCount(text, AutoDetectWordsEnglish); - if (count > bestCount) - { - int dutchCount = GetCount(text, AutoDetectWordsDutch); - if (dutchCount < count) - { - return "en"; - } - } - - count = GetCount(text, AutoDetectWordsDanish); - if (count > bestCount) - { - int norwegianCount = GetCount(text, "ut", "deg", "meg", "merkelig", "mye", "spørre"); - int dutchCount = GetCount(text, AutoDetectWordsDutch); - int swedishCount = GetCount(text, AutoDetectWordsSwedish); - if (norwegianCount < 2 && dutchCount < count && swedishCount < count) - { - return "da"; - } - } - - count = GetCount(text, AutoDetectWordsNorwegian); - if (count > bestCount) - { - int danishCount = GetCount(text, "siger", "dig", "mig", "mærkelig", "tilbage", "spørge"); - int dutchCount = GetCount(text, AutoDetectWordsDutch); - int swedishCount = GetCount(text, AutoDetectWordsSwedish); - if (danishCount < 2 && dutchCount < count && swedishCount < count) - { - return "no"; - } - } - - count = GetCount(text, AutoDetectWordsSwedish); - if (count > bestCount) - { - return "sv"; - } - - count = GetCount(text, AutoDetectWordsSpanish); - if (count > bestCount) - { - int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not spanish words - int portugueseCount = GetCount(text, "[NnCc]ão", "Então", "h?ouve", "pessoal", "rapariga", "tivesse", "fizeste", - "jantar", "conheço", "atenção", "foste", "milhões", "devias", "ganhar", "raios"); // not spanish words - if (frenchCount < 2 && portugueseCount < 2) - { - return "es"; - } - } - - count = GetCount(text, AutoDetectWordsItalian); - if (count > bestCount) - { - int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not italian words - if (frenchCount < 2) - { - return "it"; - } - } - - count = GetCount(text, AutoDetectWordsFrench); - if (count > bestCount) - { - int romanianCount = GetCount(text, "[Vv]reau", "[Ss]înt", "[Aa]cum", "pentru", "domnule", "aici"); - if (romanianCount < 5) - { - return "fr"; - } - } - - count = GetCount(text, AutoDetectWordsPortuguese); - if (count > bestCount) - { - return "pt"; // Portuguese - } - - count = GetCount(text, AutoDetectWordsGerman); - if (count > bestCount) - { - return "de"; - } - - count = GetCount(text, AutoDetectWordsDutch); - if (count > bestCount) - { - return "nl"; - } - - count = GetCount(text, AutoDetectWordsPolish); - if (count > bestCount) - { - return "pl"; - } - - count = GetCount(text, AutoDetectWordsGreek); - if (count > bestCount) - { - return "el"; // Greek - } - - count = GetCount(text, AutoDetectWordsRussian); - if (count > bestCount) - { - var bulgarianCount = GetCount(text, AutoDetectWordsBulgarian); - if (bulgarianCount > count) - { - return "bg"; // Bulgarian - } - - var ukranianCount = GetCount(text, AutoDetectWordsUkrainian); - if (ukranianCount > count) - { - return "uk"; // Ukrainian - } - - return "ru"; // Russian - } - - count = GetCount(text, AutoDetectWordsUkrainian); - if (count > bestCount) - { - return "uk"; // Ukrainian - } - - count = GetCount(text, AutoDetectWordsBulgarian); - if (count > bestCount) - { - return "bg"; // Bulgarian - } - - count = GetCount(text, AutoDetectWordsAlbanian); - if (count > bestCount) - { - return "sq"; // Albanian - } - - count = GetCount(text, AutoDetectWordsArabic); - if (count > bestCount) - { - int hebrewCount = GetCount(text, AutoDetectWordsHebrew); - int farsiCount = GetCount(text, AutoDetectWordsFarsi); - if (hebrewCount < count && farsiCount < count) - { - return "ar"; // Arabic - } - } - - count = GetCount(text, AutoDetectWordsHebrew); - if (count > bestCount) - { - return "he"; // Hebrew - } - - count = GetCount(text, AutoDetectWordsFarsi); - if (count > bestCount) - { - return "fa"; // Farsi (Persian) - } - - count = GetCount(text, AutoDetectWordsCroatianAndSerbian); - if (count > bestCount) - { - int croatianCount = GetCount(text, AutoDetectWordsCroatian); - int serbianCount = GetCount(text, AutoDetectWordsSerbian); - if (croatianCount > serbianCount) - { - return "hr"; // Croatian - } - - return "sr"; // Serbian - } - - count = GetCount(text, AutoDetectWordsVietnamese); - if (count > bestCount) - { - return "vi"; // Vietnamese - } - - count = GetCount(text, AutoDetectWordsHungarian); - if (count > bestCount) - { - return "hu"; // Hungarian - } - - count = GetCount(text, AutoDetectWordsTurkish); - if (count > bestCount) - { - return "tr"; // Turkish - } - - count = GetCount(text, AutoDetectWordsIndonesian); - if (count > bestCount) - { - return "id"; // Indonesian - } - - count = GetCount(text, AutoDetectWordsThai); - if (count > 10 || count > bestCount) - { - return "th"; // Thai - } - - count = GetCount(text, AutoDetectWordsKorean); - if (count > 10 || count > bestCount) - { - return "ko"; // Korean - } - - count = GetCount(text, AutoDetectWordsFinnish); - if (count > bestCount) - { - return "fi"; // Finnish - } - - count = GetCount(text, AutoDetectWordsRomanian); - if (count > bestCount) - { - return "ro"; // Romanian - } - - count = GetCountContains(text, "シ", "ュ", "シン", "シ", "ン", "ユ"); - count += GetCountContains(text, "イ", "ン", "チ", "ェ", "ク", "ハ"); - count += GetCountContains(text, "シ", "ュ", "う", "シ", "ン", "サ"); - count += GetCountContains(text, "シ", "ュ", "シ", "ン", "だ", "う"); - if (count > bestCount * 2) - { - return "ja"; // Japanese - not tested... - } - - count = GetCountContains(text, "是", "是早", "吧", "的", "爱", "上好"); - count += GetCountContains(text, "的", "啊", "好", "好", "亲", "的"); - count += GetCountContains(text, "谢", "走", "吧", "晚", "上", "好"); - count += GetCountContains(text, "来", "卡", "拉", "吐", "滚", "他"); - if (count > bestCount * 2) - { - return "zh"; // Chinese (simplified) - not tested... - } - - count = GetCount(text, AutoDetectWordsCzechAndSlovak); - if (count > bestCount) - { - var lithuanianCount = GetCount(text, AutoDetectWordsLithuanian); - int finnishCount = GetCount(text, AutoDetectWordsFinnish); - if (lithuanianCount <= count && finnishCount < count) - { - int czechWordsCount = GetCount(text, AutoDetectWordsCzech); - int slovakWordsCount = GetCount(text, AutoDetectWordsSlovak); - if (czechWordsCount >= slovakWordsCount) - { - return "cs"; // Czech - } - - return "sk"; // Slovak - } - } - - count = GetCount(text, AutoDetectWordsLatvian); - if (count > bestCount * 1.2) - { - return "lv"; - } - - count = GetCount(text, AutoDetectWordsLithuanian); - if (count > bestCount) - { - return "lt"; - } - - count = GetCount(text, AutoDetectWordsHindi); - if (count > bestCount) - { - return "hi"; - } - - count = GetCount(text, AutoDetectWordsUrdu); - if (count > bestCount) - { - return "ur"; - } - - count = GetCount(text, AutoDetectWordsSinhalese); - if (count > bestCount) - { - return "sl"; - } - - count = GetCount(text, AutoDetectWordsMacedonian); - if (count > bestCount) - { - return "mk"; - } - - return string.Empty; - } - - public static string AutoDetectGoogleLanguage(Subtitle subtitle) - { - return AutoDetectGoogleLanguageOrNull(subtitle) ?? "en"; - } - - public static string AutoDetectGoogleLanguageOrNull(Subtitle subtitle) - { - var s = new Subtitle(subtitle); - s.RemoveEmptyLines(); - var allText = s.GetAllTexts(500000); - string languageId = AutoDetectGoogleLanguage(allText, s.Paragraphs.Count / 14); - if (string.IsNullOrEmpty(languageId)) - { - languageId = GetEncodingViaLetter(allText); - } - - if (string.IsNullOrEmpty(languageId)) - { - languageId = null; - } - return languageId; - } - - public static string AutoDetectLanguageName(string languageName, Subtitle subtitle) - { - if (string.IsNullOrEmpty(languageName)) - { - languageName = "en_US"; - } - - int bestCount = subtitle.Paragraphs.Count / 14; - - string text = subtitle.GetAllTexts(); - List dictionaryNames = Utilities.GetDictionaryLanguages(); - - bool containsEnGb = false; - bool containsEnUs = false; - bool containsHrHr = false; - bool containsSrLatn = false; - foreach (string name in dictionaryNames) - { - if (name.Contains("[en_GB]")) - { - containsEnGb = true; - } - - if (name.Contains("[en_US]")) - { - containsEnUs = true; - } - - if (name.Contains("[hr_HR]")) - { - containsHrHr = true; - } - - if (name.Contains("[sr_Latn]")) - { - containsSrLatn = true; - } - } - - foreach (string name in dictionaryNames) - { - string shortName = string.Empty; - int start = name.IndexOf('['); - int end = name.IndexOf(']'); - if (start >= 0 && end > start) - { - start++; - shortName = name.Substring(start, end - start); - } - - int count; - switch (shortName.Replace("-", "_").ToLowerInvariant()) - { - case "da_dk": - count = GetCount(text, AutoDetectWordsDanish); - if (count > bestCount) - { - int norwegianCount = GetCount(text, "ut", "deg", "meg", "merkelig", "mye", "spørre"); - int dutchCount = GetCount(text, AutoDetectWordsDutch); - if (norwegianCount < 2 && dutchCount < count) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "nb_no": - count = GetCount(text, AutoDetectWordsNorwegian); - if (count > bestCount) - { - int danishCount = GetCount(text, "siger", "dig", "mig", "mærkelig", "tilbage", "spørge"); - int dutchCount = GetCount(text, AutoDetectWordsDutch); - if (danishCount < 2 && dutchCount < count) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "sv_se": - count = GetCount(text, AutoDetectWordsSwedish); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "en_us": - count = GetCount(text, AutoDetectWordsEnglish); - if (count > bestCount) - { - int dutchCount = GetCount(text, AutoDetectWordsDutch); - if (dutchCount < count) - { - languageName = shortName; - bestCount = count; - if (containsEnGb) - { - int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); - int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); - if (gbCount > usCount) - { - languageName = "en_GB"; - } - } - } - } - break; - case "en_gb": - count = GetCount(text, AutoDetectWordsEnglish); - if (count > bestCount) - { - int dutchCount = GetCount(text, AutoDetectWordsDutch); - if (dutchCount < count) - { - languageName = shortName; - bestCount = count; - if (containsEnUs) - { - int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); - int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); - if (gbCount < usCount) - { - languageName = "en_US"; - } - } - } - } - break; - case "es_any": - case "es_es": - count = GetCount(text, AutoDetectWordsSpanish); - if (count > bestCount) - { - int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not spanish words - int portugueseCount = GetCount(text, "[NnCc]ão", "Então", "h?ouve", "pessoal", "rapariga", "tivesse", "fizeste", - "jantar", "conheço", "atenção", "foste", "milhões", "devias", "ganhar", "raios"); // not spanish words - if (frenchCount < 2 && portugueseCount < 2) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "it_it": - count = GetCount(text, AutoDetectWordsItalian); - if (count > bestCount) - { - int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not italian words - int spanishCount = GetCount(text, "Hola", "nada", "Vamos", "pasa", "los", "como"); // not italian words - if (frenchCount < 2 && spanishCount < 2) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "fr_fr": - count = GetCount(text, AutoDetectWordsFrench); - if (count > bestCount) - { - int romanianCount = GetCount(text, "[Vv]reau", "[Ss]înt", "[Aa]cum", "pentru", "domnule", "aici"); - int spanishCount = GetCount(text, "Hola", "nada", "Vamos", "pasa", "los", "como"); // not french words - int italianCount = GetCount(text, AutoDetectWordsItalian); - if (romanianCount < 5 && spanishCount < 2 && italianCount < 2) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "de_de": - count = GetCount(text, AutoDetectWordsGerman); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "nl_nl": - count = GetCount(text, AutoDetectWordsDutch); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "pl_pl": - count = GetCount(text, AutoDetectWordsPolish); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "el_gr": - count = GetCount(text, AutoDetectWordsGreek); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "ru_ru": - count = GetCount(text, AutoDetectWordsRussian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "uk_ua": - count = GetCount(text, AutoDetectWordsUkrainian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "ro_ro": - count = GetCount(text, AutoDetectWordsRomanian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "hr_hr": // Croatian - count = GetCount(text, AutoDetectWordsCroatianAndSerbian); - if (count > bestCount) - { - bestCount = count; - languageName = shortName; - if (containsSrLatn) - { - int croatianCount = GetCount(text, AutoDetectWordsCroatian); - int serbianCount = GetCount(text, AutoDetectWordsSerbian); - if (serbianCount > croatianCount) - { - languageName = "sr-Latn"; - } - } - } - break; - case "sr_latn": // Serbian (Latin) - count = GetCount(text, AutoDetectWordsCroatianAndSerbian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - if (containsHrHr) - { - int croatianCount = GetCount(text, AutoDetectWordsCroatian); - int serbianCount = GetCount(text, AutoDetectWordsSerbian); - if (serbianCount < croatianCount) - { - languageName = "hr_HR"; - } - } - } - break; - case "sr": // Serbian (Cyrillic) - count = GetCount(text, AutoDetectWordsSerbianCyrillic); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "pt_pt": // Portuguese Portugal - case "pt_br": // Portuguese Brazil - count = GetCount(text, AutoDetectWordsPortuguese); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "hu_hu": // Hungarian - count = GetCount(text, AutoDetectWordsHungarian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "cs_cz": // Czech - count = GetCount(text, AutoDetectWordsCzech); - if (count > bestCount) - { - var lithuanianCount = GetCount(text, AutoDetectWordsLithuanian); - if (count > lithuanianCount) - { - languageName = shortName; - bestCount = count; - } - } - break; - case "sk_sk": // Slovak - count = GetCount(text, AutoDetectWordsSlovak); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "lv_lv": // Latvian - count = GetCount(text, AutoDetectWordsLatvian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "lt_lt": // Lithuanian - case "lt": // Lithuanian (Neutral) - count = GetCount(text, AutoDetectWordsLithuanian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "hi_in": // Hindi - case "hi": - count = GetCount(text, AutoDetectWordsHindi); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "ur_ur": // Urdu - case "ur": - count = GetCount(text, AutoDetectWordsUrdu); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "sl_sl": // Sinhalese - case "sl": - count = GetCount(text, AutoDetectWordsSinhalese); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "tr_tr": // Turkish - count = GetCount(text, AutoDetectWordsTurkish); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "he_il": // Hebrew - count = GetCount(text, AutoDetectWordsHebrew); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "vi_vn": // Vietnamese - count = GetCount(text, AutoDetectWordsVietnamese); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "ar": // Arabic - case "ar_ar": - count = GetCount(text, AutoDetectWordsArabic); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "sq_al": // Albanian - count = GetCount(text, AutoDetectWordsAlbanian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "id_id": // Indonesian - count = GetCount(text, AutoDetectWordsIndonesian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "ko_kr": // Korean - count = GetCount(text, AutoDetectWordsKorean); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "mk_mk": // Macedonian - count = GetCount(text, AutoDetectWordsMacedonian); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - case "fa": // Farsi (Persian) - case "fa_ir": - count = GetCount(text, AutoDetectWordsFarsi); - if (count > bestCount) - { - languageName = shortName; - bestCount = count; - } - break; - } - } - return languageName; - } - - public static Encoding DetectAnsiEncoding(byte[] buffer) - { - try - { - var greekEncoding = Encoding.GetEncoding(1253); // Greek - if (GetCount(greekEncoding.GetString(buffer), AutoDetectWordsGreek) > 5) - { - return greekEncoding; - } - - var russianEncoding = Encoding.GetEncoding(1251); // Cyrillic - var textEnc1251 = russianEncoding.GetString(buffer); - if (GetCount(textEnc1251, "что", "быть", "весь", "этот", "один", "такой") > 5) // Russian - { - return russianEncoding; - } - - var wordMinCount = buffer.Length / 300; - - if (GetCount(textEnc1251, AutoDetectWordsSerbianCyrillic) > wordMinCount) - { - return russianEncoding; - } - - if (GetCount(textEnc1251, "Какво", "тук", "може", "Как", "Ваше", "какво") > 5) // Bulgarian - { - return russianEncoding; - } - - - if (GetCount(textEnc1251, AutoDetectWordsSerbianCyrillic) > wordMinCount) // Serbian - { - return russianEncoding; - } - - var encoding1250 = Encoding.GetEncoding(1250); // Central European/Eastern European: Polish, Czech, Slovak, Hungarian, Slovene, Bosnian, Croatian, Serbian (Latin script), Romanian (before 1993 spelling reform) and Albanian - var textEnc1250 = encoding1250.GetString(buffer); - if (GetCount(textEnc1250, AutoDetectWordsCroatianAndSerbian) > wordMinCount) - { - return encoding1250; - } - - if (GetCount(textEnc1250, AutoDetectWordsCzechAndSlovak) > wordMinCount) - { - return encoding1250; - } - - if (GetCount(textEnc1250, AutoDetectWordsHungarian) > wordMinCount) - { - return encoding1250; - } - - var encoding1252 = Encoding.GetEncoding(1252); // Latin - English and some other Western languages - var textEnc1252 = encoding1252.GetString(buffer); - var pol1252Count = GetCount(textEnc1252, AutoDetectWordsPolish); - var pol1250Count = GetCount(textEnc1250, AutoDetectWordsPolish); - var encoding28592 = Encoding.GetEncoding(28592); - var pol28592Count = GetCount(encoding28592.GetString(buffer), AutoDetectWordsPolish); - if (pol1252Count > wordMinCount || pol1250Count > wordMinCount) - { - if (pol28592Count > pol1250Count && pol28592Count > pol1252Count) - { - return encoding28592; - } - - return pol1252Count > pol1250Count ? encoding1252 : encoding1250; - } - - var dutchCount1252 = GetCount(textEnc1252, AutoDetectWordsDutch); - if (dutchCount1252 > wordMinCount) - { - return encoding1252; - } - - var danishCount1252 = GetCount(textEnc1252, AutoDetectWordsDanish); - if (danishCount1252 > wordMinCount) - { - return encoding1252; - } - - var swedishCount1252 = GetCount(textEnc1252, AutoDetectWordsSwedish); - if (swedishCount1252 > wordMinCount) - { - return encoding1252; - } - - var germanCount1252 = GetCount(textEnc1252, AutoDetectWordsGerman); - if (germanCount1252 > wordMinCount) - { - return encoding1252; - } - - var spanishCount1252 = GetCount(textEnc1252, AutoDetectWordsSpanish); - if (textEnc1252.Contains('¡')) - { - spanishCount1252 += 5; - } - if (textEnc1252.Contains('¿')) - { - spanishCount1252 += 5; - } - if (spanishCount1252 > wordMinCount && (textEnc1252.Contains('ú') || textEnc1252.Contains('í') || textEnc1252.Contains('ú') || textEnc1252.Contains('ó') || textEnc1252.Contains('é') || textEnc1252.Contains('ñ'))) - { - return encoding1252; - } - - var russianEncoding28595 = Encoding.GetEncoding(28595); // Russian - if (GetCount(russianEncoding28595.GetString(buffer), "что", "быть", "весь", "этот", "один", "такой") > 5) // Russian - { - return russianEncoding28595; - } - - var thaiEncoding = Encoding.GetEncoding(874); // Thai - var thaiCount = GetCount(thaiEncoding.GetString(buffer), AutoDetectWordsThai); - var koreanEncoding = Encoding.GetEncoding(949); // Korean - var koreanCount = GetCount(koreanEncoding.GetString(buffer), AutoDetectWordsKorean); - if (thaiCount > 10 || koreanCount > 10) - { - return thaiCount > koreanCount ? thaiEncoding : koreanEncoding; - } - - var arabicEncoding = Encoding.GetEncoding(1256); // Arabic - var hebrewEncoding = Encoding.GetEncoding(1255); // Hebrew - if (GetCount(arabicEncoding.GetString(buffer), AutoDetectWordsArabic) > 5) - { - if (GetCount(hebrewEncoding.GetString(buffer), AutoDetectWordsHebrew) > 10) - { - return hebrewEncoding; - } - - return arabicEncoding; - } - if (GetCount(hebrewEncoding.GetString(buffer), AutoDetectWordsHebrew) > 5) - { - return hebrewEncoding; - } - - if (GetCount(textEnc1250, "să", "şi", "văzut", "regulă", "găsit", "viaţă") > 99) - { - return encoding1250; - } - - var encoding28591 = Encoding.GetEncoding(28591); - var frenchCount1252 = GetCount(textEnc1252, AutoDetectWordsFrench); - if (frenchCount1252 > wordMinCount) - { - var frenchCount28591 = GetCount(encoding28591.GetString(buffer), AutoDetectWordsFrench); - return frenchCount28591 > frenchCount1252 ? encoding28591 : encoding1252; - } - - var portugueseCount1252 = GetCount(textEnc1252, AutoDetectWordsPortuguese); - if (portugueseCount1252 > wordMinCount) - { - var portugueseCount28591 = GetCount(encoding28591.GetString(buffer), AutoDetectWordsPortuguese); - return portugueseCount28591 > portugueseCount1252 ? encoding28591 : encoding1252; - } - - var encoding1254 = Encoding.GetEncoding(1254); - var turkishText = encoding1254.GetString(buffer); - var turkish1254Count = GetCount(turkishText, AutoDetectWordsTurkish); - if (turkish1254Count > wordMinCount) - { - return encoding1254; - } - - var encoding = EncodingTools.DetectInputCodepage(buffer); - if (encoding.CodePage == 28599) - { - return Encoding.GetEncoding(1254); // prefer 1254 over 28599 - } - - return encoding; - } - catch - { - return Encoding.Default; - } - } - - public static Encoding GetEncodingFromFile(string fileName, bool skipAnsiAuto = false) - { - var encoding = Encoding.Default; - - try - { - foreach (var enc in Configuration.AvailableEncodings) - { - if (enc.WebName == Configuration.Settings.General.DefaultEncoding && enc.WebName != Encoding.Unicode.WebName && enc.WebName != Encoding.UTF8.WebName) - { - encoding = enc; - break; - } - } - - using (var file = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - var bom = new byte[12]; // Get the byte-order mark, if there is one - file.Position = 0; - file.Read(bom, 0, bom.Length); - if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) - { - encoding = Encoding.UTF8; - } - else if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) - { - encoding = Encoding.GetEncoding(12000); // UTF-32 (LE) - } - else if (bom[0] == 0xff && bom[1] == 0xfe) - { - encoding = Encoding.Unicode; - } - else if (bom[0] == 0xfe && bom[1] == 0xff) // utf-16 and ucs-2 - { - encoding = Encoding.BigEndianUnicode; - } - else if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) // ucs-4 - { - encoding = Encoding.GetEncoding(12001); // UTF-32 (BE) - } - else if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76 && (bom[3] == 0x38 || bom[3] == 0x39 || bom[3] == 0x2b || bom[3] == 0x2f)) // utf-7 - { - encoding = Encoding.UTF7; - } - else if (file.Length > bom.Length) - { - long length = file.Length; - if (length > 500000) - { - length = 500000; - } - - file.Position = 0; - var buffer = new byte[length]; - file.Read(buffer, 0, buffer.Length); - - if (IsUtf8(buffer, out var couldBeUtf8)) - { - encoding = Encoding.UTF8; - } - else if (couldBeUtf8 && Configuration.Settings.General.DefaultEncoding.StartsWith("UTF-8", StringComparison.Ordinal)) - { // keep utf-8 encoding if it's default - encoding = Encoding.UTF8; - } - else if (couldBeUtf8 && fileName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase) && Encoding.Default.GetString(buffer).ToLowerInvariant().Replace('\'', '"').Contains("encoding=\"utf-8\"")) - { // keep utf-8 encoding for xml files with utf-8 in header (without any utf-8 encoded characters, but with only allowed utf-8 characters) - encoding = Encoding.UTF8; - } - else if (Configuration.Settings.General.AutoGuessAnsiEncoding && !skipAnsiAuto) - { - var autoDetected = DetectAnsiEncoding(buffer); - if (autoDetected != null) - { - return autoDetected.CodePage < 874 ? Encoding.Default : autoDetected; - } - } - } - } - } - catch - { - // ignored - } - return encoding; - } - - /// - /// Will try to determine if buffer is utf-8 encoded or not. - /// If any non-utf8 sequences are found then false is returned, if no utf8 multibytes sequences are found then false is returned. - /// - private static bool IsUtf8(byte[] buffer, out bool couldBeUtf8) - { - couldBeUtf8 = false; - int utf8Count = 0; - int i = 0; - while (i < buffer.Length - 3) - { - byte b = buffer[i]; - if (b > 127) - { - if (b >= 194 && b <= 223 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191) - { // 2-byte sequence - utf8Count++; - i++; - } - else if (b >= 224 && b <= 239 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191 && - buffer[i + 2] >= 128 && buffer[i + 2] <= 191) - { // 3-byte sequence - utf8Count++; - i += 2; - } - else if (b >= 240 && b <= 244 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191 && - buffer[i + 2] >= 128 && buffer[i + 2] <= 191 && - buffer[i + 3] >= 128 && buffer[i + 3] <= 191) - { // 4-byte sequence - utf8Count++; - i += 3; - } - else - { - return false; - } - } - i++; - } - couldBeUtf8 = true; - if (utf8Count == 0) - { - return false; // not utf-8 (no characters utf-8 encoded...) - } - - return true; - } - - private static readonly char[] RightToLeftLetters = string.Join(string.Empty, AutoDetectWordsArabic.Concat(AutoDetectWordsHebrew).Concat(AutoDetectWordsFarsi).Concat(AutoDetectWordsUrdu)).Distinct().ToArray(); - - public static bool CouldBeRightToLeftLanguage(Subtitle subtitle) - { - const int maxNumberOfLinesToCheck = 20; - var max = Math.Min(maxNumberOfLinesToCheck, subtitle.Paragraphs.Count); - for (int i = 0; i < max; i++) - { - if (ContainsRightToLeftLetter(subtitle.Paragraphs[i].Text)) - { - return true; - } - } - return false; - } - - public static bool ContainsRightToLeftLetter(string text) - { - foreach (var letter in RightToLeftLetters) - { - if (text.Contains(letter)) - { - return true; - } - } - return false; - } - - public static string GetEncodingViaLetter(string text) - { - var dictionary = new Dictionary(); - - // Arabic - int count = 0; - foreach (var letter in "غظضذخثتشرقصفعسنملكيطحزوهدجبا") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("ar", count); - - // Korean - count = 0; - foreach (var letter in "가나다라마바사아자차카타파하아야어여오요우유으이") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("ko", count); - - // Japanese - count = 0; - foreach (var letter in "あいうえおかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよらりるれろわをん") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("ja", count); - - // Thai - count = 0; - foreach (var letter in "กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("th", count); - - // Sinhalese - count = 0; - foreach (var letter in "අආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖකඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරලවශෂසහළෆ්ාැෑිීුූෘෙේෛොෝෞෟ෦෧෨෩෪෫෬෭෮෯") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("sl", count); - - // Urdu - count = 0; - foreach (var letter in "ﺍﺎﺁﺂﺏﺑﺒﺐﭖﭘﭙﭗﺕﺗﺘﺖﭦﭨﭩﭧﺙﺛﺜﺚﺝﺟﺠﺞﭺﭼﭽﭻﺡﺣﺤﺢﺥﺧﺨﺦﺩﺪﺫﺬﺭﺮﮌﮍﺯﺰﮊﮋﺱﺳﺴﺲﺵﺷﺸﺶﺹﺻﺼﺺﺽﺿﻀﺾﻁﻃﻄﻂﻅﻇﻈﻆﻉﻋﻌﻊﻍﻏﻐﻎﻑﻓﻔﻒﻕﻗﻘﻖﻙﻛﻜﻚﻻﻼﻝﻟﻠﻞﻡﻣﻤﻢﻥﻧﻨﻦﻭﻮﮮﮯﮦﮨﮩﮧﯼﯾﯿﯽﮪﮬﮭﮫﴽﴼﺀﺋﺌﹱﹷﹹ") - { - if (text.Contains(letter)) - { - count++; - } - } - dictionary.Add("ur", count); - - var maxHitsLanguage = dictionary.FirstOrDefault(x => x.Value == dictionary.Values.Max()); - return maxHitsLanguage.Value > 0 ? maxHitsLanguage.Key : null; - } - - public static bool IsLanguageWithoutPeriods(string language) - { - return language == "ko" || language == "zh" || language == "ja" || language == "th"; - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.DetectEncoding; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public static class LanguageAutoDetect + { + + private static int GetCount(string text, params string[] words) + { + var options = RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture; + var pattern = "\\b(" + string.Join("|", words) + ")\\b"; + return Regex.Matches(text, pattern, options).Count; + } + + private static int GetCountContains(string text, params string[] words) + { + int count = 0; + foreach (var w in words) + { + var regEx = new Regex(w); + count += regEx.Matches(text).Count; + } + return count; + } + + public static string AutoDetectGoogleLanguage(Encoding encoding) + { + switch (encoding.CodePage) + { + case 860: + return "pt"; // Portuguese + case 28599: + case 1254: + return "tr"; // Turkish + case 28598: + case 1255: + return "he"; // Hebrew + case 28596: + case 1256: + return "ar"; // Arabic + case 1258: + return "vi"; // Vietnamese + case 949: + case 1361: + case 20949: + case 51949: + case 50225: + return "ko"; // Korean + case 1253: + case 28597: + return "el"; // Greek + case 50220: + case 50221: + case 50222: + case 51932: + case 20932: + case 10001: + return "ja"; // Japanese + case 20000: + case 20002: + case 20936: + case 950: + case 52936: + case 54936: + case 51936: + return "zh"; // Chinese + default: + return null; + } + } + + private static readonly string[] AutoDetectWordsEnglish = + { + "we", "are", "and", "your", "what", "[TW]hat's", "You're", "(any|some|every)thing", "money", "because", "human", "because", "welcome", "really", "something", "confusing", "about", "know", "people", "other", "which", "would", + "these", "could" + }; + + private static readonly string[] AutoDetectWordsDanish = + { + "vi", "han", "og", "jeg", "var", "men", "gider", "bliver", "virkelig", "kommer", "tilbage", "Hej", "længere", "gjorde", "dig", "havde", "[Uu]ndskyld", "arbejder", "vidste", "troede", "stadigvæk", "[Mm]åske", "første", "gik", + "fortælle", "begyndt", "spørgsmål", "pludselig" + }; + + private static readonly string[] AutoDetectWordsNorwegian = + { + "vi", "og", "jeg", "var", "men", "igjen", "Nei", "Hei", "noen", "gjøre", "kanskje", "[Tt]renger", "tenker", "skjer", "møte", "veldig", "takk", "penger", "konsept", "hjelp", "forsvunnet", + "skutt", "sterkt", "minste", "første", "fortsette", "inneholder", "gikk", "fortelle", "begynt", "spørsmål", "plutselig" + }; + + private static readonly string[] AutoDetectWordsSwedish = + { + "vi", "är", "och", "Jag", "inte", "för", "måste", "Öppna", "Förlåt", "nånting", "ingenting", "jävla", "Varför", "[Ss]nälla", "fattar", "själv", "säger", "öppna", "jävligt", "dörren", "göra", "behöver", "tillbaka", "Varför", + "träffa", "kanske", "säga", "hände", "honom", "hennes", "veckor", "tänker", "själv", "pratar", "mycket", "mamma", "dödade", "Ursäkta", "säger", "senaste", "håller", "förstår", "veckan", "varför", "tycker", "första", "gick", + "berätta", "börjat", "människor", "frågor", "fråga", "plötsligt", "skämt" + }; + + private static readonly string[] AutoDetectWordsSpanish = + { + "qué", "eso", "muy", "estoy?", "ahora", "hay", "tú", "así", "cuando", "cómo", "él", "sólo", "quiero", "gracias", "puedo", "bueno", "soy", "hacer", "fue", "eres", "usted", "tienes", "puede", "[Ss]eñor", "ese", "voy", "quién", + "creo", "hola", "dónde", "sus", "verdad", "quieres", "mucho", "entonces", "estaba", "tiempo", "esa", "mejor", "hombre", "hace", "dios", "también", "están", "siempre", "hasta", "ahí", "siento", + "puedes", "Dónde", "está", "estoy", "Vámonos", "vistiendo", "Caliente", "chimenea" + }; + + private static readonly string[] AutoDetectWordsItalian = + { + "Buongiorno", "Grazie", "Cosa", "quest[ao]", "quell[ao]", "tutt[io]", "[st]uo", "qualcosa", "ancora", "sono", "bene", "più", "andare", "essere", "venire", "abbiamo", "andiamo", "ragazzi", "signore", "numero", "giorno", + "propriamente", "sensitivo", "negativo", "davvero", "faccio", "voglio", "vuole", "perché", "allora", "niente", "anche", "stai", "detto", "fatto", "hanno", "molto", "stato", "siamo", "così", "vuoi", "noi", "vero", "loro", + "fare", "gli", "due" + }; + + private static readonly string[] AutoDetectWordsFrench = + { + "pas", "[vn]ous", "ça", "une", "pour", "[mt]oi", "dans", "elle", "tout", "plus", "[bmt]on", "suis", "avec", "oui", "fait", "ils", "être", "faire", "comme", "était", "quoi", "ici", "veux", + "vouloir", "quelque", "pouvoir", "rien", "dit", "où", "votre", "pourquoi", "sont", "cette", "peux", "alors", "comment", "avez", "très", "même", "merci", "ont", "aussi", "chose", "voir", + "allez", "tous", "ces", "deux", "avoir", " pouvoir", "même", "œil", "sœur", + }; + + private static readonly string[] AutoDetectWordsPortuguese = + { + "[Nn]ão", "[Ee]ntão", "uma", "ele", "bem", "isso", "você", "sim", "meu", "muito", "estou", "ela", "fazer", "tem", "já", "minha", "tudo", "só", "tenho", "agora", "vou", "seu", "quem", "há", + "lhe", "quero", "nós", "são", "ter", "coisa", "dizer", "eles", "pode", "bom", "mesmo", "mim", "estava", "assim", "estão", "até", "quer", "temos", "acho", "obrigado", "também", "tens", + "deus", "quê", "ainda", "noite", "conversar", "Desculpe", "verdade" + }; + + private static readonly string[] AutoDetectWordsGerman = + { + "und", "auch", "sich", "bin", "hast", "möchte", "müssen", "weiß", "[Vv]ielleicht", "Warum", "jetzt", "Verdammt", "bist", "Darum", "sitzt", "Setz", "Das ist", "Du bist", "nicht", "Scheiße", + "Nein", "für", "gesagt", "zwei", "richtig" + }; + + private static readonly string[] AutoDetectWordsDutch = + { + "van", "een", "[Hh]et", "m(ij|ij)", "z(ij|ij)n", "hebben", "alleen", "Waarom" + }; + + private static readonly string[] AutoDetectWordsPolish = + { + "Czy", "ale", "ty", "siê", "się", "jest", "mnie", "Proszę", "życie", "statku", "życia", "Czyli", "Wszystko", "Wiem", "Przepraszam", "dobrze", "chciałam", "Dziękuję", "Żołnierzyk", "Łowca", "został", "stało", "dolarów", + "wiadomości", "Dobrze", "będzie", "Dzień", "przyszłość", "Uratowałaś", "Cześć", "Trzeba", "zginąć", "walczyć", "ludzkość", "maszyny", "Jeszcze", "okrążenie", "wyścigu", "porządku", "detektywie", + "przebieralni", "który" + }; + + private static readonly string[] AutoDetectWordsGreek = + { + "μου", "[Εε]ίναι", "αυτό", "Τόμπυ", "καλά", "Ενταξει", "πρεπει", "Λοιπον", "τιποτα", "ξερεις" + }; + + private static readonly string[] AutoDetectWordsRussian = + { + "[Ээч]?то", "[Нн]е", "[ТтМмбв]ы", "Да", "[Нн]ет", "Он", "его", "тебя", "как", "меня", "Но", "всё", "мне", "вас", "знаю", "ещё", "за", "нас", "чтобы", "был" + }; + + private static readonly string[] AutoDetectWordsBulgarian = + { + "[Кк]акво", "тук", "може", "Как", "Да", "Ваше", "нещо", "беше", "Добре", "трябва", "става", "Джоузи", "Защо", "дяволите", "Сиянието", "Трябва", "години", "Стивън", "Благодаря" + }; + + private static readonly string[] AutoDetectWordsUkrainian = + { + "[Нн]і", "[Пп]ривіт", "[Цц]е", "[Щщ]о", "[Йй]ого", "[Вв]ін", "[Яя]к", "[Гг]аразд", "[Яя]кщо", "[Мм]ені", "[Тт]вій", "[Її]х", "[Вв]ітаю", "[Дд]якую", "вже", "було", "був", "цього", + "нічого", "немає", "може", "знову", "бо", "щось", "щоб", "цим", "тобі", "хотів", "твоїх", "мої", "мій", "має", "їм", "йому", "дуже" + }; + + private static readonly string[] AutoDetectWordsAlbanian = + { + "është", "këtë", "Unë", "mirë", "shumë", "Çfarë", "çfarë", "duhet", "Është", "mbrapa", "Faleminderit", "vërtet", "diçka", "gjithashtu", "gjithe", "eshte", "shume", "vetem", "tënde", + "çmendur", "vullnetin", "vdekur" + }; + + private static readonly string[] AutoDetectWordsArabic = + { + "من", "هل", "لا", "في", "لقد", "ما", "ماذا", "يا", "هذا", "إلى", "على", "أنا", "أنت", "حسناً", "أيها", "كان", "كيف", "يكون", "هذه", "هذان", "الذي", "التي", "الذين", "هناك", "هنالك" + }; + + private static readonly string[] AutoDetectWordsFarsi = + { + "این", "برای", "اون", "سیب", "کال", "رو", "خيلي", "آره", "بود", "اون", "نيست", "اينجا", "باشه", "سلام", "ميکني", "داري", "چيزي", "چرا", "خوبه" + }; + + private static readonly string[] AutoDetectWordsHebrew = + { + "אתה", "אולי", "הוא", "בסדר", "יודע", "טוב" + }; + + private static readonly string[] AutoDetectWordsVietnamese = + { + "không", "[Tt]ôi", "anh", "đó", "ông", "tôi", "phải", "người", "được", "Cậu", "chúng", "chuyện", "muốn", "những", "nhiều" + }; + + private static readonly string[] AutoDetectWordsHungarian = + { + "hogy", "lesz", "tudom", "vagy", "mondtam", "még", "vagyok", "csak", "Hát", "felesége", "Csak", "utána", "jött", + "Miért", "Akkor", "magát", "holnap", "Tudja", "Köszönöm", "élet", "Örvendek", "vissza", "hogy", "tudom", "Rendben", + "Istenem", "Gyerünk", "értem", "vagyok", "hiszem", "történt", "rendben", "olyan", "őket", "vannak", "mindig", "Kérlek", + "Gyere", "kicsim", "vagyunk" + }; + + private static readonly string[] AutoDetectWordsTurkish = + { + "için", "Tamam", "Hayır", "benim", "daha", "deðil", "önce", "lazým", "çalýþýyor", "Aldırma", + "burada", "efendim", "şey", "çok", "Çok", "için", "Merhaba", "Evet", "kötü", "musun", + "güzel", "çünkü", "büyük", "Bebeğim", "olduğunu", "istiyorum", "değilsin", "bilmiyorum", + "otursana", "Selam", "Tabii","konuda","istiyor","Tetekkürler", "istemiyorum", "Gerçekte" + }; + + private static readonly string[] AutoDetectWordsCroatianAndSerbian = + { + "sam", "ali", "nije", "Nije", "samo", "ovo", "kako", "dobro", "Dobro", "sve", "tako", "će", "mogu", "ću", "zašto", "nešto", "za", "misliš", "možeš", "možemo", "ništa", "znaš", "ćemo", "znam" + }; + private static readonly string[] AutoDetectWordsCroatian = + { + "što", "ovdje", "gdje", "kamo", "tko", "prije", "uvijek", "vrijeme", "vidjeti", "netko", "vidio", "nitko", "bok", "lijepo", "oprosti", "htio", "mjesto", "oprostite", "čovjek", "dolje", "čovječe", "dvije", "dijete", "dio", + "poslije", "događa", "vjerovati", "vjerojatno", "vjerujem", "točno", "razumijem", "vidjela", "cijeli", "svijet", "obitelj", "volio", "sretan", "dovraga", "svijetu", "htjela", "vidjeli", "negdje", "želio", "ponovno", + "djevojka", "umrijeti", "čovjeka", "mjesta", "djeca", "osjećam", "uopće", "djecu", "naprijed", "obitelji", "doista", "mjestu", "lijepa", "također", "riječ", "tijelo" + }; + private static readonly string[] AutoDetectWordsSerbian = + { + "šta", "ovde", "gde", "ko", "pre", "uvek", "vreme", "videti", "neko", "video", "niko", "ćao", "lepo", "izvini", "hteo", "mesto", "izvinite", "čovek", "dole", "čoveče", "dve", "dete", "deo", "posle", "dešava", "verovati", + "verovatno", "verujem", "tačno", "razumem", "videla", "ceo", "svet", "porodica", "voleo", "srećan", "dođavola", "svetu", "htela", "videli", "negde", "želeo", "ponovo", "devojka", "umreti", "čoveka", "mesta", "deca", "osećam", + "uopšte", "decu", "napred", "porodicu", "zaista", "mestu", "lepa", "takođe", "reč", "telo" + }; + + private static readonly string[] AutoDetectWordsSerbianCyrillic = + { + "сам", "али", "није", "само", "ово", "како", "добро", "све", "тако", "ће", "могу", "ћу", "зашто", "нешто", "за", "шта", "овде", "бити", "чини", "учениче", "побегне", "остати", "Један", "Назад", "Молим" + }; + + private static readonly string[] AutoDetectWordsIndonesian = + { + "yang", "tahu", "bisa", "akan", "tahun", "tapi", "dengan", "untuk", "rumah", "dalam", "sudah", "bertemu" + }; + + private static readonly string[] AutoDetectWordsThai = + { + "ผู้กอง", "โรเบิร์ต", "วิตตอเรีย", "เข้าใจมั้ย", "คุณตำรวจ", "ราเชล", "เพื่อน", "เลดดิส", "พระเจ้า", "เท็ดดี้", "หัวหน้า", "แอนดรูว์", "ขอโทษครับ", "ขอบคุณ", "วาร์กัส", "ทุกคน", + "ไม่เอาน่า", "อิซานะ", "มจริง", "รับทราบ", "พอคะ", "ครับ", "อยาตขาป", "ยินดีทีดรูจักคะ", "ปลอดภัยดีนะ", "ทุกคน", "ตอนที", "ขอบคุณครับ", "ขอทษนะคะ", "ขอทษคะ" + }; + + private static readonly string[] AutoDetectWordsKorean = + { + "사루", "거야", "엄마", "그리고", "아니야", "하지만", "말이야", "그들은", "우리가", "엄마가", "괜찮아", "일어나", "잘했어", "뭐라고", "있어요", + "있어요", "보여줘", "괜찮아요", "목소릴", "기억이", "저주를", "좋아요" + }; + + private static readonly string[] AutoDetectWordsMacedonian = + { + "господине", "Нема", "господине", "работа", "вселената", "Може", "треба", "Треба", "слетување", "капсулата", "време", "Френдшип", "Прием", "Добро", "пресметки", "Благодарам", "нешто", "Благодарам", "орбитата", "инженер", + "Харисон", "Фала", "тоалет", "орбита", "знаеме", "Супервизор", "жени", "Добра", "требаат", "што", "дeкa", "eшe", "кучe", "Руиз", "кучeто", "кучињa", "Бјути", "имa", "многу", "кучињaтa", "AДЗЖ", "Животни", "моЖe", "мaчe", + "мecто", "имaмe", "мaчињa", "пpвото", "пpaвaт", "нeшто", "колку" + }; + + private static readonly string[] AutoDetectWordsFinnish = + { + "että", "kuin", "minä", "mitään", "Mutta", "siitä", "täällä", "poika", "Kiitos", "enää", "vielä", "tässä", "sulkeutuu", "Soitetaan", "Soita", "Onnistui", "Mitä", "Etuovi", "tippiä", "antaa", "Onko", "Hidasta", "tuntia", + "tilata", "päästä", "palolaitokselle", "hätänumeroon", "aikaa", "Tämä", "Sinulla", "Palauttaa", "Kiitos", "Arvostele", "Älä", "toimi", "televisiota", "takaisin", "reitin", "pitäisi", "palauttaa", "nopeamman", "mitään", + "meidät", "maksaa", "kuullut", "kaikki", "jälkeen", "ihmiset", "hätäkeskukseen", "hiljaa", "haluat", "enää", "enemmän", "auttaa", "Tunkeilijahälytys", "Pysähdy", "Princen", "Käänny", "Kyllä", "Kiva", "Haluatko", "Haluan" + }; + + private static readonly string[] AutoDetectWordsRomanian = + { + "pentru", "oamenii", "decât", "[Vv]reau", "[Ss]înt", "Asteaptã", "Fãrã", "aici", "domnule", "trãiascã", "niciodatã", "înseamnã", "vorbesti", "fãcut", "spune", "făcut", "când", "aici", "Asta", "văzut", "dacă", "câteva", + "amândoi", "Când", "totuși", "mașină", "aceeași", "întâmplat", "niște", "ziua", "noastră", "cunoscut", "decat", "[Tt]rebuie", "[Aa]cum", "Poate", "vrea", "soare", "nevoie", "daca", "echilibrul", "vorbesti", "zeului", + "atunci", "memoria", "soarele" + }; + + // Czech and Slovak languages have many common words (especially when non flexed) + private static readonly string[] AutoDetectWordsCzechAndSlovak = + { + "[Oo]n[ao]?", "[Jj]?si", "[Aa]le", "[Tt]en(to)?", "[Rr]ok", "[Tt]ak", "[Aa]by", "[Tt]am", "[Jj]ed(en|na|no)", "[Nn]ež", "[Aa]ni", "[Bb]ez", "[Dd]obr[ýáé]", "[Vv]šak", "[Cc]el[ýáé]", "[Nn]ov[ýáé]", "[Dd]ruh[ýáé]", "jsem", + "poøádku", "Pojïme", "háje", "není", "Jdeme", "všecko", "jsme", "Prosím", "Vezmi", "když", "Takže", "Dìkuji", "prechádzku", "všetko", "Poïme", "potom", "Takže", "Neviem", "budúcnosti", "trochu" + }; + // differences between Czech and Slovak languages / Czech words / please keep the words aligned between these languages for better comparison + private static readonly string[] AutoDetectWordsCzech = + { + ".*[Řř].*", ".*[ůě].*", "[Bb]ýt", "[Jj]sem", "[Jj]si", "[Jj]á", "[Mm]ít", "[Aa]no", "[Nn]e", "[Nn]ic", "[Dd]en", "[Jj]en", "[Cc]o", "[Jj]ak[o]?", "[Nn]ebo", "[Pp]ři", "[Pp]ro", "[Pp]řed.*", "[Jj](ít|du|de|deme|dou)", + "[Mm]ezi", "[Jj]eště", "[Čč]lověk", "[Pp]odle", "[Dd]alší" + }; + // differences between Czech and Slovak languages / Slovak words / please keep the words aligned between these languages for better comparison + private static readonly string[] AutoDetectWordsSlovak = + { + ".*[Ôô].*", ".*[ä].*", "[Bb]yť", "[Ss]om", "[Ss]i", "[Jj]a", "[Mm]ať", "[Áá]no", "[Nn]ie", "[Nn]ič", "[Dd]eň", "[Ll]en", "[Čč]o", "[Aa]ko", "[Aa]?[Ll]ebo", "[Pp]ri", "[Pp]re", "[Pp]red.*", "([Íí]sť|[Ii](dem|de|deme|dú))", + "[Mm]edzi", "[Ee]šte", "[Čč]lovek", "[Pp]odľa", "[Ďď]alš(í|ia|ie)" + }; + + private static readonly string[] AutoDetectWordsLatvian = + { + "Paldies", "neesmu ", "nezinu", "viòð", "viņš", "viņu", "kungs", "esmu", "Viņš", "Velns", "viņa", "dievs", "Pagaidi", "varonis", "agrāk", "varbūt" + }; + + private static readonly string[] AutoDetectWordsLithuanian = + { + "tavęs", "veidai", "apie", "jums", "Veidai", "Kaip", "kaip", "reikia", "Šūdas", "frensis", "Ačiū", "vilsonai", "Palauk", "Veidas", "viskas", "Tikrai", "manęs", "Tačiau", "žmogau", "Flagai", "Prašau", "Džiune", "Nakties", + "šviesybe", "Supratau", "komanda", "reikia", "apie", "Kodėl", "mūsų", "Ačiū", "vyksta" + }; + + private static readonly string[] AutoDetectWordsHindi = + { + "एक", "और", "को", "का", "यह", "सकते", "लिए", "करने", "भारतीय", "सकता", "भारत", "तकनीक", "कंप्यूटिंग", "उपकरण", "भाषाओं", "भाषा", "कंप्यूटर", "आप", "आपको", "अपने", "लेकिन", "करना", "सकता", "बहुत", "चाहते", "अच्छा", "वास्तव", + "लगता", "इसलिए", "शेल्डन", "धन्यवाद।", "तरह", "करता", "चाहता", "कोशिश", "करते", "किया", "अजीब", "सिर्फ", "शुरू" + }; + + private static readonly string[] AutoDetectWordsUrdu = + { + "نہیں", "ایک", "ہیں", "کیا", "اور", "لئے", "ٹھیک", "ہوں", "مجھے", "تھا", "کرنے", "صرف", "ارے", "یہاں", "بہت", "لیکن", "ساتھ", "اپنے", "اچھا", "میرے", "چاہتا", "انہوں", "تمہیں" + }; + + private static readonly string[] AutoDetectWordsSinhalese = + { + "කරන්න", "නැහැ", "කියල", "මගේ", "එයා", "ඔයාට", "කැප්ටන්", "ඔයාගේ", "පුළුවන්", "හැම", "වගේ", "වෙන්න", "ඕනා", "නෙමේ", "තියෙන්නේ", "වගේම", "දන්නවා", "වෙනවා", "එහෙම", "හිතන්නේ", "කියලා", "කරනවා", "යන්න", "දෙයක්", "තියනවා", + "හොදයි", "දෙන්න", "එකක්", "මොනාද", "කියන්න", "කරන්නේ", "වෙන්නේ", "රොජර්ස්", "දාන්න", "කරලා", "ඔයාව", "වෙලා", "කොහොමද", "කිවුවා", "ඔබට", "රාවුල්" + }; + + private static string AutoDetectGoogleLanguage(string text, int bestCount) + { + int count = GetCount(text, AutoDetectWordsEnglish); + if (count > bestCount) + { + int dutchCount = GetCount(text, AutoDetectWordsDutch); + if (dutchCount < count) + { + return "en"; + } + } + + count = GetCount(text, AutoDetectWordsDanish); + if (count > bestCount) + { + int norwegianCount = GetCount(text, "ut", "deg", "meg", "merkelig", "mye", "spørre"); + int dutchCount = GetCount(text, AutoDetectWordsDutch); + int swedishCount = GetCount(text, AutoDetectWordsSwedish); + if (norwegianCount < 2 && dutchCount < count && swedishCount < count) + { + return "da"; + } + } + + count = GetCount(text, AutoDetectWordsNorwegian); + if (count > bestCount) + { + int danishCount = GetCount(text, "siger", "dig", "mig", "mærkelig", "tilbage", "spørge"); + int dutchCount = GetCount(text, AutoDetectWordsDutch); + int swedishCount = GetCount(text, AutoDetectWordsSwedish); + if (danishCount < 2 && dutchCount < count && swedishCount < count) + { + return "no"; + } + } + + count = GetCount(text, AutoDetectWordsSwedish); + if (count > bestCount) + { + return "sv"; + } + + count = GetCount(text, AutoDetectWordsSpanish); + if (count > bestCount) + { + int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not spanish words + int portugueseCount = GetCount(text, "[NnCc]ão", "Então", "h?ouve", "pessoal", "rapariga", "tivesse", "fizeste", + "jantar", "conheço", "atenção", "foste", "milhões", "devias", "ganhar", "raios"); // not spanish words + if (frenchCount < 2 && portugueseCount < 2) + { + return "es"; + } + } + + count = GetCount(text, AutoDetectWordsItalian); + if (count > bestCount) + { + int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not italian words + if (frenchCount < 2) + { + return "it"; + } + } + + count = GetCount(text, AutoDetectWordsFrench); + if (count > bestCount) + { + int romanianCount = GetCount(text, "[Vv]reau", "[Ss]înt", "[Aa]cum", "pentru", "domnule", "aici"); + if (romanianCount < 5) + { + return "fr"; + } + } + + count = GetCount(text, AutoDetectWordsPortuguese); + if (count > bestCount) + { + return "pt"; // Portuguese + } + + count = GetCount(text, AutoDetectWordsGerman); + if (count > bestCount) + { + return "de"; + } + + count = GetCount(text, AutoDetectWordsDutch); + if (count > bestCount) + { + return "nl"; + } + + count = GetCount(text, AutoDetectWordsPolish); + if (count > bestCount) + { + return "pl"; + } + + count = GetCount(text, AutoDetectWordsGreek); + if (count > bestCount) + { + return "el"; // Greek + } + + count = GetCount(text, AutoDetectWordsRussian); + if (count > bestCount) + { + var bulgarianCount = GetCount(text, AutoDetectWordsBulgarian); + if (bulgarianCount > count) + { + return "bg"; // Bulgarian + } + + var ukranianCount = GetCount(text, AutoDetectWordsUkrainian); + if (ukranianCount > count) + { + return "uk"; // Ukrainian + } + + return "ru"; // Russian + } + + count = GetCount(text, AutoDetectWordsUkrainian); + if (count > bestCount) + { + return "uk"; // Ukrainian + } + + count = GetCount(text, AutoDetectWordsBulgarian); + if (count > bestCount) + { + return "bg"; // Bulgarian + } + + count = GetCount(text, AutoDetectWordsAlbanian); + if (count > bestCount) + { + return "sq"; // Albanian + } + + count = GetCount(text, AutoDetectWordsArabic); + if (count > bestCount) + { + int hebrewCount = GetCount(text, AutoDetectWordsHebrew); + int farsiCount = GetCount(text, AutoDetectWordsFarsi); + if (hebrewCount < count && farsiCount < count) + { + return "ar"; // Arabic + } + } + + count = GetCount(text, AutoDetectWordsHebrew); + if (count > bestCount) + { + return "he"; // Hebrew + } + + count = GetCount(text, AutoDetectWordsFarsi); + if (count > bestCount) + { + return "fa"; // Farsi (Persian) + } + + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); + if (count > bestCount) + { + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); + if (croatianCount > serbianCount) + { + return "hr"; // Croatian + } + + return "sr"; // Serbian + } + + count = GetCount(text, AutoDetectWordsVietnamese); + if (count > bestCount) + { + return "vi"; // Vietnamese + } + + count = GetCount(text, AutoDetectWordsHungarian); + if (count > bestCount) + { + return "hu"; // Hungarian + } + + count = GetCount(text, AutoDetectWordsTurkish); + if (count > bestCount) + { + return "tr"; // Turkish + } + + count = GetCount(text, AutoDetectWordsIndonesian); + if (count > bestCount) + { + return "id"; // Indonesian + } + + count = GetCount(text, AutoDetectWordsThai); + if (count > 10 || count > bestCount) + { + return "th"; // Thai + } + + count = GetCount(text, AutoDetectWordsKorean); + if (count > 10 || count > bestCount) + { + return "ko"; // Korean + } + + count = GetCount(text, AutoDetectWordsFinnish); + if (count > bestCount) + { + return "fi"; // Finnish + } + + count = GetCount(text, AutoDetectWordsRomanian); + if (count > bestCount) + { + return "ro"; // Romanian + } + + count = GetCountContains(text, "シ", "ュ", "シン", "シ", "ン", "ユ"); + count += GetCountContains(text, "イ", "ン", "チ", "ェ", "ク", "ハ"); + count += GetCountContains(text, "シ", "ュ", "う", "シ", "ン", "サ"); + count += GetCountContains(text, "シ", "ュ", "シ", "ン", "だ", "う"); + if (count > bestCount * 2) + { + return "ja"; // Japanese - not tested... + } + + count = GetCountContains(text, "是", "是早", "吧", "的", "爱", "上好"); + count += GetCountContains(text, "的", "啊", "好", "好", "亲", "的"); + count += GetCountContains(text, "谢", "走", "吧", "晚", "上", "好"); + count += GetCountContains(text, "来", "卡", "拉", "吐", "滚", "他"); + if (count > bestCount * 2) + { + return "zh"; // Chinese (simplified) - not tested... + } + + count = GetCount(text, AutoDetectWordsCzechAndSlovak); + if (count > bestCount) + { + var lithuanianCount = GetCount(text, AutoDetectWordsLithuanian); + int finnishCount = GetCount(text, AutoDetectWordsFinnish); + if (lithuanianCount <= count && finnishCount < count) + { + int czechWordsCount = GetCount(text, AutoDetectWordsCzech); + int slovakWordsCount = GetCount(text, AutoDetectWordsSlovak); + if (czechWordsCount >= slovakWordsCount) + { + return "cs"; // Czech + } + + return "sk"; // Slovak + } + } + + count = GetCount(text, AutoDetectWordsLatvian); + if (count > bestCount * 1.2) + { + return "lv"; + } + + count = GetCount(text, AutoDetectWordsLithuanian); + if (count > bestCount) + { + return "lt"; + } + + count = GetCount(text, AutoDetectWordsHindi); + if (count > bestCount) + { + return "hi"; + } + + count = GetCount(text, AutoDetectWordsUrdu); + if (count > bestCount) + { + return "ur"; + } + + count = GetCount(text, AutoDetectWordsSinhalese); + if (count > bestCount) + { + return "sl"; + } + + count = GetCount(text, AutoDetectWordsMacedonian); + if (count > bestCount) + { + return "mk"; + } + + return string.Empty; + } + + public static string AutoDetectGoogleLanguage(Subtitle subtitle) + { + return AutoDetectGoogleLanguageOrNull(subtitle) ?? "en"; + } + + public static string AutoDetectGoogleLanguageOrNull(Subtitle subtitle) + { + var s = new Subtitle(subtitle); + s.RemoveEmptyLines(); + var allText = s.GetAllTexts(500000); + string languageId = AutoDetectGoogleLanguage(allText, s.Paragraphs.Count / 14); + if (string.IsNullOrEmpty(languageId)) + { + languageId = GetEncodingViaLetter(allText); + } + + if (string.IsNullOrEmpty(languageId)) + { + languageId = null; + } + return languageId; + } + + public static string AutoDetectLanguageName(string languageName, Subtitle subtitle) + { + if (string.IsNullOrEmpty(languageName)) + { + languageName = "en_US"; + } + + int bestCount = subtitle.Paragraphs.Count / 14; + + string text = subtitle.GetAllTexts(); + List dictionaryNames = Utilities.GetDictionaryLanguages(); + + bool containsEnGb = false; + bool containsEnUs = false; + bool containsHrHr = false; + bool containsSrLatn = false; + foreach (string name in dictionaryNames) + { + if (name.Contains("[en_GB]")) + { + containsEnGb = true; + } + + if (name.Contains("[en_US]")) + { + containsEnUs = true; + } + + if (name.Contains("[hr_HR]")) + { + containsHrHr = true; + } + + if (name.Contains("[sr_Latn]")) + { + containsSrLatn = true; + } + } + + foreach (string name in dictionaryNames) + { + string shortName = string.Empty; + int start = name.IndexOf('['); + int end = name.IndexOf(']'); + if (start >= 0 && end > start) + { + start++; + shortName = name.Substring(start, end - start); + } + + int count; + switch (shortName.Replace("-", "_").ToLowerInvariant()) + { + case "da_dk": + count = GetCount(text, AutoDetectWordsDanish); + if (count > bestCount) + { + int norwegianCount = GetCount(text, "ut", "deg", "meg", "merkelig", "mye", "spørre"); + int dutchCount = GetCount(text, AutoDetectWordsDutch); + if (norwegianCount < 2 && dutchCount < count) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "nb_no": + count = GetCount(text, AutoDetectWordsNorwegian); + if (count > bestCount) + { + int danishCount = GetCount(text, "siger", "dig", "mig", "mærkelig", "tilbage", "spørge"); + int dutchCount = GetCount(text, AutoDetectWordsDutch); + if (danishCount < 2 && dutchCount < count) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "sv_se": + count = GetCount(text, AutoDetectWordsSwedish); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "en_us": + count = GetCount(text, AutoDetectWordsEnglish); + if (count > bestCount) + { + int dutchCount = GetCount(text, AutoDetectWordsDutch); + if (dutchCount < count) + { + languageName = shortName; + bestCount = count; + if (containsEnGb) + { + int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); + int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); + if (gbCount > usCount) + { + languageName = "en_GB"; + } + } + } + } + break; + case "en_gb": + count = GetCount(text, AutoDetectWordsEnglish); + if (count > bestCount) + { + int dutchCount = GetCount(text, AutoDetectWordsDutch); + if (dutchCount < count) + { + languageName = shortName; + bestCount = count; + if (containsEnUs) + { + int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); + int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); + if (gbCount < usCount) + { + languageName = "en_US"; + } + } + } + } + break; + case "es_any": + case "es_es": + count = GetCount(text, AutoDetectWordsSpanish); + if (count > bestCount) + { + int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not spanish words + int portugueseCount = GetCount(text, "[NnCc]ão", "Então", "h?ouve", "pessoal", "rapariga", "tivesse", "fizeste", + "jantar", "conheço", "atenção", "foste", "milhões", "devias", "ganhar", "raios"); // not spanish words + if (frenchCount < 2 && portugueseCount < 2) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "it_it": + count = GetCount(text, AutoDetectWordsItalian); + if (count > bestCount) + { + int frenchCount = GetCount(text, "[Cc]'est", "pas", "vous", "pour", "suis", "Pourquoi", "maison", "souviens", "quelque"); // not italian words + int spanishCount = GetCount(text, "Hola", "nada", "Vamos", "pasa", "los", "como"); // not italian words + if (frenchCount < 2 && spanishCount < 2) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "fr_fr": + count = GetCount(text, AutoDetectWordsFrench); + if (count > bestCount) + { + int romanianCount = GetCount(text, "[Vv]reau", "[Ss]înt", "[Aa]cum", "pentru", "domnule", "aici"); + int spanishCount = GetCount(text, "Hola", "nada", "Vamos", "pasa", "los", "como"); // not french words + int italianCount = GetCount(text, AutoDetectWordsItalian); + if (romanianCount < 5 && spanishCount < 2 && italianCount < 2) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "de_de": + count = GetCount(text, AutoDetectWordsGerman); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "nl_nl": + count = GetCount(text, AutoDetectWordsDutch); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "pl_pl": + count = GetCount(text, AutoDetectWordsPolish); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "el_gr": + count = GetCount(text, AutoDetectWordsGreek); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "ru_ru": + count = GetCount(text, AutoDetectWordsRussian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "uk_ua": + count = GetCount(text, AutoDetectWordsUkrainian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "ro_ro": + count = GetCount(text, AutoDetectWordsRomanian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "hr_hr": // Croatian + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); + if (count > bestCount) + { + bestCount = count; + languageName = shortName; + if (containsSrLatn) + { + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); + if (serbianCount > croatianCount) + { + languageName = "sr-Latn"; + } + } + } + break; + case "sr_latn": // Serbian (Latin) + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + if (containsHrHr) + { + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); + if (serbianCount < croatianCount) + { + languageName = "hr_HR"; + } + } + } + break; + case "sr": // Serbian (Cyrillic) + count = GetCount(text, AutoDetectWordsSerbianCyrillic); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "pt_pt": // Portuguese Portugal + case "pt_br": // Portuguese Brazil + count = GetCount(text, AutoDetectWordsPortuguese); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "hu_hu": // Hungarian + count = GetCount(text, AutoDetectWordsHungarian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "cs_cz": // Czech + count = GetCount(text, AutoDetectWordsCzech); + if (count > bestCount) + { + var lithuanianCount = GetCount(text, AutoDetectWordsLithuanian); + if (count > lithuanianCount) + { + languageName = shortName; + bestCount = count; + } + } + break; + case "sk_sk": // Slovak + count = GetCount(text, AutoDetectWordsSlovak); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "lv_lv": // Latvian + count = GetCount(text, AutoDetectWordsLatvian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "lt_lt": // Lithuanian + case "lt": // Lithuanian (Neutral) + count = GetCount(text, AutoDetectWordsLithuanian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "hi_in": // Hindi + case "hi": + count = GetCount(text, AutoDetectWordsHindi); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "ur_ur": // Urdu + case "ur": + count = GetCount(text, AutoDetectWordsUrdu); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "sl_sl": // Sinhalese + case "sl": + count = GetCount(text, AutoDetectWordsSinhalese); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "tr_tr": // Turkish + count = GetCount(text, AutoDetectWordsTurkish); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "he_il": // Hebrew + count = GetCount(text, AutoDetectWordsHebrew); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "vi_vn": // Vietnamese + count = GetCount(text, AutoDetectWordsVietnamese); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "ar": // Arabic + case "ar_ar": + count = GetCount(text, AutoDetectWordsArabic); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "sq_al": // Albanian + count = GetCount(text, AutoDetectWordsAlbanian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "id_id": // Indonesian + count = GetCount(text, AutoDetectWordsIndonesian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "ko_kr": // Korean + count = GetCount(text, AutoDetectWordsKorean); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "mk_mk": // Macedonian + count = GetCount(text, AutoDetectWordsMacedonian); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + case "fa": // Farsi (Persian) + case "fa_ir": + count = GetCount(text, AutoDetectWordsFarsi); + if (count > bestCount) + { + languageName = shortName; + bestCount = count; + } + break; + } + } + return languageName; + } + + public static Encoding DetectAnsiEncoding(byte[] buffer) + { + try + { + var greekEncoding = Encoding.GetEncoding(1253); // Greek + if (GetCount(greekEncoding.GetString(buffer), AutoDetectWordsGreek) > 5) + { + return greekEncoding; + } + + var russianEncoding = Encoding.GetEncoding(1251); // Cyrillic + var textEnc1251 = russianEncoding.GetString(buffer); + if (GetCount(textEnc1251, "что", "быть", "весь", "этот", "один", "такой") > 5) // Russian + { + return russianEncoding; + } + + var wordMinCount = buffer.Length / 300; + + if (GetCount(textEnc1251, AutoDetectWordsSerbianCyrillic) > wordMinCount) + { + return russianEncoding; + } + + if (GetCount(textEnc1251, "Какво", "тук", "може", "Как", "Ваше", "какво") > 5) // Bulgarian + { + return russianEncoding; + } + + + if (GetCount(textEnc1251, AutoDetectWordsSerbianCyrillic) > wordMinCount) // Serbian + { + return russianEncoding; + } + + var encoding1250 = Encoding.GetEncoding(1250); // Central European/Eastern European: Polish, Czech, Slovak, Hungarian, Slovene, Bosnian, Croatian, Serbian (Latin script), Romanian (before 1993 spelling reform) and Albanian + var textEnc1250 = encoding1250.GetString(buffer); + if (GetCount(textEnc1250, AutoDetectWordsCroatianAndSerbian) > wordMinCount) + { + return encoding1250; + } + + if (GetCount(textEnc1250, AutoDetectWordsCzechAndSlovak) > wordMinCount) + { + return encoding1250; + } + + if (GetCount(textEnc1250, AutoDetectWordsHungarian) > wordMinCount) + { + return encoding1250; + } + + var encoding1252 = Encoding.GetEncoding(1252); // Latin - English and some other Western languages + var textEnc1252 = encoding1252.GetString(buffer); + var pol1252Count = GetCount(textEnc1252, AutoDetectWordsPolish); + var pol1250Count = GetCount(textEnc1250, AutoDetectWordsPolish); + var encoding28592 = Encoding.GetEncoding(28592); + var pol28592Count = GetCount(encoding28592.GetString(buffer), AutoDetectWordsPolish); + if (pol1252Count > wordMinCount || pol1250Count > wordMinCount) + { + if (pol28592Count > pol1250Count && pol28592Count > pol1252Count) + { + return encoding28592; + } + + return pol1252Count > pol1250Count ? encoding1252 : encoding1250; + } + + var dutchCount1252 = GetCount(textEnc1252, AutoDetectWordsDutch); + if (dutchCount1252 > wordMinCount) + { + return encoding1252; + } + + var danishCount1252 = GetCount(textEnc1252, AutoDetectWordsDanish); + if (danishCount1252 > wordMinCount) + { + return encoding1252; + } + + var swedishCount1252 = GetCount(textEnc1252, AutoDetectWordsSwedish); + if (swedishCount1252 > wordMinCount) + { + return encoding1252; + } + + var germanCount1252 = GetCount(textEnc1252, AutoDetectWordsGerman); + if (germanCount1252 > wordMinCount) + { + return encoding1252; + } + + var spanishCount1252 = GetCount(textEnc1252, AutoDetectWordsSpanish); + if (textEnc1252.Contains('¡')) + { + spanishCount1252 += 5; + } + if (textEnc1252.Contains('¿')) + { + spanishCount1252 += 5; + } + if (spanishCount1252 > wordMinCount && (textEnc1252.Contains('ú') || textEnc1252.Contains('í') || textEnc1252.Contains('ú') || textEnc1252.Contains('ó') || textEnc1252.Contains('é') || textEnc1252.Contains('ñ'))) + { + return encoding1252; + } + + var russianEncoding28595 = Encoding.GetEncoding(28595); // Russian + if (GetCount(russianEncoding28595.GetString(buffer), "что", "быть", "весь", "этот", "один", "такой") > 5) // Russian + { + return russianEncoding28595; + } + + var thaiEncoding = Encoding.GetEncoding(874); // Thai + var thaiCount = GetCount(thaiEncoding.GetString(buffer), AutoDetectWordsThai); + var koreanEncoding = Encoding.GetEncoding(949); // Korean + var koreanCount = GetCount(koreanEncoding.GetString(buffer), AutoDetectWordsKorean); + if (thaiCount > 10 || koreanCount > 10) + { + return thaiCount > koreanCount ? thaiEncoding : koreanEncoding; + } + + var arabicEncoding = Encoding.GetEncoding(1256); // Arabic + var hebrewEncoding = Encoding.GetEncoding(1255); // Hebrew + if (GetCount(arabicEncoding.GetString(buffer), AutoDetectWordsArabic) > 5) + { + if (GetCount(hebrewEncoding.GetString(buffer), AutoDetectWordsHebrew) > 10) + { + return hebrewEncoding; + } + + return arabicEncoding; + } + if (GetCount(hebrewEncoding.GetString(buffer), AutoDetectWordsHebrew) > 5) + { + return hebrewEncoding; + } + + if (GetCount(textEnc1250, "să", "şi", "văzut", "regulă", "găsit", "viaţă") > 99) + { + return encoding1250; + } + + var encoding28591 = Encoding.GetEncoding(28591); + var frenchCount1252 = GetCount(textEnc1252, AutoDetectWordsFrench); + if (frenchCount1252 > wordMinCount) + { + var frenchCount28591 = GetCount(encoding28591.GetString(buffer), AutoDetectWordsFrench); + return frenchCount28591 > frenchCount1252 ? encoding28591 : encoding1252; + } + + var portugueseCount1252 = GetCount(textEnc1252, AutoDetectWordsPortuguese); + if (portugueseCount1252 > wordMinCount) + { + var portugueseCount28591 = GetCount(encoding28591.GetString(buffer), AutoDetectWordsPortuguese); + return portugueseCount28591 > portugueseCount1252 ? encoding28591 : encoding1252; + } + + var encoding1254 = Encoding.GetEncoding(1254); + var turkishText = encoding1254.GetString(buffer); + var turkish1254Count = GetCount(turkishText, AutoDetectWordsTurkish); + if (turkish1254Count > wordMinCount) + { + return encoding1254; + } + + var encoding = EncodingTools.DetectInputCodepage(buffer); + if (encoding.CodePage == 28599) + { + return Encoding.GetEncoding(1254); // prefer 1254 over 28599 + } + + return encoding; + } + catch + { + return Encoding.Default; + } + } + + public static Encoding GetEncodingFromFile(string fileName, bool skipAnsiAuto = false) + { + var encoding = Encoding.Default; + + try + { + foreach (var enc in Configuration.AvailableEncodings) + { + if (enc.WebName == Configuration.Settings.General.DefaultEncoding && enc.WebName != Encoding.Unicode.WebName && enc.WebName != Encoding.UTF8.WebName) + { + encoding = enc; + break; + } + } + + using (var file = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + var bom = new byte[12]; // Get the byte-order mark, if there is one + file.Position = 0; + file.Read(bom, 0, bom.Length); + if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) + { + encoding = Encoding.UTF8; + } + else if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0 && bom[3] == 0) + { + encoding = Encoding.GetEncoding(12000); // UTF-32 (LE) + } + else if (bom[0] == 0xff && bom[1] == 0xfe) + { + encoding = Encoding.Unicode; + } + else if (bom[0] == 0xfe && bom[1] == 0xff) // utf-16 and ucs-2 + { + encoding = Encoding.BigEndianUnicode; + } + else if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) // ucs-4 + { + encoding = Encoding.GetEncoding(12001); // UTF-32 (BE) + } + else if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76 && (bom[3] == 0x38 || bom[3] == 0x39 || bom[3] == 0x2b || bom[3] == 0x2f)) // utf-7 + { + encoding = Encoding.UTF7; + } + else if (file.Length > bom.Length) + { + long length = file.Length; + if (length > 500000) + { + length = 500000; + } + + file.Position = 0; + var buffer = new byte[length]; + file.Read(buffer, 0, buffer.Length); + + if (IsUtf8(buffer, out var couldBeUtf8)) + { + encoding = Encoding.UTF8; + } + else if (couldBeUtf8 && Configuration.Settings.General.DefaultEncoding.StartsWith("UTF-8", StringComparison.Ordinal)) + { // keep utf-8 encoding if it's default + encoding = Encoding.UTF8; + } + else if (couldBeUtf8 && fileName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase) && Encoding.Default.GetString(buffer).ToLowerInvariant().Replace('\'', '"').Contains("encoding=\"utf-8\"")) + { // keep utf-8 encoding for xml files with utf-8 in header (without any utf-8 encoded characters, but with only allowed utf-8 characters) + encoding = Encoding.UTF8; + } + else if (Configuration.Settings.General.AutoGuessAnsiEncoding && !skipAnsiAuto) + { + var autoDetected = DetectAnsiEncoding(buffer); + if (autoDetected != null) + { + return autoDetected.CodePage < 874 ? Encoding.Default : autoDetected; + } + } + } + } + } + catch + { + // ignored + } + return encoding; + } + + /// + /// Will try to determine if buffer is utf-8 encoded or not. + /// If any non-utf8 sequences are found then false is returned, if no utf8 multibytes sequences are found then false is returned. + /// + private static bool IsUtf8(byte[] buffer, out bool couldBeUtf8) + { + couldBeUtf8 = false; + int utf8Count = 0; + int i = 0; + while (i < buffer.Length - 3) + { + byte b = buffer[i]; + if (b > 127) + { + if (b >= 194 && b <= 223 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191) + { // 2-byte sequence + utf8Count++; + i++; + } + else if (b >= 224 && b <= 239 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191 && + buffer[i + 2] >= 128 && buffer[i + 2] <= 191) + { // 3-byte sequence + utf8Count++; + i += 2; + } + else if (b >= 240 && b <= 244 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191 && + buffer[i + 2] >= 128 && buffer[i + 2] <= 191 && + buffer[i + 3] >= 128 && buffer[i + 3] <= 191) + { // 4-byte sequence + utf8Count++; + i += 3; + } + else + { + return false; + } + } + i++; + } + couldBeUtf8 = true; + if (utf8Count == 0) + { + return false; // not utf-8 (no characters utf-8 encoded...) + } + + return true; + } + + private static readonly char[] RightToLeftLetters = string.Join(string.Empty, AutoDetectWordsArabic.Concat(AutoDetectWordsHebrew).Concat(AutoDetectWordsFarsi).Concat(AutoDetectWordsUrdu)).Distinct().ToArray(); + + public static bool CouldBeRightToLeftLanguage(Subtitle subtitle) + { + const int maxNumberOfLinesToCheck = 20; + var max = Math.Min(maxNumberOfLinesToCheck, subtitle.Paragraphs.Count); + for (int i = 0; i < max; i++) + { + if (ContainsRightToLeftLetter(subtitle.Paragraphs[i].Text)) + { + return true; + } + } + return false; + } + + public static bool ContainsRightToLeftLetter(string text) + { + foreach (var letter in RightToLeftLetters) + { + if (text.Contains(letter)) + { + return true; + } + } + return false; + } + + public static string GetEncodingViaLetter(string text) + { + var dictionary = new Dictionary(); + + // Arabic + int count = 0; + foreach (var letter in "غظضذخثتشرقصفعسنملكيطحزوهدجبا") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("ar", count); + + // Korean + count = 0; + foreach (var letter in "가나다라마바사아자차카타파하아야어여오요우유으이") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("ko", count); + + // Japanese + count = 0; + foreach (var letter in "あいうえおかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよらりるれろわをん") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("ja", count); + + // Thai + count = 0; + foreach (var letter in "กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("th", count); + + // Sinhalese + count = 0; + foreach (var letter in "අආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖකඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරලවශෂසහළෆ්ාැෑිීුූෘෙේෛොෝෞෟ෦෧෨෩෪෫෬෭෮෯") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("sl", count); + + // Urdu + count = 0; + foreach (var letter in "ﺍﺎﺁﺂﺏﺑﺒﺐﭖﭘﭙﭗﺕﺗﺘﺖﭦﭨﭩﭧﺙﺛﺜﺚﺝﺟﺠﺞﭺﭼﭽﭻﺡﺣﺤﺢﺥﺧﺨﺦﺩﺪﺫﺬﺭﺮﮌﮍﺯﺰﮊﮋﺱﺳﺴﺲﺵﺷﺸﺶﺹﺻﺼﺺﺽﺿﻀﺾﻁﻃﻄﻂﻅﻇﻈﻆﻉﻋﻌﻊﻍﻏﻐﻎﻑﻓﻔﻒﻕﻗﻘﻖﻙﻛﻜﻚﻻﻼﻝﻟﻠﻞﻡﻣﻤﻢﻥﻧﻨﻦﻭﻮﮮﮯﮦﮨﮩﮧﯼﯾﯿﯽﮪﮬﮭﮫﴽﴼﺀﺋﺌﹱﹷﹹ") + { + if (text.Contains(letter)) + { + count++; + } + } + dictionary.Add("ur", count); + + var maxHitsLanguage = dictionary.FirstOrDefault(x => x.Value == dictionary.Values.Max()); + return maxHitsLanguage.Value > 0 ? maxHitsLanguage.Key : null; + } + + public static bool IsLanguageWithoutPeriods(string language) + { + return language == "ko" || language == "zh" || language == "ja" || language == "th"; + } + } +} diff --git a/libse/ManagedBitmap.cs b/libse/Common/ManagedBitmap.cs similarity index 99% rename from libse/ManagedBitmap.cs rename to libse/Common/ManagedBitmap.cs index 879fb67e7..88ee983bd 100644 --- a/libse/ManagedBitmap.cs +++ b/libse/Common/ManagedBitmap.cs @@ -2,7 +2,7 @@ using System.IO; using System.IO.Compression; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class ManagedBitmap { diff --git a/libse/MergeLinesSameTextUtils.cs b/libse/Common/MergeLinesSameTextUtils.cs similarity index 99% rename from libse/MergeLinesSameTextUtils.cs rename to libse/Common/MergeLinesSameTextUtils.cs index ba502fa32..b67dfae38 100644 --- a/libse/MergeLinesSameTextUtils.cs +++ b/libse/Common/MergeLinesSameTextUtils.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class MergeLinesSameTextUtils { diff --git a/libse/MergeShortLinesUtils.cs b/libse/Common/MergeShortLinesUtils.cs similarity index 98% rename from libse/MergeShortLinesUtils.cs rename to libse/Common/MergeShortLinesUtils.cs index 259d3a278..ce764d808 100644 --- a/libse/MergeShortLinesUtils.cs +++ b/libse/Common/MergeShortLinesUtils.cs @@ -1,6 +1,6 @@ using System; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class MergeShortLinesUtils { diff --git a/libse/MovieHasher.cs b/libse/Common/MovieHasher.cs similarity index 97% rename from libse/MovieHasher.cs rename to libse/Common/MovieHasher.cs index e0ca376dd..24fde3c00 100644 --- a/libse/MovieHasher.cs +++ b/libse/Common/MovieHasher.cs @@ -2,7 +2,7 @@ using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { /// /// Hash from OpenSubtitles: http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes diff --git a/libse/MurMurHash3.cs b/libse/Common/MurMurHash3.cs similarity index 98% rename from libse/MurMurHash3.cs rename to libse/Common/MurMurHash3.cs index 726031f91..0314d5d8e 100644 --- a/libse/MurMurHash3.cs +++ b/libse/Common/MurMurHash3.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { // The MurmurHash3 algorithm was created by Austin Appleby and put into the public domain. See http://code.google.com/p/smhasher // This code is based on https://gist.github.com/automatonic/3725443 diff --git a/libse/NativeMethods.cs b/libse/Common/NativeMethods.cs similarity index 99% rename from libse/NativeMethods.cs rename to libse/Common/NativeMethods.cs index 4d3bc8eb4..f02087390 100644 --- a/libse/NativeMethods.cs +++ b/libse/Common/NativeMethods.cs @@ -1,7 +1,7 @@ using System; using System.Runtime.InteropServices; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { internal static class NativeMethods { diff --git a/libse/NetflixImsc11JapaneseToAss.cs b/libse/Common/NetflixImsc11JapaneseToAss.cs similarity index 99% rename from libse/NetflixImsc11JapaneseToAss.cs rename to libse/Common/NetflixImsc11JapaneseToAss.cs index c9fb08b11..ec18f428f 100644 --- a/libse/NetflixImsc11JapaneseToAss.cs +++ b/libse/Common/NetflixImsc11JapaneseToAss.cs @@ -5,7 +5,7 @@ using System.Globalization; using System.Text; using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class NetflixImsc11JapaneseToAss { diff --git a/libse/NikseBitmap.cs b/libse/Common/NikseBitmap.cs similarity index 99% rename from libse/NikseBitmap.cs rename to libse/Common/NikseBitmap.cs index 5ac3ea61e..10aef18a4 100644 --- a/libse/NikseBitmap.cs +++ b/libse/Common/NikseBitmap.cs @@ -5,7 +5,7 @@ using System.Drawing.Imaging; using System.IO; using System.Runtime.InteropServices; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class RunLengthTwoParts { diff --git a/libse/NoBreakAfterItem.cs b/libse/Common/NoBreakAfterItem.cs similarity index 97% rename from libse/NoBreakAfterItem.cs rename to libse/Common/NoBreakAfterItem.cs index 9e3cda15c..3bb3de1c5 100644 --- a/libse/NoBreakAfterItem.cs +++ b/libse/Common/NoBreakAfterItem.cs @@ -1,7 +1,7 @@ using System; using System.Text.RegularExpressions; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class NoBreakAfterItem : IComparable { diff --git a/libse/Paragraph.cs b/libse/Common/Paragraph.cs similarity index 95% rename from libse/Paragraph.cs rename to libse/Common/Paragraph.cs index aaf0dec3f..ac377745b 100644 --- a/libse/Paragraph.cs +++ b/libse/Common/Paragraph.cs @@ -1,122 +1,122 @@ -using System; - -namespace Nikse.SubtitleEdit.Core -{ - public class Paragraph - { - public int Number { get; set; } - - public string Text { get; set; } - - public TimeCode StartTime { get; set; } - - public TimeCode EndTime { get; set; } - - public TimeCode Duration => new TimeCode(EndTime.TotalMilliseconds - StartTime.TotalMilliseconds); - - public bool Forced { get; set; } - - public string Extra { get; set; } - - public bool IsComment { get; set; } - - public string Actor { get; set; } - public string Region { get; set; } - - public string MarginL { get; set; } - public string MarginR { get; set; } - public string MarginV { get; set; } - - public string Effect { get; set; } - - public int Layer { get; set; } - - public string Id { get; } - - public string Language { get; set; } - - public string Style { get; set; } - - public bool NewSection { get; set; } - - public string Bookmark { get; set; } - - public bool IsDefault => Math.Abs(StartTime.TotalMilliseconds) < 0.01 && Math.Abs(EndTime.TotalMilliseconds) < 0.01 && string.IsNullOrEmpty(Text); - - private static string GenerateId() - { - return Guid.NewGuid().ToString(); - } - - public Paragraph() : this(new TimeCode(), new TimeCode(), string.Empty) - { - } - - public Paragraph(TimeCode startTime, TimeCode endTime, string text) - { - StartTime = startTime; - EndTime = endTime; - Text = text; - Id = GenerateId(); - } - - public Paragraph(Paragraph paragraph, bool generateNewId = true) - { - Number = paragraph.Number; - Text = paragraph.Text; - StartTime = new TimeCode(paragraph.StartTime.TotalMilliseconds); - EndTime = new TimeCode(paragraph.EndTime.TotalMilliseconds); - Forced = paragraph.Forced; - Extra = paragraph.Extra; - IsComment = paragraph.IsComment; - Actor = paragraph.Actor; - Region = paragraph.Region; - MarginL = paragraph.MarginL; - MarginR = paragraph.MarginR; - MarginV = paragraph.MarginV; - Effect = paragraph.Effect; - Layer = paragraph.Layer; - Id = generateNewId ? GenerateId() : paragraph.Id; - Language = paragraph.Language; - Style = paragraph.Style; - NewSection = paragraph.NewSection; - Bookmark = paragraph.Bookmark; - } - - public Paragraph(string text, double startTotalMilliseconds, double endTotalMilliseconds) - : this(new TimeCode(startTotalMilliseconds), new TimeCode(endTotalMilliseconds), text) - { - } - - public void Adjust(double factor, double adjustmentInSeconds) - { - if (StartTime.IsMaxTime) - { - return; - } - - StartTime.TotalMilliseconds = StartTime.TotalMilliseconds * factor + adjustmentInSeconds * TimeCode.BaseUnit; - EndTime.TotalMilliseconds = EndTime.TotalMilliseconds * factor + adjustmentInSeconds * TimeCode.BaseUnit; - } - - public override string ToString() - { - return $"{StartTime} --> {EndTime} {Text}"; - } - - public int NumberOfLines => Utilities.GetNumberOfLines(Text); - - public double WordsPerMinute - { - get - { - if (string.IsNullOrEmpty(Text)) - { - return 0; - } - - return 60.0 / Duration.TotalSeconds * Text.CountWords(); - } - } - } -} +using System; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public class Paragraph + { + public int Number { get; set; } + + public string Text { get; set; } + + public TimeCode StartTime { get; set; } + + public TimeCode EndTime { get; set; } + + public TimeCode Duration => new TimeCode(EndTime.TotalMilliseconds - StartTime.TotalMilliseconds); + + public bool Forced { get; set; } + + public string Extra { get; set; } + + public bool IsComment { get; set; } + + public string Actor { get; set; } + public string Region { get; set; } + + public string MarginL { get; set; } + public string MarginR { get; set; } + public string MarginV { get; set; } + + public string Effect { get; set; } + + public int Layer { get; set; } + + public string Id { get; } + + public string Language { get; set; } + + public string Style { get; set; } + + public bool NewSection { get; set; } + + public string Bookmark { get; set; } + + public bool IsDefault => Math.Abs(StartTime.TotalMilliseconds) < 0.01 && Math.Abs(EndTime.TotalMilliseconds) < 0.01 && string.IsNullOrEmpty(Text); + + private static string GenerateId() + { + return Guid.NewGuid().ToString(); + } + + public Paragraph() : this(new TimeCode(), new TimeCode(), string.Empty) + { + } + + public Paragraph(TimeCode startTime, TimeCode endTime, string text) + { + StartTime = startTime; + EndTime = endTime; + Text = text; + Id = GenerateId(); + } + + public Paragraph(Paragraph paragraph, bool generateNewId = true) + { + Number = paragraph.Number; + Text = paragraph.Text; + StartTime = new TimeCode(paragraph.StartTime.TotalMilliseconds); + EndTime = new TimeCode(paragraph.EndTime.TotalMilliseconds); + Forced = paragraph.Forced; + Extra = paragraph.Extra; + IsComment = paragraph.IsComment; + Actor = paragraph.Actor; + Region = paragraph.Region; + MarginL = paragraph.MarginL; + MarginR = paragraph.MarginR; + MarginV = paragraph.MarginV; + Effect = paragraph.Effect; + Layer = paragraph.Layer; + Id = generateNewId ? GenerateId() : paragraph.Id; + Language = paragraph.Language; + Style = paragraph.Style; + NewSection = paragraph.NewSection; + Bookmark = paragraph.Bookmark; + } + + public Paragraph(string text, double startTotalMilliseconds, double endTotalMilliseconds) + : this(new TimeCode(startTotalMilliseconds), new TimeCode(endTotalMilliseconds), text) + { + } + + public void Adjust(double factor, double adjustmentInSeconds) + { + if (StartTime.IsMaxTime) + { + return; + } + + StartTime.TotalMilliseconds = StartTime.TotalMilliseconds * factor + adjustmentInSeconds * TimeCode.BaseUnit; + EndTime.TotalMilliseconds = EndTime.TotalMilliseconds * factor + adjustmentInSeconds * TimeCode.BaseUnit; + } + + public override string ToString() + { + return $"{StartTime} --> {EndTime} {Text}"; + } + + public int NumberOfLines => Utilities.GetNumberOfLines(Text); + + public double WordsPerMinute + { + get + { + if (string.IsNullOrEmpty(Text)) + { + return 0; + } + + return 60.0 / Duration.TotalSeconds * Text.CountWords(); + } + } + } +} diff --git a/libse/PlainTextImporter.cs b/libse/Common/PlainTextImporter.cs similarity index 99% rename from libse/PlainTextImporter.cs rename to libse/Common/PlainTextImporter.cs index 46c219bfd..e2a93d06f 100644 --- a/libse/PlainTextImporter.cs +++ b/libse/Common/PlainTextImporter.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class PlainTextImporter { diff --git a/libse/Position.cs b/libse/Common/Position.cs similarity index 83% rename from libse/Position.cs rename to libse/Common/Position.cs index 41abfb102..e11c09f5b 100644 --- a/libse/Position.cs +++ b/libse/Common/Position.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class Position { diff --git a/libse/RealFFT.cs b/libse/Common/RealFFT.cs similarity index 99% rename from libse/RealFFT.cs rename to libse/Common/RealFFT.cs index b06437083..d29d8d390 100644 --- a/libse/RealFFT.cs +++ b/libse/Common/RealFFT.cs @@ -4,7 +4,7 @@ using System; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class RealFFT { diff --git a/libse/RegexUtils.cs b/libse/Common/RegexUtils.cs similarity index 99% rename from libse/RegexUtils.cs rename to libse/Common/RegexUtils.cs index 16447905c..68fcc074d 100644 --- a/libse/RegexUtils.cs +++ b/libse/Common/RegexUtils.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.RegularExpressions; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class RegexUtils { diff --git a/libse/RegistryUtil.cs b/libse/Common/RegistryUtil.cs similarity index 93% rename from libse/RegistryUtil.cs rename to libse/Common/RegistryUtil.cs index 11790da76..3c754c302 100644 --- a/libse/RegistryUtil.cs +++ b/libse/Common/RegistryUtil.cs @@ -1,7 +1,7 @@ -using Microsoft.Win32; -using System.Security; +using System.Security; +using Microsoft.Win32; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class RegistryUtil { diff --git a/libse/ReplaceExpression.cs b/libse/Common/ReplaceExpression.cs similarity index 95% rename from libse/ReplaceExpression.cs rename to libse/Common/ReplaceExpression.cs index 8d0ec9be9..bb2b64c87 100644 --- a/libse/ReplaceExpression.cs +++ b/libse/Common/ReplaceExpression.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class ReplaceExpression { diff --git a/libse/RichTextToPlainText.cs b/libse/Common/RichTextToPlainText.cs similarity index 97% rename from libse/RichTextToPlainText.cs rename to libse/Common/RichTextToPlainText.cs index 7723ad016..554965b84 100644 --- a/libse/RichTextToPlainText.cs +++ b/libse/Common/RichTextToPlainText.cs @@ -1,268 +1,268 @@ -using Nikse.SubtitleEdit.Core.Interfaces; -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; - -namespace Nikse.SubtitleEdit.Core -{ - /// - /// Rich Text to plain text - /// - /// - /// Translated from Python located at: - /// http://stackoverflow.com/a/188877/448 - /// to C# by Chris Benard - http://chrisbenard.net/2014/08/20/Extract-Text-from-RTF-in-.Net - /// - public static class RichTextToPlainText - { - - public static IRtfTextConverter NativeRtfTextConverter { get; set; } - - private class StackEntry - { - public int NumberOfCharactersToSkip { get; private set; } - public bool Ignorable { get; private set; } - - public StackEntry(int numberOfCharactersToSkip, bool ignorable) - { - NumberOfCharactersToSkip = numberOfCharactersToSkip; - Ignorable = ignorable; - } - } - - private static readonly Regex RtfRegex = new Regex(@"\\([a-z]{1,32})(-?\d{1,10})?[ ]?|\\'([0-9a-f]{2})|\\([^a-z])|([{}])|[\r\n]+|(.)", RegexOptions.Singleline | RegexOptions.IgnoreCase); - - private static readonly List Destinations = new List - { - "aftncn","aftnsep","aftnsepc","annotation","atnauthor","atndate","atnicn","atnid", - "atnparent","atnref","atntime","atrfend","atrfstart","author","background", - "bkmkend","bkmkstart","blipuid","buptim","category","colorschememapping", - "colortbl","comment","company","creatim","datafield","datastore","defchp","defpap", - "do","doccomm","docvar","dptxbxtext","ebcend","ebcstart","factoidname","falt", - "fchars","ffdeftext","ffentrymcr","ffexitmcr","ffformat","ffhelptext","ffl", - "ffname","ffstattext","field","file","filetbl","fldinst","fldrslt","fldtype", - "fname","fontemb","fontfile","fonttbl","footer","footerf","footerl","footerr", - "footnote","formfield","ftncn","ftnsep","ftnsepc","g","generator","gridtbl", - "header","headerf","headerl","headerr","hl","hlfr","hlinkbase","hlloc","hlsrc", - "hsv","htmltag","info","keycode","keywords","latentstyles","lchars","levelnumbers", - "leveltext","lfolevel","linkval","list","listlevel","listname","listoverride", - "listoverridetable","listpicture","liststylename","listtable","listtext", - "lsdlockedexcept","macc","maccPr","mailmerge","maln","malnScr","manager","margPr", - "mbar","mbarPr","mbaseJc","mbegChr","mborderBox","mborderBoxPr","mbox","mboxPr", - "mchr","mcount","mctrlPr","md","mdeg","mdegHide","mden","mdiff","mdPr","me", - "mendChr","meqArr","meqArrPr","mf","mfName","mfPr","mfunc","mfuncPr","mgroupChr", - "mgroupChrPr","mgrow","mhideBot","mhideLeft","mhideRight","mhideTop","mhtmltag", - "mlim","mlimloc","mlimlow","mlimlowPr","mlimupp","mlimuppPr","mm","mmaddfieldname", - "mmath","mmathPict","mmathPr","mmaxdist","mmc","mmcJc","mmconnectstr", - "mmconnectstrdata","mmcPr","mmcs","mmdatasource","mmheadersource","mmmailsubject", - "mmodso","mmodsofilter","mmodsofldmpdata","mmodsomappedname","mmodsoname", - "mmodsorecipdata","mmodsosort","mmodsosrc","mmodsotable","mmodsoudl", - "mmodsoudldata","mmodsouniquetag","mmPr","mmquery","mmr","mnary","mnaryPr", - "mnoBreak","mnum","mobjDist","moMath","moMathPara","moMathParaPr","mopEmu", - "mphant","mphantPr","mplcHide","mpos","mr","mrad","mradPr","mrPr","msepChr", - "mshow","mshp","msPre","msPrePr","msSub","msSubPr","msSubSup","msSubSupPr","msSup", - "msSupPr","mstrikeBLTR","mstrikeH","mstrikeTLBR","mstrikeV","msub","msubHide", - "msup","msupHide","mtransp","mtype","mvertJc","mvfmf","mvfml","mvtof","mvtol", - "mzeroAsc","mzeroDesc","mzeroWid","nesttableprops","nextfile","nonesttables", - "objalias","objclass","objdata","object","objname","objsect","objtime","oldcprops", - "oldpprops","oldsprops","oldtprops","oleclsid","operator","panose","password", - "passwordhash","pgp","pgptbl","picprop","pict","pn","pnseclvl","pntext","pntxta", - "pntxtb","printim","private","propname","protend","protstart","protusertbl","pxe", - "result","revtbl","revtim","rsidtbl","rxe","shp","shpgrp","shpinst", - "shppict","shprslt","shptxt","sn","sp","staticval","stylesheet","subject","sv", - "svb","tc","template","themedata","title","txe","ud","upr","userprops", - "wgrffmtfilter","windowcaption","writereservation","writereservhash","xe","xform", - "xmlattrname","xmlattrvalue","xmlclose","xmlname","xmlnstbl", - "xmlopen" - }; - - private static readonly Dictionary SpecialCharacters = new Dictionary - { - { "par", "\n" }, - { "sect", "\n\n" }, - { "page", "\n\n" }, - { "line", "\n" }, - { "tab", "\t" }, - { "emdash", "\u2014" }, - { "endash", "\u2013" }, - { "emspace", "\u2003" }, - { "enspace", "\u2002" }, - { "qmspace", "\u2005" }, - { "bullet", "\u2022" }, - { "lquote", "\u2018" }, - { "rquote", "\u2019" }, - { "ldblquote", "\u201C" }, - { "rdblquote", "\u201D" }, - }; - - /// - /// Strip RTF Tags from RTF Text - /// - /// RTF formatted text - /// Plain text from RTF - public static string ConvertToText(string inputRtf) - { - if (inputRtf == null) - { - return null; - } - - // use interface converter if available - if (NativeRtfTextConverter != null) - { - return NativeRtfTextConverter.RtfToText(inputRtf); - } - - var stack = new Stack(); - bool ignorable = false; // Whether this group (and all inside it) are "ignorable". - int ucskip = 1; // Number of ASCII characters to skip after a unicode character. - int curskip = 0; // Number of ASCII characters left to skip - var outList = new List(); // Output buffer. - - MatchCollection matches = RtfRegex.Matches(inputRtf); - - if (matches.Count > 0) - { - foreach (Match match in matches) - { - string word = match.Groups[1].Value; - string arg = match.Groups[2].Value; - string hex = match.Groups[3].Value; - string character = match.Groups[4].Value; - string brace = match.Groups[5].Value; - string tchar = match.Groups[6].Value; - - if (!string.IsNullOrEmpty(brace)) - { - curskip = 0; - if (brace == "{") - { - // Push state - stack.Push(new StackEntry(ucskip, ignorable)); - } - else if (brace == "}") - { - // Pop state - StackEntry entry = stack.Pop(); - ucskip = entry.NumberOfCharactersToSkip; - ignorable = entry.Ignorable; - } - } - else if (!string.IsNullOrEmpty(character)) // \x (not a letter) - { - curskip = 0; - if (character == "~") - { - if (!ignorable) - { - outList.Add("\xA0"); - } - } - else if ("{}\\".Contains(character)) - { - if (!ignorable) - { - outList.Add(character); - } - } - else if (character == "*") - { - ignorable = true; - } - } - else if (!string.IsNullOrEmpty(word)) // \foo - { - curskip = 0; - if (Destinations.Contains(word)) - { - ignorable = true; - } - else if (ignorable) - { - } - else if (SpecialCharacters.ContainsKey(word)) - { - outList.Add(SpecialCharacters[word]); - } - else if (word == "uc") - { - ucskip = int.Parse(arg); - } - else if (word == "u") - { - int c = int.Parse(arg); - if (c < 0) - { - c += 0x10000; - } - outList.Add(char.ConvertFromUtf32(c)); - curskip = ucskip; - } - } - else if (!string.IsNullOrEmpty(hex)) // \'xx - { - if (curskip > 0) - { - curskip -= 1; - } - else if (!ignorable) - { - int c = int.Parse(hex, System.Globalization.NumberStyles.HexNumber); - outList.Add(char.ConvertFromUtf32(c)); - } - } - else if (!string.IsNullOrEmpty(tchar)) - { - if (curskip > 0) - { - curskip -= 1; - } - else if (!ignorable) - { - outList.Add(tchar); - } - } - } - } - return string.Join(string.Empty, outList.ToArray()); - } - - public static string ConvertToRtf(string value) - { - if (string.IsNullOrWhiteSpace(value)) - { - return string.Empty; - } - - // use interface converter if available - if (NativeRtfTextConverter != null) - { - NativeRtfTextConverter.TextToRtf(value); - } - - // special RTF chars - var backslashed = new StringBuilder(value); - backslashed.Replace(@"\", @"\\"); - backslashed.Replace(@"{", @"\{"); - backslashed.Replace(@"}", @"\}"); - backslashed.Replace(Environment.NewLine, @"\par" + Environment.NewLine); - - // convert string char by char - var sb = new StringBuilder(); - foreach (char character in backslashed.ToString()) - { - if (character <= 0x7f) - { - sb.Append(character); - } - else - { - sb.Append("\\u" + Convert.ToUInt32(character) + "?"); - } - } - - return @"{\rtf1\ansi\ansicpg1252\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard " + sb + @"\par" + Environment.NewLine + "}"; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Interfaces; + +namespace Nikse.SubtitleEdit.Core.Common +{ + /// + /// Rich Text to plain text + /// + /// + /// Translated from Python located at: + /// http://stackoverflow.com/a/188877/448 + /// to C# by Chris Benard - http://chrisbenard.net/2014/08/20/Extract-Text-from-RTF-in-.Net + /// + public static class RichTextToPlainText + { + + public static IRtfTextConverter NativeRtfTextConverter { get; set; } + + private class StackEntry + { + public int NumberOfCharactersToSkip { get; private set; } + public bool Ignorable { get; private set; } + + public StackEntry(int numberOfCharactersToSkip, bool ignorable) + { + NumberOfCharactersToSkip = numberOfCharactersToSkip; + Ignorable = ignorable; + } + } + + private static readonly Regex RtfRegex = new Regex(@"\\([a-z]{1,32})(-?\d{1,10})?[ ]?|\\'([0-9a-f]{2})|\\([^a-z])|([{}])|[\r\n]+|(.)", RegexOptions.Singleline | RegexOptions.IgnoreCase); + + private static readonly List Destinations = new List + { + "aftncn","aftnsep","aftnsepc","annotation","atnauthor","atndate","atnicn","atnid", + "atnparent","atnref","atntime","atrfend","atrfstart","author","background", + "bkmkend","bkmkstart","blipuid","buptim","category","colorschememapping", + "colortbl","comment","company","creatim","datafield","datastore","defchp","defpap", + "do","doccomm","docvar","dptxbxtext","ebcend","ebcstart","factoidname","falt", + "fchars","ffdeftext","ffentrymcr","ffexitmcr","ffformat","ffhelptext","ffl", + "ffname","ffstattext","field","file","filetbl","fldinst","fldrslt","fldtype", + "fname","fontemb","fontfile","fonttbl","footer","footerf","footerl","footerr", + "footnote","formfield","ftncn","ftnsep","ftnsepc","g","generator","gridtbl", + "header","headerf","headerl","headerr","hl","hlfr","hlinkbase","hlloc","hlsrc", + "hsv","htmltag","info","keycode","keywords","latentstyles","lchars","levelnumbers", + "leveltext","lfolevel","linkval","list","listlevel","listname","listoverride", + "listoverridetable","listpicture","liststylename","listtable","listtext", + "lsdlockedexcept","macc","maccPr","mailmerge","maln","malnScr","manager","margPr", + "mbar","mbarPr","mbaseJc","mbegChr","mborderBox","mborderBoxPr","mbox","mboxPr", + "mchr","mcount","mctrlPr","md","mdeg","mdegHide","mden","mdiff","mdPr","me", + "mendChr","meqArr","meqArrPr","mf","mfName","mfPr","mfunc","mfuncPr","mgroupChr", + "mgroupChrPr","mgrow","mhideBot","mhideLeft","mhideRight","mhideTop","mhtmltag", + "mlim","mlimloc","mlimlow","mlimlowPr","mlimupp","mlimuppPr","mm","mmaddfieldname", + "mmath","mmathPict","mmathPr","mmaxdist","mmc","mmcJc","mmconnectstr", + "mmconnectstrdata","mmcPr","mmcs","mmdatasource","mmheadersource","mmmailsubject", + "mmodso","mmodsofilter","mmodsofldmpdata","mmodsomappedname","mmodsoname", + "mmodsorecipdata","mmodsosort","mmodsosrc","mmodsotable","mmodsoudl", + "mmodsoudldata","mmodsouniquetag","mmPr","mmquery","mmr","mnary","mnaryPr", + "mnoBreak","mnum","mobjDist","moMath","moMathPara","moMathParaPr","mopEmu", + "mphant","mphantPr","mplcHide","mpos","mr","mrad","mradPr","mrPr","msepChr", + "mshow","mshp","msPre","msPrePr","msSub","msSubPr","msSubSup","msSubSupPr","msSup", + "msSupPr","mstrikeBLTR","mstrikeH","mstrikeTLBR","mstrikeV","msub","msubHide", + "msup","msupHide","mtransp","mtype","mvertJc","mvfmf","mvfml","mvtof","mvtol", + "mzeroAsc","mzeroDesc","mzeroWid","nesttableprops","nextfile","nonesttables", + "objalias","objclass","objdata","object","objname","objsect","objtime","oldcprops", + "oldpprops","oldsprops","oldtprops","oleclsid","operator","panose","password", + "passwordhash","pgp","pgptbl","picprop","pict","pn","pnseclvl","pntext","pntxta", + "pntxtb","printim","private","propname","protend","protstart","protusertbl","pxe", + "result","revtbl","revtim","rsidtbl","rxe","shp","shpgrp","shpinst", + "shppict","shprslt","shptxt","sn","sp","staticval","stylesheet","subject","sv", + "svb","tc","template","themedata","title","txe","ud","upr","userprops", + "wgrffmtfilter","windowcaption","writereservation","writereservhash","xe","xform", + "xmlattrname","xmlattrvalue","xmlclose","xmlname","xmlnstbl", + "xmlopen" + }; + + private static readonly Dictionary SpecialCharacters = new Dictionary + { + { "par", "\n" }, + { "sect", "\n\n" }, + { "page", "\n\n" }, + { "line", "\n" }, + { "tab", "\t" }, + { "emdash", "\u2014" }, + { "endash", "\u2013" }, + { "emspace", "\u2003" }, + { "enspace", "\u2002" }, + { "qmspace", "\u2005" }, + { "bullet", "\u2022" }, + { "lquote", "\u2018" }, + { "rquote", "\u2019" }, + { "ldblquote", "\u201C" }, + { "rdblquote", "\u201D" }, + }; + + /// + /// Strip RTF Tags from RTF Text + /// + /// RTF formatted text + /// Plain text from RTF + public static string ConvertToText(string inputRtf) + { + if (inputRtf == null) + { + return null; + } + + // use interface converter if available + if (NativeRtfTextConverter != null) + { + return NativeRtfTextConverter.RtfToText(inputRtf); + } + + var stack = new Stack(); + bool ignorable = false; // Whether this group (and all inside it) are "ignorable". + int ucskip = 1; // Number of ASCII characters to skip after a unicode character. + int curskip = 0; // Number of ASCII characters left to skip + var outList = new List(); // Output buffer. + + MatchCollection matches = RtfRegex.Matches(inputRtf); + + if (matches.Count > 0) + { + foreach (Match match in matches) + { + string word = match.Groups[1].Value; + string arg = match.Groups[2].Value; + string hex = match.Groups[3].Value; + string character = match.Groups[4].Value; + string brace = match.Groups[5].Value; + string tchar = match.Groups[6].Value; + + if (!string.IsNullOrEmpty(brace)) + { + curskip = 0; + if (brace == "{") + { + // Push state + stack.Push(new StackEntry(ucskip, ignorable)); + } + else if (brace == "}") + { + // Pop state + StackEntry entry = stack.Pop(); + ucskip = entry.NumberOfCharactersToSkip; + ignorable = entry.Ignorable; + } + } + else if (!string.IsNullOrEmpty(character)) // \x (not a letter) + { + curskip = 0; + if (character == "~") + { + if (!ignorable) + { + outList.Add("\xA0"); + } + } + else if ("{}\\".Contains(character)) + { + if (!ignorable) + { + outList.Add(character); + } + } + else if (character == "*") + { + ignorable = true; + } + } + else if (!string.IsNullOrEmpty(word)) // \foo + { + curskip = 0; + if (Destinations.Contains(word)) + { + ignorable = true; + } + else if (ignorable) + { + } + else if (SpecialCharacters.ContainsKey(word)) + { + outList.Add(SpecialCharacters[word]); + } + else if (word == "uc") + { + ucskip = int.Parse(arg); + } + else if (word == "u") + { + int c = int.Parse(arg); + if (c < 0) + { + c += 0x10000; + } + outList.Add(char.ConvertFromUtf32(c)); + curskip = ucskip; + } + } + else if (!string.IsNullOrEmpty(hex)) // \'xx + { + if (curskip > 0) + { + curskip -= 1; + } + else if (!ignorable) + { + int c = int.Parse(hex, System.Globalization.NumberStyles.HexNumber); + outList.Add(char.ConvertFromUtf32(c)); + } + } + else if (!string.IsNullOrEmpty(tchar)) + { + if (curskip > 0) + { + curskip -= 1; + } + else if (!ignorable) + { + outList.Add(tchar); + } + } + } + } + return string.Join(string.Empty, outList.ToArray()); + } + + public static string ConvertToRtf(string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return string.Empty; + } + + // use interface converter if available + if (NativeRtfTextConverter != null) + { + NativeRtfTextConverter.TextToRtf(value); + } + + // special RTF chars + var backslashed = new StringBuilder(value); + backslashed.Replace(@"\", @"\\"); + backslashed.Replace(@"{", @"\{"); + backslashed.Replace(@"}", @"\}"); + backslashed.Replace(Environment.NewLine, @"\par" + Environment.NewLine); + + // convert string char by char + var sb = new StringBuilder(); + foreach (char character in backslashed.ToString()) + { + if (character <= 0x7f) + { + sb.Append(character); + } + else + { + sb.Append("\\u" + Convert.ToUInt32(character) + "?"); + } + } + + return @"{\rtf1\ansi\ansicpg1252\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard " + sb + @"\par" + Environment.NewLine + "}"; + } + } +} diff --git a/libse/RulesProfile.cs b/libse/Common/RulesProfile.cs similarity index 98% rename from libse/RulesProfile.cs rename to libse/Common/RulesProfile.cs index 5495bcffb..ff4865316 100644 --- a/libse/RulesProfile.cs +++ b/libse/Common/RulesProfile.cs @@ -1,11 +1,11 @@ -using Nikse.SubtitleEdit.Core.Enums; -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Enums; +using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class RulesProfile { diff --git a/libse/SccPositionAndStyle.cs b/libse/Common/SccPositionAndStyle.cs similarity index 92% rename from libse/SccPositionAndStyle.cs rename to libse/Common/SccPositionAndStyle.cs index 5df895c1f..5143d2175 100644 --- a/libse/SccPositionAndStyle.cs +++ b/libse/Common/SccPositionAndStyle.cs @@ -1,6 +1,6 @@ using System.Drawing; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class SccPositionAndStyle { diff --git a/libse/SccPositionAndStyleTable.cs b/libse/Common/SccPositionAndStyleTable.cs similarity index 99% rename from libse/SccPositionAndStyleTable.cs rename to libse/Common/SccPositionAndStyleTable.cs index 4d6613419..c3045d922 100644 --- a/libse/SccPositionAndStyleTable.cs +++ b/libse/Common/SccPositionAndStyleTable.cs @@ -2,7 +2,7 @@ using System.Collections.ObjectModel; using System.Drawing; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class SccPositionAndStyleTable { diff --git a/libse/SceneChangeHelper.cs b/libse/Common/SceneChangeHelper.cs similarity index 98% rename from libse/SceneChangeHelper.cs rename to libse/Common/SceneChangeHelper.cs index d8911b4d6..00f566cc9 100644 --- a/libse/SceneChangeHelper.cs +++ b/libse/Common/SceneChangeHelper.cs @@ -3,7 +3,7 @@ using System.Globalization; using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class SceneChangeHelper { diff --git a/libse/SeJsonParser.cs b/libse/Common/SeJsonParser.cs similarity index 99% rename from libse/SeJsonParser.cs rename to libse/Common/SeJsonParser.cs index bcf03193f..04d4cc3a2 100644 --- a/libse/SeJsonParser.cs +++ b/libse/Common/SeJsonParser.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class SeJsonParser { diff --git a/libse/SeJsonValidator.cs b/libse/Common/SeJsonValidator.cs similarity index 99% rename from libse/SeJsonValidator.cs rename to libse/Common/SeJsonValidator.cs index 4414fd936..9d6034a6d 100644 --- a/libse/SeJsonValidator.cs +++ b/libse/Common/SeJsonValidator.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Text; -using static Nikse.SubtitleEdit.Core.SeJsonParser; +using static Nikse.SubtitleEdit.Core.Common.SeJsonParser; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { /// /// Validate json file - a simple C# json validator. diff --git a/libse/SeLogger.cs b/libse/Common/SeLogger.cs similarity index 98% rename from libse/SeLogger.cs rename to libse/Common/SeLogger.cs index 36568e1eb..ff0bd39c2 100644 --- a/libse/SeLogger.cs +++ b/libse/Common/SeLogger.cs @@ -3,7 +3,7 @@ using System.Globalization; using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class SeLogger { diff --git a/libse/Settings.cs b/libse/Common/Settings.cs similarity index 98% rename from libse/Settings.cs rename to libse/Common/Settings.cs index 7cf6f5502..f4f897b4f 100644 --- a/libse/Settings.cs +++ b/libse/Common/Settings.cs @@ -1,8587 +1,8587 @@ -using Nikse.SubtitleEdit.Core.Enums; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Nikse.SubtitleEdit.Core -{ - // The settings classes are built for easy xml-serialization (makes save/load code simple) - // ...but the built-in serialization is too slow - so a custom (de-)serialization has been used! - - public class RecentFileEntry - - { - public string FileName { get; set; } - public string OriginalFileName { get; set; } - public string VideoFileName { get; set; } - public int FirstVisibleIndex { get; set; } - public int FirstSelectedIndex { get; set; } - public long VideoOffsetInMs { get; set; } - } - - public class RecentFilesSettings - { - private const int MaxRecentFiles = 25; - - [XmlArrayItem("FileName")] - public List Files { get; set; } - - public RecentFilesSettings() - { - Files = new List(); - } - - public void Add(string fileName, int firstVisibleIndex, int firstSelectedIndex, string videoFileName, string originalFileName, long videoOffset) - { - Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList(); - - if (string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(originalFileName)) - { - fileName = originalFileName; - originalFileName = null; - } - - if (string.IsNullOrEmpty(fileName)) - { - Files.Insert(0, new RecentFileEntry { FileName = string.Empty }); - return; - } - - var existingEntry = GetRecentFile(fileName, originalFileName); - if (existingEntry == null) - { - Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName }); - } - else - { - Files.Remove(existingEntry); - existingEntry.FirstSelectedIndex = firstSelectedIndex; - existingEntry.VideoOffsetInMs = videoOffset; - existingEntry.FirstVisibleIndex = firstVisibleIndex; - existingEntry.VideoFileName = videoFileName; - existingEntry.OriginalFileName = originalFileName; - Files.Insert(0, existingEntry); - } - Files = Files.Take(MaxRecentFiles).ToList(); - } - - public void Add(string fileName, string videoFileName, string originalFileName) - { - Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList(); - - var existingEntry = GetRecentFile(fileName, originalFileName); - if (existingEntry == null) - { - Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName }); - } - else - { - Files.Remove(existingEntry); - Files.Insert(0, existingEntry); - } - Files = Files.Take(MaxRecentFiles).ToList(); - } - - private RecentFileEntry GetRecentFile(string fileName, string originalFileName) - { - RecentFileEntry existingEntry; - if (string.IsNullOrEmpty(originalFileName)) - { - existingEntry = Files.FirstOrDefault(p => !string.IsNullOrEmpty(p.FileName) && - string.IsNullOrEmpty(p.OriginalFileName) && - p.FileName.Equals(fileName, StringComparison.OrdinalIgnoreCase)); - } - else - { - existingEntry = Files.FirstOrDefault(p => !string.IsNullOrEmpty(p.FileName) && - !string.IsNullOrEmpty(p.OriginalFileName) && - p.FileName.Equals(fileName, StringComparison.OrdinalIgnoreCase) && - p.OriginalFileName.Equals(originalFileName, StringComparison.OrdinalIgnoreCase)); - } - return existingEntry; - } - } - - public class ToolsSettings - { - public int StartSceneIndex { get; set; } - public int EndSceneIndex { get; set; } - public int VerifyPlaySeconds { get; set; } - public bool FixShortDisplayTimesAllowMoveStartTime { get; set; } - public bool RemoveEmptyLinesBetweenText { get; set; } - public string MusicSymbol { get; set; } - public string MusicSymbolReplace { get; set; } - public string UnicodeSymbolsToInsert { get; set; } - public bool SpellCheckAutoChangeNames { get; set; } - public bool SpellCheckAutoChangeNamesUseSuggestions { get; set; } - public bool CheckOneLetterWords { get; set; } - public bool SpellCheckEnglishAllowInQuoteAsIng { get; set; } - public bool RememberUseAlwaysList { get; set; } - public bool SpellCheckShowCompletedMessage { get; set; } - public bool OcrFixUseHardcodedRules { get; set; } - public int OcrBinaryImageCompareRgbThreshold { get; set; } - public int OcrTesseract4RgbThreshold { get; set; } - public string OcrAddLetterRow1 { get; set; } - public string OcrAddLetterRow2 { get; set; } - public string OcrTrainFonts { get; set; } - public string OcrTrainMergedLetters { get; set; } - public string OcrTrainSrtFile { get; set; } - public string Interjections { get; set; } - public string MicrosoftBingApiId { get; set; } - public string MicrosoftTranslatorApiKey { get; set; } - public string MicrosoftTranslatorTokenEndpoint { get; set; } - public string MicrosoftTranslatorCategory { get; set; } - public string GoogleApiV2Key { get; set; } - public bool GoogleApiV2KeyInfoShow { get; set; } - public bool GoogleTranslateNoKeyWarningShow { get; set; } - public int GoogleApiV1ChunkSize { get; set; } - public string GoogleTranslateLastTargetLanguage { get; set; } - public bool TranslateAllowSplit { get; set; } - public bool ListViewSyntaxColorDurationSmall { get; set; } - public bool ListViewSyntaxColorDurationBig { get; set; } - public bool ListViewSyntaxColorOverlap { get; set; } - public bool ListViewSyntaxColorLongLines { get; set; } - public bool ListViewSyntaxColorWideLines { get; set; } - public bool ListViewSyntaxColorGap { get; set; } - public bool ListViewSyntaxMoreThanXLines { get; set; } - public Color ListViewSyntaxErrorColor { get; set; } - public Color ListViewUnfocusedSelectedColor { get; set; } - public bool ListViewShowColumnEndTime { get; set; } - public bool ListViewShowColumnDuration { get; set; } - public bool ListViewShowColumnCharsPerSec { get; set; } - public bool ListViewShowColumnWordsPerMin { get; set; } - public bool ListViewShowColumnGap { get; set; } - public bool ListViewShowColumnActor { get; set; } - public bool ListViewShowColumnRegion { get; set; } - public bool SplitAdvanced { get; set; } - public string SplitOutputFolder { get; set; } - public int SplitNumberOfParts { get; set; } - public string SplitVia { get; set; } - public bool JoinCorrectTimeCodes { get; set; } - public int JoinAddMs { get; set; } - public string LastShowEarlierOrLaterSelection { get; set; } - public string NewEmptyTranslationText { get; set; } - public string BatchConvertOutputFolder { get; set; } - public bool BatchConvertOverwriteExisting { get; set; } - public bool BatchConvertSaveInSourceFolder { get; set; } - public bool BatchConvertRemoveFormatting { get; set; } - public bool BatchConvertRemoveStyle { get; set; } - public bool BatchConvertBridgeGaps { get; set; } - public bool BatchConvertFixCasing { get; set; } - public bool BatchConvertRemoveTextForHI { get; set; } - public bool BatchConvertFixCommonErrors { get; set; } - public bool BatchConvertMultipleReplace { get; set; } - public bool BatchConvertFixRtl { get; set; } - public string BatchConvertFixRtlMode { get; set; } - public bool BatchConvertSplitLongLines { get; set; } - public bool BatchConvertAutoBalance { get; set; } - public bool BatchConvertSetMinDisplayTimeBetweenSubtitles { get; set; } - public bool BatchConvertMergeShortLines { get; set; } - public bool BatchConvertRemoveLineBreaks { get; set; } - public bool BatchConvertMergeSameText { get; set; } - public bool BatchConvertMergeSameTimeCodes { get; set; } - public bool BatchConvertChangeFrameRate { get; set; } - public bool BatchConvertChangeSpeed { get; set; } - public bool BatchConvertAdjustDisplayDuration { get; set; } - public bool BatchConvertApplyDurationLimits { get; set; } - public bool BatchConvertDeleteLines { get; set; } - public bool BatchConvertOffsetTimeCodes { get; set; } - public string BatchConvertLanguage { get; set; } - public string BatchConvertFormat { get; set; } - public string BatchConvertAssStyles { get; set; } - public string BatchConvertSsaStyles { get; set; } - public bool BatchConvertUseStyleFromSource { get; set; } - public string BatchConvertExportCustomTextTemplate { get; set; } - public bool BatchConvertTsOverrideXPosition { get; set; } - public bool BatchConvertTsOverrideYPosition { get; set; } - public int BatchConvertTsOverrideBottomMargin { get; set; } - public string BatchConvertTsOverrideHAlign { get; set; } - public int BatchConvertTsOverrideHMargin { get; set; } - public bool BatchConvertTsOverrideScreenSize { get; set; } - public int BatchConvertTsScreenWidth { get; set; } - public int BatchConvertTsScreenHeight { get; set; } - public string BatchConvertTsFileNameAppend { get; set; } - public bool BatchConvertTsOnlyTeletext { get; set; } - public string BatchConvertMkvLanguageCodeStyle { get; set; } - public string WaveformBatchLastFolder { get; set; } - public string ModifySelectionText { get; set; } - public string ModifySelectionRule { get; set; } - public bool ModifySelectionCaseSensitive { get; set; } - public string ExportVobSubFontName { get; set; } - public int ExportVobSubFontSize { get; set; } - public string ExportVobSubVideoResolution { get; set; } - public string ExportVobSubLanguage { get; set; } - public bool ExportVobSubSimpleRendering { get; set; } - public bool ExportVobAntiAliasingWithTransparency { get; set; } - public string ExportBluRayFontName { get; set; } - public int ExportBluRayFontSize { get; set; } - public string ExportFcpFontName { get; set; } - public string ExportFontNameOther { get; set; } - public int ExportFcpFontSize { get; set; } - public string ExportFcpImageType { get; set; } - public string ExportFcpPalNtsc { get; set; } - public string ExportBdnXmlImageType { get; set; } - public int ExportLastFontSize { get; set; } - public int ExportLastLineHeight { get; set; } - public int ExportLastBorderWidth { get; set; } - public bool ExportLastFontBold { get; set; } - public string ExportBluRayVideoResolution { get; set; } - public string ExportFcpVideoResolution { get; set; } - public Color ExportFontColor { get; set; } - public Color ExportBorderColor { get; set; } - public Color ExportShadowColor { get; set; } - public int ExportBoxBorderSize { get; set; } - public string ExportBottomMarginUnit { get; set; } - public int ExportBottomMarginPercent { get; set; } - public int ExportBottomMarginPixels { get; set; } - public string ExportLeftRightMarginUnit { get; set; } - public int ExportLeftRightMarginPercent { get; set; } - public int ExportLeftRightMarginPixels { get; set; } - public int ExportHorizontalAlignment { get; set; } - public int ExportBluRayBottomMarginPercent { get; set; } - public int ExportBluRayBottomMarginPixels { get; set; } - public int ExportBluRayShadow { get; set; } - public bool ExportBluRayRemoveSmallGaps { get; set; } - public string ExportCdgBackgroundImage { get; set; } - public int ExportCdgMarginLeft { get; set; } - public int ExportCdgMarginBottom { get; set; } - public string ExportCdgFormat { get; set; } - public int Export3DType { get; set; } - public int Export3DDepth { get; set; } - public int ExportLastShadowTransparency { get; set; } - public double ExportLastFrameRate { get; set; } - public bool ExportFullFrame { get; set; } - public bool ExportFcpFullPathUrl { get; set; } - public string ExportPenLineJoin { get; set; } - public bool FixCommonErrorsFixOverlapAllowEqualEndStart { get; set; } - public bool FixCommonErrorsSkipStepOne { get; set; } - public string ImportTextSplitting { get; set; } - public string ImportTextLineBreak { get; set; } - public bool ImportTextMergeShortLines { get; set; } - public bool ImportTextRemoveEmptyLines { get; set; } - public bool ImportTextAutoSplitAtBlank { get; set; } - public bool ImportTextRemoveLinesNoLetters { get; set; } - public bool ImportTextGenerateTimeCodes { get; set; } - public bool ImportTextTakeTimeCodeFromFileName { get; set; } - public bool ImportTextAutoBreak { get; set; } - public bool ImportTextAutoBreakAtEnd { get; set; } - public decimal ImportTextGap { get; set; } - public decimal ImportTextAutoSplitNumberOfLines { get; set; } - public string ImportTextAutoBreakAtEndMarkerText { get; set; } - public bool ImportTextDurationAuto { get; set; } - public decimal ImportTextFixedDuration { get; set; } - public string GenerateTimeCodePatterns { get; set; } - public string MusicSymbolStyle { get; set; } - public int BridgeGapMilliseconds { get; set; } - public string ExportCustomTemplates { get; set; } - public string ChangeCasingChoice { get; set; } - public bool UseNoLineBreakAfter { get; set; } - public string NoLineBreakAfterEnglish { get; set; } - public List FindHistory { get; set; } - public string ExportTextFormatText { get; set; } - public bool ExportTextRemoveStyling { get; set; } - public bool ExportTextShowLineNumbers { get; set; } - public bool ExportTextShowLineNumbersNewLine { get; set; } - public bool ExportTextShowTimeCodes { get; set; } - public bool ExportTextShowTimeCodesNewLine { get; set; } - public bool ExportTextNewLineAfterText { get; set; } - public bool ExportTextNewLineBetweenSubtitles { get; set; } - public string ExportTextTimeCodeFormat { get; set; } - public string ExportTextTimeCodeSeparator { get; set; } - public bool VideoOffsetKeepTimeCodes { get; set; } - public int MoveStartEndMs { get; set; } - public decimal AdjustDurationSeconds { get; set; } - public int AdjustDurationPercent { get; set; } - public string AdjustDurationLast { get; set; } - public bool AdjustDurationExtendOnly { get; set; } - public bool AutoBreakCommaBreakEarly { get; set; } - public bool AutoBreakDashEarly { get; set; } - public bool AutoBreakLineEndingEarly { get; set; } - public bool AutoBreakUsePixelWidth { get; set; } - public bool AutoBreakPreferBottomHeavy { get; set; } - public double AutoBreakPreferBottomPercent { get; set; } - public bool ApplyMinimumDurationLimit { get; set; } - public bool ApplyMaximumDurationLimit { get; set; } - public int MergeShortLinesMaxGap { get; set; } - public int MergeShortLinesMaxChars { get; set; } - public bool MergeShortLinesOnlyContinuous { get; set; } - public string ColumnPasteColumn { get; set; } - public string ColumnPasteOverwriteMode { get; set; } - - public ToolsSettings() - { - StartSceneIndex = 1; - EndSceneIndex = 1; - VerifyPlaySeconds = 2; - FixShortDisplayTimesAllowMoveStartTime = false; - RemoveEmptyLinesBetweenText = true; - MusicSymbol = "♪"; - MusicSymbolReplace = "♪,â™," + // ♪ + ♫ in UTF-8 opened as ANSI - ",," + // music symbols by subtitle creator - "#,*,¶"; // common music symbols - UnicodeSymbolsToInsert = "♪;♫;°;☺;☹;♥;©;☮;☯;Σ;∞;≡;⇒;π"; - SpellCheckAutoChangeNames = true; - SpellCheckAutoChangeNamesUseSuggestions = true; - OcrFixUseHardcodedRules = true; - OcrBinaryImageCompareRgbThreshold = 200; - OcrTesseract4RgbThreshold = 200; - OcrAddLetterRow1 = "♪;á;é;í;ó;ö;ő;ú;ü;ű;ç;ñ;å;¿"; - OcrAddLetterRow2 = "♫;Á;É;Í;Ó;Ö;Ő;Ú;Ü;Ű;Ç;Ñ;Å;¡"; - OcrTrainFonts = "Arial;Calibri;Corbel;Futura Std Book;Futura Bis;Helvetica Neue;Lucida Console;Tahoma;Trebuchet MS;Verdana"; - OcrTrainMergedLetters = "ff ft fi fj fy fl rf rt rv rw ry rt rz ryt tt TV tw yt yw wy wf ryt xy"; - Interjections = "Ah;Ahem;Ahh;Ahhh;Ahhhh;Eh;Ehh;Ehhh;Hm;Hmm;Hmmm;Huh;Mm;Mmm;Mmmm;Phew;Gah;Oh;Ohh;Ohhh;Ow;Oww;Owww;Ugh;Ughh;Uh;Uhh;Uhhh;Whew"; - MicrosoftTranslatorTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; - GoogleApiV2KeyInfoShow = true; - GoogleTranslateNoKeyWarningShow = true; - GoogleApiV1ChunkSize = 1500; - GoogleTranslateLastTargetLanguage = "en"; - TranslateAllowSplit = true; - CheckOneLetterWords = true; - SpellCheckEnglishAllowInQuoteAsIng = false; - SpellCheckShowCompletedMessage = true; - ListViewSyntaxColorDurationSmall = true; - ListViewSyntaxColorDurationBig = true; - ListViewSyntaxColorOverlap = true; - ListViewSyntaxColorLongLines = true; - ListViewSyntaxColorWideLines = false; - ListViewSyntaxMoreThanXLines = true; - ListViewSyntaxColorGap = true; - ListViewSyntaxErrorColor = Color.FromArgb(255, 180, 150); - ListViewUnfocusedSelectedColor = Color.LightBlue; - ListViewShowColumnEndTime = true; - ListViewShowColumnDuration = true; - SplitAdvanced = false; - SplitNumberOfParts = 3; - SplitVia = "Lines"; - JoinCorrectTimeCodes = true; - NewEmptyTranslationText = string.Empty; - BatchConvertLanguage = string.Empty; - BatchConvertTsOverrideBottomMargin = 5; // pct - BatchConvertTsScreenWidth = 1920; - BatchConvertTsScreenHeight = 1080; - BatchConvertTsOverrideHAlign = "center"; // left center right - BatchConvertTsOverrideHMargin = 5; // pct - BatchConvertTsFileNameAppend = ".{two-letter-country-code}"; - ModifySelectionRule = "Contains"; - ModifySelectionText = string.Empty; - GenerateTimeCodePatterns = "HH:mm:ss;yyyy-MM-dd;dddd dd MMMM yyyy
HH:mm:ss;dddd dd MMMM yyyy
hh:mm:ss tt;s"; - MusicSymbolStyle = "Double"; // 'Double' or 'Single' - ExportFontColor = Color.White; - ExportBorderColor = Color.FromArgb(255, 0, 0, 0); - ExportShadowColor = Color.FromArgb(255, 0, 0, 0); - ExportBoxBorderSize = 8; - ExportBottomMarginUnit = "%"; - ExportBottomMarginPercent = 5; - ExportBottomMarginPixels = 15; - ExportLeftRightMarginUnit = "%"; - ExportLeftRightMarginPercent = 5; - ExportLeftRightMarginPixels = 15; - ExportHorizontalAlignment = 1; // 1=center (0=left, 2=right) - ExportVobSubSimpleRendering = false; - ExportVobAntiAliasingWithTransparency = true; - ExportBluRayBottomMarginPercent = 5; - ExportBluRayBottomMarginPixels = 20; - ExportBluRayShadow = 1; - Export3DType = 0; - Export3DDepth = 0; - ExportCdgMarginLeft = 160; - ExportCdgMarginBottom = 67; - ExportLastShadowTransparency = 200; - ExportLastFrameRate = 24.0d; - ExportFullFrame = false; - ExportPenLineJoin = "Round"; - ExportFcpImageType = "Bmp"; - ExportFcpPalNtsc = "PAL"; - ExportLastBorderWidth = 4; - BridgeGapMilliseconds = 100; - ExportCustomTemplates = "SubRipÆÆ{number}\r\n{start} --> {end}\r\n{text}\r\n\r\nÆhh:mm:ss,zzzÆ[Do not modify]ÆæMicroDVDÆÆ{{start}}{{end}}{text}\r\nÆffÆ||Æ"; - UseNoLineBreakAfter = false; - NoLineBreakAfterEnglish = " Mrs.; Ms.; Mr.; Dr.; a; an; the; my; my own; your; his; our; their; it's; is; are;'s; 're; would;'ll;'ve;'d; will; that; which; who; whom; whose; whichever; whoever; wherever; each; either; every; all; both; few; many; sevaral; all; any; most; been; been doing; none; some; my own; your own; his own; her own; our own; their own; I; she; he; as per; as regards; into; onto; than; where as; abaft; aboard; about; above; across; afore; after; against; along; alongside; amid; amidst; among; amongst; anenst; apropos; apud; around; as; aside; astride; at; athwart; atop; barring; before; behind; below; beneath; beside; besides; between; betwixt; beyond; but; by; circa; ca; concerning; despite; down; during; except; excluding; following; for; forenenst; from; given; in; including; inside; into; lest; like; minus; modulo; near; next; of; off; on; onto; opposite; out; outside; over; pace; past; per; plus; pro; qua; regarding; round; sans; save; since; than; through; thru; throughout; thruout; till; to; toward; towards; under; underneath; unlike; until; unto; up; upon; versus; vs; via; vice; with; within; without; considering; respecting; one; two; another; three; our; five; six; seven; eight; nine; ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen; twenty; thirty; forty; fifty; sixty; seventy; eighty; ninety; hundred; thousand; million; billion; trillion; while; however; what; zero; little; enough; after; although; and; as; if; though; although; because; before; both; but; even; how; than; nor; or; only; unless; until; yet; was; were"; - FindHistory = new List(); - ExportTextFormatText = "None"; - ExportTextRemoveStyling = true; - ExportTextShowLineNumbersNewLine = true; - ExportTextShowTimeCodesNewLine = true; - ExportTextNewLineAfterText = true; - ExportTextNewLineBetweenSubtitles = true; - ImportTextLineBreak = "|"; - ImportTextAutoSplitNumberOfLines = 2; - ImportTextAutoSplitAtBlank = true; - ImportTextAutoBreakAtEndMarkerText = ".!?"; - ImportTextAutoBreakAtEnd = true; - MoveStartEndMs = 100; - AdjustDurationSeconds = 0.1m; - AdjustDurationPercent = 120; - AdjustDurationExtendOnly = true; - AutoBreakCommaBreakEarly = false; - AutoBreakDashEarly = true; - AutoBreakLineEndingEarly = false; - AutoBreakUsePixelWidth = true; - AutoBreakPreferBottomHeavy = true; - AutoBreakPreferBottomPercent = 5; - ApplyMinimumDurationLimit = true; - ApplyMaximumDurationLimit = true; - MergeShortLinesMaxGap = 250; - MergeShortLinesMaxChars = 50; - MergeShortLinesOnlyContinuous = true; - ColumnPasteColumn = "all"; - ColumnPasteOverwriteMode = "overwrite"; - } - } - - public class FcpExportSettings - { - public string FontName { get; set; } - public int FontSize { get; set; } - public string Alignment { get; set; } - public int Baseline { get; set; } - public Color Color { get; set; } - - public FcpExportSettings() - { - FontName = "Lucida Sans"; - FontSize = 36; - Alignment = "center"; - Baseline = 29; - Color = Color.WhiteSmoke; - } - } - - - public class WordListSettings - { - public string LastLanguage { get; set; } - public string NamesUrl { get; set; } - public bool UseOnlineNames { get; set; } - - public WordListSettings() - { - LastLanguage = "en-US"; - NamesUrl = "https://raw.githubusercontent.com/SubtitleEdit/subtitleedit/master/Dictionaries/names.xml"; - } - } - - public class SubtitleSettings - { - public string SsaFontName { get; set; } - public double SsaFontSize { get; set; } - public int SsaFontColorArgb { get; set; } - public bool SsaFontBold { get; set; } - public decimal SsaOutline { get; set; } - public decimal SsaShadow { get; set; } - public bool SsaOpaqueBox { get; set; } - public int SsaMarginLeft { get; set; } - public int SsaMarginRight { get; set; } - public int SsaMarginTopBottom { get; set; } - - public string DCinemaFontFile { get; set; } - public string DCinemaLoadFontResource { get; set; } - public int DCinemaFontSize { get; set; } - public int DCinemaBottomMargin { get; set; } - public double DCinemaZPosition { get; set; } - public int DCinemaFadeUpTime { get; set; } - public int DCinemaFadeDownTime { get; set; } - - public string CurrentDCinemaSubtitleId { get; set; } - public string CurrentDCinemaMovieTitle { get; set; } - public string CurrentDCinemaReelNumber { get; set; } - public string CurrentDCinemaIssueDate { get; set; } - public string CurrentDCinemaLanguage { get; set; } - public string CurrentDCinemaEditRate { get; set; } - public string CurrentDCinemaTimeCodeRate { get; set; } - public string CurrentDCinemaStartTime { get; set; } - public string CurrentDCinemaFontId { get; set; } - public string CurrentDCinemaFontUri { get; set; } - public Color CurrentDCinemaFontColor { get; set; } - public string CurrentDCinemaFontEffect { get; set; } - public Color CurrentDCinemaFontEffectColor { get; set; } - public int CurrentDCinemaFontSize { get; set; } - - public int CurrentCavena890LanguageIdLine1 { get; set; } - public int CurrentCavena890LanguageIdLine2 { get; set; } - public string CurrentCavena89Title { get; set; } - public string CurrentCavena890riginalTitle { get; set; } - public string CurrentCavena890Translator { get; set; } - public string CurrentCavena89Comment { get; set; } - public int CurrentCavena89LanguageId { get; set; } - public string Cavena890StartOfMessage { get; set; } - - public bool EbuStlTeletextUseBox { get; set; } - public bool EbuStlTeletextUseDoubleHeight { get; set; } - public int EbuStlMarginTop { get; set; } - public int EbuStlMarginBottom { get; set; } - public int EbuStlNewLineRows { get; set; } - public int PacVerticalTop { get; set; } - public int PacVerticalCenter { get; set; } - public int PacVerticalBottom { get; set; } - - public string DvdStudioProHeader { get; set; } - - public string TmpegEncXmlFontName { get; set; } - public string TmpegEncXmlFontHeight { get; set; } - public string TmpegEncXmlPosition { get; set; } - - public bool CheetahCaptionAlwayWriteEndTime { get; set; } - - public bool SamiDisplayTwoClassesAsTwoSubtitles { get; set; } - public int SamiHtmlEncodeMode { get; set; } - - public string TimedText10TimeCodeFormat { get; set; } - public string TimedText10TimeCodeFormatSource { get; set; } - public bool TimedText10ShowStyleAndLanguage { get; set; } - public string TimedText10FileExtension { get; set; } - - public int FcpFontSize { get; set; } - public string FcpFontName { get; set; } - - public string NuendoCharacterListFile { get; set; } - - public bool WebVttUseXTimestampMap { get; set; } - public long WebVttTimescale { get; set; } - - public bool TeletextItalicFix { get; set; } - - public SubtitleSettings() - { - SsaFontName = "Arial"; - if (Configuration.IsRunningOnLinux) - { - SsaFontName = Configuration.DefaultLinuxFontName; - } - SsaFontSize = 20; - SsaFontColorArgb = Color.FromArgb(255, 255, 255).ToArgb(); - SsaOutline = 2; - SsaShadow = 1; - SsaOpaqueBox = false; - SsaMarginLeft = 10; - SsaMarginRight = 10; - SsaMarginTopBottom = 10; - - DCinemaFontFile = "Arial.ttf"; - DCinemaLoadFontResource = "urn:uuid:3dec6dc0-39d0-498d-97d0-928d2eb78391"; - DCinemaFontSize = 42; - DCinemaBottomMargin = 8; - DCinemaZPosition = 0; - DCinemaFadeUpTime = 0; - DCinemaFadeDownTime = 0; - - EbuStlTeletextUseBox = true; - EbuStlTeletextUseDoubleHeight = true; - EbuStlMarginTop = 0; - EbuStlMarginBottom = 2; - EbuStlNewLineRows = 2; - - PacVerticalTop = 1; - PacVerticalCenter = 5; - PacVerticalBottom = 11; - - DvdStudioProHeader = @"$VertAlign = Bottom -$Bold = FALSE -$Underlined = FALSE -$Italic = FALSE -$XOffset = 0 -$YOffset = -5 -$TextContrast = 15 -$Outline1Contrast = 15 -$Outline2Contrast = 13 -$BackgroundContrast = 0 -$ForceDisplay = FALSE -$FadeIn = 0 -$FadeOut = 0 -$HorzAlign = Center -"; - - TmpegEncXmlFontName = "Tahoma"; - TmpegEncXmlFontHeight = "0.069"; - TmpegEncXmlPosition = "23"; - - SamiDisplayTwoClassesAsTwoSubtitles = true; - SamiHtmlEncodeMode = 0; - - TimedText10TimeCodeFormat = "Source"; - TimedText10ShowStyleAndLanguage = true; - TimedText10FileExtension = ".xml"; - - FcpFontSize = 18; - FcpFontName = "Lucida Grande"; - - Cavena890StartOfMessage = "10:00:00:00"; - - WebVttTimescale = 90000; - WebVttUseXTimestampMap = true; - - TeletextItalicFix = true; - } - - public void InitializeDCinameSettings(bool smpte) - { - if (smpte) - { - CurrentDCinemaSubtitleId = "urn:uuid:" + Guid.NewGuid(); - CurrentDCinemaLanguage = "en"; - CurrentDCinemaFontUri = DCinemaLoadFontResource; - CurrentDCinemaFontId = "theFontId"; - } - else - { - string hex = Guid.NewGuid().ToString().RemoveChar('-').ToLowerInvariant(); - hex = hex.Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-"); - CurrentDCinemaSubtitleId = hex; - CurrentDCinemaLanguage = "English"; - CurrentDCinemaFontUri = DCinemaFontFile; - CurrentDCinemaFontId = "Arial"; - } - CurrentDCinemaIssueDate = DateTime.Now.ToString("s") + ".000-00:00"; - CurrentDCinemaMovieTitle = "title"; - CurrentDCinemaReelNumber = "1"; - CurrentDCinemaFontColor = Color.White; - CurrentDCinemaFontEffect = "border"; - CurrentDCinemaFontEffectColor = Color.Black; - CurrentDCinemaFontSize = DCinemaFontSize; - CurrentCavena890LanguageIdLine1 = -1; - CurrentCavena890LanguageIdLine2 = -1; - } - } - - public class ProxySettings - { - public string ProxyAddress { get; set; } - public string UserName { get; set; } - public string Password { get; set; } - public string Domain { get; set; } - - public string DecodePassword() - { - return Encoding.UTF8.GetString(Convert.FromBase64String(Password)); - } - public void EncodePassword(string unencryptedPassword) - { - Password = Convert.ToBase64String(Encoding.UTF8.GetBytes(unencryptedPassword)); - } - } - - public class FixCommonErrorsSettings - { - public string StartPosition { get; set; } - public string StartSize { get; set; } - public bool EmptyLinesTicked { get; set; } - public bool OverlappingDisplayTimeTicked { get; set; } - public bool TooShortDisplayTimeTicked { get; set; } - public bool TooLongDisplayTimeTicked { get; set; } - public bool TooShortGapTicked { get; set; } - public bool InvalidItalicTagsTicked { get; set; } - public bool BreakLongLinesTicked { get; set; } - public bool MergeShortLinesTicked { get; set; } - public bool MergeShortLinesAllTicked { get; set; } - public bool UnneededSpacesTicked { get; set; } - public bool UnneededPeriodsTicked { get; set; } - public bool FixCommasTicked { get; set; } - public bool MissingSpacesTicked { get; set; } - public bool AddMissingQuotesTicked { get; set; } - public bool Fix3PlusLinesTicked { get; set; } - public bool FixHyphensTicked { get; set; } - public bool FixHyphensRemoveSingleLineTicked { get; set; } - public bool UppercaseIInsideLowercaseWordTicked { get; set; } - public bool DoubleApostropheToQuoteTicked { get; set; } - public bool AddPeriodAfterParagraphTicked { get; set; } - public bool StartWithUppercaseLetterAfterParagraphTicked { get; set; } - public bool StartWithUppercaseLetterAfterPeriodInsideParagraphTicked { get; set; } - public bool StartWithUppercaseLetterAfterColonTicked { get; set; } - public bool AloneLowercaseIToUppercaseIEnglishTicked { get; set; } - public bool FixOcrErrorsViaReplaceListTicked { get; set; } - public bool RemoveSpaceBetweenNumberTicked { get; set; } - public bool FixDialogsOnOneLineTicked { get; set; } - public bool TurkishAnsiTicked { get; set; } - public bool DanishLetterITicked { get; set; } - public bool SpanishInvertedQuestionAndExclamationMarksTicked { get; set; } - public bool FixDoubleDashTicked { get; set; } - public bool FixDoubleGreaterThanTicked { get; set; } - public bool FixEllipsesStartTicked { get; set; } - public bool FixMissingOpenBracketTicked { get; set; } - public bool FixMusicNotationTicked { get; set; } - public bool FixContinuationStyleTicked { get; set; } - public bool FixUnnecessaryLeadingDotsTicked { get; set; } - public bool NormalizeStringsTicked { get; set; } - public string DefaultFixes { get; set; } - - - public FixCommonErrorsSettings() - { - SetDefaultFixes(); - } - - public void SaveUserDefaultFixes() - { - var sb = new StringBuilder(); - - if (EmptyLinesTicked) - { - sb.Append(nameof(EmptyLinesTicked) + ";"); - } - - if (OverlappingDisplayTimeTicked) - { - sb.Append(nameof(OverlappingDisplayTimeTicked) + ";"); - } - - if (TooShortDisplayTimeTicked) - { - sb.Append(nameof(TooShortDisplayTimeTicked) + ";"); - } - - if (TooLongDisplayTimeTicked) - { - sb.Append(nameof(TooLongDisplayTimeTicked) + ";"); - } - - if (TooShortGapTicked) - { - sb.Append(nameof(TooShortGapTicked) + ";"); - } - - if (InvalidItalicTagsTicked) - { - sb.Append(nameof(InvalidItalicTagsTicked) + ";"); - } - - if (BreakLongLinesTicked) - { - sb.Append(nameof(BreakLongLinesTicked) + ";"); - } - - if (MergeShortLinesTicked) - { - sb.Append(nameof(MergeShortLinesTicked) + ";"); - } - - if (MergeShortLinesAllTicked) - { - sb.Append(nameof(MergeShortLinesAllTicked) + ";"); - } - - if (UnneededSpacesTicked) - { - sb.Append(nameof(UnneededSpacesTicked) + ";"); - } - - if (UnneededPeriodsTicked) - { - sb.Append(nameof(UnneededPeriodsTicked) + ";"); - } - - if (FixCommasTicked) - { - sb.Append(nameof(FixCommasTicked) + ";"); - } - - if (MissingSpacesTicked) - { - sb.Append(nameof(MissingSpacesTicked) + ";"); - } - - if (AddMissingQuotesTicked) - { - sb.Append(nameof(AddMissingQuotesTicked) + ";"); - } - - if (Fix3PlusLinesTicked) - { - sb.Append(nameof(Fix3PlusLinesTicked) + ";"); - } - - if (FixHyphensTicked) - { - sb.Append(nameof(FixHyphensTicked) + ";"); - } - - if (FixHyphensRemoveSingleLineTicked) - { - sb.Append(nameof(FixHyphensRemoveSingleLineTicked) + ";"); - } - - if (UppercaseIInsideLowercaseWordTicked) - { - sb.Append(nameof(UppercaseIInsideLowercaseWordTicked) + ";"); - } - - if (DoubleApostropheToQuoteTicked) - { - sb.Append(nameof(DoubleApostropheToQuoteTicked) + ";"); - } - - if (AddPeriodAfterParagraphTicked) - { - sb.Append(nameof(AddPeriodAfterParagraphTicked) + ";"); - } - - if (StartWithUppercaseLetterAfterParagraphTicked) - { - sb.Append(nameof(StartWithUppercaseLetterAfterParagraphTicked) + ";"); - } - - if (StartWithUppercaseLetterAfterPeriodInsideParagraphTicked) - { - sb.Append(nameof(StartWithUppercaseLetterAfterPeriodInsideParagraphTicked) + ";"); - } - - if (StartWithUppercaseLetterAfterColonTicked) - { - sb.Append(nameof(StartWithUppercaseLetterAfterColonTicked) + ";"); - } - - if (AloneLowercaseIToUppercaseIEnglishTicked) - { - sb.Append(nameof(AloneLowercaseIToUppercaseIEnglishTicked) + ";"); - } - - if (FixOcrErrorsViaReplaceListTicked) - { - sb.Append(nameof(FixOcrErrorsViaReplaceListTicked) + ";"); - } - - if (RemoveSpaceBetweenNumberTicked) - { - sb.Append(nameof(RemoveSpaceBetweenNumberTicked) + ";"); - } - - if (FixDialogsOnOneLineTicked) - { - sb.Append(nameof(FixDialogsOnOneLineTicked) + ";"); - } - - if (TurkishAnsiTicked) - { - sb.Append(nameof(TurkishAnsiTicked) + ";"); - } - - if (DanishLetterITicked) - { - sb.Append(nameof(DanishLetterITicked) + ";"); - } - - if (SpanishInvertedQuestionAndExclamationMarksTicked) - { - sb.Append(nameof(SpanishInvertedQuestionAndExclamationMarksTicked) + ";"); - } - - if (FixDoubleDashTicked) - { - sb.Append(nameof(FixDoubleDashTicked) + ";"); - } - - if (FixEllipsesStartTicked) - { - sb.Append(nameof(FixEllipsesStartTicked) + ";"); - } - - if (FixMissingOpenBracketTicked) - { - sb.Append(nameof(FixMissingOpenBracketTicked) + ";"); - } - - if (FixMusicNotationTicked) - { - sb.Append(nameof(FixMusicNotationTicked) + ";"); - } - - if (FixContinuationStyleTicked) - { - sb.Append(nameof(FixContinuationStyleTicked) + ";"); - } - - if (FixUnnecessaryLeadingDotsTicked) - { - sb.Append(nameof(FixUnnecessaryLeadingDotsTicked) + ";"); - } - - if (NormalizeStringsTicked) - { - sb.Append(nameof(NormalizeStringsTicked) + ";"); - } - - DefaultFixes = sb.ToString().TrimEnd(';'); - } - - public void LoadUserDefaultFixes(string fixes) - { - var list = fixes.Split(';'); - EmptyLinesTicked = list.Contains(nameof(EmptyLinesTicked)); - OverlappingDisplayTimeTicked = list.Contains(nameof(OverlappingDisplayTimeTicked)); - TooShortDisplayTimeTicked = list.Contains(nameof(TooShortDisplayTimeTicked)); - TooLongDisplayTimeTicked = list.Contains(nameof(TooLongDisplayTimeTicked)); - TooShortGapTicked = list.Contains(nameof(TooShortGapTicked)); - InvalidItalicTagsTicked = list.Contains(nameof(InvalidItalicTagsTicked)); - BreakLongLinesTicked = list.Contains(nameof(BreakLongLinesTicked)); - MergeShortLinesTicked = list.Contains(nameof(MergeShortLinesTicked)); - MergeShortLinesAllTicked = list.Contains(nameof(MergeShortLinesAllTicked)); - UnneededSpacesTicked = list.Contains(nameof(UnneededSpacesTicked)); - UnneededPeriodsTicked = list.Contains(nameof(UnneededPeriodsTicked)); - FixCommasTicked = list.Contains(nameof(FixCommasTicked)); - MissingSpacesTicked = list.Contains(nameof(MissingSpacesTicked)); - AddMissingQuotesTicked = list.Contains(nameof(AddMissingQuotesTicked)); - Fix3PlusLinesTicked = list.Contains(nameof(Fix3PlusLinesTicked)); - FixHyphensTicked = list.Contains(nameof(FixHyphensTicked)); - FixHyphensRemoveSingleLineTicked = list.Contains(nameof(FixHyphensRemoveSingleLineTicked)); - UppercaseIInsideLowercaseWordTicked = list.Contains(nameof(UppercaseIInsideLowercaseWordTicked)); - DoubleApostropheToQuoteTicked = list.Contains(nameof(DoubleApostropheToQuoteTicked)); - AddPeriodAfterParagraphTicked = list.Contains(nameof(AddPeriodAfterParagraphTicked)); - StartWithUppercaseLetterAfterParagraphTicked = list.Contains(nameof(StartWithUppercaseLetterAfterParagraphTicked)); - StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = list.Contains(nameof(StartWithUppercaseLetterAfterPeriodInsideParagraphTicked)); - StartWithUppercaseLetterAfterColonTicked = list.Contains(nameof(StartWithUppercaseLetterAfterColonTicked)); - AloneLowercaseIToUppercaseIEnglishTicked = list.Contains(nameof(AloneLowercaseIToUppercaseIEnglishTicked)); - FixOcrErrorsViaReplaceListTicked = list.Contains(nameof(FixOcrErrorsViaReplaceListTicked)); - RemoveSpaceBetweenNumberTicked = list.Contains(nameof(RemoveSpaceBetweenNumberTicked)); - FixDialogsOnOneLineTicked = list.Contains(nameof(FixDialogsOnOneLineTicked)); - TurkishAnsiTicked = list.Contains(nameof(TurkishAnsiTicked)); - DanishLetterITicked = list.Contains(nameof(DanishLetterITicked)); - SpanishInvertedQuestionAndExclamationMarksTicked = list.Contains(nameof(SpanishInvertedQuestionAndExclamationMarksTicked)); - FixDoubleDashTicked = list.Contains(nameof(FixDoubleDashTicked)); - FixEllipsesStartTicked = list.Contains(nameof(FixEllipsesStartTicked)); - FixMissingOpenBracketTicked = list.Contains(nameof(FixMissingOpenBracketTicked)); - FixMusicNotationTicked = list.Contains(nameof(FixMusicNotationTicked)); - FixContinuationStyleTicked = list.Contains(nameof(FixContinuationStyleTicked)); - FixUnnecessaryLeadingDotsTicked = list.Contains(nameof(FixUnnecessaryLeadingDotsTicked)); - NormalizeStringsTicked = list.Contains(nameof(NormalizeStringsTicked)); - } - - public void SetDefaultFixes() - { - LoadUserDefaultFixes(string.Empty); - EmptyLinesTicked = true; - OverlappingDisplayTimeTicked = true; - TooShortDisplayTimeTicked = true; - TooLongDisplayTimeTicked = true; - TooShortGapTicked = false; - InvalidItalicTagsTicked = true; - BreakLongLinesTicked = true; - MergeShortLinesTicked = true; - UnneededPeriodsTicked = true; - FixCommasTicked = true; - UnneededSpacesTicked = true; - MissingSpacesTicked = true; - UppercaseIInsideLowercaseWordTicked = true; - DoubleApostropheToQuoteTicked = true; - AddPeriodAfterParagraphTicked = false; - StartWithUppercaseLetterAfterParagraphTicked = true; - StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = false; - StartWithUppercaseLetterAfterColonTicked = false; - AloneLowercaseIToUppercaseIEnglishTicked = false; - TurkishAnsiTicked = false; - DanishLetterITicked = false; - FixDoubleDashTicked = true; - FixDoubleGreaterThanTicked = true; - FixEllipsesStartTicked = true; - FixMissingOpenBracketTicked = true; - FixMusicNotationTicked = true; - FixContinuationStyleTicked = false; - FixUnnecessaryLeadingDotsTicked = true; - NormalizeStringsTicked = false; - SaveUserDefaultFixes(); - } - } - - public class GeneralSettings - { - public List Profiles { get; set; } - public string CurrentProfile { get; set; } - public bool ShowToolbarNew { get; set; } - public bool ShowToolbarOpen { get; set; } - public bool ShowToolbarSave { get; set; } - public bool ShowToolbarSaveAs { get; set; } - public bool ShowToolbarFind { get; set; } - public bool ShowToolbarReplace { get; set; } - public bool ShowToolbarFixCommonErrors { get; set; } - public bool ShowToolbarRemoveTextForHi { get; set; } - public bool ShowToolbarVisualSync { get; set; } - public bool ShowToolbarSpellCheck { get; set; } - public bool ShowToolbarNetflixGlyphCheck { get; set; } - public bool ShowToolbarSettings { get; set; } - public bool ShowToolbarHelp { get; set; } - - public bool ShowVideoPlayer { get; set; } - public bool ShowAudioVisualizer { get; set; } - public bool ShowWaveform { get; set; } - public bool ShowSpectrogram { get; set; } - public bool ShowFrameRate { get; set; } - public double DefaultFrameRate { get; set; } - public double CurrentFrameRate { get; set; } - public string DefaultSubtitleFormat { get; set; } - public string DefaultEncoding { get; set; } - public bool AutoConvertToUtf8 { get; set; } - public bool AutoGuessAnsiEncoding { get; set; } - public string SystemSubtitleFontNameOverride { get; set; } - public int SystemSubtitleFontSizeOverride { get; set; } - - public string SubtitleFontName { get; set; } - public int SubtitleTextBoxFontSize { get; set; } - public bool SubtitleTextBoxSyntaxColor { get; set; } - public Color SubtitleTextBoxHtmlColor { get; set; } - public Color SubtitleTextBoxAssColor { get; set; } - public int SubtitleListViewFontSize { get; set; } - public bool SubtitleTextBoxFontBold { get; set; } - public bool SubtitleListViewFontBold { get; set; } - public Color SubtitleFontColor { get; set; } - public Color SubtitleBackgroundColor { get; set; } - public string MeasureFontName { get; set; } - public int MeasureFontSize { get; set; } - public bool MeasureFontBold { get; set; } - public int SubtitleLineMaximumPixelWidth { get; set; } - public bool CenterSubtitleInTextBox { get; set; } - public bool ShowRecentFiles { get; set; } - public bool RememberSelectedLine { get; set; } - public bool StartLoadLastFile { get; set; } - public bool StartRememberPositionAndSize { get; set; } - public string StartPosition { get; set; } - public string StartSize { get; set; } - public int SplitContainerMainSplitterDistance { get; set; } - public int SplitContainer1SplitterDistance { get; set; } - public int SplitContainerListViewAndTextSplitterDistance { get; set; } - public bool StartInSourceView { get; set; } - public bool RemoveBlankLinesWhenOpening { get; set; } - public bool RemoveBadCharsWhenOpening { get; set; } - public int SubtitleLineMaximumLength { get; set; } - public int MaxNumberOfLines { get; set; } - public int MergeLinesShorterThan { get; set; } - public int SubtitleMinimumDisplayMilliseconds { get; set; } - public int SubtitleMaximumDisplayMilliseconds { get; set; } - public int MinimumMillisecondsBetweenLines { get; set; } - public int SetStartEndHumanDelay { get; set; } - public bool AutoWrapLineWhileTyping { get; set; } - public double SubtitleMaximumCharactersPerSeconds { get; set; } - public double SubtitleOptimalCharactersPerSeconds { get; set; } - public bool CharactersPerSecondsIgnoreWhiteSpace { get; set; } - public bool IgnoreArabicDiacritics { get; set; } - public double SubtitleMaximumWordsPerMinute { get; set; } - public DialogType DialogStyle { get; set; } - public ContinuationStyle ContinuationStyle { get; set; } - public int ContinuationPause { get; set; } - public bool FixContinuationStyleUncheckInsertsAllCaps { get; set; } - public bool FixContinuationStyleUncheckInsertsItalic { get; set; } - public bool FixContinuationStyleUncheckInsertsLowercase { get; set; } - public bool FixContinuationStyleHideContinuationCandidatesWithoutName { get; set; } - public bool FixContinuationStyleIgnoreLyrics { get; set; } - public string SpellCheckLanguage { get; set; } - public string VideoPlayer { get; set; } - public int VideoPlayerDefaultVolume { get; set; } - public int VideoPlayerPreviewFontSize { get; set; } - public bool VideoPlayerPreviewFontBold { get; set; } - public bool VideoPlayerShowStopButton { get; set; } - public bool VideoPlayerShowFullscreenButton { get; set; } - public bool VideoPlayerShowMuteButton { get; set; } - public string Language { get; set; } - public string ListViewLineSeparatorString { get; set; } - public int ListViewDoubleClickAction { get; set; } - public string SaveAsUseFileNameFrom { get; set; } - public string UppercaseLetters { get; set; } - public int DefaultAdjustMilliseconds { get; set; } - public bool AutoRepeatOn { get; set; } - public int AutoRepeatCount { get; set; } - public bool AutoContinueOn { get; set; } - public int AutoContinueDelay { get; set; } - public bool SyncListViewWithVideoWhilePlaying { get; set; } - public int AutoBackupSeconds { get; set; } - public int AutoBackupDeleteAfterMonths { get; set; } - public string SpellChecker { get; set; } - public bool AllowEditOfOriginalSubtitle { get; set; } - public bool PromptDeleteLines { get; set; } - public bool Undocked { get; set; } - public string UndockedVideoPosition { get; set; } - public bool UndockedVideoFullscreen { get; set; } - public string UndockedWaveformPosition { get; set; } - public string UndockedVideoControlsPosition { get; set; } - public bool WaveformCenter { get; set; } - public int WaveformUpdateIntervalMs { get; set; } - public int SmallDelayMilliseconds { get; set; } - public int LargeDelayMilliseconds { get; set; } - public bool ShowOriginalAsPreviewIfAvailable { get; set; } - public int LastPacCodePage { get; set; } - public string OpenSubtitleExtraExtensions { get; set; } - public bool ListViewColumnsRememberSize { get; set; } - public int ListViewNumberWidth { get; set; } - public int ListViewStartWidth { get; set; } - public int ListViewEndWidth { get; set; } - public int ListViewDurationWidth { get; set; } - public int ListViewCpsWidth { get; set; } - public int ListViewWpmWidth { get; set; } - public int ListViewGapWidth { get; set; } - public int ListViewActorWidth { get; set; } - public int ListViewRegionWidth { get; set; } - public int ListViewTextWidth { get; set; } - public bool DirectShowDoubleLoad { get; set; } - public string VlcWaveTranscodeSettings { get; set; } - public string VlcLocation { get; set; } - public string VlcLocationRelative { get; set; } - public string MpvVideoOutputWindows { get; set; } - public string MpvVideoOutputLinux { get; set; } - public string MpvExtraOption { get; set; } - public bool MpvLogging { get; set; } - public bool MpvHandlesPreviewText { get; set; } - public string MpcHcLocation { get; set; } - public string MkvMergeLocation { get; set; } - public bool UseFFmpegForWaveExtraction { get; set; } - public string FFmpegLocation { get; set; } - public string FFmpegSceneThreshold { get; set; } - public bool UseTimeFormatHHMMSSFF { get; set; } - public int SplitBehavior { get; set; } - public bool SplitRemovesDashes { get; set; } - public int ClearStatusBarAfterSeconds { get; set; } - public string Company { get; set; } - public bool MoveVideo100Or500MsPlaySmallSample { get; set; } - public bool DisableVideoAutoLoading { get; set; } - public bool AllowVolumeBoost { get; set; } - public int NewEmptyDefaultMs { get; set; } - public bool RightToLeftMode { get; set; } - public string LastSaveAsFormat { get; set; } - public bool CheckForUpdates { get; set; } - public DateTime LastCheckForUpdates { get; set; } - public bool AutoSave { get; set; } - public string PreviewAssaText { get; set; } - public bool ShowProgress { get; set; } - public bool ShowNegativeDurationInfoOnSave { get; set; } - public bool ShowFormatRequiresUtf8Warning { get; set; } - public long CurrentVideoOffsetInMs { get; set; } - public string TitleBarAsterisk { get; set; } // Show asteriks "before" or "after" file name (any other value will hide asteriks) - public bool MeasurementConverterCloseOnInsert { get; set; } - public string MeasurementConverterCategories { get; set; } - public int SubtitleTextBoxMaxHeight { get; set; } - public bool UseDarkTheme { get; set; } - public bool ShowBetaStuff { get; set; } - - public GeneralSettings() - { - ShowToolbarNew = true; - ShowToolbarOpen = true; - ShowToolbarSave = true; - ShowToolbarSaveAs = false; - ShowToolbarFind = true; - ShowToolbarReplace = true; - ShowToolbarFixCommonErrors = false; - ShowToolbarVisualSync = true; - ShowToolbarSpellCheck = true; - ShowToolbarNetflixGlyphCheck = true; - ShowToolbarSettings = false; - ShowToolbarHelp = true; - - ShowVideoPlayer = true; - ShowAudioVisualizer = true; - ShowWaveform = true; - ShowSpectrogram = true; - ShowFrameRate = false; - DefaultFrameRate = 23.976; - CurrentFrameRate = DefaultFrameRate; - SubtitleFontName = "Tahoma"; - if (Configuration.IsRunningOnLinux) - { - SubtitleFontName = Configuration.DefaultLinuxFontName; - } - else if (Environment.OSVersion.Version.Major < 6) // 6 == Vista/Win2008Server/Win7 - { - SubtitleFontName = "Times New Roman"; - } - - SubtitleTextBoxFontSize = 12; - SubtitleListViewFontSize = 10; - SubtitleTextBoxSyntaxColor = true; - SubtitleTextBoxHtmlColor = Color.CornflowerBlue; - SubtitleTextBoxAssColor = Color.BlueViolet; - SubtitleTextBoxFontBold = true; - SubtitleFontColor = Color.Black; - MeasureFontName = "Arial"; - MeasureFontSize = 24; - MeasureFontBold = false; - SubtitleLineMaximumPixelWidth = 576; - SubtitleBackgroundColor = Color.White; - CenterSubtitleInTextBox = false; - DefaultSubtitleFormat = "SubRip"; - DefaultEncoding = TextEncoding.Utf8WithBom; - AutoConvertToUtf8 = false; - IgnoreArabicDiacritics = false; - AutoGuessAnsiEncoding = true; - ShowRecentFiles = true; - RememberSelectedLine = true; - StartLoadLastFile = true; - StartRememberPositionAndSize = true; - SubtitleLineMaximumLength = 43; - MaxNumberOfLines = 2; - MergeLinesShorterThan = 33; - SubtitleMinimumDisplayMilliseconds = 1000; - SubtitleMaximumDisplayMilliseconds = 8 * 1000; - RemoveBadCharsWhenOpening = true; - MinimumMillisecondsBetweenLines = 24; - SetStartEndHumanDelay = 100; - AutoWrapLineWhileTyping = false; - SubtitleMaximumCharactersPerSeconds = 25.0; - SubtitleOptimalCharactersPerSeconds = 15.0; - SubtitleMaximumWordsPerMinute = 300; - DialogStyle = DialogType.DashBothLinesWithSpace; - ContinuationStyle = ContinuationStyle.None; - ContinuationPause = 2000; - FixContinuationStyleUncheckInsertsAllCaps = true; - FixContinuationStyleUncheckInsertsItalic = true; - FixContinuationStyleUncheckInsertsLowercase = true; - FixContinuationStyleHideContinuationCandidatesWithoutName = true; - FixContinuationStyleIgnoreLyrics = true; - SpellCheckLanguage = null; - VideoPlayer = string.Empty; - VideoPlayerDefaultVolume = 75; - VideoPlayerPreviewFontSize = 12; - VideoPlayerPreviewFontBold = true; - VideoPlayerShowStopButton = true; - VideoPlayerShowMuteButton = true; - VideoPlayerShowFullscreenButton = true; - ListViewLineSeparatorString = "
"; - ListViewDoubleClickAction = 1; - SaveAsUseFileNameFrom = "video"; - UppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWZYXÆØÃÅÄÖÉÈÁÂÀÇÊÍÓÔÕÚŁАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯĞİŞÜÙÁÌÑÎ"; - DefaultAdjustMilliseconds = 1000; - AutoRepeatOn = true; - AutoRepeatCount = 2; - AutoContinueOn = false; - AutoContinueDelay = 2; - SyncListViewWithVideoWhilePlaying = false; - AutoBackupSeconds = 60 * 5; - AutoBackupDeleteAfterMonths = 3; - SpellChecker = "hunspell"; - AllowEditOfOriginalSubtitle = true; - PromptDeleteLines = true; - Undocked = false; - UndockedVideoPosition = "-32000;-32000"; - UndockedWaveformPosition = "-32000;-32000"; - UndockedVideoControlsPosition = "-32000;-32000"; - WaveformUpdateIntervalMs = 40; - SmallDelayMilliseconds = 500; - LargeDelayMilliseconds = 5000; - OpenSubtitleExtraExtensions = "*.mp4;*.m4v;*.mkv;*.ts"; // matroska/mp4/m4v files (can contain subtitles) - ListViewColumnsRememberSize = true; - DirectShowDoubleLoad = true; - VlcWaveTranscodeSettings = "acodec=s16l"; // "acodec=s16l,channels=1,ab=64,samplerate=8000"; - MpvVideoOutputWindows = string.Empty; // could also be e.g. "gpu" or "directshow" - MpvVideoOutputLinux = string.Empty; // could also be e.g. "x11"; - MpvHandlesPreviewText = true; - FFmpegSceneThreshold = "0.4"; // threshold for generating scene changes - 0.2 is sensitive (more scene change), 0.6 is less sensitive (fewer scene changes) - UseTimeFormatHHMMSSFF = false; - SplitBehavior = 1; // 0=take gap from left, 1=divide evenly, 2=take gap from right - SplitRemovesDashes = true; - ClearStatusBarAfterSeconds = 10; - MoveVideo100Or500MsPlaySmallSample = false; - DisableVideoAutoLoading = false; - RightToLeftMode = false; - LastSaveAsFormat = string.Empty; - SystemSubtitleFontNameOverride = string.Empty; - CheckForUpdates = true; - LastCheckForUpdates = DateTime.Now; - ShowProgress = false; - ShowNegativeDurationInfoOnSave = true; - ShowFormatRequiresUtf8Warning = true; - UseDarkTheme = false; - TitleBarAsterisk = "before"; - MeasurementConverterCloseOnInsert = true; - MeasurementConverterCategories = "Length;Kilometers;Meters"; - PreviewAssaText = "ABCDEFGHIJKL abcdefghijkl 123"; - SubtitleTextBoxMaxHeight = 200; - ShowBetaStuff = false; - NewEmptyDefaultMs = 2000; - DialogStyle = DialogType.DashBothLinesWithSpace; - ContinuationStyle = ContinuationStyle.None; - - Profiles = new List(); - CurrentProfile = "Default"; - Profiles.Add(new RulesProfile - { - Name = CurrentProfile, - SubtitleLineMaximumLength = SubtitleLineMaximumLength, - MaxNumberOfLines = MaxNumberOfLines, - MergeLinesShorterThan = MergeLinesShorterThan, - SubtitleMaximumCharactersPerSeconds = (decimal)SubtitleMaximumCharactersPerSeconds, - SubtitleOptimalCharactersPerSeconds = (decimal)SubtitleOptimalCharactersPerSeconds, - SubtitleMaximumDisplayMilliseconds = SubtitleMaximumDisplayMilliseconds, - SubtitleMinimumDisplayMilliseconds = SubtitleMinimumDisplayMilliseconds, - SubtitleMaximumWordsPerMinute = (decimal)SubtitleMaximumWordsPerMinute, - CpsIncludesSpace = !CharactersPerSecondsIgnoreWhiteSpace, - MinimumMillisecondsBetweenLines = MinimumMillisecondsBetweenLines, - DialogStyle = DialogStyle, - ContinuationStyle = ContinuationStyle - }); - AddExtraProfiles(Profiles); - } - - internal static void AddExtraProfiles(List profiles) - { - profiles.Add(new RulesProfile - { - Name = "Netflix (English)", - SubtitleLineMaximumLength = 42, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 42, - SubtitleMaximumCharactersPerSeconds = 20, - SubtitleOptimalCharactersPerSeconds = 15, - SubtitleMaximumDisplayMilliseconds = 7000, - SubtitleMinimumDisplayMilliseconds = 833, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos - DialogStyle = DialogType.DashBothLinesWithoutSpace, - ContinuationStyle = ContinuationStyle.NoneTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Netflix (Other languages)", - SubtitleLineMaximumLength = 42, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 42, - SubtitleMaximumCharactersPerSeconds = 17, - SubtitleOptimalCharactersPerSeconds = 12, - SubtitleMaximumDisplayMilliseconds = 7000, - SubtitleMinimumDisplayMilliseconds = 833, - SubtitleMaximumWordsPerMinute = 200, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.NoneTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Netflix (Dutch)", - SubtitleLineMaximumLength = 42, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 42, - SubtitleMaximumCharactersPerSeconds = 17, - SubtitleOptimalCharactersPerSeconds = 12, - SubtitleMaximumDisplayMilliseconds = 7000, - SubtitleMinimumDisplayMilliseconds = 833, - SubtitleMaximumWordsPerMinute = 200, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos - DialogStyle = DialogType.DashSecondLineWithoutSpace, - ContinuationStyle = ContinuationStyle.LeadingTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Arte (German/English)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 40, - SubtitleMaximumCharactersPerSeconds = 20, - SubtitleOptimalCharactersPerSeconds = 12, - SubtitleMaximumDisplayMilliseconds = 10000, - SubtitleMinimumDisplayMilliseconds = 1000, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 200, // 5 frames for 25 fps videos - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "Dutch professional subtitles (23.976/24 fps)", - SubtitleLineMaximumLength = 42, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 15, - SubtitleOptimalCharactersPerSeconds = 11, - SubtitleMaximumDisplayMilliseconds = 7007, - SubtitleMinimumDisplayMilliseconds = 1400, - SubtitleMaximumWordsPerMinute = 180, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 125, - DialogStyle = DialogType.DashSecondLineWithoutSpace, - ContinuationStyle = ContinuationStyle.OnlyTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Dutch professional subtitles (25 fps)", - SubtitleLineMaximumLength = 42, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 15, - SubtitleOptimalCharactersPerSeconds = 11, - SubtitleMaximumDisplayMilliseconds = 7000, - SubtitleMinimumDisplayMilliseconds = 1400, - SubtitleMaximumWordsPerMinute = 180, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 120, - DialogStyle = DialogType.DashSecondLineWithoutSpace, - ContinuationStyle = ContinuationStyle.OnlyTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Dutch fansubs (23.976/24 fps)", - SubtitleLineMaximumLength = 45, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 40, - SubtitleMaximumCharactersPerSeconds = 22.5m, - SubtitleOptimalCharactersPerSeconds = 12, - SubtitleMaximumDisplayMilliseconds = 7007, - SubtitleMinimumDisplayMilliseconds = 1200, - SubtitleMaximumWordsPerMinute = 240, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 125, - DialogStyle = DialogType.DashSecondLineWithSpace, - ContinuationStyle = ContinuationStyle.OnlyTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Dutch fansubs (25 fps)", - SubtitleLineMaximumLength = 45, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 40, - SubtitleMaximumCharactersPerSeconds = 22.5m, - SubtitleOptimalCharactersPerSeconds = 12, - SubtitleMaximumDisplayMilliseconds = 7000, - SubtitleMinimumDisplayMilliseconds = 1200, - SubtitleMaximumWordsPerMinute = 240, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 120, - DialogStyle = DialogType.DashSecondLineWithSpace, - ContinuationStyle = ContinuationStyle.OnlyTrailingDots - }); - profiles.Add(new RulesProfile - { - Name = "Danish professional subtitles (23.976/24 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 40, - SubtitleMaximumCharactersPerSeconds = 15, - SubtitleOptimalCharactersPerSeconds = 10, - SubtitleMaximumDisplayMilliseconds = 8008, - SubtitleMinimumDisplayMilliseconds = 2002, - SubtitleMaximumWordsPerMinute = 180, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 125, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.LeadingTrailingDashDots - }); - profiles.Add(new RulesProfile - { - Name = "Danish professional subtitles (25 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 40, - SubtitleMaximumCharactersPerSeconds = 15, - SubtitleOptimalCharactersPerSeconds = 10, - SubtitleMaximumDisplayMilliseconds = 8000, - SubtitleMinimumDisplayMilliseconds = 2000, - SubtitleMaximumWordsPerMinute = 180, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 120, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.LeadingTrailingDashDots - }); - profiles.Add(new RulesProfile - { - Name = "SW2 (French) (23.976/24 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5005, - SubtitleMinimumDisplayMilliseconds = 792, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 125, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "SW2 (French) (25 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5000, - SubtitleMinimumDisplayMilliseconds = 800, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 120, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "SW3 (French) (23.976/24 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5005, - SubtitleMinimumDisplayMilliseconds = 792, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 167, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "SW3 (French) (25 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5000, - SubtitleMinimumDisplayMilliseconds = 800, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 160, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "SW4 (French) (23.976/24 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5005, - SubtitleMinimumDisplayMilliseconds = 792, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 250, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - profiles.Add(new RulesProfile - { - Name = "SW4 (French) (25 fps)", - SubtitleLineMaximumLength = 40, - MaxNumberOfLines = 2, - MergeLinesShorterThan = 37, - SubtitleMaximumCharactersPerSeconds = 25, - SubtitleOptimalCharactersPerSeconds = 18, - SubtitleMaximumDisplayMilliseconds = 5000, - SubtitleMinimumDisplayMilliseconds = 800, - SubtitleMaximumWordsPerMinute = 300, - CpsIncludesSpace = true, - MinimumMillisecondsBetweenLines = 240, - DialogStyle = DialogType.DashBothLinesWithSpace, - ContinuationStyle = ContinuationStyle.None - }); - } - } - - public class VideoControlsSettings - { - public string CustomSearchText1 { get; set; } - public string CustomSearchText2 { get; set; } - public string CustomSearchText3 { get; set; } - public string CustomSearchText4 { get; set; } - public string CustomSearchText5 { get; set; } - public string CustomSearchUrl1 { get; set; } - public string CustomSearchUrl2 { get; set; } - public string CustomSearchUrl3 { get; set; } - public string CustomSearchUrl4 { get; set; } - public string CustomSearchUrl5 { get; set; } - public string LastActiveTab { get; set; } - public bool WaveformDrawGrid { get; set; } - public bool WaveformDrawCps { get; set; } - public bool WaveformDrawWpm { get; set; } - public bool WaveformAllowOverlap { get; set; } - public bool WaveformFocusOnMouseEnter { get; set; } - public bool WaveformListViewFocusOnMouseEnter { get; set; } - public bool WaveformSetVideoPositionOnMoveStartEnd { get; set; } - public bool WaveformSingleClickSelect { get; set; } - public bool WaveformSnapToSceneChanges { get; set; } - public int WaveformBorderHitMs { get; set; } - public Color WaveformGridColor { get; set; } - public Color WaveformColor { get; set; } - public Color WaveformSelectedColor { get; set; } - public Color WaveformBackgroundColor { get; set; } - public Color WaveformTextColor { get; set; } - public Color WaveformCursorColor { get; set; } - public Color WaveformChaptersColor { get; set; } - public int WaveformTextSize { get; set; } - public bool WaveformTextBold { get; set; } - public string WaveformDoubleClickOnNonParagraphAction { get; set; } - public string WaveformRightClickOnNonParagraphAction { get; set; } - public bool WaveformMouseWheelScrollUpIsForward { get; set; } - public bool GenerateSpectrogram { get; set; } - public string SpectrogramAppearance { get; set; } - public int WaveformMinimumSampleRate { get; set; } - public double WaveformSeeksSilenceDurationSeconds { get; set; } - public double WaveformSeeksSilenceMaxVolume { get; set; } - public bool WaveformUnwrapText { get; set; } - public bool WaveformHideWpmCpsLabels { get; set; } - - - public VideoControlsSettings() - { - CustomSearchText1 = "The Free Dictionary"; - CustomSearchUrl1 = "https://www.thefreedictionary.com/{0}"; - CustomSearchText2 = "Wikipedia"; - CustomSearchUrl2 = "https://en.wikipedia.org/wiki?search={0}"; - - LastActiveTab = "Translate"; - WaveformDrawGrid = true; - WaveformAllowOverlap = false; - WaveformBorderHitMs = 15; - WaveformGridColor = Color.FromArgb(255, 20, 20, 18); - WaveformColor = Color.FromArgb(255, 160, 240, 30); - WaveformSelectedColor = Color.FromArgb(255, 230, 0, 0); - WaveformBackgroundColor = Color.Black; - WaveformTextColor = Color.Gray; - WaveformCursorColor = Color.Turquoise; - WaveformChaptersColor = Color.FromArgb(255, 104, 33, 122); - WaveformTextSize = 9; - WaveformTextBold = true; - WaveformDoubleClickOnNonParagraphAction = "PlayPause"; - WaveformDoubleClickOnNonParagraphAction = string.Empty; - WaveformMouseWheelScrollUpIsForward = true; - SpectrogramAppearance = "OneColorGradient"; - WaveformMinimumSampleRate = 126; - WaveformSeeksSilenceDurationSeconds = 0.3; - WaveformSeeksSilenceMaxVolume = 0.1; - WaveformSnapToSceneChanges = true; - } - } - - public class VobSubOcrSettings - { - public int XOrMorePixelsMakesSpace { get; set; } - public double AllowDifferenceInPercent { get; set; } - public double BlurayAllowDifferenceInPercent { get; set; } - public string LastImageCompareFolder { get; set; } - public int LastModiLanguageId { get; set; } - public string LastOcrMethod { get; set; } - public string TesseractLastLanguage { get; set; } - public bool UseTesseractFallback { get; set; } - public bool UseItalicsInTesseract { get; set; } - public int TesseractEngineMode { get; set; } - public bool UseMusicSymbolsInTesseract { get; set; } - public bool RightToLeft { get; set; } - public bool TopToBottom { get; set; } - public int DefaultMillisecondsForUnknownDurations { get; set; } - public bool FixOcrErrors { get; set; } - public bool PromptForUnknownWords { get; set; } - public bool GuessUnknownWords { get; set; } - public bool AutoBreakSubtitleIfMoreThanTwoLines { get; set; } - public double ItalicFactor { get; set; } - - public bool LineOcrDraw { get; set; } - public int LineOcrMinHeightSplit { get; set; } - public bool LineOcrAdvancedItalic { get; set; } - public string LineOcrLastLanguages { get; set; } - public string LineOcrLastSpellCheck { get; set; } - public int LineOcrLinesToAutoGuess { get; set; } - public int LineOcrMinLineHeight { get; set; } - public int LineOcrMaxLineHeight { get; set; } - public int LineOcrMaxErrorPixels { get; set; } - public string LastBinaryImageCompareDb { get; set; } - public string LastBinaryImageSpellCheck { get; set; } - public bool BinaryAutoDetectBestDb { get; set; } - public string LastTesseractSpellCheck { get; set; } - public bool CaptureTopAlign { get; set; } - public int UnfocusedAttentionBlinkCount { get; set; } - public int UnfocusedAttentionPlaySoundCount { get; set; } - - public VobSubOcrSettings() - { - XOrMorePixelsMakesSpace = 8; - AllowDifferenceInPercent = 1.0; - BlurayAllowDifferenceInPercent = 7.5; - LastImageCompareFolder = "English"; - LastModiLanguageId = 9; - LastOcrMethod = "Tesseract"; - UseItalicsInTesseract = true; - TesseractEngineMode = 3; // Default, based on what is available (T4 docs) - UseMusicSymbolsInTesseract = true; - UseTesseractFallback = true; - RightToLeft = false; - TopToBottom = true; - DefaultMillisecondsForUnknownDurations = 5000; - FixOcrErrors = true; - PromptForUnknownWords = true; - GuessUnknownWords = true; - AutoBreakSubtitleIfMoreThanTwoLines = true; - ItalicFactor = 0.2f; - LineOcrLinesToAutoGuess = 100; - LineOcrMaxErrorPixels = 45; - LastBinaryImageCompareDb = "Latin+Latin"; - BinaryAutoDetectBestDb = true; - CaptureTopAlign = false; - UnfocusedAttentionBlinkCount = 50; - UnfocusedAttentionPlaySoundCount = 1; - } - } - - public class MultipleSearchAndReplaceSetting - { - public bool Enabled { get; set; } - public string FindWhat { get; set; } - public string ReplaceWith { get; set; } - public string SearchType { get; set; } - public string Description { get; set; } - } - - public class MultipleSearchAndReplaceGroup - { - public string Name { get; set; } - public bool Enabled { get; set; } - public List Rules { get; set; } - } - - public class NetworkSettings - { - public string UserName { get; set; } - public string WebServiceUrl { get; set; } - public string SessionKey { get; set; } - public int PollIntervalSeconds { get; set; } - public string NewMessageSound { get; set; } - - public NetworkSettings() - { - UserName = string.Empty; - SessionKey = "DemoSession"; // TODO: Leave blank or use guid - WebServiceUrl = "https://www.nikse.dk/se/SeService.asmx"; - PollIntervalSeconds = 5; - } - } - - public class Shortcuts - { - public string GeneralGoToFirstSelectedLine { get; set; } - public string GeneralGoToNextEmptyLine { get; set; } - public string GeneralMergeSelectedLines { get; set; } - public string GeneralMergeSelectedLinesAndAutoBreak { get; set; } - public string GeneralMergeSelectedLinesAndUnbreak { get; set; } - public string GeneralMergeSelectedLinesAndUnbreakCjk { get; set; } - public string GeneralMergeSelectedLinesOnlyFirstText { get; set; } - public string GeneralMergeSelectedLinesBilingual { get; set; } - public string GeneralMergeWithNext { get; set; } - public string GeneralMergeWithPrevious { get; set; } - public string GeneralToggleTranslationMode { get; set; } - public string GeneralSwitchOriginalAndTranslation { get; set; } - public string GeneralMergeOriginalAndTranslation { get; set; } - public string GeneralGoToNextSubtitle { get; set; } - public string GeneralGoToNextSubtitleCursorAtEnd { get; set; } - public string GeneralGoToPrevSubtitle { get; set; } - public string GeneralGoToStartOfCurrentSubtitle { get; set; } - public string GeneralGoToEndOfCurrentSubtitle { get; set; } - public string GeneralGoToPreviousSubtitleAndFocusVideo { get; set; } - public string GeneralGoToNextSubtitleAndFocusVideo { get; set; } - public string GeneralGoToPrevSubtitleAndPlay { get; set; } - public string GeneralGoToNextSubtitleAndPlay { get; set; } - public string GeneralAutoCalcCurrentDuration { get; set; } - public string GeneralPlayFirstSelected { get; set; } - public string GeneralHelp { get; set; } - public string GeneralUnbrekNoSpace { get; set; } - public string GeneralToggleBookmarks { get; set; } - public string GeneralToggleBookmarksWithText { get; set; } - public string GeneralClearBookmarks { get; set; } - public string GeneralGoToBookmark { get; set; } - public string GeneralGoToPreviousBookmark { get; set; } - public string GeneralGoToNextBookmark { get; set; } - public string ChooseProfile { get; set; } - public string DuplicateLine { get; set; } - public string MainFileNew { get; set; } - public string MainFileOpen { get; set; } - public string MainFileOpenKeepVideo { get; set; } - public string MainFileSave { get; set; } - public string MainFileSaveOriginal { get; set; } - public string MainFileSaveOriginalAs { get; set; } - public string MainFileSaveAs { get; set; } - public string MainFileSaveAll { get; set; } - public string MainFileOpenOriginal { get; set; } - public string MainFileCloseOriginal { get; set; } - public string MainFileCompare { get; set; } - public string MainFileImportPlainText { get; set; } - public string MainFileImportTimeCodes { get; set; } - public string MainFileExportEbu { get; set; } - public string MainFileExportPac { get; set; } - public string MainFileExportPlainText { get; set; } - public string MainEditUndo { get; set; } - public string MainEditRedo { get; set; } - public string MainEditFind { get; set; } - public string MainEditFindNext { get; set; } - public string MainEditReplace { get; set; } - public string MainEditMultipleReplace { get; set; } - public string MainEditGoToLineNumber { get; set; } - public string MainEditRightToLeft { get; set; } - public string MainEditFixRTLViaUnicodeChars { get; set; } - public string MainEditRemoveRTLUnicodeChars { get; set; } - public string MainEditReverseStartAndEndingForRTL { get; set; } - public string MainEditToggleTranslationOriginalInPreviews { get; set; } - public string MainEditInverseSelection { get; set; } - public string MainEditModifySelection { get; set; } - public string MainToolsFixCommonErrors { get; set; } - public string MainToolsFixCommonErrorsPreview { get; set; } - public string MainToolsMergeShortLines { get; set; } - public string MainToolsMergeDuplicateText { get; set; } - public string MainToolsMergeSameTimeCodes { get; set; } - public string MainToolsMakeEmptyFromCurrent { get; set; } - public string MainToolsSplitLongLines { get; set; } - public string MainToolsDurationsBridgeGap { get; set; } - public string MainToolsMinimumDisplayTimeBetweenParagraphs { get; set; } - - public string MainToolsRenumber { get; set; } - public string MainToolsRemoveTextForHI { get; set; } - public string MainToolsChangeCasing { get; set; } - public string MainToolsAutoDuration { get; set; } - public string MainToolsBatchConvert { get; set; } - public string MainToolsMeasurementConverter { get; set; } - public string MainToolsSplit { get; set; } - public string MainToolsAppend { get; set; } - public string MainToolsJoin { get; set; } - public string MainToolsBeamer { get; set; } - public string MainVideoOpen { get; set; } - public string MainVideoClose { get; set; } - public string MainVideoPause { get; set; } - public string MainVideoPlayFromJustBefore { get; set; } - public string MainVideoPlayPauseToggle { get; set; } - public string MainVideoShowHideVideo { get; set; } - public string MainVideoFoucsSetVideoPosition { get; set; } - public string MainVideoToggleVideoControls { get; set; } - public string MainVideo1FrameLeft { get; set; } - public string MainVideo1FrameRight { get; set; } - public string MainVideo1FrameLeftWithPlay { get; set; } - public string MainVideo1FrameRightWithPlay { get; set; } - public string MainVideo100MsLeft { get; set; } - public string MainVideo100MsRight { get; set; } - public string MainVideo500MsLeft { get; set; } - public string MainVideo500MsRight { get; set; } - public string MainVideo1000MsLeft { get; set; } - public string MainVideo1000MsRight { get; set; } - public string MainVideo5000MsLeft { get; set; } - public string MainVideo5000MsRight { get; set; } - public string MainVideoXSMsLeft { get; set; } - public string MainVideoXSMsRight { get; set; } - public string MainVideoXLMsLeft { get; set; } - public string MainVideoXLMsRight { get; set; } - public string MainVideo3000MsLeft { get; set; } - public string MainVideoGoToStartCurrent { get; set; } - public string MainVideoToggleStartEndCurrent { get; set; } - public string MainVideoPlayCurrent { get; set; } - public string MainVideoGoToPrevSubtitle { get; set; } - public string MainVideoGoToNextSubtitle { get; set; } - public string MainVideoGoToPrevChapter { get; set; } - public string MainVideoGoToNextChapter { get; set; } - public string MainVideoSelectNextSubtitle { get; set; } - public string MainVideoFullscreen { get; set; } - public string MainVideoSlower { get; set; } - public string MainVideoFaster { get; set; } - public string MainVideoReset { get; set; } - public string MainSpellCheck { get; set; } - public string MainSpellCheckFindDoubleWords { get; set; } - public string MainSpellCheckAddWordToNames { get; set; } - public string MainSynchronizationAdjustTimes { get; set; } - public string MainSynchronizationVisualSync { get; set; } - public string MainSynchronizationPointSync { get; set; } - public string MainSynchronizationPointSyncViaFile { get; set; } - public string MainSynchronizationChangeFrameRate { get; set; } - public string MainListViewItalic { get; set; } - public string MainListViewBold { get; set; } - public string MainListViewUnderline { get; set; } - public string MainListViewBox { get; set; } - public string MainListViewSplit { get; set; } - public string MainListViewToggleDashes { get; set; } - public string MainListViewToggleMusicSymbols { get; set; } - public string MainListViewAlignment { get; set; } - public string MainListViewAlignmentN1 { get; set; } - public string MainListViewAlignmentN2 { get; set; } - public string MainListViewAlignmentN3 { get; set; } - public string MainListViewAlignmentN4 { get; set; } - public string MainListViewAlignmentN5 { get; set; } - public string MainListViewAlignmentN6 { get; set; } - public string MainListViewAlignmentN7 { get; set; } - public string MainListViewAlignmentN8 { get; set; } - public string MainListViewAlignmentN9 { get; set; } - public string MainRemoveFormatting { get; set; } - public string MainListViewCopyText { get; set; } - public string MainListViewCopyTextFromOriginalToCurrent { get; set; } - public string MainListViewAutoDuration { get; set; } - public string MainListViewColumnDeleteText { get; set; } - public string MainListViewColumnDeleteTextAndShiftUp { get; set; } - public string MainListViewColumnInsertText { get; set; } - public string MainListViewColumnPaste { get; set; } - public string MainListViewColumnTextUp { get; set; } - public string MainListViewColumnTextDown { get; set; } - public string MainListViewFocusWaveform { get; set; } - public string MainListViewGoToNextError { get; set; } - public string MainListViewRemoveTimeCodes { get; set; } - public string MainTextBoxItalic { get; set; } - public string MainTextBoxSplitAtCursor { get; set; } - public string MainTextBoxSplitAtCursorAndVideoPos { get; set; } - public string MainTextBoxSplitSelectedLineBilingual { get; set; } - public string MainTextBoxMoveLastWordDown { get; set; } - public string MainTextBoxMoveFirstWordFromNextUp { get; set; } - public string MainTextBoxMoveLastWordDownCurrent { get; set; } - public string MainTextBoxMoveFirstWordUpCurrent { get; set; } - public string MainTextBoxSelectionToLower { get; set; } - public string MainTextBoxSelectionToUpper { get; set; } - public string MainTextBoxSelectionToggleCasing { get; set; } - public string MainTextBoxSelectionToRuby { get; set; } - public string MainTextBoxToggleAutoDuration { get; set; } - public string MainCreateInsertSubAtVideoPos { get; set; } - public string MainCreateInsertSubAtVideoPosNoTextBoxFocus { get; set; } - public string MainCreateSetStart { get; set; } - public string MainCreateSetEnd { get; set; } - public string MainAdjustSetEndAndPause { get; set; } - public string MainCreateSetEndAddNewAndGoToNew { get; set; } - public string MainCreateStartDownEndUp { get; set; } - public string MainAdjustSetStartAndOffsetTheRest { get; set; } - public string MainAdjustSetStartAndOffsetTheRest2 { get; set; } - public string MainAdjustSetEndAndOffsetTheRest { get; set; } - public string MainAdjustSetEndAndOffsetTheRestAndGoToNext { get; set; } - public string MainAdjustSetEndAndGotoNext { get; set; } - public string MainAdjustViaEndAutoStart { get; set; } - public string MainAdjustViaEndAutoStartAndGoToNext { get; set; } - public string MainAdjustSetStartAutoDurationAndGoToNext { get; set; } - public string MainAdjustSetEndNextStartAndGoToNext { get; set; } - public string MainAdjustStartDownEndUpAndGoToNext { get; set; } - public string MainAdjustSetStartAndEndOfPrevious { get; set; } - public string MainAdjustSetStartAndEndOfPreviousAndGoToNext { get; set; } - public string MainAdjustSetStartKeepDuration { get; set; } - public string MainAdjustSelected100MsForward { get; set; } - public string MainAdjustSelected100MsBack { get; set; } - public string MainAdjustStartXMsBack { get; set; } - public string MainAdjustStartXMsForward { get; set; } - public string MainAdjustEndXMsBack { get; set; } - public string MainAdjustEndXMsForward { get; set; } - public string MoveStartOneFrameBack { get; set; } - public string MoveStartOneFrameForward { get; set; } - public string MoveEndOneFrameBack { get; set; } - public string MoveEndOneFrameForward { get; set; } - public string MoveStartOneFrameBackKeepGapPrev { get; set; } - public string MoveStartOneFrameForwardKeepGapPrev { get; set; } - public string MoveEndOneFrameBackKeepGapNext { get; set; } - public string MoveEndOneFrameForwardKeepGapNext { get; set; } - public string MainAdjustSnapStartToNextSceneChange { get; set; } - public string MainAdjustSnapStartToNextSceneChangeWithGap { get; set; } - public string MainAdjustSnapEndToPreviousSceneChange { get; set; } - public string MainAdjustSnapEndToPreviousSceneChangeWithGap { get; set; } - public string MainAdjustExtendToNextSceneChange { get; set; } - public string MainAdjustExtendToNextSceneChangeWithGap { get; set; } - public string MainAdjustExtendToPreviousSceneChange { get; set; } - public string MainAdjustExtendToPreviousSceneChangeWithGap { get; set; } - public string MainAdjustExtendToNextSubtitle { get; set; } - public string MainAdjustExtendToPreviousSubtitle { get; set; } - public string MainAdjustExtendCurrentSubtitle { get; set; } - public string MainAdjustExtendPreviousLineEndToCurrentStart { get; set; } - public string MainAdjustExtendNextLineStartToCurrentEnd { get; set; } - public string MainInsertAfter { get; set; } - public string MainTextBoxAutoBreak { get; set; } - public string MainTextBoxBreakAtPosition { get; set; } - public string MainTextBoxBreakAtPositionAndGoToNext { get; set; } - public string MainTextBoxUnbreak { get; set; } - public string MainWaveformInsertAtCurrentPosition { get; set; } - public string MainInsertBefore { get; set; } - public string MainMergeDialog { get; set; } - public string MainToggleFocus { get; set; } - public string WaveformAdd { get; set; } - public string WaveformVerticalZoom { get; set; } - public string WaveformVerticalZoomOut { get; set; } - public string WaveformZoomIn { get; set; } - public string WaveformZoomOut { get; set; } - public string WaveformSplit { get; set; } - public string WaveformPlaySelection { get; set; } - public string WaveformPlaySelectionEnd { get; set; } - public string WaveformSearchSilenceForward { get; set; } - public string WaveformSearchSilenceBack { get; set; } - public string WaveformAddTextHere { get; set; } - public string WaveformAddTextHereFromClipboard { get; set; } - public string WaveformSetParagraphAsSelection { get; set; } - public string WaveformFocusListView { get; set; } - public string WaveformGoToPreviousSceneChange { get; set; } - public string WaveformGoToNextSceneChange { get; set; } - public string WaveformToggleSceneChange { get; set; } - public string WaveformGuessStart { get; set; } - public string Waveform100MsLeft { get; set; } - public string Waveform100MsRight { get; set; } - public string Waveform1000MsLeft { get; set; } - public string Waveform1000MsRight { get; set; } - public string MainTranslateGoogleIt { get; set; } - public string MainTranslateGoogleTranslate { get; set; } - public string MainTranslateCustomSearch1 { get; set; } - public string MainTranslateCustomSearch2 { get; set; } - public string MainTranslateCustomSearch3 { get; set; } - public string MainTranslateCustomSearch4 { get; set; } - public string MainTranslateCustomSearch5 { get; set; } - - public Shortcuts() - { - GeneralGoToFirstSelectedLine = "Control+L"; - GeneralMergeSelectedLines = "Control+Shift+M"; - GeneralToggleTranslationMode = "Control+Shift+O"; - GeneralSwitchOriginalAndTranslation = "Control+Alt+O"; - GeneralMergeOriginalAndTranslation = "Control+Alt+Shift+M"; - GeneralGoToNextSubtitle = "Shift+Return"; - GeneralToggleBookmarksWithText = "Control+Shift+B"; - MainFileNew = "Control+N"; - MainFileOpen = "Control+O"; - MainFileSave = "Control+S"; - MainEditUndo = "Control+Z"; - MainEditRedo = "Control+Y"; - MainEditFind = "Control+F"; - MainEditFindNext = "F3"; - MainEditReplace = "Control+H"; - MainEditMultipleReplace = "Control+Alt+M"; - MainEditGoToLineNumber = "Control+G"; - MainEditRightToLeft = "Control+Shift+Alt+R"; - MainEditInverseSelection = "Control+Shift+I"; - MainToolsFixCommonErrors = "Control+Shift+F"; - MainToolsFixCommonErrorsPreview = "Control+P"; - MainToolsRenumber = "Control+Shift+N"; - MainToolsRemoveTextForHI = "Control+Shift+H"; - MainToolsChangeCasing = "Control+Shift+C"; - MainVideoPlayFromJustBefore = "Shift+F10"; - MainVideoPlayPauseToggle = "Control+P"; - MainVideoPause = "Control+Alt+P"; - MainVideoShowHideVideo = "Control+Q"; - MainVideo500MsLeft = "Alt+Left"; - MainVideo500MsRight = "Alt+Right"; - MainVideoFullscreen = "Alt+Return"; - MainVideoReset = "Control+D0"; - MainSpellCheck = "Control+Shift+S"; - MainSpellCheckFindDoubleWords = "Control+Shift+D"; - MainSpellCheckAddWordToNames = "Control+Shift+L"; - MainSynchronizationAdjustTimes = "Control+Shift+A"; - MainSynchronizationVisualSync = "Control+Shift+V"; - MainSynchronizationPointSync = "Control+Shift+P"; - MainListViewItalic = "Control+I"; - MainTextBoxItalic = "Control+I"; - MainTextBoxSplitAtCursor = "Control+Alt+V"; - MainTextBoxSelectionToLower = "Control+U"; - MainTextBoxSelectionToUpper = "Control+Shift+U"; - MainTextBoxSelectionToggleCasing = "Ctrl+Shift+F3"; - MainToolsBeamer = "Control+Shift+Alt+B"; - MainCreateInsertSubAtVideoPos = "Shift+F9"; - MainVideoGoToStartCurrent = "Shift+F11"; - MainVideoToggleStartEndCurrent = "F4"; - MainVideoPlayCurrent = "F5"; - MainVideoGoToStartCurrent = "F6"; - MainVideo3000MsLeft = "F7"; - MainListViewGoToNextError = "F8"; - MainCreateSetStart = "F11"; - MainCreateSetEnd = "F12"; - MainAdjustSetStartAndOffsetTheRest = "Control+Space"; - MainAdjustSetStartAndOffsetTheRest2 = "F9"; - MainAdjustSetEndAndGotoNext = "F10"; - MainInsertAfter = "Alt+Insert"; - MainWaveformInsertAtCurrentPosition = "Insert"; - MainInsertBefore = "Control+Shift+Insert"; - MainTextBoxAutoBreak = "Control+R"; - WaveformVerticalZoom = "Shift+Add"; - WaveformVerticalZoomOut = "Shift+Subtract"; - GeneralHelp = "F1"; - WaveformAddTextHere = "Return"; - Waveform100MsLeft = "Shift+Left"; - Waveform100MsRight = "Shift+Right"; - Waveform1000MsLeft = "Left"; - Waveform1000MsRight = "Right"; - MainTranslateGoogleTranslate = "Control+Shift+G"; - MainAdjustExtendToNextSubtitle = "Control+Shift+E"; - MainAdjustExtendToPreviousSubtitle = "Alt+Shift+E"; - } - - public Shortcuts Clone() - { - var xws = new XmlWriterSettings { Indent = true }; - var sb = new StringBuilder(); - using (var textWriter = XmlWriter.Create(sb, xws)) - { - textWriter.WriteStartDocument(); - textWriter.WriteStartElement("Settings", string.Empty); - Settings.WriteShortcuts(this, textWriter); - textWriter.WriteEndElement(); - textWriter.WriteEndDocument(); - } - - var doc = new XmlDocument { PreserveWhitespace = true }; - doc.LoadXml(sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\"")); - var shortcuts = new Shortcuts(); - Settings.ReadShortcuts(doc, shortcuts); - return shortcuts; - } - - public static void Save(string fileName, Shortcuts shortcuts) - { - var xws = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 }; - var sb = new StringBuilder(); - using (var textWriter = XmlWriter.Create(sb, xws)) - { - textWriter.WriteStartDocument(); - textWriter.WriteStartElement("Settings", string.Empty); - Settings.WriteShortcuts(shortcuts, textWriter); - textWriter.WriteEndElement(); - textWriter.WriteEndDocument(); - } - File.WriteAllText(fileName, sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""), Encoding.UTF8); - } - - public static Shortcuts Load(string fileName) - { - var doc = new XmlDocument { PreserveWhitespace = true }; - using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - doc.Load(stream); - var shortcuts = new Shortcuts(); - Settings.ReadShortcuts(doc, shortcuts); - return shortcuts; - } - } - } - - public class RemoveTextForHearingImpairedSettings - { - public bool RemoveTextBetweenBrackets { get; set; } - public bool RemoveTextBetweenParentheses { get; set; } - public bool RemoveTextBetweenCurlyBrackets { get; set; } - public bool RemoveTextBetweenQuestionMarks { get; set; } - public bool RemoveTextBetweenCustom { get; set; } - public string RemoveTextBetweenCustomBefore { get; set; } - public string RemoveTextBetweenCustomAfter { get; set; } - public bool RemoveTextBetweenOnlySeparateLines { get; set; } - public bool RemoveTextBeforeColon { get; set; } - public bool RemoveTextBeforeColonOnlyIfUppercase { get; set; } - public bool RemoveTextBeforeColonOnlyOnSeparateLine { get; set; } - public bool RemoveInterjections { get; set; } - public bool RemoveInterjectionsOnlyOnSeparateLine { get; set; } - public bool RemoveIfContains { get; set; } - public bool RemoveIfAllUppercase { get; set; } - public string RemoveIfContainsText { get; set; } - - public RemoveTextForHearingImpairedSettings() - { - RemoveTextBetweenBrackets = true; - RemoveTextBetweenParentheses = true; - RemoveTextBetweenCurlyBrackets = true; - RemoveTextBetweenQuestionMarks = true; - RemoveTextBetweenCustom = false; - RemoveTextBetweenCustomBefore = "¶"; - RemoveTextBetweenCustomAfter = "¶"; - RemoveTextBeforeColon = true; - RemoveTextBeforeColonOnlyIfUppercase = true; - RemoveIfContainsText = "¶"; - } - } - - public class SubtitleBeaming - { - public string FontName { get; set; } - public int FontSize { get; set; } - public Color FontColor { get; set; } - public Color BorderColor { get; set; } - public int BorderWidth { get; set; } - - public SubtitleBeaming() - { - FontName = "Verdana"; - FontSize = 30; - FontColor = Color.White; - BorderColor = Color.DarkGray; - BorderWidth = 2; - } - } - - public class CompareSettings - { - public bool ShowOnlyDifferences { get; set; } - public bool OnlyLookForDifferenceInText { get; set; } - public bool IgnoreLineBreaks { get; set; } - public bool IgnoreFormatting { get; set; } - - public CompareSettings() - { - OnlyLookForDifferenceInText = true; - } - } - - public class Settings - { - public string Version { get; set; } - public CompareSettings Compare { get; set; } - public RecentFilesSettings RecentFiles { get; set; } - public GeneralSettings General { get; set; } - public ToolsSettings Tools { get; set; } - public FcpExportSettings FcpExportSettings { get; set; } - public SubtitleSettings SubtitleSettings { get; set; } - public ProxySettings Proxy { get; set; } - public WordListSettings WordLists { get; set; } - public FixCommonErrorsSettings CommonErrors { get; set; } - public VobSubOcrSettings VobSubOcr { get; set; } - public VideoControlsSettings VideoControls { get; set; } - public NetworkSettings NetworkSettings { get; set; } - public Shortcuts Shortcuts { get; set; } - public RemoveTextForHearingImpairedSettings RemoveTextForHearingImpaired { get; set; } - public SubtitleBeaming SubtitleBeaming { get; set; } - public List MultipleSearchAndReplaceGroups { get; set; } - - [XmlIgnore] - public Language Language { get; set; } - - public void Reset() - { - RecentFiles = new RecentFilesSettings(); - General = new GeneralSettings(); - Tools = new ToolsSettings(); - FcpExportSettings = new FcpExportSettings(); - WordLists = new WordListSettings(); - SubtitleSettings = new SubtitleSettings(); - Proxy = new ProxySettings(); - CommonErrors = new FixCommonErrorsSettings(); - VobSubOcr = new VobSubOcrSettings(); - VideoControls = new VideoControlsSettings(); - NetworkSettings = new NetworkSettings(); - MultipleSearchAndReplaceGroups = new List(); - Language = new Language(); - Shortcuts = new Shortcuts(); - RemoveTextForHearingImpaired = new RemoveTextForHearingImpairedSettings(); - SubtitleBeaming = new SubtitleBeaming(); - Compare = new CompareSettings(); - } - - private Settings() - { - Reset(); - } - - public void Save() - { - //this is too slow: Serialize(Configuration.SettingsFileName, this); - CustomSerialize(Configuration.SettingsFileName, this); - } - - //private static void Serialize(string fileName, Settings settings) - //{ - // var s = new XmlSerializer(typeof(Settings)); - // TextWriter w = new StreamWriter(fileName); - // s.Serialize(w, settings); - // w.Close(); - //} - - public static Settings GetSettings() - { - var settings = new Settings(); - var settingsFileName = Configuration.SettingsFileName; - if (File.Exists(settingsFileName)) - { - try - { - //too slow... :( - settings = Deserialize(settingsFileName); // 688 msecs - settings = CustomDeserialize(settingsFileName); // 15 msecs - - if (settings.General.DefaultEncoding.StartsWith("utf-8", StringComparison.Ordinal)) - { - settings.General.DefaultEncoding = TextEncoding.Utf8WithBom; - } - - if (string.IsNullOrEmpty(settings.Version)) - { // 3.5.14 or older - if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoToggleStartEndCurrent)) - { - settings.Shortcuts.MainVideoToggleStartEndCurrent = "F4"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoPlayCurrent)) - { - settings.Shortcuts.MainVideoPlayCurrent = "F5"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoGoToStartCurrent)) - { - settings.Shortcuts.MainVideoGoToStartCurrent = "F6"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainVideo3000MsLeft)) - { - settings.Shortcuts.MainVideo3000MsLeft = "F7"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainAdjustSetStartAndOffsetTheRest2)) - { - settings.Shortcuts.MainAdjustSetStartAndOffsetTheRest2 = "F9"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainAdjustSetEndAndGotoNext)) - { - settings.Shortcuts.MainAdjustSetEndAndGotoNext = "F10"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateSetStart)) - { - settings.Shortcuts.MainCreateSetStart = "F11"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateSetEnd)) - { - settings.Shortcuts.MainCreateSetEnd = "F12"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateInsertSubAtVideoPos)) - { - settings.Shortcuts.MainCreateInsertSubAtVideoPos = "Shift+F9"; - } - if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoGoToStartCurrent)) - { - settings.Shortcuts.MainVideoGoToStartCurrent = "Shift+F11"; - } - } - else if (settings.Version.StartsWith("3.5.15", StringComparison.Ordinal) || - settings.Version.StartsWith("3.5.14", StringComparison.Ordinal) || - settings.Version.StartsWith("3.5.13", StringComparison.Ordinal)) - { - settings.Shortcuts.MainTranslateGoogleTranslate = "Control+Shift+G"; - settings.Tools.MicrosoftTranslatorTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; - } - } - catch (Exception exception) - { - settings = new Settings(); - SeLogger.Error(exception, "Failed to load " + settingsFileName); - } - - if (!string.IsNullOrEmpty(settings.General.ListViewLineSeparatorString)) - { - settings.General.ListViewLineSeparatorString = settings.General.ListViewLineSeparatorString.Replace("\n", string.Empty).Replace("\r", string.Empty); - } - - if (string.IsNullOrWhiteSpace(settings.General.ListViewLineSeparatorString)) - { - settings.General.ListViewLineSeparatorString = "
"; - } - - if (settings.Shortcuts.GeneralToggleTranslationMode == "Control+U" && settings.Shortcuts.MainTextBoxSelectionToLower == "Control+U") - { - settings.Shortcuts.GeneralToggleTranslationMode = "Control+Shift+O"; - settings.Shortcuts.GeneralSwitchOriginalAndTranslation = "Control+Alt+O"; - } - - if (settings.General.UseFFmpegForWaveExtraction && string.IsNullOrEmpty(settings.General.FFmpegLocation) && Configuration.IsRunningOnWindows) - { - var guessPath = Path.Combine(Configuration.DataDirectory, "ffmpeg", "ffmpeg.exe"); - if (File.Exists(guessPath)) - { - settings.General.FFmpegLocation = guessPath; - } - } - } - - return settings; - } - - //private static Settings Deserialize(string fileName) - //{ - // var r = new StreamReader(fileName); - // var s = new XmlSerializer(typeof(Settings)); - // var settings = (Settings)s.Deserialize(r); - // r.Close(); - - // if (settings.RecentFiles == null) - // settings.RecentFiles = new RecentFilesSettings(); - // if (settings.General == null) - // settings.General = new GeneralSettings(); - // if (settings.SsaStyle == null) - // settings.SsaStyle = new SsaStyleSettings(); - // if (settings.CommonErrors == null) - // settings.CommonErrors = new FixCommonErrorsSettings(); - // if (settings.VideoControls == null) - // settings.VideoControls = new VideoControlsSettings(); - // if (settings.VobSubOcr == null) - // settings.VobSubOcr = new VobSubOcrSettings(); - // if (settings.MultipleSearchAndReplaceList == null) - // settings.MultipleSearchAndReplaceList = new List(); - // if (settings.NetworkSettings == null) - // settings.NetworkSettings = new NetworkSettings(); - // if (settings.Shortcuts == null) - // settings.Shortcuts = new Shortcuts(); - - // return settings; - //} - - /// - /// A faster serializer than xml serializer... which is insanely slow (first time)!!!! - /// This method is auto-generated with XmlSerializerGenerator - /// - /// File name of xml settings file to load - /// Newly loaded settings - private static Settings CustomDeserialize(string fileName) - { - var doc = new XmlDocument { PreserveWhitespace = true }; - using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - doc.Load(stream); - } - - var settings = new Settings(); - - XmlNode versionNode = doc.DocumentElement.SelectSingleNode("Version"); - if (versionNode != null) - { - settings.Version = versionNode.InnerText; - } - - // Compare - XmlNode nodeCompare = doc.DocumentElement.SelectSingleNode("Compare"); - if (nodeCompare != null) - { - XmlNode xnode = nodeCompare.SelectSingleNode("ShowOnlyDifferences"); - if (xnode != null) - { - settings.Compare.ShowOnlyDifferences = Convert.ToBoolean(xnode.InnerText); - } - - xnode = nodeCompare.SelectSingleNode("OnlyLookForDifferenceInText"); - if (xnode != null) - { - settings.Compare.OnlyLookForDifferenceInText = Convert.ToBoolean(xnode.InnerText); - } - - xnode = nodeCompare.SelectSingleNode("IgnoreLineBreaks"); - if (xnode != null) - { - settings.Compare.IgnoreLineBreaks = Convert.ToBoolean(xnode.InnerText); - } - - xnode = nodeCompare.SelectSingleNode("IgnoreFormatting"); - if (xnode != null) - { - settings.Compare.IgnoreFormatting = Convert.ToBoolean(xnode.InnerText); - } - } - - // Recent files - XmlNode node = doc.DocumentElement.SelectSingleNode("RecentFiles"); - foreach (XmlNode listNode in node.SelectNodes("FileNames/FileName")) - { - string firstVisibleIndex = "-1"; - if (listNode.Attributes["FirstVisibleIndex"] != null) - { - firstVisibleIndex = listNode.Attributes["FirstVisibleIndex"].Value; - } - - string firstSelectedIndex = "-1"; - if (listNode.Attributes["FirstSelectedIndex"] != null) - { - firstSelectedIndex = listNode.Attributes["FirstSelectedIndex"].Value; - } - - string videoFileName = null; - if (listNode.Attributes["VideoFileName"] != null) - { - videoFileName = listNode.Attributes["VideoFileName"].Value; - } - - string originalFileName = null; - if (listNode.Attributes["OriginalFileName"] != null) - { - originalFileName = listNode.Attributes["OriginalFileName"].Value; - } - - long videoOffset = 0; - if (listNode.Attributes["VideoOffset"] != null) - { - long.TryParse(listNode.Attributes["VideoOffset"].Value, out videoOffset); - } - - settings.RecentFiles.Files.Add(new RecentFileEntry { FileName = listNode.InnerText, FirstVisibleIndex = int.Parse(firstVisibleIndex, CultureInfo.InvariantCulture), FirstSelectedIndex = int.Parse(firstSelectedIndex, CultureInfo.InvariantCulture), VideoFileName = videoFileName, OriginalFileName = originalFileName, VideoOffsetInMs = videoOffset }); - } - - // General - node = doc.DocumentElement.SelectSingleNode("General"); - - // Profiles - int profileCount = 0; - foreach (XmlNode listNode in node.SelectNodes("Profiles/Profile")) - { - if (profileCount == 0) - { - settings.General.Profiles.Clear(); - } - - var p = new RulesProfile(); - var subtitleLineMaximumLength = listNode.SelectSingleNode("SubtitleLineMaximumLength")?.InnerText; - var subtitleMaximumCharactersPerSeconds = listNode.SelectSingleNode("SubtitleMaximumCharactersPerSeconds")?.InnerText; - var subtitleOptimalCharactersPerSeconds = listNode.SelectSingleNode("SubtitleOptimalCharactersPerSeconds")?.InnerText; - var subtitleMinimumDisplayMilliseconds = listNode.SelectSingleNode("SubtitleMinimumDisplayMilliseconds")?.InnerText; - var subtitleMaximumDisplayMilliseconds = listNode.SelectSingleNode("SubtitleMaximumDisplayMilliseconds")?.InnerText; - var subtitleMaximumWordsPerMinute = listNode.SelectSingleNode("SubtitleMaximumWordsPerMinute")?.InnerText; - var cpsIncludesSpace = listNode.SelectSingleNode("CpsIncludesSpace")?.InnerText; - var maxNumberOfLines = listNode.SelectSingleNode("MaxNumberOfLines")?.InnerText; - var mergeLinesShorterThan = listNode.SelectSingleNode("MergeLinesShorterThan")?.InnerText; - var minimumMillisecondsBetweenLines = listNode.SelectSingleNode("MinimumMillisecondsBetweenLines")?.InnerText; - - var dialogStyle = DialogType.DashBothLinesWithSpace; - if (listNode.SelectSingleNode("DialogStyle") == null || !Enum.IsDefined(typeof(DialogType), listNode.SelectSingleNode("DialogStyle").InnerText)) - { //TODO: Remove after 2022 - if (listNode.SelectSingleNode("Name") != null) - { - var lookup = new List(); - GeneralSettings.AddExtraProfiles(lookup); - var match = lookup.FirstOrDefault(LookupProfile => LookupProfile.Name == listNode.SelectSingleNode("Name").InnerText); - if (match != null) - { - dialogStyle = match.DialogStyle; // update style when upgrading from 3.5.13 or below - } - else - { - dialogStyle = DialogType.DashBothLinesWithSpace; - } - } - } - else - { - dialogStyle = (DialogType)Enum.Parse(typeof(DialogType), listNode.SelectSingleNode("DialogStyle")?.InnerText); - } - - var continuationStyle = ContinuationStyle.NoneLeadingTrailingDots; - if (listNode.SelectSingleNode("ContinuationStyle") == null || !Enum.IsDefined(typeof(ContinuationStyle), listNode.SelectSingleNode("ContinuationStyle").InnerText)) - { //TODO: Remove after 2022 - if (listNode.SelectSingleNode("Name") != null) - { - var lookup = new List(); - GeneralSettings.AddExtraProfiles(lookup); - var match = lookup.FirstOrDefault(LookupProfile => LookupProfile.Name == listNode.SelectSingleNode("Name").InnerText); - if (match != null) - { - continuationStyle = match.ContinuationStyle; // update style when upgrading from 3.5.13 or below - } - else - { - continuationStyle = ContinuationStyle.NoneLeadingTrailingDots; - } - } - } - else - { - continuationStyle = (ContinuationStyle)Enum.Parse(typeof(ContinuationStyle), listNode.SelectSingleNode("ContinuationStyle")?.InnerText); - } - - settings.General.Profiles.Add(new RulesProfile - { - Name = listNode.SelectSingleNode("Name")?.InnerText, - SubtitleLineMaximumLength = Convert.ToInt32(subtitleLineMaximumLength, CultureInfo.InvariantCulture), - SubtitleMaximumCharactersPerSeconds = Convert.ToDecimal(subtitleMaximumCharactersPerSeconds, CultureInfo.InvariantCulture), - SubtitleOptimalCharactersPerSeconds = Convert.ToDecimal(subtitleOptimalCharactersPerSeconds, CultureInfo.InvariantCulture), - SubtitleMinimumDisplayMilliseconds = Convert.ToInt32(subtitleMinimumDisplayMilliseconds, CultureInfo.InvariantCulture), - SubtitleMaximumDisplayMilliseconds = Convert.ToInt32(subtitleMaximumDisplayMilliseconds, CultureInfo.InvariantCulture), - SubtitleMaximumWordsPerMinute = Convert.ToDecimal(subtitleMaximumWordsPerMinute, CultureInfo.InvariantCulture), - CpsIncludesSpace = Convert.ToBoolean(cpsIncludesSpace, CultureInfo.InvariantCulture), - MaxNumberOfLines = Convert.ToInt32(maxNumberOfLines, CultureInfo.InvariantCulture), - MergeLinesShorterThan = Convert.ToInt32(mergeLinesShorterThan, CultureInfo.InvariantCulture), - MinimumMillisecondsBetweenLines = Convert.ToInt32(minimumMillisecondsBetweenLines, CultureInfo.InvariantCulture), - DialogStyle = dialogStyle, - ContinuationStyle = continuationStyle - }); - profileCount++; - } - - - XmlNode subNode = node.SelectSingleNode("CurrentProfile"); - if (subNode != null) - { - settings.General.CurrentProfile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ShowToolbarNew"); - if (subNode != null) - { - settings.General.ShowToolbarNew = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarOpen"); - if (subNode != null) - { - settings.General.ShowToolbarOpen = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarSave"); - if (subNode != null) - { - settings.General.ShowToolbarSave = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarSaveAs"); - if (subNode != null) - { - settings.General.ShowToolbarSaveAs = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarFind"); - if (subNode != null) - { - settings.General.ShowToolbarFind = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarReplace"); - if (subNode != null) - { - settings.General.ShowToolbarReplace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarFixCommonErrors"); - if (subNode != null) - { - settings.General.ShowToolbarFixCommonErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarRemoveTextForHi"); - if (subNode != null) - { - settings.General.ShowToolbarRemoveTextForHi = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarVisualSync"); - if (subNode != null) - { - settings.General.ShowToolbarVisualSync = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarSpellCheck"); - if (subNode != null) - { - settings.General.ShowToolbarSpellCheck = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarNetflixGlyphCheck"); - if (subNode != null) - { - settings.General.ShowToolbarNetflixGlyphCheck = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarSettings"); - if (subNode != null) - { - settings.General.ShowToolbarSettings = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowToolbarHelp"); - if (subNode != null) - { - settings.General.ShowToolbarHelp = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowFrameRate"); - if (subNode != null) - { - settings.General.ShowFrameRate = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowVideoPlayer"); - if (subNode != null) - { - settings.General.ShowVideoPlayer = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowAudioVisualizer"); - if (subNode != null) - { - settings.General.ShowAudioVisualizer = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowWaveform"); - if (subNode != null) - { - settings.General.ShowWaveform = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowSpectrogram"); - if (subNode != null) - { - settings.General.ShowSpectrogram = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DefaultFrameRate"); - if (subNode != null) - { - settings.General.DefaultFrameRate = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - if (settings.General.DefaultFrameRate > 23975) - { - settings.General.DefaultFrameRate = 23.976; - } - - settings.General.CurrentFrameRate = settings.General.DefaultFrameRate; - } - subNode = node.SelectSingleNode("DefaultSubtitleFormat"); - if (subNode != null) - { - settings.General.DefaultSubtitleFormat = subNode.InnerText; - } - - subNode = node.SelectSingleNode("DefaultEncoding"); - if (subNode != null) - { - settings.General.DefaultEncoding = subNode.InnerText; - } - - subNode = node.SelectSingleNode("AutoConvertToUtf8"); - if (subNode != null) - { - settings.General.AutoConvertToUtf8 = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoGuessAnsiEncoding"); - if (subNode != null) - { - settings.General.AutoGuessAnsiEncoding = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SystemSubtitleFontNameOverride"); - if (subNode != null) - { - settings.General.SystemSubtitleFontNameOverride = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SystemSubtitleFontSizeOverride"); - if (!string.IsNullOrEmpty(subNode?.InnerText)) - { - settings.General.SystemSubtitleFontSizeOverride = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleFontName"); - if (subNode != null) - { - settings.General.SubtitleFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SubtitleTextBoxFontSize"); - if (subNode != null) - { - settings.General.SubtitleTextBoxFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleListViewFontSize"); - if (subNode != null) - { - settings.General.SubtitleListViewFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleTextBoxFontBold"); - if (subNode != null) - { - settings.General.SubtitleTextBoxFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleListViewFontBold"); - if (subNode != null) - { - settings.General.SubtitleListViewFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleTextBoxSyntaxColor"); - if (subNode != null) - { - settings.General.SubtitleTextBoxSyntaxColor = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleTextBoxHtmlColor"); - if (subNode != null) - { - settings.General.SubtitleTextBoxHtmlColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("SubtitleTextBoxAssColor"); - if (subNode != null) - { - settings.General.SubtitleTextBoxAssColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("SubtitleFontColor"); - if (subNode != null) - { - settings.General.SubtitleFontColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("SubtitleBackgroundColor"); - if (subNode != null) - { - settings.General.SubtitleBackgroundColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("MeasureFontName"); - if (subNode != null) - { - settings.General.MeasureFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MeasureFontSize"); - if (subNode != null) - { - settings.General.MeasureFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MeasureFontBold"); - if (subNode != null) - { - settings.General.MeasureFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleLineMaximumPixelWidth"); - if (subNode != null) - { - settings.General.SubtitleLineMaximumPixelWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("CenterSubtitleInTextBox"); - if (subNode != null) - { - settings.General.CenterSubtitleInTextBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowRecentFiles"); - if (subNode != null) - { - settings.General.ShowRecentFiles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RememberSelectedLine"); - if (subNode != null) - { - settings.General.RememberSelectedLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartLoadLastFile"); - if (subNode != null) - { - settings.General.StartLoadLastFile = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartRememberPositionAndSize"); - if (subNode != null) - { - settings.General.StartRememberPositionAndSize = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartPosition"); - if (subNode != null) - { - settings.General.StartPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("StartSize"); - if (subNode != null) - { - settings.General.StartSize = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SplitContainerMainSplitterDistance"); - if (subNode != null) - { - settings.General.SplitContainerMainSplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SplitContainer1SplitterDistance"); - if (subNode != null) - { - settings.General.SplitContainer1SplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SplitContainerListViewAndTextSplitterDistance"); - if (subNode != null) - { - settings.General.SplitContainerListViewAndTextSplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartInSourceView"); - if (subNode != null) - { - settings.General.StartInSourceView = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveBlankLinesWhenOpening"); - if (subNode != null) - { - settings.General.RemoveBlankLinesWhenOpening = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveBadCharsWhenOpening"); - if (subNode != null) - { - settings.General.RemoveBadCharsWhenOpening = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleLineMaximumLength"); - if (subNode != null) - { - settings.General.SubtitleLineMaximumLength = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MaxNumberOfLines"); - if (subNode != null) - { - settings.General.MaxNumberOfLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MergeLinesShorterThan"); - if (subNode != null) - { - settings.General.MergeLinesShorterThan = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleMinimumDisplayMilliseconds"); - if (subNode != null) - { - settings.General.SubtitleMinimumDisplayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleMaximumDisplayMilliseconds"); - if (subNode != null) - { - settings.General.SubtitleMaximumDisplayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MinimumMillisecondsBetweenLines"); - if (subNode != null) - { - settings.General.MinimumMillisecondsBetweenLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SetStartEndHumanDelay"); - if (subNode != null) - { - settings.General.SetStartEndHumanDelay = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoWrapLineWhileTyping"); - if (subNode != null) - { - settings.General.AutoWrapLineWhileTyping = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleMaximumCharactersPerSeconds"); - if (subNode != null) - { - settings.General.SubtitleMaximumCharactersPerSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleOptimalCharactersPerSeconds"); - if (subNode != null) - { - settings.General.SubtitleOptimalCharactersPerSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("CharactersPerSecondsIgnoreWhiteSpace"); - if (subNode != null) - { - settings.General.CharactersPerSecondsIgnoreWhiteSpace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("IgnoreArabicDiacritics"); - if (subNode != null) - { - settings.General.IgnoreArabicDiacritics = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SubtitleMaximumWordsPerMinute"); - if (subNode != null) - { - settings.General.SubtitleMaximumWordsPerMinute = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DialogStyle"); - if (subNode != null) - { - settings.General.DialogStyle = (DialogType)Enum.Parse(typeof(DialogType), subNode.InnerText); - } - - subNode = node.SelectSingleNode("ContinuationStyle"); - if (subNode != null) - { - settings.General.ContinuationStyle = (ContinuationStyle)Enum.Parse(typeof(ContinuationStyle), subNode.InnerText); - } - - subNode = node.SelectSingleNode("ContinuationPause"); - if (subNode != null) - { - settings.General.ContinuationPause = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsAllCaps"); - if (subNode != null) - { - settings.General.FixContinuationStyleUncheckInsertsAllCaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsItalic"); - if (subNode != null) - { - settings.General.FixContinuationStyleUncheckInsertsItalic = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsLowercase"); - if (subNode != null) - { - settings.General.FixContinuationStyleUncheckInsertsLowercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleHideContinuationCandidatesWithoutName"); - if (subNode != null) - { - settings.General.FixContinuationStyleHideContinuationCandidatesWithoutName = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleIgnoreLyrics"); - if (subNode != null) - { - settings.General.FixContinuationStyleIgnoreLyrics = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellCheckLanguage"); - if (subNode != null) - { - settings.General.SpellCheckLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("VideoPlayer"); - if (subNode != null) - { - settings.General.VideoPlayer = subNode.InnerText; - } - - subNode = node.SelectSingleNode("VideoPlayerDefaultVolume"); - if (subNode != null) - { - settings.General.VideoPlayerDefaultVolume = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VideoPlayerPreviewFontSize"); - if (subNode != null) - { - settings.General.VideoPlayerPreviewFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VideoPlayerPreviewFontBold"); - if (subNode != null) - { - settings.General.VideoPlayerPreviewFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VideoPlayerShowStopButton"); - if (subNode != null) - { - settings.General.VideoPlayerShowStopButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VideoPlayerShowMuteButton"); - if (subNode != null) - { - settings.General.VideoPlayerShowMuteButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VideoPlayerShowFullscreenButton"); - if (subNode != null) - { - settings.General.VideoPlayerShowFullscreenButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Language"); - if (subNode != null) - { - settings.General.Language = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ListViewLineSeparatorString"); - if (subNode != null) - { - settings.General.ListViewLineSeparatorString = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ListViewDoubleClickAction"); - if (subNode != null) - { - settings.General.ListViewDoubleClickAction = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SaveAsUseFileNameFrom"); - if (subNode != null) - { - settings.General.SaveAsUseFileNameFrom = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UppercaseLetters"); - if (subNode != null) - { - settings.General.UppercaseLetters = subNode.InnerText; - } - - subNode = node.SelectSingleNode("DefaultAdjustMilliseconds"); - if (subNode != null) - { - settings.General.DefaultAdjustMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoRepeatOn"); - if (subNode != null) - { - settings.General.AutoRepeatOn = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoRepeatCount"); - if (subNode != null) - { - settings.General.AutoRepeatCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SyncListViewWithVideoWhilePlaying"); - if (subNode != null) - { - settings.General.SyncListViewWithVideoWhilePlaying = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoContinueDelay"); - if (subNode != null) - { - settings.General.AutoContinueDelay = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoContinueOn"); - if (subNode != null) - { - settings.General.AutoContinueOn = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBackupSeconds"); - if (subNode != null) - { - settings.General.AutoBackupSeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBackupDeleteAfterMonths"); - if (subNode != null) - { - settings.General.AutoBackupDeleteAfterMonths = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellChecker"); - if (subNode != null) - { - settings.General.SpellChecker = subNode.InnerText; - } - - subNode = node.SelectSingleNode("AllowEditOfOriginalSubtitle"); - if (subNode != null) - { - settings.General.AllowEditOfOriginalSubtitle = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("PromptDeleteLines"); - if (subNode != null) - { - settings.General.PromptDeleteLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Undocked"); - if (subNode != null) - { - settings.General.Undocked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UndockedVideoPosition"); - if (subNode != null) - { - settings.General.UndockedVideoPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UndockedVideoFullscreen"); - if (subNode != null) - { - settings.General.UndockedVideoFullscreen = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UndockedWaveformPosition"); - if (subNode != null) - { - settings.General.UndockedWaveformPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UndockedVideoControlsPosition"); - if (subNode != null) - { - settings.General.UndockedVideoControlsPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformCenter"); - if (subNode != null) - { - settings.General.WaveformCenter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformUpdateIntervalMs"); - if (subNode != null) - { - settings.General.WaveformUpdateIntervalMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SmallDelayMilliseconds"); - if (subNode != null) - { - settings.General.SmallDelayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LargeDelayMilliseconds"); - if (subNode != null) - { - settings.General.LargeDelayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowOriginalAsPreviewIfAvailable"); - if (subNode != null) - { - settings.General.ShowOriginalAsPreviewIfAvailable = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LastPacCodePage"); - if (subNode != null) - { - settings.General.LastPacCodePage = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OpenSubtitleExtraExtensions"); - if (subNode != null) - { - settings.General.OpenSubtitleExtraExtensions = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("ListViewColumnsRememberSize"); - if (subNode != null) - { - settings.General.ListViewColumnsRememberSize = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("ListViewNumberWidth"); - if (subNode != null) - { - settings.General.ListViewNumberWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewStartWidth"); - if (subNode != null) - { - settings.General.ListViewStartWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewEndWidth"); - if (subNode != null) - { - settings.General.ListViewEndWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewDurationWidth"); - if (subNode != null) - { - settings.General.ListViewDurationWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewCpsWidth"); - if (subNode != null) - { - settings.General.ListViewCpsWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewWpmWidth"); - if (subNode != null) - { - settings.General.ListViewWpmWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewGapWidth"); - if (subNode != null) - { - settings.General.ListViewGapWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewActorWidth"); - if (subNode != null) - { - settings.General.ListViewActorWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewRegionWidth"); - if (subNode != null) - { - settings.General.ListViewRegionWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewTextWidth"); - if (subNode != null) - { - settings.General.ListViewTextWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DirectShowDoubleLoad"); - if (subNode != null) - { - settings.General.DirectShowDoubleLoad = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VlcWaveTranscodeSettings"); - if (subNode != null) - { - settings.General.VlcWaveTranscodeSettings = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("VlcLocation"); - if (subNode != null) - { - settings.General.VlcLocation = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("VlcLocationRelative"); - if (subNode != null) - { - settings.General.VlcLocationRelative = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MpvVideoOutputWindows"); - if (subNode != null) - { - settings.General.MpvVideoOutputWindows = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MpvVideoOutputLinux"); - if (subNode != null) - { - settings.General.MpvVideoOutputLinux = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MpvExtraOption"); - if (subNode != null) - { - settings.General.MpvExtraOption = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MpvLogging"); - if (subNode != null) - { - settings.General.MpvLogging = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("MpvHandlesPreviewText"); - if (subNode != null) - { - settings.General.MpvHandlesPreviewText = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("MpcHcLocation"); - if (subNode != null) - { - settings.General.MpcHcLocation = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MkvMergeLocation"); - if (subNode != null) - { - settings.General.MkvMergeLocation = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("UseFFmpegForWaveExtraction"); - if (subNode != null) - { - settings.General.UseFFmpegForWaveExtraction = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("FFmpegLocation"); - if (subNode != null) - { - settings.General.FFmpegLocation = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("FFmpegSceneThreshold"); - if (subNode != null) - { - settings.General.FFmpegSceneThreshold = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("UseTimeFormatHHMMSSFF"); - if (subNode != null) - { - settings.General.UseTimeFormatHHMMSSFF = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("SplitBehavior"); - if (subNode != null) - { - settings.General.SplitBehavior = Convert.ToInt32(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("SplitRemovesDashes"); - if (subNode != null) - { - settings.General.SplitRemovesDashes = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("ClearStatusBarAfterSeconds"); - if (subNode != null) - { - settings.General.ClearStatusBarAfterSeconds = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Company"); - if (subNode != null) - { - settings.General.Company = subNode.InnerText; - } - - subNode = node.SelectSingleNode("DisableVideoAutoLoading"); - if (subNode != null) - { - settings.General.DisableVideoAutoLoading = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("AllowVolumeBoost"); - if (subNode != null) - { - settings.General.AllowVolumeBoost = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("RightToLeftMode"); - if (subNode != null) - { - settings.General.RightToLeftMode = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("LastSaveAsFormat"); - if (subNode != null) - { - settings.General.LastSaveAsFormat = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("CheckForUpdates"); - if (subNode != null) - { - settings.General.CheckForUpdates = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("LastCheckForUpdates"); - if (subNode != null) - { - settings.General.LastCheckForUpdates = Convert.ToDateTime(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("AutoSave"); - if (subNode != null) - { - settings.General.AutoSave = Convert.ToBoolean(subNode.InnerText.Trim()); - } - - subNode = node.SelectSingleNode("PreviewAssaText"); - if (subNode != null) - { - settings.General.PreviewAssaText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ShowProgress"); - if (subNode != null) - { - settings.General.ShowProgress = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowNegativeDurationInfoOnSave"); - if (subNode != null) - { - settings.General.ShowNegativeDurationInfoOnSave = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowFormatRequiresUtf8Warning"); - if (subNode != null) - { - settings.General.ShowFormatRequiresUtf8Warning = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TitleBarAsterisk"); - if (subNode != null) - { - settings.General.TitleBarAsterisk = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("MeasurementConverterCloseOnInsert"); - if (subNode != null) - { - settings.General.MeasurementConverterCloseOnInsert = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MeasurementConverterCategories"); - if (subNode != null) - { - settings.General.MeasurementConverterCategories = subNode.InnerText.Trim(); - } - - subNode = node.SelectSingleNode("SubtitleTextBoxMaxHeight"); - if (subNode != null) - { - settings.General.SubtitleTextBoxMaxHeight = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UseDarkTheme"); - if (subNode != null) - { - settings.General.UseDarkTheme = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ShowBetaStuff"); - if (subNode != null) - { - settings.General.ShowBetaStuff = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NewEmptyDefaultMs"); - if (subNode != null) - { - settings.General.NewEmptyDefaultMs = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MoveVideo100Or500MsPlaySmallSample"); - if (subNode != null) - { - settings.General.MoveVideo100Or500MsPlaySmallSample = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); - } - - // Tools - node = doc.DocumentElement.SelectSingleNode("Tools"); - subNode = node.SelectSingleNode("StartSceneIndex"); - if (subNode != null) - { - settings.Tools.StartSceneIndex = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("EndSceneIndex"); - if (subNode != null) - { - settings.Tools.EndSceneIndex = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("VerifyPlaySeconds"); - if (subNode != null) - { - settings.Tools.VerifyPlaySeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixShortDisplayTimesAllowMoveStartTime"); - if (subNode != null) - { - settings.Tools.FixShortDisplayTimesAllowMoveStartTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveEmptyLinesBetweenText"); - if (subNode != null) - { - settings.Tools.RemoveEmptyLinesBetweenText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MusicSymbol"); - if (subNode != null) - { - settings.Tools.MusicSymbol = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MusicSymbolReplace"); - if (subNode != null) - { - settings.Tools.MusicSymbolReplace = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UnicodeSymbolsToInsert"); - if (subNode != null) - { - settings.Tools.UnicodeSymbolsToInsert = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SpellCheckAutoChangeNames"); - if (subNode != null) - { - settings.Tools.SpellCheckAutoChangeNames = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellCheckAutoChangeNamesUseSuggestions"); - if (subNode != null) - { - settings.Tools.SpellCheckAutoChangeNamesUseSuggestions = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellCheckOneLetterWords"); - if (subNode != null) - { - settings.Tools.CheckOneLetterWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellCheckEnglishAllowInQuoteAsIng"); - if (subNode != null) - { - settings.Tools.SpellCheckEnglishAllowInQuoteAsIng = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RememberUseAlwaysList"); - if (subNode != null) - { - settings.Tools.RememberUseAlwaysList = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpellCheckShowCompletedMessage"); - if (subNode != null) - { - settings.Tools.SpellCheckShowCompletedMessage = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OcrFixUseHardcodedRules"); - if (subNode != null) - { - settings.Tools.OcrFixUseHardcodedRules = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OcrBinaryImageCompareRgbThreshold"); - if (subNode != null) - { - settings.Tools.OcrBinaryImageCompareRgbThreshold = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OcrTesseract4RgbThreshold"); - if (subNode != null) - { - settings.Tools.OcrTesseract4RgbThreshold = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OcrAddLetterRow1"); - if (subNode != null) - { - settings.Tools.OcrAddLetterRow1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("OcrAddLetterRow2"); - if (subNode != null) - { - settings.Tools.OcrAddLetterRow2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("OcrTrainFonts"); - if (subNode != null) - { - settings.Tools.OcrTrainFonts = subNode.InnerText; - } - - subNode = node.SelectSingleNode("OcrTrainMergedLetters"); - if (subNode != null) - { - settings.Tools.OcrTrainMergedLetters = subNode.InnerText; - } - - subNode = node.SelectSingleNode("OcrTrainSrtFile"); - if (subNode != null) - { - settings.Tools.OcrTrainSrtFile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Interjections"); - if (subNode != null) - { - settings.Tools.Interjections = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MicrosoftBingApiId"); - if (subNode != null) - { - settings.Tools.MicrosoftBingApiId = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MicrosoftTranslatorApiKey"); - if (subNode != null) - { - settings.Tools.MicrosoftTranslatorApiKey = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MicrosoftTranslatorTokenEndpoint"); - if (subNode != null) - { - settings.Tools.MicrosoftTranslatorTokenEndpoint = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MicrosoftTranslatorCategory"); - if (subNode != null) - { - settings.Tools.MicrosoftTranslatorCategory = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GoogleApiV2Key"); - if (subNode != null) - { - settings.Tools.GoogleApiV2Key = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GoogleTranslateNoKeyWarningShow"); - if (subNode != null) - { - settings.Tools.GoogleTranslateNoKeyWarningShow = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("GoogleApiV2KeyInfoShow"); - if (subNode != null) - { - settings.Tools.GoogleApiV2KeyInfoShow = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("GoogleApiV1ChunkSize"); - if (subNode != null) - { - settings.Tools.GoogleApiV1ChunkSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("GoogleTranslateLastTargetLanguage"); - if (subNode != null) - { - settings.Tools.GoogleTranslateLastTargetLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("TranslateAllowSplit"); - if (subNode != null) - { - settings.Tools.TranslateAllowSplit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorDurationSmall"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorDurationSmall = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorDurationBig"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorDurationBig = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorLongLines"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorLongLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorWideLines"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorWideLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxMoreThanXLines"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxMoreThanXLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorOverlap"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorOverlap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxColorGap"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxColorGap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewSyntaxErrorColor"); - if (subNode != null) - { - settings.Tools.ListViewSyntaxErrorColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("ListViewUnfocusedSelectedColor"); - if (subNode != null) - { - settings.Tools.ListViewUnfocusedSelectedColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("ListViewShowColumnEndTime"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnEndTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnDuration"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnDuration = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnCharsPerSec"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnCharsPerSec = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnWordsPerMin"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnWordsPerMin = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnGap"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnGap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnActor"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnActor = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ListViewShowColumnRegion"); - if (subNode != null) - { - settings.Tools.ListViewShowColumnRegion = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SplitAdvanced"); - if (subNode != null) - { - settings.Tools.SplitAdvanced = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SplitOutputFolder"); - if (subNode != null) - { - settings.Tools.SplitOutputFolder = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SplitNumberOfParts"); - if (subNode != null) - { - settings.Tools.SplitNumberOfParts = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SplitVia"); - if (subNode != null) - { - settings.Tools.SplitVia = subNode.InnerText; - } - - subNode = node.SelectSingleNode("JoinCorrectTimeCodes"); - if (subNode != null) - { - settings.Tools.JoinCorrectTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("JoinAddMs"); - if (subNode != null) - { - settings.Tools.JoinAddMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NewEmptyTranslationText"); - if (subNode != null) - { - settings.Tools.NewEmptyTranslationText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertOutputFolder"); - if (subNode != null) - { - settings.Tools.BatchConvertOutputFolder = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertOverwriteExisting"); - if (subNode != null) - { - settings.Tools.BatchConvertOverwriteExisting = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertSaveInSourceFolder"); - if (subNode != null) - { - settings.Tools.BatchConvertSaveInSourceFolder = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertRemoveFormatting"); - if (subNode != null) - { - settings.Tools.BatchConvertRemoveFormatting = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertRemoveStyle"); - if (subNode != null) - { - settings.Tools.BatchConvertRemoveStyle = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertBridgeGaps"); - if (subNode != null) - { - settings.Tools.BatchConvertBridgeGaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertFixCasing"); - if (subNode != null) - { - settings.Tools.BatchConvertFixCasing = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertRemoveTextForHI"); - if (subNode != null) - { - settings.Tools.BatchConvertRemoveTextForHI = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertFixCommonErrors"); - if (subNode != null) - { - settings.Tools.BatchConvertFixCommonErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertMultipleReplace"); - if (subNode != null) - { - settings.Tools.BatchConvertMultipleReplace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertFixRtl"); - if (subNode != null) - { - settings.Tools.BatchConvertFixRtl = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertFixRtlMode"); - if (subNode != null) - { - settings.Tools.BatchConvertFixRtlMode = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertAutoBalance"); - if (subNode != null) - { - settings.Tools.BatchConvertAutoBalance = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertSplitLongLines"); - if (subNode != null) - { - settings.Tools.BatchConvertSplitLongLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertSetMinDisplayTimeBetweenSubtitles"); - if (subNode != null) - { - settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertMergeShortLines"); - if (subNode != null) - { - settings.Tools.BatchConvertMergeShortLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertRemoveLineBreaks"); - if (subNode != null) - { - settings.Tools.BatchConvertRemoveLineBreaks = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertMergeSameText"); - if (subNode != null) - { - settings.Tools.BatchConvertMergeSameText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertMergeSameTimeCodes"); - if (subNode != null) - { - settings.Tools.BatchConvertMergeSameTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertChangeSpeed"); - if (subNode != null) - { - settings.Tools.BatchConvertChangeSpeed = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertAdjustDisplayDuration"); - if (subNode != null) - { - settings.Tools.BatchConvertAdjustDisplayDuration = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertApplyDurationLimits"); - if (subNode != null) - { - settings.Tools.BatchConvertApplyDurationLimits = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertDeleteLines"); - if (subNode != null) - { - settings.Tools.BatchConvertDeleteLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertChangeFrameRate"); - if (subNode != null) - { - settings.Tools.BatchConvertChangeFrameRate = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertOffsetTimeCodes"); - if (subNode != null) - { - settings.Tools.BatchConvertOffsetTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertLanguage"); - if (subNode != null) - { - settings.Tools.BatchConvertLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertFormat"); - if (subNode != null) - { - settings.Tools.BatchConvertFormat = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertAssStyles"); - if (subNode != null) - { - settings.Tools.BatchConvertAssStyles = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertSsaStyles"); - if (subNode != null) - { - settings.Tools.BatchConvertSsaStyles = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertUseStyleFromSource"); - if (subNode != null) - { - settings.Tools.BatchConvertUseStyleFromSource = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertExportCustomTextTemplate"); - if (subNode != null) - { - settings.Tools.BatchConvertExportCustomTextTemplate = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideXPosition"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideXPosition = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideYPosition"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideYPosition = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideBottomMargin"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideBottomMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideHAlign"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideHAlign = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideHMargin"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideHMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsOverrideScreenSize"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOverrideScreenSize = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsScreenWidth"); - if (subNode != null) - { - settings.Tools.BatchConvertTsScreenWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsScreenHeight"); - if (subNode != null) - { - settings.Tools.BatchConvertTsScreenHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsOnlyTeletext"); - if (subNode != null) - { - settings.Tools.BatchConvertTsOnlyTeletext = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BatchConvertTsFileNameAppend"); - if (subNode != null) - { - settings.Tools.BatchConvertTsFileNameAppend = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BatchConvertMkvLanguageCodeStyle"); - if (subNode != null) - { - settings.Tools.BatchConvertMkvLanguageCodeStyle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformBatchLastFolder"); - if (subNode != null) - { - settings.Tools.WaveformBatchLastFolder = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ModifySelectionRule"); - if (subNode != null) - { - settings.Tools.ModifySelectionRule = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ModifySelectionText"); - if (subNode != null) - { - settings.Tools.ModifySelectionText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ModifySelectionCaseSensitive"); - if (subNode != null) - { - settings.Tools.ModifySelectionCaseSensitive = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportVobSubFontName"); - if (subNode != null) - { - settings.Tools.ExportVobSubFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportVobSubFontSize"); - if (subNode != null) - { - settings.Tools.ExportVobSubFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportVobSubVideoResolution"); - if (subNode != null) - { - settings.Tools.ExportVobSubVideoResolution = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportVobSubSimpleRendering"); - if (subNode != null) - { - settings.Tools.ExportVobSubSimpleRendering = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportVobAntiAliasingWithTransparency"); - if (subNode != null) - { - settings.Tools.ExportVobAntiAliasingWithTransparency = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportVobSubLanguage"); - if (subNode != null) - { - settings.Tools.ExportVobSubLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportBluRayFontName"); - if (subNode != null) - { - settings.Tools.ExportBluRayFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportBluRayFontSize"); - if (subNode != null) - { - settings.Tools.ExportBluRayFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportFcpFontName"); - if (subNode != null) - { - settings.Tools.ExportFcpFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportFontNameOther"); - if (subNode != null) - { - settings.Tools.ExportFontNameOther = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportFcpFontSize"); - if (subNode != null) - { - settings.Tools.ExportFcpFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportFcpImageType"); - if (subNode != null) - { - settings.Tools.ExportFcpImageType = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportFcpPalNtsc"); - if (subNode != null) - { - settings.Tools.ExportFcpPalNtsc = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportBdnXmlImageType"); - if (subNode != null) - { - settings.Tools.ExportBdnXmlImageType = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportLastFontSize"); - if (subNode != null) - { - settings.Tools.ExportLastFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLastLineHeight"); - if (subNode != null) - { - settings.Tools.ExportLastLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLastBorderWidth"); - if (subNode != null) - { - settings.Tools.ExportLastBorderWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLastFontBold"); - if (subNode != null) - { - settings.Tools.ExportLastFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBluRayVideoResolution"); - if (subNode != null) - { - settings.Tools.ExportBluRayVideoResolution = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportFcpVideoResolution"); - if (subNode != null) - { - settings.Tools.ExportFcpVideoResolution = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportFontColor"); - if (subNode != null) - { - settings.Tools.ExportFontColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("ExportBorderColor"); - if (subNode != null) - { - settings.Tools.ExportBorderColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("ExportShadowColor"); - if (subNode != null) - { - settings.Tools.ExportShadowColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("ExportBoxBorderSize"); - if (subNode != null) - { - settings.Tools.ExportBoxBorderSize = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBottomMarginUnit"); - if (subNode != null) - { - settings.Tools.ExportBottomMarginUnit = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportBottomMarginPercent"); - if (subNode != null) - { - settings.Tools.ExportBottomMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBottomMarginPixels"); - if (subNode != null) - { - settings.Tools.ExportBottomMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLeftRightMarginUnit"); - if (subNode != null) - { - settings.Tools.ExportLeftRightMarginUnit = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportLeftRightMarginPercent"); - if (subNode != null) - { - settings.Tools.ExportLeftRightMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLeftRightMarginPixels"); - if (subNode != null) - { - settings.Tools.ExportLeftRightMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportHorizontalAlignment"); - if (subNode != null) - { - settings.Tools.ExportHorizontalAlignment = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBluRayBottomMarginPercent"); - if (subNode != null) - { - settings.Tools.ExportBluRayBottomMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBluRayBottomMarginPixels"); - if (subNode != null) - { - settings.Tools.ExportBluRayBottomMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBluRayShadow"); - if (subNode != null) - { - settings.Tools.ExportBluRayShadow = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportBluRayRemoveSmallGaps"); - if (subNode != null) - { - settings.Tools.ExportBluRayRemoveSmallGaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportCdgBackgroundImage"); - if (subNode != null) - { - settings.Tools.ExportCdgBackgroundImage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportCdgMarginLeft"); - if (subNode != null) - { - settings.Tools.ExportCdgMarginLeft = Convert.ToInt32(subNode.InnerText); - } - - subNode = node.SelectSingleNode("ExportCdgMarginBottom"); - if (subNode != null) - { - settings.Tools.ExportCdgMarginBottom = Convert.ToInt32(subNode.InnerText); - } - - subNode = node.SelectSingleNode("ExportCdgFormat"); - if (subNode != null) - { - settings.Tools.ExportCdgFormat = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Export3DType"); - if (subNode != null) - { - settings.Tools.Export3DType = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Export3DDepth"); - if (subNode != null) - { - settings.Tools.Export3DDepth = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLastShadowTransparency"); - if (subNode != null) - { - settings.Tools.ExportLastShadowTransparency = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportLastFrameRate"); - if (subNode != null) - { - settings.Tools.ExportLastFrameRate = double.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportFullFrame"); - if (subNode != null) - { - settings.Tools.ExportFullFrame = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportFcpFullPathUrl"); - if (subNode != null) - { - settings.Tools.ExportFcpFullPathUrl = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportPenLineJoin"); - if (subNode != null) - { - settings.Tools.ExportPenLineJoin = subNode.InnerText; - } - - subNode = node.SelectSingleNode("FixCommonErrorsFixOverlapAllowEqualEndStart"); - if (subNode != null) - { - settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixCommonErrorsSkipStepOne"); - if (subNode != null) - { - settings.Tools.FixCommonErrorsSkipStepOne = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextSplitting"); - if (subNode != null) - { - settings.Tools.ImportTextSplitting = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ImportTextMergeShortLines"); - if (subNode != null) - { - settings.Tools.ImportTextMergeShortLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextLineBreak"); - if (subNode != null) - { - settings.Tools.ImportTextLineBreak = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ImportTextRemoveEmptyLines"); - if (subNode != null) - { - settings.Tools.ImportTextRemoveEmptyLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextAutoSplitAtBlank"); - if (subNode != null) - { - settings.Tools.ImportTextAutoSplitAtBlank = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextRemoveLinesNoLetters"); - if (subNode != null) - { - settings.Tools.ImportTextRemoveLinesNoLetters = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextGenerateTimeCodes"); - if (subNode != null) - { - settings.Tools.ImportTextGenerateTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextTakeTimeCodeFromFileName"); - if (subNode != null) - { - settings.Tools.ImportTextTakeTimeCodeFromFileName = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextAutoBreak"); - if (subNode != null) - { - settings.Tools.ImportTextAutoBreak = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextAutoBreakAtEnd"); - if (subNode != null) - { - settings.Tools.ImportTextAutoBreakAtEnd = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextGap"); - if (subNode != null) - { - settings.Tools.ImportTextGap = Convert.ToDecimal(subNode.InnerText); - } - - subNode = node.SelectSingleNode("ImportTextAutoSplitNumberOfLines"); - if (subNode != null) - { - settings.Tools.ImportTextAutoSplitNumberOfLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextAutoBreakAtEndMarkerText"); - if (subNode != null) - { - settings.Tools.ImportTextAutoBreakAtEndMarkerText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ImportTextDurationAuto"); - if (subNode != null) - { - settings.Tools.ImportTextDurationAuto = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ImportTextFixedDuration"); - if (subNode != null) - { - settings.Tools.ImportTextFixedDuration = Convert.ToDecimal(subNode.InnerText); - } - - subNode = node.SelectSingleNode("GenerateTimeCodePatterns"); - if (subNode != null) - { - settings.Tools.GenerateTimeCodePatterns = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GenerateTimeCodePatterns"); - if (subNode != null) - { - settings.Tools.GenerateTimeCodePatterns = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MusicSymbolStyle"); - if (subNode != null) - { - settings.Tools.MusicSymbolStyle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BridgeGapMilliseconds"); - if (subNode != null) - { - settings.Tools.BridgeGapMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportCustomTemplates"); - if (subNode != null) - { - settings.Tools.ExportCustomTemplates = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ChangeCasingChoice"); - if (subNode != null) - { - settings.Tools.ChangeCasingChoice = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UseNoLineBreakAfter"); - if (subNode != null) - { - settings.Tools.UseNoLineBreakAfter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NoLineBreakAfterEnglish"); - if (subNode != null) - { - settings.Tools.NoLineBreakAfterEnglish = subNode.InnerText.Replace(" ", " "); - } - - subNode = node.SelectSingleNode("ExportTextFormatText"); - if (subNode != null) - { - settings.Tools.ExportTextFormatText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportTextRemoveStyling"); - if (subNode != null) - { - settings.Tools.ExportTextRemoveStyling = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextShowLineNumbers"); - if (subNode != null) - { - settings.Tools.ExportTextShowLineNumbers = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextShowLineNumbersNewLine"); - if (subNode != null) - { - settings.Tools.ExportTextShowLineNumbersNewLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextShowTimeCodes"); - if (subNode != null) - { - settings.Tools.ExportTextShowTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextShowTimeCodesNewLine"); - if (subNode != null) - { - settings.Tools.ExportTextShowTimeCodesNewLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextNewLineAfterText"); - if (subNode != null) - { - settings.Tools.ExportTextNewLineAfterText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextNewLineBetweenSubtitles"); - if (subNode != null) - { - settings.Tools.ExportTextNewLineBetweenSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ExportTextTimeCodeFormat"); - if (subNode != null) - { - settings.Tools.ExportTextTimeCodeFormat = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ExportTextTimeCodeSeparator"); - if (subNode != null) - { - settings.Tools.ExportTextTimeCodeSeparator = subNode.InnerText; - } - - subNode = node.SelectSingleNode("VideoOffsetKeepTimeCodes"); - if (subNode != null) - { - settings.Tools.VideoOffsetKeepTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MoveStartEndMs"); - if (subNode != null) - { - settings.Tools.MoveStartEndMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AdjustDurationSeconds"); - if (subNode != null) - { - settings.Tools.AdjustDurationSeconds = Convert.ToDecimal(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AdjustDurationPercent"); - if (subNode != null) - { - settings.Tools.AdjustDurationPercent = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AdjustDurationLast"); - if (subNode != null) - { - settings.Tools.AdjustDurationLast = subNode.InnerText; - } - - subNode = node.SelectSingleNode("AdjustDurationExtendOnly"); - if (subNode != null) - { - settings.Tools.AdjustDurationExtendOnly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakCommaBreakEarly"); - if (subNode != null) - { - settings.Tools.AutoBreakCommaBreakEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakDashEarly"); - if (subNode != null) - { - settings.Tools.AutoBreakDashEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakLineEndingEarly"); - if (subNode != null) - { - settings.Tools.AutoBreakLineEndingEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakUsePixelWidth"); - if (subNode != null) - { - settings.Tools.AutoBreakUsePixelWidth = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakPreferBottomHeavy"); - if (subNode != null) - { - settings.Tools.AutoBreakPreferBottomHeavy = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakPreferBottomPercent"); - if (subNode != null) - { - settings.Tools.AutoBreakPreferBottomPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ApplyMinimumDurationLimit"); - if (subNode != null) - { - settings.Tools.ApplyMinimumDurationLimit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ApplyMaximumDurationLimit"); - if (subNode != null) - { - settings.Tools.ApplyMaximumDurationLimit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MergeShortLinesMaxGap"); - if (subNode != null) - { - settings.Tools.MergeShortLinesMaxGap = Convert.ToInt32(subNode.InnerText); - } - - subNode = node.SelectSingleNode("MergeShortLinesMaxChars"); - if (subNode != null) - { - settings.Tools.MergeShortLinesMaxChars = Convert.ToInt32(subNode.InnerText); - } - - subNode = node.SelectSingleNode("MergeShortLinesOnlyContinuous"); - if (subNode != null) - { - settings.Tools.MergeShortLinesOnlyContinuous = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ColumnPasteColumn"); - if (subNode != null) - { - settings.Tools.ColumnPasteColumn = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ColumnPasteOverwriteMode"); - if (subNode != null) - { - settings.Tools.ColumnPasteOverwriteMode = subNode.InnerText; - } - - subNode = node.SelectSingleNode("FindHistory"); - if (subNode != null) - { - foreach (XmlNode findItem in subNode.ChildNodes) - { - if (findItem.Name == "Text") - { - settings.Tools.FindHistory.Add(findItem.InnerText); - } - } - } - - // Subtitle - node = doc.DocumentElement.SelectSingleNode("SubtitleSettings"); - if (node != null) - { - subNode = node.SelectSingleNode("SsaFontName"); - if (subNode != null) - { - settings.SubtitleSettings.SsaFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("SsaFontSize"); - if (subNode != null) - { - settings.SubtitleSettings.SsaFontSize = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaFontColorArgb"); - if (subNode != null) - { - settings.SubtitleSettings.SsaFontColorArgb = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaFontBold"); - if (subNode != null) - { - settings.SubtitleSettings.SsaFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaOutline"); - if (subNode != null) - { - settings.SubtitleSettings.SsaOutline = Convert.ToDecimal(subNode.InnerText); - } - - subNode = node.SelectSingleNode("SsaShadow"); - if (subNode != null) - { - settings.SubtitleSettings.SsaShadow = Convert.ToDecimal(subNode.InnerText); - } - - subNode = node.SelectSingleNode("SsaOpaqueBox"); - if (subNode != null) - { - settings.SubtitleSettings.SsaOpaqueBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaMarginLeft"); - if (subNode != null) - { - settings.SubtitleSettings.SsaMarginLeft = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaMarginRight"); - if (subNode != null) - { - settings.SubtitleSettings.SsaMarginRight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SsaMarginTopBottom"); - if (subNode != null) - { - settings.SubtitleSettings.SsaMarginTopBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DCinemaFontFile"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaFontFile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("DCinemaFontSize"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DCinemaBottomMargin"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaBottomMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DCinemaZPosition"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaZPosition = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DCinemaFadeUpTime"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaFadeUpTime = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DCinemaFadeDownTime"); - if (subNode != null) - { - settings.SubtitleSettings.DCinemaFadeDownTime = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SamiDisplayTwoClassesAsTwoSubtitles"); - if (subNode != null) - { - settings.SubtitleSettings.SamiDisplayTwoClassesAsTwoSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SamiHtmlEncodeMode"); - if (subNode != null) - { - settings.SubtitleSettings.SamiHtmlEncodeMode = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TimedText10TimeCodeFormat"); - if (subNode != null) - { - settings.SubtitleSettings.TimedText10TimeCodeFormat = subNode.InnerText; - } - - subNode = node.SelectSingleNode("TimedText10ShowStyleAndLanguage"); - if (subNode != null) - { - settings.SubtitleSettings.TimedText10ShowStyleAndLanguage = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TimedText10FileExtension"); - if (subNode != null) - { - settings.SubtitleSettings.TimedText10FileExtension = subNode.InnerText; - } - - subNode = node.SelectSingleNode("FcpFontSize"); - if (subNode != null) - { - settings.SubtitleSettings.FcpFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FcpFontName"); - if (subNode != null) - { - settings.SubtitleSettings.FcpFontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("EbuStlTeletextUseBox"); - if (subNode != null) - { - settings.SubtitleSettings.EbuStlTeletextUseBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("EbuStlTeletextUseDoubleHeight"); - if (subNode != null) - { - settings.SubtitleSettings.EbuStlTeletextUseDoubleHeight = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("EbuStlMarginTop"); - if (subNode != null) - { - settings.SubtitleSettings.EbuStlMarginTop = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("EbuStlMarginBottom"); - if (subNode != null) - { - settings.SubtitleSettings.EbuStlMarginBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("EbuStlNewLineRows"); - if (subNode != null) - { - settings.SubtitleSettings.EbuStlNewLineRows = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("PacVerticalTop"); - if (subNode != null) - { - settings.SubtitleSettings.PacVerticalTop = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("PacVerticalCenter"); - if (subNode != null) - { - settings.SubtitleSettings.PacVerticalCenter = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("PacVerticalBottom"); - if (subNode != null) - { - settings.SubtitleSettings.PacVerticalBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DvdStudioProHeader"); - if (subNode != null) - { - settings.SubtitleSettings.DvdStudioProHeader = subNode.InnerText.TrimEnd() + Environment.NewLine; - } - - subNode = node.SelectSingleNode("TmpegEncXmlFontName"); - if (subNode != null) - { - settings.SubtitleSettings.TmpegEncXmlFontName = subNode.InnerText.TrimEnd(); - } - - subNode = node.SelectSingleNode("TmpegEncXmlFontHeight"); - if (subNode != null) - { - settings.SubtitleSettings.TmpegEncXmlFontHeight = subNode.InnerText.TrimEnd(); - } - - subNode = node.SelectSingleNode("TmpegEncXmlPosition"); - if (subNode != null) - { - settings.SubtitleSettings.TmpegEncXmlPosition = subNode.InnerText.TrimEnd(); - } - - subNode = node.SelectSingleNode("CheetahCaptionAlwayWriteEndTime"); - if (subNode != null) - { - settings.SubtitleSettings.CheetahCaptionAlwayWriteEndTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NuendoCharacterListFile"); - if (subNode != null) - { - settings.SubtitleSettings.NuendoCharacterListFile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Cavena890StartOfMessage"); - if (subNode != null) - { - settings.SubtitleSettings.Cavena890StartOfMessage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WebVttTimescale"); - if (subNode != null) - { - settings.SubtitleSettings.WebVttTimescale = long.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TeletextItalicFix"); - if (subNode != null) - { - settings.SubtitleSettings.TeletextItalicFix = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WebVttUseXTimestampMap"); - if (subNode != null) - { - settings.SubtitleSettings.WebVttUseXTimestampMap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - } - - // Proxy - node = doc.DocumentElement.SelectSingleNode("Proxy"); - subNode = node.SelectSingleNode("ProxyAddress"); - if (subNode != null) - { - settings.Proxy.ProxyAddress = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UserName"); - if (subNode != null) - { - settings.Proxy.UserName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Password"); - if (subNode != null) - { - settings.Proxy.Password = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Domain"); - if (subNode != null) - { - settings.Proxy.Domain = subNode.InnerText; - } - - // Fxp xml export settings - node = doc.DocumentElement.SelectSingleNode("FcpExportSettings"); - if (node != null) - { - subNode = node.SelectSingleNode("FontName"); - if (subNode != null) - { - settings.FcpExportSettings.FontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("FontSize"); - if (subNode != null) - { - settings.FcpExportSettings.FontSize = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Alignment"); - if (subNode != null) - { - settings.FcpExportSettings.Alignment = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Baseline"); - if (subNode != null) - { - settings.FcpExportSettings.Baseline = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Color"); - if (subNode != null) - { - settings.FcpExportSettings.Color = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - } - - // Word List - node = doc.DocumentElement.SelectSingleNode("WordLists"); - subNode = node.SelectSingleNode("LastLanguage"); - if (subNode != null) - { - settings.WordLists.LastLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Names"); - if (subNode != null) - { - settings.WordLists.NamesUrl = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UseOnlineNames"); - if (subNode != null) - { - settings.WordLists.UseOnlineNames = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - // Fix Common Errors - node = doc.DocumentElement.SelectSingleNode("CommonErrors"); - subNode = node.SelectSingleNode("StartPosition"); - if (subNode != null) - { - settings.CommonErrors.StartPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("StartSize"); - if (subNode != null) - { - settings.CommonErrors.StartSize = subNode.InnerText; - } - - subNode = node.SelectSingleNode("EmptyLinesTicked"); - if (subNode != null) - { - settings.CommonErrors.EmptyLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("OverlappingDisplayTimeTicked"); - if (subNode != null) - { - settings.CommonErrors.OverlappingDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TooShortDisplayTimeTicked"); - if (subNode != null) - { - settings.CommonErrors.TooShortDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TooLongDisplayTimeTicked"); - if (subNode != null) - { - settings.CommonErrors.TooLongDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TooShortGapTicked"); - if (subNode != null) - { - settings.CommonErrors.TooShortGapTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("InvalidItalicTagsTicked"); - if (subNode != null) - { - settings.CommonErrors.InvalidItalicTagsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BreakLongLinesTicked"); - if (subNode != null) - { - settings.CommonErrors.BreakLongLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MergeShortLinesTicked"); - if (subNode != null) - { - settings.CommonErrors.MergeShortLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MergeShortLinesAllTicked"); - if (subNode != null) - { - settings.CommonErrors.MergeShortLinesAllTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UnneededSpacesTicked"); - if (subNode != null) - { - settings.CommonErrors.UnneededSpacesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UnneededPeriodsTicked"); - if (subNode != null) - { - settings.CommonErrors.UnneededPeriodsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixCommasTicked"); - if (subNode != null) - { - settings.CommonErrors.FixCommasTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("MissingSpacesTicked"); - if (subNode != null) - { - settings.CommonErrors.MissingSpacesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AddMissingQuotesTicked"); - if (subNode != null) - { - settings.CommonErrors.AddMissingQuotesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("Fix3PlusLinesTicked"); - if (subNode != null) - { - settings.CommonErrors.Fix3PlusLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixHyphensTicked"); - if (subNode != null) - { - settings.CommonErrors.FixHyphensTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixHyphensRemoveSingleLineTicked"); - if (subNode != null) - { - settings.CommonErrors.FixHyphensRemoveSingleLineTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UppercaseIInsideLowercaseWordTicked"); - if (subNode != null) - { - settings.CommonErrors.UppercaseIInsideLowercaseWordTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DoubleApostropheToQuoteTicked"); - if (subNode != null) - { - settings.CommonErrors.DoubleApostropheToQuoteTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AddPeriodAfterParagraphTicked"); - if (subNode != null) - { - settings.CommonErrors.AddPeriodAfterParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterParagraphTicked"); - if (subNode != null) - { - settings.CommonErrors.StartWithUppercaseLetterAfterParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterPeriodInsideParagraphTicked"); - if (subNode != null) - { - settings.CommonErrors.StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterColonTicked"); - if (subNode != null) - { - settings.CommonErrors.StartWithUppercaseLetterAfterColonTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AloneLowercaseIToUppercaseIEnglishTicked"); - if (subNode != null) - { - settings.CommonErrors.AloneLowercaseIToUppercaseIEnglishTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixOcrErrorsViaReplaceListTicked"); - if (subNode != null) - { - settings.CommonErrors.FixOcrErrorsViaReplaceListTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveSpaceBetweenNumberTicked"); - if (subNode != null) - { - settings.CommonErrors.RemoveSpaceBetweenNumberTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixDialogsOnOneLineTicked"); - if (subNode != null) - { - settings.CommonErrors.FixDialogsOnOneLineTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TurkishAnsiTicked"); - if (subNode != null) - { - settings.CommonErrors.TurkishAnsiTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DanishLetterITicked"); - if (subNode != null) - { - settings.CommonErrors.DanishLetterITicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpanishInvertedQuestionAndExclamationMarksTicked"); - if (subNode != null) - { - settings.CommonErrors.SpanishInvertedQuestionAndExclamationMarksTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixDoubleDashTicked"); - if (subNode != null) - { - settings.CommonErrors.FixDoubleDashTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixDoubleGreaterThanTicked"); - if (subNode != null) - { - settings.CommonErrors.FixDoubleGreaterThanTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixEllipsesStartTicked"); - if (subNode != null) - { - settings.CommonErrors.FixEllipsesStartTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixMissingOpenBracketTicked"); - if (subNode != null) - { - settings.CommonErrors.FixMissingOpenBracketTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixMusicNotationTicked"); - if (subNode != null) - { - settings.CommonErrors.FixMusicNotationTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixContinuationStyleTicked"); - if (subNode != null) - { - settings.CommonErrors.FixContinuationStyleTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixUnnecessaryLeadingDotsTicked"); - if (subNode != null) - { - settings.CommonErrors.FixUnnecessaryLeadingDotsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NormalizeStringsTicked"); - if (subNode != null) - { - settings.CommonErrors.NormalizeStringsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DefaultFixes"); - if (subNode != null) - { - settings.CommonErrors.DefaultFixes = subNode.InnerText; - } - - // Video Controls - node = doc.DocumentElement.SelectSingleNode("VideoControls"); - subNode = node.SelectSingleNode("CustomSearchText1"); - if (subNode != null) - { - settings.VideoControls.CustomSearchText1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchText2"); - if (subNode != null) - { - settings.VideoControls.CustomSearchText2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchText3"); - if (subNode != null) - { - settings.VideoControls.CustomSearchText3 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchText4"); - if (subNode != null) - { - settings.VideoControls.CustomSearchText4 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchText5"); - if (subNode != null) - { - settings.VideoControls.CustomSearchText5 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl1"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl1"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl2"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl3"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl3 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl4"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl4 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CustomSearchUrl5"); - if (subNode != null) - { - settings.VideoControls.CustomSearchUrl5 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("LastActiveTab"); - if (subNode != null) - { - settings.VideoControls.LastActiveTab = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformDrawGrid"); - if (subNode != null) - { - settings.VideoControls.WaveformDrawGrid = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformDrawCps"); - if (subNode != null) - { - settings.VideoControls.WaveformDrawCps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformDrawWpm"); - if (subNode != null) - { - settings.VideoControls.WaveformDrawWpm = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformAllowOverlap"); - if (subNode != null) - { - settings.VideoControls.WaveformAllowOverlap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformFocusOnMouseEnter"); - if (subNode != null) - { - settings.VideoControls.WaveformFocusOnMouseEnter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformListViewFocusOnMouseEnter"); - if (subNode != null) - { - settings.VideoControls.WaveformListViewFocusOnMouseEnter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformSingleClickSelect"); - if (subNode != null) - { - settings.VideoControls.WaveformSingleClickSelect = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformSnapToSceneChanges"); - if (subNode != null) - { - settings.VideoControls.WaveformSnapToSceneChanges = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformSetVideoPositionOnMoveStartEnd"); - if (subNode != null) - { - settings.VideoControls.WaveformSetVideoPositionOnMoveStartEnd = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformBorderHitMs"); - if (subNode != null) - { - settings.VideoControls.WaveformBorderHitMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformGridColor"); - if (subNode != null) - { - settings.VideoControls.WaveformGridColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformColor"); - if (subNode != null) - { - settings.VideoControls.WaveformColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformSelectedColor"); - if (subNode != null) - { - settings.VideoControls.WaveformSelectedColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformBackgroundColor"); - if (subNode != null) - { - settings.VideoControls.WaveformBackgroundColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformTextColor"); - if (subNode != null) - { - settings.VideoControls.WaveformTextColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformCursorColor"); - if (subNode != null) - { - settings.VideoControls.WaveformCursorColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformChaptersColor"); - if (subNode != null) - { - settings.VideoControls.WaveformChaptersColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("WaveformTextSize"); - if (subNode != null) - { - settings.VideoControls.WaveformTextSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformTextBold"); - if (subNode != null) - { - settings.VideoControls.WaveformTextBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformDoubleClickOnNonParagraphAction"); - if (subNode != null) - { - settings.VideoControls.WaveformDoubleClickOnNonParagraphAction = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformRightClickOnNonParagraphAction"); - if (subNode != null) - { - settings.VideoControls.WaveformRightClickOnNonParagraphAction = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformMouseWheelScrollUpIsForward"); - if (subNode != null) - { - settings.VideoControls.WaveformMouseWheelScrollUpIsForward = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("GenerateSpectrogram"); - if (subNode != null) - { - settings.VideoControls.GenerateSpectrogram = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("SpectrogramAppearance"); - if (subNode != null) - { - settings.VideoControls.SpectrogramAppearance = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformMinimumSampleRate"); - if (subNode != null) - { - settings.VideoControls.WaveformMinimumSampleRate = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformSeeksSilenceDurationSeconds"); - if (subNode != null) - { - settings.VideoControls.WaveformSeeksSilenceDurationSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformSeeksSilenceMaxVolume"); - if (subNode != null) - { - settings.VideoControls.WaveformSeeksSilenceMaxVolume = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformUnwrapText"); - if (subNode != null) - { - settings.VideoControls.WaveformUnwrapText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("WaveformHideWpmCpsLabels"); - if (subNode != null) - { - settings.VideoControls.WaveformHideWpmCpsLabels = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - // Network - node = doc.DocumentElement.SelectSingleNode("NetworkSettings"); - if (node != null) - { - subNode = node.SelectSingleNode("SessionKey"); - if (subNode != null) - { - settings.NetworkSettings.SessionKey = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UserName"); - if (subNode != null) - { - settings.NetworkSettings.UserName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WebServiceUrl"); - if (subNode != null) - { - settings.NetworkSettings.WebServiceUrl = subNode.InnerText; - } - - subNode = node.SelectSingleNode("PollIntervalSeconds"); - if (subNode != null) - { - settings.NetworkSettings.PollIntervalSeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("NewMessageSound"); - if (subNode != null) - { - settings.NetworkSettings.NewMessageSound = subNode.InnerText; - } - } - - // VobSub Ocr - node = doc.DocumentElement.SelectSingleNode("VobSubOcr"); - subNode = node.SelectSingleNode("XOrMorePixelsMakesSpace"); - if (subNode != null) - { - settings.VobSubOcr.XOrMorePixelsMakesSpace = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AllowDifferenceInPercent"); - if (subNode != null) - { - settings.VobSubOcr.AllowDifferenceInPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BlurayAllowDifferenceInPercent"); - if (subNode != null) - { - settings.VobSubOcr.BlurayAllowDifferenceInPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LastImageCompareFolder"); - if (subNode != null) - { - settings.VobSubOcr.LastImageCompareFolder = subNode.InnerText; - } - - subNode = node.SelectSingleNode("LastModiLanguageId"); - if (subNode != null) - { - settings.VobSubOcr.LastModiLanguageId = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LastOcrMethod"); - if (subNode != null) - { - settings.VobSubOcr.LastOcrMethod = subNode.InnerText; - } - - subNode = node.SelectSingleNode("TesseractLastLanguage"); - if (subNode != null) - { - settings.VobSubOcr.TesseractLastLanguage = subNode.InnerText; - } - - subNode = node.SelectSingleNode("UseTesseractFallback"); - if (subNode != null) - { - settings.VobSubOcr.UseTesseractFallback = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UseItalicsInTesseract"); - if (subNode != null) - { - settings.VobSubOcr.UseItalicsInTesseract = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TesseractEngineMode"); - if (subNode != null) - { - settings.VobSubOcr.TesseractEngineMode = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UseMusicSymbolsInTesseract"); - if (subNode != null) - { - settings.VobSubOcr.UseMusicSymbolsInTesseract = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RightToLeft"); - if (subNode != null) - { - settings.VobSubOcr.RightToLeft = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("TopToBottom"); - if (subNode != null) - { - settings.VobSubOcr.TopToBottom = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("DefaultMillisecondsForUnknownDurations"); - if (subNode != null) - { - settings.VobSubOcr.DefaultMillisecondsForUnknownDurations = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("FixOcrErrors"); - if (subNode != null) - { - settings.VobSubOcr.FixOcrErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("PromptForUnknownWords"); - if (subNode != null) - { - settings.VobSubOcr.PromptForUnknownWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("GuessUnknownWords"); - if (subNode != null) - { - settings.VobSubOcr.GuessUnknownWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("AutoBreakSubtitleIfMoreThanTwoLines"); - if (subNode != null) - { - settings.VobSubOcr.AutoBreakSubtitleIfMoreThanTwoLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("ItalicFactor"); - if (subNode != null) - { - settings.VobSubOcr.ItalicFactor = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrDraw"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrDraw = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrMinHeightSplit"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrMinHeightSplit = Convert.ToInt32(subNode.InnerText); - } - - subNode = node.SelectSingleNode("LineOcrAdvancedItalic"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrAdvancedItalic = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrLastLanguages"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrLastLanguages = subNode.InnerText; - } - - subNode = node.SelectSingleNode("LineOcrLastSpellCheck"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrLastSpellCheck = subNode.InnerText; - } - - subNode = node.SelectSingleNode("LineOcrLinesToAutoGuess"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrLinesToAutoGuess = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrMinLineHeight"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrMinLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrMaxLineHeight"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrMaxLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LineOcrMaxErrorPixels"); - if (subNode != null) - { - settings.VobSubOcr.LineOcrMaxErrorPixels = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LastBinaryImageCompareDb"); - if (subNode != null) - { - settings.VobSubOcr.LastBinaryImageCompareDb = subNode.InnerText; - } - - subNode = node.SelectSingleNode("LastBinaryImageSpellCheck"); - if (subNode != null) - { - settings.VobSubOcr.LastBinaryImageSpellCheck = subNode.InnerText; - } - - subNode = node.SelectSingleNode("BinaryAutoDetectBestDb"); - if (subNode != null) - { - settings.VobSubOcr.BinaryAutoDetectBestDb = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("LastTesseractSpellCheck"); - if (subNode != null) - { - settings.VobSubOcr.LastTesseractSpellCheck = subNode.InnerText; - } - - subNode = node.SelectSingleNode("CaptureTopAlign"); - if (subNode != null) - { - settings.VobSubOcr.CaptureTopAlign = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UnfocusedAttentionBlinkCount"); - if (subNode != null) - { - settings.VobSubOcr.UnfocusedAttentionBlinkCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("UnfocusedAttentionPlaySoundCount"); - if (subNode != null) - { - settings.VobSubOcr.UnfocusedAttentionPlaySoundCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - foreach (XmlNode groupNode in doc.DocumentElement.SelectNodes("MultipleSearchAndReplaceGroups/Group")) - { - var group = new MultipleSearchAndReplaceGroup - { - Rules = new List() - }; - subNode = groupNode.SelectSingleNode("Name"); - if (subNode != null) - { - group.Name = subNode.InnerText; - } - - subNode = groupNode.SelectSingleNode("Enabled"); - if (subNode != null) - { - group.Enabled = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - settings.MultipleSearchAndReplaceGroups.Add(group); - - foreach (XmlNode listNode in groupNode.SelectNodes("Rule")) - { - var item = new MultipleSearchAndReplaceSetting(); - subNode = listNode.SelectSingleNode("Enabled"); - if (subNode != null) - { - item.Enabled = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = listNode.SelectSingleNode("FindWhat"); - if (subNode != null) - { - item.FindWhat = subNode.InnerText; - } - - subNode = listNode.SelectSingleNode("ReplaceWith"); - if (subNode != null) - { - item.ReplaceWith = subNode.InnerText; - } - - subNode = listNode.SelectSingleNode("SearchType"); - if (subNode != null) - { - item.SearchType = subNode.InnerText; - } - - subNode = listNode.SelectSingleNode("Description"); - if (subNode != null) - { - item.Description = subNode.InnerText; - } - - group.Rules.Add(item); - } - } - - // Shortcuts - ReadShortcuts(doc, settings.Shortcuts); - - // Remove text for Hearing Impaired - node = doc.DocumentElement.SelectSingleNode("RemoveTextForHearingImpaired"); - if (node != null) - { - subNode = node.SelectSingleNode("RemoveTextBetweenBrackets"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenBrackets = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBetweenParentheses"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenParentheses = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBetweenCurlyBrackets"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenCurlyBrackets = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBetweenQuestionMarks"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenQuestionMarks = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBetweenCustom"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustom = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBetweenCustomBefore"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomBefore = subNode.InnerText; - } - - subNode = node.SelectSingleNode("RemoveTextBetweenCustomAfter"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomAfter = subNode.InnerText; - } - - subNode = node.SelectSingleNode("RemoveTextBetweenOnlySeparateLines"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBetweenOnlySeparateLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBeforeColon"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBeforeColon = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBeforeColonOnlyIfUppercase"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyIfUppercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveTextBeforeColonOnlyOnSeparateLine"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyOnSeparateLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveIfAllUppercase"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveIfAllUppercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveInterjections"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveInterjections = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveInterjectionsOnlyOnSeparateLine"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveInterjectionsOnlyOnSeparateLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveIfContains"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveIfContains = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("RemoveIfContainsText"); - if (subNode != null) - { - settings.RemoveTextForHearingImpaired.RemoveIfContainsText = subNode.InnerText; - } - } - - // Subtitle Beaming - node = doc.DocumentElement.SelectSingleNode("SubtitleBeaming"); - if (node != null) - { - subNode = node.SelectSingleNode("FontName"); - if (subNode != null) - { - settings.SubtitleBeaming.FontName = subNode.InnerText; - } - - subNode = node.SelectSingleNode("FontColor"); - if (subNode != null) - { - settings.SubtitleBeaming.FontColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("FontSize"); - if (subNode != null) - { - settings.SubtitleBeaming.FontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - - subNode = node.SelectSingleNode("BorderColor"); - if (subNode != null) - { - settings.SubtitleBeaming.BorderColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); - } - - subNode = node.SelectSingleNode("BorderWidth"); - if (subNode != null) - { - settings.SubtitleBeaming.BorderWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); - } - } - - if (profileCount == 0) - { - settings.General.CurrentProfile = "Default"; - settings.General.Profiles = new List(); - settings.General.Profiles.Add(new RulesProfile - { - Name = settings.General.CurrentProfile, - SubtitleLineMaximumLength = settings.General.SubtitleLineMaximumLength, - MaxNumberOfLines = settings.General.MaxNumberOfLines, - MergeLinesShorterThan = settings.General.MergeLinesShorterThan, - SubtitleMaximumCharactersPerSeconds = (decimal)settings.General.SubtitleMaximumCharactersPerSeconds, - SubtitleOptimalCharactersPerSeconds = (decimal)settings.General.SubtitleOptimalCharactersPerSeconds, - SubtitleMaximumDisplayMilliseconds = settings.General.SubtitleMaximumDisplayMilliseconds, - SubtitleMinimumDisplayMilliseconds = settings.General.SubtitleMinimumDisplayMilliseconds, - SubtitleMaximumWordsPerMinute = (decimal)settings.General.SubtitleMaximumWordsPerMinute, - CpsIncludesSpace = !settings.General.CharactersPerSecondsIgnoreWhiteSpace, - MinimumMillisecondsBetweenLines = settings.General.MinimumMillisecondsBetweenLines, - DialogStyle = settings.General.DialogStyle, - ContinuationStyle = settings.General.ContinuationStyle - }); - GeneralSettings.AddExtraProfiles(settings.General.Profiles); - } - - return settings; - } - - internal static void ReadShortcuts(XmlDocument doc, Shortcuts shortcuts) - { - XmlNode node; - XmlNode subNode; - node = doc.DocumentElement.SelectSingleNode("Shortcuts"); - if (node != null) - { - subNode = node.SelectSingleNode("GeneralGoToFirstSelectedLine"); - if (subNode != null) - { - shortcuts.GeneralGoToFirstSelectedLine = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextEmptyLine"); - if (subNode != null) - { - shortcuts.GeneralGoToNextEmptyLine = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLines"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLines = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndUnbreak"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLinesAndUnbreak = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndAutoBreak"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLinesAndAutoBreak = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndUnbreakCjk"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLinesAndUnbreakCjk = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLinesOnlyFirstText"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLinesOnlyFirstText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeSelectedLinesBilingual"); - if (subNode != null) - { - shortcuts.GeneralMergeSelectedLinesBilingual = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeWithNext"); - if (subNode != null) - { - shortcuts.GeneralMergeWithNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeWithPrevious"); - if (subNode != null) - { - shortcuts.GeneralMergeWithPrevious = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralToggleTranslationMode"); - if (subNode != null) - { - shortcuts.GeneralToggleTranslationMode = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralSwitchOriginalAndTranslation"); - if (subNode != null) - { - shortcuts.GeneralSwitchOriginalAndTranslation = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralMergeOriginalAndTranslation"); - if (subNode != null) - { - shortcuts.GeneralMergeOriginalAndTranslation = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextSubtitle"); - if (subNode != null) - { - shortcuts.GeneralGoToNextSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextSubtitleCursorAtEnd"); - if (subNode != null) - { - shortcuts.GeneralGoToNextSubtitleCursorAtEnd = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToPrevSubtitle"); - if (subNode != null) - { - shortcuts.GeneralGoToPrevSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToEndOfCurrentSubtitle"); - if (subNode != null) - { - shortcuts.GeneralGoToEndOfCurrentSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToStartOfCurrentSubtitle"); - if (subNode != null) - { - shortcuts.GeneralGoToStartOfCurrentSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextSubtitleAndFocusVideo"); - if (subNode != null) - { - shortcuts.GeneralGoToNextSubtitleAndFocusVideo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToPrevSubtitleAndPlay"); - if (subNode != null) - { - shortcuts.GeneralGoToPrevSubtitleAndPlay = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextSubtitleAndPlay"); - if (subNode != null) - { - shortcuts.GeneralGoToNextSubtitleAndPlay = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToPreviousSubtitleAndFocusVideo"); - if (subNode != null) - { - shortcuts.GeneralGoToPreviousSubtitleAndFocusVideo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralAutoCalcCurrentDuration"); - if (subNode != null) - { - shortcuts.GeneralAutoCalcCurrentDuration = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralPlayFirstSelected"); - if (subNode != null) - { - shortcuts.GeneralPlayFirstSelected = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralHelp"); - if (subNode != null) - { - shortcuts.GeneralHelp = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralUnbrekNoSpace"); - if (subNode != null) - { - shortcuts.GeneralUnbrekNoSpace = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralToggleBookmarks"); - if (subNode != null) - { - shortcuts.GeneralToggleBookmarks = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralToggleBookmarksWithText"); - if (subNode != null) - { - shortcuts.GeneralToggleBookmarksWithText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralClearBookmarks"); - if (subNode != null) - { - shortcuts.GeneralClearBookmarks = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToBookmark"); - if (subNode != null) - { - shortcuts.GeneralGoToBookmark = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToPreviousBookmark"); - if (subNode != null) - { - shortcuts.GeneralGoToPreviousBookmark = subNode.InnerText; - } - - subNode = node.SelectSingleNode("GeneralGoToNextBookmark"); - if (subNode != null) - { - shortcuts.GeneralGoToNextBookmark = subNode.InnerText; - } - - subNode = node.SelectSingleNode("ChooseProfile"); - if (subNode != null) - { - shortcuts.ChooseProfile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("DuplicateLine"); - if (subNode != null) - { - shortcuts.DuplicateLine = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileNew"); - if (subNode != null) - { - shortcuts.MainFileNew = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileOpen"); - if (subNode != null) - { - shortcuts.MainFileOpen = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileOpenKeepVideo"); - if (subNode != null) - { - shortcuts.MainFileOpenKeepVideo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileSave"); - if (subNode != null) - { - shortcuts.MainFileSave = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileSaveOriginal"); - if (subNode != null) - { - shortcuts.MainFileSaveOriginal = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileSaveOriginalAs"); - if (subNode != null) - { - shortcuts.MainFileSaveOriginalAs = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileSaveAs"); - if (subNode != null) - { - shortcuts.MainFileSaveAs = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileSaveAll"); - if (subNode != null) - { - shortcuts.MainFileSaveAll = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileCloseOriginal"); - if (subNode != null) - { - shortcuts.MainFileCloseOriginal = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileCompare"); - if (subNode != null) - { - shortcuts.MainFileCompare = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileOpenOriginal"); - if (subNode != null) - { - shortcuts.MainFileOpenOriginal = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileImportPlainText"); - if (subNode != null) - { - shortcuts.MainFileImportPlainText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileImportTimeCodes"); - if (subNode != null) - { - shortcuts.MainFileImportTimeCodes = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileExportEbu"); - if (subNode != null) - { - shortcuts.MainFileExportEbu = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileExportPac"); - if (subNode != null) - { - shortcuts.MainFileExportPac = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainFileExportPlainText"); - if (subNode != null) - { - shortcuts.MainFileExportPlainText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditUndo"); - if (subNode != null) - { - shortcuts.MainEditUndo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditRedo"); - if (subNode != null) - { - shortcuts.MainEditRedo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditFind"); - if (subNode != null) - { - shortcuts.MainEditFind = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditFindNext"); - if (subNode != null) - { - shortcuts.MainEditFindNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditReplace"); - if (subNode != null) - { - shortcuts.MainEditReplace = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditMultipleReplace"); - if (subNode != null) - { - shortcuts.MainEditMultipleReplace = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditGoToLineNumber"); - if (subNode != null) - { - shortcuts.MainEditGoToLineNumber = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditRightToLeft"); - if (subNode != null) - { - shortcuts.MainEditRightToLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsFixCommonErrors"); - if (subNode != null) - { - shortcuts.MainToolsFixCommonErrors = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsFixCommonErrorsPreview"); - if (subNode != null) - { - shortcuts.MainToolsFixCommonErrorsPreview = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMergeShortLines"); - if (subNode != null) - { - shortcuts.MainToolsMergeShortLines = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMergeDuplicateText"); - if (subNode != null) - { - shortcuts.MainToolsMergeDuplicateText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMergeSameTimeCodes"); - if (subNode != null) - { - shortcuts.MainToolsMergeSameTimeCodes = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMakeEmptyFromCurrent"); - if (subNode != null) - { - shortcuts.MainToolsMakeEmptyFromCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsSplitLongLines"); - if (subNode != null) - { - shortcuts.MainToolsSplitLongLines = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsDurationsBridgeGap"); - if (subNode != null) - { - shortcuts.MainToolsDurationsBridgeGap = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMinimumDisplayTimeBetweenParagraphs"); - if (subNode != null) - { - shortcuts.MainToolsMinimumDisplayTimeBetweenParagraphs = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsRenumber"); - if (subNode != null) - { - shortcuts.MainToolsRenumber = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsRemoveTextForHI"); - if (subNode != null) - { - shortcuts.MainToolsRemoveTextForHI = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsChangeCasing"); - if (subNode != null) - { - shortcuts.MainToolsChangeCasing = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsAutoDuration"); - if (subNode != null) - { - shortcuts.MainToolsAutoDuration = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsBatchConvert"); - if (subNode != null) - { - shortcuts.MainToolsBatchConvert = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsMeasurementConverter"); - if (subNode != null) - { - shortcuts.MainToolsMeasurementConverter = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsSplit"); - if (subNode != null) - { - shortcuts.MainToolsSplit = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsAppend"); - if (subNode != null) - { - shortcuts.MainToolsAppend = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsJoin"); - if (subNode != null) - { - shortcuts.MainToolsJoin = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToolsBeamer"); - if (subNode != null) - { - shortcuts.MainToolsBeamer = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditToggleTranslationOriginalInPreviews"); - if (subNode != null) - { - shortcuts.MainEditToggleTranslationOriginalInPreviews = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditInverseSelection"); - if (subNode != null) - { - shortcuts.MainEditInverseSelection = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditModifySelection"); - if (subNode != null) - { - shortcuts.MainEditModifySelection = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoOpen"); - if (subNode != null) - { - shortcuts.MainVideoOpen = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoClose"); - if (subNode != null) - { - shortcuts.MainVideoClose = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoPause"); - if (subNode != null) - { - shortcuts.MainVideoPause = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoPlayFromJustBefore"); - if (subNode != null) - { - shortcuts.MainVideoPlayFromJustBefore = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoPlayPauseToggle"); - if (subNode != null) - { - shortcuts.MainVideoPlayPauseToggle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoShowHideVideo"); - if (subNode != null) - { - shortcuts.MainVideoShowHideVideo = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoFoucsSetVideoPosition"); - if (subNode != null) - { - shortcuts.MainVideoFoucsSetVideoPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoToggleVideoControls"); - if (subNode != null) - { - shortcuts.MainVideoToggleVideoControls = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1FrameLeft"); - if (subNode != null) - { - shortcuts.MainVideo1FrameLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1FrameRight"); - if (subNode != null) - { - shortcuts.MainVideo1FrameRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1FrameLeftWithPlay"); - if (subNode != null) - { - shortcuts.MainVideo1FrameLeftWithPlay = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1FrameRightWithPlay"); - if (subNode != null) - { - shortcuts.MainVideo1FrameRightWithPlay = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo100MsLeft"); - if (subNode != null) - { - shortcuts.MainVideo100MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo100MsRight"); - if (subNode != null) - { - shortcuts.MainVideo100MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo500MsLeft"); - if (subNode != null) - { - shortcuts.MainVideo500MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo500MsRight"); - if (subNode != null) - { - shortcuts.MainVideo500MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1000MsLeft"); - if (subNode != null) - { - shortcuts.MainVideo1000MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo1000MsRight"); - if (subNode != null) - { - shortcuts.MainVideo1000MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo5000MsLeft"); - if (subNode != null) - { - shortcuts.MainVideo5000MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo5000MsRight"); - if (subNode != null) - { - shortcuts.MainVideo5000MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoXSMsLeft"); - if (subNode != null) - { - shortcuts.MainVideoXSMsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoXSMsRight"); - if (subNode != null) - { - shortcuts.MainVideoXSMsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoXLMsLeft"); - if (subNode != null) - { - shortcuts.MainVideoXLMsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoXLMsRight"); - if (subNode != null) - { - shortcuts.MainVideoXLMsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideo3000MsLeft"); - if (subNode != null) - { - shortcuts.MainVideo3000MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoGoToStartCurrent"); - if (subNode != null) - { - shortcuts.MainVideoGoToStartCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoToggleStartEndCurrent"); - if (subNode != null) - { - shortcuts.MainVideoToggleStartEndCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoPlayCurrent"); - if (subNode != null) - { - shortcuts.MainVideoPlayCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoGoToPrevSubtitle"); - if (subNode != null) - { - shortcuts.MainVideoGoToPrevSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoGoToNextSubtitle"); - if (subNode != null) - { - shortcuts.MainVideoGoToNextSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoGoToPrevChapter"); - if (subNode != null) - { - shortcuts.MainVideoGoToPrevChapter = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoGoToNextChapter"); - if (subNode != null) - { - shortcuts.MainVideoGoToNextChapter = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoSelectNextSubtitle"); - if (subNode != null) - { - shortcuts.MainVideoSelectNextSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoFullscreen"); - if (subNode != null) - { - shortcuts.MainVideoFullscreen = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoSlower"); - if (subNode != null) - { - shortcuts.MainVideoSlower = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoFaster"); - if (subNode != null) - { - shortcuts.MainVideoFaster = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainVideoReset"); - if (subNode != null) - { - shortcuts.MainVideoReset = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSpellCheck"); - if (subNode != null) - { - shortcuts.MainSpellCheck = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSpellCheckFindDoubleWords"); - if (subNode != null) - { - shortcuts.MainSpellCheckFindDoubleWords = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSpellCheckAddWordToNames"); - if (subNode != null) - { - shortcuts.MainSpellCheckAddWordToNames = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSynchronizationAdjustTimes"); - if (subNode != null) - { - shortcuts.MainSynchronizationAdjustTimes = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSynchronizationVisualSync"); - if (subNode != null) - { - shortcuts.MainSynchronizationVisualSync = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSynchronizationPointSync"); - if (subNode != null) - { - shortcuts.MainSynchronizationPointSync = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSynchronizationPointSyncViaFile"); - if (subNode != null) - { - shortcuts.MainSynchronizationPointSyncViaFile = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainSynchronizationChangeFrameRate"); - if (subNode != null) - { - shortcuts.MainSynchronizationChangeFrameRate = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewItalic"); - if (subNode != null) - { - shortcuts.MainListViewItalic = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewBold"); - if (subNode != null) - { - shortcuts.MainListViewBold = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewUnderline"); - if (subNode != null) - { - shortcuts.MainListViewUnderline = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewBox"); - if (subNode != null) - { - shortcuts.MainListViewBox = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewSplit"); - if (subNode != null) - { - shortcuts.MainListViewSplit = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewToggleDashes"); - if (subNode != null) - { - shortcuts.MainListViewToggleDashes = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewToggleMusicSymbols"); - if (subNode != null) - { - shortcuts.MainListViewToggleMusicSymbols = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignment"); - if (subNode != null) - { - shortcuts.MainListViewAlignment = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN1"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN1"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN2"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN3"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN3 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN4"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN4 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN5"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN5 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN6"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN6 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN7"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN7 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN8"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN8 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAlignmentN9"); - if (subNode != null) - { - shortcuts.MainListViewAlignmentN9 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainRemoveFormatting"); - if (subNode != null) - { - shortcuts.MainRemoveFormatting = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewCopyText"); - if (subNode != null) - { - shortcuts.MainListViewCopyText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewCopyTextFromOriginalToCurrent"); - if (subNode != null) - { - shortcuts.MainListViewCopyTextFromOriginalToCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewAutoDuration"); - if (subNode != null) - { - shortcuts.MainListViewAutoDuration = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnDeleteText"); - if (subNode != null) - { - shortcuts.MainListViewColumnDeleteText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnDeleteTextAndShiftUp"); - if (subNode != null) - { - shortcuts.MainListViewColumnDeleteTextAndShiftUp = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnInsertText"); - if (subNode != null) - { - shortcuts.MainListViewColumnInsertText = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnPaste"); - if (subNode != null) - { - shortcuts.MainListViewColumnPaste = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnTextUp"); - if (subNode != null) - { - shortcuts.MainListViewColumnTextUp = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewColumnTextDown"); - if (subNode != null) - { - shortcuts.MainListViewColumnTextDown = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewFocusWaveform"); - if (subNode != null) - { - shortcuts.MainListViewFocusWaveform = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewGoToNextError"); - if (subNode != null) - { - shortcuts.MainListViewGoToNextError = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainListViewRemoveTimeCodes"); - if (subNode != null) - { - shortcuts.MainListViewRemoveTimeCodes = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditFixRTLViaUnicodeChars"); - if (subNode != null) - { - shortcuts.MainEditFixRTLViaUnicodeChars = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditRemoveRTLUnicodeChars"); - if (subNode != null) - { - shortcuts.MainEditRemoveRTLUnicodeChars = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainEditReverseStartAndEndingForRTL"); - if (subNode != null) - { - shortcuts.MainEditReverseStartAndEndingForRTL = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxItalic"); - if (subNode != null) - { - shortcuts.MainTextBoxItalic = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSplitAtCursor"); - if (subNode != null) - { - shortcuts.MainTextBoxSplitAtCursor = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSplitAtCursorAndVideoPos"); - if (subNode != null) - { - shortcuts.MainTextBoxSplitAtCursorAndVideoPos = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSplitSelectedLineBilingual"); - if (subNode != null) - { - shortcuts.MainTextBoxSplitSelectedLineBilingual = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxMoveLastWordDown"); - if (subNode != null) - { - shortcuts.MainTextBoxMoveLastWordDown = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxMoveFirstWordFromNextUp"); - if (subNode != null) - { - shortcuts.MainTextBoxMoveFirstWordFromNextUp = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxMoveLastWordDownCurrent"); - if (subNode != null) - { - shortcuts.MainTextBoxMoveLastWordDownCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxMoveFirstWordUpCurrent"); - if (subNode != null) - { - shortcuts.MainTextBoxMoveFirstWordUpCurrent = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSelectionToLower"); - if (subNode != null) - { - shortcuts.MainTextBoxSelectionToLower = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSelectionToUpper"); - if (subNode != null) - { - shortcuts.MainTextBoxSelectionToUpper = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSelectionToggleCasing"); - if (subNode != null) - { - shortcuts.MainTextBoxSelectionToggleCasing = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxSelectionToRuby"); - if (subNode != null) - { - shortcuts.MainTextBoxSelectionToRuby = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxToggleAutoDuration"); - if (subNode != null) - { - shortcuts.MainTextBoxToggleAutoDuration = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateInsertSubAtVideoPos"); - if (subNode != null) - { - shortcuts.MainCreateInsertSubAtVideoPos = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateInsertSubAtVideoPosNoTextBoxFocus"); - if (subNode != null) - { - shortcuts.MainCreateInsertSubAtVideoPosNoTextBoxFocus = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateSetStart"); - if (subNode != null) - { - shortcuts.MainCreateSetStart = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateSetEnd"); - if (subNode != null) - { - shortcuts.MainCreateSetEnd = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetEndAndPause"); - if (subNode != null) - { - shortcuts.MainAdjustSetEndAndPause = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateSetEndAddNewAndGoToNew"); - if (subNode != null) - { - shortcuts.MainCreateSetEndAddNewAndGoToNew = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainCreateStartDownEndUp"); - if (subNode != null) - { - shortcuts.MainCreateStartDownEndUp = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartAndOffsetTheRest"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartAndOffsetTheRest = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartAndOffsetTheRest2"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartAndOffsetTheRest2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetEndAndOffsetTheRest"); - if (subNode != null) - { - shortcuts.MainAdjustSetEndAndOffsetTheRest = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetEndAndOffsetTheRestAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustSetEndAndOffsetTheRestAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetEndAndGotoNext"); - if (subNode != null) - { - shortcuts.MainAdjustSetEndAndGotoNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustViaEndAutoStart"); - if (subNode != null) - { - shortcuts.MainAdjustViaEndAutoStart = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustViaEndAutoStartAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustViaEndAutoStartAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartAutoDurationAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartAutoDurationAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetEndNextStartAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustSetEndNextStartAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustStartDownEndUpAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustStartDownEndUpAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartAndEndOfPrevious"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartAndEndOfPrevious = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartAndEndOfPreviousAndGoToNext"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartAndEndOfPreviousAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSetStartKeepDuration"); - if (subNode != null) - { - shortcuts.MainAdjustSetStartKeepDuration = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSelected100MsForward"); - if (subNode != null) - { - shortcuts.MainAdjustSelected100MsForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSelected100MsBack"); - if (subNode != null) - { - shortcuts.MainAdjustSelected100MsBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustStartXMsBack"); - if (subNode != null) - { - shortcuts.MainAdjustStartXMsBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustStartXMsForward"); - if (subNode != null) - { - shortcuts.MainAdjustStartXMsForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustEndXMsBack"); - if (subNode != null) - { - shortcuts.MainAdjustEndXMsBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustEndXMsForward"); - if (subNode != null) - { - shortcuts.MainAdjustEndXMsForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveStartOneFrameBack"); - if (subNode != null) - { - shortcuts.MoveStartOneFrameBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveStartOneFrameForward"); - if (subNode != null) - { - shortcuts.MoveStartOneFrameForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveEndOneFrameBack"); - if (subNode != null) - { - shortcuts.MoveEndOneFrameBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveEndOneFrameForward"); - if (subNode != null) - { - shortcuts.MoveEndOneFrameForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveStartOneFrameBackKeepGapPrev"); - if (subNode != null) - { - shortcuts.MoveStartOneFrameBackKeepGapPrev = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveStartOneFrameForwardKeepGapPrev"); - if (subNode != null) - { - shortcuts.MoveStartOneFrameForwardKeepGapPrev = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveEndOneFrameBackKeepGapNext"); - if (subNode != null) - { - shortcuts.MoveEndOneFrameBackKeepGapNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MoveEndOneFrameForwardKeepGapNext"); - if (subNode != null) - { - shortcuts.MoveEndOneFrameForwardKeepGapNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSnapStartToNextSceneChange"); - if (subNode != null) - { - shortcuts.MainAdjustSnapStartToNextSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSnapStartToNextSceneChangeWithGap"); - if (subNode != null) - { - shortcuts.MainAdjustSnapStartToNextSceneChangeWithGap = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSnapEndToPreviousSceneChange"); - if (subNode != null) - { - shortcuts.MainAdjustSnapEndToPreviousSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustSnapEndToPreviousSceneChangeWithGap"); - if (subNode != null) - { - shortcuts.MainAdjustSnapEndToPreviousSceneChangeWithGap = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToNextSceneChange"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToNextSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToNextSceneChangeWithGap"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToNextSceneChangeWithGap = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSceneChange"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToPreviousSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSceneChangeWithGap"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToPreviousSceneChangeWithGap = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToNextSubtitle"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToNextSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSubtitle"); - if (subNode != null) - { - shortcuts.MainAdjustExtendToPreviousSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendCurrentSubtitle"); - if (subNode != null) - { - shortcuts.MainAdjustExtendCurrentSubtitle = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendPreviousLineEndToCurrentStart"); - if (subNode != null) - { - shortcuts.MainAdjustExtendPreviousLineEndToCurrentStart = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainAdjustExtendNextLineStartToCurrentEnd"); - if (subNode != null) - { - shortcuts.MainAdjustExtendNextLineStartToCurrentEnd = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainInsertAfter"); - if (subNode != null) - { - shortcuts.MainInsertAfter = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxAutoBreak"); - if (subNode != null) - { - shortcuts.MainTextBoxAutoBreak = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxBreakAtPosition"); - if (subNode != null) - { - shortcuts.MainTextBoxBreakAtPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxBreakAtPositionAndGoToNext"); - if (subNode != null) - { - shortcuts.MainTextBoxBreakAtPositionAndGoToNext = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTextBoxUnbreak"); - if (subNode != null) - { - shortcuts.MainTextBoxUnbreak = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainWaveformInsertAtCurrentPosition"); - if (subNode != null) - { - shortcuts.MainWaveformInsertAtCurrentPosition = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainInsertBefore"); - if (subNode != null) - { - shortcuts.MainInsertBefore = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainMergeDialog"); - if (subNode != null) - { - shortcuts.MainMergeDialog = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainToggleFocus"); - if (subNode != null) - { - shortcuts.MainToggleFocus = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformAdd"); - if (subNode != null) - { - shortcuts.WaveformAdd = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformVerticalZoom"); - if (subNode != null) - { - shortcuts.WaveformVerticalZoom = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformVerticalZoomOut"); - if (subNode != null) - { - shortcuts.WaveformVerticalZoomOut = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformZoomIn"); - if (subNode != null) - { - shortcuts.WaveformZoomIn = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformZoomOut"); - if (subNode != null) - { - shortcuts.WaveformZoomOut = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformSplit"); - if (subNode != null) - { - shortcuts.WaveformSplit = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformPlaySelection"); - if (subNode != null) - { - shortcuts.WaveformPlaySelection = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformPlaySelectionEnd"); - if (subNode != null) - { - shortcuts.WaveformPlaySelectionEnd = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformSearchSilenceForward"); - if (subNode != null) - { - shortcuts.WaveformSearchSilenceForward = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformSearchSilenceBack"); - if (subNode != null) - { - shortcuts.WaveformSearchSilenceBack = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformAddTextHere"); - if (subNode != null) - { - shortcuts.WaveformAddTextHere = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformAddTextHereFromClipboard"); - if (subNode != null) - { - shortcuts.WaveformAddTextHereFromClipboard = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformSetParagraphAsSelection"); - if (subNode != null) - { - shortcuts.WaveformSetParagraphAsSelection = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformFocusListView"); - if (subNode != null) - { - shortcuts.WaveformFocusListView = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformGoToPreviousSceneChange"); - if (subNode != null) - { - shortcuts.WaveformGoToPreviousSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformGoToNextSceneChange"); - if (subNode != null) - { - shortcuts.WaveformGoToNextSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformToggleSceneChange"); - if (subNode != null) - { - shortcuts.WaveformToggleSceneChange = subNode.InnerText; - } - - subNode = node.SelectSingleNode("WaveformGuessStart"); - if (subNode != null) - { - shortcuts.WaveformGuessStart = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Waveform100MsLeft"); - if (subNode != null) - { - shortcuts.Waveform100MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Waveform100MsRight"); - if (subNode != null) - { - shortcuts.Waveform100MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Waveform1000MsLeft"); - if (subNode != null) - { - shortcuts.Waveform1000MsLeft = subNode.InnerText; - } - - subNode = node.SelectSingleNode("Waveform1000MsRight"); - if (subNode != null) - { - shortcuts.Waveform1000MsRight = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateGoogleIt"); - if (subNode != null) - { - shortcuts.MainTranslateGoogleIt = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateGoogleTranslate"); - if (subNode != null) - { - shortcuts.MainTranslateGoogleTranslate = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateCustomSearch1"); - if (subNode != null) - { - shortcuts.MainTranslateCustomSearch1 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateCustomSearch2"); - if (subNode != null) - { - shortcuts.MainTranslateCustomSearch2 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateCustomSearch3"); - if (subNode != null) - { - shortcuts.MainTranslateCustomSearch3 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateCustomSearch4"); - if (subNode != null) - { - shortcuts.MainTranslateCustomSearch4 = subNode.InnerText; - } - - subNode = node.SelectSingleNode("MainTranslateCustomSearch5"); - if (subNode != null) - { - shortcuts.MainTranslateCustomSearch5 = subNode.InnerText; - } - } - } - - private static void CustomSerialize(string fileName, Settings settings) - { - var xws = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 }; - var sb = new StringBuilder(); - using (var textWriter = XmlWriter.Create(sb, xws)) - { - textWriter.WriteStartDocument(); - - textWriter.WriteStartElement("Settings", string.Empty); - - textWriter.WriteElementString("Version", Utilities.AssemblyVersion); - - textWriter.WriteStartElement("Compare", string.Empty); - textWriter.WriteElementString("ShowOnlyDifferences", settings.Compare.ShowOnlyDifferences.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OnlyLookForDifferenceInText", settings.Compare.OnlyLookForDifferenceInText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("IgnoreLineBreaks", settings.Compare.IgnoreLineBreaks.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("IgnoreFormatting", settings.Compare.IgnoreFormatting.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("RecentFiles", string.Empty); - textWriter.WriteStartElement("FileNames", string.Empty); - foreach (var item in settings.RecentFiles.Files) - { - textWriter.WriteStartElement("FileName"); - if (item.OriginalFileName != null) - { - textWriter.WriteAttributeString("OriginalFileName", item.OriginalFileName); - } - - if (item.VideoFileName != null) - { - textWriter.WriteAttributeString("VideoFileName", item.VideoFileName); - } - - textWriter.WriteAttributeString("FirstVisibleIndex", item.FirstVisibleIndex.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteAttributeString("FirstSelectedIndex", item.FirstSelectedIndex.ToString(CultureInfo.InvariantCulture)); - if (item.VideoOffsetInMs != 0) - { - textWriter.WriteAttributeString("VideoOffset", item.VideoOffsetInMs.ToString(CultureInfo.InvariantCulture)); - } - - textWriter.WriteString(item.FileName); - textWriter.WriteEndElement(); - } - textWriter.WriteEndElement(); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("General", string.Empty); - - textWriter.WriteStartElement("Profiles", string.Empty); - foreach (var profile in settings.General.Profiles) - { - textWriter.WriteStartElement("Profile"); - textWriter.WriteElementString("Name", profile.Name); - textWriter.WriteElementString("SubtitleLineMaximumLength", profile.SubtitleLineMaximumLength.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumCharactersPerSeconds", profile.SubtitleMaximumCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleOptimalCharactersPerSeconds", profile.SubtitleOptimalCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMinimumDisplayMilliseconds", profile.SubtitleMinimumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumDisplayMilliseconds", profile.SubtitleMaximumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumWordsPerMinute", profile.SubtitleMaximumWordsPerMinute.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MinimumMillisecondsBetweenLines", profile.MinimumMillisecondsBetweenLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("CpsIncludesSpace", profile.CpsIncludesSpace.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MaxNumberOfLines", profile.MaxNumberOfLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeLinesShorterThan", profile.MergeLinesShorterThan.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DialogStyle", profile.DialogStyle.ToString()); - textWriter.WriteElementString("ContinuationStyle", profile.ContinuationStyle.ToString()); - textWriter.WriteEndElement(); - } - textWriter.WriteEndElement(); - - textWriter.WriteElementString("CurrentProfile", settings.General.CurrentProfile); - textWriter.WriteElementString("ShowToolbarNew", settings.General.ShowToolbarNew.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarOpen", settings.General.ShowToolbarOpen.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarSave", settings.General.ShowToolbarSave.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarSaveAs", settings.General.ShowToolbarSaveAs.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarFind", settings.General.ShowToolbarFind.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarReplace", settings.General.ShowToolbarReplace.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarFixCommonErrors", settings.General.ShowToolbarFixCommonErrors.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarRemoveTextForHi", settings.General.ShowToolbarRemoveTextForHi.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarVisualSync", settings.General.ShowToolbarVisualSync.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarSpellCheck", settings.General.ShowToolbarSpellCheck.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarNetflixGlyphCheck", settings.General.ShowToolbarNetflixGlyphCheck.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarSettings", settings.General.ShowToolbarSettings.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowToolbarHelp", settings.General.ShowToolbarHelp.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowFrameRate", settings.General.ShowFrameRate.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowVideoPlayer", settings.General.ShowVideoPlayer.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowAudioVisualizer", settings.General.ShowAudioVisualizer.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowWaveform", settings.General.ShowWaveform.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowSpectrogram", settings.General.ShowSpectrogram.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DefaultFrameRate", settings.General.DefaultFrameRate.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DefaultSubtitleFormat", settings.General.DefaultSubtitleFormat); - textWriter.WriteElementString("DefaultEncoding", settings.General.DefaultEncoding); - textWriter.WriteElementString("AutoConvertToUtf8", settings.General.AutoConvertToUtf8.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoGuessAnsiEncoding", settings.General.AutoGuessAnsiEncoding.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SystemSubtitleFontNameOverride", settings.General.SystemSubtitleFontNameOverride); - textWriter.WriteElementString("SystemSubtitleFontSizeOverride", settings.General.SystemSubtitleFontSizeOverride.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleFontName", settings.General.SubtitleFontName); - textWriter.WriteElementString("SubtitleTextBoxFontSize", settings.General.SubtitleTextBoxFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleListViewFontSize", settings.General.SubtitleListViewFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleTextBoxFontBold", settings.General.SubtitleTextBoxFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleListViewFontBold", settings.General.SubtitleListViewFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleTextBoxSyntaxColor", settings.General.SubtitleTextBoxSyntaxColor.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleTextBoxHtmlColor", settings.General.SubtitleTextBoxHtmlColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleTextBoxAssColor", settings.General.SubtitleTextBoxAssColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleFontColor", settings.General.SubtitleFontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleBackgroundColor", settings.General.SubtitleBackgroundColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MeasureFontName", settings.General.MeasureFontName); - textWriter.WriteElementString("MeasureFontSize", settings.General.MeasureFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MeasureFontBold", settings.General.MeasureFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleLineMaximumPixelWidth", settings.General.SubtitleLineMaximumPixelWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("CenterSubtitleInTextBox", settings.General.CenterSubtitleInTextBox.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowRecentFiles", settings.General.ShowRecentFiles.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RememberSelectedLine", settings.General.RememberSelectedLine.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartLoadLastFile", settings.General.StartLoadLastFile.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartRememberPositionAndSize", settings.General.StartRememberPositionAndSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartPosition", settings.General.StartPosition); - textWriter.WriteElementString("StartSize", settings.General.StartSize); - textWriter.WriteElementString("SplitContainerMainSplitterDistance", settings.General.SplitContainerMainSplitterDistance.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitContainer1SplitterDistance", settings.General.SplitContainer1SplitterDistance.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitContainerListViewAndTextSplitterDistance", settings.General.SplitContainerListViewAndTextSplitterDistance.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartInSourceView", settings.General.StartInSourceView.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveBlankLinesWhenOpening", settings.General.RemoveBlankLinesWhenOpening.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveBadCharsWhenOpening", settings.General.RemoveBadCharsWhenOpening.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleLineMaximumLength", settings.General.SubtitleLineMaximumLength.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MaxNumberOfLines", settings.General.MaxNumberOfLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeLinesShorterThan", settings.General.MergeLinesShorterThan.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMinimumDisplayMilliseconds", settings.General.SubtitleMinimumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumDisplayMilliseconds", settings.General.SubtitleMaximumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MinimumMillisecondsBetweenLines", settings.General.MinimumMillisecondsBetweenLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SetStartEndHumanDelay", settings.General.SetStartEndHumanDelay.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoWrapLineWhileTyping", settings.General.AutoWrapLineWhileTyping.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumCharactersPerSeconds", settings.General.SubtitleMaximumCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleOptimalCharactersPerSeconds", settings.General.SubtitleOptimalCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("CharactersPerSecondsIgnoreWhiteSpace", settings.General.CharactersPerSecondsIgnoreWhiteSpace.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("IgnoreArabicDiacritics", settings.General.IgnoreArabicDiacritics.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SubtitleMaximumWordsPerMinute", settings.General.SubtitleMaximumWordsPerMinute.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DialogStyle", settings.General.DialogStyle.ToString()); - textWriter.WriteElementString("ContinuationStyle", settings.General.ContinuationStyle.ToString()); - textWriter.WriteElementString("ContinuationPause", settings.General.ContinuationPause.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixContinuationStyleUncheckInsertsAllCaps", settings.General.FixContinuationStyleUncheckInsertsAllCaps.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixContinuationStyleUncheckInsertsItalic", settings.General.FixContinuationStyleUncheckInsertsItalic.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixContinuationStyleUncheckInsertsLowercase", settings.General.FixContinuationStyleUncheckInsertsLowercase.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixContinuationStyleHideContinuationCandidatesWithoutName", settings.General.FixContinuationStyleHideContinuationCandidatesWithoutName.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellCheckLanguage", settings.General.SpellCheckLanguage); - textWriter.WriteElementString("VideoPlayer", settings.General.VideoPlayer); - textWriter.WriteElementString("VideoPlayerDefaultVolume", settings.General.VideoPlayerDefaultVolume.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VideoPlayerPreviewFontSize", settings.General.VideoPlayerPreviewFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VideoPlayerPreviewFontBold", settings.General.VideoPlayerPreviewFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VideoPlayerShowStopButton", settings.General.VideoPlayerShowStopButton.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VideoPlayerShowMuteButton", settings.General.VideoPlayerShowMuteButton.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VideoPlayerShowFullscreenButton", settings.General.VideoPlayerShowFullscreenButton.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Language", settings.General.Language); - textWriter.WriteElementString("ListViewLineSeparatorString", settings.General.ListViewLineSeparatorString); - textWriter.WriteElementString("ListViewDoubleClickAction", settings.General.ListViewDoubleClickAction.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SaveAsUseFileNameFrom", settings.General.SaveAsUseFileNameFrom); - textWriter.WriteElementString("UppercaseLetters", settings.General.UppercaseLetters); - textWriter.WriteElementString("DefaultAdjustMilliseconds", settings.General.DefaultAdjustMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoRepeatOn", settings.General.AutoRepeatOn.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoRepeatCount", settings.General.AutoRepeatCount.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoContinueOn", settings.General.AutoContinueOn.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoContinueDelay", settings.General.AutoContinueDelay.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SyncListViewWithVideoWhilePlaying", settings.General.SyncListViewWithVideoWhilePlaying.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBackupSeconds", settings.General.AutoBackupSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBackupDeleteAfterMonths", settings.General.AutoBackupDeleteAfterMonths.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellChecker", settings.General.SpellChecker); - textWriter.WriteElementString("AllowEditOfOriginalSubtitle", settings.General.AllowEditOfOriginalSubtitle.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PromptDeleteLines", settings.General.PromptDeleteLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Undocked", settings.General.Undocked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UndockedVideoPosition", settings.General.UndockedVideoPosition); - textWriter.WriteElementString("UndockedVideoFullscreen", settings.General.UndockedVideoFullscreen.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UndockedWaveformPosition", settings.General.UndockedWaveformPosition); - textWriter.WriteElementString("UndockedVideoControlsPosition", settings.General.UndockedVideoControlsPosition); - textWriter.WriteElementString("WaveformCenter", settings.General.WaveformCenter.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformUpdateIntervalMs", settings.General.WaveformUpdateIntervalMs.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SmallDelayMilliseconds", settings.General.SmallDelayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LargeDelayMilliseconds", settings.General.LargeDelayMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowOriginalAsPreviewIfAvailable", settings.General.ShowOriginalAsPreviewIfAvailable.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastPacCodePage", settings.General.LastPacCodePage.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OpenSubtitleExtraExtensions", settings.General.OpenSubtitleExtraExtensions); - textWriter.WriteElementString("ListViewColumnsRememberSize", settings.General.ListViewColumnsRememberSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewNumberWidth", settings.General.ListViewNumberWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewStartWidth", settings.General.ListViewStartWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewEndWidth", settings.General.ListViewEndWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewDurationWidth", settings.General.ListViewDurationWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewCpsWidth", settings.General.ListViewCpsWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewWpmWidth", settings.General.ListViewWpmWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewGapWidth", settings.General.ListViewGapWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewActorWidth", settings.General.ListViewActorWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewRegionWidth", settings.General.ListViewRegionWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DirectShowDoubleLoad", settings.General.DirectShowDoubleLoad.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VlcWaveTranscodeSettings", settings.General.VlcWaveTranscodeSettings); - textWriter.WriteElementString("VlcLocation", settings.General.VlcLocation); - textWriter.WriteElementString("VlcLocationRelative", settings.General.VlcLocationRelative); - textWriter.WriteElementString("MpvVideoOutputWindows", settings.General.MpvVideoOutputWindows); - textWriter.WriteElementString("MpvVideoOutputLinux", settings.General.MpvVideoOutputLinux); - textWriter.WriteElementString("MpvExtraOption", settings.General.MpvExtraOption); - textWriter.WriteElementString("MpvLogging", settings.General.MpvLogging.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MpvHandlesPreviewText", settings.General.MpvHandlesPreviewText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MpcHcLocation", settings.General.MpcHcLocation); - textWriter.WriteElementString("MkvMergeLocation", settings.General.MkvMergeLocation); - textWriter.WriteElementString("UseFFmpegForWaveExtraction", settings.General.UseFFmpegForWaveExtraction.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FFmpegLocation", settings.General.FFmpegLocation); - textWriter.WriteElementString("FFmpegSceneThreshold", settings.General.FFmpegSceneThreshold); - textWriter.WriteElementString("UseTimeFormatHHMMSSFF", settings.General.UseTimeFormatHHMMSSFF.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitBehavior", settings.General.SplitBehavior.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitRemovesDashes", settings.General.SplitRemovesDashes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ClearStatusBarAfterSeconds", settings.General.ClearStatusBarAfterSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Company", settings.General.Company); - textWriter.WriteElementString("MoveVideo100Or500MsPlaySmallSample", settings.General.MoveVideo100Or500MsPlaySmallSample.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DisableVideoAutoLoading", settings.General.DisableVideoAutoLoading.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AllowVolumeBoost", settings.General.AllowVolumeBoost.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RightToLeftMode", settings.General.RightToLeftMode.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastSaveAsFormat", settings.General.LastSaveAsFormat); - textWriter.WriteElementString("CheckForUpdates", settings.General.CheckForUpdates.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastCheckForUpdates", settings.General.LastCheckForUpdates.ToString("yyyy-MM-dd")); - textWriter.WriteElementString("AutoSave", settings.General.AutoSave.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PreviewAssaText", settings.General.PreviewAssaText); - textWriter.WriteElementString("ShowProgress", settings.General.ShowProgress.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowNegativeDurationInfoOnSave", settings.General.ShowNegativeDurationInfoOnSave.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowFormatRequiresUtf8Warning", settings.General.ShowFormatRequiresUtf8Warning.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TitleBarAsterisk", settings.General.TitleBarAsterisk); - textWriter.WriteElementString("MeasurementConverterCloseOnInsert", settings.General.MeasurementConverterCloseOnInsert.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MeasurementConverterCategories", settings.General.MeasurementConverterCategories); - textWriter.WriteElementString("SubtitleTextBoxMaxHeight", settings.General.SubtitleTextBoxMaxHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UseDarkTheme", settings.General.UseDarkTheme.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ShowBetaStuff", settings.General.ShowBetaStuff.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NewEmptyDefaultMs", settings.General.NewEmptyDefaultMs.ToString(CultureInfo.InvariantCulture)); - - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("Tools", string.Empty); - textWriter.WriteElementString("StartSceneIndex", settings.Tools.StartSceneIndex.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("EndSceneIndex", settings.Tools.EndSceneIndex.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("VerifyPlaySeconds", settings.Tools.VerifyPlaySeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixShortDisplayTimesAllowMoveStartTime", settings.Tools.FixShortDisplayTimesAllowMoveStartTime.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveEmptyLinesBetweenText", settings.Tools.RemoveEmptyLinesBetweenText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MusicSymbol", settings.Tools.MusicSymbol); - textWriter.WriteElementString("MusicSymbolReplace", settings.Tools.MusicSymbolReplace); - textWriter.WriteElementString("UnicodeSymbolsToInsert", settings.Tools.UnicodeSymbolsToInsert); - textWriter.WriteElementString("SpellCheckAutoChangeNames", settings.Tools.SpellCheckAutoChangeNames.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellCheckAutoChangeNamesUseSuggestions", settings.Tools.SpellCheckAutoChangeNamesUseSuggestions.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellCheckOneLetterWords", settings.Tools.CheckOneLetterWords.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellCheckEnglishAllowInQuoteAsIng", settings.Tools.SpellCheckEnglishAllowInQuoteAsIng.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RememberUseAlwaysList", settings.Tools.RememberUseAlwaysList.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpellCheckShowCompletedMessage", settings.Tools.SpellCheckShowCompletedMessage.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OcrFixUseHardcodedRules", settings.Tools.OcrFixUseHardcodedRules.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OcrBinaryImageCompareRgbThreshold", settings.Tools.OcrBinaryImageCompareRgbThreshold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OcrTesseract4RgbThreshold", settings.Tools.OcrTesseract4RgbThreshold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OcrAddLetterRow1", settings.Tools.OcrAddLetterRow1); - textWriter.WriteElementString("OcrAddLetterRow2", settings.Tools.OcrAddLetterRow2); - textWriter.WriteElementString("OcrTrainFonts", settings.Tools.OcrTrainFonts); - textWriter.WriteElementString("OcrTrainMergedLetters", settings.Tools.OcrTrainMergedLetters); - textWriter.WriteElementString("OcrTrainSrtFile", settings.Tools.OcrTrainSrtFile); - textWriter.WriteElementString("Interjections", settings.Tools.Interjections); - textWriter.WriteElementString("MicrosoftBingApiId", settings.Tools.MicrosoftBingApiId); - textWriter.WriteElementString("MicrosoftTranslatorApiKey", settings.Tools.MicrosoftTranslatorApiKey); - textWriter.WriteElementString("MicrosoftTranslatorTokenEndpoint", settings.Tools.MicrosoftTranslatorTokenEndpoint); - textWriter.WriteElementString("MicrosoftTranslatorCategory", settings.Tools.MicrosoftTranslatorCategory); - textWriter.WriteElementString("GoogleApiV2Key", settings.Tools.GoogleApiV2Key); - textWriter.WriteElementString("GoogleApiV2KeyInfoShow", settings.Tools.GoogleApiV2KeyInfoShow.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GoogleTranslateNoKeyWarningShow", settings.Tools.GoogleTranslateNoKeyWarningShow.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GoogleApiV1ChunkSize", settings.Tools.GoogleApiV1ChunkSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GoogleTranslateLastTargetLanguage", settings.Tools.GoogleTranslateLastTargetLanguage); - textWriter.WriteElementString("TranslateAllowSplit", settings.Tools.TranslateAllowSplit.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorDurationSmall", settings.Tools.ListViewSyntaxColorDurationSmall.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorDurationBig", settings.Tools.ListViewSyntaxColorDurationBig.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorLongLines", settings.Tools.ListViewSyntaxColorLongLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorWideLines", settings.Tools.ListViewSyntaxColorWideLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxMoreThanXLines", settings.Tools.ListViewSyntaxMoreThanXLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorOverlap", settings.Tools.ListViewSyntaxColorOverlap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxColorGap", settings.Tools.ListViewSyntaxColorGap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewSyntaxErrorColor", settings.Tools.ListViewSyntaxErrorColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewUnfocusedSelectedColor", settings.Tools.ListViewUnfocusedSelectedColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnEndTime", settings.Tools.ListViewShowColumnEndTime.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnDuration", settings.Tools.ListViewShowColumnDuration.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnCharsPerSec", settings.Tools.ListViewShowColumnCharsPerSec.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnWordsPerMin", settings.Tools.ListViewShowColumnWordsPerMin.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnGap", settings.Tools.ListViewShowColumnGap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnActor", settings.Tools.ListViewShowColumnActor.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ListViewShowColumnRegion", settings.Tools.ListViewShowColumnRegion.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitAdvanced", settings.Tools.SplitAdvanced.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitOutputFolder", settings.Tools.SplitOutputFolder); - textWriter.WriteElementString("SplitNumberOfParts", settings.Tools.SplitNumberOfParts.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SplitVia", settings.Tools.SplitVia); - textWriter.WriteElementString("JoinCorrectTimeCodes", settings.Tools.JoinCorrectTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("JoinAddMs", settings.Tools.JoinAddMs.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NewEmptyTranslationText", settings.Tools.NewEmptyTranslationText); - textWriter.WriteElementString("BatchConvertOutputFolder", settings.Tools.BatchConvertOutputFolder); - textWriter.WriteElementString("BatchConvertOverwriteExisting", settings.Tools.BatchConvertOverwriteExisting.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertSaveInSourceFolder", settings.Tools.BatchConvertSaveInSourceFolder.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertRemoveFormatting", settings.Tools.BatchConvertRemoveFormatting.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertRemoveStyle", settings.Tools.BatchConvertRemoveStyle.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertBridgeGaps", settings.Tools.BatchConvertBridgeGaps.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertFixCasing", settings.Tools.BatchConvertFixCasing.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertRemoveTextForHI", settings.Tools.BatchConvertRemoveTextForHI.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertSplitLongLines", settings.Tools.BatchConvertSplitLongLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertFixCommonErrors", settings.Tools.BatchConvertFixCommonErrors.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertMultipleReplace", settings.Tools.BatchConvertMultipleReplace.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertFixRtl", settings.Tools.BatchConvertFixRtl.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertFixRtlMode", settings.Tools.BatchConvertFixRtlMode); - textWriter.WriteElementString("BatchConvertAutoBalance", settings.Tools.BatchConvertAutoBalance.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertSetMinDisplayTimeBetweenSubtitles", settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertMergeShortLines", settings.Tools.BatchConvertMergeShortLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertRemoveLineBreaks", settings.Tools.BatchConvertRemoveLineBreaks.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertMergeSameText", settings.Tools.BatchConvertMergeSameText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertMergeSameTimeCodes", settings.Tools.BatchConvertMergeSameTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertChangeSpeed", settings.Tools.BatchConvertChangeSpeed.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertAdjustDisplayDuration", settings.Tools.BatchConvertAdjustDisplayDuration.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertApplyDurationLimits", settings.Tools.BatchConvertApplyDurationLimits.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertDeleteLines", settings.Tools.BatchConvertDeleteLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertChangeFrameRate", settings.Tools.BatchConvertChangeFrameRate.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertOffsetTimeCodes", settings.Tools.BatchConvertOffsetTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertLanguage", settings.Tools.BatchConvertLanguage); - textWriter.WriteElementString("BatchConvertFormat", settings.Tools.BatchConvertFormat); - textWriter.WriteElementString("BatchConvertAssStyles", settings.Tools.BatchConvertAssStyles); - textWriter.WriteElementString("BatchConvertSsaStyles", settings.Tools.BatchConvertSsaStyles); - textWriter.WriteElementString("BatchConvertUseStyleFromSource", settings.Tools.BatchConvertUseStyleFromSource.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertExportCustomTextTemplate", settings.Tools.BatchConvertExportCustomTextTemplate); - textWriter.WriteElementString("BatchConvertTsOverrideXPosition", settings.Tools.BatchConvertTsOverrideXPosition.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsOverrideYPosition", settings.Tools.BatchConvertTsOverrideYPosition.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsOverrideBottomMargin", settings.Tools.BatchConvertTsOverrideBottomMargin.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsOverrideHAlign", settings.Tools.BatchConvertTsOverrideHAlign); - textWriter.WriteElementString("BatchConvertTsOverrideHMargin", settings.Tools.BatchConvertTsOverrideHMargin.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsOverrideScreenSize", settings.Tools.BatchConvertTsOverrideScreenSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsScreenWidth", settings.Tools.BatchConvertTsScreenWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsScreenHeight", settings.Tools.BatchConvertTsScreenHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsOnlyTeletext", settings.Tools.BatchConvertTsOnlyTeletext.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BatchConvertTsFileNameAppend", settings.Tools.BatchConvertTsFileNameAppend); - textWriter.WriteElementString("BatchConvertMkvLanguageCodeStyle", settings.Tools.BatchConvertMkvLanguageCodeStyle); - textWriter.WriteElementString("WaveformBatchLastFolder", settings.Tools.WaveformBatchLastFolder); - textWriter.WriteElementString("ModifySelectionRule", settings.Tools.ModifySelectionRule); - textWriter.WriteElementString("ModifySelectionText", settings.Tools.ModifySelectionText); - textWriter.WriteElementString("ModifySelectionCaseSensitive", settings.Tools.ModifySelectionCaseSensitive.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportVobSubFontName", settings.Tools.ExportVobSubFontName); - textWriter.WriteElementString("ExportVobSubFontSize", settings.Tools.ExportVobSubFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportVobSubVideoResolution", settings.Tools.ExportVobSubVideoResolution); - textWriter.WriteElementString("ExportVobSubLanguage", settings.Tools.ExportVobSubLanguage); - textWriter.WriteElementString("ExportVobSubSimpleRendering", settings.Tools.ExportVobSubSimpleRendering.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportVobAntiAliasingWithTransparency", settings.Tools.ExportVobAntiAliasingWithTransparency.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayFontName", settings.Tools.ExportBluRayFontName); - textWriter.WriteElementString("ExportBluRayFontSize", settings.Tools.ExportBluRayFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportFcpFontName", settings.Tools.ExportFcpFontName); - textWriter.WriteElementString("ExportFontNameOther", settings.Tools.ExportFontNameOther); - textWriter.WriteElementString("ExportFcpFontSize", settings.Tools.ExportFcpFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportFcpImageType", settings.Tools.ExportFcpImageType); - textWriter.WriteElementString("ExportFcpPalNtsc", settings.Tools.ExportFcpPalNtsc); - textWriter.WriteElementString("ExportBdnXmlImageType", settings.Tools.ExportBdnXmlImageType); - textWriter.WriteElementString("ExportLastFontSize", settings.Tools.ExportLastFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLastLineHeight", settings.Tools.ExportLastLineHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLastBorderWidth", settings.Tools.ExportLastBorderWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLastFontBold", settings.Tools.ExportLastFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayVideoResolution", settings.Tools.ExportBluRayVideoResolution); - textWriter.WriteElementString("ExportFcpVideoResolution", settings.Tools.ExportFcpVideoResolution); - textWriter.WriteElementString("ExportFontColor", settings.Tools.ExportFontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBorderColor", settings.Tools.ExportBorderColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportShadowColor", settings.Tools.ExportShadowColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBoxBorderSize", settings.Tools.ExportBoxBorderSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBottomMarginUnit", settings.Tools.ExportBottomMarginUnit); - textWriter.WriteElementString("ExportBottomMarginPercent", settings.Tools.ExportBottomMarginPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBottomMarginPixels", settings.Tools.ExportBottomMarginPixels.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLeftRightMarginUnit", settings.Tools.ExportLeftRightMarginUnit); - textWriter.WriteElementString("ExportLeftRightMarginPercent", settings.Tools.ExportLeftRightMarginPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLeftRightMarginPixels", settings.Tools.ExportLeftRightMarginPixels.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportHorizontalAlignment", settings.Tools.ExportHorizontalAlignment.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayBottomMarginPercent", settings.Tools.ExportBluRayBottomMarginPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayBottomMarginPixels", settings.Tools.ExportBluRayBottomMarginPixels.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayShadow", settings.Tools.ExportBluRayShadow.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportBluRayRemoveSmallGaps", settings.Tools.ExportBluRayRemoveSmallGaps.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportCdgBackgroundImage", settings.Tools.ExportCdgBackgroundImage); - textWriter.WriteElementString("ExportCdgMarginLeft", settings.Tools.ExportCdgMarginLeft.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportCdgMarginBottom", settings.Tools.ExportCdgMarginBottom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportCdgFormat", settings.Tools.ExportCdgFormat); - textWriter.WriteElementString("Export3DType", settings.Tools.Export3DType.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Export3DDepth", settings.Tools.Export3DDepth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLastShadowTransparency", settings.Tools.ExportLastShadowTransparency.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportLastFrameRate", settings.Tools.ExportLastFrameRate.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportFullFrame", settings.Tools.ExportFullFrame.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportFcpFullPathUrl", settings.Tools.ExportFcpFullPathUrl.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportPenLineJoin", settings.Tools.ExportPenLineJoin); - textWriter.WriteElementString("FixCommonErrorsFixOverlapAllowEqualEndStart", settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixCommonErrorsSkipStepOne", settings.Tools.FixCommonErrorsSkipStepOne.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextSplitting", settings.Tools.ImportTextSplitting); - textWriter.WriteElementString("ImportTextMergeShortLines", settings.Tools.ImportTextMergeShortLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextLineBreak", settings.Tools.ImportTextLineBreak); - textWriter.WriteElementString("ImportTextRemoveEmptyLines", settings.Tools.ImportTextRemoveEmptyLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextAutoSplitAtBlank", settings.Tools.ImportTextAutoSplitAtBlank.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextRemoveLinesNoLetters", settings.Tools.ImportTextRemoveLinesNoLetters.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextGenerateTimeCodes", settings.Tools.ImportTextGenerateTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextTakeTimeCodeFromFileName", settings.Tools.ImportTextTakeTimeCodeFromFileName.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextAutoBreak", settings.Tools.ImportTextAutoBreak.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextAutoBreakAtEnd", settings.Tools.ImportTextAutoBreakAtEnd.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextGap", settings.Tools.ImportTextGap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextAutoSplitNumberOfLines", settings.Tools.ImportTextAutoSplitNumberOfLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextAutoBreakAtEndMarkerText", settings.Tools.ImportTextAutoBreakAtEndMarkerText); - textWriter.WriteElementString("ImportTextDurationAuto", settings.Tools.ImportTextDurationAuto.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ImportTextFixedDuration", settings.Tools.ImportTextFixedDuration.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GenerateTimeCodePatterns", settings.Tools.GenerateTimeCodePatterns); - textWriter.WriteElementString("MusicSymbolStyle", settings.Tools.MusicSymbolStyle); - textWriter.WriteElementString("BridgeGapMilliseconds", settings.Tools.BridgeGapMilliseconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportCustomTemplates", settings.Tools.ExportCustomTemplates); - textWriter.WriteElementString("ChangeCasingChoice", settings.Tools.ChangeCasingChoice); - textWriter.WriteElementString("UseNoLineBreakAfter", settings.Tools.UseNoLineBreakAfter.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NoLineBreakAfterEnglish", settings.Tools.NoLineBreakAfterEnglish); - textWriter.WriteElementString("ExportTextFormatText", settings.Tools.ExportTextFormatText); - textWriter.WriteElementString("ExportTextRemoveStyling", settings.Tools.ExportTextRemoveStyling.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextShowLineNumbers", settings.Tools.ExportTextShowLineNumbers.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextShowLineNumbersNewLine", settings.Tools.ExportTextShowLineNumbersNewLine.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextShowTimeCodes", settings.Tools.ExportTextShowTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextShowTimeCodesNewLine", settings.Tools.ExportTextShowTimeCodesNewLine.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextNewLineAfterText", settings.Tools.ExportTextNewLineAfterText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextNewLineBetweenSubtitles", settings.Tools.ExportTextNewLineBetweenSubtitles.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ExportTextTimeCodeFormat", settings.Tools.ExportTextTimeCodeFormat); - textWriter.WriteElementString("ExportTextTimeCodeSeparator", settings.Tools.ExportTextTimeCodeSeparator); - textWriter.WriteElementString("VideoOffsetKeepTimeCodes", settings.Tools.VideoOffsetKeepTimeCodes.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MoveStartEndMs", settings.Tools.MoveStartEndMs.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AdjustDurationSeconds", settings.Tools.AdjustDurationSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AdjustDurationPercent", settings.Tools.AdjustDurationPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AdjustDurationLast", settings.Tools.AdjustDurationLast); - textWriter.WriteElementString("AdjustDurationExtendOnly", settings.Tools.AdjustDurationExtendOnly.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakCommaBreakEarly", settings.Tools.AutoBreakCommaBreakEarly.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakDashEarly", settings.Tools.AutoBreakDashEarly.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakLineEndingEarly", settings.Tools.AutoBreakLineEndingEarly.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakUsePixelWidth", settings.Tools.AutoBreakUsePixelWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakPreferBottomHeavy", settings.Tools.AutoBreakPreferBottomHeavy.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakPreferBottomPercent", settings.Tools.AutoBreakPreferBottomPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ApplyMinimumDurationLimit", settings.Tools.ApplyMinimumDurationLimit.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ApplyMaximumDurationLimit", settings.Tools.ApplyMaximumDurationLimit.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeShortLinesMaxGap", settings.Tools.MergeShortLinesMaxGap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeShortLinesMaxChars", settings.Tools.MergeShortLinesMaxChars.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeShortLinesOnlyContinuous", settings.Tools.MergeShortLinesOnlyContinuous.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ColumnPasteColumn", settings.Tools.ColumnPasteColumn); - textWriter.WriteElementString("ColumnPasteOverwriteMode", settings.Tools.ColumnPasteOverwriteMode); - - if (settings.Tools.FindHistory != null && settings.Tools.FindHistory.Count > 0) - { - const int maximumFindHistoryItems = 10; - textWriter.WriteStartElement("FindHistory", string.Empty); - int maxIndex = settings.Tools.FindHistory.Count; - if (maxIndex > maximumFindHistoryItems) - { - maxIndex = maximumFindHistoryItems; - } - - for (int index = 0; index < maxIndex; index++) - { - var text = settings.Tools.FindHistory[index]; - textWriter.WriteElementString("Text", text); - } - textWriter.WriteEndElement(); - } - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("SubtitleSettings", string.Empty); - textWriter.WriteElementString("SsaFontName", settings.SubtitleSettings.SsaFontName); - textWriter.WriteElementString("SsaFontSize", settings.SubtitleSettings.SsaFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaFontColorArgb", settings.SubtitleSettings.SsaFontColorArgb.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaFontBold", settings.SubtitleSettings.SsaFontBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaOutline", settings.SubtitleSettings.SsaOutline.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaShadow", settings.SubtitleSettings.SsaShadow.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaOpaqueBox", settings.SubtitleSettings.SsaOpaqueBox.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaMarginLeft", settings.SubtitleSettings.SsaMarginLeft.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaMarginRight", settings.SubtitleSettings.SsaMarginRight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SsaMarginTopBottom", settings.SubtitleSettings.SsaMarginTopBottom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DCinemaFontFile", settings.SubtitleSettings.DCinemaFontFile); - textWriter.WriteElementString("DCinemaFontSize", settings.SubtitleSettings.DCinemaFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DCinemaBottomMargin", settings.SubtitleSettings.DCinemaBottomMargin.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DCinemaZPosition", settings.SubtitleSettings.DCinemaZPosition.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DCinemaFadeUpTime", settings.SubtitleSettings.DCinemaFadeUpTime.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DCinemaFadeDownTime", settings.SubtitleSettings.DCinemaFadeDownTime.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SamiDisplayTwoClassesAsTwoSubtitles", settings.SubtitleSettings.SamiDisplayTwoClassesAsTwoSubtitles.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SamiHtmlEncodeMode", settings.SubtitleSettings.SamiHtmlEncodeMode.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TimedText10TimeCodeFormat", settings.SubtitleSettings.TimedText10TimeCodeFormat); - textWriter.WriteElementString("TimedText10ShowStyleAndLanguage", settings.SubtitleSettings.TimedText10ShowStyleAndLanguage.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TimedText10FileExtension", settings.SubtitleSettings.TimedText10FileExtension); - textWriter.WriteElementString("FcpFontSize", settings.SubtitleSettings.FcpFontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FcpFontName", settings.SubtitleSettings.FcpFontName); - textWriter.WriteElementString("Cavena890StartOfMessage", settings.SubtitleSettings.Cavena890StartOfMessage); - textWriter.WriteElementString("EbuStlTeletextUseBox", settings.SubtitleSettings.EbuStlTeletextUseBox.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("EbuStlTeletextUseDoubleHeight", settings.SubtitleSettings.EbuStlTeletextUseDoubleHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("EbuStlMarginTop", settings.SubtitleSettings.EbuStlMarginTop.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("EbuStlMarginBottom", settings.SubtitleSettings.EbuStlMarginBottom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("EbuStlNewLineRows", settings.SubtitleSettings.EbuStlNewLineRows.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PacVerticalTop", settings.SubtitleSettings.PacVerticalTop.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PacVerticalCenter", settings.SubtitleSettings.PacVerticalCenter.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PacVerticalBottom", settings.SubtitleSettings.PacVerticalBottom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DvdStudioProHeader", settings.SubtitleSettings.DvdStudioProHeader.TrimEnd() + Environment.NewLine); - textWriter.WriteElementString("TmpegEncXmlFontName", settings.SubtitleSettings.TmpegEncXmlFontName.TrimEnd()); - textWriter.WriteElementString("TmpegEncXmlFontHeight", settings.SubtitleSettings.TmpegEncXmlFontHeight.TrimEnd()); - textWriter.WriteElementString("TmpegEncXmlPosition", settings.SubtitleSettings.TmpegEncXmlPosition.TrimEnd()); - textWriter.WriteElementString("CheetahCaptionAlwayWriteEndTime", settings.SubtitleSettings.CheetahCaptionAlwayWriteEndTime.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NuendoCharacterListFile", settings.SubtitleSettings.NuendoCharacterListFile); - textWriter.WriteElementString("WebVttTimescale", settings.SubtitleSettings.WebVttTimescale.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TeletextItalicFix", settings.SubtitleSettings.TeletextItalicFix.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WebVttUseXTimestampMap", settings.SubtitleSettings.WebVttUseXTimestampMap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("Proxy", string.Empty); - textWriter.WriteElementString("ProxyAddress", settings.Proxy.ProxyAddress); - textWriter.WriteElementString("UserName", settings.Proxy.UserName); - textWriter.WriteElementString("Password", settings.Proxy.Password); - textWriter.WriteElementString("Domain", settings.Proxy.Domain); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("WordLists", string.Empty); - textWriter.WriteElementString("LastLanguage", settings.WordLists.LastLanguage); - textWriter.WriteElementString("Names", settings.WordLists.NamesUrl); - textWriter.WriteElementString("UseOnlineNames", settings.WordLists.UseOnlineNames.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("FcpExportSettings", string.Empty); - textWriter.WriteElementString("FontName", settings.FcpExportSettings.FontName); - textWriter.WriteElementString("FontSize", settings.FcpExportSettings.FontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Alignment", settings.FcpExportSettings.Alignment); - textWriter.WriteElementString("Baseline", settings.FcpExportSettings.Baseline.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Color", settings.FcpExportSettings.Color.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("CommonErrors", string.Empty); - textWriter.WriteElementString("StartPosition", settings.CommonErrors.StartPosition); - textWriter.WriteElementString("StartSize", settings.CommonErrors.StartSize); - textWriter.WriteElementString("EmptyLinesTicked", settings.CommonErrors.EmptyLinesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("OverlappingDisplayTimeTicked", settings.CommonErrors.OverlappingDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TooShortDisplayTimeTicked", settings.CommonErrors.TooShortDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TooLongDisplayTimeTicked", settings.CommonErrors.TooLongDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TooShortGapTicked", settings.CommonErrors.TooShortGapTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("InvalidItalicTagsTicked", settings.CommonErrors.InvalidItalicTagsTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BreakLongLinesTicked", settings.CommonErrors.BreakLongLinesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeShortLinesTicked", settings.CommonErrors.MergeShortLinesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MergeShortLinesAllTicked", settings.CommonErrors.MergeShortLinesAllTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UnneededSpacesTicked", settings.CommonErrors.UnneededSpacesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UnneededPeriodsTicked", settings.CommonErrors.UnneededPeriodsTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixCommasTicked", settings.CommonErrors.FixCommasTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("MissingSpacesTicked", settings.CommonErrors.MissingSpacesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AddMissingQuotesTicked", settings.CommonErrors.AddMissingQuotesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("Fix3PlusLinesTicked", settings.CommonErrors.Fix3PlusLinesTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixHyphensTicked", settings.CommonErrors.FixHyphensTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixHyphensRemoveSingleLineTicked", settings.CommonErrors.FixHyphensRemoveSingleLineTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UppercaseIInsideLowercaseWordTicked", settings.CommonErrors.UppercaseIInsideLowercaseWordTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DoubleApostropheToQuoteTicked", settings.CommonErrors.DoubleApostropheToQuoteTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AddPeriodAfterParagraphTicked", settings.CommonErrors.AddPeriodAfterParagraphTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartWithUppercaseLetterAfterParagraphTicked", settings.CommonErrors.StartWithUppercaseLetterAfterParagraphTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartWithUppercaseLetterAfterPeriodInsideParagraphTicked", settings.CommonErrors.StartWithUppercaseLetterAfterPeriodInsideParagraphTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("StartWithUppercaseLetterAfterColonTicked", settings.CommonErrors.StartWithUppercaseLetterAfterColonTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AloneLowercaseIToUppercaseIEnglishTicked", settings.CommonErrors.AloneLowercaseIToUppercaseIEnglishTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixOcrErrorsViaReplaceListTicked", settings.CommonErrors.FixOcrErrorsViaReplaceListTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveSpaceBetweenNumberTicked", settings.CommonErrors.RemoveSpaceBetweenNumberTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixDialogsOnOneLineTicked", settings.CommonErrors.FixDialogsOnOneLineTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TurkishAnsiTicked", settings.CommonErrors.TurkishAnsiTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DanishLetterITicked", settings.CommonErrors.DanishLetterITicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpanishInvertedQuestionAndExclamationMarksTicked", settings.CommonErrors.SpanishInvertedQuestionAndExclamationMarksTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixDoubleDashTicked", settings.CommonErrors.FixDoubleDashTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixDoubleGreaterThanTicked", settings.CommonErrors.FixDoubleGreaterThanTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixEllipsesStartTicked", settings.CommonErrors.FixEllipsesStartTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixMissingOpenBracketTicked", settings.CommonErrors.FixMissingOpenBracketTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixMusicNotationTicked", settings.CommonErrors.FixMusicNotationTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixContinuationStyleTicked", settings.CommonErrors.FixContinuationStyleTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixUnnecessaryLeadingDotsTicked", settings.CommonErrors.FixUnnecessaryLeadingDotsTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NormalizeStringsTicked", settings.CommonErrors.NormalizeStringsTicked.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DefaultFixes", settings.CommonErrors.DefaultFixes); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("VideoControls", string.Empty); - textWriter.WriteElementString("CustomSearchText1", settings.VideoControls.CustomSearchText1); - textWriter.WriteElementString("CustomSearchText2", settings.VideoControls.CustomSearchText2); - textWriter.WriteElementString("CustomSearchText3", settings.VideoControls.CustomSearchText3); - textWriter.WriteElementString("CustomSearchText4", settings.VideoControls.CustomSearchText4); - textWriter.WriteElementString("CustomSearchText5", settings.VideoControls.CustomSearchText5); - textWriter.WriteElementString("CustomSearchUrl1", settings.VideoControls.CustomSearchUrl1); - textWriter.WriteElementString("CustomSearchUrl2", settings.VideoControls.CustomSearchUrl2); - textWriter.WriteElementString("CustomSearchUrl3", settings.VideoControls.CustomSearchUrl3); - textWriter.WriteElementString("CustomSearchUrl4", settings.VideoControls.CustomSearchUrl4); - textWriter.WriteElementString("CustomSearchUrl5", settings.VideoControls.CustomSearchUrl5); - textWriter.WriteElementString("LastActiveTab", settings.VideoControls.LastActiveTab); - textWriter.WriteElementString("WaveformDrawGrid", settings.VideoControls.WaveformDrawGrid.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformDrawCps", settings.VideoControls.WaveformDrawCps.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformDrawWpm", settings.VideoControls.WaveformDrawWpm.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformAllowOverlap", settings.VideoControls.WaveformAllowOverlap.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformFocusOnMouseEnter", settings.VideoControls.WaveformFocusOnMouseEnter.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformListViewFocusOnMouseEnter", settings.VideoControls.WaveformListViewFocusOnMouseEnter.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSetVideoPositionOnMoveStartEnd", settings.VideoControls.WaveformSetVideoPositionOnMoveStartEnd.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSingleClickSelect", settings.VideoControls.WaveformSingleClickSelect.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSnapToSceneChanges", settings.VideoControls.WaveformSnapToSceneChanges.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformBorderHitMs", settings.VideoControls.WaveformBorderHitMs.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformGridColor", settings.VideoControls.WaveformGridColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformColor", settings.VideoControls.WaveformColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSelectedColor", settings.VideoControls.WaveformSelectedColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformBackgroundColor", settings.VideoControls.WaveformBackgroundColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformTextColor", settings.VideoControls.WaveformTextColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformCursorColor", settings.VideoControls.WaveformCursorColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformChaptersColor", settings.VideoControls.WaveformChaptersColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformTextSize", settings.VideoControls.WaveformTextSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformTextBold", settings.VideoControls.WaveformTextBold.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformDoubleClickOnNonParagraphAction", settings.VideoControls.WaveformDoubleClickOnNonParagraphAction); - textWriter.WriteElementString("WaveformRightClickOnNonParagraphAction", settings.VideoControls.WaveformRightClickOnNonParagraphAction); - textWriter.WriteElementString("WaveformMouseWheelScrollUpIsForward", settings.VideoControls.WaveformMouseWheelScrollUpIsForward.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GenerateSpectrogram", settings.VideoControls.GenerateSpectrogram.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("SpectrogramAppearance", settings.VideoControls.SpectrogramAppearance); - textWriter.WriteElementString("WaveformMinimumSampleRate", settings.VideoControls.WaveformMinimumSampleRate.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSeeksSilenceDurationSeconds", settings.VideoControls.WaveformSeeksSilenceDurationSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformSeeksSilenceMaxVolume", settings.VideoControls.WaveformSeeksSilenceMaxVolume.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformUnwrapText", settings.VideoControls.WaveformUnwrapText.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("WaveformHideWpmCpsLabels", settings.VideoControls.WaveformHideWpmCpsLabels.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("NetworkSettings", string.Empty); - textWriter.WriteElementString("SessionKey", settings.NetworkSettings.SessionKey); - textWriter.WriteElementString("UserName", settings.NetworkSettings.UserName); - textWriter.WriteElementString("WebServiceUrl", settings.NetworkSettings.WebServiceUrl); - textWriter.WriteElementString("PollIntervalSeconds", settings.NetworkSettings.PollIntervalSeconds.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("NewMessageSound", settings.NetworkSettings.NewMessageSound); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("VobSubOcr", string.Empty); - textWriter.WriteElementString("XOrMorePixelsMakesSpace", settings.VobSubOcr.XOrMorePixelsMakesSpace.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AllowDifferenceInPercent", settings.VobSubOcr.AllowDifferenceInPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BlurayAllowDifferenceInPercent", settings.VobSubOcr.BlurayAllowDifferenceInPercent.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastImageCompareFolder", settings.VobSubOcr.LastImageCompareFolder); - textWriter.WriteElementString("LastModiLanguageId", settings.VobSubOcr.LastModiLanguageId.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastOcrMethod", settings.VobSubOcr.LastOcrMethod); - textWriter.WriteElementString("TesseractLastLanguage", settings.VobSubOcr.TesseractLastLanguage); - textWriter.WriteElementString("UseTesseractFallback", settings.VobSubOcr.UseTesseractFallback.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UseItalicsInTesseract", settings.VobSubOcr.UseItalicsInTesseract.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TesseractEngineMode", settings.VobSubOcr.TesseractEngineMode.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UseMusicSymbolsInTesseract", settings.VobSubOcr.UseMusicSymbolsInTesseract.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RightToLeft", settings.VobSubOcr.RightToLeft.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("TopToBottom", settings.VobSubOcr.TopToBottom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("DefaultMillisecondsForUnknownDurations", settings.VobSubOcr.DefaultMillisecondsForUnknownDurations.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FixOcrErrors", settings.VobSubOcr.FixOcrErrors.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("PromptForUnknownWords", settings.VobSubOcr.PromptForUnknownWords.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("GuessUnknownWords", settings.VobSubOcr.GuessUnknownWords.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("AutoBreakSubtitleIfMoreThanTwoLines", settings.VobSubOcr.AutoBreakSubtitleIfMoreThanTwoLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("ItalicFactor", settings.VobSubOcr.ItalicFactor.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrDraw", settings.VobSubOcr.LineOcrDraw.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrMinHeightSplit", settings.VobSubOcr.LineOcrMinHeightSplit.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrAdvancedItalic", settings.VobSubOcr.LineOcrAdvancedItalic.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrLastLanguages", settings.VobSubOcr.LineOcrLastLanguages); - textWriter.WriteElementString("LineOcrLastSpellCheck", settings.VobSubOcr.LineOcrLastSpellCheck); - textWriter.WriteElementString("LineOcrLinesToAutoGuess", settings.VobSubOcr.LineOcrLinesToAutoGuess.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrMinLineHeight", settings.VobSubOcr.LineOcrMinLineHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrMaxLineHeight", settings.VobSubOcr.LineOcrMaxLineHeight.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LineOcrMaxErrorPixels", settings.VobSubOcr.LineOcrMaxErrorPixels.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastBinaryImageCompareDb", settings.VobSubOcr.LastBinaryImageCompareDb); - textWriter.WriteElementString("LastBinaryImageSpellCheck", settings.VobSubOcr.LastBinaryImageSpellCheck); - textWriter.WriteElementString("BinaryAutoDetectBestDb", settings.VobSubOcr.BinaryAutoDetectBestDb.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("LastTesseractSpellCheck", settings.VobSubOcr.LastTesseractSpellCheck); - textWriter.WriteElementString("CaptureTopAlign", settings.VobSubOcr.CaptureTopAlign.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UnfocusedAttentionBlinkCount", settings.VobSubOcr.UnfocusedAttentionBlinkCount.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("UnfocusedAttentionPlaySoundCount", settings.VobSubOcr.UnfocusedAttentionPlaySoundCount.ToString(CultureInfo.InvariantCulture)); - - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("MultipleSearchAndReplaceGroups", string.Empty); - foreach (var group in settings.MultipleSearchAndReplaceGroups) - { - if (!string.IsNullOrEmpty(group?.Name)) - { - textWriter.WriteStartElement("Group", string.Empty); - textWriter.WriteElementString("Name", group.Name); - textWriter.WriteElementString("Enabled", group.Enabled.ToString(CultureInfo.InvariantCulture)); - foreach (var item in group.Rules) - { - textWriter.WriteStartElement("Rule", string.Empty); - textWriter.WriteElementString("Enabled", item.Enabled.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FindWhat", item.FindWhat); - textWriter.WriteElementString("ReplaceWith", item.ReplaceWith); - textWriter.WriteElementString("SearchType", item.SearchType); - textWriter.WriteElementString("Description", item.Description); - textWriter.WriteEndElement(); - } - textWriter.WriteEndElement(); - } - } - textWriter.WriteEndElement(); - - WriteShortcuts(settings.Shortcuts, textWriter); - - textWriter.WriteStartElement("RemoveTextForHearingImpaired", string.Empty); - textWriter.WriteElementString("RemoveTextBetweenBrackets", settings.RemoveTextForHearingImpaired.RemoveTextBetweenBrackets.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBetweenParentheses", settings.RemoveTextForHearingImpaired.RemoveTextBetweenParentheses.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBetweenCurlyBrackets", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCurlyBrackets.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBetweenQuestionMarks", settings.RemoveTextForHearingImpaired.RemoveTextBetweenQuestionMarks.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBetweenCustom", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustom.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBetweenCustomBefore", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomBefore); - textWriter.WriteElementString("RemoveTextBetweenCustomAfter", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomAfter); - textWriter.WriteElementString("RemoveTextBetweenOnlySeparateLines", settings.RemoveTextForHearingImpaired.RemoveTextBetweenOnlySeparateLines.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBeforeColon", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColon.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBeforeColonOnlyIfUppercase", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyIfUppercase.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveTextBeforeColonOnlyOnSeparateLine", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyOnSeparateLine.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveInterjections", settings.RemoveTextForHearingImpaired.RemoveInterjections.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveInterjectionsOnlyOnSeparateLine", settings.RemoveTextForHearingImpaired.RemoveInterjectionsOnlyOnSeparateLine.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveIfAllUppercase", settings.RemoveTextForHearingImpaired.RemoveIfAllUppercase.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveIfContains", settings.RemoveTextForHearingImpaired.RemoveIfContains.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("RemoveIfContainsText", settings.RemoveTextForHearingImpaired.RemoveIfContainsText); - textWriter.WriteEndElement(); - - textWriter.WriteStartElement("SubtitleBeaming", string.Empty); - textWriter.WriteElementString("FontName", settings.SubtitleBeaming.FontName); - textWriter.WriteElementString("FontColor", settings.SubtitleBeaming.FontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("FontSize", settings.SubtitleBeaming.FontSize.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BorderColor", settings.SubtitleBeaming.BorderColor.ToArgb().ToString(CultureInfo.InvariantCulture)); - textWriter.WriteElementString("BorderWidth", settings.SubtitleBeaming.BorderWidth.ToString(CultureInfo.InvariantCulture)); - textWriter.WriteEndElement(); - - textWriter.WriteEndElement(); - - textWriter.WriteEndDocument(); - textWriter.Flush(); - - try - { - File.WriteAllText(fileName, sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""), Encoding.UTF8); - } - catch - { - // ignored - } - } - } - - internal static void WriteShortcuts(Shortcuts shortcuts, XmlWriter textWriter) - { - textWriter.WriteStartElement("Shortcuts", string.Empty); - textWriter.WriteElementString("GeneralGoToFirstSelectedLine", shortcuts.GeneralGoToFirstSelectedLine); - textWriter.WriteElementString("GeneralGoToNextEmptyLine", shortcuts.GeneralGoToNextEmptyLine); - textWriter.WriteElementString("GeneralMergeSelectedLines", shortcuts.GeneralMergeSelectedLines); - textWriter.WriteElementString("GeneralMergeSelectedLinesAndAutoBreak", shortcuts.GeneralMergeSelectedLinesAndAutoBreak); - textWriter.WriteElementString("GeneralMergeSelectedLinesAndUnbreak", shortcuts.GeneralMergeSelectedLinesAndUnbreak); - textWriter.WriteElementString("GeneralMergeSelectedLinesAndUnbreakCjk", shortcuts.GeneralMergeSelectedLinesAndUnbreakCjk); - textWriter.WriteElementString("GeneralMergeSelectedLinesOnlyFirstText", shortcuts.GeneralMergeSelectedLinesOnlyFirstText); - textWriter.WriteElementString("GeneralMergeSelectedLinesBilingual", shortcuts.GeneralMergeSelectedLinesBilingual); - textWriter.WriteElementString("GeneralMergeWithNext", shortcuts.GeneralMergeWithNext); - textWriter.WriteElementString("GeneralMergeWithPrevious", shortcuts.GeneralMergeWithPrevious); - textWriter.WriteElementString("GeneralToggleTranslationMode", shortcuts.GeneralToggleTranslationMode); - textWriter.WriteElementString("GeneralSwitchOriginalAndTranslation", shortcuts.GeneralSwitchOriginalAndTranslation); - textWriter.WriteElementString("GeneralMergeOriginalAndTranslation", shortcuts.GeneralMergeOriginalAndTranslation); - textWriter.WriteElementString("GeneralGoToNextSubtitle", shortcuts.GeneralGoToNextSubtitle); - textWriter.WriteElementString("GeneralGoToNextSubtitleCursorAtEnd", shortcuts.GeneralGoToNextSubtitleCursorAtEnd); - textWriter.WriteElementString("GeneralGoToPrevSubtitle", shortcuts.GeneralGoToPrevSubtitle); - textWriter.WriteElementString("GeneralGoToEndOfCurrentSubtitle", shortcuts.GeneralGoToEndOfCurrentSubtitle); - textWriter.WriteElementString("GeneralGoToStartOfCurrentSubtitle", shortcuts.GeneralGoToStartOfCurrentSubtitle); - textWriter.WriteElementString("GeneralGoToPreviousSubtitleAndFocusVideo", shortcuts.GeneralGoToPreviousSubtitleAndFocusVideo); - textWriter.WriteElementString("GeneralGoToNextSubtitleAndFocusVideo", shortcuts.GeneralGoToNextSubtitleAndFocusVideo); - textWriter.WriteElementString("GeneralGoToPrevSubtitleAndPlay", shortcuts.GeneralGoToPrevSubtitleAndPlay); - textWriter.WriteElementString("GeneralGoToNextSubtitleAndPlay", shortcuts.GeneralGoToNextSubtitleAndPlay); - textWriter.WriteElementString("GeneralAutoCalcCurrentDuration", shortcuts.GeneralAutoCalcCurrentDuration); - textWriter.WriteElementString("GeneralPlayFirstSelected", shortcuts.GeneralPlayFirstSelected); - textWriter.WriteElementString("GeneralHelp", shortcuts.GeneralHelp); - textWriter.WriteElementString("GeneralUnbrekNoSpace", shortcuts.GeneralUnbrekNoSpace); - textWriter.WriteElementString("GeneralToggleBookmarks", shortcuts.GeneralToggleBookmarks); - textWriter.WriteElementString("GeneralToggleBookmarksWithText", shortcuts.GeneralToggleBookmarksWithText); - textWriter.WriteElementString("GeneralClearBookmarks", shortcuts.GeneralClearBookmarks); - textWriter.WriteElementString("GeneralGoToBookmark", shortcuts.GeneralGoToBookmark); - textWriter.WriteElementString("GeneralGoToNextBookmark", shortcuts.GeneralGoToNextBookmark); - textWriter.WriteElementString("ChooseProfile", shortcuts.ChooseProfile); - textWriter.WriteElementString("DuplicateLine", shortcuts.DuplicateLine); - textWriter.WriteElementString("GeneralGoToPreviousBookmark", shortcuts.GeneralGoToPreviousBookmark); - textWriter.WriteElementString("MainFileNew", shortcuts.MainFileNew); - textWriter.WriteElementString("MainFileOpen", shortcuts.MainFileOpen); - textWriter.WriteElementString("MainFileOpenKeepVideo", shortcuts.MainFileOpenKeepVideo); - textWriter.WriteElementString("MainFileSave", shortcuts.MainFileSave); - textWriter.WriteElementString("MainFileSaveOriginal", shortcuts.MainFileSaveOriginal); - textWriter.WriteElementString("MainFileSaveOriginalAs", shortcuts.MainFileSaveOriginalAs); - textWriter.WriteElementString("MainFileSaveAs", shortcuts.MainFileSaveAs); - textWriter.WriteElementString("MainFileCloseOriginal", shortcuts.MainFileCloseOriginal); - textWriter.WriteElementString("MainFileCompare", shortcuts.MainFileCompare); - textWriter.WriteElementString("MainFileOpenOriginal", shortcuts.MainFileOpenOriginal); - textWriter.WriteElementString("MainFileSaveAll", shortcuts.MainFileSaveAll); - textWriter.WriteElementString("MainFileImportPlainText", shortcuts.MainFileImportPlainText); - textWriter.WriteElementString("MainFileImportTimeCodes", shortcuts.MainFileImportTimeCodes); - textWriter.WriteElementString("MainFileExportPlainText", shortcuts.MainFileExportPlainText); - textWriter.WriteElementString("MainFileExportEbu", shortcuts.MainFileExportEbu); - textWriter.WriteElementString("MainFileExportPac", shortcuts.MainFileExportPac); - textWriter.WriteElementString("MainEditUndo", shortcuts.MainEditUndo); - textWriter.WriteElementString("MainEditRedo", shortcuts.MainEditRedo); - textWriter.WriteElementString("MainEditFind", shortcuts.MainEditFind); - textWriter.WriteElementString("MainEditFindNext", shortcuts.MainEditFindNext); - textWriter.WriteElementString("MainEditReplace", shortcuts.MainEditReplace); - textWriter.WriteElementString("MainEditMultipleReplace", shortcuts.MainEditMultipleReplace); - textWriter.WriteElementString("MainEditGoToLineNumber", shortcuts.MainEditGoToLineNumber); - textWriter.WriteElementString("MainEditRightToLeft", shortcuts.MainEditRightToLeft); - textWriter.WriteElementString("MainToolsFixCommonErrors", shortcuts.MainToolsFixCommonErrors); - textWriter.WriteElementString("MainToolsFixCommonErrorsPreview", shortcuts.MainToolsFixCommonErrorsPreview); - textWriter.WriteElementString("MainToolsMergeShortLines", shortcuts.MainToolsMergeShortLines); - textWriter.WriteElementString("MainToolsMergeDuplicateText", shortcuts.MainToolsMergeDuplicateText); - textWriter.WriteElementString("MainToolsMergeSameTimeCodes", shortcuts.MainToolsMergeSameTimeCodes); - textWriter.WriteElementString("MainToolsMakeEmptyFromCurrent", shortcuts.MainToolsMakeEmptyFromCurrent); - textWriter.WriteElementString("MainToolsSplitLongLines", shortcuts.MainToolsSplitLongLines); - textWriter.WriteElementString("MainToolsMinimumDisplayTimeBetweenParagraphs", shortcuts.MainToolsMinimumDisplayTimeBetweenParagraphs); - textWriter.WriteElementString("MainToolsDurationsBridgeGap", shortcuts.MainToolsDurationsBridgeGap); - textWriter.WriteElementString("MainToolsRenumber", shortcuts.MainToolsRenumber); - textWriter.WriteElementString("MainToolsRemoveTextForHI", shortcuts.MainToolsRemoveTextForHI); - textWriter.WriteElementString("MainToolsChangeCasing", shortcuts.MainToolsChangeCasing); - textWriter.WriteElementString("MainToolsAutoDuration", shortcuts.MainToolsAutoDuration); - textWriter.WriteElementString("MainToolsBatchConvert", shortcuts.MainToolsBatchConvert); - textWriter.WriteElementString("MainToolsMeasurementConverter", shortcuts.MainToolsMeasurementConverter); - textWriter.WriteElementString("MainToolsSplit", shortcuts.MainToolsSplit); - textWriter.WriteElementString("MainToolsAppend", shortcuts.MainToolsAppend); - textWriter.WriteElementString("MainToolsJoin", shortcuts.MainToolsJoin); - textWriter.WriteElementString("MainToolsBeamer", shortcuts.MainToolsBeamer); - textWriter.WriteElementString("MainEditToggleTranslationOriginalInPreviews", shortcuts.MainEditToggleTranslationOriginalInPreviews); - textWriter.WriteElementString("MainEditInverseSelection", shortcuts.MainEditInverseSelection); - textWriter.WriteElementString("MainEditModifySelection", shortcuts.MainEditModifySelection); - textWriter.WriteElementString("MainVideoOpen", shortcuts.MainVideoOpen); - textWriter.WriteElementString("MainVideoClose", shortcuts.MainVideoClose); - textWriter.WriteElementString("MainVideoPause", shortcuts.MainVideoPause); - textWriter.WriteElementString("MainVideoPlayFromJustBefore", shortcuts.MainVideoPlayFromJustBefore); - textWriter.WriteElementString("MainVideoPlayPauseToggle", shortcuts.MainVideoPlayPauseToggle); - textWriter.WriteElementString("MainVideoShowHideVideo", shortcuts.MainVideoShowHideVideo); - textWriter.WriteElementString("MainVideoFoucsSetVideoPosition", shortcuts.MainVideoFoucsSetVideoPosition); - textWriter.WriteElementString("MainVideoToggleVideoControls", shortcuts.MainVideoToggleVideoControls); - textWriter.WriteElementString("MainVideo1FrameLeft", shortcuts.MainVideo1FrameLeft); - textWriter.WriteElementString("MainVideo1FrameRight", shortcuts.MainVideo1FrameRight); - textWriter.WriteElementString("MainVideo1FrameLeftWithPlay", shortcuts.MainVideo1FrameLeftWithPlay); - textWriter.WriteElementString("MainVideo1FrameRightWithPlay", shortcuts.MainVideo1FrameRightWithPlay); - textWriter.WriteElementString("MainVideo100MsLeft", shortcuts.MainVideo100MsLeft); - textWriter.WriteElementString("MainVideo100MsRight", shortcuts.MainVideo100MsRight); - textWriter.WriteElementString("MainVideo500MsLeft", shortcuts.MainVideo500MsLeft); - textWriter.WriteElementString("MainVideo500MsRight", shortcuts.MainVideo500MsRight); - textWriter.WriteElementString("MainVideo1000MsLeft", shortcuts.MainVideo1000MsLeft); - textWriter.WriteElementString("MainVideo1000MsRight", shortcuts.MainVideo1000MsRight); - textWriter.WriteElementString("MainVideo5000MsLeft", shortcuts.MainVideo5000MsLeft); - textWriter.WriteElementString("MainVideo5000MsRight", shortcuts.MainVideo5000MsRight); - textWriter.WriteElementString("MainVideoXSMsLeft", shortcuts.MainVideoXSMsLeft); - textWriter.WriteElementString("MainVideoXSMsRight", shortcuts.MainVideoXSMsRight); - textWriter.WriteElementString("MainVideoXLMsLeft", shortcuts.MainVideoXLMsLeft); - textWriter.WriteElementString("MainVideoXLMsRight", shortcuts.MainVideoXLMsRight); - textWriter.WriteElementString("MainVideo3000MsLeft", shortcuts.MainVideo3000MsLeft); - textWriter.WriteElementString("MainVideoGoToStartCurrent", shortcuts.MainVideoGoToStartCurrent); - textWriter.WriteElementString("MainVideoToggleStartEndCurrent", shortcuts.MainVideoToggleStartEndCurrent); - textWriter.WriteElementString("MainVideoPlayCurrent", shortcuts.MainVideoPlayCurrent); - textWriter.WriteElementString("MainVideoGoToPrevSubtitle", shortcuts.MainVideoGoToPrevSubtitle); - textWriter.WriteElementString("MainVideoGoToNextSubtitle", shortcuts.MainVideoGoToNextSubtitle); - textWriter.WriteElementString("MainVideoGoToPrevChapter", shortcuts.MainVideoGoToPrevChapter); - textWriter.WriteElementString("MainVideoGoToNextChapter", shortcuts.MainVideoGoToNextChapter); - textWriter.WriteElementString("MainVideoSelectNextSubtitle", shortcuts.MainVideoSelectNextSubtitle); - textWriter.WriteElementString("MainVideoFullscreen", shortcuts.MainVideoFullscreen); - textWriter.WriteElementString("MainVideoSlower", shortcuts.MainVideoSlower); - textWriter.WriteElementString("MainVideoFaster", shortcuts.MainVideoFaster); - textWriter.WriteElementString("MainVideoReset", shortcuts.MainVideoReset); - textWriter.WriteElementString("MainSpellCheck", shortcuts.MainSpellCheck); - textWriter.WriteElementString("MainSpellCheckFindDoubleWords", shortcuts.MainSpellCheckFindDoubleWords); - textWriter.WriteElementString("MainSpellCheckAddWordToNames", shortcuts.MainSpellCheckAddWordToNames); - textWriter.WriteElementString("MainSynchronizationAdjustTimes", shortcuts.MainSynchronizationAdjustTimes); - textWriter.WriteElementString("MainSynchronizationVisualSync", shortcuts.MainSynchronizationVisualSync); - textWriter.WriteElementString("MainSynchronizationPointSync", shortcuts.MainSynchronizationPointSync); - textWriter.WriteElementString("MainSynchronizationPointSyncViaFile", shortcuts.MainSynchronizationPointSyncViaFile); - textWriter.WriteElementString("MainSynchronizationChangeFrameRate", shortcuts.MainSynchronizationChangeFrameRate); - textWriter.WriteElementString("MainListViewItalic", shortcuts.MainListViewItalic); - textWriter.WriteElementString("MainListViewBold", shortcuts.MainListViewBold); - textWriter.WriteElementString("MainListViewUnderline", shortcuts.MainListViewUnderline); - textWriter.WriteElementString("MainListViewBox", shortcuts.MainListViewBox); - textWriter.WriteElementString("MainListViewSplit", shortcuts.MainListViewSplit); - textWriter.WriteElementString("MainListViewToggleDashes", shortcuts.MainListViewToggleDashes); - textWriter.WriteElementString("MainListViewToggleMusicSymbols", shortcuts.MainListViewToggleMusicSymbols); - textWriter.WriteElementString("MainListViewAlignment", shortcuts.MainListViewAlignment); - textWriter.WriteElementString("MainListViewAlignmentN1", shortcuts.MainListViewAlignmentN1); - textWriter.WriteElementString("MainListViewAlignmentN2", shortcuts.MainListViewAlignmentN2); - textWriter.WriteElementString("MainListViewAlignmentN3", shortcuts.MainListViewAlignmentN3); - textWriter.WriteElementString("MainListViewAlignmentN4", shortcuts.MainListViewAlignmentN4); - textWriter.WriteElementString("MainListViewAlignmentN5", shortcuts.MainListViewAlignmentN5); - textWriter.WriteElementString("MainListViewAlignmentN6", shortcuts.MainListViewAlignmentN6); - textWriter.WriteElementString("MainListViewAlignmentN7", shortcuts.MainListViewAlignmentN7); - textWriter.WriteElementString("MainListViewAlignmentN8", shortcuts.MainListViewAlignmentN8); - textWriter.WriteElementString("MainListViewAlignmentN9", shortcuts.MainListViewAlignmentN9); - textWriter.WriteElementString("MainRemoveFormatting", shortcuts.MainRemoveFormatting); - textWriter.WriteElementString("MainListViewCopyText", shortcuts.MainListViewCopyText); - textWriter.WriteElementString("MainListViewCopyTextFromOriginalToCurrent", shortcuts.MainListViewCopyTextFromOriginalToCurrent); - textWriter.WriteElementString("MainListViewAutoDuration", shortcuts.MainListViewAutoDuration); - textWriter.WriteElementString("MainListViewColumnDeleteText", shortcuts.MainListViewColumnDeleteText); - textWriter.WriteElementString("MainListViewColumnDeleteTextAndShiftUp", shortcuts.MainListViewColumnDeleteTextAndShiftUp); - textWriter.WriteElementString("MainListViewColumnInsertText", shortcuts.MainListViewColumnInsertText); - textWriter.WriteElementString("MainListViewColumnPaste", shortcuts.MainListViewColumnPaste); - textWriter.WriteElementString("MainListViewColumnTextUp", shortcuts.MainListViewColumnTextUp); - textWriter.WriteElementString("MainListViewColumnTextDown", shortcuts.MainListViewColumnTextDown); - textWriter.WriteElementString("MainListViewFocusWaveform", shortcuts.MainListViewFocusWaveform); - textWriter.WriteElementString("MainListViewGoToNextError", shortcuts.MainListViewGoToNextError); - textWriter.WriteElementString("MainListViewRemoveTimeCodes", shortcuts.MainListViewRemoveTimeCodes); - textWriter.WriteElementString("MainEditFixRTLViaUnicodeChars", shortcuts.MainEditFixRTLViaUnicodeChars); - textWriter.WriteElementString("MainEditRemoveRTLUnicodeChars", shortcuts.MainEditRemoveRTLUnicodeChars); - textWriter.WriteElementString("MainEditReverseStartAndEndingForRTL", shortcuts.MainEditReverseStartAndEndingForRTL); - textWriter.WriteElementString("MainTextBoxItalic", shortcuts.MainTextBoxItalic); - textWriter.WriteElementString("MainTextBoxSplitAtCursor", shortcuts.MainTextBoxSplitAtCursor); - textWriter.WriteElementString("MainTextBoxSplitAtCursorAndVideoPos", shortcuts.MainTextBoxSplitAtCursorAndVideoPos); - textWriter.WriteElementString("MainTextBoxSplitSelectedLineBilingual", shortcuts.MainTextBoxSplitSelectedLineBilingual); - textWriter.WriteElementString("MainTextBoxMoveLastWordDown", shortcuts.MainTextBoxMoveLastWordDown); - textWriter.WriteElementString("MainTextBoxMoveFirstWordFromNextUp", shortcuts.MainTextBoxMoveFirstWordFromNextUp); - textWriter.WriteElementString("MainTextBoxMoveLastWordDownCurrent", shortcuts.MainTextBoxMoveLastWordDownCurrent); - textWriter.WriteElementString("MainTextBoxMoveFirstWordUpCurrent", shortcuts.MainTextBoxMoveFirstWordUpCurrent); - textWriter.WriteElementString("MainTextBoxSelectionToLower", shortcuts.MainTextBoxSelectionToLower); - textWriter.WriteElementString("MainTextBoxSelectionToUpper", shortcuts.MainTextBoxSelectionToUpper); - textWriter.WriteElementString("MainTextBoxSelectionToggleCasing", shortcuts.MainTextBoxSelectionToggleCasing); - textWriter.WriteElementString("MainTextBoxSelectionToRuby", shortcuts.MainTextBoxSelectionToRuby); - textWriter.WriteElementString("MainTextBoxToggleAutoDuration", shortcuts.MainTextBoxToggleAutoDuration); - textWriter.WriteElementString("MainCreateInsertSubAtVideoPos", shortcuts.MainCreateInsertSubAtVideoPos); - textWriter.WriteElementString("MainCreateInsertSubAtVideoPosNoTextBoxFocus", shortcuts.MainCreateInsertSubAtVideoPosNoTextBoxFocus); - textWriter.WriteElementString("MainCreateSetStart", shortcuts.MainCreateSetStart); - textWriter.WriteElementString("MainCreateSetEnd", shortcuts.MainCreateSetEnd); - textWriter.WriteElementString("MainAdjustSetEndAndPause", shortcuts.MainAdjustSetEndAndPause); - textWriter.WriteElementString("MainCreateSetEndAddNewAndGoToNew", shortcuts.MainCreateSetEndAddNewAndGoToNew); - textWriter.WriteElementString("MainCreateStartDownEndUp", shortcuts.MainCreateStartDownEndUp); - textWriter.WriteElementString("MainAdjustSetStartAndOffsetTheRest", shortcuts.MainAdjustSetStartAndOffsetTheRest); - textWriter.WriteElementString("MainAdjustSetStartAndOffsetTheRest2", shortcuts.MainAdjustSetStartAndOffsetTheRest2); - textWriter.WriteElementString("MainAdjustSetEndAndOffsetTheRest", shortcuts.MainAdjustSetEndAndOffsetTheRest); - textWriter.WriteElementString("MainAdjustSetEndAndOffsetTheRestAndGoToNext", shortcuts.MainAdjustSetEndAndOffsetTheRestAndGoToNext); - textWriter.WriteElementString("MainAdjustSetEndAndGotoNext", shortcuts.MainAdjustSetEndAndGotoNext); - textWriter.WriteElementString("MainAdjustViaEndAutoStart", shortcuts.MainAdjustViaEndAutoStart); - textWriter.WriteElementString("MainAdjustViaEndAutoStartAndGoToNext", shortcuts.MainAdjustViaEndAutoStartAndGoToNext); - textWriter.WriteElementString("MainAdjustSetStartAutoDurationAndGoToNext", shortcuts.MainAdjustSetStartAutoDurationAndGoToNext); - textWriter.WriteElementString("MainAdjustSetEndNextStartAndGoToNext", shortcuts.MainAdjustSetEndNextStartAndGoToNext); - textWriter.WriteElementString("MainAdjustStartDownEndUpAndGoToNext", shortcuts.MainAdjustStartDownEndUpAndGoToNext); - textWriter.WriteElementString("MainAdjustSetStartAndEndOfPrevious", shortcuts.MainAdjustSetStartAndEndOfPrevious); - textWriter.WriteElementString("MainAdjustSetStartAndEndOfPreviousAndGoToNext", shortcuts.MainAdjustSetStartAndEndOfPreviousAndGoToNext); - textWriter.WriteElementString("MainAdjustSetStartKeepDuration", shortcuts.MainAdjustSetStartKeepDuration); - textWriter.WriteElementString("MainAdjustSelected100MsForward", shortcuts.MainAdjustSelected100MsForward); - textWriter.WriteElementString("MainAdjustSelected100MsBack", shortcuts.MainAdjustSelected100MsBack); - textWriter.WriteElementString("MainAdjustStartXMsBack", shortcuts.MainAdjustStartXMsBack); - textWriter.WriteElementString("MainAdjustStartXMsForward", shortcuts.MainAdjustStartXMsForward); - textWriter.WriteElementString("MainAdjustEndXMsBack", shortcuts.MainAdjustEndXMsBack); - textWriter.WriteElementString("MainAdjustEndXMsForward", shortcuts.MainAdjustEndXMsForward); - textWriter.WriteElementString("MoveStartOneFrameBack", shortcuts.MoveStartOneFrameBack); - textWriter.WriteElementString("MoveStartOneFrameForward", shortcuts.MoveStartOneFrameForward); - textWriter.WriteElementString("MoveEndOneFrameBack", shortcuts.MoveEndOneFrameBack); - textWriter.WriteElementString("MoveEndOneFrameForward", shortcuts.MoveEndOneFrameForward); - textWriter.WriteElementString("MoveStartOneFrameBackKeepGapPrev", shortcuts.MoveStartOneFrameBackKeepGapPrev); - textWriter.WriteElementString("MoveStartOneFrameForwardKeepGapPrev", shortcuts.MoveStartOneFrameForwardKeepGapPrev); - textWriter.WriteElementString("MoveEndOneFrameBackKeepGapNext", shortcuts.MoveEndOneFrameBackKeepGapNext); - textWriter.WriteElementString("MoveEndOneFrameForwardKeepGapNext", shortcuts.MoveEndOneFrameForwardKeepGapNext); - textWriter.WriteElementString("MainAdjustSnapStartToNextSceneChange", shortcuts.MainAdjustSnapStartToNextSceneChange); - textWriter.WriteElementString("MainAdjustSnapStartToNextSceneChangeWithGap", shortcuts.MainAdjustSnapStartToNextSceneChangeWithGap); - textWriter.WriteElementString("MainAdjustSnapEndToPreviousSceneChange", shortcuts.MainAdjustSnapEndToPreviousSceneChange); - textWriter.WriteElementString("MainAdjustSnapEndToPreviousSceneChangeWithGap", shortcuts.MainAdjustSnapEndToPreviousSceneChangeWithGap); - textWriter.WriteElementString("MainAdjustExtendToNextSceneChange", shortcuts.MainAdjustExtendToNextSceneChange); - textWriter.WriteElementString("MainAdjustExtendToNextSceneChangeWithGap", shortcuts.MainAdjustExtendToNextSceneChangeWithGap); - textWriter.WriteElementString("MainAdjustExtendToPreviousSceneChange", shortcuts.MainAdjustExtendToPreviousSceneChange); - textWriter.WriteElementString("MainAdjustExtendToPreviousSceneChangeWithGap", shortcuts.MainAdjustExtendToPreviousSceneChangeWithGap); - textWriter.WriteElementString("MainAdjustExtendToNextSubtitle", shortcuts.MainAdjustExtendToNextSubtitle); - textWriter.WriteElementString("MainAdjustExtendToPreviousSubtitle", shortcuts.MainAdjustExtendToPreviousSubtitle); - textWriter.WriteElementString("MainAdjustExtendCurrentSubtitle", shortcuts.MainAdjustExtendCurrentSubtitle); - textWriter.WriteElementString("MainAdjustExtendPreviousLineEndToCurrentStart", shortcuts.MainAdjustExtendPreviousLineEndToCurrentStart); - textWriter.WriteElementString("MainAdjustExtendNextLineStartToCurrentEnd", shortcuts.MainAdjustExtendNextLineStartToCurrentEnd); - textWriter.WriteElementString("MainInsertAfter", shortcuts.MainInsertAfter); - textWriter.WriteElementString("MainTextBoxAutoBreak", shortcuts.MainTextBoxAutoBreak); - textWriter.WriteElementString("MainTextBoxBreakAtPosition", shortcuts.MainTextBoxBreakAtPosition); - textWriter.WriteElementString("MainTextBoxBreakAtPositionAndGoToNext", shortcuts.MainTextBoxBreakAtPositionAndGoToNext); - textWriter.WriteElementString("MainTextBoxUnbreak", shortcuts.MainTextBoxUnbreak); - textWriter.WriteElementString("MainWaveformInsertAtCurrentPosition", shortcuts.MainWaveformInsertAtCurrentPosition); - textWriter.WriteElementString("MainInsertBefore", shortcuts.MainInsertBefore); - textWriter.WriteElementString("MainMergeDialog", shortcuts.MainMergeDialog); - textWriter.WriteElementString("MainToggleFocus", shortcuts.MainToggleFocus); - textWriter.WriteElementString("WaveformAdd", shortcuts.WaveformAdd); - textWriter.WriteElementString("WaveformVerticalZoom", shortcuts.WaveformVerticalZoom); - textWriter.WriteElementString("WaveformVerticalZoomOut", shortcuts.WaveformVerticalZoomOut); - textWriter.WriteElementString("WaveformZoomIn", shortcuts.WaveformZoomIn); - textWriter.WriteElementString("WaveformZoomOut", shortcuts.WaveformZoomOut); - textWriter.WriteElementString("WaveformSplit", shortcuts.WaveformSplit); - textWriter.WriteElementString("WaveformPlaySelection", shortcuts.WaveformPlaySelection); - textWriter.WriteElementString("WaveformPlaySelectionEnd", shortcuts.WaveformPlaySelectionEnd); - textWriter.WriteElementString("WaveformSearchSilenceForward", shortcuts.WaveformSearchSilenceForward); - textWriter.WriteElementString("WaveformSearchSilenceBack", shortcuts.WaveformSearchSilenceBack); - textWriter.WriteElementString("WaveformAddTextHere", shortcuts.WaveformAddTextHere); - textWriter.WriteElementString("WaveformAddTextHereFromClipboard", shortcuts.WaveformAddTextHereFromClipboard); - textWriter.WriteElementString("WaveformSetParagraphAsSelection", shortcuts.WaveformSetParagraphAsSelection); - textWriter.WriteElementString("WaveformFocusListView", shortcuts.WaveformFocusListView); - textWriter.WriteElementString("WaveformGoToPreviousSceneChange", shortcuts.WaveformGoToPreviousSceneChange); - textWriter.WriteElementString("WaveformGoToNextSceneChange", shortcuts.WaveformGoToNextSceneChange); - textWriter.WriteElementString("WaveformToggleSceneChange", shortcuts.WaveformToggleSceneChange); - textWriter.WriteElementString("WaveformGuessStart", shortcuts.WaveformGuessStart); - textWriter.WriteElementString("Waveform100MsLeft", shortcuts.Waveform100MsLeft); - textWriter.WriteElementString("Waveform100MsRight", shortcuts.Waveform100MsRight); - textWriter.WriteElementString("Waveform1000MsLeft", shortcuts.Waveform1000MsLeft); - textWriter.WriteElementString("Waveform1000MsRight", shortcuts.Waveform1000MsRight); - textWriter.WriteElementString("MainTranslateGoogleIt", shortcuts.MainTranslateGoogleIt); - textWriter.WriteElementString("MainTranslateGoogleTranslate", shortcuts.MainTranslateGoogleTranslate); - textWriter.WriteElementString("MainTranslateCustomSearch1", shortcuts.MainTranslateCustomSearch1); - textWriter.WriteElementString("MainTranslateCustomSearch2", shortcuts.MainTranslateCustomSearch2); - textWriter.WriteElementString("MainTranslateCustomSearch3", shortcuts.MainTranslateCustomSearch3); - textWriter.WriteElementString("MainTranslateCustomSearch4", shortcuts.MainTranslateCustomSearch4); - textWriter.WriteElementString("MainTranslateCustomSearch5", shortcuts.MainTranslateCustomSearch5); - textWriter.WriteEndElement(); - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using Nikse.SubtitleEdit.Core.Enums; + +namespace Nikse.SubtitleEdit.Core.Common +{ + // The settings classes are built for easy xml-serialization (makes save/load code simple) + // ...but the built-in serialization is too slow - so a custom (de-)serialization has been used! + + public class RecentFileEntry + + { + public string FileName { get; set; } + public string OriginalFileName { get; set; } + public string VideoFileName { get; set; } + public int FirstVisibleIndex { get; set; } + public int FirstSelectedIndex { get; set; } + public long VideoOffsetInMs { get; set; } + } + + public class RecentFilesSettings + { + private const int MaxRecentFiles = 25; + + [XmlArrayItem("FileName")] + public List Files { get; set; } + + public RecentFilesSettings() + { + Files = new List(); + } + + public void Add(string fileName, int firstVisibleIndex, int firstSelectedIndex, string videoFileName, string originalFileName, long videoOffset) + { + Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList(); + + if (string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(originalFileName)) + { + fileName = originalFileName; + originalFileName = null; + } + + if (string.IsNullOrEmpty(fileName)) + { + Files.Insert(0, new RecentFileEntry { FileName = string.Empty }); + return; + } + + var existingEntry = GetRecentFile(fileName, originalFileName); + if (existingEntry == null) + { + Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName }); + } + else + { + Files.Remove(existingEntry); + existingEntry.FirstSelectedIndex = firstSelectedIndex; + existingEntry.VideoOffsetInMs = videoOffset; + existingEntry.FirstVisibleIndex = firstVisibleIndex; + existingEntry.VideoFileName = videoFileName; + existingEntry.OriginalFileName = originalFileName; + Files.Insert(0, existingEntry); + } + Files = Files.Take(MaxRecentFiles).ToList(); + } + + public void Add(string fileName, string videoFileName, string originalFileName) + { + Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList(); + + var existingEntry = GetRecentFile(fileName, originalFileName); + if (existingEntry == null) + { + Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName }); + } + else + { + Files.Remove(existingEntry); + Files.Insert(0, existingEntry); + } + Files = Files.Take(MaxRecentFiles).ToList(); + } + + private RecentFileEntry GetRecentFile(string fileName, string originalFileName) + { + RecentFileEntry existingEntry; + if (string.IsNullOrEmpty(originalFileName)) + { + existingEntry = Files.FirstOrDefault(p => !string.IsNullOrEmpty(p.FileName) && + string.IsNullOrEmpty(p.OriginalFileName) && + p.FileName.Equals(fileName, StringComparison.OrdinalIgnoreCase)); + } + else + { + existingEntry = Files.FirstOrDefault(p => !string.IsNullOrEmpty(p.FileName) && + !string.IsNullOrEmpty(p.OriginalFileName) && + p.FileName.Equals(fileName, StringComparison.OrdinalIgnoreCase) && + p.OriginalFileName.Equals(originalFileName, StringComparison.OrdinalIgnoreCase)); + } + return existingEntry; + } + } + + public class ToolsSettings + { + public int StartSceneIndex { get; set; } + public int EndSceneIndex { get; set; } + public int VerifyPlaySeconds { get; set; } + public bool FixShortDisplayTimesAllowMoveStartTime { get; set; } + public bool RemoveEmptyLinesBetweenText { get; set; } + public string MusicSymbol { get; set; } + public string MusicSymbolReplace { get; set; } + public string UnicodeSymbolsToInsert { get; set; } + public bool SpellCheckAutoChangeNames { get; set; } + public bool SpellCheckAutoChangeNamesUseSuggestions { get; set; } + public bool CheckOneLetterWords { get; set; } + public bool SpellCheckEnglishAllowInQuoteAsIng { get; set; } + public bool RememberUseAlwaysList { get; set; } + public bool SpellCheckShowCompletedMessage { get; set; } + public bool OcrFixUseHardcodedRules { get; set; } + public int OcrBinaryImageCompareRgbThreshold { get; set; } + public int OcrTesseract4RgbThreshold { get; set; } + public string OcrAddLetterRow1 { get; set; } + public string OcrAddLetterRow2 { get; set; } + public string OcrTrainFonts { get; set; } + public string OcrTrainMergedLetters { get; set; } + public string OcrTrainSrtFile { get; set; } + public string Interjections { get; set; } + public string MicrosoftBingApiId { get; set; } + public string MicrosoftTranslatorApiKey { get; set; } + public string MicrosoftTranslatorTokenEndpoint { get; set; } + public string MicrosoftTranslatorCategory { get; set; } + public string GoogleApiV2Key { get; set; } + public bool GoogleApiV2KeyInfoShow { get; set; } + public bool GoogleTranslateNoKeyWarningShow { get; set; } + public int GoogleApiV1ChunkSize { get; set; } + public string GoogleTranslateLastTargetLanguage { get; set; } + public bool TranslateAllowSplit { get; set; } + public bool ListViewSyntaxColorDurationSmall { get; set; } + public bool ListViewSyntaxColorDurationBig { get; set; } + public bool ListViewSyntaxColorOverlap { get; set; } + public bool ListViewSyntaxColorLongLines { get; set; } + public bool ListViewSyntaxColorWideLines { get; set; } + public bool ListViewSyntaxColorGap { get; set; } + public bool ListViewSyntaxMoreThanXLines { get; set; } + public Color ListViewSyntaxErrorColor { get; set; } + public Color ListViewUnfocusedSelectedColor { get; set; } + public bool ListViewShowColumnEndTime { get; set; } + public bool ListViewShowColumnDuration { get; set; } + public bool ListViewShowColumnCharsPerSec { get; set; } + public bool ListViewShowColumnWordsPerMin { get; set; } + public bool ListViewShowColumnGap { get; set; } + public bool ListViewShowColumnActor { get; set; } + public bool ListViewShowColumnRegion { get; set; } + public bool SplitAdvanced { get; set; } + public string SplitOutputFolder { get; set; } + public int SplitNumberOfParts { get; set; } + public string SplitVia { get; set; } + public bool JoinCorrectTimeCodes { get; set; } + public int JoinAddMs { get; set; } + public string LastShowEarlierOrLaterSelection { get; set; } + public string NewEmptyTranslationText { get; set; } + public string BatchConvertOutputFolder { get; set; } + public bool BatchConvertOverwriteExisting { get; set; } + public bool BatchConvertSaveInSourceFolder { get; set; } + public bool BatchConvertRemoveFormatting { get; set; } + public bool BatchConvertRemoveStyle { get; set; } + public bool BatchConvertBridgeGaps { get; set; } + public bool BatchConvertFixCasing { get; set; } + public bool BatchConvertRemoveTextForHI { get; set; } + public bool BatchConvertFixCommonErrors { get; set; } + public bool BatchConvertMultipleReplace { get; set; } + public bool BatchConvertFixRtl { get; set; } + public string BatchConvertFixRtlMode { get; set; } + public bool BatchConvertSplitLongLines { get; set; } + public bool BatchConvertAutoBalance { get; set; } + public bool BatchConvertSetMinDisplayTimeBetweenSubtitles { get; set; } + public bool BatchConvertMergeShortLines { get; set; } + public bool BatchConvertRemoveLineBreaks { get; set; } + public bool BatchConvertMergeSameText { get; set; } + public bool BatchConvertMergeSameTimeCodes { get; set; } + public bool BatchConvertChangeFrameRate { get; set; } + public bool BatchConvertChangeSpeed { get; set; } + public bool BatchConvertAdjustDisplayDuration { get; set; } + public bool BatchConvertApplyDurationLimits { get; set; } + public bool BatchConvertDeleteLines { get; set; } + public bool BatchConvertOffsetTimeCodes { get; set; } + public string BatchConvertLanguage { get; set; } + public string BatchConvertFormat { get; set; } + public string BatchConvertAssStyles { get; set; } + public string BatchConvertSsaStyles { get; set; } + public bool BatchConvertUseStyleFromSource { get; set; } + public string BatchConvertExportCustomTextTemplate { get; set; } + public bool BatchConvertTsOverrideXPosition { get; set; } + public bool BatchConvertTsOverrideYPosition { get; set; } + public int BatchConvertTsOverrideBottomMargin { get; set; } + public string BatchConvertTsOverrideHAlign { get; set; } + public int BatchConvertTsOverrideHMargin { get; set; } + public bool BatchConvertTsOverrideScreenSize { get; set; } + public int BatchConvertTsScreenWidth { get; set; } + public int BatchConvertTsScreenHeight { get; set; } + public string BatchConvertTsFileNameAppend { get; set; } + public bool BatchConvertTsOnlyTeletext { get; set; } + public string BatchConvertMkvLanguageCodeStyle { get; set; } + public string WaveformBatchLastFolder { get; set; } + public string ModifySelectionText { get; set; } + public string ModifySelectionRule { get; set; } + public bool ModifySelectionCaseSensitive { get; set; } + public string ExportVobSubFontName { get; set; } + public int ExportVobSubFontSize { get; set; } + public string ExportVobSubVideoResolution { get; set; } + public string ExportVobSubLanguage { get; set; } + public bool ExportVobSubSimpleRendering { get; set; } + public bool ExportVobAntiAliasingWithTransparency { get; set; } + public string ExportBluRayFontName { get; set; } + public int ExportBluRayFontSize { get; set; } + public string ExportFcpFontName { get; set; } + public string ExportFontNameOther { get; set; } + public int ExportFcpFontSize { get; set; } + public string ExportFcpImageType { get; set; } + public string ExportFcpPalNtsc { get; set; } + public string ExportBdnXmlImageType { get; set; } + public int ExportLastFontSize { get; set; } + public int ExportLastLineHeight { get; set; } + public int ExportLastBorderWidth { get; set; } + public bool ExportLastFontBold { get; set; } + public string ExportBluRayVideoResolution { get; set; } + public string ExportFcpVideoResolution { get; set; } + public Color ExportFontColor { get; set; } + public Color ExportBorderColor { get; set; } + public Color ExportShadowColor { get; set; } + public int ExportBoxBorderSize { get; set; } + public string ExportBottomMarginUnit { get; set; } + public int ExportBottomMarginPercent { get; set; } + public int ExportBottomMarginPixels { get; set; } + public string ExportLeftRightMarginUnit { get; set; } + public int ExportLeftRightMarginPercent { get; set; } + public int ExportLeftRightMarginPixels { get; set; } + public int ExportHorizontalAlignment { get; set; } + public int ExportBluRayBottomMarginPercent { get; set; } + public int ExportBluRayBottomMarginPixels { get; set; } + public int ExportBluRayShadow { get; set; } + public bool ExportBluRayRemoveSmallGaps { get; set; } + public string ExportCdgBackgroundImage { get; set; } + public int ExportCdgMarginLeft { get; set; } + public int ExportCdgMarginBottom { get; set; } + public string ExportCdgFormat { get; set; } + public int Export3DType { get; set; } + public int Export3DDepth { get; set; } + public int ExportLastShadowTransparency { get; set; } + public double ExportLastFrameRate { get; set; } + public bool ExportFullFrame { get; set; } + public bool ExportFcpFullPathUrl { get; set; } + public string ExportPenLineJoin { get; set; } + public bool FixCommonErrorsFixOverlapAllowEqualEndStart { get; set; } + public bool FixCommonErrorsSkipStepOne { get; set; } + public string ImportTextSplitting { get; set; } + public string ImportTextLineBreak { get; set; } + public bool ImportTextMergeShortLines { get; set; } + public bool ImportTextRemoveEmptyLines { get; set; } + public bool ImportTextAutoSplitAtBlank { get; set; } + public bool ImportTextRemoveLinesNoLetters { get; set; } + public bool ImportTextGenerateTimeCodes { get; set; } + public bool ImportTextTakeTimeCodeFromFileName { get; set; } + public bool ImportTextAutoBreak { get; set; } + public bool ImportTextAutoBreakAtEnd { get; set; } + public decimal ImportTextGap { get; set; } + public decimal ImportTextAutoSplitNumberOfLines { get; set; } + public string ImportTextAutoBreakAtEndMarkerText { get; set; } + public bool ImportTextDurationAuto { get; set; } + public decimal ImportTextFixedDuration { get; set; } + public string GenerateTimeCodePatterns { get; set; } + public string MusicSymbolStyle { get; set; } + public int BridgeGapMilliseconds { get; set; } + public string ExportCustomTemplates { get; set; } + public string ChangeCasingChoice { get; set; } + public bool UseNoLineBreakAfter { get; set; } + public string NoLineBreakAfterEnglish { get; set; } + public List FindHistory { get; set; } + public string ExportTextFormatText { get; set; } + public bool ExportTextRemoveStyling { get; set; } + public bool ExportTextShowLineNumbers { get; set; } + public bool ExportTextShowLineNumbersNewLine { get; set; } + public bool ExportTextShowTimeCodes { get; set; } + public bool ExportTextShowTimeCodesNewLine { get; set; } + public bool ExportTextNewLineAfterText { get; set; } + public bool ExportTextNewLineBetweenSubtitles { get; set; } + public string ExportTextTimeCodeFormat { get; set; } + public string ExportTextTimeCodeSeparator { get; set; } + public bool VideoOffsetKeepTimeCodes { get; set; } + public int MoveStartEndMs { get; set; } + public decimal AdjustDurationSeconds { get; set; } + public int AdjustDurationPercent { get; set; } + public string AdjustDurationLast { get; set; } + public bool AdjustDurationExtendOnly { get; set; } + public bool AutoBreakCommaBreakEarly { get; set; } + public bool AutoBreakDashEarly { get; set; } + public bool AutoBreakLineEndingEarly { get; set; } + public bool AutoBreakUsePixelWidth { get; set; } + public bool AutoBreakPreferBottomHeavy { get; set; } + public double AutoBreakPreferBottomPercent { get; set; } + public bool ApplyMinimumDurationLimit { get; set; } + public bool ApplyMaximumDurationLimit { get; set; } + public int MergeShortLinesMaxGap { get; set; } + public int MergeShortLinesMaxChars { get; set; } + public bool MergeShortLinesOnlyContinuous { get; set; } + public string ColumnPasteColumn { get; set; } + public string ColumnPasteOverwriteMode { get; set; } + + public ToolsSettings() + { + StartSceneIndex = 1; + EndSceneIndex = 1; + VerifyPlaySeconds = 2; + FixShortDisplayTimesAllowMoveStartTime = false; + RemoveEmptyLinesBetweenText = true; + MusicSymbol = "♪"; + MusicSymbolReplace = "♪,â™," + // ♪ + ♫ in UTF-8 opened as ANSI + ",," + // music symbols by subtitle creator + "#,*,¶"; // common music symbols + UnicodeSymbolsToInsert = "♪;♫;°;☺;☹;♥;©;☮;☯;Σ;∞;≡;⇒;π"; + SpellCheckAutoChangeNames = true; + SpellCheckAutoChangeNamesUseSuggestions = true; + OcrFixUseHardcodedRules = true; + OcrBinaryImageCompareRgbThreshold = 200; + OcrTesseract4RgbThreshold = 200; + OcrAddLetterRow1 = "♪;á;é;í;ó;ö;ő;ú;ü;ű;ç;ñ;å;¿"; + OcrAddLetterRow2 = "♫;Á;É;Í;Ó;Ö;Ő;Ú;Ü;Ű;Ç;Ñ;Å;¡"; + OcrTrainFonts = "Arial;Calibri;Corbel;Futura Std Book;Futura Bis;Helvetica Neue;Lucida Console;Tahoma;Trebuchet MS;Verdana"; + OcrTrainMergedLetters = "ff ft fi fj fy fl rf rt rv rw ry rt rz ryt tt TV tw yt yw wy wf ryt xy"; + Interjections = "Ah;Ahem;Ahh;Ahhh;Ahhhh;Eh;Ehh;Ehhh;Hm;Hmm;Hmmm;Huh;Mm;Mmm;Mmmm;Phew;Gah;Oh;Ohh;Ohhh;Ow;Oww;Owww;Ugh;Ughh;Uh;Uhh;Uhhh;Whew"; + MicrosoftTranslatorTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; + GoogleApiV2KeyInfoShow = true; + GoogleTranslateNoKeyWarningShow = true; + GoogleApiV1ChunkSize = 1500; + GoogleTranslateLastTargetLanguage = "en"; + TranslateAllowSplit = true; + CheckOneLetterWords = true; + SpellCheckEnglishAllowInQuoteAsIng = false; + SpellCheckShowCompletedMessage = true; + ListViewSyntaxColorDurationSmall = true; + ListViewSyntaxColorDurationBig = true; + ListViewSyntaxColorOverlap = true; + ListViewSyntaxColorLongLines = true; + ListViewSyntaxColorWideLines = false; + ListViewSyntaxMoreThanXLines = true; + ListViewSyntaxColorGap = true; + ListViewSyntaxErrorColor = Color.FromArgb(255, 180, 150); + ListViewUnfocusedSelectedColor = Color.LightBlue; + ListViewShowColumnEndTime = true; + ListViewShowColumnDuration = true; + SplitAdvanced = false; + SplitNumberOfParts = 3; + SplitVia = "Lines"; + JoinCorrectTimeCodes = true; + NewEmptyTranslationText = string.Empty; + BatchConvertLanguage = string.Empty; + BatchConvertTsOverrideBottomMargin = 5; // pct + BatchConvertTsScreenWidth = 1920; + BatchConvertTsScreenHeight = 1080; + BatchConvertTsOverrideHAlign = "center"; // left center right + BatchConvertTsOverrideHMargin = 5; // pct + BatchConvertTsFileNameAppend = ".{two-letter-country-code}"; + ModifySelectionRule = "Contains"; + ModifySelectionText = string.Empty; + GenerateTimeCodePatterns = "HH:mm:ss;yyyy-MM-dd;dddd dd MMMM yyyy
HH:mm:ss;dddd dd MMMM yyyy
hh:mm:ss tt;s"; + MusicSymbolStyle = "Double"; // 'Double' or 'Single' + ExportFontColor = Color.White; + ExportBorderColor = Color.FromArgb(255, 0, 0, 0); + ExportShadowColor = Color.FromArgb(255, 0, 0, 0); + ExportBoxBorderSize = 8; + ExportBottomMarginUnit = "%"; + ExportBottomMarginPercent = 5; + ExportBottomMarginPixels = 15; + ExportLeftRightMarginUnit = "%"; + ExportLeftRightMarginPercent = 5; + ExportLeftRightMarginPixels = 15; + ExportHorizontalAlignment = 1; // 1=center (0=left, 2=right) + ExportVobSubSimpleRendering = false; + ExportVobAntiAliasingWithTransparency = true; + ExportBluRayBottomMarginPercent = 5; + ExportBluRayBottomMarginPixels = 20; + ExportBluRayShadow = 1; + Export3DType = 0; + Export3DDepth = 0; + ExportCdgMarginLeft = 160; + ExportCdgMarginBottom = 67; + ExportLastShadowTransparency = 200; + ExportLastFrameRate = 24.0d; + ExportFullFrame = false; + ExportPenLineJoin = "Round"; + ExportFcpImageType = "Bmp"; + ExportFcpPalNtsc = "PAL"; + ExportLastBorderWidth = 4; + BridgeGapMilliseconds = 100; + ExportCustomTemplates = "SubRipÆÆ{number}\r\n{start} --> {end}\r\n{text}\r\n\r\nÆhh:mm:ss,zzzÆ[Do not modify]ÆæMicroDVDÆÆ{{start}}{{end}}{text}\r\nÆffÆ||Æ"; + UseNoLineBreakAfter = false; + NoLineBreakAfterEnglish = " Mrs.; Ms.; Mr.; Dr.; a; an; the; my; my own; your; his; our; their; it's; is; are;'s; 're; would;'ll;'ve;'d; will; that; which; who; whom; whose; whichever; whoever; wherever; each; either; every; all; both; few; many; sevaral; all; any; most; been; been doing; none; some; my own; your own; his own; her own; our own; their own; I; she; he; as per; as regards; into; onto; than; where as; abaft; aboard; about; above; across; afore; after; against; along; alongside; amid; amidst; among; amongst; anenst; apropos; apud; around; as; aside; astride; at; athwart; atop; barring; before; behind; below; beneath; beside; besides; between; betwixt; beyond; but; by; circa; ca; concerning; despite; down; during; except; excluding; following; for; forenenst; from; given; in; including; inside; into; lest; like; minus; modulo; near; next; of; off; on; onto; opposite; out; outside; over; pace; past; per; plus; pro; qua; regarding; round; sans; save; since; than; through; thru; throughout; thruout; till; to; toward; towards; under; underneath; unlike; until; unto; up; upon; versus; vs; via; vice; with; within; without; considering; respecting; one; two; another; three; our; five; six; seven; eight; nine; ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen; twenty; thirty; forty; fifty; sixty; seventy; eighty; ninety; hundred; thousand; million; billion; trillion; while; however; what; zero; little; enough; after; although; and; as; if; though; although; because; before; both; but; even; how; than; nor; or; only; unless; until; yet; was; were"; + FindHistory = new List(); + ExportTextFormatText = "None"; + ExportTextRemoveStyling = true; + ExportTextShowLineNumbersNewLine = true; + ExportTextShowTimeCodesNewLine = true; + ExportTextNewLineAfterText = true; + ExportTextNewLineBetweenSubtitles = true; + ImportTextLineBreak = "|"; + ImportTextAutoSplitNumberOfLines = 2; + ImportTextAutoSplitAtBlank = true; + ImportTextAutoBreakAtEndMarkerText = ".!?"; + ImportTextAutoBreakAtEnd = true; + MoveStartEndMs = 100; + AdjustDurationSeconds = 0.1m; + AdjustDurationPercent = 120; + AdjustDurationExtendOnly = true; + AutoBreakCommaBreakEarly = false; + AutoBreakDashEarly = true; + AutoBreakLineEndingEarly = false; + AutoBreakUsePixelWidth = true; + AutoBreakPreferBottomHeavy = true; + AutoBreakPreferBottomPercent = 5; + ApplyMinimumDurationLimit = true; + ApplyMaximumDurationLimit = true; + MergeShortLinesMaxGap = 250; + MergeShortLinesMaxChars = 50; + MergeShortLinesOnlyContinuous = true; + ColumnPasteColumn = "all"; + ColumnPasteOverwriteMode = "overwrite"; + } + } + + public class FcpExportSettings + { + public string FontName { get; set; } + public int FontSize { get; set; } + public string Alignment { get; set; } + public int Baseline { get; set; } + public Color Color { get; set; } + + public FcpExportSettings() + { + FontName = "Lucida Sans"; + FontSize = 36; + Alignment = "center"; + Baseline = 29; + Color = Color.WhiteSmoke; + } + } + + + public class WordListSettings + { + public string LastLanguage { get; set; } + public string NamesUrl { get; set; } + public bool UseOnlineNames { get; set; } + + public WordListSettings() + { + LastLanguage = "en-US"; + NamesUrl = "https://raw.githubusercontent.com/SubtitleEdit/subtitleedit/master/Dictionaries/names.xml"; + } + } + + public class SubtitleSettings + { + public string SsaFontName { get; set; } + public double SsaFontSize { get; set; } + public int SsaFontColorArgb { get; set; } + public bool SsaFontBold { get; set; } + public decimal SsaOutline { get; set; } + public decimal SsaShadow { get; set; } + public bool SsaOpaqueBox { get; set; } + public int SsaMarginLeft { get; set; } + public int SsaMarginRight { get; set; } + public int SsaMarginTopBottom { get; set; } + + public string DCinemaFontFile { get; set; } + public string DCinemaLoadFontResource { get; set; } + public int DCinemaFontSize { get; set; } + public int DCinemaBottomMargin { get; set; } + public double DCinemaZPosition { get; set; } + public int DCinemaFadeUpTime { get; set; } + public int DCinemaFadeDownTime { get; set; } + + public string CurrentDCinemaSubtitleId { get; set; } + public string CurrentDCinemaMovieTitle { get; set; } + public string CurrentDCinemaReelNumber { get; set; } + public string CurrentDCinemaIssueDate { get; set; } + public string CurrentDCinemaLanguage { get; set; } + public string CurrentDCinemaEditRate { get; set; } + public string CurrentDCinemaTimeCodeRate { get; set; } + public string CurrentDCinemaStartTime { get; set; } + public string CurrentDCinemaFontId { get; set; } + public string CurrentDCinemaFontUri { get; set; } + public Color CurrentDCinemaFontColor { get; set; } + public string CurrentDCinemaFontEffect { get; set; } + public Color CurrentDCinemaFontEffectColor { get; set; } + public int CurrentDCinemaFontSize { get; set; } + + public int CurrentCavena890LanguageIdLine1 { get; set; } + public int CurrentCavena890LanguageIdLine2 { get; set; } + public string CurrentCavena89Title { get; set; } + public string CurrentCavena890riginalTitle { get; set; } + public string CurrentCavena890Translator { get; set; } + public string CurrentCavena89Comment { get; set; } + public int CurrentCavena89LanguageId { get; set; } + public string Cavena890StartOfMessage { get; set; } + + public bool EbuStlTeletextUseBox { get; set; } + public bool EbuStlTeletextUseDoubleHeight { get; set; } + public int EbuStlMarginTop { get; set; } + public int EbuStlMarginBottom { get; set; } + public int EbuStlNewLineRows { get; set; } + public int PacVerticalTop { get; set; } + public int PacVerticalCenter { get; set; } + public int PacVerticalBottom { get; set; } + + public string DvdStudioProHeader { get; set; } + + public string TmpegEncXmlFontName { get; set; } + public string TmpegEncXmlFontHeight { get; set; } + public string TmpegEncXmlPosition { get; set; } + + public bool CheetahCaptionAlwayWriteEndTime { get; set; } + + public bool SamiDisplayTwoClassesAsTwoSubtitles { get; set; } + public int SamiHtmlEncodeMode { get; set; } + + public string TimedText10TimeCodeFormat { get; set; } + public string TimedText10TimeCodeFormatSource { get; set; } + public bool TimedText10ShowStyleAndLanguage { get; set; } + public string TimedText10FileExtension { get; set; } + + public int FcpFontSize { get; set; } + public string FcpFontName { get; set; } + + public string NuendoCharacterListFile { get; set; } + + public bool WebVttUseXTimestampMap { get; set; } + public long WebVttTimescale { get; set; } + + public bool TeletextItalicFix { get; set; } + + public SubtitleSettings() + { + SsaFontName = "Arial"; + if (Configuration.IsRunningOnLinux) + { + SsaFontName = Configuration.DefaultLinuxFontName; + } + SsaFontSize = 20; + SsaFontColorArgb = Color.FromArgb(255, 255, 255).ToArgb(); + SsaOutline = 2; + SsaShadow = 1; + SsaOpaqueBox = false; + SsaMarginLeft = 10; + SsaMarginRight = 10; + SsaMarginTopBottom = 10; + + DCinemaFontFile = "Arial.ttf"; + DCinemaLoadFontResource = "urn:uuid:3dec6dc0-39d0-498d-97d0-928d2eb78391"; + DCinemaFontSize = 42; + DCinemaBottomMargin = 8; + DCinemaZPosition = 0; + DCinemaFadeUpTime = 0; + DCinemaFadeDownTime = 0; + + EbuStlTeletextUseBox = true; + EbuStlTeletextUseDoubleHeight = true; + EbuStlMarginTop = 0; + EbuStlMarginBottom = 2; + EbuStlNewLineRows = 2; + + PacVerticalTop = 1; + PacVerticalCenter = 5; + PacVerticalBottom = 11; + + DvdStudioProHeader = @"$VertAlign = Bottom +$Bold = FALSE +$Underlined = FALSE +$Italic = FALSE +$XOffset = 0 +$YOffset = -5 +$TextContrast = 15 +$Outline1Contrast = 15 +$Outline2Contrast = 13 +$BackgroundContrast = 0 +$ForceDisplay = FALSE +$FadeIn = 0 +$FadeOut = 0 +$HorzAlign = Center +"; + + TmpegEncXmlFontName = "Tahoma"; + TmpegEncXmlFontHeight = "0.069"; + TmpegEncXmlPosition = "23"; + + SamiDisplayTwoClassesAsTwoSubtitles = true; + SamiHtmlEncodeMode = 0; + + TimedText10TimeCodeFormat = "Source"; + TimedText10ShowStyleAndLanguage = true; + TimedText10FileExtension = ".xml"; + + FcpFontSize = 18; + FcpFontName = "Lucida Grande"; + + Cavena890StartOfMessage = "10:00:00:00"; + + WebVttTimescale = 90000; + WebVttUseXTimestampMap = true; + + TeletextItalicFix = true; + } + + public void InitializeDCinameSettings(bool smpte) + { + if (smpte) + { + CurrentDCinemaSubtitleId = "urn:uuid:" + Guid.NewGuid(); + CurrentDCinemaLanguage = "en"; + CurrentDCinemaFontUri = DCinemaLoadFontResource; + CurrentDCinemaFontId = "theFontId"; + } + else + { + string hex = Guid.NewGuid().ToString().RemoveChar('-').ToLowerInvariant(); + hex = hex.Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-"); + CurrentDCinemaSubtitleId = hex; + CurrentDCinemaLanguage = "English"; + CurrentDCinemaFontUri = DCinemaFontFile; + CurrentDCinemaFontId = "Arial"; + } + CurrentDCinemaIssueDate = DateTime.Now.ToString("s") + ".000-00:00"; + CurrentDCinemaMovieTitle = "title"; + CurrentDCinemaReelNumber = "1"; + CurrentDCinemaFontColor = Color.White; + CurrentDCinemaFontEffect = "border"; + CurrentDCinemaFontEffectColor = Color.Black; + CurrentDCinemaFontSize = DCinemaFontSize; + CurrentCavena890LanguageIdLine1 = -1; + CurrentCavena890LanguageIdLine2 = -1; + } + } + + public class ProxySettings + { + public string ProxyAddress { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + public string Domain { get; set; } + + public string DecodePassword() + { + return Encoding.UTF8.GetString(Convert.FromBase64String(Password)); + } + public void EncodePassword(string unencryptedPassword) + { + Password = Convert.ToBase64String(Encoding.UTF8.GetBytes(unencryptedPassword)); + } + } + + public class FixCommonErrorsSettings + { + public string StartPosition { get; set; } + public string StartSize { get; set; } + public bool EmptyLinesTicked { get; set; } + public bool OverlappingDisplayTimeTicked { get; set; } + public bool TooShortDisplayTimeTicked { get; set; } + public bool TooLongDisplayTimeTicked { get; set; } + public bool TooShortGapTicked { get; set; } + public bool InvalidItalicTagsTicked { get; set; } + public bool BreakLongLinesTicked { get; set; } + public bool MergeShortLinesTicked { get; set; } + public bool MergeShortLinesAllTicked { get; set; } + public bool UnneededSpacesTicked { get; set; } + public bool UnneededPeriodsTicked { get; set; } + public bool FixCommasTicked { get; set; } + public bool MissingSpacesTicked { get; set; } + public bool AddMissingQuotesTicked { get; set; } + public bool Fix3PlusLinesTicked { get; set; } + public bool FixHyphensTicked { get; set; } + public bool FixHyphensRemoveSingleLineTicked { get; set; } + public bool UppercaseIInsideLowercaseWordTicked { get; set; } + public bool DoubleApostropheToQuoteTicked { get; set; } + public bool AddPeriodAfterParagraphTicked { get; set; } + public bool StartWithUppercaseLetterAfterParagraphTicked { get; set; } + public bool StartWithUppercaseLetterAfterPeriodInsideParagraphTicked { get; set; } + public bool StartWithUppercaseLetterAfterColonTicked { get; set; } + public bool AloneLowercaseIToUppercaseIEnglishTicked { get; set; } + public bool FixOcrErrorsViaReplaceListTicked { get; set; } + public bool RemoveSpaceBetweenNumberTicked { get; set; } + public bool FixDialogsOnOneLineTicked { get; set; } + public bool TurkishAnsiTicked { get; set; } + public bool DanishLetterITicked { get; set; } + public bool SpanishInvertedQuestionAndExclamationMarksTicked { get; set; } + public bool FixDoubleDashTicked { get; set; } + public bool FixDoubleGreaterThanTicked { get; set; } + public bool FixEllipsesStartTicked { get; set; } + public bool FixMissingOpenBracketTicked { get; set; } + public bool FixMusicNotationTicked { get; set; } + public bool FixContinuationStyleTicked { get; set; } + public bool FixUnnecessaryLeadingDotsTicked { get; set; } + public bool NormalizeStringsTicked { get; set; } + public string DefaultFixes { get; set; } + + + public FixCommonErrorsSettings() + { + SetDefaultFixes(); + } + + public void SaveUserDefaultFixes() + { + var sb = new StringBuilder(); + + if (EmptyLinesTicked) + { + sb.Append(nameof(EmptyLinesTicked) + ";"); + } + + if (OverlappingDisplayTimeTicked) + { + sb.Append(nameof(OverlappingDisplayTimeTicked) + ";"); + } + + if (TooShortDisplayTimeTicked) + { + sb.Append(nameof(TooShortDisplayTimeTicked) + ";"); + } + + if (TooLongDisplayTimeTicked) + { + sb.Append(nameof(TooLongDisplayTimeTicked) + ";"); + } + + if (TooShortGapTicked) + { + sb.Append(nameof(TooShortGapTicked) + ";"); + } + + if (InvalidItalicTagsTicked) + { + sb.Append(nameof(InvalidItalicTagsTicked) + ";"); + } + + if (BreakLongLinesTicked) + { + sb.Append(nameof(BreakLongLinesTicked) + ";"); + } + + if (MergeShortLinesTicked) + { + sb.Append(nameof(MergeShortLinesTicked) + ";"); + } + + if (MergeShortLinesAllTicked) + { + sb.Append(nameof(MergeShortLinesAllTicked) + ";"); + } + + if (UnneededSpacesTicked) + { + sb.Append(nameof(UnneededSpacesTicked) + ";"); + } + + if (UnneededPeriodsTicked) + { + sb.Append(nameof(UnneededPeriodsTicked) + ";"); + } + + if (FixCommasTicked) + { + sb.Append(nameof(FixCommasTicked) + ";"); + } + + if (MissingSpacesTicked) + { + sb.Append(nameof(MissingSpacesTicked) + ";"); + } + + if (AddMissingQuotesTicked) + { + sb.Append(nameof(AddMissingQuotesTicked) + ";"); + } + + if (Fix3PlusLinesTicked) + { + sb.Append(nameof(Fix3PlusLinesTicked) + ";"); + } + + if (FixHyphensTicked) + { + sb.Append(nameof(FixHyphensTicked) + ";"); + } + + if (FixHyphensRemoveSingleLineTicked) + { + sb.Append(nameof(FixHyphensRemoveSingleLineTicked) + ";"); + } + + if (UppercaseIInsideLowercaseWordTicked) + { + sb.Append(nameof(UppercaseIInsideLowercaseWordTicked) + ";"); + } + + if (DoubleApostropheToQuoteTicked) + { + sb.Append(nameof(DoubleApostropheToQuoteTicked) + ";"); + } + + if (AddPeriodAfterParagraphTicked) + { + sb.Append(nameof(AddPeriodAfterParagraphTicked) + ";"); + } + + if (StartWithUppercaseLetterAfterParagraphTicked) + { + sb.Append(nameof(StartWithUppercaseLetterAfterParagraphTicked) + ";"); + } + + if (StartWithUppercaseLetterAfterPeriodInsideParagraphTicked) + { + sb.Append(nameof(StartWithUppercaseLetterAfterPeriodInsideParagraphTicked) + ";"); + } + + if (StartWithUppercaseLetterAfterColonTicked) + { + sb.Append(nameof(StartWithUppercaseLetterAfterColonTicked) + ";"); + } + + if (AloneLowercaseIToUppercaseIEnglishTicked) + { + sb.Append(nameof(AloneLowercaseIToUppercaseIEnglishTicked) + ";"); + } + + if (FixOcrErrorsViaReplaceListTicked) + { + sb.Append(nameof(FixOcrErrorsViaReplaceListTicked) + ";"); + } + + if (RemoveSpaceBetweenNumberTicked) + { + sb.Append(nameof(RemoveSpaceBetweenNumberTicked) + ";"); + } + + if (FixDialogsOnOneLineTicked) + { + sb.Append(nameof(FixDialogsOnOneLineTicked) + ";"); + } + + if (TurkishAnsiTicked) + { + sb.Append(nameof(TurkishAnsiTicked) + ";"); + } + + if (DanishLetterITicked) + { + sb.Append(nameof(DanishLetterITicked) + ";"); + } + + if (SpanishInvertedQuestionAndExclamationMarksTicked) + { + sb.Append(nameof(SpanishInvertedQuestionAndExclamationMarksTicked) + ";"); + } + + if (FixDoubleDashTicked) + { + sb.Append(nameof(FixDoubleDashTicked) + ";"); + } + + if (FixEllipsesStartTicked) + { + sb.Append(nameof(FixEllipsesStartTicked) + ";"); + } + + if (FixMissingOpenBracketTicked) + { + sb.Append(nameof(FixMissingOpenBracketTicked) + ";"); + } + + if (FixMusicNotationTicked) + { + sb.Append(nameof(FixMusicNotationTicked) + ";"); + } + + if (FixContinuationStyleTicked) + { + sb.Append(nameof(FixContinuationStyleTicked) + ";"); + } + + if (FixUnnecessaryLeadingDotsTicked) + { + sb.Append(nameof(FixUnnecessaryLeadingDotsTicked) + ";"); + } + + if (NormalizeStringsTicked) + { + sb.Append(nameof(NormalizeStringsTicked) + ";"); + } + + DefaultFixes = sb.ToString().TrimEnd(';'); + } + + public void LoadUserDefaultFixes(string fixes) + { + var list = fixes.Split(';'); + EmptyLinesTicked = list.Contains(nameof(EmptyLinesTicked)); + OverlappingDisplayTimeTicked = list.Contains(nameof(OverlappingDisplayTimeTicked)); + TooShortDisplayTimeTicked = list.Contains(nameof(TooShortDisplayTimeTicked)); + TooLongDisplayTimeTicked = list.Contains(nameof(TooLongDisplayTimeTicked)); + TooShortGapTicked = list.Contains(nameof(TooShortGapTicked)); + InvalidItalicTagsTicked = list.Contains(nameof(InvalidItalicTagsTicked)); + BreakLongLinesTicked = list.Contains(nameof(BreakLongLinesTicked)); + MergeShortLinesTicked = list.Contains(nameof(MergeShortLinesTicked)); + MergeShortLinesAllTicked = list.Contains(nameof(MergeShortLinesAllTicked)); + UnneededSpacesTicked = list.Contains(nameof(UnneededSpacesTicked)); + UnneededPeriodsTicked = list.Contains(nameof(UnneededPeriodsTicked)); + FixCommasTicked = list.Contains(nameof(FixCommasTicked)); + MissingSpacesTicked = list.Contains(nameof(MissingSpacesTicked)); + AddMissingQuotesTicked = list.Contains(nameof(AddMissingQuotesTicked)); + Fix3PlusLinesTicked = list.Contains(nameof(Fix3PlusLinesTicked)); + FixHyphensTicked = list.Contains(nameof(FixHyphensTicked)); + FixHyphensRemoveSingleLineTicked = list.Contains(nameof(FixHyphensRemoveSingleLineTicked)); + UppercaseIInsideLowercaseWordTicked = list.Contains(nameof(UppercaseIInsideLowercaseWordTicked)); + DoubleApostropheToQuoteTicked = list.Contains(nameof(DoubleApostropheToQuoteTicked)); + AddPeriodAfterParagraphTicked = list.Contains(nameof(AddPeriodAfterParagraphTicked)); + StartWithUppercaseLetterAfterParagraphTicked = list.Contains(nameof(StartWithUppercaseLetterAfterParagraphTicked)); + StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = list.Contains(nameof(StartWithUppercaseLetterAfterPeriodInsideParagraphTicked)); + StartWithUppercaseLetterAfterColonTicked = list.Contains(nameof(StartWithUppercaseLetterAfterColonTicked)); + AloneLowercaseIToUppercaseIEnglishTicked = list.Contains(nameof(AloneLowercaseIToUppercaseIEnglishTicked)); + FixOcrErrorsViaReplaceListTicked = list.Contains(nameof(FixOcrErrorsViaReplaceListTicked)); + RemoveSpaceBetweenNumberTicked = list.Contains(nameof(RemoveSpaceBetweenNumberTicked)); + FixDialogsOnOneLineTicked = list.Contains(nameof(FixDialogsOnOneLineTicked)); + TurkishAnsiTicked = list.Contains(nameof(TurkishAnsiTicked)); + DanishLetterITicked = list.Contains(nameof(DanishLetterITicked)); + SpanishInvertedQuestionAndExclamationMarksTicked = list.Contains(nameof(SpanishInvertedQuestionAndExclamationMarksTicked)); + FixDoubleDashTicked = list.Contains(nameof(FixDoubleDashTicked)); + FixEllipsesStartTicked = list.Contains(nameof(FixEllipsesStartTicked)); + FixMissingOpenBracketTicked = list.Contains(nameof(FixMissingOpenBracketTicked)); + FixMusicNotationTicked = list.Contains(nameof(FixMusicNotationTicked)); + FixContinuationStyleTicked = list.Contains(nameof(FixContinuationStyleTicked)); + FixUnnecessaryLeadingDotsTicked = list.Contains(nameof(FixUnnecessaryLeadingDotsTicked)); + NormalizeStringsTicked = list.Contains(nameof(NormalizeStringsTicked)); + } + + public void SetDefaultFixes() + { + LoadUserDefaultFixes(string.Empty); + EmptyLinesTicked = true; + OverlappingDisplayTimeTicked = true; + TooShortDisplayTimeTicked = true; + TooLongDisplayTimeTicked = true; + TooShortGapTicked = false; + InvalidItalicTagsTicked = true; + BreakLongLinesTicked = true; + MergeShortLinesTicked = true; + UnneededPeriodsTicked = true; + FixCommasTicked = true; + UnneededSpacesTicked = true; + MissingSpacesTicked = true; + UppercaseIInsideLowercaseWordTicked = true; + DoubleApostropheToQuoteTicked = true; + AddPeriodAfterParagraphTicked = false; + StartWithUppercaseLetterAfterParagraphTicked = true; + StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = false; + StartWithUppercaseLetterAfterColonTicked = false; + AloneLowercaseIToUppercaseIEnglishTicked = false; + TurkishAnsiTicked = false; + DanishLetterITicked = false; + FixDoubleDashTicked = true; + FixDoubleGreaterThanTicked = true; + FixEllipsesStartTicked = true; + FixMissingOpenBracketTicked = true; + FixMusicNotationTicked = true; + FixContinuationStyleTicked = false; + FixUnnecessaryLeadingDotsTicked = true; + NormalizeStringsTicked = false; + SaveUserDefaultFixes(); + } + } + + public class GeneralSettings + { + public List Profiles { get; set; } + public string CurrentProfile { get; set; } + public bool ShowToolbarNew { get; set; } + public bool ShowToolbarOpen { get; set; } + public bool ShowToolbarSave { get; set; } + public bool ShowToolbarSaveAs { get; set; } + public bool ShowToolbarFind { get; set; } + public bool ShowToolbarReplace { get; set; } + public bool ShowToolbarFixCommonErrors { get; set; } + public bool ShowToolbarRemoveTextForHi { get; set; } + public bool ShowToolbarVisualSync { get; set; } + public bool ShowToolbarSpellCheck { get; set; } + public bool ShowToolbarNetflixGlyphCheck { get; set; } + public bool ShowToolbarSettings { get; set; } + public bool ShowToolbarHelp { get; set; } + + public bool ShowVideoPlayer { get; set; } + public bool ShowAudioVisualizer { get; set; } + public bool ShowWaveform { get; set; } + public bool ShowSpectrogram { get; set; } + public bool ShowFrameRate { get; set; } + public double DefaultFrameRate { get; set; } + public double CurrentFrameRate { get; set; } + public string DefaultSubtitleFormat { get; set; } + public string DefaultEncoding { get; set; } + public bool AutoConvertToUtf8 { get; set; } + public bool AutoGuessAnsiEncoding { get; set; } + public string SystemSubtitleFontNameOverride { get; set; } + public int SystemSubtitleFontSizeOverride { get; set; } + + public string SubtitleFontName { get; set; } + public int SubtitleTextBoxFontSize { get; set; } + public bool SubtitleTextBoxSyntaxColor { get; set; } + public Color SubtitleTextBoxHtmlColor { get; set; } + public Color SubtitleTextBoxAssColor { get; set; } + public int SubtitleListViewFontSize { get; set; } + public bool SubtitleTextBoxFontBold { get; set; } + public bool SubtitleListViewFontBold { get; set; } + public Color SubtitleFontColor { get; set; } + public Color SubtitleBackgroundColor { get; set; } + public string MeasureFontName { get; set; } + public int MeasureFontSize { get; set; } + public bool MeasureFontBold { get; set; } + public int SubtitleLineMaximumPixelWidth { get; set; } + public bool CenterSubtitleInTextBox { get; set; } + public bool ShowRecentFiles { get; set; } + public bool RememberSelectedLine { get; set; } + public bool StartLoadLastFile { get; set; } + public bool StartRememberPositionAndSize { get; set; } + public string StartPosition { get; set; } + public string StartSize { get; set; } + public int SplitContainerMainSplitterDistance { get; set; } + public int SplitContainer1SplitterDistance { get; set; } + public int SplitContainerListViewAndTextSplitterDistance { get; set; } + public bool StartInSourceView { get; set; } + public bool RemoveBlankLinesWhenOpening { get; set; } + public bool RemoveBadCharsWhenOpening { get; set; } + public int SubtitleLineMaximumLength { get; set; } + public int MaxNumberOfLines { get; set; } + public int MergeLinesShorterThan { get; set; } + public int SubtitleMinimumDisplayMilliseconds { get; set; } + public int SubtitleMaximumDisplayMilliseconds { get; set; } + public int MinimumMillisecondsBetweenLines { get; set; } + public int SetStartEndHumanDelay { get; set; } + public bool AutoWrapLineWhileTyping { get; set; } + public double SubtitleMaximumCharactersPerSeconds { get; set; } + public double SubtitleOptimalCharactersPerSeconds { get; set; } + public bool CharactersPerSecondsIgnoreWhiteSpace { get; set; } + public bool IgnoreArabicDiacritics { get; set; } + public double SubtitleMaximumWordsPerMinute { get; set; } + public DialogType DialogStyle { get; set; } + public ContinuationStyle ContinuationStyle { get; set; } + public int ContinuationPause { get; set; } + public bool FixContinuationStyleUncheckInsertsAllCaps { get; set; } + public bool FixContinuationStyleUncheckInsertsItalic { get; set; } + public bool FixContinuationStyleUncheckInsertsLowercase { get; set; } + public bool FixContinuationStyleHideContinuationCandidatesWithoutName { get; set; } + public bool FixContinuationStyleIgnoreLyrics { get; set; } + public string SpellCheckLanguage { get; set; } + public string VideoPlayer { get; set; } + public int VideoPlayerDefaultVolume { get; set; } + public int VideoPlayerPreviewFontSize { get; set; } + public bool VideoPlayerPreviewFontBold { get; set; } + public bool VideoPlayerShowStopButton { get; set; } + public bool VideoPlayerShowFullscreenButton { get; set; } + public bool VideoPlayerShowMuteButton { get; set; } + public string Language { get; set; } + public string ListViewLineSeparatorString { get; set; } + public int ListViewDoubleClickAction { get; set; } + public string SaveAsUseFileNameFrom { get; set; } + public string UppercaseLetters { get; set; } + public int DefaultAdjustMilliseconds { get; set; } + public bool AutoRepeatOn { get; set; } + public int AutoRepeatCount { get; set; } + public bool AutoContinueOn { get; set; } + public int AutoContinueDelay { get; set; } + public bool SyncListViewWithVideoWhilePlaying { get; set; } + public int AutoBackupSeconds { get; set; } + public int AutoBackupDeleteAfterMonths { get; set; } + public string SpellChecker { get; set; } + public bool AllowEditOfOriginalSubtitle { get; set; } + public bool PromptDeleteLines { get; set; } + public bool Undocked { get; set; } + public string UndockedVideoPosition { get; set; } + public bool UndockedVideoFullscreen { get; set; } + public string UndockedWaveformPosition { get; set; } + public string UndockedVideoControlsPosition { get; set; } + public bool WaveformCenter { get; set; } + public int WaveformUpdateIntervalMs { get; set; } + public int SmallDelayMilliseconds { get; set; } + public int LargeDelayMilliseconds { get; set; } + public bool ShowOriginalAsPreviewIfAvailable { get; set; } + public int LastPacCodePage { get; set; } + public string OpenSubtitleExtraExtensions { get; set; } + public bool ListViewColumnsRememberSize { get; set; } + public int ListViewNumberWidth { get; set; } + public int ListViewStartWidth { get; set; } + public int ListViewEndWidth { get; set; } + public int ListViewDurationWidth { get; set; } + public int ListViewCpsWidth { get; set; } + public int ListViewWpmWidth { get; set; } + public int ListViewGapWidth { get; set; } + public int ListViewActorWidth { get; set; } + public int ListViewRegionWidth { get; set; } + public int ListViewTextWidth { get; set; } + public bool DirectShowDoubleLoad { get; set; } + public string VlcWaveTranscodeSettings { get; set; } + public string VlcLocation { get; set; } + public string VlcLocationRelative { get; set; } + public string MpvVideoOutputWindows { get; set; } + public string MpvVideoOutputLinux { get; set; } + public string MpvExtraOption { get; set; } + public bool MpvLogging { get; set; } + public bool MpvHandlesPreviewText { get; set; } + public string MpcHcLocation { get; set; } + public string MkvMergeLocation { get; set; } + public bool UseFFmpegForWaveExtraction { get; set; } + public string FFmpegLocation { get; set; } + public string FFmpegSceneThreshold { get; set; } + public bool UseTimeFormatHHMMSSFF { get; set; } + public int SplitBehavior { get; set; } + public bool SplitRemovesDashes { get; set; } + public int ClearStatusBarAfterSeconds { get; set; } + public string Company { get; set; } + public bool MoveVideo100Or500MsPlaySmallSample { get; set; } + public bool DisableVideoAutoLoading { get; set; } + public bool AllowVolumeBoost { get; set; } + public int NewEmptyDefaultMs { get; set; } + public bool RightToLeftMode { get; set; } + public string LastSaveAsFormat { get; set; } + public bool CheckForUpdates { get; set; } + public DateTime LastCheckForUpdates { get; set; } + public bool AutoSave { get; set; } + public string PreviewAssaText { get; set; } + public bool ShowProgress { get; set; } + public bool ShowNegativeDurationInfoOnSave { get; set; } + public bool ShowFormatRequiresUtf8Warning { get; set; } + public long CurrentVideoOffsetInMs { get; set; } + public string TitleBarAsterisk { get; set; } // Show asteriks "before" or "after" file name (any other value will hide asteriks) + public bool MeasurementConverterCloseOnInsert { get; set; } + public string MeasurementConverterCategories { get; set; } + public int SubtitleTextBoxMaxHeight { get; set; } + public bool UseDarkTheme { get; set; } + public bool ShowBetaStuff { get; set; } + + public GeneralSettings() + { + ShowToolbarNew = true; + ShowToolbarOpen = true; + ShowToolbarSave = true; + ShowToolbarSaveAs = false; + ShowToolbarFind = true; + ShowToolbarReplace = true; + ShowToolbarFixCommonErrors = false; + ShowToolbarVisualSync = true; + ShowToolbarSpellCheck = true; + ShowToolbarNetflixGlyphCheck = true; + ShowToolbarSettings = false; + ShowToolbarHelp = true; + + ShowVideoPlayer = true; + ShowAudioVisualizer = true; + ShowWaveform = true; + ShowSpectrogram = true; + ShowFrameRate = false; + DefaultFrameRate = 23.976; + CurrentFrameRate = DefaultFrameRate; + SubtitleFontName = "Tahoma"; + if (Configuration.IsRunningOnLinux) + { + SubtitleFontName = Configuration.DefaultLinuxFontName; + } + else if (Environment.OSVersion.Version.Major < 6) // 6 == Vista/Win2008Server/Win7 + { + SubtitleFontName = "Times New Roman"; + } + + SubtitleTextBoxFontSize = 12; + SubtitleListViewFontSize = 10; + SubtitleTextBoxSyntaxColor = true; + SubtitleTextBoxHtmlColor = Color.CornflowerBlue; + SubtitleTextBoxAssColor = Color.BlueViolet; + SubtitleTextBoxFontBold = true; + SubtitleFontColor = Color.Black; + MeasureFontName = "Arial"; + MeasureFontSize = 24; + MeasureFontBold = false; + SubtitleLineMaximumPixelWidth = 576; + SubtitleBackgroundColor = Color.White; + CenterSubtitleInTextBox = false; + DefaultSubtitleFormat = "SubRip"; + DefaultEncoding = TextEncoding.Utf8WithBom; + AutoConvertToUtf8 = false; + IgnoreArabicDiacritics = false; + AutoGuessAnsiEncoding = true; + ShowRecentFiles = true; + RememberSelectedLine = true; + StartLoadLastFile = true; + StartRememberPositionAndSize = true; + SubtitleLineMaximumLength = 43; + MaxNumberOfLines = 2; + MergeLinesShorterThan = 33; + SubtitleMinimumDisplayMilliseconds = 1000; + SubtitleMaximumDisplayMilliseconds = 8 * 1000; + RemoveBadCharsWhenOpening = true; + MinimumMillisecondsBetweenLines = 24; + SetStartEndHumanDelay = 100; + AutoWrapLineWhileTyping = false; + SubtitleMaximumCharactersPerSeconds = 25.0; + SubtitleOptimalCharactersPerSeconds = 15.0; + SubtitleMaximumWordsPerMinute = 300; + DialogStyle = DialogType.DashBothLinesWithSpace; + ContinuationStyle = ContinuationStyle.None; + ContinuationPause = 2000; + FixContinuationStyleUncheckInsertsAllCaps = true; + FixContinuationStyleUncheckInsertsItalic = true; + FixContinuationStyleUncheckInsertsLowercase = true; + FixContinuationStyleHideContinuationCandidatesWithoutName = true; + FixContinuationStyleIgnoreLyrics = true; + SpellCheckLanguage = null; + VideoPlayer = string.Empty; + VideoPlayerDefaultVolume = 75; + VideoPlayerPreviewFontSize = 12; + VideoPlayerPreviewFontBold = true; + VideoPlayerShowStopButton = true; + VideoPlayerShowMuteButton = true; + VideoPlayerShowFullscreenButton = true; + ListViewLineSeparatorString = "
"; + ListViewDoubleClickAction = 1; + SaveAsUseFileNameFrom = "video"; + UppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWZYXÆØÃÅÄÖÉÈÁÂÀÇÊÍÓÔÕÚŁАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯĞİŞÜÙÁÌÑÎ"; + DefaultAdjustMilliseconds = 1000; + AutoRepeatOn = true; + AutoRepeatCount = 2; + AutoContinueOn = false; + AutoContinueDelay = 2; + SyncListViewWithVideoWhilePlaying = false; + AutoBackupSeconds = 60 * 5; + AutoBackupDeleteAfterMonths = 3; + SpellChecker = "hunspell"; + AllowEditOfOriginalSubtitle = true; + PromptDeleteLines = true; + Undocked = false; + UndockedVideoPosition = "-32000;-32000"; + UndockedWaveformPosition = "-32000;-32000"; + UndockedVideoControlsPosition = "-32000;-32000"; + WaveformUpdateIntervalMs = 40; + SmallDelayMilliseconds = 500; + LargeDelayMilliseconds = 5000; + OpenSubtitleExtraExtensions = "*.mp4;*.m4v;*.mkv;*.ts"; // matroska/mp4/m4v files (can contain subtitles) + ListViewColumnsRememberSize = true; + DirectShowDoubleLoad = true; + VlcWaveTranscodeSettings = "acodec=s16l"; // "acodec=s16l,channels=1,ab=64,samplerate=8000"; + MpvVideoOutputWindows = string.Empty; // could also be e.g. "gpu" or "directshow" + MpvVideoOutputLinux = string.Empty; // could also be e.g. "x11"; + MpvHandlesPreviewText = true; + FFmpegSceneThreshold = "0.4"; // threshold for generating scene changes - 0.2 is sensitive (more scene change), 0.6 is less sensitive (fewer scene changes) + UseTimeFormatHHMMSSFF = false; + SplitBehavior = 1; // 0=take gap from left, 1=divide evenly, 2=take gap from right + SplitRemovesDashes = true; + ClearStatusBarAfterSeconds = 10; + MoveVideo100Or500MsPlaySmallSample = false; + DisableVideoAutoLoading = false; + RightToLeftMode = false; + LastSaveAsFormat = string.Empty; + SystemSubtitleFontNameOverride = string.Empty; + CheckForUpdates = true; + LastCheckForUpdates = DateTime.Now; + ShowProgress = false; + ShowNegativeDurationInfoOnSave = true; + ShowFormatRequiresUtf8Warning = true; + UseDarkTheme = false; + TitleBarAsterisk = "before"; + MeasurementConverterCloseOnInsert = true; + MeasurementConverterCategories = "Length;Kilometers;Meters"; + PreviewAssaText = "ABCDEFGHIJKL abcdefghijkl 123"; + SubtitleTextBoxMaxHeight = 200; + ShowBetaStuff = false; + NewEmptyDefaultMs = 2000; + DialogStyle = DialogType.DashBothLinesWithSpace; + ContinuationStyle = ContinuationStyle.None; + + Profiles = new List(); + CurrentProfile = "Default"; + Profiles.Add(new RulesProfile + { + Name = CurrentProfile, + SubtitleLineMaximumLength = SubtitleLineMaximumLength, + MaxNumberOfLines = MaxNumberOfLines, + MergeLinesShorterThan = MergeLinesShorterThan, + SubtitleMaximumCharactersPerSeconds = (decimal)SubtitleMaximumCharactersPerSeconds, + SubtitleOptimalCharactersPerSeconds = (decimal)SubtitleOptimalCharactersPerSeconds, + SubtitleMaximumDisplayMilliseconds = SubtitleMaximumDisplayMilliseconds, + SubtitleMinimumDisplayMilliseconds = SubtitleMinimumDisplayMilliseconds, + SubtitleMaximumWordsPerMinute = (decimal)SubtitleMaximumWordsPerMinute, + CpsIncludesSpace = !CharactersPerSecondsIgnoreWhiteSpace, + MinimumMillisecondsBetweenLines = MinimumMillisecondsBetweenLines, + DialogStyle = DialogStyle, + ContinuationStyle = ContinuationStyle + }); + AddExtraProfiles(Profiles); + } + + internal static void AddExtraProfiles(List profiles) + { + profiles.Add(new RulesProfile + { + Name = "Netflix (English)", + SubtitleLineMaximumLength = 42, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 42, + SubtitleMaximumCharactersPerSeconds = 20, + SubtitleOptimalCharactersPerSeconds = 15, + SubtitleMaximumDisplayMilliseconds = 7000, + SubtitleMinimumDisplayMilliseconds = 833, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos + DialogStyle = DialogType.DashBothLinesWithoutSpace, + ContinuationStyle = ContinuationStyle.NoneTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Netflix (Other languages)", + SubtitleLineMaximumLength = 42, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 42, + SubtitleMaximumCharactersPerSeconds = 17, + SubtitleOptimalCharactersPerSeconds = 12, + SubtitleMaximumDisplayMilliseconds = 7000, + SubtitleMinimumDisplayMilliseconds = 833, + SubtitleMaximumWordsPerMinute = 200, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.NoneTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Netflix (Dutch)", + SubtitleLineMaximumLength = 42, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 42, + SubtitleMaximumCharactersPerSeconds = 17, + SubtitleOptimalCharactersPerSeconds = 12, + SubtitleMaximumDisplayMilliseconds = 7000, + SubtitleMinimumDisplayMilliseconds = 833, + SubtitleMaximumWordsPerMinute = 200, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 84, // 2 frames for 23.976 fps videos + DialogStyle = DialogType.DashSecondLineWithoutSpace, + ContinuationStyle = ContinuationStyle.LeadingTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Arte (German/English)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 40, + SubtitleMaximumCharactersPerSeconds = 20, + SubtitleOptimalCharactersPerSeconds = 12, + SubtitleMaximumDisplayMilliseconds = 10000, + SubtitleMinimumDisplayMilliseconds = 1000, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 200, // 5 frames for 25 fps videos + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "Dutch professional subtitles (23.976/24 fps)", + SubtitleLineMaximumLength = 42, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 15, + SubtitleOptimalCharactersPerSeconds = 11, + SubtitleMaximumDisplayMilliseconds = 7007, + SubtitleMinimumDisplayMilliseconds = 1400, + SubtitleMaximumWordsPerMinute = 180, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 125, + DialogStyle = DialogType.DashSecondLineWithoutSpace, + ContinuationStyle = ContinuationStyle.OnlyTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Dutch professional subtitles (25 fps)", + SubtitleLineMaximumLength = 42, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 15, + SubtitleOptimalCharactersPerSeconds = 11, + SubtitleMaximumDisplayMilliseconds = 7000, + SubtitleMinimumDisplayMilliseconds = 1400, + SubtitleMaximumWordsPerMinute = 180, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 120, + DialogStyle = DialogType.DashSecondLineWithoutSpace, + ContinuationStyle = ContinuationStyle.OnlyTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Dutch fansubs (23.976/24 fps)", + SubtitleLineMaximumLength = 45, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 40, + SubtitleMaximumCharactersPerSeconds = 22.5m, + SubtitleOptimalCharactersPerSeconds = 12, + SubtitleMaximumDisplayMilliseconds = 7007, + SubtitleMinimumDisplayMilliseconds = 1200, + SubtitleMaximumWordsPerMinute = 240, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 125, + DialogStyle = DialogType.DashSecondLineWithSpace, + ContinuationStyle = ContinuationStyle.OnlyTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Dutch fansubs (25 fps)", + SubtitleLineMaximumLength = 45, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 40, + SubtitleMaximumCharactersPerSeconds = 22.5m, + SubtitleOptimalCharactersPerSeconds = 12, + SubtitleMaximumDisplayMilliseconds = 7000, + SubtitleMinimumDisplayMilliseconds = 1200, + SubtitleMaximumWordsPerMinute = 240, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 120, + DialogStyle = DialogType.DashSecondLineWithSpace, + ContinuationStyle = ContinuationStyle.OnlyTrailingDots + }); + profiles.Add(new RulesProfile + { + Name = "Danish professional subtitles (23.976/24 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 40, + SubtitleMaximumCharactersPerSeconds = 15, + SubtitleOptimalCharactersPerSeconds = 10, + SubtitleMaximumDisplayMilliseconds = 8008, + SubtitleMinimumDisplayMilliseconds = 2002, + SubtitleMaximumWordsPerMinute = 180, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 125, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.LeadingTrailingDashDots + }); + profiles.Add(new RulesProfile + { + Name = "Danish professional subtitles (25 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 40, + SubtitleMaximumCharactersPerSeconds = 15, + SubtitleOptimalCharactersPerSeconds = 10, + SubtitleMaximumDisplayMilliseconds = 8000, + SubtitleMinimumDisplayMilliseconds = 2000, + SubtitleMaximumWordsPerMinute = 180, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 120, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.LeadingTrailingDashDots + }); + profiles.Add(new RulesProfile + { + Name = "SW2 (French) (23.976/24 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5005, + SubtitleMinimumDisplayMilliseconds = 792, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 125, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "SW2 (French) (25 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5000, + SubtitleMinimumDisplayMilliseconds = 800, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 120, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "SW3 (French) (23.976/24 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5005, + SubtitleMinimumDisplayMilliseconds = 792, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 167, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "SW3 (French) (25 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5000, + SubtitleMinimumDisplayMilliseconds = 800, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 160, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "SW4 (French) (23.976/24 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5005, + SubtitleMinimumDisplayMilliseconds = 792, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 250, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + profiles.Add(new RulesProfile + { + Name = "SW4 (French) (25 fps)", + SubtitleLineMaximumLength = 40, + MaxNumberOfLines = 2, + MergeLinesShorterThan = 37, + SubtitleMaximumCharactersPerSeconds = 25, + SubtitleOptimalCharactersPerSeconds = 18, + SubtitleMaximumDisplayMilliseconds = 5000, + SubtitleMinimumDisplayMilliseconds = 800, + SubtitleMaximumWordsPerMinute = 300, + CpsIncludesSpace = true, + MinimumMillisecondsBetweenLines = 240, + DialogStyle = DialogType.DashBothLinesWithSpace, + ContinuationStyle = ContinuationStyle.None + }); + } + } + + public class VideoControlsSettings + { + public string CustomSearchText1 { get; set; } + public string CustomSearchText2 { get; set; } + public string CustomSearchText3 { get; set; } + public string CustomSearchText4 { get; set; } + public string CustomSearchText5 { get; set; } + public string CustomSearchUrl1 { get; set; } + public string CustomSearchUrl2 { get; set; } + public string CustomSearchUrl3 { get; set; } + public string CustomSearchUrl4 { get; set; } + public string CustomSearchUrl5 { get; set; } + public string LastActiveTab { get; set; } + public bool WaveformDrawGrid { get; set; } + public bool WaveformDrawCps { get; set; } + public bool WaveformDrawWpm { get; set; } + public bool WaveformAllowOverlap { get; set; } + public bool WaveformFocusOnMouseEnter { get; set; } + public bool WaveformListViewFocusOnMouseEnter { get; set; } + public bool WaveformSetVideoPositionOnMoveStartEnd { get; set; } + public bool WaveformSingleClickSelect { get; set; } + public bool WaveformSnapToSceneChanges { get; set; } + public int WaveformBorderHitMs { get; set; } + public Color WaveformGridColor { get; set; } + public Color WaveformColor { get; set; } + public Color WaveformSelectedColor { get; set; } + public Color WaveformBackgroundColor { get; set; } + public Color WaveformTextColor { get; set; } + public Color WaveformCursorColor { get; set; } + public Color WaveformChaptersColor { get; set; } + public int WaveformTextSize { get; set; } + public bool WaveformTextBold { get; set; } + public string WaveformDoubleClickOnNonParagraphAction { get; set; } + public string WaveformRightClickOnNonParagraphAction { get; set; } + public bool WaveformMouseWheelScrollUpIsForward { get; set; } + public bool GenerateSpectrogram { get; set; } + public string SpectrogramAppearance { get; set; } + public int WaveformMinimumSampleRate { get; set; } + public double WaveformSeeksSilenceDurationSeconds { get; set; } + public double WaveformSeeksSilenceMaxVolume { get; set; } + public bool WaveformUnwrapText { get; set; } + public bool WaveformHideWpmCpsLabels { get; set; } + + + public VideoControlsSettings() + { + CustomSearchText1 = "The Free Dictionary"; + CustomSearchUrl1 = "https://www.thefreedictionary.com/{0}"; + CustomSearchText2 = "Wikipedia"; + CustomSearchUrl2 = "https://en.wikipedia.org/wiki?search={0}"; + + LastActiveTab = "Translate"; + WaveformDrawGrid = true; + WaveformAllowOverlap = false; + WaveformBorderHitMs = 15; + WaveformGridColor = Color.FromArgb(255, 20, 20, 18); + WaveformColor = Color.FromArgb(255, 160, 240, 30); + WaveformSelectedColor = Color.FromArgb(255, 230, 0, 0); + WaveformBackgroundColor = Color.Black; + WaveformTextColor = Color.Gray; + WaveformCursorColor = Color.Turquoise; + WaveformChaptersColor = Color.FromArgb(255, 104, 33, 122); + WaveformTextSize = 9; + WaveformTextBold = true; + WaveformDoubleClickOnNonParagraphAction = "PlayPause"; + WaveformDoubleClickOnNonParagraphAction = string.Empty; + WaveformMouseWheelScrollUpIsForward = true; + SpectrogramAppearance = "OneColorGradient"; + WaveformMinimumSampleRate = 126; + WaveformSeeksSilenceDurationSeconds = 0.3; + WaveformSeeksSilenceMaxVolume = 0.1; + WaveformSnapToSceneChanges = true; + } + } + + public class VobSubOcrSettings + { + public int XOrMorePixelsMakesSpace { get; set; } + public double AllowDifferenceInPercent { get; set; } + public double BlurayAllowDifferenceInPercent { get; set; } + public string LastImageCompareFolder { get; set; } + public int LastModiLanguageId { get; set; } + public string LastOcrMethod { get; set; } + public string TesseractLastLanguage { get; set; } + public bool UseTesseractFallback { get; set; } + public bool UseItalicsInTesseract { get; set; } + public int TesseractEngineMode { get; set; } + public bool UseMusicSymbolsInTesseract { get; set; } + public bool RightToLeft { get; set; } + public bool TopToBottom { get; set; } + public int DefaultMillisecondsForUnknownDurations { get; set; } + public bool FixOcrErrors { get; set; } + public bool PromptForUnknownWords { get; set; } + public bool GuessUnknownWords { get; set; } + public bool AutoBreakSubtitleIfMoreThanTwoLines { get; set; } + public double ItalicFactor { get; set; } + + public bool LineOcrDraw { get; set; } + public int LineOcrMinHeightSplit { get; set; } + public bool LineOcrAdvancedItalic { get; set; } + public string LineOcrLastLanguages { get; set; } + public string LineOcrLastSpellCheck { get; set; } + public int LineOcrLinesToAutoGuess { get; set; } + public int LineOcrMinLineHeight { get; set; } + public int LineOcrMaxLineHeight { get; set; } + public int LineOcrMaxErrorPixels { get; set; } + public string LastBinaryImageCompareDb { get; set; } + public string LastBinaryImageSpellCheck { get; set; } + public bool BinaryAutoDetectBestDb { get; set; } + public string LastTesseractSpellCheck { get; set; } + public bool CaptureTopAlign { get; set; } + public int UnfocusedAttentionBlinkCount { get; set; } + public int UnfocusedAttentionPlaySoundCount { get; set; } + + public VobSubOcrSettings() + { + XOrMorePixelsMakesSpace = 8; + AllowDifferenceInPercent = 1.0; + BlurayAllowDifferenceInPercent = 7.5; + LastImageCompareFolder = "English"; + LastModiLanguageId = 9; + LastOcrMethod = "Tesseract"; + UseItalicsInTesseract = true; + TesseractEngineMode = 3; // Default, based on what is available (T4 docs) + UseMusicSymbolsInTesseract = true; + UseTesseractFallback = true; + RightToLeft = false; + TopToBottom = true; + DefaultMillisecondsForUnknownDurations = 5000; + FixOcrErrors = true; + PromptForUnknownWords = true; + GuessUnknownWords = true; + AutoBreakSubtitleIfMoreThanTwoLines = true; + ItalicFactor = 0.2f; + LineOcrLinesToAutoGuess = 100; + LineOcrMaxErrorPixels = 45; + LastBinaryImageCompareDb = "Latin+Latin"; + BinaryAutoDetectBestDb = true; + CaptureTopAlign = false; + UnfocusedAttentionBlinkCount = 50; + UnfocusedAttentionPlaySoundCount = 1; + } + } + + public class MultipleSearchAndReplaceSetting + { + public bool Enabled { get; set; } + public string FindWhat { get; set; } + public string ReplaceWith { get; set; } + public string SearchType { get; set; } + public string Description { get; set; } + } + + public class MultipleSearchAndReplaceGroup + { + public string Name { get; set; } + public bool Enabled { get; set; } + public List Rules { get; set; } + } + + public class NetworkSettings + { + public string UserName { get; set; } + public string WebServiceUrl { get; set; } + public string SessionKey { get; set; } + public int PollIntervalSeconds { get; set; } + public string NewMessageSound { get; set; } + + public NetworkSettings() + { + UserName = string.Empty; + SessionKey = "DemoSession"; // TODO: Leave blank or use guid + WebServiceUrl = "https://www.nikse.dk/se/SeService.asmx"; + PollIntervalSeconds = 5; + } + } + + public class Shortcuts + { + public string GeneralGoToFirstSelectedLine { get; set; } + public string GeneralGoToNextEmptyLine { get; set; } + public string GeneralMergeSelectedLines { get; set; } + public string GeneralMergeSelectedLinesAndAutoBreak { get; set; } + public string GeneralMergeSelectedLinesAndUnbreak { get; set; } + public string GeneralMergeSelectedLinesAndUnbreakCjk { get; set; } + public string GeneralMergeSelectedLinesOnlyFirstText { get; set; } + public string GeneralMergeSelectedLinesBilingual { get; set; } + public string GeneralMergeWithNext { get; set; } + public string GeneralMergeWithPrevious { get; set; } + public string GeneralToggleTranslationMode { get; set; } + public string GeneralSwitchOriginalAndTranslation { get; set; } + public string GeneralMergeOriginalAndTranslation { get; set; } + public string GeneralGoToNextSubtitle { get; set; } + public string GeneralGoToNextSubtitleCursorAtEnd { get; set; } + public string GeneralGoToPrevSubtitle { get; set; } + public string GeneralGoToStartOfCurrentSubtitle { get; set; } + public string GeneralGoToEndOfCurrentSubtitle { get; set; } + public string GeneralGoToPreviousSubtitleAndFocusVideo { get; set; } + public string GeneralGoToNextSubtitleAndFocusVideo { get; set; } + public string GeneralGoToPrevSubtitleAndPlay { get; set; } + public string GeneralGoToNextSubtitleAndPlay { get; set; } + public string GeneralAutoCalcCurrentDuration { get; set; } + public string GeneralPlayFirstSelected { get; set; } + public string GeneralHelp { get; set; } + public string GeneralUnbrekNoSpace { get; set; } + public string GeneralToggleBookmarks { get; set; } + public string GeneralToggleBookmarksWithText { get; set; } + public string GeneralClearBookmarks { get; set; } + public string GeneralGoToBookmark { get; set; } + public string GeneralGoToPreviousBookmark { get; set; } + public string GeneralGoToNextBookmark { get; set; } + public string ChooseProfile { get; set; } + public string DuplicateLine { get; set; } + public string MainFileNew { get; set; } + public string MainFileOpen { get; set; } + public string MainFileOpenKeepVideo { get; set; } + public string MainFileSave { get; set; } + public string MainFileSaveOriginal { get; set; } + public string MainFileSaveOriginalAs { get; set; } + public string MainFileSaveAs { get; set; } + public string MainFileSaveAll { get; set; } + public string MainFileOpenOriginal { get; set; } + public string MainFileCloseOriginal { get; set; } + public string MainFileCompare { get; set; } + public string MainFileImportPlainText { get; set; } + public string MainFileImportTimeCodes { get; set; } + public string MainFileExportEbu { get; set; } + public string MainFileExportPac { get; set; } + public string MainFileExportPlainText { get; set; } + public string MainEditUndo { get; set; } + public string MainEditRedo { get; set; } + public string MainEditFind { get; set; } + public string MainEditFindNext { get; set; } + public string MainEditReplace { get; set; } + public string MainEditMultipleReplace { get; set; } + public string MainEditGoToLineNumber { get; set; } + public string MainEditRightToLeft { get; set; } + public string MainEditFixRTLViaUnicodeChars { get; set; } + public string MainEditRemoveRTLUnicodeChars { get; set; } + public string MainEditReverseStartAndEndingForRTL { get; set; } + public string MainEditToggleTranslationOriginalInPreviews { get; set; } + public string MainEditInverseSelection { get; set; } + public string MainEditModifySelection { get; set; } + public string MainToolsFixCommonErrors { get; set; } + public string MainToolsFixCommonErrorsPreview { get; set; } + public string MainToolsMergeShortLines { get; set; } + public string MainToolsMergeDuplicateText { get; set; } + public string MainToolsMergeSameTimeCodes { get; set; } + public string MainToolsMakeEmptyFromCurrent { get; set; } + public string MainToolsSplitLongLines { get; set; } + public string MainToolsDurationsBridgeGap { get; set; } + public string MainToolsMinimumDisplayTimeBetweenParagraphs { get; set; } + + public string MainToolsRenumber { get; set; } + public string MainToolsRemoveTextForHI { get; set; } + public string MainToolsChangeCasing { get; set; } + public string MainToolsAutoDuration { get; set; } + public string MainToolsBatchConvert { get; set; } + public string MainToolsMeasurementConverter { get; set; } + public string MainToolsSplit { get; set; } + public string MainToolsAppend { get; set; } + public string MainToolsJoin { get; set; } + public string MainToolsBeamer { get; set; } + public string MainVideoOpen { get; set; } + public string MainVideoClose { get; set; } + public string MainVideoPause { get; set; } + public string MainVideoPlayFromJustBefore { get; set; } + public string MainVideoPlayPauseToggle { get; set; } + public string MainVideoShowHideVideo { get; set; } + public string MainVideoFoucsSetVideoPosition { get; set; } + public string MainVideoToggleVideoControls { get; set; } + public string MainVideo1FrameLeft { get; set; } + public string MainVideo1FrameRight { get; set; } + public string MainVideo1FrameLeftWithPlay { get; set; } + public string MainVideo1FrameRightWithPlay { get; set; } + public string MainVideo100MsLeft { get; set; } + public string MainVideo100MsRight { get; set; } + public string MainVideo500MsLeft { get; set; } + public string MainVideo500MsRight { get; set; } + public string MainVideo1000MsLeft { get; set; } + public string MainVideo1000MsRight { get; set; } + public string MainVideo5000MsLeft { get; set; } + public string MainVideo5000MsRight { get; set; } + public string MainVideoXSMsLeft { get; set; } + public string MainVideoXSMsRight { get; set; } + public string MainVideoXLMsLeft { get; set; } + public string MainVideoXLMsRight { get; set; } + public string MainVideo3000MsLeft { get; set; } + public string MainVideoGoToStartCurrent { get; set; } + public string MainVideoToggleStartEndCurrent { get; set; } + public string MainVideoPlayCurrent { get; set; } + public string MainVideoGoToPrevSubtitle { get; set; } + public string MainVideoGoToNextSubtitle { get; set; } + public string MainVideoGoToPrevChapter { get; set; } + public string MainVideoGoToNextChapter { get; set; } + public string MainVideoSelectNextSubtitle { get; set; } + public string MainVideoFullscreen { get; set; } + public string MainVideoSlower { get; set; } + public string MainVideoFaster { get; set; } + public string MainVideoReset { get; set; } + public string MainSpellCheck { get; set; } + public string MainSpellCheckFindDoubleWords { get; set; } + public string MainSpellCheckAddWordToNames { get; set; } + public string MainSynchronizationAdjustTimes { get; set; } + public string MainSynchronizationVisualSync { get; set; } + public string MainSynchronizationPointSync { get; set; } + public string MainSynchronizationPointSyncViaFile { get; set; } + public string MainSynchronizationChangeFrameRate { get; set; } + public string MainListViewItalic { get; set; } + public string MainListViewBold { get; set; } + public string MainListViewUnderline { get; set; } + public string MainListViewBox { get; set; } + public string MainListViewSplit { get; set; } + public string MainListViewToggleDashes { get; set; } + public string MainListViewToggleMusicSymbols { get; set; } + public string MainListViewAlignment { get; set; } + public string MainListViewAlignmentN1 { get; set; } + public string MainListViewAlignmentN2 { get; set; } + public string MainListViewAlignmentN3 { get; set; } + public string MainListViewAlignmentN4 { get; set; } + public string MainListViewAlignmentN5 { get; set; } + public string MainListViewAlignmentN6 { get; set; } + public string MainListViewAlignmentN7 { get; set; } + public string MainListViewAlignmentN8 { get; set; } + public string MainListViewAlignmentN9 { get; set; } + public string MainRemoveFormatting { get; set; } + public string MainListViewCopyText { get; set; } + public string MainListViewCopyTextFromOriginalToCurrent { get; set; } + public string MainListViewAutoDuration { get; set; } + public string MainListViewColumnDeleteText { get; set; } + public string MainListViewColumnDeleteTextAndShiftUp { get; set; } + public string MainListViewColumnInsertText { get; set; } + public string MainListViewColumnPaste { get; set; } + public string MainListViewColumnTextUp { get; set; } + public string MainListViewColumnTextDown { get; set; } + public string MainListViewFocusWaveform { get; set; } + public string MainListViewGoToNextError { get; set; } + public string MainListViewRemoveTimeCodes { get; set; } + public string MainTextBoxItalic { get; set; } + public string MainTextBoxSplitAtCursor { get; set; } + public string MainTextBoxSplitAtCursorAndVideoPos { get; set; } + public string MainTextBoxSplitSelectedLineBilingual { get; set; } + public string MainTextBoxMoveLastWordDown { get; set; } + public string MainTextBoxMoveFirstWordFromNextUp { get; set; } + public string MainTextBoxMoveLastWordDownCurrent { get; set; } + public string MainTextBoxMoveFirstWordUpCurrent { get; set; } + public string MainTextBoxSelectionToLower { get; set; } + public string MainTextBoxSelectionToUpper { get; set; } + public string MainTextBoxSelectionToggleCasing { get; set; } + public string MainTextBoxSelectionToRuby { get; set; } + public string MainTextBoxToggleAutoDuration { get; set; } + public string MainCreateInsertSubAtVideoPos { get; set; } + public string MainCreateInsertSubAtVideoPosNoTextBoxFocus { get; set; } + public string MainCreateSetStart { get; set; } + public string MainCreateSetEnd { get; set; } + public string MainAdjustSetEndAndPause { get; set; } + public string MainCreateSetEndAddNewAndGoToNew { get; set; } + public string MainCreateStartDownEndUp { get; set; } + public string MainAdjustSetStartAndOffsetTheRest { get; set; } + public string MainAdjustSetStartAndOffsetTheRest2 { get; set; } + public string MainAdjustSetEndAndOffsetTheRest { get; set; } + public string MainAdjustSetEndAndOffsetTheRestAndGoToNext { get; set; } + public string MainAdjustSetEndAndGotoNext { get; set; } + public string MainAdjustViaEndAutoStart { get; set; } + public string MainAdjustViaEndAutoStartAndGoToNext { get; set; } + public string MainAdjustSetStartAutoDurationAndGoToNext { get; set; } + public string MainAdjustSetEndNextStartAndGoToNext { get; set; } + public string MainAdjustStartDownEndUpAndGoToNext { get; set; } + public string MainAdjustSetStartAndEndOfPrevious { get; set; } + public string MainAdjustSetStartAndEndOfPreviousAndGoToNext { get; set; } + public string MainAdjustSetStartKeepDuration { get; set; } + public string MainAdjustSelected100MsForward { get; set; } + public string MainAdjustSelected100MsBack { get; set; } + public string MainAdjustStartXMsBack { get; set; } + public string MainAdjustStartXMsForward { get; set; } + public string MainAdjustEndXMsBack { get; set; } + public string MainAdjustEndXMsForward { get; set; } + public string MoveStartOneFrameBack { get; set; } + public string MoveStartOneFrameForward { get; set; } + public string MoveEndOneFrameBack { get; set; } + public string MoveEndOneFrameForward { get; set; } + public string MoveStartOneFrameBackKeepGapPrev { get; set; } + public string MoveStartOneFrameForwardKeepGapPrev { get; set; } + public string MoveEndOneFrameBackKeepGapNext { get; set; } + public string MoveEndOneFrameForwardKeepGapNext { get; set; } + public string MainAdjustSnapStartToNextSceneChange { get; set; } + public string MainAdjustSnapStartToNextSceneChangeWithGap { get; set; } + public string MainAdjustSnapEndToPreviousSceneChange { get; set; } + public string MainAdjustSnapEndToPreviousSceneChangeWithGap { get; set; } + public string MainAdjustExtendToNextSceneChange { get; set; } + public string MainAdjustExtendToNextSceneChangeWithGap { get; set; } + public string MainAdjustExtendToPreviousSceneChange { get; set; } + public string MainAdjustExtendToPreviousSceneChangeWithGap { get; set; } + public string MainAdjustExtendToNextSubtitle { get; set; } + public string MainAdjustExtendToPreviousSubtitle { get; set; } + public string MainAdjustExtendCurrentSubtitle { get; set; } + public string MainAdjustExtendPreviousLineEndToCurrentStart { get; set; } + public string MainAdjustExtendNextLineStartToCurrentEnd { get; set; } + public string MainInsertAfter { get; set; } + public string MainTextBoxAutoBreak { get; set; } + public string MainTextBoxBreakAtPosition { get; set; } + public string MainTextBoxBreakAtPositionAndGoToNext { get; set; } + public string MainTextBoxUnbreak { get; set; } + public string MainWaveformInsertAtCurrentPosition { get; set; } + public string MainInsertBefore { get; set; } + public string MainMergeDialog { get; set; } + public string MainToggleFocus { get; set; } + public string WaveformAdd { get; set; } + public string WaveformVerticalZoom { get; set; } + public string WaveformVerticalZoomOut { get; set; } + public string WaveformZoomIn { get; set; } + public string WaveformZoomOut { get; set; } + public string WaveformSplit { get; set; } + public string WaveformPlaySelection { get; set; } + public string WaveformPlaySelectionEnd { get; set; } + public string WaveformSearchSilenceForward { get; set; } + public string WaveformSearchSilenceBack { get; set; } + public string WaveformAddTextHere { get; set; } + public string WaveformAddTextHereFromClipboard { get; set; } + public string WaveformSetParagraphAsSelection { get; set; } + public string WaveformFocusListView { get; set; } + public string WaveformGoToPreviousSceneChange { get; set; } + public string WaveformGoToNextSceneChange { get; set; } + public string WaveformToggleSceneChange { get; set; } + public string WaveformGuessStart { get; set; } + public string Waveform100MsLeft { get; set; } + public string Waveform100MsRight { get; set; } + public string Waveform1000MsLeft { get; set; } + public string Waveform1000MsRight { get; set; } + public string MainTranslateGoogleIt { get; set; } + public string MainTranslateGoogleTranslate { get; set; } + public string MainTranslateCustomSearch1 { get; set; } + public string MainTranslateCustomSearch2 { get; set; } + public string MainTranslateCustomSearch3 { get; set; } + public string MainTranslateCustomSearch4 { get; set; } + public string MainTranslateCustomSearch5 { get; set; } + + public Shortcuts() + { + GeneralGoToFirstSelectedLine = "Control+L"; + GeneralMergeSelectedLines = "Control+Shift+M"; + GeneralToggleTranslationMode = "Control+Shift+O"; + GeneralSwitchOriginalAndTranslation = "Control+Alt+O"; + GeneralMergeOriginalAndTranslation = "Control+Alt+Shift+M"; + GeneralGoToNextSubtitle = "Shift+Return"; + GeneralToggleBookmarksWithText = "Control+Shift+B"; + MainFileNew = "Control+N"; + MainFileOpen = "Control+O"; + MainFileSave = "Control+S"; + MainEditUndo = "Control+Z"; + MainEditRedo = "Control+Y"; + MainEditFind = "Control+F"; + MainEditFindNext = "F3"; + MainEditReplace = "Control+H"; + MainEditMultipleReplace = "Control+Alt+M"; + MainEditGoToLineNumber = "Control+G"; + MainEditRightToLeft = "Control+Shift+Alt+R"; + MainEditInverseSelection = "Control+Shift+I"; + MainToolsFixCommonErrors = "Control+Shift+F"; + MainToolsFixCommonErrorsPreview = "Control+P"; + MainToolsRenumber = "Control+Shift+N"; + MainToolsRemoveTextForHI = "Control+Shift+H"; + MainToolsChangeCasing = "Control+Shift+C"; + MainVideoPlayFromJustBefore = "Shift+F10"; + MainVideoPlayPauseToggle = "Control+P"; + MainVideoPause = "Control+Alt+P"; + MainVideoShowHideVideo = "Control+Q"; + MainVideo500MsLeft = "Alt+Left"; + MainVideo500MsRight = "Alt+Right"; + MainVideoFullscreen = "Alt+Return"; + MainVideoReset = "Control+D0"; + MainSpellCheck = "Control+Shift+S"; + MainSpellCheckFindDoubleWords = "Control+Shift+D"; + MainSpellCheckAddWordToNames = "Control+Shift+L"; + MainSynchronizationAdjustTimes = "Control+Shift+A"; + MainSynchronizationVisualSync = "Control+Shift+V"; + MainSynchronizationPointSync = "Control+Shift+P"; + MainListViewItalic = "Control+I"; + MainTextBoxItalic = "Control+I"; + MainTextBoxSplitAtCursor = "Control+Alt+V"; + MainTextBoxSelectionToLower = "Control+U"; + MainTextBoxSelectionToUpper = "Control+Shift+U"; + MainTextBoxSelectionToggleCasing = "Ctrl+Shift+F3"; + MainToolsBeamer = "Control+Shift+Alt+B"; + MainCreateInsertSubAtVideoPos = "Shift+F9"; + MainVideoGoToStartCurrent = "Shift+F11"; + MainVideoToggleStartEndCurrent = "F4"; + MainVideoPlayCurrent = "F5"; + MainVideoGoToStartCurrent = "F6"; + MainVideo3000MsLeft = "F7"; + MainListViewGoToNextError = "F8"; + MainCreateSetStart = "F11"; + MainCreateSetEnd = "F12"; + MainAdjustSetStartAndOffsetTheRest = "Control+Space"; + MainAdjustSetStartAndOffsetTheRest2 = "F9"; + MainAdjustSetEndAndGotoNext = "F10"; + MainInsertAfter = "Alt+Insert"; + MainWaveformInsertAtCurrentPosition = "Insert"; + MainInsertBefore = "Control+Shift+Insert"; + MainTextBoxAutoBreak = "Control+R"; + WaveformVerticalZoom = "Shift+Add"; + WaveformVerticalZoomOut = "Shift+Subtract"; + GeneralHelp = "F1"; + WaveformAddTextHere = "Return"; + Waveform100MsLeft = "Shift+Left"; + Waveform100MsRight = "Shift+Right"; + Waveform1000MsLeft = "Left"; + Waveform1000MsRight = "Right"; + MainTranslateGoogleTranslate = "Control+Shift+G"; + MainAdjustExtendToNextSubtitle = "Control+Shift+E"; + MainAdjustExtendToPreviousSubtitle = "Alt+Shift+E"; + } + + public Shortcuts Clone() + { + var xws = new XmlWriterSettings { Indent = true }; + var sb = new StringBuilder(); + using (var textWriter = XmlWriter.Create(sb, xws)) + { + textWriter.WriteStartDocument(); + textWriter.WriteStartElement("Settings", string.Empty); + Settings.WriteShortcuts(this, textWriter); + textWriter.WriteEndElement(); + textWriter.WriteEndDocument(); + } + + var doc = new XmlDocument { PreserveWhitespace = true }; + doc.LoadXml(sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\"")); + var shortcuts = new Shortcuts(); + Settings.ReadShortcuts(doc, shortcuts); + return shortcuts; + } + + public static void Save(string fileName, Shortcuts shortcuts) + { + var xws = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 }; + var sb = new StringBuilder(); + using (var textWriter = XmlWriter.Create(sb, xws)) + { + textWriter.WriteStartDocument(); + textWriter.WriteStartElement("Settings", string.Empty); + Settings.WriteShortcuts(shortcuts, textWriter); + textWriter.WriteEndElement(); + textWriter.WriteEndDocument(); + } + File.WriteAllText(fileName, sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""), Encoding.UTF8); + } + + public static Shortcuts Load(string fileName) + { + var doc = new XmlDocument { PreserveWhitespace = true }; + using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + doc.Load(stream); + var shortcuts = new Shortcuts(); + Settings.ReadShortcuts(doc, shortcuts); + return shortcuts; + } + } + } + + public class RemoveTextForHearingImpairedSettings + { + public bool RemoveTextBetweenBrackets { get; set; } + public bool RemoveTextBetweenParentheses { get; set; } + public bool RemoveTextBetweenCurlyBrackets { get; set; } + public bool RemoveTextBetweenQuestionMarks { get; set; } + public bool RemoveTextBetweenCustom { get; set; } + public string RemoveTextBetweenCustomBefore { get; set; } + public string RemoveTextBetweenCustomAfter { get; set; } + public bool RemoveTextBetweenOnlySeparateLines { get; set; } + public bool RemoveTextBeforeColon { get; set; } + public bool RemoveTextBeforeColonOnlyIfUppercase { get; set; } + public bool RemoveTextBeforeColonOnlyOnSeparateLine { get; set; } + public bool RemoveInterjections { get; set; } + public bool RemoveInterjectionsOnlyOnSeparateLine { get; set; } + public bool RemoveIfContains { get; set; } + public bool RemoveIfAllUppercase { get; set; } + public string RemoveIfContainsText { get; set; } + + public RemoveTextForHearingImpairedSettings() + { + RemoveTextBetweenBrackets = true; + RemoveTextBetweenParentheses = true; + RemoveTextBetweenCurlyBrackets = true; + RemoveTextBetweenQuestionMarks = true; + RemoveTextBetweenCustom = false; + RemoveTextBetweenCustomBefore = "¶"; + RemoveTextBetweenCustomAfter = "¶"; + RemoveTextBeforeColon = true; + RemoveTextBeforeColonOnlyIfUppercase = true; + RemoveIfContainsText = "¶"; + } + } + + public class SubtitleBeaming + { + public string FontName { get; set; } + public int FontSize { get; set; } + public Color FontColor { get; set; } + public Color BorderColor { get; set; } + public int BorderWidth { get; set; } + + public SubtitleBeaming() + { + FontName = "Verdana"; + FontSize = 30; + FontColor = Color.White; + BorderColor = Color.DarkGray; + BorderWidth = 2; + } + } + + public class CompareSettings + { + public bool ShowOnlyDifferences { get; set; } + public bool OnlyLookForDifferenceInText { get; set; } + public bool IgnoreLineBreaks { get; set; } + public bool IgnoreFormatting { get; set; } + + public CompareSettings() + { + OnlyLookForDifferenceInText = true; + } + } + + public class Settings + { + public string Version { get; set; } + public CompareSettings Compare { get; set; } + public RecentFilesSettings RecentFiles { get; set; } + public GeneralSettings General { get; set; } + public ToolsSettings Tools { get; set; } + public FcpExportSettings FcpExportSettings { get; set; } + public SubtitleSettings SubtitleSettings { get; set; } + public ProxySettings Proxy { get; set; } + public WordListSettings WordLists { get; set; } + public FixCommonErrorsSettings CommonErrors { get; set; } + public VobSubOcrSettings VobSubOcr { get; set; } + public VideoControlsSettings VideoControls { get; set; } + public NetworkSettings NetworkSettings { get; set; } + public Shortcuts Shortcuts { get; set; } + public RemoveTextForHearingImpairedSettings RemoveTextForHearingImpaired { get; set; } + public SubtitleBeaming SubtitleBeaming { get; set; } + public List MultipleSearchAndReplaceGroups { get; set; } + + [XmlIgnore] + public Language Language { get; set; } + + public void Reset() + { + RecentFiles = new RecentFilesSettings(); + General = new GeneralSettings(); + Tools = new ToolsSettings(); + FcpExportSettings = new FcpExportSettings(); + WordLists = new WordListSettings(); + SubtitleSettings = new SubtitleSettings(); + Proxy = new ProxySettings(); + CommonErrors = new FixCommonErrorsSettings(); + VobSubOcr = new VobSubOcrSettings(); + VideoControls = new VideoControlsSettings(); + NetworkSettings = new NetworkSettings(); + MultipleSearchAndReplaceGroups = new List(); + Language = new Language(); + Shortcuts = new Shortcuts(); + RemoveTextForHearingImpaired = new RemoveTextForHearingImpairedSettings(); + SubtitleBeaming = new SubtitleBeaming(); + Compare = new CompareSettings(); + } + + private Settings() + { + Reset(); + } + + public void Save() + { + //this is too slow: Serialize(Configuration.SettingsFileName, this); + CustomSerialize(Configuration.SettingsFileName, this); + } + + //private static void Serialize(string fileName, Settings settings) + //{ + // var s = new XmlSerializer(typeof(Settings)); + // TextWriter w = new StreamWriter(fileName); + // s.Serialize(w, settings); + // w.Close(); + //} + + public static Settings GetSettings() + { + var settings = new Settings(); + var settingsFileName = Configuration.SettingsFileName; + if (File.Exists(settingsFileName)) + { + try + { + //too slow... :( - settings = Deserialize(settingsFileName); // 688 msecs + settings = CustomDeserialize(settingsFileName); // 15 msecs + + if (settings.General.DefaultEncoding.StartsWith("utf-8", StringComparison.Ordinal)) + { + settings.General.DefaultEncoding = TextEncoding.Utf8WithBom; + } + + if (string.IsNullOrEmpty(settings.Version)) + { // 3.5.14 or older + if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoToggleStartEndCurrent)) + { + settings.Shortcuts.MainVideoToggleStartEndCurrent = "F4"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoPlayCurrent)) + { + settings.Shortcuts.MainVideoPlayCurrent = "F5"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoGoToStartCurrent)) + { + settings.Shortcuts.MainVideoGoToStartCurrent = "F6"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainVideo3000MsLeft)) + { + settings.Shortcuts.MainVideo3000MsLeft = "F7"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainAdjustSetStartAndOffsetTheRest2)) + { + settings.Shortcuts.MainAdjustSetStartAndOffsetTheRest2 = "F9"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainAdjustSetEndAndGotoNext)) + { + settings.Shortcuts.MainAdjustSetEndAndGotoNext = "F10"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateSetStart)) + { + settings.Shortcuts.MainCreateSetStart = "F11"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateSetEnd)) + { + settings.Shortcuts.MainCreateSetEnd = "F12"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainCreateInsertSubAtVideoPos)) + { + settings.Shortcuts.MainCreateInsertSubAtVideoPos = "Shift+F9"; + } + if (string.IsNullOrEmpty(settings.Shortcuts.MainVideoGoToStartCurrent)) + { + settings.Shortcuts.MainVideoGoToStartCurrent = "Shift+F11"; + } + } + else if (settings.Version.StartsWith("3.5.15", StringComparison.Ordinal) || + settings.Version.StartsWith("3.5.14", StringComparison.Ordinal) || + settings.Version.StartsWith("3.5.13", StringComparison.Ordinal)) + { + settings.Shortcuts.MainTranslateGoogleTranslate = "Control+Shift+G"; + settings.Tools.MicrosoftTranslatorTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; + } + } + catch (Exception exception) + { + settings = new Settings(); + SeLogger.Error(exception, "Failed to load " + settingsFileName); + } + + if (!string.IsNullOrEmpty(settings.General.ListViewLineSeparatorString)) + { + settings.General.ListViewLineSeparatorString = settings.General.ListViewLineSeparatorString.Replace("\n", string.Empty).Replace("\r", string.Empty); + } + + if (string.IsNullOrWhiteSpace(settings.General.ListViewLineSeparatorString)) + { + settings.General.ListViewLineSeparatorString = "
"; + } + + if (settings.Shortcuts.GeneralToggleTranslationMode == "Control+U" && settings.Shortcuts.MainTextBoxSelectionToLower == "Control+U") + { + settings.Shortcuts.GeneralToggleTranslationMode = "Control+Shift+O"; + settings.Shortcuts.GeneralSwitchOriginalAndTranslation = "Control+Alt+O"; + } + + if (settings.General.UseFFmpegForWaveExtraction && string.IsNullOrEmpty(settings.General.FFmpegLocation) && Configuration.IsRunningOnWindows) + { + var guessPath = Path.Combine(Configuration.DataDirectory, "ffmpeg", "ffmpeg.exe"); + if (File.Exists(guessPath)) + { + settings.General.FFmpegLocation = guessPath; + } + } + } + + return settings; + } + + //private static Settings Deserialize(string fileName) + //{ + // var r = new StreamReader(fileName); + // var s = new XmlSerializer(typeof(Settings)); + // var settings = (Settings)s.Deserialize(r); + // r.Close(); + + // if (settings.RecentFiles == null) + // settings.RecentFiles = new RecentFilesSettings(); + // if (settings.General == null) + // settings.General = new GeneralSettings(); + // if (settings.SsaStyle == null) + // settings.SsaStyle = new SsaStyleSettings(); + // if (settings.CommonErrors == null) + // settings.CommonErrors = new FixCommonErrorsSettings(); + // if (settings.VideoControls == null) + // settings.VideoControls = new VideoControlsSettings(); + // if (settings.VobSubOcr == null) + // settings.VobSubOcr = new VobSubOcrSettings(); + // if (settings.MultipleSearchAndReplaceList == null) + // settings.MultipleSearchAndReplaceList = new List(); + // if (settings.NetworkSettings == null) + // settings.NetworkSettings = new NetworkSettings(); + // if (settings.Shortcuts == null) + // settings.Shortcuts = new Shortcuts(); + + // return settings; + //} + + /// + /// A faster serializer than xml serializer... which is insanely slow (first time)!!!! + /// This method is auto-generated with XmlSerializerGenerator + /// + /// File name of xml settings file to load + /// Newly loaded settings + private static Settings CustomDeserialize(string fileName) + { + var doc = new XmlDocument { PreserveWhitespace = true }; + using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + doc.Load(stream); + } + + var settings = new Settings(); + + XmlNode versionNode = doc.DocumentElement.SelectSingleNode("Version"); + if (versionNode != null) + { + settings.Version = versionNode.InnerText; + } + + // Compare + XmlNode nodeCompare = doc.DocumentElement.SelectSingleNode("Compare"); + if (nodeCompare != null) + { + XmlNode xnode = nodeCompare.SelectSingleNode("ShowOnlyDifferences"); + if (xnode != null) + { + settings.Compare.ShowOnlyDifferences = Convert.ToBoolean(xnode.InnerText); + } + + xnode = nodeCompare.SelectSingleNode("OnlyLookForDifferenceInText"); + if (xnode != null) + { + settings.Compare.OnlyLookForDifferenceInText = Convert.ToBoolean(xnode.InnerText); + } + + xnode = nodeCompare.SelectSingleNode("IgnoreLineBreaks"); + if (xnode != null) + { + settings.Compare.IgnoreLineBreaks = Convert.ToBoolean(xnode.InnerText); + } + + xnode = nodeCompare.SelectSingleNode("IgnoreFormatting"); + if (xnode != null) + { + settings.Compare.IgnoreFormatting = Convert.ToBoolean(xnode.InnerText); + } + } + + // Recent files + XmlNode node = doc.DocumentElement.SelectSingleNode("RecentFiles"); + foreach (XmlNode listNode in node.SelectNodes("FileNames/FileName")) + { + string firstVisibleIndex = "-1"; + if (listNode.Attributes["FirstVisibleIndex"] != null) + { + firstVisibleIndex = listNode.Attributes["FirstVisibleIndex"].Value; + } + + string firstSelectedIndex = "-1"; + if (listNode.Attributes["FirstSelectedIndex"] != null) + { + firstSelectedIndex = listNode.Attributes["FirstSelectedIndex"].Value; + } + + string videoFileName = null; + if (listNode.Attributes["VideoFileName"] != null) + { + videoFileName = listNode.Attributes["VideoFileName"].Value; + } + + string originalFileName = null; + if (listNode.Attributes["OriginalFileName"] != null) + { + originalFileName = listNode.Attributes["OriginalFileName"].Value; + } + + long videoOffset = 0; + if (listNode.Attributes["VideoOffset"] != null) + { + long.TryParse(listNode.Attributes["VideoOffset"].Value, out videoOffset); + } + + settings.RecentFiles.Files.Add(new RecentFileEntry { FileName = listNode.InnerText, FirstVisibleIndex = int.Parse(firstVisibleIndex, CultureInfo.InvariantCulture), FirstSelectedIndex = int.Parse(firstSelectedIndex, CultureInfo.InvariantCulture), VideoFileName = videoFileName, OriginalFileName = originalFileName, VideoOffsetInMs = videoOffset }); + } + + // General + node = doc.DocumentElement.SelectSingleNode("General"); + + // Profiles + int profileCount = 0; + foreach (XmlNode listNode in node.SelectNodes("Profiles/Profile")) + { + if (profileCount == 0) + { + settings.General.Profiles.Clear(); + } + + var p = new RulesProfile(); + var subtitleLineMaximumLength = listNode.SelectSingleNode("SubtitleLineMaximumLength")?.InnerText; + var subtitleMaximumCharactersPerSeconds = listNode.SelectSingleNode("SubtitleMaximumCharactersPerSeconds")?.InnerText; + var subtitleOptimalCharactersPerSeconds = listNode.SelectSingleNode("SubtitleOptimalCharactersPerSeconds")?.InnerText; + var subtitleMinimumDisplayMilliseconds = listNode.SelectSingleNode("SubtitleMinimumDisplayMilliseconds")?.InnerText; + var subtitleMaximumDisplayMilliseconds = listNode.SelectSingleNode("SubtitleMaximumDisplayMilliseconds")?.InnerText; + var subtitleMaximumWordsPerMinute = listNode.SelectSingleNode("SubtitleMaximumWordsPerMinute")?.InnerText; + var cpsIncludesSpace = listNode.SelectSingleNode("CpsIncludesSpace")?.InnerText; + var maxNumberOfLines = listNode.SelectSingleNode("MaxNumberOfLines")?.InnerText; + var mergeLinesShorterThan = listNode.SelectSingleNode("MergeLinesShorterThan")?.InnerText; + var minimumMillisecondsBetweenLines = listNode.SelectSingleNode("MinimumMillisecondsBetweenLines")?.InnerText; + + var dialogStyle = DialogType.DashBothLinesWithSpace; + if (listNode.SelectSingleNode("DialogStyle") == null || !Enum.IsDefined(typeof(DialogType), listNode.SelectSingleNode("DialogStyle").InnerText)) + { //TODO: Remove after 2022 + if (listNode.SelectSingleNode("Name") != null) + { + var lookup = new List(); + GeneralSettings.AddExtraProfiles(lookup); + var match = lookup.FirstOrDefault(LookupProfile => LookupProfile.Name == listNode.SelectSingleNode("Name").InnerText); + if (match != null) + { + dialogStyle = match.DialogStyle; // update style when upgrading from 3.5.13 or below + } + else + { + dialogStyle = DialogType.DashBothLinesWithSpace; + } + } + } + else + { + dialogStyle = (DialogType)Enum.Parse(typeof(DialogType), listNode.SelectSingleNode("DialogStyle")?.InnerText); + } + + var continuationStyle = ContinuationStyle.NoneLeadingTrailingDots; + if (listNode.SelectSingleNode("ContinuationStyle") == null || !Enum.IsDefined(typeof(ContinuationStyle), listNode.SelectSingleNode("ContinuationStyle").InnerText)) + { //TODO: Remove after 2022 + if (listNode.SelectSingleNode("Name") != null) + { + var lookup = new List(); + GeneralSettings.AddExtraProfiles(lookup); + var match = lookup.FirstOrDefault(LookupProfile => LookupProfile.Name == listNode.SelectSingleNode("Name").InnerText); + if (match != null) + { + continuationStyle = match.ContinuationStyle; // update style when upgrading from 3.5.13 or below + } + else + { + continuationStyle = ContinuationStyle.NoneLeadingTrailingDots; + } + } + } + else + { + continuationStyle = (ContinuationStyle)Enum.Parse(typeof(ContinuationStyle), listNode.SelectSingleNode("ContinuationStyle")?.InnerText); + } + + settings.General.Profiles.Add(new RulesProfile + { + Name = listNode.SelectSingleNode("Name")?.InnerText, + SubtitleLineMaximumLength = Convert.ToInt32(subtitleLineMaximumLength, CultureInfo.InvariantCulture), + SubtitleMaximumCharactersPerSeconds = Convert.ToDecimal(subtitleMaximumCharactersPerSeconds, CultureInfo.InvariantCulture), + SubtitleOptimalCharactersPerSeconds = Convert.ToDecimal(subtitleOptimalCharactersPerSeconds, CultureInfo.InvariantCulture), + SubtitleMinimumDisplayMilliseconds = Convert.ToInt32(subtitleMinimumDisplayMilliseconds, CultureInfo.InvariantCulture), + SubtitleMaximumDisplayMilliseconds = Convert.ToInt32(subtitleMaximumDisplayMilliseconds, CultureInfo.InvariantCulture), + SubtitleMaximumWordsPerMinute = Convert.ToDecimal(subtitleMaximumWordsPerMinute, CultureInfo.InvariantCulture), + CpsIncludesSpace = Convert.ToBoolean(cpsIncludesSpace, CultureInfo.InvariantCulture), + MaxNumberOfLines = Convert.ToInt32(maxNumberOfLines, CultureInfo.InvariantCulture), + MergeLinesShorterThan = Convert.ToInt32(mergeLinesShorterThan, CultureInfo.InvariantCulture), + MinimumMillisecondsBetweenLines = Convert.ToInt32(minimumMillisecondsBetweenLines, CultureInfo.InvariantCulture), + DialogStyle = dialogStyle, + ContinuationStyle = continuationStyle + }); + profileCount++; + } + + + XmlNode subNode = node.SelectSingleNode("CurrentProfile"); + if (subNode != null) + { + settings.General.CurrentProfile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ShowToolbarNew"); + if (subNode != null) + { + settings.General.ShowToolbarNew = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarOpen"); + if (subNode != null) + { + settings.General.ShowToolbarOpen = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarSave"); + if (subNode != null) + { + settings.General.ShowToolbarSave = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarSaveAs"); + if (subNode != null) + { + settings.General.ShowToolbarSaveAs = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarFind"); + if (subNode != null) + { + settings.General.ShowToolbarFind = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarReplace"); + if (subNode != null) + { + settings.General.ShowToolbarReplace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarFixCommonErrors"); + if (subNode != null) + { + settings.General.ShowToolbarFixCommonErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarRemoveTextForHi"); + if (subNode != null) + { + settings.General.ShowToolbarRemoveTextForHi = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarVisualSync"); + if (subNode != null) + { + settings.General.ShowToolbarVisualSync = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarSpellCheck"); + if (subNode != null) + { + settings.General.ShowToolbarSpellCheck = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarNetflixGlyphCheck"); + if (subNode != null) + { + settings.General.ShowToolbarNetflixGlyphCheck = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarSettings"); + if (subNode != null) + { + settings.General.ShowToolbarSettings = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowToolbarHelp"); + if (subNode != null) + { + settings.General.ShowToolbarHelp = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowFrameRate"); + if (subNode != null) + { + settings.General.ShowFrameRate = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowVideoPlayer"); + if (subNode != null) + { + settings.General.ShowVideoPlayer = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowAudioVisualizer"); + if (subNode != null) + { + settings.General.ShowAudioVisualizer = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowWaveform"); + if (subNode != null) + { + settings.General.ShowWaveform = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowSpectrogram"); + if (subNode != null) + { + settings.General.ShowSpectrogram = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DefaultFrameRate"); + if (subNode != null) + { + settings.General.DefaultFrameRate = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + if (settings.General.DefaultFrameRate > 23975) + { + settings.General.DefaultFrameRate = 23.976; + } + + settings.General.CurrentFrameRate = settings.General.DefaultFrameRate; + } + subNode = node.SelectSingleNode("DefaultSubtitleFormat"); + if (subNode != null) + { + settings.General.DefaultSubtitleFormat = subNode.InnerText; + } + + subNode = node.SelectSingleNode("DefaultEncoding"); + if (subNode != null) + { + settings.General.DefaultEncoding = subNode.InnerText; + } + + subNode = node.SelectSingleNode("AutoConvertToUtf8"); + if (subNode != null) + { + settings.General.AutoConvertToUtf8 = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoGuessAnsiEncoding"); + if (subNode != null) + { + settings.General.AutoGuessAnsiEncoding = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SystemSubtitleFontNameOverride"); + if (subNode != null) + { + settings.General.SystemSubtitleFontNameOverride = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SystemSubtitleFontSizeOverride"); + if (!string.IsNullOrEmpty(subNode?.InnerText)) + { + settings.General.SystemSubtitleFontSizeOverride = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleFontName"); + if (subNode != null) + { + settings.General.SubtitleFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SubtitleTextBoxFontSize"); + if (subNode != null) + { + settings.General.SubtitleTextBoxFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleListViewFontSize"); + if (subNode != null) + { + settings.General.SubtitleListViewFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleTextBoxFontBold"); + if (subNode != null) + { + settings.General.SubtitleTextBoxFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleListViewFontBold"); + if (subNode != null) + { + settings.General.SubtitleListViewFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleTextBoxSyntaxColor"); + if (subNode != null) + { + settings.General.SubtitleTextBoxSyntaxColor = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleTextBoxHtmlColor"); + if (subNode != null) + { + settings.General.SubtitleTextBoxHtmlColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("SubtitleTextBoxAssColor"); + if (subNode != null) + { + settings.General.SubtitleTextBoxAssColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("SubtitleFontColor"); + if (subNode != null) + { + settings.General.SubtitleFontColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("SubtitleBackgroundColor"); + if (subNode != null) + { + settings.General.SubtitleBackgroundColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("MeasureFontName"); + if (subNode != null) + { + settings.General.MeasureFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MeasureFontSize"); + if (subNode != null) + { + settings.General.MeasureFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MeasureFontBold"); + if (subNode != null) + { + settings.General.MeasureFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleLineMaximumPixelWidth"); + if (subNode != null) + { + settings.General.SubtitleLineMaximumPixelWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("CenterSubtitleInTextBox"); + if (subNode != null) + { + settings.General.CenterSubtitleInTextBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowRecentFiles"); + if (subNode != null) + { + settings.General.ShowRecentFiles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RememberSelectedLine"); + if (subNode != null) + { + settings.General.RememberSelectedLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartLoadLastFile"); + if (subNode != null) + { + settings.General.StartLoadLastFile = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartRememberPositionAndSize"); + if (subNode != null) + { + settings.General.StartRememberPositionAndSize = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartPosition"); + if (subNode != null) + { + settings.General.StartPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("StartSize"); + if (subNode != null) + { + settings.General.StartSize = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SplitContainerMainSplitterDistance"); + if (subNode != null) + { + settings.General.SplitContainerMainSplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SplitContainer1SplitterDistance"); + if (subNode != null) + { + settings.General.SplitContainer1SplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SplitContainerListViewAndTextSplitterDistance"); + if (subNode != null) + { + settings.General.SplitContainerListViewAndTextSplitterDistance = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartInSourceView"); + if (subNode != null) + { + settings.General.StartInSourceView = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveBlankLinesWhenOpening"); + if (subNode != null) + { + settings.General.RemoveBlankLinesWhenOpening = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveBadCharsWhenOpening"); + if (subNode != null) + { + settings.General.RemoveBadCharsWhenOpening = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleLineMaximumLength"); + if (subNode != null) + { + settings.General.SubtitleLineMaximumLength = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MaxNumberOfLines"); + if (subNode != null) + { + settings.General.MaxNumberOfLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MergeLinesShorterThan"); + if (subNode != null) + { + settings.General.MergeLinesShorterThan = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleMinimumDisplayMilliseconds"); + if (subNode != null) + { + settings.General.SubtitleMinimumDisplayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleMaximumDisplayMilliseconds"); + if (subNode != null) + { + settings.General.SubtitleMaximumDisplayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MinimumMillisecondsBetweenLines"); + if (subNode != null) + { + settings.General.MinimumMillisecondsBetweenLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SetStartEndHumanDelay"); + if (subNode != null) + { + settings.General.SetStartEndHumanDelay = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoWrapLineWhileTyping"); + if (subNode != null) + { + settings.General.AutoWrapLineWhileTyping = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleMaximumCharactersPerSeconds"); + if (subNode != null) + { + settings.General.SubtitleMaximumCharactersPerSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleOptimalCharactersPerSeconds"); + if (subNode != null) + { + settings.General.SubtitleOptimalCharactersPerSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("CharactersPerSecondsIgnoreWhiteSpace"); + if (subNode != null) + { + settings.General.CharactersPerSecondsIgnoreWhiteSpace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("IgnoreArabicDiacritics"); + if (subNode != null) + { + settings.General.IgnoreArabicDiacritics = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SubtitleMaximumWordsPerMinute"); + if (subNode != null) + { + settings.General.SubtitleMaximumWordsPerMinute = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DialogStyle"); + if (subNode != null) + { + settings.General.DialogStyle = (DialogType)Enum.Parse(typeof(DialogType), subNode.InnerText); + } + + subNode = node.SelectSingleNode("ContinuationStyle"); + if (subNode != null) + { + settings.General.ContinuationStyle = (ContinuationStyle)Enum.Parse(typeof(ContinuationStyle), subNode.InnerText); + } + + subNode = node.SelectSingleNode("ContinuationPause"); + if (subNode != null) + { + settings.General.ContinuationPause = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsAllCaps"); + if (subNode != null) + { + settings.General.FixContinuationStyleUncheckInsertsAllCaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsItalic"); + if (subNode != null) + { + settings.General.FixContinuationStyleUncheckInsertsItalic = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleUncheckInsertsLowercase"); + if (subNode != null) + { + settings.General.FixContinuationStyleUncheckInsertsLowercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleHideContinuationCandidatesWithoutName"); + if (subNode != null) + { + settings.General.FixContinuationStyleHideContinuationCandidatesWithoutName = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleIgnoreLyrics"); + if (subNode != null) + { + settings.General.FixContinuationStyleIgnoreLyrics = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellCheckLanguage"); + if (subNode != null) + { + settings.General.SpellCheckLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("VideoPlayer"); + if (subNode != null) + { + settings.General.VideoPlayer = subNode.InnerText; + } + + subNode = node.SelectSingleNode("VideoPlayerDefaultVolume"); + if (subNode != null) + { + settings.General.VideoPlayerDefaultVolume = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VideoPlayerPreviewFontSize"); + if (subNode != null) + { + settings.General.VideoPlayerPreviewFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VideoPlayerPreviewFontBold"); + if (subNode != null) + { + settings.General.VideoPlayerPreviewFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VideoPlayerShowStopButton"); + if (subNode != null) + { + settings.General.VideoPlayerShowStopButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VideoPlayerShowMuteButton"); + if (subNode != null) + { + settings.General.VideoPlayerShowMuteButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VideoPlayerShowFullscreenButton"); + if (subNode != null) + { + settings.General.VideoPlayerShowFullscreenButton = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Language"); + if (subNode != null) + { + settings.General.Language = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ListViewLineSeparatorString"); + if (subNode != null) + { + settings.General.ListViewLineSeparatorString = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ListViewDoubleClickAction"); + if (subNode != null) + { + settings.General.ListViewDoubleClickAction = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SaveAsUseFileNameFrom"); + if (subNode != null) + { + settings.General.SaveAsUseFileNameFrom = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UppercaseLetters"); + if (subNode != null) + { + settings.General.UppercaseLetters = subNode.InnerText; + } + + subNode = node.SelectSingleNode("DefaultAdjustMilliseconds"); + if (subNode != null) + { + settings.General.DefaultAdjustMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoRepeatOn"); + if (subNode != null) + { + settings.General.AutoRepeatOn = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoRepeatCount"); + if (subNode != null) + { + settings.General.AutoRepeatCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SyncListViewWithVideoWhilePlaying"); + if (subNode != null) + { + settings.General.SyncListViewWithVideoWhilePlaying = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoContinueDelay"); + if (subNode != null) + { + settings.General.AutoContinueDelay = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoContinueOn"); + if (subNode != null) + { + settings.General.AutoContinueOn = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBackupSeconds"); + if (subNode != null) + { + settings.General.AutoBackupSeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBackupDeleteAfterMonths"); + if (subNode != null) + { + settings.General.AutoBackupDeleteAfterMonths = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellChecker"); + if (subNode != null) + { + settings.General.SpellChecker = subNode.InnerText; + } + + subNode = node.SelectSingleNode("AllowEditOfOriginalSubtitle"); + if (subNode != null) + { + settings.General.AllowEditOfOriginalSubtitle = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("PromptDeleteLines"); + if (subNode != null) + { + settings.General.PromptDeleteLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Undocked"); + if (subNode != null) + { + settings.General.Undocked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UndockedVideoPosition"); + if (subNode != null) + { + settings.General.UndockedVideoPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UndockedVideoFullscreen"); + if (subNode != null) + { + settings.General.UndockedVideoFullscreen = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UndockedWaveformPosition"); + if (subNode != null) + { + settings.General.UndockedWaveformPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UndockedVideoControlsPosition"); + if (subNode != null) + { + settings.General.UndockedVideoControlsPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformCenter"); + if (subNode != null) + { + settings.General.WaveformCenter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformUpdateIntervalMs"); + if (subNode != null) + { + settings.General.WaveformUpdateIntervalMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SmallDelayMilliseconds"); + if (subNode != null) + { + settings.General.SmallDelayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LargeDelayMilliseconds"); + if (subNode != null) + { + settings.General.LargeDelayMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowOriginalAsPreviewIfAvailable"); + if (subNode != null) + { + settings.General.ShowOriginalAsPreviewIfAvailable = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LastPacCodePage"); + if (subNode != null) + { + settings.General.LastPacCodePage = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OpenSubtitleExtraExtensions"); + if (subNode != null) + { + settings.General.OpenSubtitleExtraExtensions = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("ListViewColumnsRememberSize"); + if (subNode != null) + { + settings.General.ListViewColumnsRememberSize = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("ListViewNumberWidth"); + if (subNode != null) + { + settings.General.ListViewNumberWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewStartWidth"); + if (subNode != null) + { + settings.General.ListViewStartWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewEndWidth"); + if (subNode != null) + { + settings.General.ListViewEndWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewDurationWidth"); + if (subNode != null) + { + settings.General.ListViewDurationWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewCpsWidth"); + if (subNode != null) + { + settings.General.ListViewCpsWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewWpmWidth"); + if (subNode != null) + { + settings.General.ListViewWpmWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewGapWidth"); + if (subNode != null) + { + settings.General.ListViewGapWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewActorWidth"); + if (subNode != null) + { + settings.General.ListViewActorWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewRegionWidth"); + if (subNode != null) + { + settings.General.ListViewRegionWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewTextWidth"); + if (subNode != null) + { + settings.General.ListViewTextWidth = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DirectShowDoubleLoad"); + if (subNode != null) + { + settings.General.DirectShowDoubleLoad = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VlcWaveTranscodeSettings"); + if (subNode != null) + { + settings.General.VlcWaveTranscodeSettings = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("VlcLocation"); + if (subNode != null) + { + settings.General.VlcLocation = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("VlcLocationRelative"); + if (subNode != null) + { + settings.General.VlcLocationRelative = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MpvVideoOutputWindows"); + if (subNode != null) + { + settings.General.MpvVideoOutputWindows = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MpvVideoOutputLinux"); + if (subNode != null) + { + settings.General.MpvVideoOutputLinux = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MpvExtraOption"); + if (subNode != null) + { + settings.General.MpvExtraOption = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MpvLogging"); + if (subNode != null) + { + settings.General.MpvLogging = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("MpvHandlesPreviewText"); + if (subNode != null) + { + settings.General.MpvHandlesPreviewText = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("MpcHcLocation"); + if (subNode != null) + { + settings.General.MpcHcLocation = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MkvMergeLocation"); + if (subNode != null) + { + settings.General.MkvMergeLocation = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("UseFFmpegForWaveExtraction"); + if (subNode != null) + { + settings.General.UseFFmpegForWaveExtraction = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("FFmpegLocation"); + if (subNode != null) + { + settings.General.FFmpegLocation = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("FFmpegSceneThreshold"); + if (subNode != null) + { + settings.General.FFmpegSceneThreshold = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("UseTimeFormatHHMMSSFF"); + if (subNode != null) + { + settings.General.UseTimeFormatHHMMSSFF = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("SplitBehavior"); + if (subNode != null) + { + settings.General.SplitBehavior = Convert.ToInt32(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("SplitRemovesDashes"); + if (subNode != null) + { + settings.General.SplitRemovesDashes = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("ClearStatusBarAfterSeconds"); + if (subNode != null) + { + settings.General.ClearStatusBarAfterSeconds = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Company"); + if (subNode != null) + { + settings.General.Company = subNode.InnerText; + } + + subNode = node.SelectSingleNode("DisableVideoAutoLoading"); + if (subNode != null) + { + settings.General.DisableVideoAutoLoading = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("AllowVolumeBoost"); + if (subNode != null) + { + settings.General.AllowVolumeBoost = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("RightToLeftMode"); + if (subNode != null) + { + settings.General.RightToLeftMode = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("LastSaveAsFormat"); + if (subNode != null) + { + settings.General.LastSaveAsFormat = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("CheckForUpdates"); + if (subNode != null) + { + settings.General.CheckForUpdates = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("LastCheckForUpdates"); + if (subNode != null) + { + settings.General.LastCheckForUpdates = Convert.ToDateTime(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("AutoSave"); + if (subNode != null) + { + settings.General.AutoSave = Convert.ToBoolean(subNode.InnerText.Trim()); + } + + subNode = node.SelectSingleNode("PreviewAssaText"); + if (subNode != null) + { + settings.General.PreviewAssaText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ShowProgress"); + if (subNode != null) + { + settings.General.ShowProgress = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowNegativeDurationInfoOnSave"); + if (subNode != null) + { + settings.General.ShowNegativeDurationInfoOnSave = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowFormatRequiresUtf8Warning"); + if (subNode != null) + { + settings.General.ShowFormatRequiresUtf8Warning = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TitleBarAsterisk"); + if (subNode != null) + { + settings.General.TitleBarAsterisk = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("MeasurementConverterCloseOnInsert"); + if (subNode != null) + { + settings.General.MeasurementConverterCloseOnInsert = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MeasurementConverterCategories"); + if (subNode != null) + { + settings.General.MeasurementConverterCategories = subNode.InnerText.Trim(); + } + + subNode = node.SelectSingleNode("SubtitleTextBoxMaxHeight"); + if (subNode != null) + { + settings.General.SubtitleTextBoxMaxHeight = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UseDarkTheme"); + if (subNode != null) + { + settings.General.UseDarkTheme = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ShowBetaStuff"); + if (subNode != null) + { + settings.General.ShowBetaStuff = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NewEmptyDefaultMs"); + if (subNode != null) + { + settings.General.NewEmptyDefaultMs = Convert.ToInt32(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MoveVideo100Or500MsPlaySmallSample"); + if (subNode != null) + { + settings.General.MoveVideo100Or500MsPlaySmallSample = Convert.ToBoolean(subNode.InnerText.Trim(), CultureInfo.InvariantCulture); + } + + // Tools + node = doc.DocumentElement.SelectSingleNode("Tools"); + subNode = node.SelectSingleNode("StartSceneIndex"); + if (subNode != null) + { + settings.Tools.StartSceneIndex = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("EndSceneIndex"); + if (subNode != null) + { + settings.Tools.EndSceneIndex = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("VerifyPlaySeconds"); + if (subNode != null) + { + settings.Tools.VerifyPlaySeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixShortDisplayTimesAllowMoveStartTime"); + if (subNode != null) + { + settings.Tools.FixShortDisplayTimesAllowMoveStartTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveEmptyLinesBetweenText"); + if (subNode != null) + { + settings.Tools.RemoveEmptyLinesBetweenText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MusicSymbol"); + if (subNode != null) + { + settings.Tools.MusicSymbol = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MusicSymbolReplace"); + if (subNode != null) + { + settings.Tools.MusicSymbolReplace = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UnicodeSymbolsToInsert"); + if (subNode != null) + { + settings.Tools.UnicodeSymbolsToInsert = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SpellCheckAutoChangeNames"); + if (subNode != null) + { + settings.Tools.SpellCheckAutoChangeNames = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellCheckAutoChangeNamesUseSuggestions"); + if (subNode != null) + { + settings.Tools.SpellCheckAutoChangeNamesUseSuggestions = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellCheckOneLetterWords"); + if (subNode != null) + { + settings.Tools.CheckOneLetterWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellCheckEnglishAllowInQuoteAsIng"); + if (subNode != null) + { + settings.Tools.SpellCheckEnglishAllowInQuoteAsIng = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RememberUseAlwaysList"); + if (subNode != null) + { + settings.Tools.RememberUseAlwaysList = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpellCheckShowCompletedMessage"); + if (subNode != null) + { + settings.Tools.SpellCheckShowCompletedMessage = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OcrFixUseHardcodedRules"); + if (subNode != null) + { + settings.Tools.OcrFixUseHardcodedRules = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OcrBinaryImageCompareRgbThreshold"); + if (subNode != null) + { + settings.Tools.OcrBinaryImageCompareRgbThreshold = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OcrTesseract4RgbThreshold"); + if (subNode != null) + { + settings.Tools.OcrTesseract4RgbThreshold = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OcrAddLetterRow1"); + if (subNode != null) + { + settings.Tools.OcrAddLetterRow1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("OcrAddLetterRow2"); + if (subNode != null) + { + settings.Tools.OcrAddLetterRow2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("OcrTrainFonts"); + if (subNode != null) + { + settings.Tools.OcrTrainFonts = subNode.InnerText; + } + + subNode = node.SelectSingleNode("OcrTrainMergedLetters"); + if (subNode != null) + { + settings.Tools.OcrTrainMergedLetters = subNode.InnerText; + } + + subNode = node.SelectSingleNode("OcrTrainSrtFile"); + if (subNode != null) + { + settings.Tools.OcrTrainSrtFile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Interjections"); + if (subNode != null) + { + settings.Tools.Interjections = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MicrosoftBingApiId"); + if (subNode != null) + { + settings.Tools.MicrosoftBingApiId = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MicrosoftTranslatorApiKey"); + if (subNode != null) + { + settings.Tools.MicrosoftTranslatorApiKey = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MicrosoftTranslatorTokenEndpoint"); + if (subNode != null) + { + settings.Tools.MicrosoftTranslatorTokenEndpoint = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MicrosoftTranslatorCategory"); + if (subNode != null) + { + settings.Tools.MicrosoftTranslatorCategory = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GoogleApiV2Key"); + if (subNode != null) + { + settings.Tools.GoogleApiV2Key = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GoogleTranslateNoKeyWarningShow"); + if (subNode != null) + { + settings.Tools.GoogleTranslateNoKeyWarningShow = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("GoogleApiV2KeyInfoShow"); + if (subNode != null) + { + settings.Tools.GoogleApiV2KeyInfoShow = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("GoogleApiV1ChunkSize"); + if (subNode != null) + { + settings.Tools.GoogleApiV1ChunkSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("GoogleTranslateLastTargetLanguage"); + if (subNode != null) + { + settings.Tools.GoogleTranslateLastTargetLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("TranslateAllowSplit"); + if (subNode != null) + { + settings.Tools.TranslateAllowSplit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorDurationSmall"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorDurationSmall = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorDurationBig"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorDurationBig = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorLongLines"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorLongLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorWideLines"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorWideLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxMoreThanXLines"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxMoreThanXLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorOverlap"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorOverlap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxColorGap"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxColorGap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewSyntaxErrorColor"); + if (subNode != null) + { + settings.Tools.ListViewSyntaxErrorColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("ListViewUnfocusedSelectedColor"); + if (subNode != null) + { + settings.Tools.ListViewUnfocusedSelectedColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("ListViewShowColumnEndTime"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnEndTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnDuration"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnDuration = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnCharsPerSec"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnCharsPerSec = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnWordsPerMin"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnWordsPerMin = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnGap"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnGap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnActor"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnActor = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ListViewShowColumnRegion"); + if (subNode != null) + { + settings.Tools.ListViewShowColumnRegion = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SplitAdvanced"); + if (subNode != null) + { + settings.Tools.SplitAdvanced = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SplitOutputFolder"); + if (subNode != null) + { + settings.Tools.SplitOutputFolder = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SplitNumberOfParts"); + if (subNode != null) + { + settings.Tools.SplitNumberOfParts = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SplitVia"); + if (subNode != null) + { + settings.Tools.SplitVia = subNode.InnerText; + } + + subNode = node.SelectSingleNode("JoinCorrectTimeCodes"); + if (subNode != null) + { + settings.Tools.JoinCorrectTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("JoinAddMs"); + if (subNode != null) + { + settings.Tools.JoinAddMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NewEmptyTranslationText"); + if (subNode != null) + { + settings.Tools.NewEmptyTranslationText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertOutputFolder"); + if (subNode != null) + { + settings.Tools.BatchConvertOutputFolder = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertOverwriteExisting"); + if (subNode != null) + { + settings.Tools.BatchConvertOverwriteExisting = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertSaveInSourceFolder"); + if (subNode != null) + { + settings.Tools.BatchConvertSaveInSourceFolder = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertRemoveFormatting"); + if (subNode != null) + { + settings.Tools.BatchConvertRemoveFormatting = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertRemoveStyle"); + if (subNode != null) + { + settings.Tools.BatchConvertRemoveStyle = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertBridgeGaps"); + if (subNode != null) + { + settings.Tools.BatchConvertBridgeGaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertFixCasing"); + if (subNode != null) + { + settings.Tools.BatchConvertFixCasing = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertRemoveTextForHI"); + if (subNode != null) + { + settings.Tools.BatchConvertRemoveTextForHI = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertFixCommonErrors"); + if (subNode != null) + { + settings.Tools.BatchConvertFixCommonErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertMultipleReplace"); + if (subNode != null) + { + settings.Tools.BatchConvertMultipleReplace = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertFixRtl"); + if (subNode != null) + { + settings.Tools.BatchConvertFixRtl = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertFixRtlMode"); + if (subNode != null) + { + settings.Tools.BatchConvertFixRtlMode = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertAutoBalance"); + if (subNode != null) + { + settings.Tools.BatchConvertAutoBalance = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertSplitLongLines"); + if (subNode != null) + { + settings.Tools.BatchConvertSplitLongLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertSetMinDisplayTimeBetweenSubtitles"); + if (subNode != null) + { + settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertMergeShortLines"); + if (subNode != null) + { + settings.Tools.BatchConvertMergeShortLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertRemoveLineBreaks"); + if (subNode != null) + { + settings.Tools.BatchConvertRemoveLineBreaks = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertMergeSameText"); + if (subNode != null) + { + settings.Tools.BatchConvertMergeSameText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertMergeSameTimeCodes"); + if (subNode != null) + { + settings.Tools.BatchConvertMergeSameTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertChangeSpeed"); + if (subNode != null) + { + settings.Tools.BatchConvertChangeSpeed = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertAdjustDisplayDuration"); + if (subNode != null) + { + settings.Tools.BatchConvertAdjustDisplayDuration = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertApplyDurationLimits"); + if (subNode != null) + { + settings.Tools.BatchConvertApplyDurationLimits = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertDeleteLines"); + if (subNode != null) + { + settings.Tools.BatchConvertDeleteLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertChangeFrameRate"); + if (subNode != null) + { + settings.Tools.BatchConvertChangeFrameRate = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertOffsetTimeCodes"); + if (subNode != null) + { + settings.Tools.BatchConvertOffsetTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertLanguage"); + if (subNode != null) + { + settings.Tools.BatchConvertLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertFormat"); + if (subNode != null) + { + settings.Tools.BatchConvertFormat = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertAssStyles"); + if (subNode != null) + { + settings.Tools.BatchConvertAssStyles = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertSsaStyles"); + if (subNode != null) + { + settings.Tools.BatchConvertSsaStyles = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertUseStyleFromSource"); + if (subNode != null) + { + settings.Tools.BatchConvertUseStyleFromSource = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertExportCustomTextTemplate"); + if (subNode != null) + { + settings.Tools.BatchConvertExportCustomTextTemplate = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideXPosition"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideXPosition = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideYPosition"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideYPosition = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideBottomMargin"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideBottomMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideHAlign"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideHAlign = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideHMargin"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideHMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsOverrideScreenSize"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOverrideScreenSize = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsScreenWidth"); + if (subNode != null) + { + settings.Tools.BatchConvertTsScreenWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsScreenHeight"); + if (subNode != null) + { + settings.Tools.BatchConvertTsScreenHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsOnlyTeletext"); + if (subNode != null) + { + settings.Tools.BatchConvertTsOnlyTeletext = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BatchConvertTsFileNameAppend"); + if (subNode != null) + { + settings.Tools.BatchConvertTsFileNameAppend = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BatchConvertMkvLanguageCodeStyle"); + if (subNode != null) + { + settings.Tools.BatchConvertMkvLanguageCodeStyle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformBatchLastFolder"); + if (subNode != null) + { + settings.Tools.WaveformBatchLastFolder = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ModifySelectionRule"); + if (subNode != null) + { + settings.Tools.ModifySelectionRule = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ModifySelectionText"); + if (subNode != null) + { + settings.Tools.ModifySelectionText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ModifySelectionCaseSensitive"); + if (subNode != null) + { + settings.Tools.ModifySelectionCaseSensitive = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportVobSubFontName"); + if (subNode != null) + { + settings.Tools.ExportVobSubFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportVobSubFontSize"); + if (subNode != null) + { + settings.Tools.ExportVobSubFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportVobSubVideoResolution"); + if (subNode != null) + { + settings.Tools.ExportVobSubVideoResolution = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportVobSubSimpleRendering"); + if (subNode != null) + { + settings.Tools.ExportVobSubSimpleRendering = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportVobAntiAliasingWithTransparency"); + if (subNode != null) + { + settings.Tools.ExportVobAntiAliasingWithTransparency = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportVobSubLanguage"); + if (subNode != null) + { + settings.Tools.ExportVobSubLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportBluRayFontName"); + if (subNode != null) + { + settings.Tools.ExportBluRayFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportBluRayFontSize"); + if (subNode != null) + { + settings.Tools.ExportBluRayFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportFcpFontName"); + if (subNode != null) + { + settings.Tools.ExportFcpFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportFontNameOther"); + if (subNode != null) + { + settings.Tools.ExportFontNameOther = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportFcpFontSize"); + if (subNode != null) + { + settings.Tools.ExportFcpFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportFcpImageType"); + if (subNode != null) + { + settings.Tools.ExportFcpImageType = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportFcpPalNtsc"); + if (subNode != null) + { + settings.Tools.ExportFcpPalNtsc = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportBdnXmlImageType"); + if (subNode != null) + { + settings.Tools.ExportBdnXmlImageType = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportLastFontSize"); + if (subNode != null) + { + settings.Tools.ExportLastFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLastLineHeight"); + if (subNode != null) + { + settings.Tools.ExportLastLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLastBorderWidth"); + if (subNode != null) + { + settings.Tools.ExportLastBorderWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLastFontBold"); + if (subNode != null) + { + settings.Tools.ExportLastFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBluRayVideoResolution"); + if (subNode != null) + { + settings.Tools.ExportBluRayVideoResolution = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportFcpVideoResolution"); + if (subNode != null) + { + settings.Tools.ExportFcpVideoResolution = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportFontColor"); + if (subNode != null) + { + settings.Tools.ExportFontColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("ExportBorderColor"); + if (subNode != null) + { + settings.Tools.ExportBorderColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("ExportShadowColor"); + if (subNode != null) + { + settings.Tools.ExportShadowColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("ExportBoxBorderSize"); + if (subNode != null) + { + settings.Tools.ExportBoxBorderSize = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBottomMarginUnit"); + if (subNode != null) + { + settings.Tools.ExportBottomMarginUnit = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportBottomMarginPercent"); + if (subNode != null) + { + settings.Tools.ExportBottomMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBottomMarginPixels"); + if (subNode != null) + { + settings.Tools.ExportBottomMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLeftRightMarginUnit"); + if (subNode != null) + { + settings.Tools.ExportLeftRightMarginUnit = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportLeftRightMarginPercent"); + if (subNode != null) + { + settings.Tools.ExportLeftRightMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLeftRightMarginPixels"); + if (subNode != null) + { + settings.Tools.ExportLeftRightMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportHorizontalAlignment"); + if (subNode != null) + { + settings.Tools.ExportHorizontalAlignment = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBluRayBottomMarginPercent"); + if (subNode != null) + { + settings.Tools.ExportBluRayBottomMarginPercent = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBluRayBottomMarginPixels"); + if (subNode != null) + { + settings.Tools.ExportBluRayBottomMarginPixels = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBluRayShadow"); + if (subNode != null) + { + settings.Tools.ExportBluRayShadow = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportBluRayRemoveSmallGaps"); + if (subNode != null) + { + settings.Tools.ExportBluRayRemoveSmallGaps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportCdgBackgroundImage"); + if (subNode != null) + { + settings.Tools.ExportCdgBackgroundImage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportCdgMarginLeft"); + if (subNode != null) + { + settings.Tools.ExportCdgMarginLeft = Convert.ToInt32(subNode.InnerText); + } + + subNode = node.SelectSingleNode("ExportCdgMarginBottom"); + if (subNode != null) + { + settings.Tools.ExportCdgMarginBottom = Convert.ToInt32(subNode.InnerText); + } + + subNode = node.SelectSingleNode("ExportCdgFormat"); + if (subNode != null) + { + settings.Tools.ExportCdgFormat = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Export3DType"); + if (subNode != null) + { + settings.Tools.Export3DType = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Export3DDepth"); + if (subNode != null) + { + settings.Tools.Export3DDepth = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLastShadowTransparency"); + if (subNode != null) + { + settings.Tools.ExportLastShadowTransparency = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportLastFrameRate"); + if (subNode != null) + { + settings.Tools.ExportLastFrameRate = double.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportFullFrame"); + if (subNode != null) + { + settings.Tools.ExportFullFrame = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportFcpFullPathUrl"); + if (subNode != null) + { + settings.Tools.ExportFcpFullPathUrl = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportPenLineJoin"); + if (subNode != null) + { + settings.Tools.ExportPenLineJoin = subNode.InnerText; + } + + subNode = node.SelectSingleNode("FixCommonErrorsFixOverlapAllowEqualEndStart"); + if (subNode != null) + { + settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixCommonErrorsSkipStepOne"); + if (subNode != null) + { + settings.Tools.FixCommonErrorsSkipStepOne = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextSplitting"); + if (subNode != null) + { + settings.Tools.ImportTextSplitting = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ImportTextMergeShortLines"); + if (subNode != null) + { + settings.Tools.ImportTextMergeShortLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextLineBreak"); + if (subNode != null) + { + settings.Tools.ImportTextLineBreak = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ImportTextRemoveEmptyLines"); + if (subNode != null) + { + settings.Tools.ImportTextRemoveEmptyLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextAutoSplitAtBlank"); + if (subNode != null) + { + settings.Tools.ImportTextAutoSplitAtBlank = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextRemoveLinesNoLetters"); + if (subNode != null) + { + settings.Tools.ImportTextRemoveLinesNoLetters = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextGenerateTimeCodes"); + if (subNode != null) + { + settings.Tools.ImportTextGenerateTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextTakeTimeCodeFromFileName"); + if (subNode != null) + { + settings.Tools.ImportTextTakeTimeCodeFromFileName = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextAutoBreak"); + if (subNode != null) + { + settings.Tools.ImportTextAutoBreak = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextAutoBreakAtEnd"); + if (subNode != null) + { + settings.Tools.ImportTextAutoBreakAtEnd = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextGap"); + if (subNode != null) + { + settings.Tools.ImportTextGap = Convert.ToDecimal(subNode.InnerText); + } + + subNode = node.SelectSingleNode("ImportTextAutoSplitNumberOfLines"); + if (subNode != null) + { + settings.Tools.ImportTextAutoSplitNumberOfLines = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextAutoBreakAtEndMarkerText"); + if (subNode != null) + { + settings.Tools.ImportTextAutoBreakAtEndMarkerText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ImportTextDurationAuto"); + if (subNode != null) + { + settings.Tools.ImportTextDurationAuto = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ImportTextFixedDuration"); + if (subNode != null) + { + settings.Tools.ImportTextFixedDuration = Convert.ToDecimal(subNode.InnerText); + } + + subNode = node.SelectSingleNode("GenerateTimeCodePatterns"); + if (subNode != null) + { + settings.Tools.GenerateTimeCodePatterns = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GenerateTimeCodePatterns"); + if (subNode != null) + { + settings.Tools.GenerateTimeCodePatterns = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MusicSymbolStyle"); + if (subNode != null) + { + settings.Tools.MusicSymbolStyle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BridgeGapMilliseconds"); + if (subNode != null) + { + settings.Tools.BridgeGapMilliseconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportCustomTemplates"); + if (subNode != null) + { + settings.Tools.ExportCustomTemplates = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ChangeCasingChoice"); + if (subNode != null) + { + settings.Tools.ChangeCasingChoice = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UseNoLineBreakAfter"); + if (subNode != null) + { + settings.Tools.UseNoLineBreakAfter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NoLineBreakAfterEnglish"); + if (subNode != null) + { + settings.Tools.NoLineBreakAfterEnglish = subNode.InnerText.Replace(" ", " "); + } + + subNode = node.SelectSingleNode("ExportTextFormatText"); + if (subNode != null) + { + settings.Tools.ExportTextFormatText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportTextRemoveStyling"); + if (subNode != null) + { + settings.Tools.ExportTextRemoveStyling = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextShowLineNumbers"); + if (subNode != null) + { + settings.Tools.ExportTextShowLineNumbers = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextShowLineNumbersNewLine"); + if (subNode != null) + { + settings.Tools.ExportTextShowLineNumbersNewLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextShowTimeCodes"); + if (subNode != null) + { + settings.Tools.ExportTextShowTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextShowTimeCodesNewLine"); + if (subNode != null) + { + settings.Tools.ExportTextShowTimeCodesNewLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextNewLineAfterText"); + if (subNode != null) + { + settings.Tools.ExportTextNewLineAfterText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextNewLineBetweenSubtitles"); + if (subNode != null) + { + settings.Tools.ExportTextNewLineBetweenSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ExportTextTimeCodeFormat"); + if (subNode != null) + { + settings.Tools.ExportTextTimeCodeFormat = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ExportTextTimeCodeSeparator"); + if (subNode != null) + { + settings.Tools.ExportTextTimeCodeSeparator = subNode.InnerText; + } + + subNode = node.SelectSingleNode("VideoOffsetKeepTimeCodes"); + if (subNode != null) + { + settings.Tools.VideoOffsetKeepTimeCodes = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MoveStartEndMs"); + if (subNode != null) + { + settings.Tools.MoveStartEndMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AdjustDurationSeconds"); + if (subNode != null) + { + settings.Tools.AdjustDurationSeconds = Convert.ToDecimal(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AdjustDurationPercent"); + if (subNode != null) + { + settings.Tools.AdjustDurationPercent = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AdjustDurationLast"); + if (subNode != null) + { + settings.Tools.AdjustDurationLast = subNode.InnerText; + } + + subNode = node.SelectSingleNode("AdjustDurationExtendOnly"); + if (subNode != null) + { + settings.Tools.AdjustDurationExtendOnly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakCommaBreakEarly"); + if (subNode != null) + { + settings.Tools.AutoBreakCommaBreakEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakDashEarly"); + if (subNode != null) + { + settings.Tools.AutoBreakDashEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakLineEndingEarly"); + if (subNode != null) + { + settings.Tools.AutoBreakLineEndingEarly = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakUsePixelWidth"); + if (subNode != null) + { + settings.Tools.AutoBreakUsePixelWidth = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakPreferBottomHeavy"); + if (subNode != null) + { + settings.Tools.AutoBreakPreferBottomHeavy = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakPreferBottomPercent"); + if (subNode != null) + { + settings.Tools.AutoBreakPreferBottomPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ApplyMinimumDurationLimit"); + if (subNode != null) + { + settings.Tools.ApplyMinimumDurationLimit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ApplyMaximumDurationLimit"); + if (subNode != null) + { + settings.Tools.ApplyMaximumDurationLimit = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MergeShortLinesMaxGap"); + if (subNode != null) + { + settings.Tools.MergeShortLinesMaxGap = Convert.ToInt32(subNode.InnerText); + } + + subNode = node.SelectSingleNode("MergeShortLinesMaxChars"); + if (subNode != null) + { + settings.Tools.MergeShortLinesMaxChars = Convert.ToInt32(subNode.InnerText); + } + + subNode = node.SelectSingleNode("MergeShortLinesOnlyContinuous"); + if (subNode != null) + { + settings.Tools.MergeShortLinesOnlyContinuous = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ColumnPasteColumn"); + if (subNode != null) + { + settings.Tools.ColumnPasteColumn = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ColumnPasteOverwriteMode"); + if (subNode != null) + { + settings.Tools.ColumnPasteOverwriteMode = subNode.InnerText; + } + + subNode = node.SelectSingleNode("FindHistory"); + if (subNode != null) + { + foreach (XmlNode findItem in subNode.ChildNodes) + { + if (findItem.Name == "Text") + { + settings.Tools.FindHistory.Add(findItem.InnerText); + } + } + } + + // Subtitle + node = doc.DocumentElement.SelectSingleNode("SubtitleSettings"); + if (node != null) + { + subNode = node.SelectSingleNode("SsaFontName"); + if (subNode != null) + { + settings.SubtitleSettings.SsaFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("SsaFontSize"); + if (subNode != null) + { + settings.SubtitleSettings.SsaFontSize = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaFontColorArgb"); + if (subNode != null) + { + settings.SubtitleSettings.SsaFontColorArgb = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaFontBold"); + if (subNode != null) + { + settings.SubtitleSettings.SsaFontBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaOutline"); + if (subNode != null) + { + settings.SubtitleSettings.SsaOutline = Convert.ToDecimal(subNode.InnerText); + } + + subNode = node.SelectSingleNode("SsaShadow"); + if (subNode != null) + { + settings.SubtitleSettings.SsaShadow = Convert.ToDecimal(subNode.InnerText); + } + + subNode = node.SelectSingleNode("SsaOpaqueBox"); + if (subNode != null) + { + settings.SubtitleSettings.SsaOpaqueBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaMarginLeft"); + if (subNode != null) + { + settings.SubtitleSettings.SsaMarginLeft = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaMarginRight"); + if (subNode != null) + { + settings.SubtitleSettings.SsaMarginRight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SsaMarginTopBottom"); + if (subNode != null) + { + settings.SubtitleSettings.SsaMarginTopBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DCinemaFontFile"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaFontFile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("DCinemaFontSize"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DCinemaBottomMargin"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaBottomMargin = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DCinemaZPosition"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaZPosition = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DCinemaFadeUpTime"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaFadeUpTime = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DCinemaFadeDownTime"); + if (subNode != null) + { + settings.SubtitleSettings.DCinemaFadeDownTime = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SamiDisplayTwoClassesAsTwoSubtitles"); + if (subNode != null) + { + settings.SubtitleSettings.SamiDisplayTwoClassesAsTwoSubtitles = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SamiHtmlEncodeMode"); + if (subNode != null) + { + settings.SubtitleSettings.SamiHtmlEncodeMode = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TimedText10TimeCodeFormat"); + if (subNode != null) + { + settings.SubtitleSettings.TimedText10TimeCodeFormat = subNode.InnerText; + } + + subNode = node.SelectSingleNode("TimedText10ShowStyleAndLanguage"); + if (subNode != null) + { + settings.SubtitleSettings.TimedText10ShowStyleAndLanguage = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TimedText10FileExtension"); + if (subNode != null) + { + settings.SubtitleSettings.TimedText10FileExtension = subNode.InnerText; + } + + subNode = node.SelectSingleNode("FcpFontSize"); + if (subNode != null) + { + settings.SubtitleSettings.FcpFontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FcpFontName"); + if (subNode != null) + { + settings.SubtitleSettings.FcpFontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("EbuStlTeletextUseBox"); + if (subNode != null) + { + settings.SubtitleSettings.EbuStlTeletextUseBox = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("EbuStlTeletextUseDoubleHeight"); + if (subNode != null) + { + settings.SubtitleSettings.EbuStlTeletextUseDoubleHeight = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("EbuStlMarginTop"); + if (subNode != null) + { + settings.SubtitleSettings.EbuStlMarginTop = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("EbuStlMarginBottom"); + if (subNode != null) + { + settings.SubtitleSettings.EbuStlMarginBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("EbuStlNewLineRows"); + if (subNode != null) + { + settings.SubtitleSettings.EbuStlNewLineRows = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("PacVerticalTop"); + if (subNode != null) + { + settings.SubtitleSettings.PacVerticalTop = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("PacVerticalCenter"); + if (subNode != null) + { + settings.SubtitleSettings.PacVerticalCenter = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("PacVerticalBottom"); + if (subNode != null) + { + settings.SubtitleSettings.PacVerticalBottom = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DvdStudioProHeader"); + if (subNode != null) + { + settings.SubtitleSettings.DvdStudioProHeader = subNode.InnerText.TrimEnd() + Environment.NewLine; + } + + subNode = node.SelectSingleNode("TmpegEncXmlFontName"); + if (subNode != null) + { + settings.SubtitleSettings.TmpegEncXmlFontName = subNode.InnerText.TrimEnd(); + } + + subNode = node.SelectSingleNode("TmpegEncXmlFontHeight"); + if (subNode != null) + { + settings.SubtitleSettings.TmpegEncXmlFontHeight = subNode.InnerText.TrimEnd(); + } + + subNode = node.SelectSingleNode("TmpegEncXmlPosition"); + if (subNode != null) + { + settings.SubtitleSettings.TmpegEncXmlPosition = subNode.InnerText.TrimEnd(); + } + + subNode = node.SelectSingleNode("CheetahCaptionAlwayWriteEndTime"); + if (subNode != null) + { + settings.SubtitleSettings.CheetahCaptionAlwayWriteEndTime = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NuendoCharacterListFile"); + if (subNode != null) + { + settings.SubtitleSettings.NuendoCharacterListFile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Cavena890StartOfMessage"); + if (subNode != null) + { + settings.SubtitleSettings.Cavena890StartOfMessage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WebVttTimescale"); + if (subNode != null) + { + settings.SubtitleSettings.WebVttTimescale = long.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TeletextItalicFix"); + if (subNode != null) + { + settings.SubtitleSettings.TeletextItalicFix = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WebVttUseXTimestampMap"); + if (subNode != null) + { + settings.SubtitleSettings.WebVttUseXTimestampMap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + } + + // Proxy + node = doc.DocumentElement.SelectSingleNode("Proxy"); + subNode = node.SelectSingleNode("ProxyAddress"); + if (subNode != null) + { + settings.Proxy.ProxyAddress = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UserName"); + if (subNode != null) + { + settings.Proxy.UserName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Password"); + if (subNode != null) + { + settings.Proxy.Password = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Domain"); + if (subNode != null) + { + settings.Proxy.Domain = subNode.InnerText; + } + + // Fxp xml export settings + node = doc.DocumentElement.SelectSingleNode("FcpExportSettings"); + if (node != null) + { + subNode = node.SelectSingleNode("FontName"); + if (subNode != null) + { + settings.FcpExportSettings.FontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("FontSize"); + if (subNode != null) + { + settings.FcpExportSettings.FontSize = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Alignment"); + if (subNode != null) + { + settings.FcpExportSettings.Alignment = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Baseline"); + if (subNode != null) + { + settings.FcpExportSettings.Baseline = int.Parse(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Color"); + if (subNode != null) + { + settings.FcpExportSettings.Color = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + } + + // Word List + node = doc.DocumentElement.SelectSingleNode("WordLists"); + subNode = node.SelectSingleNode("LastLanguage"); + if (subNode != null) + { + settings.WordLists.LastLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Names"); + if (subNode != null) + { + settings.WordLists.NamesUrl = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UseOnlineNames"); + if (subNode != null) + { + settings.WordLists.UseOnlineNames = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + // Fix Common Errors + node = doc.DocumentElement.SelectSingleNode("CommonErrors"); + subNode = node.SelectSingleNode("StartPosition"); + if (subNode != null) + { + settings.CommonErrors.StartPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("StartSize"); + if (subNode != null) + { + settings.CommonErrors.StartSize = subNode.InnerText; + } + + subNode = node.SelectSingleNode("EmptyLinesTicked"); + if (subNode != null) + { + settings.CommonErrors.EmptyLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("OverlappingDisplayTimeTicked"); + if (subNode != null) + { + settings.CommonErrors.OverlappingDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TooShortDisplayTimeTicked"); + if (subNode != null) + { + settings.CommonErrors.TooShortDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TooLongDisplayTimeTicked"); + if (subNode != null) + { + settings.CommonErrors.TooLongDisplayTimeTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TooShortGapTicked"); + if (subNode != null) + { + settings.CommonErrors.TooShortGapTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("InvalidItalicTagsTicked"); + if (subNode != null) + { + settings.CommonErrors.InvalidItalicTagsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BreakLongLinesTicked"); + if (subNode != null) + { + settings.CommonErrors.BreakLongLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MergeShortLinesTicked"); + if (subNode != null) + { + settings.CommonErrors.MergeShortLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MergeShortLinesAllTicked"); + if (subNode != null) + { + settings.CommonErrors.MergeShortLinesAllTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UnneededSpacesTicked"); + if (subNode != null) + { + settings.CommonErrors.UnneededSpacesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UnneededPeriodsTicked"); + if (subNode != null) + { + settings.CommonErrors.UnneededPeriodsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixCommasTicked"); + if (subNode != null) + { + settings.CommonErrors.FixCommasTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("MissingSpacesTicked"); + if (subNode != null) + { + settings.CommonErrors.MissingSpacesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AddMissingQuotesTicked"); + if (subNode != null) + { + settings.CommonErrors.AddMissingQuotesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("Fix3PlusLinesTicked"); + if (subNode != null) + { + settings.CommonErrors.Fix3PlusLinesTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixHyphensTicked"); + if (subNode != null) + { + settings.CommonErrors.FixHyphensTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixHyphensRemoveSingleLineTicked"); + if (subNode != null) + { + settings.CommonErrors.FixHyphensRemoveSingleLineTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UppercaseIInsideLowercaseWordTicked"); + if (subNode != null) + { + settings.CommonErrors.UppercaseIInsideLowercaseWordTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DoubleApostropheToQuoteTicked"); + if (subNode != null) + { + settings.CommonErrors.DoubleApostropheToQuoteTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AddPeriodAfterParagraphTicked"); + if (subNode != null) + { + settings.CommonErrors.AddPeriodAfterParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterParagraphTicked"); + if (subNode != null) + { + settings.CommonErrors.StartWithUppercaseLetterAfterParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterPeriodInsideParagraphTicked"); + if (subNode != null) + { + settings.CommonErrors.StartWithUppercaseLetterAfterPeriodInsideParagraphTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("StartWithUppercaseLetterAfterColonTicked"); + if (subNode != null) + { + settings.CommonErrors.StartWithUppercaseLetterAfterColonTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AloneLowercaseIToUppercaseIEnglishTicked"); + if (subNode != null) + { + settings.CommonErrors.AloneLowercaseIToUppercaseIEnglishTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixOcrErrorsViaReplaceListTicked"); + if (subNode != null) + { + settings.CommonErrors.FixOcrErrorsViaReplaceListTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveSpaceBetweenNumberTicked"); + if (subNode != null) + { + settings.CommonErrors.RemoveSpaceBetweenNumberTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixDialogsOnOneLineTicked"); + if (subNode != null) + { + settings.CommonErrors.FixDialogsOnOneLineTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TurkishAnsiTicked"); + if (subNode != null) + { + settings.CommonErrors.TurkishAnsiTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DanishLetterITicked"); + if (subNode != null) + { + settings.CommonErrors.DanishLetterITicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpanishInvertedQuestionAndExclamationMarksTicked"); + if (subNode != null) + { + settings.CommonErrors.SpanishInvertedQuestionAndExclamationMarksTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixDoubleDashTicked"); + if (subNode != null) + { + settings.CommonErrors.FixDoubleDashTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixDoubleGreaterThanTicked"); + if (subNode != null) + { + settings.CommonErrors.FixDoubleGreaterThanTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixEllipsesStartTicked"); + if (subNode != null) + { + settings.CommonErrors.FixEllipsesStartTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixMissingOpenBracketTicked"); + if (subNode != null) + { + settings.CommonErrors.FixMissingOpenBracketTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixMusicNotationTicked"); + if (subNode != null) + { + settings.CommonErrors.FixMusicNotationTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixContinuationStyleTicked"); + if (subNode != null) + { + settings.CommonErrors.FixContinuationStyleTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixUnnecessaryLeadingDotsTicked"); + if (subNode != null) + { + settings.CommonErrors.FixUnnecessaryLeadingDotsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NormalizeStringsTicked"); + if (subNode != null) + { + settings.CommonErrors.NormalizeStringsTicked = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DefaultFixes"); + if (subNode != null) + { + settings.CommonErrors.DefaultFixes = subNode.InnerText; + } + + // Video Controls + node = doc.DocumentElement.SelectSingleNode("VideoControls"); + subNode = node.SelectSingleNode("CustomSearchText1"); + if (subNode != null) + { + settings.VideoControls.CustomSearchText1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchText2"); + if (subNode != null) + { + settings.VideoControls.CustomSearchText2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchText3"); + if (subNode != null) + { + settings.VideoControls.CustomSearchText3 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchText4"); + if (subNode != null) + { + settings.VideoControls.CustomSearchText4 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchText5"); + if (subNode != null) + { + settings.VideoControls.CustomSearchText5 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl1"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl1"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl2"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl3"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl3 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl4"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl4 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CustomSearchUrl5"); + if (subNode != null) + { + settings.VideoControls.CustomSearchUrl5 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("LastActiveTab"); + if (subNode != null) + { + settings.VideoControls.LastActiveTab = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformDrawGrid"); + if (subNode != null) + { + settings.VideoControls.WaveformDrawGrid = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformDrawCps"); + if (subNode != null) + { + settings.VideoControls.WaveformDrawCps = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformDrawWpm"); + if (subNode != null) + { + settings.VideoControls.WaveformDrawWpm = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformAllowOverlap"); + if (subNode != null) + { + settings.VideoControls.WaveformAllowOverlap = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformFocusOnMouseEnter"); + if (subNode != null) + { + settings.VideoControls.WaveformFocusOnMouseEnter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformListViewFocusOnMouseEnter"); + if (subNode != null) + { + settings.VideoControls.WaveformListViewFocusOnMouseEnter = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformSingleClickSelect"); + if (subNode != null) + { + settings.VideoControls.WaveformSingleClickSelect = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformSnapToSceneChanges"); + if (subNode != null) + { + settings.VideoControls.WaveformSnapToSceneChanges = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformSetVideoPositionOnMoveStartEnd"); + if (subNode != null) + { + settings.VideoControls.WaveformSetVideoPositionOnMoveStartEnd = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformBorderHitMs"); + if (subNode != null) + { + settings.VideoControls.WaveformBorderHitMs = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformGridColor"); + if (subNode != null) + { + settings.VideoControls.WaveformGridColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformColor"); + if (subNode != null) + { + settings.VideoControls.WaveformColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformSelectedColor"); + if (subNode != null) + { + settings.VideoControls.WaveformSelectedColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformBackgroundColor"); + if (subNode != null) + { + settings.VideoControls.WaveformBackgroundColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformTextColor"); + if (subNode != null) + { + settings.VideoControls.WaveformTextColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformCursorColor"); + if (subNode != null) + { + settings.VideoControls.WaveformCursorColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformChaptersColor"); + if (subNode != null) + { + settings.VideoControls.WaveformChaptersColor = Color.FromArgb(int.Parse(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("WaveformTextSize"); + if (subNode != null) + { + settings.VideoControls.WaveformTextSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformTextBold"); + if (subNode != null) + { + settings.VideoControls.WaveformTextBold = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformDoubleClickOnNonParagraphAction"); + if (subNode != null) + { + settings.VideoControls.WaveformDoubleClickOnNonParagraphAction = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformRightClickOnNonParagraphAction"); + if (subNode != null) + { + settings.VideoControls.WaveformRightClickOnNonParagraphAction = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformMouseWheelScrollUpIsForward"); + if (subNode != null) + { + settings.VideoControls.WaveformMouseWheelScrollUpIsForward = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("GenerateSpectrogram"); + if (subNode != null) + { + settings.VideoControls.GenerateSpectrogram = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("SpectrogramAppearance"); + if (subNode != null) + { + settings.VideoControls.SpectrogramAppearance = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformMinimumSampleRate"); + if (subNode != null) + { + settings.VideoControls.WaveformMinimumSampleRate = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformSeeksSilenceDurationSeconds"); + if (subNode != null) + { + settings.VideoControls.WaveformSeeksSilenceDurationSeconds = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformSeeksSilenceMaxVolume"); + if (subNode != null) + { + settings.VideoControls.WaveformSeeksSilenceMaxVolume = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformUnwrapText"); + if (subNode != null) + { + settings.VideoControls.WaveformUnwrapText = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("WaveformHideWpmCpsLabels"); + if (subNode != null) + { + settings.VideoControls.WaveformHideWpmCpsLabels = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + // Network + node = doc.DocumentElement.SelectSingleNode("NetworkSettings"); + if (node != null) + { + subNode = node.SelectSingleNode("SessionKey"); + if (subNode != null) + { + settings.NetworkSettings.SessionKey = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UserName"); + if (subNode != null) + { + settings.NetworkSettings.UserName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WebServiceUrl"); + if (subNode != null) + { + settings.NetworkSettings.WebServiceUrl = subNode.InnerText; + } + + subNode = node.SelectSingleNode("PollIntervalSeconds"); + if (subNode != null) + { + settings.NetworkSettings.PollIntervalSeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("NewMessageSound"); + if (subNode != null) + { + settings.NetworkSettings.NewMessageSound = subNode.InnerText; + } + } + + // VobSub Ocr + node = doc.DocumentElement.SelectSingleNode("VobSubOcr"); + subNode = node.SelectSingleNode("XOrMorePixelsMakesSpace"); + if (subNode != null) + { + settings.VobSubOcr.XOrMorePixelsMakesSpace = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AllowDifferenceInPercent"); + if (subNode != null) + { + settings.VobSubOcr.AllowDifferenceInPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BlurayAllowDifferenceInPercent"); + if (subNode != null) + { + settings.VobSubOcr.BlurayAllowDifferenceInPercent = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LastImageCompareFolder"); + if (subNode != null) + { + settings.VobSubOcr.LastImageCompareFolder = subNode.InnerText; + } + + subNode = node.SelectSingleNode("LastModiLanguageId"); + if (subNode != null) + { + settings.VobSubOcr.LastModiLanguageId = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LastOcrMethod"); + if (subNode != null) + { + settings.VobSubOcr.LastOcrMethod = subNode.InnerText; + } + + subNode = node.SelectSingleNode("TesseractLastLanguage"); + if (subNode != null) + { + settings.VobSubOcr.TesseractLastLanguage = subNode.InnerText; + } + + subNode = node.SelectSingleNode("UseTesseractFallback"); + if (subNode != null) + { + settings.VobSubOcr.UseTesseractFallback = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UseItalicsInTesseract"); + if (subNode != null) + { + settings.VobSubOcr.UseItalicsInTesseract = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TesseractEngineMode"); + if (subNode != null) + { + settings.VobSubOcr.TesseractEngineMode = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UseMusicSymbolsInTesseract"); + if (subNode != null) + { + settings.VobSubOcr.UseMusicSymbolsInTesseract = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RightToLeft"); + if (subNode != null) + { + settings.VobSubOcr.RightToLeft = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("TopToBottom"); + if (subNode != null) + { + settings.VobSubOcr.TopToBottom = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("DefaultMillisecondsForUnknownDurations"); + if (subNode != null) + { + settings.VobSubOcr.DefaultMillisecondsForUnknownDurations = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("FixOcrErrors"); + if (subNode != null) + { + settings.VobSubOcr.FixOcrErrors = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("PromptForUnknownWords"); + if (subNode != null) + { + settings.VobSubOcr.PromptForUnknownWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("GuessUnknownWords"); + if (subNode != null) + { + settings.VobSubOcr.GuessUnknownWords = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("AutoBreakSubtitleIfMoreThanTwoLines"); + if (subNode != null) + { + settings.VobSubOcr.AutoBreakSubtitleIfMoreThanTwoLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("ItalicFactor"); + if (subNode != null) + { + settings.VobSubOcr.ItalicFactor = Convert.ToDouble(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrDraw"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrDraw = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrMinHeightSplit"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrMinHeightSplit = Convert.ToInt32(subNode.InnerText); + } + + subNode = node.SelectSingleNode("LineOcrAdvancedItalic"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrAdvancedItalic = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrLastLanguages"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrLastLanguages = subNode.InnerText; + } + + subNode = node.SelectSingleNode("LineOcrLastSpellCheck"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrLastSpellCheck = subNode.InnerText; + } + + subNode = node.SelectSingleNode("LineOcrLinesToAutoGuess"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrLinesToAutoGuess = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrMinLineHeight"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrMinLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrMaxLineHeight"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrMaxLineHeight = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LineOcrMaxErrorPixels"); + if (subNode != null) + { + settings.VobSubOcr.LineOcrMaxErrorPixels = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LastBinaryImageCompareDb"); + if (subNode != null) + { + settings.VobSubOcr.LastBinaryImageCompareDb = subNode.InnerText; + } + + subNode = node.SelectSingleNode("LastBinaryImageSpellCheck"); + if (subNode != null) + { + settings.VobSubOcr.LastBinaryImageSpellCheck = subNode.InnerText; + } + + subNode = node.SelectSingleNode("BinaryAutoDetectBestDb"); + if (subNode != null) + { + settings.VobSubOcr.BinaryAutoDetectBestDb = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("LastTesseractSpellCheck"); + if (subNode != null) + { + settings.VobSubOcr.LastTesseractSpellCheck = subNode.InnerText; + } + + subNode = node.SelectSingleNode("CaptureTopAlign"); + if (subNode != null) + { + settings.VobSubOcr.CaptureTopAlign = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UnfocusedAttentionBlinkCount"); + if (subNode != null) + { + settings.VobSubOcr.UnfocusedAttentionBlinkCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("UnfocusedAttentionPlaySoundCount"); + if (subNode != null) + { + settings.VobSubOcr.UnfocusedAttentionPlaySoundCount = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + foreach (XmlNode groupNode in doc.DocumentElement.SelectNodes("MultipleSearchAndReplaceGroups/Group")) + { + var group = new MultipleSearchAndReplaceGroup + { + Rules = new List() + }; + subNode = groupNode.SelectSingleNode("Name"); + if (subNode != null) + { + group.Name = subNode.InnerText; + } + + subNode = groupNode.SelectSingleNode("Enabled"); + if (subNode != null) + { + group.Enabled = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + settings.MultipleSearchAndReplaceGroups.Add(group); + + foreach (XmlNode listNode in groupNode.SelectNodes("Rule")) + { + var item = new MultipleSearchAndReplaceSetting(); + subNode = listNode.SelectSingleNode("Enabled"); + if (subNode != null) + { + item.Enabled = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = listNode.SelectSingleNode("FindWhat"); + if (subNode != null) + { + item.FindWhat = subNode.InnerText; + } + + subNode = listNode.SelectSingleNode("ReplaceWith"); + if (subNode != null) + { + item.ReplaceWith = subNode.InnerText; + } + + subNode = listNode.SelectSingleNode("SearchType"); + if (subNode != null) + { + item.SearchType = subNode.InnerText; + } + + subNode = listNode.SelectSingleNode("Description"); + if (subNode != null) + { + item.Description = subNode.InnerText; + } + + group.Rules.Add(item); + } + } + + // Shortcuts + ReadShortcuts(doc, settings.Shortcuts); + + // Remove text for Hearing Impaired + node = doc.DocumentElement.SelectSingleNode("RemoveTextForHearingImpaired"); + if (node != null) + { + subNode = node.SelectSingleNode("RemoveTextBetweenBrackets"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenBrackets = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBetweenParentheses"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenParentheses = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBetweenCurlyBrackets"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenCurlyBrackets = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBetweenQuestionMarks"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenQuestionMarks = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBetweenCustom"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustom = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBetweenCustomBefore"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomBefore = subNode.InnerText; + } + + subNode = node.SelectSingleNode("RemoveTextBetweenCustomAfter"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomAfter = subNode.InnerText; + } + + subNode = node.SelectSingleNode("RemoveTextBetweenOnlySeparateLines"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBetweenOnlySeparateLines = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBeforeColon"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBeforeColon = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBeforeColonOnlyIfUppercase"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyIfUppercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveTextBeforeColonOnlyOnSeparateLine"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyOnSeparateLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveIfAllUppercase"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveIfAllUppercase = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveInterjections"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveInterjections = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveInterjectionsOnlyOnSeparateLine"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveInterjectionsOnlyOnSeparateLine = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveIfContains"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveIfContains = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("RemoveIfContainsText"); + if (subNode != null) + { + settings.RemoveTextForHearingImpaired.RemoveIfContainsText = subNode.InnerText; + } + } + + // Subtitle Beaming + node = doc.DocumentElement.SelectSingleNode("SubtitleBeaming"); + if (node != null) + { + subNode = node.SelectSingleNode("FontName"); + if (subNode != null) + { + settings.SubtitleBeaming.FontName = subNode.InnerText; + } + + subNode = node.SelectSingleNode("FontColor"); + if (subNode != null) + { + settings.SubtitleBeaming.FontColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("FontSize"); + if (subNode != null) + { + settings.SubtitleBeaming.FontSize = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + + subNode = node.SelectSingleNode("BorderColor"); + if (subNode != null) + { + settings.SubtitleBeaming.BorderColor = Color.FromArgb(Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture)); + } + + subNode = node.SelectSingleNode("BorderWidth"); + if (subNode != null) + { + settings.SubtitleBeaming.BorderWidth = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture); + } + } + + if (profileCount == 0) + { + settings.General.CurrentProfile = "Default"; + settings.General.Profiles = new List(); + settings.General.Profiles.Add(new RulesProfile + { + Name = settings.General.CurrentProfile, + SubtitleLineMaximumLength = settings.General.SubtitleLineMaximumLength, + MaxNumberOfLines = settings.General.MaxNumberOfLines, + MergeLinesShorterThan = settings.General.MergeLinesShorterThan, + SubtitleMaximumCharactersPerSeconds = (decimal)settings.General.SubtitleMaximumCharactersPerSeconds, + SubtitleOptimalCharactersPerSeconds = (decimal)settings.General.SubtitleOptimalCharactersPerSeconds, + SubtitleMaximumDisplayMilliseconds = settings.General.SubtitleMaximumDisplayMilliseconds, + SubtitleMinimumDisplayMilliseconds = settings.General.SubtitleMinimumDisplayMilliseconds, + SubtitleMaximumWordsPerMinute = (decimal)settings.General.SubtitleMaximumWordsPerMinute, + CpsIncludesSpace = !settings.General.CharactersPerSecondsIgnoreWhiteSpace, + MinimumMillisecondsBetweenLines = settings.General.MinimumMillisecondsBetweenLines, + DialogStyle = settings.General.DialogStyle, + ContinuationStyle = settings.General.ContinuationStyle + }); + GeneralSettings.AddExtraProfiles(settings.General.Profiles); + } + + return settings; + } + + internal static void ReadShortcuts(XmlDocument doc, Shortcuts shortcuts) + { + XmlNode node; + XmlNode subNode; + node = doc.DocumentElement.SelectSingleNode("Shortcuts"); + if (node != null) + { + subNode = node.SelectSingleNode("GeneralGoToFirstSelectedLine"); + if (subNode != null) + { + shortcuts.GeneralGoToFirstSelectedLine = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextEmptyLine"); + if (subNode != null) + { + shortcuts.GeneralGoToNextEmptyLine = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLines"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLines = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndUnbreak"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLinesAndUnbreak = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndAutoBreak"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLinesAndAutoBreak = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLinesAndUnbreakCjk"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLinesAndUnbreakCjk = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLinesOnlyFirstText"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLinesOnlyFirstText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeSelectedLinesBilingual"); + if (subNode != null) + { + shortcuts.GeneralMergeSelectedLinesBilingual = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeWithNext"); + if (subNode != null) + { + shortcuts.GeneralMergeWithNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeWithPrevious"); + if (subNode != null) + { + shortcuts.GeneralMergeWithPrevious = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralToggleTranslationMode"); + if (subNode != null) + { + shortcuts.GeneralToggleTranslationMode = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralSwitchOriginalAndTranslation"); + if (subNode != null) + { + shortcuts.GeneralSwitchOriginalAndTranslation = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralMergeOriginalAndTranslation"); + if (subNode != null) + { + shortcuts.GeneralMergeOriginalAndTranslation = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextSubtitle"); + if (subNode != null) + { + shortcuts.GeneralGoToNextSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextSubtitleCursorAtEnd"); + if (subNode != null) + { + shortcuts.GeneralGoToNextSubtitleCursorAtEnd = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToPrevSubtitle"); + if (subNode != null) + { + shortcuts.GeneralGoToPrevSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToEndOfCurrentSubtitle"); + if (subNode != null) + { + shortcuts.GeneralGoToEndOfCurrentSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToStartOfCurrentSubtitle"); + if (subNode != null) + { + shortcuts.GeneralGoToStartOfCurrentSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextSubtitleAndFocusVideo"); + if (subNode != null) + { + shortcuts.GeneralGoToNextSubtitleAndFocusVideo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToPrevSubtitleAndPlay"); + if (subNode != null) + { + shortcuts.GeneralGoToPrevSubtitleAndPlay = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextSubtitleAndPlay"); + if (subNode != null) + { + shortcuts.GeneralGoToNextSubtitleAndPlay = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToPreviousSubtitleAndFocusVideo"); + if (subNode != null) + { + shortcuts.GeneralGoToPreviousSubtitleAndFocusVideo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralAutoCalcCurrentDuration"); + if (subNode != null) + { + shortcuts.GeneralAutoCalcCurrentDuration = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralPlayFirstSelected"); + if (subNode != null) + { + shortcuts.GeneralPlayFirstSelected = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralHelp"); + if (subNode != null) + { + shortcuts.GeneralHelp = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralUnbrekNoSpace"); + if (subNode != null) + { + shortcuts.GeneralUnbrekNoSpace = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralToggleBookmarks"); + if (subNode != null) + { + shortcuts.GeneralToggleBookmarks = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralToggleBookmarksWithText"); + if (subNode != null) + { + shortcuts.GeneralToggleBookmarksWithText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralClearBookmarks"); + if (subNode != null) + { + shortcuts.GeneralClearBookmarks = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToBookmark"); + if (subNode != null) + { + shortcuts.GeneralGoToBookmark = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToPreviousBookmark"); + if (subNode != null) + { + shortcuts.GeneralGoToPreviousBookmark = subNode.InnerText; + } + + subNode = node.SelectSingleNode("GeneralGoToNextBookmark"); + if (subNode != null) + { + shortcuts.GeneralGoToNextBookmark = subNode.InnerText; + } + + subNode = node.SelectSingleNode("ChooseProfile"); + if (subNode != null) + { + shortcuts.ChooseProfile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("DuplicateLine"); + if (subNode != null) + { + shortcuts.DuplicateLine = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileNew"); + if (subNode != null) + { + shortcuts.MainFileNew = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileOpen"); + if (subNode != null) + { + shortcuts.MainFileOpen = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileOpenKeepVideo"); + if (subNode != null) + { + shortcuts.MainFileOpenKeepVideo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileSave"); + if (subNode != null) + { + shortcuts.MainFileSave = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileSaveOriginal"); + if (subNode != null) + { + shortcuts.MainFileSaveOriginal = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileSaveOriginalAs"); + if (subNode != null) + { + shortcuts.MainFileSaveOriginalAs = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileSaveAs"); + if (subNode != null) + { + shortcuts.MainFileSaveAs = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileSaveAll"); + if (subNode != null) + { + shortcuts.MainFileSaveAll = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileCloseOriginal"); + if (subNode != null) + { + shortcuts.MainFileCloseOriginal = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileCompare"); + if (subNode != null) + { + shortcuts.MainFileCompare = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileOpenOriginal"); + if (subNode != null) + { + shortcuts.MainFileOpenOriginal = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileImportPlainText"); + if (subNode != null) + { + shortcuts.MainFileImportPlainText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileImportTimeCodes"); + if (subNode != null) + { + shortcuts.MainFileImportTimeCodes = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileExportEbu"); + if (subNode != null) + { + shortcuts.MainFileExportEbu = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileExportPac"); + if (subNode != null) + { + shortcuts.MainFileExportPac = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainFileExportPlainText"); + if (subNode != null) + { + shortcuts.MainFileExportPlainText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditUndo"); + if (subNode != null) + { + shortcuts.MainEditUndo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditRedo"); + if (subNode != null) + { + shortcuts.MainEditRedo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditFind"); + if (subNode != null) + { + shortcuts.MainEditFind = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditFindNext"); + if (subNode != null) + { + shortcuts.MainEditFindNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditReplace"); + if (subNode != null) + { + shortcuts.MainEditReplace = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditMultipleReplace"); + if (subNode != null) + { + shortcuts.MainEditMultipleReplace = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditGoToLineNumber"); + if (subNode != null) + { + shortcuts.MainEditGoToLineNumber = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditRightToLeft"); + if (subNode != null) + { + shortcuts.MainEditRightToLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsFixCommonErrors"); + if (subNode != null) + { + shortcuts.MainToolsFixCommonErrors = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsFixCommonErrorsPreview"); + if (subNode != null) + { + shortcuts.MainToolsFixCommonErrorsPreview = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMergeShortLines"); + if (subNode != null) + { + shortcuts.MainToolsMergeShortLines = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMergeDuplicateText"); + if (subNode != null) + { + shortcuts.MainToolsMergeDuplicateText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMergeSameTimeCodes"); + if (subNode != null) + { + shortcuts.MainToolsMergeSameTimeCodes = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMakeEmptyFromCurrent"); + if (subNode != null) + { + shortcuts.MainToolsMakeEmptyFromCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsSplitLongLines"); + if (subNode != null) + { + shortcuts.MainToolsSplitLongLines = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsDurationsBridgeGap"); + if (subNode != null) + { + shortcuts.MainToolsDurationsBridgeGap = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMinimumDisplayTimeBetweenParagraphs"); + if (subNode != null) + { + shortcuts.MainToolsMinimumDisplayTimeBetweenParagraphs = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsRenumber"); + if (subNode != null) + { + shortcuts.MainToolsRenumber = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsRemoveTextForHI"); + if (subNode != null) + { + shortcuts.MainToolsRemoveTextForHI = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsChangeCasing"); + if (subNode != null) + { + shortcuts.MainToolsChangeCasing = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsAutoDuration"); + if (subNode != null) + { + shortcuts.MainToolsAutoDuration = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsBatchConvert"); + if (subNode != null) + { + shortcuts.MainToolsBatchConvert = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsMeasurementConverter"); + if (subNode != null) + { + shortcuts.MainToolsMeasurementConverter = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsSplit"); + if (subNode != null) + { + shortcuts.MainToolsSplit = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsAppend"); + if (subNode != null) + { + shortcuts.MainToolsAppend = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsJoin"); + if (subNode != null) + { + shortcuts.MainToolsJoin = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToolsBeamer"); + if (subNode != null) + { + shortcuts.MainToolsBeamer = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditToggleTranslationOriginalInPreviews"); + if (subNode != null) + { + shortcuts.MainEditToggleTranslationOriginalInPreviews = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditInverseSelection"); + if (subNode != null) + { + shortcuts.MainEditInverseSelection = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditModifySelection"); + if (subNode != null) + { + shortcuts.MainEditModifySelection = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoOpen"); + if (subNode != null) + { + shortcuts.MainVideoOpen = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoClose"); + if (subNode != null) + { + shortcuts.MainVideoClose = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoPause"); + if (subNode != null) + { + shortcuts.MainVideoPause = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoPlayFromJustBefore"); + if (subNode != null) + { + shortcuts.MainVideoPlayFromJustBefore = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoPlayPauseToggle"); + if (subNode != null) + { + shortcuts.MainVideoPlayPauseToggle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoShowHideVideo"); + if (subNode != null) + { + shortcuts.MainVideoShowHideVideo = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoFoucsSetVideoPosition"); + if (subNode != null) + { + shortcuts.MainVideoFoucsSetVideoPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoToggleVideoControls"); + if (subNode != null) + { + shortcuts.MainVideoToggleVideoControls = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1FrameLeft"); + if (subNode != null) + { + shortcuts.MainVideo1FrameLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1FrameRight"); + if (subNode != null) + { + shortcuts.MainVideo1FrameRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1FrameLeftWithPlay"); + if (subNode != null) + { + shortcuts.MainVideo1FrameLeftWithPlay = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1FrameRightWithPlay"); + if (subNode != null) + { + shortcuts.MainVideo1FrameRightWithPlay = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo100MsLeft"); + if (subNode != null) + { + shortcuts.MainVideo100MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo100MsRight"); + if (subNode != null) + { + shortcuts.MainVideo100MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo500MsLeft"); + if (subNode != null) + { + shortcuts.MainVideo500MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo500MsRight"); + if (subNode != null) + { + shortcuts.MainVideo500MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1000MsLeft"); + if (subNode != null) + { + shortcuts.MainVideo1000MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo1000MsRight"); + if (subNode != null) + { + shortcuts.MainVideo1000MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo5000MsLeft"); + if (subNode != null) + { + shortcuts.MainVideo5000MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo5000MsRight"); + if (subNode != null) + { + shortcuts.MainVideo5000MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoXSMsLeft"); + if (subNode != null) + { + shortcuts.MainVideoXSMsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoXSMsRight"); + if (subNode != null) + { + shortcuts.MainVideoXSMsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoXLMsLeft"); + if (subNode != null) + { + shortcuts.MainVideoXLMsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoXLMsRight"); + if (subNode != null) + { + shortcuts.MainVideoXLMsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideo3000MsLeft"); + if (subNode != null) + { + shortcuts.MainVideo3000MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoGoToStartCurrent"); + if (subNode != null) + { + shortcuts.MainVideoGoToStartCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoToggleStartEndCurrent"); + if (subNode != null) + { + shortcuts.MainVideoToggleStartEndCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoPlayCurrent"); + if (subNode != null) + { + shortcuts.MainVideoPlayCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoGoToPrevSubtitle"); + if (subNode != null) + { + shortcuts.MainVideoGoToPrevSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoGoToNextSubtitle"); + if (subNode != null) + { + shortcuts.MainVideoGoToNextSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoGoToPrevChapter"); + if (subNode != null) + { + shortcuts.MainVideoGoToPrevChapter = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoGoToNextChapter"); + if (subNode != null) + { + shortcuts.MainVideoGoToNextChapter = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoSelectNextSubtitle"); + if (subNode != null) + { + shortcuts.MainVideoSelectNextSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoFullscreen"); + if (subNode != null) + { + shortcuts.MainVideoFullscreen = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoSlower"); + if (subNode != null) + { + shortcuts.MainVideoSlower = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoFaster"); + if (subNode != null) + { + shortcuts.MainVideoFaster = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainVideoReset"); + if (subNode != null) + { + shortcuts.MainVideoReset = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSpellCheck"); + if (subNode != null) + { + shortcuts.MainSpellCheck = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSpellCheckFindDoubleWords"); + if (subNode != null) + { + shortcuts.MainSpellCheckFindDoubleWords = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSpellCheckAddWordToNames"); + if (subNode != null) + { + shortcuts.MainSpellCheckAddWordToNames = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSynchronizationAdjustTimes"); + if (subNode != null) + { + shortcuts.MainSynchronizationAdjustTimes = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSynchronizationVisualSync"); + if (subNode != null) + { + shortcuts.MainSynchronizationVisualSync = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSynchronizationPointSync"); + if (subNode != null) + { + shortcuts.MainSynchronizationPointSync = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSynchronizationPointSyncViaFile"); + if (subNode != null) + { + shortcuts.MainSynchronizationPointSyncViaFile = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainSynchronizationChangeFrameRate"); + if (subNode != null) + { + shortcuts.MainSynchronizationChangeFrameRate = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewItalic"); + if (subNode != null) + { + shortcuts.MainListViewItalic = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewBold"); + if (subNode != null) + { + shortcuts.MainListViewBold = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewUnderline"); + if (subNode != null) + { + shortcuts.MainListViewUnderline = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewBox"); + if (subNode != null) + { + shortcuts.MainListViewBox = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewSplit"); + if (subNode != null) + { + shortcuts.MainListViewSplit = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewToggleDashes"); + if (subNode != null) + { + shortcuts.MainListViewToggleDashes = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewToggleMusicSymbols"); + if (subNode != null) + { + shortcuts.MainListViewToggleMusicSymbols = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignment"); + if (subNode != null) + { + shortcuts.MainListViewAlignment = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN1"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN1"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN2"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN3"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN3 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN4"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN4 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN5"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN5 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN6"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN6 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN7"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN7 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN8"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN8 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAlignmentN9"); + if (subNode != null) + { + shortcuts.MainListViewAlignmentN9 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainRemoveFormatting"); + if (subNode != null) + { + shortcuts.MainRemoveFormatting = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewCopyText"); + if (subNode != null) + { + shortcuts.MainListViewCopyText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewCopyTextFromOriginalToCurrent"); + if (subNode != null) + { + shortcuts.MainListViewCopyTextFromOriginalToCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewAutoDuration"); + if (subNode != null) + { + shortcuts.MainListViewAutoDuration = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnDeleteText"); + if (subNode != null) + { + shortcuts.MainListViewColumnDeleteText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnDeleteTextAndShiftUp"); + if (subNode != null) + { + shortcuts.MainListViewColumnDeleteTextAndShiftUp = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnInsertText"); + if (subNode != null) + { + shortcuts.MainListViewColumnInsertText = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnPaste"); + if (subNode != null) + { + shortcuts.MainListViewColumnPaste = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnTextUp"); + if (subNode != null) + { + shortcuts.MainListViewColumnTextUp = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewColumnTextDown"); + if (subNode != null) + { + shortcuts.MainListViewColumnTextDown = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewFocusWaveform"); + if (subNode != null) + { + shortcuts.MainListViewFocusWaveform = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewGoToNextError"); + if (subNode != null) + { + shortcuts.MainListViewGoToNextError = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainListViewRemoveTimeCodes"); + if (subNode != null) + { + shortcuts.MainListViewRemoveTimeCodes = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditFixRTLViaUnicodeChars"); + if (subNode != null) + { + shortcuts.MainEditFixRTLViaUnicodeChars = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditRemoveRTLUnicodeChars"); + if (subNode != null) + { + shortcuts.MainEditRemoveRTLUnicodeChars = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainEditReverseStartAndEndingForRTL"); + if (subNode != null) + { + shortcuts.MainEditReverseStartAndEndingForRTL = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxItalic"); + if (subNode != null) + { + shortcuts.MainTextBoxItalic = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSplitAtCursor"); + if (subNode != null) + { + shortcuts.MainTextBoxSplitAtCursor = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSplitAtCursorAndVideoPos"); + if (subNode != null) + { + shortcuts.MainTextBoxSplitAtCursorAndVideoPos = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSplitSelectedLineBilingual"); + if (subNode != null) + { + shortcuts.MainTextBoxSplitSelectedLineBilingual = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxMoveLastWordDown"); + if (subNode != null) + { + shortcuts.MainTextBoxMoveLastWordDown = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxMoveFirstWordFromNextUp"); + if (subNode != null) + { + shortcuts.MainTextBoxMoveFirstWordFromNextUp = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxMoveLastWordDownCurrent"); + if (subNode != null) + { + shortcuts.MainTextBoxMoveLastWordDownCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxMoveFirstWordUpCurrent"); + if (subNode != null) + { + shortcuts.MainTextBoxMoveFirstWordUpCurrent = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSelectionToLower"); + if (subNode != null) + { + shortcuts.MainTextBoxSelectionToLower = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSelectionToUpper"); + if (subNode != null) + { + shortcuts.MainTextBoxSelectionToUpper = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSelectionToggleCasing"); + if (subNode != null) + { + shortcuts.MainTextBoxSelectionToggleCasing = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxSelectionToRuby"); + if (subNode != null) + { + shortcuts.MainTextBoxSelectionToRuby = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxToggleAutoDuration"); + if (subNode != null) + { + shortcuts.MainTextBoxToggleAutoDuration = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateInsertSubAtVideoPos"); + if (subNode != null) + { + shortcuts.MainCreateInsertSubAtVideoPos = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateInsertSubAtVideoPosNoTextBoxFocus"); + if (subNode != null) + { + shortcuts.MainCreateInsertSubAtVideoPosNoTextBoxFocus = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateSetStart"); + if (subNode != null) + { + shortcuts.MainCreateSetStart = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateSetEnd"); + if (subNode != null) + { + shortcuts.MainCreateSetEnd = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetEndAndPause"); + if (subNode != null) + { + shortcuts.MainAdjustSetEndAndPause = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateSetEndAddNewAndGoToNew"); + if (subNode != null) + { + shortcuts.MainCreateSetEndAddNewAndGoToNew = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainCreateStartDownEndUp"); + if (subNode != null) + { + shortcuts.MainCreateStartDownEndUp = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartAndOffsetTheRest"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartAndOffsetTheRest = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartAndOffsetTheRest2"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartAndOffsetTheRest2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetEndAndOffsetTheRest"); + if (subNode != null) + { + shortcuts.MainAdjustSetEndAndOffsetTheRest = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetEndAndOffsetTheRestAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustSetEndAndOffsetTheRestAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetEndAndGotoNext"); + if (subNode != null) + { + shortcuts.MainAdjustSetEndAndGotoNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustViaEndAutoStart"); + if (subNode != null) + { + shortcuts.MainAdjustViaEndAutoStart = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustViaEndAutoStartAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustViaEndAutoStartAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartAutoDurationAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartAutoDurationAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetEndNextStartAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustSetEndNextStartAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustStartDownEndUpAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustStartDownEndUpAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartAndEndOfPrevious"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartAndEndOfPrevious = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartAndEndOfPreviousAndGoToNext"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartAndEndOfPreviousAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSetStartKeepDuration"); + if (subNode != null) + { + shortcuts.MainAdjustSetStartKeepDuration = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSelected100MsForward"); + if (subNode != null) + { + shortcuts.MainAdjustSelected100MsForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSelected100MsBack"); + if (subNode != null) + { + shortcuts.MainAdjustSelected100MsBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustStartXMsBack"); + if (subNode != null) + { + shortcuts.MainAdjustStartXMsBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustStartXMsForward"); + if (subNode != null) + { + shortcuts.MainAdjustStartXMsForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustEndXMsBack"); + if (subNode != null) + { + shortcuts.MainAdjustEndXMsBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustEndXMsForward"); + if (subNode != null) + { + shortcuts.MainAdjustEndXMsForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveStartOneFrameBack"); + if (subNode != null) + { + shortcuts.MoveStartOneFrameBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveStartOneFrameForward"); + if (subNode != null) + { + shortcuts.MoveStartOneFrameForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveEndOneFrameBack"); + if (subNode != null) + { + shortcuts.MoveEndOneFrameBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveEndOneFrameForward"); + if (subNode != null) + { + shortcuts.MoveEndOneFrameForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveStartOneFrameBackKeepGapPrev"); + if (subNode != null) + { + shortcuts.MoveStartOneFrameBackKeepGapPrev = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveStartOneFrameForwardKeepGapPrev"); + if (subNode != null) + { + shortcuts.MoveStartOneFrameForwardKeepGapPrev = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveEndOneFrameBackKeepGapNext"); + if (subNode != null) + { + shortcuts.MoveEndOneFrameBackKeepGapNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MoveEndOneFrameForwardKeepGapNext"); + if (subNode != null) + { + shortcuts.MoveEndOneFrameForwardKeepGapNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSnapStartToNextSceneChange"); + if (subNode != null) + { + shortcuts.MainAdjustSnapStartToNextSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSnapStartToNextSceneChangeWithGap"); + if (subNode != null) + { + shortcuts.MainAdjustSnapStartToNextSceneChangeWithGap = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSnapEndToPreviousSceneChange"); + if (subNode != null) + { + shortcuts.MainAdjustSnapEndToPreviousSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustSnapEndToPreviousSceneChangeWithGap"); + if (subNode != null) + { + shortcuts.MainAdjustSnapEndToPreviousSceneChangeWithGap = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToNextSceneChange"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToNextSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToNextSceneChangeWithGap"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToNextSceneChangeWithGap = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSceneChange"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToPreviousSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSceneChangeWithGap"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToPreviousSceneChangeWithGap = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToNextSubtitle"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToNextSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendToPreviousSubtitle"); + if (subNode != null) + { + shortcuts.MainAdjustExtendToPreviousSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendCurrentSubtitle"); + if (subNode != null) + { + shortcuts.MainAdjustExtendCurrentSubtitle = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendPreviousLineEndToCurrentStart"); + if (subNode != null) + { + shortcuts.MainAdjustExtendPreviousLineEndToCurrentStart = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainAdjustExtendNextLineStartToCurrentEnd"); + if (subNode != null) + { + shortcuts.MainAdjustExtendNextLineStartToCurrentEnd = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainInsertAfter"); + if (subNode != null) + { + shortcuts.MainInsertAfter = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxAutoBreak"); + if (subNode != null) + { + shortcuts.MainTextBoxAutoBreak = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxBreakAtPosition"); + if (subNode != null) + { + shortcuts.MainTextBoxBreakAtPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxBreakAtPositionAndGoToNext"); + if (subNode != null) + { + shortcuts.MainTextBoxBreakAtPositionAndGoToNext = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTextBoxUnbreak"); + if (subNode != null) + { + shortcuts.MainTextBoxUnbreak = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainWaveformInsertAtCurrentPosition"); + if (subNode != null) + { + shortcuts.MainWaveformInsertAtCurrentPosition = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainInsertBefore"); + if (subNode != null) + { + shortcuts.MainInsertBefore = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainMergeDialog"); + if (subNode != null) + { + shortcuts.MainMergeDialog = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainToggleFocus"); + if (subNode != null) + { + shortcuts.MainToggleFocus = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformAdd"); + if (subNode != null) + { + shortcuts.WaveformAdd = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformVerticalZoom"); + if (subNode != null) + { + shortcuts.WaveformVerticalZoom = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformVerticalZoomOut"); + if (subNode != null) + { + shortcuts.WaveformVerticalZoomOut = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformZoomIn"); + if (subNode != null) + { + shortcuts.WaveformZoomIn = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformZoomOut"); + if (subNode != null) + { + shortcuts.WaveformZoomOut = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformSplit"); + if (subNode != null) + { + shortcuts.WaveformSplit = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformPlaySelection"); + if (subNode != null) + { + shortcuts.WaveformPlaySelection = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformPlaySelectionEnd"); + if (subNode != null) + { + shortcuts.WaveformPlaySelectionEnd = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformSearchSilenceForward"); + if (subNode != null) + { + shortcuts.WaveformSearchSilenceForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformSearchSilenceBack"); + if (subNode != null) + { + shortcuts.WaveformSearchSilenceBack = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformAddTextHere"); + if (subNode != null) + { + shortcuts.WaveformAddTextHere = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformAddTextHereFromClipboard"); + if (subNode != null) + { + shortcuts.WaveformAddTextHereFromClipboard = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformSetParagraphAsSelection"); + if (subNode != null) + { + shortcuts.WaveformSetParagraphAsSelection = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformFocusListView"); + if (subNode != null) + { + shortcuts.WaveformFocusListView = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformGoToPreviousSceneChange"); + if (subNode != null) + { + shortcuts.WaveformGoToPreviousSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformGoToNextSceneChange"); + if (subNode != null) + { + shortcuts.WaveformGoToNextSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformToggleSceneChange"); + if (subNode != null) + { + shortcuts.WaveformToggleSceneChange = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformGuessStart"); + if (subNode != null) + { + shortcuts.WaveformGuessStart = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Waveform100MsLeft"); + if (subNode != null) + { + shortcuts.Waveform100MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Waveform100MsRight"); + if (subNode != null) + { + shortcuts.Waveform100MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Waveform1000MsLeft"); + if (subNode != null) + { + shortcuts.Waveform1000MsLeft = subNode.InnerText; + } + + subNode = node.SelectSingleNode("Waveform1000MsRight"); + if (subNode != null) + { + shortcuts.Waveform1000MsRight = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateGoogleIt"); + if (subNode != null) + { + shortcuts.MainTranslateGoogleIt = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateGoogleTranslate"); + if (subNode != null) + { + shortcuts.MainTranslateGoogleTranslate = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateCustomSearch1"); + if (subNode != null) + { + shortcuts.MainTranslateCustomSearch1 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateCustomSearch2"); + if (subNode != null) + { + shortcuts.MainTranslateCustomSearch2 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateCustomSearch3"); + if (subNode != null) + { + shortcuts.MainTranslateCustomSearch3 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateCustomSearch4"); + if (subNode != null) + { + shortcuts.MainTranslateCustomSearch4 = subNode.InnerText; + } + + subNode = node.SelectSingleNode("MainTranslateCustomSearch5"); + if (subNode != null) + { + shortcuts.MainTranslateCustomSearch5 = subNode.InnerText; + } + } + } + + private static void CustomSerialize(string fileName, Settings settings) + { + var xws = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8 }; + var sb = new StringBuilder(); + using (var textWriter = XmlWriter.Create(sb, xws)) + { + textWriter.WriteStartDocument(); + + textWriter.WriteStartElement("Settings", string.Empty); + + textWriter.WriteElementString("Version", Utilities.AssemblyVersion); + + textWriter.WriteStartElement("Compare", string.Empty); + textWriter.WriteElementString("ShowOnlyDifferences", settings.Compare.ShowOnlyDifferences.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OnlyLookForDifferenceInText", settings.Compare.OnlyLookForDifferenceInText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("IgnoreLineBreaks", settings.Compare.IgnoreLineBreaks.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("IgnoreFormatting", settings.Compare.IgnoreFormatting.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("RecentFiles", string.Empty); + textWriter.WriteStartElement("FileNames", string.Empty); + foreach (var item in settings.RecentFiles.Files) + { + textWriter.WriteStartElement("FileName"); + if (item.OriginalFileName != null) + { + textWriter.WriteAttributeString("OriginalFileName", item.OriginalFileName); + } + + if (item.VideoFileName != null) + { + textWriter.WriteAttributeString("VideoFileName", item.VideoFileName); + } + + textWriter.WriteAttributeString("FirstVisibleIndex", item.FirstVisibleIndex.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteAttributeString("FirstSelectedIndex", item.FirstSelectedIndex.ToString(CultureInfo.InvariantCulture)); + if (item.VideoOffsetInMs != 0) + { + textWriter.WriteAttributeString("VideoOffset", item.VideoOffsetInMs.ToString(CultureInfo.InvariantCulture)); + } + + textWriter.WriteString(item.FileName); + textWriter.WriteEndElement(); + } + textWriter.WriteEndElement(); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("General", string.Empty); + + textWriter.WriteStartElement("Profiles", string.Empty); + foreach (var profile in settings.General.Profiles) + { + textWriter.WriteStartElement("Profile"); + textWriter.WriteElementString("Name", profile.Name); + textWriter.WriteElementString("SubtitleLineMaximumLength", profile.SubtitleLineMaximumLength.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumCharactersPerSeconds", profile.SubtitleMaximumCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleOptimalCharactersPerSeconds", profile.SubtitleOptimalCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMinimumDisplayMilliseconds", profile.SubtitleMinimumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumDisplayMilliseconds", profile.SubtitleMaximumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumWordsPerMinute", profile.SubtitleMaximumWordsPerMinute.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MinimumMillisecondsBetweenLines", profile.MinimumMillisecondsBetweenLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("CpsIncludesSpace", profile.CpsIncludesSpace.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MaxNumberOfLines", profile.MaxNumberOfLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeLinesShorterThan", profile.MergeLinesShorterThan.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DialogStyle", profile.DialogStyle.ToString()); + textWriter.WriteElementString("ContinuationStyle", profile.ContinuationStyle.ToString()); + textWriter.WriteEndElement(); + } + textWriter.WriteEndElement(); + + textWriter.WriteElementString("CurrentProfile", settings.General.CurrentProfile); + textWriter.WriteElementString("ShowToolbarNew", settings.General.ShowToolbarNew.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarOpen", settings.General.ShowToolbarOpen.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarSave", settings.General.ShowToolbarSave.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarSaveAs", settings.General.ShowToolbarSaveAs.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarFind", settings.General.ShowToolbarFind.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarReplace", settings.General.ShowToolbarReplace.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarFixCommonErrors", settings.General.ShowToolbarFixCommonErrors.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarRemoveTextForHi", settings.General.ShowToolbarRemoveTextForHi.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarVisualSync", settings.General.ShowToolbarVisualSync.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarSpellCheck", settings.General.ShowToolbarSpellCheck.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarNetflixGlyphCheck", settings.General.ShowToolbarNetflixGlyphCheck.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarSettings", settings.General.ShowToolbarSettings.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowToolbarHelp", settings.General.ShowToolbarHelp.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowFrameRate", settings.General.ShowFrameRate.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowVideoPlayer", settings.General.ShowVideoPlayer.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowAudioVisualizer", settings.General.ShowAudioVisualizer.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowWaveform", settings.General.ShowWaveform.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowSpectrogram", settings.General.ShowSpectrogram.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DefaultFrameRate", settings.General.DefaultFrameRate.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DefaultSubtitleFormat", settings.General.DefaultSubtitleFormat); + textWriter.WriteElementString("DefaultEncoding", settings.General.DefaultEncoding); + textWriter.WriteElementString("AutoConvertToUtf8", settings.General.AutoConvertToUtf8.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoGuessAnsiEncoding", settings.General.AutoGuessAnsiEncoding.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SystemSubtitleFontNameOverride", settings.General.SystemSubtitleFontNameOverride); + textWriter.WriteElementString("SystemSubtitleFontSizeOverride", settings.General.SystemSubtitleFontSizeOverride.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleFontName", settings.General.SubtitleFontName); + textWriter.WriteElementString("SubtitleTextBoxFontSize", settings.General.SubtitleTextBoxFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleListViewFontSize", settings.General.SubtitleListViewFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleTextBoxFontBold", settings.General.SubtitleTextBoxFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleListViewFontBold", settings.General.SubtitleListViewFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleTextBoxSyntaxColor", settings.General.SubtitleTextBoxSyntaxColor.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleTextBoxHtmlColor", settings.General.SubtitleTextBoxHtmlColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleTextBoxAssColor", settings.General.SubtitleTextBoxAssColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleFontColor", settings.General.SubtitleFontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleBackgroundColor", settings.General.SubtitleBackgroundColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MeasureFontName", settings.General.MeasureFontName); + textWriter.WriteElementString("MeasureFontSize", settings.General.MeasureFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MeasureFontBold", settings.General.MeasureFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleLineMaximumPixelWidth", settings.General.SubtitleLineMaximumPixelWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("CenterSubtitleInTextBox", settings.General.CenterSubtitleInTextBox.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowRecentFiles", settings.General.ShowRecentFiles.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RememberSelectedLine", settings.General.RememberSelectedLine.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartLoadLastFile", settings.General.StartLoadLastFile.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartRememberPositionAndSize", settings.General.StartRememberPositionAndSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartPosition", settings.General.StartPosition); + textWriter.WriteElementString("StartSize", settings.General.StartSize); + textWriter.WriteElementString("SplitContainerMainSplitterDistance", settings.General.SplitContainerMainSplitterDistance.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitContainer1SplitterDistance", settings.General.SplitContainer1SplitterDistance.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitContainerListViewAndTextSplitterDistance", settings.General.SplitContainerListViewAndTextSplitterDistance.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartInSourceView", settings.General.StartInSourceView.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveBlankLinesWhenOpening", settings.General.RemoveBlankLinesWhenOpening.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveBadCharsWhenOpening", settings.General.RemoveBadCharsWhenOpening.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleLineMaximumLength", settings.General.SubtitleLineMaximumLength.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MaxNumberOfLines", settings.General.MaxNumberOfLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeLinesShorterThan", settings.General.MergeLinesShorterThan.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMinimumDisplayMilliseconds", settings.General.SubtitleMinimumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumDisplayMilliseconds", settings.General.SubtitleMaximumDisplayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MinimumMillisecondsBetweenLines", settings.General.MinimumMillisecondsBetweenLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SetStartEndHumanDelay", settings.General.SetStartEndHumanDelay.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoWrapLineWhileTyping", settings.General.AutoWrapLineWhileTyping.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumCharactersPerSeconds", settings.General.SubtitleMaximumCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleOptimalCharactersPerSeconds", settings.General.SubtitleOptimalCharactersPerSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("CharactersPerSecondsIgnoreWhiteSpace", settings.General.CharactersPerSecondsIgnoreWhiteSpace.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("IgnoreArabicDiacritics", settings.General.IgnoreArabicDiacritics.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SubtitleMaximumWordsPerMinute", settings.General.SubtitleMaximumWordsPerMinute.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DialogStyle", settings.General.DialogStyle.ToString()); + textWriter.WriteElementString("ContinuationStyle", settings.General.ContinuationStyle.ToString()); + textWriter.WriteElementString("ContinuationPause", settings.General.ContinuationPause.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixContinuationStyleUncheckInsertsAllCaps", settings.General.FixContinuationStyleUncheckInsertsAllCaps.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixContinuationStyleUncheckInsertsItalic", settings.General.FixContinuationStyleUncheckInsertsItalic.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixContinuationStyleUncheckInsertsLowercase", settings.General.FixContinuationStyleUncheckInsertsLowercase.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixContinuationStyleHideContinuationCandidatesWithoutName", settings.General.FixContinuationStyleHideContinuationCandidatesWithoutName.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellCheckLanguage", settings.General.SpellCheckLanguage); + textWriter.WriteElementString("VideoPlayer", settings.General.VideoPlayer); + textWriter.WriteElementString("VideoPlayerDefaultVolume", settings.General.VideoPlayerDefaultVolume.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VideoPlayerPreviewFontSize", settings.General.VideoPlayerPreviewFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VideoPlayerPreviewFontBold", settings.General.VideoPlayerPreviewFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VideoPlayerShowStopButton", settings.General.VideoPlayerShowStopButton.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VideoPlayerShowMuteButton", settings.General.VideoPlayerShowMuteButton.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VideoPlayerShowFullscreenButton", settings.General.VideoPlayerShowFullscreenButton.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Language", settings.General.Language); + textWriter.WriteElementString("ListViewLineSeparatorString", settings.General.ListViewLineSeparatorString); + textWriter.WriteElementString("ListViewDoubleClickAction", settings.General.ListViewDoubleClickAction.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SaveAsUseFileNameFrom", settings.General.SaveAsUseFileNameFrom); + textWriter.WriteElementString("UppercaseLetters", settings.General.UppercaseLetters); + textWriter.WriteElementString("DefaultAdjustMilliseconds", settings.General.DefaultAdjustMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoRepeatOn", settings.General.AutoRepeatOn.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoRepeatCount", settings.General.AutoRepeatCount.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoContinueOn", settings.General.AutoContinueOn.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoContinueDelay", settings.General.AutoContinueDelay.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SyncListViewWithVideoWhilePlaying", settings.General.SyncListViewWithVideoWhilePlaying.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBackupSeconds", settings.General.AutoBackupSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBackupDeleteAfterMonths", settings.General.AutoBackupDeleteAfterMonths.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellChecker", settings.General.SpellChecker); + textWriter.WriteElementString("AllowEditOfOriginalSubtitle", settings.General.AllowEditOfOriginalSubtitle.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PromptDeleteLines", settings.General.PromptDeleteLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Undocked", settings.General.Undocked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UndockedVideoPosition", settings.General.UndockedVideoPosition); + textWriter.WriteElementString("UndockedVideoFullscreen", settings.General.UndockedVideoFullscreen.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UndockedWaveformPosition", settings.General.UndockedWaveformPosition); + textWriter.WriteElementString("UndockedVideoControlsPosition", settings.General.UndockedVideoControlsPosition); + textWriter.WriteElementString("WaveformCenter", settings.General.WaveformCenter.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformUpdateIntervalMs", settings.General.WaveformUpdateIntervalMs.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SmallDelayMilliseconds", settings.General.SmallDelayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LargeDelayMilliseconds", settings.General.LargeDelayMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowOriginalAsPreviewIfAvailable", settings.General.ShowOriginalAsPreviewIfAvailable.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastPacCodePage", settings.General.LastPacCodePage.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OpenSubtitleExtraExtensions", settings.General.OpenSubtitleExtraExtensions); + textWriter.WriteElementString("ListViewColumnsRememberSize", settings.General.ListViewColumnsRememberSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewNumberWidth", settings.General.ListViewNumberWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewStartWidth", settings.General.ListViewStartWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewEndWidth", settings.General.ListViewEndWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewDurationWidth", settings.General.ListViewDurationWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewCpsWidth", settings.General.ListViewCpsWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewWpmWidth", settings.General.ListViewWpmWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewGapWidth", settings.General.ListViewGapWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewActorWidth", settings.General.ListViewActorWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewRegionWidth", settings.General.ListViewRegionWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DirectShowDoubleLoad", settings.General.DirectShowDoubleLoad.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VlcWaveTranscodeSettings", settings.General.VlcWaveTranscodeSettings); + textWriter.WriteElementString("VlcLocation", settings.General.VlcLocation); + textWriter.WriteElementString("VlcLocationRelative", settings.General.VlcLocationRelative); + textWriter.WriteElementString("MpvVideoOutputWindows", settings.General.MpvVideoOutputWindows); + textWriter.WriteElementString("MpvVideoOutputLinux", settings.General.MpvVideoOutputLinux); + textWriter.WriteElementString("MpvExtraOption", settings.General.MpvExtraOption); + textWriter.WriteElementString("MpvLogging", settings.General.MpvLogging.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MpvHandlesPreviewText", settings.General.MpvHandlesPreviewText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MpcHcLocation", settings.General.MpcHcLocation); + textWriter.WriteElementString("MkvMergeLocation", settings.General.MkvMergeLocation); + textWriter.WriteElementString("UseFFmpegForWaveExtraction", settings.General.UseFFmpegForWaveExtraction.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FFmpegLocation", settings.General.FFmpegLocation); + textWriter.WriteElementString("FFmpegSceneThreshold", settings.General.FFmpegSceneThreshold); + textWriter.WriteElementString("UseTimeFormatHHMMSSFF", settings.General.UseTimeFormatHHMMSSFF.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitBehavior", settings.General.SplitBehavior.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitRemovesDashes", settings.General.SplitRemovesDashes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ClearStatusBarAfterSeconds", settings.General.ClearStatusBarAfterSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Company", settings.General.Company); + textWriter.WriteElementString("MoveVideo100Or500MsPlaySmallSample", settings.General.MoveVideo100Or500MsPlaySmallSample.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DisableVideoAutoLoading", settings.General.DisableVideoAutoLoading.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AllowVolumeBoost", settings.General.AllowVolumeBoost.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RightToLeftMode", settings.General.RightToLeftMode.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastSaveAsFormat", settings.General.LastSaveAsFormat); + textWriter.WriteElementString("CheckForUpdates", settings.General.CheckForUpdates.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastCheckForUpdates", settings.General.LastCheckForUpdates.ToString("yyyy-MM-dd")); + textWriter.WriteElementString("AutoSave", settings.General.AutoSave.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PreviewAssaText", settings.General.PreviewAssaText); + textWriter.WriteElementString("ShowProgress", settings.General.ShowProgress.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowNegativeDurationInfoOnSave", settings.General.ShowNegativeDurationInfoOnSave.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowFormatRequiresUtf8Warning", settings.General.ShowFormatRequiresUtf8Warning.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TitleBarAsterisk", settings.General.TitleBarAsterisk); + textWriter.WriteElementString("MeasurementConverterCloseOnInsert", settings.General.MeasurementConverterCloseOnInsert.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MeasurementConverterCategories", settings.General.MeasurementConverterCategories); + textWriter.WriteElementString("SubtitleTextBoxMaxHeight", settings.General.SubtitleTextBoxMaxHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UseDarkTheme", settings.General.UseDarkTheme.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ShowBetaStuff", settings.General.ShowBetaStuff.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NewEmptyDefaultMs", settings.General.NewEmptyDefaultMs.ToString(CultureInfo.InvariantCulture)); + + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("Tools", string.Empty); + textWriter.WriteElementString("StartSceneIndex", settings.Tools.StartSceneIndex.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("EndSceneIndex", settings.Tools.EndSceneIndex.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("VerifyPlaySeconds", settings.Tools.VerifyPlaySeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixShortDisplayTimesAllowMoveStartTime", settings.Tools.FixShortDisplayTimesAllowMoveStartTime.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveEmptyLinesBetweenText", settings.Tools.RemoveEmptyLinesBetweenText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MusicSymbol", settings.Tools.MusicSymbol); + textWriter.WriteElementString("MusicSymbolReplace", settings.Tools.MusicSymbolReplace); + textWriter.WriteElementString("UnicodeSymbolsToInsert", settings.Tools.UnicodeSymbolsToInsert); + textWriter.WriteElementString("SpellCheckAutoChangeNames", settings.Tools.SpellCheckAutoChangeNames.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellCheckAutoChangeNamesUseSuggestions", settings.Tools.SpellCheckAutoChangeNamesUseSuggestions.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellCheckOneLetterWords", settings.Tools.CheckOneLetterWords.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellCheckEnglishAllowInQuoteAsIng", settings.Tools.SpellCheckEnglishAllowInQuoteAsIng.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RememberUseAlwaysList", settings.Tools.RememberUseAlwaysList.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpellCheckShowCompletedMessage", settings.Tools.SpellCheckShowCompletedMessage.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OcrFixUseHardcodedRules", settings.Tools.OcrFixUseHardcodedRules.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OcrBinaryImageCompareRgbThreshold", settings.Tools.OcrBinaryImageCompareRgbThreshold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OcrTesseract4RgbThreshold", settings.Tools.OcrTesseract4RgbThreshold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OcrAddLetterRow1", settings.Tools.OcrAddLetterRow1); + textWriter.WriteElementString("OcrAddLetterRow2", settings.Tools.OcrAddLetterRow2); + textWriter.WriteElementString("OcrTrainFonts", settings.Tools.OcrTrainFonts); + textWriter.WriteElementString("OcrTrainMergedLetters", settings.Tools.OcrTrainMergedLetters); + textWriter.WriteElementString("OcrTrainSrtFile", settings.Tools.OcrTrainSrtFile); + textWriter.WriteElementString("Interjections", settings.Tools.Interjections); + textWriter.WriteElementString("MicrosoftBingApiId", settings.Tools.MicrosoftBingApiId); + textWriter.WriteElementString("MicrosoftTranslatorApiKey", settings.Tools.MicrosoftTranslatorApiKey); + textWriter.WriteElementString("MicrosoftTranslatorTokenEndpoint", settings.Tools.MicrosoftTranslatorTokenEndpoint); + textWriter.WriteElementString("MicrosoftTranslatorCategory", settings.Tools.MicrosoftTranslatorCategory); + textWriter.WriteElementString("GoogleApiV2Key", settings.Tools.GoogleApiV2Key); + textWriter.WriteElementString("GoogleApiV2KeyInfoShow", settings.Tools.GoogleApiV2KeyInfoShow.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GoogleTranslateNoKeyWarningShow", settings.Tools.GoogleTranslateNoKeyWarningShow.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GoogleApiV1ChunkSize", settings.Tools.GoogleApiV1ChunkSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GoogleTranslateLastTargetLanguage", settings.Tools.GoogleTranslateLastTargetLanguage); + textWriter.WriteElementString("TranslateAllowSplit", settings.Tools.TranslateAllowSplit.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorDurationSmall", settings.Tools.ListViewSyntaxColorDurationSmall.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorDurationBig", settings.Tools.ListViewSyntaxColorDurationBig.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorLongLines", settings.Tools.ListViewSyntaxColorLongLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorWideLines", settings.Tools.ListViewSyntaxColorWideLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxMoreThanXLines", settings.Tools.ListViewSyntaxMoreThanXLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorOverlap", settings.Tools.ListViewSyntaxColorOverlap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxColorGap", settings.Tools.ListViewSyntaxColorGap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewSyntaxErrorColor", settings.Tools.ListViewSyntaxErrorColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewUnfocusedSelectedColor", settings.Tools.ListViewUnfocusedSelectedColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnEndTime", settings.Tools.ListViewShowColumnEndTime.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnDuration", settings.Tools.ListViewShowColumnDuration.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnCharsPerSec", settings.Tools.ListViewShowColumnCharsPerSec.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnWordsPerMin", settings.Tools.ListViewShowColumnWordsPerMin.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnGap", settings.Tools.ListViewShowColumnGap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnActor", settings.Tools.ListViewShowColumnActor.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ListViewShowColumnRegion", settings.Tools.ListViewShowColumnRegion.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitAdvanced", settings.Tools.SplitAdvanced.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitOutputFolder", settings.Tools.SplitOutputFolder); + textWriter.WriteElementString("SplitNumberOfParts", settings.Tools.SplitNumberOfParts.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SplitVia", settings.Tools.SplitVia); + textWriter.WriteElementString("JoinCorrectTimeCodes", settings.Tools.JoinCorrectTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("JoinAddMs", settings.Tools.JoinAddMs.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NewEmptyTranslationText", settings.Tools.NewEmptyTranslationText); + textWriter.WriteElementString("BatchConvertOutputFolder", settings.Tools.BatchConvertOutputFolder); + textWriter.WriteElementString("BatchConvertOverwriteExisting", settings.Tools.BatchConvertOverwriteExisting.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertSaveInSourceFolder", settings.Tools.BatchConvertSaveInSourceFolder.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertRemoveFormatting", settings.Tools.BatchConvertRemoveFormatting.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertRemoveStyle", settings.Tools.BatchConvertRemoveStyle.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertBridgeGaps", settings.Tools.BatchConvertBridgeGaps.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertFixCasing", settings.Tools.BatchConvertFixCasing.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertRemoveTextForHI", settings.Tools.BatchConvertRemoveTextForHI.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertSplitLongLines", settings.Tools.BatchConvertSplitLongLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertFixCommonErrors", settings.Tools.BatchConvertFixCommonErrors.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertMultipleReplace", settings.Tools.BatchConvertMultipleReplace.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertFixRtl", settings.Tools.BatchConvertFixRtl.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertFixRtlMode", settings.Tools.BatchConvertFixRtlMode); + textWriter.WriteElementString("BatchConvertAutoBalance", settings.Tools.BatchConvertAutoBalance.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertSetMinDisplayTimeBetweenSubtitles", settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertMergeShortLines", settings.Tools.BatchConvertMergeShortLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertRemoveLineBreaks", settings.Tools.BatchConvertRemoveLineBreaks.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertMergeSameText", settings.Tools.BatchConvertMergeSameText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertMergeSameTimeCodes", settings.Tools.BatchConvertMergeSameTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertChangeSpeed", settings.Tools.BatchConvertChangeSpeed.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertAdjustDisplayDuration", settings.Tools.BatchConvertAdjustDisplayDuration.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertApplyDurationLimits", settings.Tools.BatchConvertApplyDurationLimits.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertDeleteLines", settings.Tools.BatchConvertDeleteLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertChangeFrameRate", settings.Tools.BatchConvertChangeFrameRate.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertOffsetTimeCodes", settings.Tools.BatchConvertOffsetTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertLanguage", settings.Tools.BatchConvertLanguage); + textWriter.WriteElementString("BatchConvertFormat", settings.Tools.BatchConvertFormat); + textWriter.WriteElementString("BatchConvertAssStyles", settings.Tools.BatchConvertAssStyles); + textWriter.WriteElementString("BatchConvertSsaStyles", settings.Tools.BatchConvertSsaStyles); + textWriter.WriteElementString("BatchConvertUseStyleFromSource", settings.Tools.BatchConvertUseStyleFromSource.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertExportCustomTextTemplate", settings.Tools.BatchConvertExportCustomTextTemplate); + textWriter.WriteElementString("BatchConvertTsOverrideXPosition", settings.Tools.BatchConvertTsOverrideXPosition.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsOverrideYPosition", settings.Tools.BatchConvertTsOverrideYPosition.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsOverrideBottomMargin", settings.Tools.BatchConvertTsOverrideBottomMargin.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsOverrideHAlign", settings.Tools.BatchConvertTsOverrideHAlign); + textWriter.WriteElementString("BatchConvertTsOverrideHMargin", settings.Tools.BatchConvertTsOverrideHMargin.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsOverrideScreenSize", settings.Tools.BatchConvertTsOverrideScreenSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsScreenWidth", settings.Tools.BatchConvertTsScreenWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsScreenHeight", settings.Tools.BatchConvertTsScreenHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsOnlyTeletext", settings.Tools.BatchConvertTsOnlyTeletext.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BatchConvertTsFileNameAppend", settings.Tools.BatchConvertTsFileNameAppend); + textWriter.WriteElementString("BatchConvertMkvLanguageCodeStyle", settings.Tools.BatchConvertMkvLanguageCodeStyle); + textWriter.WriteElementString("WaveformBatchLastFolder", settings.Tools.WaveformBatchLastFolder); + textWriter.WriteElementString("ModifySelectionRule", settings.Tools.ModifySelectionRule); + textWriter.WriteElementString("ModifySelectionText", settings.Tools.ModifySelectionText); + textWriter.WriteElementString("ModifySelectionCaseSensitive", settings.Tools.ModifySelectionCaseSensitive.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportVobSubFontName", settings.Tools.ExportVobSubFontName); + textWriter.WriteElementString("ExportVobSubFontSize", settings.Tools.ExportVobSubFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportVobSubVideoResolution", settings.Tools.ExportVobSubVideoResolution); + textWriter.WriteElementString("ExportVobSubLanguage", settings.Tools.ExportVobSubLanguage); + textWriter.WriteElementString("ExportVobSubSimpleRendering", settings.Tools.ExportVobSubSimpleRendering.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportVobAntiAliasingWithTransparency", settings.Tools.ExportVobAntiAliasingWithTransparency.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayFontName", settings.Tools.ExportBluRayFontName); + textWriter.WriteElementString("ExportBluRayFontSize", settings.Tools.ExportBluRayFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportFcpFontName", settings.Tools.ExportFcpFontName); + textWriter.WriteElementString("ExportFontNameOther", settings.Tools.ExportFontNameOther); + textWriter.WriteElementString("ExportFcpFontSize", settings.Tools.ExportFcpFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportFcpImageType", settings.Tools.ExportFcpImageType); + textWriter.WriteElementString("ExportFcpPalNtsc", settings.Tools.ExportFcpPalNtsc); + textWriter.WriteElementString("ExportBdnXmlImageType", settings.Tools.ExportBdnXmlImageType); + textWriter.WriteElementString("ExportLastFontSize", settings.Tools.ExportLastFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLastLineHeight", settings.Tools.ExportLastLineHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLastBorderWidth", settings.Tools.ExportLastBorderWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLastFontBold", settings.Tools.ExportLastFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayVideoResolution", settings.Tools.ExportBluRayVideoResolution); + textWriter.WriteElementString("ExportFcpVideoResolution", settings.Tools.ExportFcpVideoResolution); + textWriter.WriteElementString("ExportFontColor", settings.Tools.ExportFontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBorderColor", settings.Tools.ExportBorderColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportShadowColor", settings.Tools.ExportShadowColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBoxBorderSize", settings.Tools.ExportBoxBorderSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBottomMarginUnit", settings.Tools.ExportBottomMarginUnit); + textWriter.WriteElementString("ExportBottomMarginPercent", settings.Tools.ExportBottomMarginPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBottomMarginPixels", settings.Tools.ExportBottomMarginPixels.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLeftRightMarginUnit", settings.Tools.ExportLeftRightMarginUnit); + textWriter.WriteElementString("ExportLeftRightMarginPercent", settings.Tools.ExportLeftRightMarginPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLeftRightMarginPixels", settings.Tools.ExportLeftRightMarginPixels.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportHorizontalAlignment", settings.Tools.ExportHorizontalAlignment.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayBottomMarginPercent", settings.Tools.ExportBluRayBottomMarginPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayBottomMarginPixels", settings.Tools.ExportBluRayBottomMarginPixels.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayShadow", settings.Tools.ExportBluRayShadow.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportBluRayRemoveSmallGaps", settings.Tools.ExportBluRayRemoveSmallGaps.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportCdgBackgroundImage", settings.Tools.ExportCdgBackgroundImage); + textWriter.WriteElementString("ExportCdgMarginLeft", settings.Tools.ExportCdgMarginLeft.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportCdgMarginBottom", settings.Tools.ExportCdgMarginBottom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportCdgFormat", settings.Tools.ExportCdgFormat); + textWriter.WriteElementString("Export3DType", settings.Tools.Export3DType.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Export3DDepth", settings.Tools.Export3DDepth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLastShadowTransparency", settings.Tools.ExportLastShadowTransparency.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportLastFrameRate", settings.Tools.ExportLastFrameRate.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportFullFrame", settings.Tools.ExportFullFrame.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportFcpFullPathUrl", settings.Tools.ExportFcpFullPathUrl.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportPenLineJoin", settings.Tools.ExportPenLineJoin); + textWriter.WriteElementString("FixCommonErrorsFixOverlapAllowEqualEndStart", settings.Tools.FixCommonErrorsFixOverlapAllowEqualEndStart.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixCommonErrorsSkipStepOne", settings.Tools.FixCommonErrorsSkipStepOne.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextSplitting", settings.Tools.ImportTextSplitting); + textWriter.WriteElementString("ImportTextMergeShortLines", settings.Tools.ImportTextMergeShortLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextLineBreak", settings.Tools.ImportTextLineBreak); + textWriter.WriteElementString("ImportTextRemoveEmptyLines", settings.Tools.ImportTextRemoveEmptyLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextAutoSplitAtBlank", settings.Tools.ImportTextAutoSplitAtBlank.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextRemoveLinesNoLetters", settings.Tools.ImportTextRemoveLinesNoLetters.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextGenerateTimeCodes", settings.Tools.ImportTextGenerateTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextTakeTimeCodeFromFileName", settings.Tools.ImportTextTakeTimeCodeFromFileName.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextAutoBreak", settings.Tools.ImportTextAutoBreak.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextAutoBreakAtEnd", settings.Tools.ImportTextAutoBreakAtEnd.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextGap", settings.Tools.ImportTextGap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextAutoSplitNumberOfLines", settings.Tools.ImportTextAutoSplitNumberOfLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextAutoBreakAtEndMarkerText", settings.Tools.ImportTextAutoBreakAtEndMarkerText); + textWriter.WriteElementString("ImportTextDurationAuto", settings.Tools.ImportTextDurationAuto.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ImportTextFixedDuration", settings.Tools.ImportTextFixedDuration.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GenerateTimeCodePatterns", settings.Tools.GenerateTimeCodePatterns); + textWriter.WriteElementString("MusicSymbolStyle", settings.Tools.MusicSymbolStyle); + textWriter.WriteElementString("BridgeGapMilliseconds", settings.Tools.BridgeGapMilliseconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportCustomTemplates", settings.Tools.ExportCustomTemplates); + textWriter.WriteElementString("ChangeCasingChoice", settings.Tools.ChangeCasingChoice); + textWriter.WriteElementString("UseNoLineBreakAfter", settings.Tools.UseNoLineBreakAfter.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NoLineBreakAfterEnglish", settings.Tools.NoLineBreakAfterEnglish); + textWriter.WriteElementString("ExportTextFormatText", settings.Tools.ExportTextFormatText); + textWriter.WriteElementString("ExportTextRemoveStyling", settings.Tools.ExportTextRemoveStyling.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextShowLineNumbers", settings.Tools.ExportTextShowLineNumbers.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextShowLineNumbersNewLine", settings.Tools.ExportTextShowLineNumbersNewLine.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextShowTimeCodes", settings.Tools.ExportTextShowTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextShowTimeCodesNewLine", settings.Tools.ExportTextShowTimeCodesNewLine.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextNewLineAfterText", settings.Tools.ExportTextNewLineAfterText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextNewLineBetweenSubtitles", settings.Tools.ExportTextNewLineBetweenSubtitles.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ExportTextTimeCodeFormat", settings.Tools.ExportTextTimeCodeFormat); + textWriter.WriteElementString("ExportTextTimeCodeSeparator", settings.Tools.ExportTextTimeCodeSeparator); + textWriter.WriteElementString("VideoOffsetKeepTimeCodes", settings.Tools.VideoOffsetKeepTimeCodes.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MoveStartEndMs", settings.Tools.MoveStartEndMs.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AdjustDurationSeconds", settings.Tools.AdjustDurationSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AdjustDurationPercent", settings.Tools.AdjustDurationPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AdjustDurationLast", settings.Tools.AdjustDurationLast); + textWriter.WriteElementString("AdjustDurationExtendOnly", settings.Tools.AdjustDurationExtendOnly.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakCommaBreakEarly", settings.Tools.AutoBreakCommaBreakEarly.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakDashEarly", settings.Tools.AutoBreakDashEarly.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakLineEndingEarly", settings.Tools.AutoBreakLineEndingEarly.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakUsePixelWidth", settings.Tools.AutoBreakUsePixelWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakPreferBottomHeavy", settings.Tools.AutoBreakPreferBottomHeavy.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakPreferBottomPercent", settings.Tools.AutoBreakPreferBottomPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ApplyMinimumDurationLimit", settings.Tools.ApplyMinimumDurationLimit.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ApplyMaximumDurationLimit", settings.Tools.ApplyMaximumDurationLimit.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeShortLinesMaxGap", settings.Tools.MergeShortLinesMaxGap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeShortLinesMaxChars", settings.Tools.MergeShortLinesMaxChars.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeShortLinesOnlyContinuous", settings.Tools.MergeShortLinesOnlyContinuous.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ColumnPasteColumn", settings.Tools.ColumnPasteColumn); + textWriter.WriteElementString("ColumnPasteOverwriteMode", settings.Tools.ColumnPasteOverwriteMode); + + if (settings.Tools.FindHistory != null && settings.Tools.FindHistory.Count > 0) + { + const int maximumFindHistoryItems = 10; + textWriter.WriteStartElement("FindHistory", string.Empty); + int maxIndex = settings.Tools.FindHistory.Count; + if (maxIndex > maximumFindHistoryItems) + { + maxIndex = maximumFindHistoryItems; + } + + for (int index = 0; index < maxIndex; index++) + { + var text = settings.Tools.FindHistory[index]; + textWriter.WriteElementString("Text", text); + } + textWriter.WriteEndElement(); + } + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("SubtitleSettings", string.Empty); + textWriter.WriteElementString("SsaFontName", settings.SubtitleSettings.SsaFontName); + textWriter.WriteElementString("SsaFontSize", settings.SubtitleSettings.SsaFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaFontColorArgb", settings.SubtitleSettings.SsaFontColorArgb.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaFontBold", settings.SubtitleSettings.SsaFontBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaOutline", settings.SubtitleSettings.SsaOutline.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaShadow", settings.SubtitleSettings.SsaShadow.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaOpaqueBox", settings.SubtitleSettings.SsaOpaqueBox.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaMarginLeft", settings.SubtitleSettings.SsaMarginLeft.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaMarginRight", settings.SubtitleSettings.SsaMarginRight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SsaMarginTopBottom", settings.SubtitleSettings.SsaMarginTopBottom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DCinemaFontFile", settings.SubtitleSettings.DCinemaFontFile); + textWriter.WriteElementString("DCinemaFontSize", settings.SubtitleSettings.DCinemaFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DCinemaBottomMargin", settings.SubtitleSettings.DCinemaBottomMargin.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DCinemaZPosition", settings.SubtitleSettings.DCinemaZPosition.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DCinemaFadeUpTime", settings.SubtitleSettings.DCinemaFadeUpTime.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DCinemaFadeDownTime", settings.SubtitleSettings.DCinemaFadeDownTime.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SamiDisplayTwoClassesAsTwoSubtitles", settings.SubtitleSettings.SamiDisplayTwoClassesAsTwoSubtitles.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SamiHtmlEncodeMode", settings.SubtitleSettings.SamiHtmlEncodeMode.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TimedText10TimeCodeFormat", settings.SubtitleSettings.TimedText10TimeCodeFormat); + textWriter.WriteElementString("TimedText10ShowStyleAndLanguage", settings.SubtitleSettings.TimedText10ShowStyleAndLanguage.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TimedText10FileExtension", settings.SubtitleSettings.TimedText10FileExtension); + textWriter.WriteElementString("FcpFontSize", settings.SubtitleSettings.FcpFontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FcpFontName", settings.SubtitleSettings.FcpFontName); + textWriter.WriteElementString("Cavena890StartOfMessage", settings.SubtitleSettings.Cavena890StartOfMessage); + textWriter.WriteElementString("EbuStlTeletextUseBox", settings.SubtitleSettings.EbuStlTeletextUseBox.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("EbuStlTeletextUseDoubleHeight", settings.SubtitleSettings.EbuStlTeletextUseDoubleHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("EbuStlMarginTop", settings.SubtitleSettings.EbuStlMarginTop.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("EbuStlMarginBottom", settings.SubtitleSettings.EbuStlMarginBottom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("EbuStlNewLineRows", settings.SubtitleSettings.EbuStlNewLineRows.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PacVerticalTop", settings.SubtitleSettings.PacVerticalTop.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PacVerticalCenter", settings.SubtitleSettings.PacVerticalCenter.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PacVerticalBottom", settings.SubtitleSettings.PacVerticalBottom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DvdStudioProHeader", settings.SubtitleSettings.DvdStudioProHeader.TrimEnd() + Environment.NewLine); + textWriter.WriteElementString("TmpegEncXmlFontName", settings.SubtitleSettings.TmpegEncXmlFontName.TrimEnd()); + textWriter.WriteElementString("TmpegEncXmlFontHeight", settings.SubtitleSettings.TmpegEncXmlFontHeight.TrimEnd()); + textWriter.WriteElementString("TmpegEncXmlPosition", settings.SubtitleSettings.TmpegEncXmlPosition.TrimEnd()); + textWriter.WriteElementString("CheetahCaptionAlwayWriteEndTime", settings.SubtitleSettings.CheetahCaptionAlwayWriteEndTime.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NuendoCharacterListFile", settings.SubtitleSettings.NuendoCharacterListFile); + textWriter.WriteElementString("WebVttTimescale", settings.SubtitleSettings.WebVttTimescale.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TeletextItalicFix", settings.SubtitleSettings.TeletextItalicFix.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WebVttUseXTimestampMap", settings.SubtitleSettings.WebVttUseXTimestampMap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("Proxy", string.Empty); + textWriter.WriteElementString("ProxyAddress", settings.Proxy.ProxyAddress); + textWriter.WriteElementString("UserName", settings.Proxy.UserName); + textWriter.WriteElementString("Password", settings.Proxy.Password); + textWriter.WriteElementString("Domain", settings.Proxy.Domain); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("WordLists", string.Empty); + textWriter.WriteElementString("LastLanguage", settings.WordLists.LastLanguage); + textWriter.WriteElementString("Names", settings.WordLists.NamesUrl); + textWriter.WriteElementString("UseOnlineNames", settings.WordLists.UseOnlineNames.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("FcpExportSettings", string.Empty); + textWriter.WriteElementString("FontName", settings.FcpExportSettings.FontName); + textWriter.WriteElementString("FontSize", settings.FcpExportSettings.FontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Alignment", settings.FcpExportSettings.Alignment); + textWriter.WriteElementString("Baseline", settings.FcpExportSettings.Baseline.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Color", settings.FcpExportSettings.Color.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("CommonErrors", string.Empty); + textWriter.WriteElementString("StartPosition", settings.CommonErrors.StartPosition); + textWriter.WriteElementString("StartSize", settings.CommonErrors.StartSize); + textWriter.WriteElementString("EmptyLinesTicked", settings.CommonErrors.EmptyLinesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("OverlappingDisplayTimeTicked", settings.CommonErrors.OverlappingDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TooShortDisplayTimeTicked", settings.CommonErrors.TooShortDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TooLongDisplayTimeTicked", settings.CommonErrors.TooLongDisplayTimeTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TooShortGapTicked", settings.CommonErrors.TooShortGapTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("InvalidItalicTagsTicked", settings.CommonErrors.InvalidItalicTagsTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BreakLongLinesTicked", settings.CommonErrors.BreakLongLinesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeShortLinesTicked", settings.CommonErrors.MergeShortLinesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MergeShortLinesAllTicked", settings.CommonErrors.MergeShortLinesAllTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UnneededSpacesTicked", settings.CommonErrors.UnneededSpacesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UnneededPeriodsTicked", settings.CommonErrors.UnneededPeriodsTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixCommasTicked", settings.CommonErrors.FixCommasTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("MissingSpacesTicked", settings.CommonErrors.MissingSpacesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AddMissingQuotesTicked", settings.CommonErrors.AddMissingQuotesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("Fix3PlusLinesTicked", settings.CommonErrors.Fix3PlusLinesTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixHyphensTicked", settings.CommonErrors.FixHyphensTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixHyphensRemoveSingleLineTicked", settings.CommonErrors.FixHyphensRemoveSingleLineTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UppercaseIInsideLowercaseWordTicked", settings.CommonErrors.UppercaseIInsideLowercaseWordTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DoubleApostropheToQuoteTicked", settings.CommonErrors.DoubleApostropheToQuoteTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AddPeriodAfterParagraphTicked", settings.CommonErrors.AddPeriodAfterParagraphTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartWithUppercaseLetterAfterParagraphTicked", settings.CommonErrors.StartWithUppercaseLetterAfterParagraphTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartWithUppercaseLetterAfterPeriodInsideParagraphTicked", settings.CommonErrors.StartWithUppercaseLetterAfterPeriodInsideParagraphTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("StartWithUppercaseLetterAfterColonTicked", settings.CommonErrors.StartWithUppercaseLetterAfterColonTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AloneLowercaseIToUppercaseIEnglishTicked", settings.CommonErrors.AloneLowercaseIToUppercaseIEnglishTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixOcrErrorsViaReplaceListTicked", settings.CommonErrors.FixOcrErrorsViaReplaceListTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveSpaceBetweenNumberTicked", settings.CommonErrors.RemoveSpaceBetweenNumberTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixDialogsOnOneLineTicked", settings.CommonErrors.FixDialogsOnOneLineTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TurkishAnsiTicked", settings.CommonErrors.TurkishAnsiTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DanishLetterITicked", settings.CommonErrors.DanishLetterITicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpanishInvertedQuestionAndExclamationMarksTicked", settings.CommonErrors.SpanishInvertedQuestionAndExclamationMarksTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixDoubleDashTicked", settings.CommonErrors.FixDoubleDashTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixDoubleGreaterThanTicked", settings.CommonErrors.FixDoubleGreaterThanTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixEllipsesStartTicked", settings.CommonErrors.FixEllipsesStartTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixMissingOpenBracketTicked", settings.CommonErrors.FixMissingOpenBracketTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixMusicNotationTicked", settings.CommonErrors.FixMusicNotationTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixContinuationStyleTicked", settings.CommonErrors.FixContinuationStyleTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixUnnecessaryLeadingDotsTicked", settings.CommonErrors.FixUnnecessaryLeadingDotsTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NormalizeStringsTicked", settings.CommonErrors.NormalizeStringsTicked.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DefaultFixes", settings.CommonErrors.DefaultFixes); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("VideoControls", string.Empty); + textWriter.WriteElementString("CustomSearchText1", settings.VideoControls.CustomSearchText1); + textWriter.WriteElementString("CustomSearchText2", settings.VideoControls.CustomSearchText2); + textWriter.WriteElementString("CustomSearchText3", settings.VideoControls.CustomSearchText3); + textWriter.WriteElementString("CustomSearchText4", settings.VideoControls.CustomSearchText4); + textWriter.WriteElementString("CustomSearchText5", settings.VideoControls.CustomSearchText5); + textWriter.WriteElementString("CustomSearchUrl1", settings.VideoControls.CustomSearchUrl1); + textWriter.WriteElementString("CustomSearchUrl2", settings.VideoControls.CustomSearchUrl2); + textWriter.WriteElementString("CustomSearchUrl3", settings.VideoControls.CustomSearchUrl3); + textWriter.WriteElementString("CustomSearchUrl4", settings.VideoControls.CustomSearchUrl4); + textWriter.WriteElementString("CustomSearchUrl5", settings.VideoControls.CustomSearchUrl5); + textWriter.WriteElementString("LastActiveTab", settings.VideoControls.LastActiveTab); + textWriter.WriteElementString("WaveformDrawGrid", settings.VideoControls.WaveformDrawGrid.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformDrawCps", settings.VideoControls.WaveformDrawCps.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformDrawWpm", settings.VideoControls.WaveformDrawWpm.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformAllowOverlap", settings.VideoControls.WaveformAllowOverlap.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformFocusOnMouseEnter", settings.VideoControls.WaveformFocusOnMouseEnter.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformListViewFocusOnMouseEnter", settings.VideoControls.WaveformListViewFocusOnMouseEnter.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSetVideoPositionOnMoveStartEnd", settings.VideoControls.WaveformSetVideoPositionOnMoveStartEnd.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSingleClickSelect", settings.VideoControls.WaveformSingleClickSelect.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSnapToSceneChanges", settings.VideoControls.WaveformSnapToSceneChanges.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformBorderHitMs", settings.VideoControls.WaveformBorderHitMs.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformGridColor", settings.VideoControls.WaveformGridColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformColor", settings.VideoControls.WaveformColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSelectedColor", settings.VideoControls.WaveformSelectedColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformBackgroundColor", settings.VideoControls.WaveformBackgroundColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformTextColor", settings.VideoControls.WaveformTextColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformCursorColor", settings.VideoControls.WaveformCursorColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformChaptersColor", settings.VideoControls.WaveformChaptersColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformTextSize", settings.VideoControls.WaveformTextSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformTextBold", settings.VideoControls.WaveformTextBold.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformDoubleClickOnNonParagraphAction", settings.VideoControls.WaveformDoubleClickOnNonParagraphAction); + textWriter.WriteElementString("WaveformRightClickOnNonParagraphAction", settings.VideoControls.WaveformRightClickOnNonParagraphAction); + textWriter.WriteElementString("WaveformMouseWheelScrollUpIsForward", settings.VideoControls.WaveformMouseWheelScrollUpIsForward.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GenerateSpectrogram", settings.VideoControls.GenerateSpectrogram.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("SpectrogramAppearance", settings.VideoControls.SpectrogramAppearance); + textWriter.WriteElementString("WaveformMinimumSampleRate", settings.VideoControls.WaveformMinimumSampleRate.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSeeksSilenceDurationSeconds", settings.VideoControls.WaveformSeeksSilenceDurationSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformSeeksSilenceMaxVolume", settings.VideoControls.WaveformSeeksSilenceMaxVolume.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformUnwrapText", settings.VideoControls.WaveformUnwrapText.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("WaveformHideWpmCpsLabels", settings.VideoControls.WaveformHideWpmCpsLabels.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("NetworkSettings", string.Empty); + textWriter.WriteElementString("SessionKey", settings.NetworkSettings.SessionKey); + textWriter.WriteElementString("UserName", settings.NetworkSettings.UserName); + textWriter.WriteElementString("WebServiceUrl", settings.NetworkSettings.WebServiceUrl); + textWriter.WriteElementString("PollIntervalSeconds", settings.NetworkSettings.PollIntervalSeconds.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("NewMessageSound", settings.NetworkSettings.NewMessageSound); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("VobSubOcr", string.Empty); + textWriter.WriteElementString("XOrMorePixelsMakesSpace", settings.VobSubOcr.XOrMorePixelsMakesSpace.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AllowDifferenceInPercent", settings.VobSubOcr.AllowDifferenceInPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BlurayAllowDifferenceInPercent", settings.VobSubOcr.BlurayAllowDifferenceInPercent.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastImageCompareFolder", settings.VobSubOcr.LastImageCompareFolder); + textWriter.WriteElementString("LastModiLanguageId", settings.VobSubOcr.LastModiLanguageId.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastOcrMethod", settings.VobSubOcr.LastOcrMethod); + textWriter.WriteElementString("TesseractLastLanguage", settings.VobSubOcr.TesseractLastLanguage); + textWriter.WriteElementString("UseTesseractFallback", settings.VobSubOcr.UseTesseractFallback.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UseItalicsInTesseract", settings.VobSubOcr.UseItalicsInTesseract.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TesseractEngineMode", settings.VobSubOcr.TesseractEngineMode.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UseMusicSymbolsInTesseract", settings.VobSubOcr.UseMusicSymbolsInTesseract.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RightToLeft", settings.VobSubOcr.RightToLeft.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("TopToBottom", settings.VobSubOcr.TopToBottom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("DefaultMillisecondsForUnknownDurations", settings.VobSubOcr.DefaultMillisecondsForUnknownDurations.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FixOcrErrors", settings.VobSubOcr.FixOcrErrors.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("PromptForUnknownWords", settings.VobSubOcr.PromptForUnknownWords.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("GuessUnknownWords", settings.VobSubOcr.GuessUnknownWords.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("AutoBreakSubtitleIfMoreThanTwoLines", settings.VobSubOcr.AutoBreakSubtitleIfMoreThanTwoLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("ItalicFactor", settings.VobSubOcr.ItalicFactor.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrDraw", settings.VobSubOcr.LineOcrDraw.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrMinHeightSplit", settings.VobSubOcr.LineOcrMinHeightSplit.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrAdvancedItalic", settings.VobSubOcr.LineOcrAdvancedItalic.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrLastLanguages", settings.VobSubOcr.LineOcrLastLanguages); + textWriter.WriteElementString("LineOcrLastSpellCheck", settings.VobSubOcr.LineOcrLastSpellCheck); + textWriter.WriteElementString("LineOcrLinesToAutoGuess", settings.VobSubOcr.LineOcrLinesToAutoGuess.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrMinLineHeight", settings.VobSubOcr.LineOcrMinLineHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrMaxLineHeight", settings.VobSubOcr.LineOcrMaxLineHeight.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LineOcrMaxErrorPixels", settings.VobSubOcr.LineOcrMaxErrorPixels.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastBinaryImageCompareDb", settings.VobSubOcr.LastBinaryImageCompareDb); + textWriter.WriteElementString("LastBinaryImageSpellCheck", settings.VobSubOcr.LastBinaryImageSpellCheck); + textWriter.WriteElementString("BinaryAutoDetectBestDb", settings.VobSubOcr.BinaryAutoDetectBestDb.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("LastTesseractSpellCheck", settings.VobSubOcr.LastTesseractSpellCheck); + textWriter.WriteElementString("CaptureTopAlign", settings.VobSubOcr.CaptureTopAlign.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UnfocusedAttentionBlinkCount", settings.VobSubOcr.UnfocusedAttentionBlinkCount.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("UnfocusedAttentionPlaySoundCount", settings.VobSubOcr.UnfocusedAttentionPlaySoundCount.ToString(CultureInfo.InvariantCulture)); + + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("MultipleSearchAndReplaceGroups", string.Empty); + foreach (var group in settings.MultipleSearchAndReplaceGroups) + { + if (!string.IsNullOrEmpty(group?.Name)) + { + textWriter.WriteStartElement("Group", string.Empty); + textWriter.WriteElementString("Name", group.Name); + textWriter.WriteElementString("Enabled", group.Enabled.ToString(CultureInfo.InvariantCulture)); + foreach (var item in group.Rules) + { + textWriter.WriteStartElement("Rule", string.Empty); + textWriter.WriteElementString("Enabled", item.Enabled.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FindWhat", item.FindWhat); + textWriter.WriteElementString("ReplaceWith", item.ReplaceWith); + textWriter.WriteElementString("SearchType", item.SearchType); + textWriter.WriteElementString("Description", item.Description); + textWriter.WriteEndElement(); + } + textWriter.WriteEndElement(); + } + } + textWriter.WriteEndElement(); + + WriteShortcuts(settings.Shortcuts, textWriter); + + textWriter.WriteStartElement("RemoveTextForHearingImpaired", string.Empty); + textWriter.WriteElementString("RemoveTextBetweenBrackets", settings.RemoveTextForHearingImpaired.RemoveTextBetweenBrackets.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBetweenParentheses", settings.RemoveTextForHearingImpaired.RemoveTextBetweenParentheses.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBetweenCurlyBrackets", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCurlyBrackets.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBetweenQuestionMarks", settings.RemoveTextForHearingImpaired.RemoveTextBetweenQuestionMarks.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBetweenCustom", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustom.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBetweenCustomBefore", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomBefore); + textWriter.WriteElementString("RemoveTextBetweenCustomAfter", settings.RemoveTextForHearingImpaired.RemoveTextBetweenCustomAfter); + textWriter.WriteElementString("RemoveTextBetweenOnlySeparateLines", settings.RemoveTextForHearingImpaired.RemoveTextBetweenOnlySeparateLines.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBeforeColon", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColon.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBeforeColonOnlyIfUppercase", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyIfUppercase.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveTextBeforeColonOnlyOnSeparateLine", settings.RemoveTextForHearingImpaired.RemoveTextBeforeColonOnlyOnSeparateLine.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveInterjections", settings.RemoveTextForHearingImpaired.RemoveInterjections.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveInterjectionsOnlyOnSeparateLine", settings.RemoveTextForHearingImpaired.RemoveInterjectionsOnlyOnSeparateLine.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveIfAllUppercase", settings.RemoveTextForHearingImpaired.RemoveIfAllUppercase.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveIfContains", settings.RemoveTextForHearingImpaired.RemoveIfContains.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("RemoveIfContainsText", settings.RemoveTextForHearingImpaired.RemoveIfContainsText); + textWriter.WriteEndElement(); + + textWriter.WriteStartElement("SubtitleBeaming", string.Empty); + textWriter.WriteElementString("FontName", settings.SubtitleBeaming.FontName); + textWriter.WriteElementString("FontColor", settings.SubtitleBeaming.FontColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("FontSize", settings.SubtitleBeaming.FontSize.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BorderColor", settings.SubtitleBeaming.BorderColor.ToArgb().ToString(CultureInfo.InvariantCulture)); + textWriter.WriteElementString("BorderWidth", settings.SubtitleBeaming.BorderWidth.ToString(CultureInfo.InvariantCulture)); + textWriter.WriteEndElement(); + + textWriter.WriteEndElement(); + + textWriter.WriteEndDocument(); + textWriter.Flush(); + + try + { + File.WriteAllText(fileName, sb.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\""), Encoding.UTF8); + } + catch + { + // ignored + } + } + } + + internal static void WriteShortcuts(Shortcuts shortcuts, XmlWriter textWriter) + { + textWriter.WriteStartElement("Shortcuts", string.Empty); + textWriter.WriteElementString("GeneralGoToFirstSelectedLine", shortcuts.GeneralGoToFirstSelectedLine); + textWriter.WriteElementString("GeneralGoToNextEmptyLine", shortcuts.GeneralGoToNextEmptyLine); + textWriter.WriteElementString("GeneralMergeSelectedLines", shortcuts.GeneralMergeSelectedLines); + textWriter.WriteElementString("GeneralMergeSelectedLinesAndAutoBreak", shortcuts.GeneralMergeSelectedLinesAndAutoBreak); + textWriter.WriteElementString("GeneralMergeSelectedLinesAndUnbreak", shortcuts.GeneralMergeSelectedLinesAndUnbreak); + textWriter.WriteElementString("GeneralMergeSelectedLinesAndUnbreakCjk", shortcuts.GeneralMergeSelectedLinesAndUnbreakCjk); + textWriter.WriteElementString("GeneralMergeSelectedLinesOnlyFirstText", shortcuts.GeneralMergeSelectedLinesOnlyFirstText); + textWriter.WriteElementString("GeneralMergeSelectedLinesBilingual", shortcuts.GeneralMergeSelectedLinesBilingual); + textWriter.WriteElementString("GeneralMergeWithNext", shortcuts.GeneralMergeWithNext); + textWriter.WriteElementString("GeneralMergeWithPrevious", shortcuts.GeneralMergeWithPrevious); + textWriter.WriteElementString("GeneralToggleTranslationMode", shortcuts.GeneralToggleTranslationMode); + textWriter.WriteElementString("GeneralSwitchOriginalAndTranslation", shortcuts.GeneralSwitchOriginalAndTranslation); + textWriter.WriteElementString("GeneralMergeOriginalAndTranslation", shortcuts.GeneralMergeOriginalAndTranslation); + textWriter.WriteElementString("GeneralGoToNextSubtitle", shortcuts.GeneralGoToNextSubtitle); + textWriter.WriteElementString("GeneralGoToNextSubtitleCursorAtEnd", shortcuts.GeneralGoToNextSubtitleCursorAtEnd); + textWriter.WriteElementString("GeneralGoToPrevSubtitle", shortcuts.GeneralGoToPrevSubtitle); + textWriter.WriteElementString("GeneralGoToEndOfCurrentSubtitle", shortcuts.GeneralGoToEndOfCurrentSubtitle); + textWriter.WriteElementString("GeneralGoToStartOfCurrentSubtitle", shortcuts.GeneralGoToStartOfCurrentSubtitle); + textWriter.WriteElementString("GeneralGoToPreviousSubtitleAndFocusVideo", shortcuts.GeneralGoToPreviousSubtitleAndFocusVideo); + textWriter.WriteElementString("GeneralGoToNextSubtitleAndFocusVideo", shortcuts.GeneralGoToNextSubtitleAndFocusVideo); + textWriter.WriteElementString("GeneralGoToPrevSubtitleAndPlay", shortcuts.GeneralGoToPrevSubtitleAndPlay); + textWriter.WriteElementString("GeneralGoToNextSubtitleAndPlay", shortcuts.GeneralGoToNextSubtitleAndPlay); + textWriter.WriteElementString("GeneralAutoCalcCurrentDuration", shortcuts.GeneralAutoCalcCurrentDuration); + textWriter.WriteElementString("GeneralPlayFirstSelected", shortcuts.GeneralPlayFirstSelected); + textWriter.WriteElementString("GeneralHelp", shortcuts.GeneralHelp); + textWriter.WriteElementString("GeneralUnbrekNoSpace", shortcuts.GeneralUnbrekNoSpace); + textWriter.WriteElementString("GeneralToggleBookmarks", shortcuts.GeneralToggleBookmarks); + textWriter.WriteElementString("GeneralToggleBookmarksWithText", shortcuts.GeneralToggleBookmarksWithText); + textWriter.WriteElementString("GeneralClearBookmarks", shortcuts.GeneralClearBookmarks); + textWriter.WriteElementString("GeneralGoToBookmark", shortcuts.GeneralGoToBookmark); + textWriter.WriteElementString("GeneralGoToNextBookmark", shortcuts.GeneralGoToNextBookmark); + textWriter.WriteElementString("ChooseProfile", shortcuts.ChooseProfile); + textWriter.WriteElementString("DuplicateLine", shortcuts.DuplicateLine); + textWriter.WriteElementString("GeneralGoToPreviousBookmark", shortcuts.GeneralGoToPreviousBookmark); + textWriter.WriteElementString("MainFileNew", shortcuts.MainFileNew); + textWriter.WriteElementString("MainFileOpen", shortcuts.MainFileOpen); + textWriter.WriteElementString("MainFileOpenKeepVideo", shortcuts.MainFileOpenKeepVideo); + textWriter.WriteElementString("MainFileSave", shortcuts.MainFileSave); + textWriter.WriteElementString("MainFileSaveOriginal", shortcuts.MainFileSaveOriginal); + textWriter.WriteElementString("MainFileSaveOriginalAs", shortcuts.MainFileSaveOriginalAs); + textWriter.WriteElementString("MainFileSaveAs", shortcuts.MainFileSaveAs); + textWriter.WriteElementString("MainFileCloseOriginal", shortcuts.MainFileCloseOriginal); + textWriter.WriteElementString("MainFileCompare", shortcuts.MainFileCompare); + textWriter.WriteElementString("MainFileOpenOriginal", shortcuts.MainFileOpenOriginal); + textWriter.WriteElementString("MainFileSaveAll", shortcuts.MainFileSaveAll); + textWriter.WriteElementString("MainFileImportPlainText", shortcuts.MainFileImportPlainText); + textWriter.WriteElementString("MainFileImportTimeCodes", shortcuts.MainFileImportTimeCodes); + textWriter.WriteElementString("MainFileExportPlainText", shortcuts.MainFileExportPlainText); + textWriter.WriteElementString("MainFileExportEbu", shortcuts.MainFileExportEbu); + textWriter.WriteElementString("MainFileExportPac", shortcuts.MainFileExportPac); + textWriter.WriteElementString("MainEditUndo", shortcuts.MainEditUndo); + textWriter.WriteElementString("MainEditRedo", shortcuts.MainEditRedo); + textWriter.WriteElementString("MainEditFind", shortcuts.MainEditFind); + textWriter.WriteElementString("MainEditFindNext", shortcuts.MainEditFindNext); + textWriter.WriteElementString("MainEditReplace", shortcuts.MainEditReplace); + textWriter.WriteElementString("MainEditMultipleReplace", shortcuts.MainEditMultipleReplace); + textWriter.WriteElementString("MainEditGoToLineNumber", shortcuts.MainEditGoToLineNumber); + textWriter.WriteElementString("MainEditRightToLeft", shortcuts.MainEditRightToLeft); + textWriter.WriteElementString("MainToolsFixCommonErrors", shortcuts.MainToolsFixCommonErrors); + textWriter.WriteElementString("MainToolsFixCommonErrorsPreview", shortcuts.MainToolsFixCommonErrorsPreview); + textWriter.WriteElementString("MainToolsMergeShortLines", shortcuts.MainToolsMergeShortLines); + textWriter.WriteElementString("MainToolsMergeDuplicateText", shortcuts.MainToolsMergeDuplicateText); + textWriter.WriteElementString("MainToolsMergeSameTimeCodes", shortcuts.MainToolsMergeSameTimeCodes); + textWriter.WriteElementString("MainToolsMakeEmptyFromCurrent", shortcuts.MainToolsMakeEmptyFromCurrent); + textWriter.WriteElementString("MainToolsSplitLongLines", shortcuts.MainToolsSplitLongLines); + textWriter.WriteElementString("MainToolsMinimumDisplayTimeBetweenParagraphs", shortcuts.MainToolsMinimumDisplayTimeBetweenParagraphs); + textWriter.WriteElementString("MainToolsDurationsBridgeGap", shortcuts.MainToolsDurationsBridgeGap); + textWriter.WriteElementString("MainToolsRenumber", shortcuts.MainToolsRenumber); + textWriter.WriteElementString("MainToolsRemoveTextForHI", shortcuts.MainToolsRemoveTextForHI); + textWriter.WriteElementString("MainToolsChangeCasing", shortcuts.MainToolsChangeCasing); + textWriter.WriteElementString("MainToolsAutoDuration", shortcuts.MainToolsAutoDuration); + textWriter.WriteElementString("MainToolsBatchConvert", shortcuts.MainToolsBatchConvert); + textWriter.WriteElementString("MainToolsMeasurementConverter", shortcuts.MainToolsMeasurementConverter); + textWriter.WriteElementString("MainToolsSplit", shortcuts.MainToolsSplit); + textWriter.WriteElementString("MainToolsAppend", shortcuts.MainToolsAppend); + textWriter.WriteElementString("MainToolsJoin", shortcuts.MainToolsJoin); + textWriter.WriteElementString("MainToolsBeamer", shortcuts.MainToolsBeamer); + textWriter.WriteElementString("MainEditToggleTranslationOriginalInPreviews", shortcuts.MainEditToggleTranslationOriginalInPreviews); + textWriter.WriteElementString("MainEditInverseSelection", shortcuts.MainEditInverseSelection); + textWriter.WriteElementString("MainEditModifySelection", shortcuts.MainEditModifySelection); + textWriter.WriteElementString("MainVideoOpen", shortcuts.MainVideoOpen); + textWriter.WriteElementString("MainVideoClose", shortcuts.MainVideoClose); + textWriter.WriteElementString("MainVideoPause", shortcuts.MainVideoPause); + textWriter.WriteElementString("MainVideoPlayFromJustBefore", shortcuts.MainVideoPlayFromJustBefore); + textWriter.WriteElementString("MainVideoPlayPauseToggle", shortcuts.MainVideoPlayPauseToggle); + textWriter.WriteElementString("MainVideoShowHideVideo", shortcuts.MainVideoShowHideVideo); + textWriter.WriteElementString("MainVideoFoucsSetVideoPosition", shortcuts.MainVideoFoucsSetVideoPosition); + textWriter.WriteElementString("MainVideoToggleVideoControls", shortcuts.MainVideoToggleVideoControls); + textWriter.WriteElementString("MainVideo1FrameLeft", shortcuts.MainVideo1FrameLeft); + textWriter.WriteElementString("MainVideo1FrameRight", shortcuts.MainVideo1FrameRight); + textWriter.WriteElementString("MainVideo1FrameLeftWithPlay", shortcuts.MainVideo1FrameLeftWithPlay); + textWriter.WriteElementString("MainVideo1FrameRightWithPlay", shortcuts.MainVideo1FrameRightWithPlay); + textWriter.WriteElementString("MainVideo100MsLeft", shortcuts.MainVideo100MsLeft); + textWriter.WriteElementString("MainVideo100MsRight", shortcuts.MainVideo100MsRight); + textWriter.WriteElementString("MainVideo500MsLeft", shortcuts.MainVideo500MsLeft); + textWriter.WriteElementString("MainVideo500MsRight", shortcuts.MainVideo500MsRight); + textWriter.WriteElementString("MainVideo1000MsLeft", shortcuts.MainVideo1000MsLeft); + textWriter.WriteElementString("MainVideo1000MsRight", shortcuts.MainVideo1000MsRight); + textWriter.WriteElementString("MainVideo5000MsLeft", shortcuts.MainVideo5000MsLeft); + textWriter.WriteElementString("MainVideo5000MsRight", shortcuts.MainVideo5000MsRight); + textWriter.WriteElementString("MainVideoXSMsLeft", shortcuts.MainVideoXSMsLeft); + textWriter.WriteElementString("MainVideoXSMsRight", shortcuts.MainVideoXSMsRight); + textWriter.WriteElementString("MainVideoXLMsLeft", shortcuts.MainVideoXLMsLeft); + textWriter.WriteElementString("MainVideoXLMsRight", shortcuts.MainVideoXLMsRight); + textWriter.WriteElementString("MainVideo3000MsLeft", shortcuts.MainVideo3000MsLeft); + textWriter.WriteElementString("MainVideoGoToStartCurrent", shortcuts.MainVideoGoToStartCurrent); + textWriter.WriteElementString("MainVideoToggleStartEndCurrent", shortcuts.MainVideoToggleStartEndCurrent); + textWriter.WriteElementString("MainVideoPlayCurrent", shortcuts.MainVideoPlayCurrent); + textWriter.WriteElementString("MainVideoGoToPrevSubtitle", shortcuts.MainVideoGoToPrevSubtitle); + textWriter.WriteElementString("MainVideoGoToNextSubtitle", shortcuts.MainVideoGoToNextSubtitle); + textWriter.WriteElementString("MainVideoGoToPrevChapter", shortcuts.MainVideoGoToPrevChapter); + textWriter.WriteElementString("MainVideoGoToNextChapter", shortcuts.MainVideoGoToNextChapter); + textWriter.WriteElementString("MainVideoSelectNextSubtitle", shortcuts.MainVideoSelectNextSubtitle); + textWriter.WriteElementString("MainVideoFullscreen", shortcuts.MainVideoFullscreen); + textWriter.WriteElementString("MainVideoSlower", shortcuts.MainVideoSlower); + textWriter.WriteElementString("MainVideoFaster", shortcuts.MainVideoFaster); + textWriter.WriteElementString("MainVideoReset", shortcuts.MainVideoReset); + textWriter.WriteElementString("MainSpellCheck", shortcuts.MainSpellCheck); + textWriter.WriteElementString("MainSpellCheckFindDoubleWords", shortcuts.MainSpellCheckFindDoubleWords); + textWriter.WriteElementString("MainSpellCheckAddWordToNames", shortcuts.MainSpellCheckAddWordToNames); + textWriter.WriteElementString("MainSynchronizationAdjustTimes", shortcuts.MainSynchronizationAdjustTimes); + textWriter.WriteElementString("MainSynchronizationVisualSync", shortcuts.MainSynchronizationVisualSync); + textWriter.WriteElementString("MainSynchronizationPointSync", shortcuts.MainSynchronizationPointSync); + textWriter.WriteElementString("MainSynchronizationPointSyncViaFile", shortcuts.MainSynchronizationPointSyncViaFile); + textWriter.WriteElementString("MainSynchronizationChangeFrameRate", shortcuts.MainSynchronizationChangeFrameRate); + textWriter.WriteElementString("MainListViewItalic", shortcuts.MainListViewItalic); + textWriter.WriteElementString("MainListViewBold", shortcuts.MainListViewBold); + textWriter.WriteElementString("MainListViewUnderline", shortcuts.MainListViewUnderline); + textWriter.WriteElementString("MainListViewBox", shortcuts.MainListViewBox); + textWriter.WriteElementString("MainListViewSplit", shortcuts.MainListViewSplit); + textWriter.WriteElementString("MainListViewToggleDashes", shortcuts.MainListViewToggleDashes); + textWriter.WriteElementString("MainListViewToggleMusicSymbols", shortcuts.MainListViewToggleMusicSymbols); + textWriter.WriteElementString("MainListViewAlignment", shortcuts.MainListViewAlignment); + textWriter.WriteElementString("MainListViewAlignmentN1", shortcuts.MainListViewAlignmentN1); + textWriter.WriteElementString("MainListViewAlignmentN2", shortcuts.MainListViewAlignmentN2); + textWriter.WriteElementString("MainListViewAlignmentN3", shortcuts.MainListViewAlignmentN3); + textWriter.WriteElementString("MainListViewAlignmentN4", shortcuts.MainListViewAlignmentN4); + textWriter.WriteElementString("MainListViewAlignmentN5", shortcuts.MainListViewAlignmentN5); + textWriter.WriteElementString("MainListViewAlignmentN6", shortcuts.MainListViewAlignmentN6); + textWriter.WriteElementString("MainListViewAlignmentN7", shortcuts.MainListViewAlignmentN7); + textWriter.WriteElementString("MainListViewAlignmentN8", shortcuts.MainListViewAlignmentN8); + textWriter.WriteElementString("MainListViewAlignmentN9", shortcuts.MainListViewAlignmentN9); + textWriter.WriteElementString("MainRemoveFormatting", shortcuts.MainRemoveFormatting); + textWriter.WriteElementString("MainListViewCopyText", shortcuts.MainListViewCopyText); + textWriter.WriteElementString("MainListViewCopyTextFromOriginalToCurrent", shortcuts.MainListViewCopyTextFromOriginalToCurrent); + textWriter.WriteElementString("MainListViewAutoDuration", shortcuts.MainListViewAutoDuration); + textWriter.WriteElementString("MainListViewColumnDeleteText", shortcuts.MainListViewColumnDeleteText); + textWriter.WriteElementString("MainListViewColumnDeleteTextAndShiftUp", shortcuts.MainListViewColumnDeleteTextAndShiftUp); + textWriter.WriteElementString("MainListViewColumnInsertText", shortcuts.MainListViewColumnInsertText); + textWriter.WriteElementString("MainListViewColumnPaste", shortcuts.MainListViewColumnPaste); + textWriter.WriteElementString("MainListViewColumnTextUp", shortcuts.MainListViewColumnTextUp); + textWriter.WriteElementString("MainListViewColumnTextDown", shortcuts.MainListViewColumnTextDown); + textWriter.WriteElementString("MainListViewFocusWaveform", shortcuts.MainListViewFocusWaveform); + textWriter.WriteElementString("MainListViewGoToNextError", shortcuts.MainListViewGoToNextError); + textWriter.WriteElementString("MainListViewRemoveTimeCodes", shortcuts.MainListViewRemoveTimeCodes); + textWriter.WriteElementString("MainEditFixRTLViaUnicodeChars", shortcuts.MainEditFixRTLViaUnicodeChars); + textWriter.WriteElementString("MainEditRemoveRTLUnicodeChars", shortcuts.MainEditRemoveRTLUnicodeChars); + textWriter.WriteElementString("MainEditReverseStartAndEndingForRTL", shortcuts.MainEditReverseStartAndEndingForRTL); + textWriter.WriteElementString("MainTextBoxItalic", shortcuts.MainTextBoxItalic); + textWriter.WriteElementString("MainTextBoxSplitAtCursor", shortcuts.MainTextBoxSplitAtCursor); + textWriter.WriteElementString("MainTextBoxSplitAtCursorAndVideoPos", shortcuts.MainTextBoxSplitAtCursorAndVideoPos); + textWriter.WriteElementString("MainTextBoxSplitSelectedLineBilingual", shortcuts.MainTextBoxSplitSelectedLineBilingual); + textWriter.WriteElementString("MainTextBoxMoveLastWordDown", shortcuts.MainTextBoxMoveLastWordDown); + textWriter.WriteElementString("MainTextBoxMoveFirstWordFromNextUp", shortcuts.MainTextBoxMoveFirstWordFromNextUp); + textWriter.WriteElementString("MainTextBoxMoveLastWordDownCurrent", shortcuts.MainTextBoxMoveLastWordDownCurrent); + textWriter.WriteElementString("MainTextBoxMoveFirstWordUpCurrent", shortcuts.MainTextBoxMoveFirstWordUpCurrent); + textWriter.WriteElementString("MainTextBoxSelectionToLower", shortcuts.MainTextBoxSelectionToLower); + textWriter.WriteElementString("MainTextBoxSelectionToUpper", shortcuts.MainTextBoxSelectionToUpper); + textWriter.WriteElementString("MainTextBoxSelectionToggleCasing", shortcuts.MainTextBoxSelectionToggleCasing); + textWriter.WriteElementString("MainTextBoxSelectionToRuby", shortcuts.MainTextBoxSelectionToRuby); + textWriter.WriteElementString("MainTextBoxToggleAutoDuration", shortcuts.MainTextBoxToggleAutoDuration); + textWriter.WriteElementString("MainCreateInsertSubAtVideoPos", shortcuts.MainCreateInsertSubAtVideoPos); + textWriter.WriteElementString("MainCreateInsertSubAtVideoPosNoTextBoxFocus", shortcuts.MainCreateInsertSubAtVideoPosNoTextBoxFocus); + textWriter.WriteElementString("MainCreateSetStart", shortcuts.MainCreateSetStart); + textWriter.WriteElementString("MainCreateSetEnd", shortcuts.MainCreateSetEnd); + textWriter.WriteElementString("MainAdjustSetEndAndPause", shortcuts.MainAdjustSetEndAndPause); + textWriter.WriteElementString("MainCreateSetEndAddNewAndGoToNew", shortcuts.MainCreateSetEndAddNewAndGoToNew); + textWriter.WriteElementString("MainCreateStartDownEndUp", shortcuts.MainCreateStartDownEndUp); + textWriter.WriteElementString("MainAdjustSetStartAndOffsetTheRest", shortcuts.MainAdjustSetStartAndOffsetTheRest); + textWriter.WriteElementString("MainAdjustSetStartAndOffsetTheRest2", shortcuts.MainAdjustSetStartAndOffsetTheRest2); + textWriter.WriteElementString("MainAdjustSetEndAndOffsetTheRest", shortcuts.MainAdjustSetEndAndOffsetTheRest); + textWriter.WriteElementString("MainAdjustSetEndAndOffsetTheRestAndGoToNext", shortcuts.MainAdjustSetEndAndOffsetTheRestAndGoToNext); + textWriter.WriteElementString("MainAdjustSetEndAndGotoNext", shortcuts.MainAdjustSetEndAndGotoNext); + textWriter.WriteElementString("MainAdjustViaEndAutoStart", shortcuts.MainAdjustViaEndAutoStart); + textWriter.WriteElementString("MainAdjustViaEndAutoStartAndGoToNext", shortcuts.MainAdjustViaEndAutoStartAndGoToNext); + textWriter.WriteElementString("MainAdjustSetStartAutoDurationAndGoToNext", shortcuts.MainAdjustSetStartAutoDurationAndGoToNext); + textWriter.WriteElementString("MainAdjustSetEndNextStartAndGoToNext", shortcuts.MainAdjustSetEndNextStartAndGoToNext); + textWriter.WriteElementString("MainAdjustStartDownEndUpAndGoToNext", shortcuts.MainAdjustStartDownEndUpAndGoToNext); + textWriter.WriteElementString("MainAdjustSetStartAndEndOfPrevious", shortcuts.MainAdjustSetStartAndEndOfPrevious); + textWriter.WriteElementString("MainAdjustSetStartAndEndOfPreviousAndGoToNext", shortcuts.MainAdjustSetStartAndEndOfPreviousAndGoToNext); + textWriter.WriteElementString("MainAdjustSetStartKeepDuration", shortcuts.MainAdjustSetStartKeepDuration); + textWriter.WriteElementString("MainAdjustSelected100MsForward", shortcuts.MainAdjustSelected100MsForward); + textWriter.WriteElementString("MainAdjustSelected100MsBack", shortcuts.MainAdjustSelected100MsBack); + textWriter.WriteElementString("MainAdjustStartXMsBack", shortcuts.MainAdjustStartXMsBack); + textWriter.WriteElementString("MainAdjustStartXMsForward", shortcuts.MainAdjustStartXMsForward); + textWriter.WriteElementString("MainAdjustEndXMsBack", shortcuts.MainAdjustEndXMsBack); + textWriter.WriteElementString("MainAdjustEndXMsForward", shortcuts.MainAdjustEndXMsForward); + textWriter.WriteElementString("MoveStartOneFrameBack", shortcuts.MoveStartOneFrameBack); + textWriter.WriteElementString("MoveStartOneFrameForward", shortcuts.MoveStartOneFrameForward); + textWriter.WriteElementString("MoveEndOneFrameBack", shortcuts.MoveEndOneFrameBack); + textWriter.WriteElementString("MoveEndOneFrameForward", shortcuts.MoveEndOneFrameForward); + textWriter.WriteElementString("MoveStartOneFrameBackKeepGapPrev", shortcuts.MoveStartOneFrameBackKeepGapPrev); + textWriter.WriteElementString("MoveStartOneFrameForwardKeepGapPrev", shortcuts.MoveStartOneFrameForwardKeepGapPrev); + textWriter.WriteElementString("MoveEndOneFrameBackKeepGapNext", shortcuts.MoveEndOneFrameBackKeepGapNext); + textWriter.WriteElementString("MoveEndOneFrameForwardKeepGapNext", shortcuts.MoveEndOneFrameForwardKeepGapNext); + textWriter.WriteElementString("MainAdjustSnapStartToNextSceneChange", shortcuts.MainAdjustSnapStartToNextSceneChange); + textWriter.WriteElementString("MainAdjustSnapStartToNextSceneChangeWithGap", shortcuts.MainAdjustSnapStartToNextSceneChangeWithGap); + textWriter.WriteElementString("MainAdjustSnapEndToPreviousSceneChange", shortcuts.MainAdjustSnapEndToPreviousSceneChange); + textWriter.WriteElementString("MainAdjustSnapEndToPreviousSceneChangeWithGap", shortcuts.MainAdjustSnapEndToPreviousSceneChangeWithGap); + textWriter.WriteElementString("MainAdjustExtendToNextSceneChange", shortcuts.MainAdjustExtendToNextSceneChange); + textWriter.WriteElementString("MainAdjustExtendToNextSceneChangeWithGap", shortcuts.MainAdjustExtendToNextSceneChangeWithGap); + textWriter.WriteElementString("MainAdjustExtendToPreviousSceneChange", shortcuts.MainAdjustExtendToPreviousSceneChange); + textWriter.WriteElementString("MainAdjustExtendToPreviousSceneChangeWithGap", shortcuts.MainAdjustExtendToPreviousSceneChangeWithGap); + textWriter.WriteElementString("MainAdjustExtendToNextSubtitle", shortcuts.MainAdjustExtendToNextSubtitle); + textWriter.WriteElementString("MainAdjustExtendToPreviousSubtitle", shortcuts.MainAdjustExtendToPreviousSubtitle); + textWriter.WriteElementString("MainAdjustExtendCurrentSubtitle", shortcuts.MainAdjustExtendCurrentSubtitle); + textWriter.WriteElementString("MainAdjustExtendPreviousLineEndToCurrentStart", shortcuts.MainAdjustExtendPreviousLineEndToCurrentStart); + textWriter.WriteElementString("MainAdjustExtendNextLineStartToCurrentEnd", shortcuts.MainAdjustExtendNextLineStartToCurrentEnd); + textWriter.WriteElementString("MainInsertAfter", shortcuts.MainInsertAfter); + textWriter.WriteElementString("MainTextBoxAutoBreak", shortcuts.MainTextBoxAutoBreak); + textWriter.WriteElementString("MainTextBoxBreakAtPosition", shortcuts.MainTextBoxBreakAtPosition); + textWriter.WriteElementString("MainTextBoxBreakAtPositionAndGoToNext", shortcuts.MainTextBoxBreakAtPositionAndGoToNext); + textWriter.WriteElementString("MainTextBoxUnbreak", shortcuts.MainTextBoxUnbreak); + textWriter.WriteElementString("MainWaveformInsertAtCurrentPosition", shortcuts.MainWaveformInsertAtCurrentPosition); + textWriter.WriteElementString("MainInsertBefore", shortcuts.MainInsertBefore); + textWriter.WriteElementString("MainMergeDialog", shortcuts.MainMergeDialog); + textWriter.WriteElementString("MainToggleFocus", shortcuts.MainToggleFocus); + textWriter.WriteElementString("WaveformAdd", shortcuts.WaveformAdd); + textWriter.WriteElementString("WaveformVerticalZoom", shortcuts.WaveformVerticalZoom); + textWriter.WriteElementString("WaveformVerticalZoomOut", shortcuts.WaveformVerticalZoomOut); + textWriter.WriteElementString("WaveformZoomIn", shortcuts.WaveformZoomIn); + textWriter.WriteElementString("WaveformZoomOut", shortcuts.WaveformZoomOut); + textWriter.WriteElementString("WaveformSplit", shortcuts.WaveformSplit); + textWriter.WriteElementString("WaveformPlaySelection", shortcuts.WaveformPlaySelection); + textWriter.WriteElementString("WaveformPlaySelectionEnd", shortcuts.WaveformPlaySelectionEnd); + textWriter.WriteElementString("WaveformSearchSilenceForward", shortcuts.WaveformSearchSilenceForward); + textWriter.WriteElementString("WaveformSearchSilenceBack", shortcuts.WaveformSearchSilenceBack); + textWriter.WriteElementString("WaveformAddTextHere", shortcuts.WaveformAddTextHere); + textWriter.WriteElementString("WaveformAddTextHereFromClipboard", shortcuts.WaveformAddTextHereFromClipboard); + textWriter.WriteElementString("WaveformSetParagraphAsSelection", shortcuts.WaveformSetParagraphAsSelection); + textWriter.WriteElementString("WaveformFocusListView", shortcuts.WaveformFocusListView); + textWriter.WriteElementString("WaveformGoToPreviousSceneChange", shortcuts.WaveformGoToPreviousSceneChange); + textWriter.WriteElementString("WaveformGoToNextSceneChange", shortcuts.WaveformGoToNextSceneChange); + textWriter.WriteElementString("WaveformToggleSceneChange", shortcuts.WaveformToggleSceneChange); + textWriter.WriteElementString("WaveformGuessStart", shortcuts.WaveformGuessStart); + textWriter.WriteElementString("Waveform100MsLeft", shortcuts.Waveform100MsLeft); + textWriter.WriteElementString("Waveform100MsRight", shortcuts.Waveform100MsRight); + textWriter.WriteElementString("Waveform1000MsLeft", shortcuts.Waveform1000MsLeft); + textWriter.WriteElementString("Waveform1000MsRight", shortcuts.Waveform1000MsRight); + textWriter.WriteElementString("MainTranslateGoogleIt", shortcuts.MainTranslateGoogleIt); + textWriter.WriteElementString("MainTranslateGoogleTranslate", shortcuts.MainTranslateGoogleTranslate); + textWriter.WriteElementString("MainTranslateCustomSearch1", shortcuts.MainTranslateCustomSearch1); + textWriter.WriteElementString("MainTranslateCustomSearch2", shortcuts.MainTranslateCustomSearch2); + textWriter.WriteElementString("MainTranslateCustomSearch3", shortcuts.MainTranslateCustomSearch3); + textWriter.WriteElementString("MainTranslateCustomSearch4", shortcuts.MainTranslateCustomSearch4); + textWriter.WriteElementString("MainTranslateCustomSearch5", shortcuts.MainTranslateCustomSearch5); + textWriter.WriteEndElement(); + } + } +} diff --git a/libse/SsaStyle.cs b/libse/Common/SsaStyle.cs similarity index 96% rename from libse/SsaStyle.cs rename to libse/Common/SsaStyle.cs index a1d386917..d579c29f3 100644 --- a/libse/SsaStyle.cs +++ b/libse/Common/SsaStyle.cs @@ -1,303 +1,303 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; -using System.Drawing; -using System.Globalization; -using System.Text; - -namespace Nikse.SubtitleEdit.Core -{ - public class SsaStyle - { - public string Name { get; set; } - public string FontName { get; set; } - public float FontSize { get; set; } - public bool Italic { get; set; } - public bool Bold { get; set; } - public bool Underline { get; set; } - public Color Primary { get; set; } - public Color Secondary { get; set; } - public Color Tertiary { get; set; } - public Color Outline { get; set; } - public Color Background { get; set; } - public decimal ShadowWidth { get; set; } - public decimal OutlineWidth { get; set; } - public string Alignment { get; set; } - public int MarginLeft { get; set; } - public int MarginRight { get; set; } - public int MarginVertical { get; set; } - public string BorderStyle { get; set; } - public string RawLine { get; set; } - public bool LoadedFromHeader { get; set; } - - public SsaStyle() - { - FontName = Configuration.Settings.SubtitleSettings.SsaFontName; - FontSize = (float)Configuration.Settings.SubtitleSettings.SsaFontSize; - Primary = Color.FromArgb(Configuration.Settings.SubtitleSettings.SsaFontColorArgb); - Secondary = Color.Yellow; - Outline = Color.Black; - Background = Color.Black; - Alignment = "2"; - OutlineWidth = Configuration.Settings.SubtitleSettings.SsaOutline; - ShadowWidth = Configuration.Settings.SubtitleSettings.SsaShadow; - MarginLeft = 10; - MarginRight = 10; - MarginVertical = 10; - BorderStyle = "1"; - if (Configuration.Settings.SubtitleSettings.SsaOpaqueBox) - { - BorderStyle = "3"; - } - - RawLine = string.Empty; - LoadedFromHeader = false; - } - - public SsaStyle(SsaStyle ssaStyle) - { - Name = ssaStyle.Name; - FontName = ssaStyle.FontName; - FontSize = ssaStyle.FontSize; - - Italic = ssaStyle.Italic; - Bold = ssaStyle.Bold; - Underline = ssaStyle.Underline; - - Primary = ssaStyle.Primary; - Secondary = ssaStyle.Secondary; - Tertiary = ssaStyle.Tertiary; - Outline = ssaStyle.Outline; - Background = ssaStyle.Background; - - ShadowWidth = ssaStyle.ShadowWidth; - OutlineWidth = ssaStyle.OutlineWidth; - - Alignment = ssaStyle.Alignment; - MarginLeft = ssaStyle.MarginLeft; - MarginRight = ssaStyle.MarginRight; - MarginVertical = ssaStyle.MarginVertical; - - BorderStyle = ssaStyle.BorderStyle; - RawLine = ssaStyle.RawLine; - LoadedFromHeader = ssaStyle.LoadedFromHeader; - } - - public string ToRawSsa(string styleFormat) - { - var sb = new StringBuilder(); - sb.Append("Style: "); - var format = styleFormat.ToLowerInvariant().Substring(8).Split(','); - for (int i = 0; i < format.Length; i++) - { - string f = format[i].Trim(); - if (f == "name") - { - sb.Append(Name); - } - else if (f == "fontname") - { - sb.Append(FontName); - } - else if (f == "fontsize") - { - sb.Append(FontSize.ToString(CultureInfo.InvariantCulture)); - } - else if (f == "primarycolour") - { - sb.Append(ColorTranslator.ToWin32(Primary)); - } - else if (f == "secondarycolour") - { - sb.Append(ColorTranslator.ToWin32(Secondary)); - } - else if (f == "tertiarycolour") - { - sb.Append(ColorTranslator.ToWin32(Tertiary)); - } - else if (f == "outlinecolour") - { - sb.Append(ColorTranslator.ToWin32(Outline)); - } - else if (f == "backcolour") - { - sb.Append(ColorTranslator.ToWin32(Background)); - } - else if (f == "bold") - { - sb.Append(Convert.ToInt32(Bold)); - } - else if (f == "italic") - { - sb.Append(Convert.ToInt32(Italic)); - } - else if (f == "underline") - { - sb.Append(Convert.ToInt32(Underline)); - } - else if (f == "outline") - { - sb.Append(Outline); - } - else if (f == "shadow") - { - sb.Append(OutlineWidth); - } - else if (f == "marginl") - { - sb.Append(MarginLeft); - } - else if (f == "marginr") - { - sb.Append(MarginRight); - } - else if (f == "marginv") - { - sb.Append(MarginVertical); - } - else if (f == "borderstyle") - { - sb.Append(BorderStyle); - } - else if (f == "encoding") - { - sb.Append('1'); - } - else if (f == "strikeout") - { - sb.Append('0'); - } - else if (f == "scalex") - { - sb.Append("100"); - } - else if (f == "scaley") - { - sb.Append("100"); - } - else if (f == "spacing") - { - sb.Append('0'); - } - else if (f == "angle") - { - sb.Append('0'); - } - - sb.Append(','); - } - string s = sb.ToString().Trim(); - return s.Substring(0, s.Length - 1); - } - - public string ToRawAss(string styleFormat) - { - var sb = new StringBuilder(); - sb.Append("Style: "); - var format = styleFormat.ToLowerInvariant().Substring(8).Split(','); - for (int i = 0; i < format.Length; i++) - { - string f = format[i].Trim(); - if (f == "name") - { - sb.Append(Name); - } - else if (f == "fontname") - { - sb.Append(FontName); - } - else if (f == "fontsize") - { - sb.Append(FontSize.ToString(CultureInfo.InvariantCulture)); - } - else if (f == "primarycolour") - { - sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Primary)); - } - else if (f == "secondarycolour") - { - sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Secondary)); - } - else if (f == "tertiarycolour") - { - sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Tertiary)); - } - else if (f == "outlinecolour") - { - sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Outline)); - } - else if (f == "backcolour") - { - sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Background)); - } - else if (f == "bold") - { - sb.Append(Convert.ToInt32(Bold)); - } - else if (f == "italic") - { - sb.Append(Convert.ToInt32(Italic)); - } - else if (f == "underline") - { - sb.Append(Convert.ToInt32(Underline)); - } - else if (f == "outline") - { - sb.Append(OutlineWidth); - } - else if (f == "shadow") - { - sb.Append(ShadowWidth); - } - else if (f == "alignment") - { - sb.Append(Alignment); - } - else if (f == "marginl") - { - sb.Append(MarginLeft); - } - else if (f == "marginr") - { - sb.Append(MarginRight); - } - else if (f == "marginv") - { - sb.Append(MarginVertical); - } - else if (f == "borderstyle") - { - sb.Append(BorderStyle); - } - else if (f == "encoding") - { - sb.Append('1'); - } - else if (f == "strikeout") - { - sb.Append('0'); - } - else if (f == "scalex") - { - sb.Append("100"); - } - else if (f == "scaley") - { - sb.Append("100"); - } - else if (f == "spacing") - { - sb.Append('0'); - } - else if (f == "angle") - { - sb.Append('0'); - } - - sb.Append(','); - } - string s = sb.ToString().Trim(); - return s.Substring(0, s.Length - 1); - } - } -} +using System; +using System.Drawing; +using System.Globalization; +using System.Text; +using Nikse.SubtitleEdit.Core.SubtitleFormats; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public class SsaStyle + { + public string Name { get; set; } + public string FontName { get; set; } + public float FontSize { get; set; } + public bool Italic { get; set; } + public bool Bold { get; set; } + public bool Underline { get; set; } + public Color Primary { get; set; } + public Color Secondary { get; set; } + public Color Tertiary { get; set; } + public Color Outline { get; set; } + public Color Background { get; set; } + public decimal ShadowWidth { get; set; } + public decimal OutlineWidth { get; set; } + public string Alignment { get; set; } + public int MarginLeft { get; set; } + public int MarginRight { get; set; } + public int MarginVertical { get; set; } + public string BorderStyle { get; set; } + public string RawLine { get; set; } + public bool LoadedFromHeader { get; set; } + + public SsaStyle() + { + FontName = Configuration.Settings.SubtitleSettings.SsaFontName; + FontSize = (float)Configuration.Settings.SubtitleSettings.SsaFontSize; + Primary = Color.FromArgb(Configuration.Settings.SubtitleSettings.SsaFontColorArgb); + Secondary = Color.Yellow; + Outline = Color.Black; + Background = Color.Black; + Alignment = "2"; + OutlineWidth = Configuration.Settings.SubtitleSettings.SsaOutline; + ShadowWidth = Configuration.Settings.SubtitleSettings.SsaShadow; + MarginLeft = 10; + MarginRight = 10; + MarginVertical = 10; + BorderStyle = "1"; + if (Configuration.Settings.SubtitleSettings.SsaOpaqueBox) + { + BorderStyle = "3"; + } + + RawLine = string.Empty; + LoadedFromHeader = false; + } + + public SsaStyle(SsaStyle ssaStyle) + { + Name = ssaStyle.Name; + FontName = ssaStyle.FontName; + FontSize = ssaStyle.FontSize; + + Italic = ssaStyle.Italic; + Bold = ssaStyle.Bold; + Underline = ssaStyle.Underline; + + Primary = ssaStyle.Primary; + Secondary = ssaStyle.Secondary; + Tertiary = ssaStyle.Tertiary; + Outline = ssaStyle.Outline; + Background = ssaStyle.Background; + + ShadowWidth = ssaStyle.ShadowWidth; + OutlineWidth = ssaStyle.OutlineWidth; + + Alignment = ssaStyle.Alignment; + MarginLeft = ssaStyle.MarginLeft; + MarginRight = ssaStyle.MarginRight; + MarginVertical = ssaStyle.MarginVertical; + + BorderStyle = ssaStyle.BorderStyle; + RawLine = ssaStyle.RawLine; + LoadedFromHeader = ssaStyle.LoadedFromHeader; + } + + public string ToRawSsa(string styleFormat) + { + var sb = new StringBuilder(); + sb.Append("Style: "); + var format = styleFormat.ToLowerInvariant().Substring(8).Split(','); + for (int i = 0; i < format.Length; i++) + { + string f = format[i].Trim(); + if (f == "name") + { + sb.Append(Name); + } + else if (f == "fontname") + { + sb.Append(FontName); + } + else if (f == "fontsize") + { + sb.Append(FontSize.ToString(CultureInfo.InvariantCulture)); + } + else if (f == "primarycolour") + { + sb.Append(ColorTranslator.ToWin32(Primary)); + } + else if (f == "secondarycolour") + { + sb.Append(ColorTranslator.ToWin32(Secondary)); + } + else if (f == "tertiarycolour") + { + sb.Append(ColorTranslator.ToWin32(Tertiary)); + } + else if (f == "outlinecolour") + { + sb.Append(ColorTranslator.ToWin32(Outline)); + } + else if (f == "backcolour") + { + sb.Append(ColorTranslator.ToWin32(Background)); + } + else if (f == "bold") + { + sb.Append(Convert.ToInt32(Bold)); + } + else if (f == "italic") + { + sb.Append(Convert.ToInt32(Italic)); + } + else if (f == "underline") + { + sb.Append(Convert.ToInt32(Underline)); + } + else if (f == "outline") + { + sb.Append(Outline); + } + else if (f == "shadow") + { + sb.Append(OutlineWidth); + } + else if (f == "marginl") + { + sb.Append(MarginLeft); + } + else if (f == "marginr") + { + sb.Append(MarginRight); + } + else if (f == "marginv") + { + sb.Append(MarginVertical); + } + else if (f == "borderstyle") + { + sb.Append(BorderStyle); + } + else if (f == "encoding") + { + sb.Append('1'); + } + else if (f == "strikeout") + { + sb.Append('0'); + } + else if (f == "scalex") + { + sb.Append("100"); + } + else if (f == "scaley") + { + sb.Append("100"); + } + else if (f == "spacing") + { + sb.Append('0'); + } + else if (f == "angle") + { + sb.Append('0'); + } + + sb.Append(','); + } + string s = sb.ToString().Trim(); + return s.Substring(0, s.Length - 1); + } + + public string ToRawAss(string styleFormat) + { + var sb = new StringBuilder(); + sb.Append("Style: "); + var format = styleFormat.ToLowerInvariant().Substring(8).Split(','); + for (int i = 0; i < format.Length; i++) + { + string f = format[i].Trim(); + if (f == "name") + { + sb.Append(Name); + } + else if (f == "fontname") + { + sb.Append(FontName); + } + else if (f == "fontsize") + { + sb.Append(FontSize.ToString(CultureInfo.InvariantCulture)); + } + else if (f == "primarycolour") + { + sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Primary)); + } + else if (f == "secondarycolour") + { + sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Secondary)); + } + else if (f == "tertiarycolour") + { + sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Tertiary)); + } + else if (f == "outlinecolour") + { + sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Outline)); + } + else if (f == "backcolour") + { + sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Background)); + } + else if (f == "bold") + { + sb.Append(Convert.ToInt32(Bold)); + } + else if (f == "italic") + { + sb.Append(Convert.ToInt32(Italic)); + } + else if (f == "underline") + { + sb.Append(Convert.ToInt32(Underline)); + } + else if (f == "outline") + { + sb.Append(OutlineWidth); + } + else if (f == "shadow") + { + sb.Append(ShadowWidth); + } + else if (f == "alignment") + { + sb.Append(Alignment); + } + else if (f == "marginl") + { + sb.Append(MarginLeft); + } + else if (f == "marginr") + { + sb.Append(MarginRight); + } + else if (f == "marginv") + { + sb.Append(MarginVertical); + } + else if (f == "borderstyle") + { + sb.Append(BorderStyle); + } + else if (f == "encoding") + { + sb.Append('1'); + } + else if (f == "strikeout") + { + sb.Append('0'); + } + else if (f == "scalex") + { + sb.Append("100"); + } + else if (f == "scaley") + { + sb.Append("100"); + } + else if (f == "spacing") + { + sb.Append('0'); + } + else if (f == "angle") + { + sb.Append('0'); + } + + sb.Append(','); + } + string s = sb.ToString().Trim(); + return s.Substring(0, s.Length - 1); + } + } +} diff --git a/libse/StringExtensions.cs b/libse/Common/StringExtensions.cs similarity index 96% rename from libse/StringExtensions.cs rename to libse/Common/StringExtensions.cs index 5ac639687..d088a7c23 100644 --- a/libse/StringExtensions.cs +++ b/libse/Common/StringExtensions.cs @@ -1,546 +1,546 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; - -namespace Nikse.SubtitleEdit.Core -{ - public static class StringExtensions - { - public static bool LineStartsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) - { - if (text == null || !threeLengthTag && !includeFont) - { - return false; - } - - return StartsWithHtmlTag(text, threeLengthTag, includeFont); - } - - public static bool LineEndsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) - { - if (text == null) - { - return false; - } - - var len = text.Length; - if (len < 6 || text[len - 1] != '>') - { - return false; - } - - //
- if (threeLengthTag && len > 3 && text[len - 4] == '<' && text[len - 3] == '/') - { - return true; - } - - if (includeFont && len > 8 && text[len - 7] == '<' && text[len - 6] == '/') - { - return true; - } - - return false; - } - - public static bool LineBreakStartsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) - { - if (text == null || (!threeLengthTag && !includeFont)) - { - return false; - } - - var newLineIdx = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); - if (newLineIdx < 0 || text.Length < newLineIdx + 5) - { - return false; - } - - text = text.Substring(newLineIdx + 2); - return StartsWithHtmlTag(text, threeLengthTag, includeFont); - } - - private static bool StartsWithHtmlTag(string text, bool threeLengthTag, bool includeFont) - { - if (threeLengthTag && text.Length >= 3 && text[0] == '<' && text[2] == '>' && (text[1] == 'i' || text[1] == 'I' || text[1] == 'u' || text[1] == 'U' || text[1] == 'b' || text[1] == 'B')) - { - return true; - } - - if (includeFont && text.Length > 5 && text.StartsWith("', 5) >= 5; // or - } - - return false; - } - - public static bool StartsWith(this string s, char c) - { - return s.Length > 0 && s[0] == c; - } - - public static bool StartsWith(this StringBuilder sb, char c) - { - return sb.Length > 0 && sb[0] == c; - } - - public static bool EndsWith(this string s, char c) - { - return s.Length > 0 && s[s.Length - 1] == c; - } - - public static bool EndsWith(this StringBuilder sb, char c) - { - return sb.Length > 0 && sb[sb.Length - 1] == c; - } - - public static bool Contains(this string source, char value) - { - return source.IndexOf(value) >= 0; - } - - public static bool Contains(this string source, char[] value) - { - return source.IndexOfAny(value) >= 0; - } - - public static bool Contains(this string source, string value, StringComparison comparisonType) - { - return source.IndexOf(value, comparisonType) >= 0; - } - - public static List SplitToLines(this string s) - { - //original non-optimized version: return source.Replace("\r\r\n", "\n").Replace("\r\n", "\n").Replace('\r', '\n').Replace('\u2028', '\n').Split('\n'); - - var lines = new List(); - int start = 0; - int max = s.Length; - int i = 0; - while (i < max) - { - var ch = s[i]; - if (ch == '\r') - { - if (i < s.Length - 2 && s[i + 1] == '\r' && s[i + 2] == '\n') // \r\r\n - { - lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); - i += 3; - start = i; - continue; - } - - if (i < s.Length - 1 && s[i + 1] == '\n') // \r\n - { - lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); - i += 2; - start = i; - continue; - } - - lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); - i++; - start = i; - continue; - } - - if (ch == '\n' || ch == '\u2028') - { - lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); - i++; - start = i; - continue; - } - - i++; - } - - lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); - return lines; - } - - public static int CountWords(this string source) - { - return HtmlUtil.RemoveHtmlTags(source, true).Split(new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; - } - - // http://www.codeproject.com/Articles/43726/Optimizing-string-operations-in-C - public static int FastIndexOf(this string source, string pattern) - { - if (string.IsNullOrEmpty(pattern)) - { - return -1; - } - - char c0 = pattern[0]; - if (pattern.Length == 1) - { - return source.IndexOf(c0); - } - - int limit = source.Length - pattern.Length + 1; - if (limit < 1) - { - return -1; - } - - char c1 = pattern[1]; - - // Find the first occurrence of the first character - int first = source.IndexOf(c0, 0, limit); - while (first != -1) - { - // Check if the following character is the same like - // the 2nd character of "pattern" - if (source[first + 1] != c1) - { - first = source.IndexOf(c0, ++first, limit - first); - continue; - } - - // Check the rest of "pattern" (starting with the 3rd character) - var found = true; - for (int j = 2; j < pattern.Length; j++) - { - if (source[first + j] != pattern[j]) - { - found = false; - break; - } - } - - // If the whole word was found, return its index, otherwise try again - if (found) - { - return first; - } - - first = source.IndexOf(c0, ++first, limit - first); - } - - return -1; - } - - public static int IndexOfAny(this string s, string[] words, StringComparison comparisonType) - { - if (words == null || string.IsNullOrEmpty(s)) - { - return -1; - } - - for (int i = 0; i < words.Length; i++) - { - var idx = s.IndexOf(words[i], comparisonType); - if (idx >= 0) - { - return idx; - } - } - - return -1; - } - - public static string FixExtraSpaces(this string s) - { - if (string.IsNullOrEmpty(s)) - { - return s; - } - - const char whiteSpace = ' '; - int k = -1; - for (int i = s.Length - 1; i >= 0; i--) - { - char ch = s[i]; - if (k < 2) - { - if (ch == whiteSpace) - { - k = i + 1; - } - } - else if (ch != whiteSpace) - { - // only keep white space if it doesn't succeed/precede CRLF - int skipCount = (ch == '\n' || ch == '\r') || (k < s.Length && (s[k] == '\n' || s[k] == '\r')) ? 1 : 2; - - // extra space found - if (k - (i + skipCount) >= 1) - { - s = s.Remove(i + 1, k - (i + skipCount)); - } - - // Reset remove length. - k = -1; - } - } - - return s; - } - - public static bool ContainsLetter(this string s) - { - if (s != null) - { - foreach (var index in StringInfo.ParseCombiningCharacters(s)) - { - var uc = CharUnicodeInfo.GetUnicodeCategory(s, index); - if (uc == UnicodeCategory.LowercaseLetter || uc == UnicodeCategory.UppercaseLetter || uc == UnicodeCategory.TitlecaseLetter || uc == UnicodeCategory.ModifierLetter || uc == UnicodeCategory.OtherLetter) - { - return true; - } - } - } - - return false; - } - - public static bool ContainsNumber(this string s) - { - if (s == null) - { - return false; - } - - int max = s.Length; - for (int index = 0; index < max; index++) - { - var ch = s[index]; - if (char.IsNumber(ch)) - { - return true; - } - } - - return false; - } - - public static string RemoveControlCharacters(this string s) - { - int max = s.Length; - var newStr = new char[max]; - int newIdx = 0; - for (int index = 0; index < max; index++) - { - var ch = s[index]; - if (!char.IsControl(ch)) - { - newStr[newIdx++] = ch; - } - } - - return new string(newStr, 0, newIdx); - } - - public static bool IsOnlyControlCharactersOrWhiteSpace(this string s) - { - if (string.IsNullOrEmpty(s)) - { - return true; - } - - int max = s.Length; - for (int index = 0; index < max; index++) - { - var ch = s[index]; - if (!char.IsControl(ch) && !char.IsWhiteSpace(ch)) - { - return false; - } - } - - return true; - } - - - public static string RemoveControlCharactersButWhiteSpace(this string s) - { - int max = s.Length; - var newStr = new char[max]; - int newIdx = 0; - for (int index = 0; index < max; index++) - { - var ch = s[index]; - if (!char.IsControl(ch) || ch == '\u000d' || ch == '\u000a' || ch == '\u0009') - { - newStr[newIdx++] = ch; - } - } - - return new string(newStr, 0, newIdx); - } - - public static string CapitalizeFirstLetter(this string s, CultureInfo ci = null) - { - var si = new StringInfo(s); - if (ci == null) - { - ci = CultureInfo.CurrentCulture; - } - - if (si.LengthInTextElements > 0) - { - s = si.SubstringByTextElements(0, 1).ToUpper(ci); - } - - if (si.LengthInTextElements > 1) - { - s += si.SubstringByTextElements(1); - } - - return s; - } - - public static string ToRtf(this string value) - { - return @"{\rtf1\ansi\ansicpg1252\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard " + value.ToRtfPart() + @"\par" + Environment.NewLine + "}"; - } - - public static string ToRtfPart(this string value) - { - // special RTF chars - var backslashed = new StringBuilder(value); - backslashed.Replace(@"\", @"\\"); - backslashed.Replace(@"{", @"\{"); - backslashed.Replace(@"}", @"\}"); - backslashed.Replace(Environment.NewLine, @"\par" + Environment.NewLine); - - // convert string char by char - var sb = new StringBuilder(); - foreach (char character in backslashed.ToString()) - { - if (character <= 0x7f) - { - sb.Append(character); - } - else - { - sb.Append("\\u" + Convert.ToUInt32(character) + "?"); - } - } - - return sb.ToString(); - } - - public static string FromRtf(this string value) - { - return RichTextToPlainText.ConvertToText(value); - } - - public static string RemoveChar(this string value, char charToRemove) - { - char[] array = new char[value.Length]; - int arrayIndex = 0; - for (int i = 0; i < value.Length; i++) - { - char ch = value[i]; - if (ch != charToRemove) - { - array[arrayIndex++] = ch; - } - } - - return new string(array, 0, arrayIndex); - } - - /// - /// Count characters excl. white spaces, ssa-tags, html-tags, control-characters, normal spaces and - /// Arabic diacritics depending on parameter. - /// - public static int CountCharacters(this string value, bool removeNormalSpace, bool ignoreArabicDiacritics) - { - int length = 0; - const char zeroWidthSpace = '\u200B'; - const char zeroWidthNoBreakSpace = '\uFEFF'; - char normalSpace = removeNormalSpace ? ' ' : zeroWidthSpace; - bool ssaTagOn = false; - bool htmlTagOn = false; - var max = value.Length; - for (int i = 0; i < max; i++) - { - char ch = value[i]; - if (ssaTagOn) - { - if (ch == '}') - { - ssaTagOn = false; - } - } - else if (htmlTagOn) - { - if (ch == '>') - { - htmlTagOn = false; - } - } - else if (ch == '{' && i < value.Length - 1 && value[i + 1] == '\\') - { - ssaTagOn = true; - } - else if (ch == '<' && i < value.Length - 1 && (value[i + 1] == '/' || char.IsLetter(value[i + 1])) && - value.IndexOf('>', i) > 0 && IsKnownHtmlTag(value, i)) - { - htmlTagOn = true; - } - else if (!char.IsControl(ch) && - ch != zeroWidthSpace && - ch != zeroWidthNoBreakSpace && - ch != normalSpace && - ch != '\u200E' && - ch != '\u200F' && - ch != '\u202A' && - ch != '\u202B' && - ch != '\u202C' && - ch != '\u202D' && - ch != '\u202E' && - !(ignoreArabicDiacritics && ch >= '\u064B' && ch <= '\u0653')) - { - length++; - } - } - - return length; - } - - private static bool IsKnownHtmlTag(string input, int idx) - { - var s = input.Remove(0, idx + 1).ToLowerInvariant(); - return s.StartsWith('/') || - s.StartsWith("i>", StringComparison.Ordinal) || - s.StartsWith("b>", StringComparison.Ordinal) || - s.StartsWith("u>", StringComparison.Ordinal) || - s.StartsWith("font ", StringComparison.Ordinal) || - s.StartsWith("ruby", StringComparison.Ordinal) || - s.StartsWith("span>", StringComparison.Ordinal) || - s.StartsWith("p>", StringComparison.Ordinal) || - s.StartsWith("br>", StringComparison.Ordinal) || - s.StartsWith("div>", StringComparison.Ordinal) || - s.StartsWith("div ", StringComparison.Ordinal); - } - - public static bool HasSentenceEnding(this string value) - { - return value.HasSentenceEnding(string.Empty); - } - - public static bool HasSentenceEnding(this string value, string twoLetterLanguageCode) - { - if (string.IsNullOrEmpty(value)) - { - return false; - } - - var s = HtmlUtil.RemoveHtmlTags(value, true).TrimEnd('"').TrimEnd('”'); - if (s == string.Empty) - { - return false; - } - - var last = s[s.Length - 1]; - return last == '.' || last == '!' || last == '?' || last == ']' || last == ')' || last == '…' || last == '♪' || last == '؟' || - twoLetterLanguageCode == "el" && last == ';' || twoLetterLanguageCode == "el" && last == '\u037E'; - } - } -} +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public static class StringExtensions + { + public static bool LineStartsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) + { + if (text == null || !threeLengthTag && !includeFont) + { + return false; + } + + return StartsWithHtmlTag(text, threeLengthTag, includeFont); + } + + public static bool LineEndsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) + { + if (text == null) + { + return false; + } + + var len = text.Length; + if (len < 6 || text[len - 1] != '>') + { + return false; + } + + // + if (threeLengthTag && len > 3 && text[len - 4] == '<' && text[len - 3] == '/') + { + return true; + } + + if (includeFont && len > 8 && text[len - 7] == '<' && text[len - 6] == '/') + { + return true; + } + + return false; + } + + public static bool LineBreakStartsWithHtmlTag(this string text, bool threeLengthTag, bool includeFont = false) + { + if (text == null || (!threeLengthTag && !includeFont)) + { + return false; + } + + var newLineIdx = text.IndexOf(Environment.NewLine, StringComparison.Ordinal); + if (newLineIdx < 0 || text.Length < newLineIdx + 5) + { + return false; + } + + text = text.Substring(newLineIdx + 2); + return StartsWithHtmlTag(text, threeLengthTag, includeFont); + } + + private static bool StartsWithHtmlTag(string text, bool threeLengthTag, bool includeFont) + { + if (threeLengthTag && text.Length >= 3 && text[0] == '<' && text[2] == '>' && (text[1] == 'i' || text[1] == 'I' || text[1] == 'u' || text[1] == 'U' || text[1] == 'b' || text[1] == 'B')) + { + return true; + } + + if (includeFont && text.Length > 5 && text.StartsWith("', 5) >= 5; // or + } + + return false; + } + + public static bool StartsWith(this string s, char c) + { + return s.Length > 0 && s[0] == c; + } + + public static bool StartsWith(this StringBuilder sb, char c) + { + return sb.Length > 0 && sb[0] == c; + } + + public static bool EndsWith(this string s, char c) + { + return s.Length > 0 && s[s.Length - 1] == c; + } + + public static bool EndsWith(this StringBuilder sb, char c) + { + return sb.Length > 0 && sb[sb.Length - 1] == c; + } + + public static bool Contains(this string source, char value) + { + return source.IndexOf(value) >= 0; + } + + public static bool Contains(this string source, char[] value) + { + return source.IndexOfAny(value) >= 0; + } + + public static bool Contains(this string source, string value, StringComparison comparisonType) + { + return source.IndexOf(value, comparisonType) >= 0; + } + + public static List SplitToLines(this string s) + { + //original non-optimized version: return source.Replace("\r\r\n", "\n").Replace("\r\n", "\n").Replace('\r', '\n').Replace('\u2028', '\n').Split('\n'); + + var lines = new List(); + int start = 0; + int max = s.Length; + int i = 0; + while (i < max) + { + var ch = s[i]; + if (ch == '\r') + { + if (i < s.Length - 2 && s[i + 1] == '\r' && s[i + 2] == '\n') // \r\r\n + { + lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); + i += 3; + start = i; + continue; + } + + if (i < s.Length - 1 && s[i + 1] == '\n') // \r\n + { + lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); + i += 2; + start = i; + continue; + } + + lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); + i++; + start = i; + continue; + } + + if (ch == '\n' || ch == '\u2028') + { + lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); + i++; + start = i; + continue; + } + + i++; + } + + lines.Add(start < i ? s.Substring(start, i - start) : string.Empty); + return lines; + } + + public static int CountWords(this string source) + { + return HtmlUtil.RemoveHtmlTags(source, true).Split(new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + } + + // http://www.codeproject.com/Articles/43726/Optimizing-string-operations-in-C + public static int FastIndexOf(this string source, string pattern) + { + if (string.IsNullOrEmpty(pattern)) + { + return -1; + } + + char c0 = pattern[0]; + if (pattern.Length == 1) + { + return source.IndexOf(c0); + } + + int limit = source.Length - pattern.Length + 1; + if (limit < 1) + { + return -1; + } + + char c1 = pattern[1]; + + // Find the first occurrence of the first character + int first = source.IndexOf(c0, 0, limit); + while (first != -1) + { + // Check if the following character is the same like + // the 2nd character of "pattern" + if (source[first + 1] != c1) + { + first = source.IndexOf(c0, ++first, limit - first); + continue; + } + + // Check the rest of "pattern" (starting with the 3rd character) + var found = true; + for (int j = 2; j < pattern.Length; j++) + { + if (source[first + j] != pattern[j]) + { + found = false; + break; + } + } + + // If the whole word was found, return its index, otherwise try again + if (found) + { + return first; + } + + first = source.IndexOf(c0, ++first, limit - first); + } + + return -1; + } + + public static int IndexOfAny(this string s, string[] words, StringComparison comparisonType) + { + if (words == null || string.IsNullOrEmpty(s)) + { + return -1; + } + + for (int i = 0; i < words.Length; i++) + { + var idx = s.IndexOf(words[i], comparisonType); + if (idx >= 0) + { + return idx; + } + } + + return -1; + } + + public static string FixExtraSpaces(this string s) + { + if (string.IsNullOrEmpty(s)) + { + return s; + } + + const char whiteSpace = ' '; + int k = -1; + for (int i = s.Length - 1; i >= 0; i--) + { + char ch = s[i]; + if (k < 2) + { + if (ch == whiteSpace) + { + k = i + 1; + } + } + else if (ch != whiteSpace) + { + // only keep white space if it doesn't succeed/precede CRLF + int skipCount = (ch == '\n' || ch == '\r') || (k < s.Length && (s[k] == '\n' || s[k] == '\r')) ? 1 : 2; + + // extra space found + if (k - (i + skipCount) >= 1) + { + s = s.Remove(i + 1, k - (i + skipCount)); + } + + // Reset remove length. + k = -1; + } + } + + return s; + } + + public static bool ContainsLetter(this string s) + { + if (s != null) + { + foreach (var index in StringInfo.ParseCombiningCharacters(s)) + { + var uc = CharUnicodeInfo.GetUnicodeCategory(s, index); + if (uc == UnicodeCategory.LowercaseLetter || uc == UnicodeCategory.UppercaseLetter || uc == UnicodeCategory.TitlecaseLetter || uc == UnicodeCategory.ModifierLetter || uc == UnicodeCategory.OtherLetter) + { + return true; + } + } + } + + return false; + } + + public static bool ContainsNumber(this string s) + { + if (s == null) + { + return false; + } + + int max = s.Length; + for (int index = 0; index < max; index++) + { + var ch = s[index]; + if (char.IsNumber(ch)) + { + return true; + } + } + + return false; + } + + public static string RemoveControlCharacters(this string s) + { + int max = s.Length; + var newStr = new char[max]; + int newIdx = 0; + for (int index = 0; index < max; index++) + { + var ch = s[index]; + if (!char.IsControl(ch)) + { + newStr[newIdx++] = ch; + } + } + + return new string(newStr, 0, newIdx); + } + + public static bool IsOnlyControlCharactersOrWhiteSpace(this string s) + { + if (string.IsNullOrEmpty(s)) + { + return true; + } + + int max = s.Length; + for (int index = 0; index < max; index++) + { + var ch = s[index]; + if (!char.IsControl(ch) && !char.IsWhiteSpace(ch)) + { + return false; + } + } + + return true; + } + + + public static string RemoveControlCharactersButWhiteSpace(this string s) + { + int max = s.Length; + var newStr = new char[max]; + int newIdx = 0; + for (int index = 0; index < max; index++) + { + var ch = s[index]; + if (!char.IsControl(ch) || ch == '\u000d' || ch == '\u000a' || ch == '\u0009') + { + newStr[newIdx++] = ch; + } + } + + return new string(newStr, 0, newIdx); + } + + public static string CapitalizeFirstLetter(this string s, CultureInfo ci = null) + { + var si = new StringInfo(s); + if (ci == null) + { + ci = CultureInfo.CurrentCulture; + } + + if (si.LengthInTextElements > 0) + { + s = si.SubstringByTextElements(0, 1).ToUpper(ci); + } + + if (si.LengthInTextElements > 1) + { + s += si.SubstringByTextElements(1); + } + + return s; + } + + public static string ToRtf(this string value) + { + return @"{\rtf1\ansi\ansicpg1252\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard " + value.ToRtfPart() + @"\par" + Environment.NewLine + "}"; + } + + public static string ToRtfPart(this string value) + { + // special RTF chars + var backslashed = new StringBuilder(value); + backslashed.Replace(@"\", @"\\"); + backslashed.Replace(@"{", @"\{"); + backslashed.Replace(@"}", @"\}"); + backslashed.Replace(Environment.NewLine, @"\par" + Environment.NewLine); + + // convert string char by char + var sb = new StringBuilder(); + foreach (char character in backslashed.ToString()) + { + if (character <= 0x7f) + { + sb.Append(character); + } + else + { + sb.Append("\\u" + Convert.ToUInt32(character) + "?"); + } + } + + return sb.ToString(); + } + + public static string FromRtf(this string value) + { + return RichTextToPlainText.ConvertToText(value); + } + + public static string RemoveChar(this string value, char charToRemove) + { + char[] array = new char[value.Length]; + int arrayIndex = 0; + for (int i = 0; i < value.Length; i++) + { + char ch = value[i]; + if (ch != charToRemove) + { + array[arrayIndex++] = ch; + } + } + + return new string(array, 0, arrayIndex); + } + + /// + /// Count characters excl. white spaces, ssa-tags, html-tags, control-characters, normal spaces and + /// Arabic diacritics depending on parameter. + /// + public static int CountCharacters(this string value, bool removeNormalSpace, bool ignoreArabicDiacritics) + { + int length = 0; + const char zeroWidthSpace = '\u200B'; + const char zeroWidthNoBreakSpace = '\uFEFF'; + char normalSpace = removeNormalSpace ? ' ' : zeroWidthSpace; + bool ssaTagOn = false; + bool htmlTagOn = false; + var max = value.Length; + for (int i = 0; i < max; i++) + { + char ch = value[i]; + if (ssaTagOn) + { + if (ch == '}') + { + ssaTagOn = false; + } + } + else if (htmlTagOn) + { + if (ch == '>') + { + htmlTagOn = false; + } + } + else if (ch == '{' && i < value.Length - 1 && value[i + 1] == '\\') + { + ssaTagOn = true; + } + else if (ch == '<' && i < value.Length - 1 && (value[i + 1] == '/' || char.IsLetter(value[i + 1])) && + value.IndexOf('>', i) > 0 && IsKnownHtmlTag(value, i)) + { + htmlTagOn = true; + } + else if (!char.IsControl(ch) && + ch != zeroWidthSpace && + ch != zeroWidthNoBreakSpace && + ch != normalSpace && + ch != '\u200E' && + ch != '\u200F' && + ch != '\u202A' && + ch != '\u202B' && + ch != '\u202C' && + ch != '\u202D' && + ch != '\u202E' && + !(ignoreArabicDiacritics && ch >= '\u064B' && ch <= '\u0653')) + { + length++; + } + } + + return length; + } + + private static bool IsKnownHtmlTag(string input, int idx) + { + var s = input.Remove(0, idx + 1).ToLowerInvariant(); + return s.StartsWith('/') || + s.StartsWith("i>", StringComparison.Ordinal) || + s.StartsWith("b>", StringComparison.Ordinal) || + s.StartsWith("u>", StringComparison.Ordinal) || + s.StartsWith("font ", StringComparison.Ordinal) || + s.StartsWith("ruby", StringComparison.Ordinal) || + s.StartsWith("span>", StringComparison.Ordinal) || + s.StartsWith("p>", StringComparison.Ordinal) || + s.StartsWith("br>", StringComparison.Ordinal) || + s.StartsWith("div>", StringComparison.Ordinal) || + s.StartsWith("div ", StringComparison.Ordinal); + } + + public static bool HasSentenceEnding(this string value) + { + return value.HasSentenceEnding(string.Empty); + } + + public static bool HasSentenceEnding(this string value, string twoLetterLanguageCode) + { + if (string.IsNullOrEmpty(value)) + { + return false; + } + + var s = HtmlUtil.RemoveHtmlTags(value, true).TrimEnd('"').TrimEnd('”'); + if (s == string.Empty) + { + return false; + } + + var last = s[s.Length - 1]; + return last == '.' || last == '!' || last == '?' || last == ']' || last == ')' || last == '…' || last == '♪' || last == '؟' || + twoLetterLanguageCode == "el" && last == ';' || twoLetterLanguageCode == "el" && last == '\u037E'; + } + } +} diff --git a/libse/StrippableText.cs b/libse/Common/StrippableText.cs similarity index 99% rename from libse/StrippableText.cs rename to libse/Common/StrippableText.cs index d81ad125d..60f8cd9d9 100644 --- a/libse/StrippableText.cs +++ b/libse/Common/StrippableText.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class StrippableText { diff --git a/libse/TarHeader.cs b/libse/Common/TarHeader.cs similarity index 97% rename from libse/TarHeader.cs rename to libse/Common/TarHeader.cs index c157ef272..e6a928402 100644 --- a/libse/TarHeader.cs +++ b/libse/Common/TarHeader.cs @@ -2,7 +2,7 @@ using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TarHeader { diff --git a/libse/TarReader.cs b/libse/Common/TarReader.cs similarity index 97% rename from libse/TarReader.cs rename to libse/Common/TarReader.cs index 298b7cac5..d2b76ab75 100644 --- a/libse/TarReader.cs +++ b/libse/Common/TarReader.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TarReader : IDisposable { diff --git a/libse/TesseractDictionary.cs b/libse/Common/TesseractDictionary.cs similarity index 99% rename from libse/TesseractDictionary.cs rename to libse/Common/TesseractDictionary.cs index bfecedb19..ba72810a6 100644 --- a/libse/TesseractDictionary.cs +++ b/libse/Common/TesseractDictionary.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TesseractDictionary { diff --git a/libse/TextDraw.cs b/libse/Common/TextDraw.cs similarity index 98% rename from libse/TextDraw.cs rename to libse/Common/TextDraw.cs index e0f85621d..dcc0b1603 100644 --- a/libse/TextDraw.cs +++ b/libse/Common/TextDraw.cs @@ -1,10 +1,8 @@ -using System.Diagnostics; -using System.Drawing; +using System.Drawing; using System.Drawing.Drawing2D; -using System.Linq; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class TextDraw { diff --git a/libse/TextEncoding.cs b/libse/Common/TextEncoding.cs similarity index 97% rename from libse/TextEncoding.cs rename to libse/Common/TextEncoding.cs index d34d59043..8567899ed 100644 --- a/libse/TextEncoding.cs +++ b/libse/Common/TextEncoding.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TextEncoding : IEquatable, IEquatable { diff --git a/libse/TextEncodingExtensions.cs b/libse/Common/TextEncodingExtensions.cs similarity index 98% rename from libse/TextEncodingExtensions.cs rename to libse/Common/TextEncodingExtensions.cs index 5f65ee662..fbb167c2c 100644 --- a/libse/TextEncodingExtensions.cs +++ b/libse/Common/TextEncodingExtensions.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class TextEncodingExtensions { diff --git a/libse/TextSplit.cs b/libse/Common/TextSplit.cs similarity index 99% rename from libse/TextSplit.cs rename to libse/Common/TextSplit.cs index f5846875a..fdb5f607d 100644 --- a/libse/TextSplit.cs +++ b/libse/Common/TextSplit.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TextSplit { diff --git a/libse/TextSplitResult.cs b/libse/Common/TextSplitResult.cs similarity index 98% rename from libse/TextSplitResult.cs rename to libse/Common/TextSplitResult.cs index af1873d74..8f1272280 100644 --- a/libse/TextSplitResult.cs +++ b/libse/Common/TextSplitResult.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class TextSplitResult { diff --git a/libse/TimeCode.cs b/libse/Common/TimeCode.cs similarity index 96% rename from libse/TimeCode.cs rename to libse/Common/TimeCode.cs index b707e32b8..14d42a698 100644 --- a/libse/TimeCode.cs +++ b/libse/Common/TimeCode.cs @@ -1,259 +1,259 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; -using System.Globalization; - -namespace Nikse.SubtitleEdit.Core -{ - public class TimeCode - { - private static readonly char[] TimeSplitChars = { ':', ',', '.' }; - public const double BaseUnit = 1000.0; // Base unit of time - - public bool IsMaxTime => Math.Abs(TotalMilliseconds - MaxTimeTotalMilliseconds) < 0.01; - public const double MaxTimeTotalMilliseconds = 359999999; // new TimeCode(99, 59, 59, 999).TotalMilliseconds - - public static TimeCode FromSeconds(double seconds) - { - return new TimeCode(seconds * BaseUnit); - } - - public static double ParseToMilliseconds(string text) - { - var parts = text.Split(TimeSplitChars, StringSplitOptions.RemoveEmptyEntries); - if (parts.Length == 4) - { - if (int.TryParse(parts[0], out var hours) && int.TryParse(parts[1], out var minutes) && int.TryParse(parts[2], out var seconds) && int.TryParse(parts[3], out var milliseconds)) - { - return new TimeSpan(0, hours, minutes, seconds, milliseconds).TotalMilliseconds; - } - } - return 0; - } - - public static double ParseHHMMSSFFToMilliseconds(string text) - { - var parts = text.Split(TimeSplitChars, StringSplitOptions.RemoveEmptyEntries); - if (parts.Length == 4) - { - if (int.TryParse(parts[0], out var hours) && int.TryParse(parts[1], out var minutes) && int.TryParse(parts[2], out var seconds) && int.TryParse(parts[3], out var frames)) - { - return new TimeCode(hours, minutes, seconds, SubtitleFormat.FramesToMillisecondsMax999(frames)).TotalMilliseconds; - } - } - return 0; - } - - public TimeCode() - { - } - - public TimeCode(TimeSpan timeSpan) - { - TotalMilliseconds = timeSpan.TotalMilliseconds; - } - - public TimeCode(double totalMilliseconds) - { - TotalMilliseconds = totalMilliseconds; - } - - public TimeCode(int hours, int minutes, int seconds, int milliseconds) - { - TotalMilliseconds = hours * 60 * 60 * BaseUnit + minutes * 60 * BaseUnit + seconds * BaseUnit + milliseconds; - } - - public int Hours - { - get - { - var ts = TimeSpan; - return ts.Hours + ts.Days * 24; - } - set - { - var ts = TimeSpan; - TotalMilliseconds = new TimeSpan(ts.Days, value, ts.Minutes, ts.Seconds, ts.Milliseconds).TotalMilliseconds; - } - } - - public int Minutes - { - get => TimeSpan.Minutes; - set - { - var ts = TimeSpan; - TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, value, ts.Seconds, ts.Milliseconds).TotalMilliseconds; - } - } - - public int Seconds - { - get => TimeSpan.Seconds; - set - { - var ts = TimeSpan; - TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, ts.Minutes, value, ts.Milliseconds).TotalMilliseconds; - } - } - - public int Milliseconds - { - get => TimeSpan.Milliseconds; - set - { - var ts = TimeSpan; - TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, ts.Minutes, ts.Seconds, value).TotalMilliseconds; - } - } - - public double TotalMilliseconds { get; set; } - - public double TotalSeconds - { - get => TotalMilliseconds / BaseUnit; - set => TotalMilliseconds = value * BaseUnit; - } - - public TimeSpan TimeSpan - { - get => TimeSpan.FromMilliseconds(TotalMilliseconds); - set => TotalMilliseconds = value.TotalMilliseconds; - } - - public override string ToString() => ToString(false); - - public string ToString(bool localize) - { - var ts = TimeSpan; - string decimalSeparator = localize ? CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator : ","; - string s = $"{ts.Hours + ts.Days * 24:00}:{ts.Minutes:00}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; - - return PrefixSign(s); - } - - public string ToShortString(bool localize = false) - { - var ts = TimeSpan; - string decimalSeparator = localize ? CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator : ","; - string s; - if (ts.Minutes == 0 && ts.Hours == 0 && ts.Days == 0) - { - s = $"{ts.Seconds:0}{decimalSeparator}{ts.Milliseconds:000}"; - } - else if (ts.Hours == 0 && ts.Days == 0) - { - s = $"{ts.Minutes:0}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; - } - else - { - s = $"{ts.Hours + ts.Days * 24:0}:{ts.Minutes:00}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; - } - return PrefixSign(s); - } - - public string ToShortStringHHMMSSFF() - { - string s = ToHHMMSSFF(); - string pre = string.Empty; - if (s.StartsWith('-')) - { - pre = "-"; - s = s.TrimStart('-'); - } - int j = 0; - int len = s.Length; - while (j + 6 < len && s[j] == '0' && s[j + 1] == '0' && s[j + 2] == ':') - { - j += 3; - } - s = j > 0 ? s.Substring(j) : s; - return pre + s; - } - - public string ToHHMMSSFF() - { - string s; - var ts = TimeSpan; - var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); - if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) - { - var newTs = new TimeSpan(ts.Ticks); - newTs = newTs.Add(new TimeSpan(0, 0, 1)); - s = $"{newTs.Days * 24 + newTs.Hours:00}:{newTs.Minutes:00}:{newTs.Seconds:00}:{0:00}"; - } - else - { - s = $"{ts.Days * 24 + ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}:{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; - } - return PrefixSign(s); - } - - public string ToSSFF() - { - string s; - var ts = TimeSpan; - var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); - if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) - { - s = $"{ts.Seconds + 1:00}:{0:00}"; - } - else - { - s = $"{ts.Seconds:00}:{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; - } - return PrefixSign(s); - } - - public string ToHHMMSSPeriodFF() - { - string s; - var ts = TimeSpan; - var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); - if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) - { - var newTs = new TimeSpan(ts.Ticks); - newTs = newTs.Add(new TimeSpan(0, 0, 1)); - s = $"{newTs.Days * 24 + newTs.Hours:00}:{newTs.Minutes:00}:{newTs.Seconds:00}.{0:00}"; - } - else - { - s = $"{ts.Days * 24 + ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; - } - - return PrefixSign(s); - } - - private string PrefixSign(string time) => TotalMilliseconds >= 0 ? time : $"-{time.RemoveChar('-')}"; - - public string ToDisplayString() - { - if (IsMaxTime) - { - return "-"; - } - - if (Configuration.Settings?.General.UseTimeFormatHHMMSSFF == true) - { - return ToHHMMSSFF(); - } - - return ToString(true); - } - - public string ToShortDisplayString() - { - if (IsMaxTime) - { - return "-"; - } - - if (Configuration.Settings?.General.UseTimeFormatHHMMSSFF == true) - { - return ToShortStringHHMMSSFF(); - } - - return ToShortString(true); - } - - } -} +using System; +using System.Globalization; +using Nikse.SubtitleEdit.Core.SubtitleFormats; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public class TimeCode + { + private static readonly char[] TimeSplitChars = { ':', ',', '.' }; + public const double BaseUnit = 1000.0; // Base unit of time + + public bool IsMaxTime => Math.Abs(TotalMilliseconds - MaxTimeTotalMilliseconds) < 0.01; + public const double MaxTimeTotalMilliseconds = 359999999; // new TimeCode(99, 59, 59, 999).TotalMilliseconds + + public static TimeCode FromSeconds(double seconds) + { + return new TimeCode(seconds * BaseUnit); + } + + public static double ParseToMilliseconds(string text) + { + var parts = text.Split(TimeSplitChars, StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 4) + { + if (int.TryParse(parts[0], out var hours) && int.TryParse(parts[1], out var minutes) && int.TryParse(parts[2], out var seconds) && int.TryParse(parts[3], out var milliseconds)) + { + return new TimeSpan(0, hours, minutes, seconds, milliseconds).TotalMilliseconds; + } + } + return 0; + } + + public static double ParseHHMMSSFFToMilliseconds(string text) + { + var parts = text.Split(TimeSplitChars, StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 4) + { + if (int.TryParse(parts[0], out var hours) && int.TryParse(parts[1], out var minutes) && int.TryParse(parts[2], out var seconds) && int.TryParse(parts[3], out var frames)) + { + return new TimeCode(hours, minutes, seconds, SubtitleFormat.FramesToMillisecondsMax999(frames)).TotalMilliseconds; + } + } + return 0; + } + + public TimeCode() + { + } + + public TimeCode(TimeSpan timeSpan) + { + TotalMilliseconds = timeSpan.TotalMilliseconds; + } + + public TimeCode(double totalMilliseconds) + { + TotalMilliseconds = totalMilliseconds; + } + + public TimeCode(int hours, int minutes, int seconds, int milliseconds) + { + TotalMilliseconds = hours * 60 * 60 * BaseUnit + minutes * 60 * BaseUnit + seconds * BaseUnit + milliseconds; + } + + public int Hours + { + get + { + var ts = TimeSpan; + return ts.Hours + ts.Days * 24; + } + set + { + var ts = TimeSpan; + TotalMilliseconds = new TimeSpan(ts.Days, value, ts.Minutes, ts.Seconds, ts.Milliseconds).TotalMilliseconds; + } + } + + public int Minutes + { + get => TimeSpan.Minutes; + set + { + var ts = TimeSpan; + TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, value, ts.Seconds, ts.Milliseconds).TotalMilliseconds; + } + } + + public int Seconds + { + get => TimeSpan.Seconds; + set + { + var ts = TimeSpan; + TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, ts.Minutes, value, ts.Milliseconds).TotalMilliseconds; + } + } + + public int Milliseconds + { + get => TimeSpan.Milliseconds; + set + { + var ts = TimeSpan; + TotalMilliseconds = new TimeSpan(ts.Days, ts.Hours, ts.Minutes, ts.Seconds, value).TotalMilliseconds; + } + } + + public double TotalMilliseconds { get; set; } + + public double TotalSeconds + { + get => TotalMilliseconds / BaseUnit; + set => TotalMilliseconds = value * BaseUnit; + } + + public TimeSpan TimeSpan + { + get => TimeSpan.FromMilliseconds(TotalMilliseconds); + set => TotalMilliseconds = value.TotalMilliseconds; + } + + public override string ToString() => ToString(false); + + public string ToString(bool localize) + { + var ts = TimeSpan; + string decimalSeparator = localize ? CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator : ","; + string s = $"{ts.Hours + ts.Days * 24:00}:{ts.Minutes:00}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; + + return PrefixSign(s); + } + + public string ToShortString(bool localize = false) + { + var ts = TimeSpan; + string decimalSeparator = localize ? CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator : ","; + string s; + if (ts.Minutes == 0 && ts.Hours == 0 && ts.Days == 0) + { + s = $"{ts.Seconds:0}{decimalSeparator}{ts.Milliseconds:000}"; + } + else if (ts.Hours == 0 && ts.Days == 0) + { + s = $"{ts.Minutes:0}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; + } + else + { + s = $"{ts.Hours + ts.Days * 24:0}:{ts.Minutes:00}:{ts.Seconds:00}{decimalSeparator}{ts.Milliseconds:000}"; + } + return PrefixSign(s); + } + + public string ToShortStringHHMMSSFF() + { + string s = ToHHMMSSFF(); + string pre = string.Empty; + if (s.StartsWith('-')) + { + pre = "-"; + s = s.TrimStart('-'); + } + int j = 0; + int len = s.Length; + while (j + 6 < len && s[j] == '0' && s[j + 1] == '0' && s[j + 2] == ':') + { + j += 3; + } + s = j > 0 ? s.Substring(j) : s; + return pre + s; + } + + public string ToHHMMSSFF() + { + string s; + var ts = TimeSpan; + var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); + if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) + { + var newTs = new TimeSpan(ts.Ticks); + newTs = newTs.Add(new TimeSpan(0, 0, 1)); + s = $"{newTs.Days * 24 + newTs.Hours:00}:{newTs.Minutes:00}:{newTs.Seconds:00}:{0:00}"; + } + else + { + s = $"{ts.Days * 24 + ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}:{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; + } + return PrefixSign(s); + } + + public string ToSSFF() + { + string s; + var ts = TimeSpan; + var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); + if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) + { + s = $"{ts.Seconds + 1:00}:{0:00}"; + } + else + { + s = $"{ts.Seconds:00}:{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; + } + return PrefixSign(s); + } + + public string ToHHMMSSPeriodFF() + { + string s; + var ts = TimeSpan; + var frames = Math.Round(ts.Milliseconds / (BaseUnit / Configuration.Settings.General.CurrentFrameRate)); + if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001) + { + var newTs = new TimeSpan(ts.Ticks); + newTs = newTs.Add(new TimeSpan(0, 0, 1)); + s = $"{newTs.Days * 24 + newTs.Hours:00}:{newTs.Minutes:00}:{newTs.Seconds:00}.{0:00}"; + } + else + { + s = $"{ts.Days * 24 + ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{SubtitleFormat.MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; + } + + return PrefixSign(s); + } + + private string PrefixSign(string time) => TotalMilliseconds >= 0 ? time : $"-{time.RemoveChar('-')}"; + + public string ToDisplayString() + { + if (IsMaxTime) + { + return "-"; + } + + if (Configuration.Settings?.General.UseTimeFormatHHMMSSFF == true) + { + return ToHHMMSSFF(); + } + + return ToString(true); + } + + public string ToShortDisplayString() + { + if (IsMaxTime) + { + return "-"; + } + + if (Configuration.Settings?.General.UseTimeFormatHHMMSSFF == true) + { + return ToShortStringHHMMSSFF(); + } + + return ToShortString(true); + } + + } +} diff --git a/libse/TinyJsonParser.cs b/libse/Common/TinyJsonParser.cs similarity index 99% rename from libse/TinyJsonParser.cs rename to libse/Common/TinyJsonParser.cs index c9fc58d59..7a2eeacc2 100644 --- a/libse/TinyJsonParser.cs +++ b/libse/Common/TinyJsonParser.cs @@ -30,7 +30,7 @@ using System.Globalization; using System.IO; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { #pragma warning disable 1591 public class ParserException : Exception diff --git a/libse/UnknownFormatImporter.cs b/libse/Common/UnknownFormatImporter.cs similarity index 99% rename from libse/UnknownFormatImporter.cs rename to libse/Common/UnknownFormatImporter.cs index 71ee96381..f479487d5 100644 --- a/libse/UnknownFormatImporter.cs +++ b/libse/Common/UnknownFormatImporter.cs @@ -1,11 +1,11 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { ///
/// Generic subtitle format parser diff --git a/libse/UnknownFormatImporterJson.cs b/libse/Common/UnknownFormatImporterJson.cs similarity index 99% rename from libse/UnknownFormatImporterJson.cs rename to libse/Common/UnknownFormatImporterJson.cs index abaa6d617..13df9dcbc 100644 --- a/libse/UnknownFormatImporterJson.cs +++ b/libse/Common/UnknownFormatImporterJson.cs @@ -1,11 +1,11 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class UnknownFormatImporterJson { diff --git a/libse/Utilities.cs b/libse/Common/Utilities.cs similarity index 97% rename from libse/Utilities.cs rename to libse/Common/Utilities.cs index 759ab4aeb..0459461fe 100644 --- a/libse/Utilities.cs +++ b/libse/Common/Utilities.cs @@ -1,2915 +1,2915 @@ -using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; -using Nikse.SubtitleEdit.Core.SubtitleFormats; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Security.Authentication; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Xml; - -namespace Nikse.SubtitleEdit.Core -{ - public static class Utilities - { - public const string WinXP2KUnicodeFontName = "Times New Roman"; - - /// - /// Cached environment new line characters for faster lookup. - /// - public static readonly char[] NewLineChars = { '\r', '\n' }; - - private static readonly Regex NumberSeparatorNumberRegEx = new Regex(@"\b\d+[\.:;] \d+\b", RegexOptions.Compiled); - - public static string[] VideoFileExtensions { get; } = { ".avi", ".mkv", ".wmv", ".mpg", ".mpeg", ".divx", ".mp4", ".asf", ".flv", ".mov", ".m4v", ".vob", ".ogv", ".webm", ".ts", ".m2ts", ".mts", ".avs", ".mxf" }; - public static string[] AudioFileExtensions { get; } = { ".mp3", ".wav", ".wma", ".ogg", ".mpa", ".m4a", ".ape", ".aiff", ".flac", ".aac", ".ac3", ".eac3", ".mka" }; - - public static string GetVideoFileFilter(bool includeAudioFiles) - { - var sb = new StringBuilder(); - sb.Append(Configuration.Settings.Language.General.VideoFiles + "|*"); - sb.Append(string.Join(";*", VideoFileExtensions)); - - if (includeAudioFiles) - { - sb.Append("|" + Configuration.Settings.Language.General.AudioFiles + "|*"); - sb.Append(string.Join(";*", AudioFileExtensions)); - } - - sb.Append("|" + Configuration.Settings.Language.General.AllFiles + "|*.*"); - return sb.ToString(); - } - - public static bool IsInteger(string s) - { - return int.TryParse(s, out _); - } - - public static bool IsHex(string s) - { - foreach (var ch in s) - { - if (!CharUtils.IsHexadecimal(ch)) - { - return false; - } - } - - return true; - } - - public static SubtitleFormat GetSubtitleFormatByFriendlyName(string friendlyName) - { - foreach (var format in SubtitleFormat.AllSubtitleFormats) - { - if (format.FriendlyName == friendlyName || format.Name == friendlyName) - { - return format; - } - } - return null; - } - - public static string FormatBytesToDisplayFileSize(long fileSize) - { - if (fileSize <= 1024) - { - return $"{fileSize} bytes"; - } - - if (fileSize <= 1024 * 1024) - { - return $"{fileSize / 1024} kb"; - } - - if (fileSize <= 1024 * 1024 * 1024) - { - return $"{(float)fileSize / (1024 * 1024):0.0} mb"; - } - - return $"{(float)fileSize / (1024 * 1024 * 1024):0.0} gb"; - } - - public static long DisplayFileSizeToBytes(string displayFileSize) - { - if (displayFileSize.Contains("bytes")) - { - if (double.TryParse(displayFileSize.Replace("bytes", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) - { - return (int)Math.Round(n); - } - } - - if (displayFileSize.Contains("kb")) - { - if (double.TryParse(displayFileSize.Replace("kb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) - { - return (int)Math.Round(n * 1024); - } - } - - if (displayFileSize.Contains("mb")) - { - if (double.TryParse(displayFileSize.Replace("mb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) - { - return (int)Math.Round(n * 1024 * 1024); - } - } - - if (displayFileSize.Contains("gb")) - { - if (double.TryParse(displayFileSize.Replace("gb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) - { - return (int)Math.Round(n * 1024 * 1024 * 1024); - } - } - - return 0; - } - - /// - /// Downloads the requested resource as a using the configured . - /// - /// A containing the URI to download. - /// Encoding for source text - /// A containing the requested resource. - public static string DownloadString(string address, Encoding encoding = null) - { - using (var wc = new WebClient()) - { - wc.Proxy = GetProxy(); - if (encoding != null) - { - wc.Encoding = encoding; - } - - return wc.DownloadString(address).Trim(); - } - } - - public static void SetSecurityProtocol() - { - // Github requires TLS 1.2 - try - { - var tls12Protocol = (SslProtocols)0x00000C00; //TODO: Remove this when it's standard in .net framework - 4.6+ - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | (SecurityProtocolType)tls12Protocol; - } - catch (Exception) - { - // This will crash on .net framework versions < 4.5! - // .NET 4.5 required for TLS 1.2 - TLS 1.2 is not default so use this: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 - // NET 4.6 and above. You don’t need to do any additional work to support TLS 1.2, it’s supported by default. - } - } - - public static WebProxy GetProxy() - { - if (!string.IsNullOrEmpty(Configuration.Settings.Proxy.ProxyAddress)) - { - var proxy = new WebProxy(Configuration.Settings.Proxy.ProxyAddress); - - if (!string.IsNullOrEmpty(Configuration.Settings.Proxy.UserName)) - { - if (string.IsNullOrEmpty(Configuration.Settings.Proxy.Domain)) - { - proxy.Credentials = new NetworkCredential(Configuration.Settings.Proxy.UserName, Configuration.Settings.Proxy.DecodePassword()); - } - else - { - proxy.Credentials = new NetworkCredential(Configuration.Settings.Proxy.UserName, Configuration.Settings.Proxy.DecodePassword(), Configuration.Settings.Proxy.Domain); - } - } - else - { - proxy.UseDefaultCredentials = true; - } - - return proxy; - } - return null; - } - - public static bool IsBetweenNumbers(string s, int position) - { - if (string.IsNullOrEmpty(s) || position < 1 || position + 2 > s.Length) - { - return false; - } - - return char.IsDigit(s[position - 1]) && char.IsDigit(s[position + 1]); - } - - public static string AutoBreakLine(string text, string language) - { - return AutoBreakLine(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language); - } - - public static string AutoBreakLine(string text) - { - return AutoBreakLine(text, string.Empty); // no language - } - - internal static bool CanBreak(string s, int index, string language) - { - char nextChar; - if (index >= 0 && index < s.Length) - { - nextChar = s[index]; - } - else - { - return false; - } - - if (!"\r\n\t ".Contains(nextChar)) - { - return false; - } - - // Some words we don't like breaking after - string s2 = s.Substring(0, index); - if (Configuration.Settings.Tools.UseNoLineBreakAfter) - { - foreach (NoBreakAfterItem ending in NoBreakAfterList(language)) - { - if (ending.IsMatch(s2)) - { - return false; - } - } - } - else - { - if (s2.EndsWith(" mr.", StringComparison.OrdinalIgnoreCase) || - s2.EndsWith(" dr.", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - } - - if (s2.EndsWith("? -", StringComparison.Ordinal) || s2.EndsWith("! -", StringComparison.Ordinal) || s2.EndsWith(". -", StringComparison.Ordinal)) - { - return false; - } - - return true; - } - - public static void ResetNoBreakAfterList() - { - _lastNoBreakAfterListLanguage = null; - } - - private static string _lastNoBreakAfterListLanguage; - private static List _lastNoBreakAfterList = new List(); - internal static IEnumerable NoBreakAfterList(string languageName) - { - if (string.IsNullOrEmpty(languageName)) - { - return new List(); - } - - if (languageName == _lastNoBreakAfterListLanguage) - { - return _lastNoBreakAfterList; - } - - _lastNoBreakAfterList = new List(); - - //load words via xml - string noBreakAfterFileName = DictionaryFolder + languageName + "_NoBreakAfterList.xml"; - var doc = new XmlDocument(); - if (File.Exists(noBreakAfterFileName)) - { - doc.Load(noBreakAfterFileName); - foreach (XmlNode node in doc.DocumentElement.SelectNodes("Item")) - { - if (!string.IsNullOrEmpty(node.InnerText)) - { - if (node.Attributes?["RegEx"] != null && node.Attributes["RegEx"].InnerText.Equals("true", StringComparison.OrdinalIgnoreCase)) - { - var r = new Regex(node.InnerText, RegexOptions.Compiled); - _lastNoBreakAfterList.Add(new NoBreakAfterItem(r, node.InnerText)); - } - else - { - _lastNoBreakAfterList.Add(new NoBreakAfterItem(node.InnerText.TrimStart())); - } - } - } - } - _lastNoBreakAfterListLanguage = languageName; - - return _lastNoBreakAfterList; - } - - public static string AutoBreakLineMoreThanTwoLines(string text, int maximumLength, int mergeLinesShorterThan, string language) - { - if (text == null || text.Length < 3 || !(text.Contains(" ") || text.Contains("\n"))) - { - return text; - } - - string s = AutoBreakLinePrivate(text, maximumLength, mergeLinesShorterThan, language, Configuration.Settings.Tools.AutoBreakLineEndingEarly); - - var arr = HtmlUtil.RemoveHtmlTags(s, true).SplitToLines(); - if (arr.Count == 1 && arr[0].Length <= maximumLength || - arr.Count == 2 && arr[0].Length <= maximumLength && arr[1].Length <= maximumLength) - { - return s; - } - - s = RemoveLineBreaks(text); - var htmlTags = new Dictionary(); - var sb = new StringBuilder(s.Length); - int six = 0; - while (six < s.Length) - { - var letter = s[six]; - var tagFound = letter == '<' && - (s.Substring(six).StartsWith("', six + 1); - } - - if (tagFound && endIndex > 0) - { - string tag = s.Substring(six, endIndex - six + 1); - s = s.Remove(six, tag.Length); - if (htmlTags.ContainsKey(six)) - { - htmlTags[six] = htmlTags[six] + tag; - } - else - { - htmlTags.Add(six, tag); - } - } - else - { - sb.Append(letter); - six++; - } - } - s = sb.ToString(); - - // check 3 lines - var pti = new PlainTextImporter(false, false, 1, ".?!", maximumLength, language); - var three = pti.SplitToThree(sb.ToString()); - if (three.Count == 3 && - three[0].Length < maximumLength && - three[1].Length < maximumLength && - three[2].Length < maximumLength) - { - return ReInsertHtmlTagsAndCleanUp(string.Join(" " + Environment.NewLine, three), htmlTags); - } - - // check 4 lines - var four = pti.SplitToFour(sb.ToString()); - if (four.Count == 4 && - four[0].Length < maximumLength && - four[1].Length < maximumLength && - four[2].Length < maximumLength && - four[3].Length < maximumLength) - { - return ReInsertHtmlTagsAndCleanUp(string.Join(" " + Environment.NewLine, four), htmlTags); - } - - var words = s.Split(' '); - for (int numberOfLines = 3; numberOfLines < 9999; numberOfLines++) - { - int average = s.Length / numberOfLines + 1; - for (int len = average; len < maximumLength; len++) - { - List list = SplitToX(words, numberOfLines, len); - bool allOk = true; - foreach (var lineLength in list) - { - if (lineLength > maximumLength) - { - allOk = false; - } - } - if (allOk) - { - int index = 0; - foreach (var item in list) - { - index += item; - htmlTags.Add(index, Environment.NewLine); - } - return ReInsertHtmlTagsAndCleanUp(s, htmlTags); - } - } - } - - return text; - } - - private static string ReInsertHtmlTagsAndCleanUp(string input, Dictionary htmlTags) - { - var s = ReInsertHtmlTags(input, htmlTags); - s = s.Replace(" " + Environment.NewLine, Environment.NewLine); - s = s.Replace(Environment.NewLine + " ", Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - return s.TrimEnd(); - } - - private static List SplitToX(string[] words, int count, int average) - { - var list = new List(); - int currentIdx = 0; - int currentCount = 0; - foreach (string word in words) - { - if (currentCount + word.Length + 3 > average && currentIdx < count) - { - list.Add(currentCount); - currentIdx++; - currentCount = 0; - } - currentCount += word.Length + 1; - } - if (currentIdx < count) - { - list.Add(currentCount); - } - else - { - list[list.Count - 1] += currentCount; - } - - return list; - } - - public static string AutoBreakLine(string text, int maximumLength, int mergeLinesShorterThan, string language) - { - if (Configuration.Settings.General.MaxNumberOfLines <= 2) - { - return AutoBreakLinePrivate(text, maximumLength, mergeLinesShorterThan, language, Configuration.Settings.Tools.AutoBreakLineEndingEarly); - } - - return AutoBreakLineMoreThanTwoLines(text, maximumLength, mergeLinesShorterThan, language); - } - - public static string AutoBreakLine(string text, string language, bool autoBreakLineEndingEarly) - { - if (Configuration.Settings.General.MaxNumberOfLines <= 2) - { - return AutoBreakLinePrivate(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language, autoBreakLineEndingEarly); - } - - return AutoBreakLineMoreThanTwoLines(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language); - } - - public static string AutoBreakLinePrivate(string input, int maximumLength, int mergeLinesShorterThan, string language, bool autoBreakLineEndingEarly) - { - if (string.IsNullOrEmpty(input) || input.Length < 3) - { - return input; - } - - var text = input.Replace('\u00a0', ' '); // replace non-break-space (160 decimal) ascii char with normal space - if (!(text.Contains(' ') || text.Contains('\n'))) - { - return input; - } - - // do not auto break dialogs or music symbol - if (text.Contains(Environment.NewLine) && (text.Contains('-') || text.Contains('♪'))) - { - var noTagLines = HtmlUtil.RemoveHtmlTags(text, true).SplitToLines(); - if (noTagLines.Count == 2) - { - var arr0 = noTagLines[0].Trim().TrimEnd('"', '\'').TrimEnd(); - if (language == "ar") - { - if (arr0.EndsWith('-') && noTagLines[1].TrimStart().EndsWith('-') && arr0.Length > 1 && (".?!)]♪؟".Contains(arr0[0]) || arr0.StartsWith("--", StringComparison.Ordinal) || arr0.StartsWith('–'))) - { - if (Configuration.Settings.Tools.AutoBreakDashEarly) - { - return input; - } - } - } - else - { - if (arr0.StartsWith('-') && noTagLines[1].TrimStart().StartsWith('-') && arr0.Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) || arr0.EndsWith("--", StringComparison.Ordinal) || arr0.EndsWith('–') || arr0 == "- _" || arr0 == "-_")) - { - if (Configuration.Settings.Tools.AutoBreakDashEarly) - { - return input; - } - } - } - if (noTagLines[0].StartsWith('♪') && noTagLines[0].EndsWith('♪') || noTagLines[1].StartsWith('♪') && noTagLines[0].EndsWith('♪')) - { - return input; - } - if (noTagLines[0].StartsWith('[') && noTagLines[0].Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) && (noTagLines[1].StartsWith('-') || noTagLines[1].StartsWith('[')))) - { - return input; - } - if (noTagLines[0].StartsWith('-') && noTagLines[0].Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) && (noTagLines[1].StartsWith('-') || noTagLines[1].StartsWith('[')))) - { - if (Configuration.Settings.Tools.AutoBreakDashEarly) - { - return input; - } - } - } - - var dialogHelper = new DialogSplitMerge { DialogStyle = Configuration.Settings.General.DialogStyle, TwoLetterLanguageCode = language }; - if (Configuration.Settings.Tools.AutoBreakDashEarly && - dialogHelper.IsDialog(noTagLines) && noTagLines.Count <= Configuration.Settings.General.MaxNumberOfLines) - { - return input; - } - } - - string s = RemoveLineBreaks(text); - if (s.CountCharacters(false, Configuration.Settings.General.IgnoreArabicDiacritics) < mergeLinesShorterThan) - { - var lastIndexOfDash = s.LastIndexOf(" -", StringComparison.Ordinal); - if (Configuration.Settings.Tools.AutoBreakDashEarly && lastIndexOfDash > 4 && s.Substring(0, lastIndexOfDash).HasSentenceEnding(language)) - { - s = s.Remove(lastIndexOfDash, 1).Insert(lastIndexOfDash, Environment.NewLine); - } - - return s; - } - - var htmlTags = new Dictionary(); - var sb = new StringBuilder(); - int six = 0; - while (six < s.Length) - { - var letter = s[six]; - bool tagFound = false; - if (letter == '<') - { - string tagString = s.Substring(six); - tagFound = tagString.StartsWith(" 0) - { - tagString = tagString.Substring(0, endIndexAssTag); - if (htmlTags.ContainsKey(six)) - { - htmlTags[six] = htmlTags[six] + tagString; - } - else - { - htmlTags.Add(six, tagString); - } - - s = s.Remove(six, endIndexAssTag); - continue; - } - } - - int endIndex = -1; - if (tagFound) - { - endIndex = s.IndexOf('>', six + 1); - } - - if (tagFound && endIndex > 0) - { - string tag = s.Substring(six, endIndex - six + 1); - s = s.Remove(six, tag.Length); - if (htmlTags.ContainsKey(six)) - { - htmlTags[six] = htmlTags[six] + tag; - } - else - { - htmlTags.Add(six, tag); - } - } - else - { - sb.Append(letter); - six++; - } - } - s = sb.ToString(); - - var textSplit = new TextSplit(s, maximumLength, language); - var split = textSplit.AutoBreak(Configuration.Settings.Tools.AutoBreakDashEarly, autoBreakLineEndingEarly, Configuration.Settings.Tools.AutoBreakCommaBreakEarly, Configuration.Settings.Tools.AutoBreakUsePixelWidth); - if (split != null) - { - s = split; - } - s = ReInsertHtmlTags(s.Replace(Environment.NewLine, " " + Environment.NewLine), htmlTags); - var idx = s.IndexOf(Environment.NewLine + " 2) - { - var endIdx = s.IndexOf('>', idx + 2); - if (endIdx > idx) - { - var tag = s.Substring(idx + Environment.NewLine.Length, endIdx - (idx + Environment.NewLine.Length) + 1); - s = s.Insert(idx, tag); - s = s.Remove(idx + tag.Length + Environment.NewLine.Length, tag.Length); - } - } - s = s.Replace(" " + Environment.NewLine, Environment.NewLine); - s = s.Replace(Environment.NewLine + " ", Environment.NewLine); - return s.TrimEnd(); - } - - public static string RemoveLineBreaks(string input) - { - var s = HtmlUtil.FixUpperTags(input); - - s = s.Replace(" " + Environment.NewLine + "", Environment.NewLine); - s = s.Replace("" + Environment.NewLine + " ", Environment.NewLine); - s = s.Replace("" + Environment.NewLine + "", Environment.NewLine); - - s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); - - s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); - - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); - - while (s.Contains(" " + Environment.NewLine)) - { - s = s.Replace(" " + Environment.NewLine, Environment.NewLine); - } - - while (s.Contains(Environment.NewLine + " ")) - { - s = s.Replace(Environment.NewLine + " ", Environment.NewLine); - } - - s = s.Replace(Environment.NewLine, " "); - return s.Trim(); - } - - /// - /// Note: Requires a space before the NewLine - /// - private static string ReInsertHtmlTags(string s, Dictionary htmlTags) - { - if (htmlTags.Count > 0) - { - var sb = new StringBuilder(s.Length); - int six = 0; - foreach (var letter in s) - { - if (Environment.NewLine.Contains(letter)) - { - sb.Append(letter); - } - else - { - if (htmlTags.ContainsKey(six)) - { - sb.Append(htmlTags[six]); - } - sb.Append(letter); - six++; - } - } - - for (int i = 0; i < 15; i++) - { - if (htmlTags.ContainsKey(six + i)) - { - sb.Append(htmlTags[six + i]); - } - } - - return sb.ToString(); - } - return s; - } - - public static string UnbreakLine(string text) - { - var lines = text.SplitToLines(); - if (lines.Count == 1) - { - return lines[0]; - } - - var singleLine = string.Join(" ", lines); - while (singleLine.Contains(" ")) - { - singleLine = singleLine.Replace(" ", " "); - } - - if (singleLine.Contains(" ", " "); - singleLine = singleLine.Replace("", " "); - - singleLine = singleLine.Replace(" ", " "); - singleLine = singleLine.Replace("", " "); - - singleLine = singleLine.Replace(" ", " "); - singleLine = singleLine.Replace("", " "); - } - return singleLine; - } - - public static string RemoveSsaTags(string input) - { - var s = input; - - if (s.Contains('{') && s.Contains('}')) - { - var p1Index = s.IndexOf("\\p1", StringComparison.Ordinal); - var p0Index = s.IndexOf("{\\p0}", StringComparison.Ordinal); - if (p1Index > 0 && (p0Index > p1Index || p0Index == -1)) - { - var startTagIndex = s.Substring(0, p1Index).LastIndexOf('{'); - if (startTagIndex >= 0) - { - if (p0Index > p1Index) - { - s = s.Remove(startTagIndex, p0Index - startTagIndex + "{\\p0}".Length); - } - else - { - s = s.Remove(startTagIndex); - } - } - } - } - - int k = s.IndexOf("{\\", StringComparison.Ordinal); - var karaokeStart = s.IndexOf("{Kara Effector", StringComparison.Ordinal); - if (k == -1 || karaokeStart >= 0 && karaokeStart < k) - { - k = karaokeStart; - } - - while (k >= 0) - { - int l = s.IndexOf('}', k + 1); - if (l < k) - { - break; - } - - s = s.Remove(k, l - k + 1); - k = s.IndexOf('{', k); - } - - s = s.Replace("\\n", Environment.NewLine); // Soft line break - s = s.Replace("\\N", Environment.NewLine); // Hard line break - s = s.Replace("\\h", " "); // Hard space - - if (s.StartsWith("m ", StringComparison.Ordinal)) - { - var test = s.Remove(0, 2) - .RemoveChar('0') - .RemoveChar('1') - .RemoveChar('2') - .RemoveChar('3') - .RemoveChar('4') - .RemoveChar('5') - .RemoveChar('6') - .RemoveChar('7') - .RemoveChar('8') - .RemoveChar('9') - .RemoveChar('-') - .RemoveChar('l') - .RemoveChar('m') - .RemoveChar(' ') - .RemoveChar('.'); - if (test.Length == 0) - { - return string.Empty; - } - } - - return s; - } - - public static string DictionaryFolder => Configuration.DictionariesDirectory; - - public static List GetDictionaryLanguages() - { - var list = new List(); - if (Directory.Exists(DictionaryFolder)) - { - foreach (string dic in Directory.GetFiles(DictionaryFolder, "*.dic")) - { - string name = Path.GetFileNameWithoutExtension(dic); - if (!name.StartsWith("hyph", StringComparison.Ordinal)) - { - try - { - var ci = CultureInfo.GetCultureInfo(name.Replace('_', '-')); - name = ci.DisplayName + " [" + name + "]"; - } - catch (Exception exception) - { - System.Diagnostics.Debug.WriteLine(exception.Message); - name = "[" + name + "]"; - } - list.Add(name); - } - } - } - return list; - } - - public static List GetDictionaryLanguagesCultureNeutral() - { - var list = new List(); - if (Directory.Exists(DictionaryFolder)) - { - foreach (string dic in Directory.GetFiles(DictionaryFolder, "*.dic")) - { - string name = Path.GetFileNameWithoutExtension(dic); - if (!name.StartsWith("hyph", StringComparison.Ordinal)) - { - try - { - var ci = CultureInfo.GetCultureInfo(name.Replace('_', '-')); - var displayName = ci.DisplayName; - if (displayName.Contains("(")) - { - displayName = displayName.Remove(displayName.IndexOf('(')).TrimEnd(); - } - name = displayName + " [" + ci.TwoLetterISOLanguageName + "]"; - } - catch (Exception exception) - { - System.Diagnostics.Debug.WriteLine(exception.Message); - name = "[" + name + "]"; - } - if (!list.Contains(name)) - { - list.Add(name); - } - } - } - } - return list; - } - - public static IEnumerable GetSubtitleLanguageCultures() - { - var prospects = new List(); - var excludes = new HashSet(); - - foreach (var ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) - { - if (ci.Name.Length < 4 && ci.Name == ci.IetfLanguageTag) - { - excludes.Add(ci.Parent.Name); - prospects.Add(ci); - } - } - - return prospects.Where(ci => !excludes.Contains(ci.Name)); - } - - public static double GetOptimalDisplayMilliseconds(string text) - { - return GetOptimalDisplayMilliseconds(text, Configuration.Settings.General.SubtitleOptimalCharactersPerSeconds); - } - - public static double GetOptimalDisplayMilliseconds(string text, double optimalCharactersPerSecond) - { - if (optimalCharactersPerSecond < 2 || optimalCharactersPerSecond > 100) - { - optimalCharactersPerSecond = 14.7; - } - - var duration = text.CountCharacters(Configuration.Settings.General.CharactersPerSecondsIgnoreWhiteSpace, Configuration.Settings.General.IgnoreArabicDiacritics) / optimalCharactersPerSecond * TimeCode.BaseUnit; - - if (duration < 1400) - { - duration *= 1.2; - } - else if (duration < 1400 * 1.2) - { - duration = 1400 * 1.2; - } - else if (duration > 2900) - { - duration = Math.Max(2900, duration * 0.96); - } - - if (duration < Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds) - { - duration = Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds; - } - - if (duration > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds) - { - duration = Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds; - } - - return duration; - } - - public static string ColorToHex(Color c) - { - return $"#{c.R:x2}{c.G:x2}{c.B:x2}"; - } - - public static int GetMaxLineLength(string text) - { - int maxLength = 0; - foreach (string line in HtmlUtil.RemoveHtmlTags(text, true).SplitToLines()) - { - if (line.Length > maxLength) - { - maxLength = line.Length; - } - } - return maxLength; - } - - public static double GetCharactersPerSecond(Paragraph paragraph) - { - var duration = paragraph.Duration; - if (duration.TotalMilliseconds < 1) - { - return 999; - } - - return paragraph.Text.CountCharacters(Configuration.Settings.General.CharactersPerSecondsIgnoreWhiteSpace, Configuration.Settings.General.IgnoreArabicDiacritics) / duration.TotalSeconds; - } - - public static double GetCharactersPerSecond(Paragraph paragraph, int numberOfCharacters) - { - var duration = paragraph.Duration; - if (duration.TotalMilliseconds < 1) - { - return 999; - } - - return numberOfCharacters / duration.TotalSeconds; - } - - - public static bool IsRunningOnMono() - { - return Type.GetType("Mono.Runtime") != null; - } - - public static void ShowHelp(string parameter) - { - string helpFile = Configuration.Settings.Language.General.HelpFile; - if (string.IsNullOrEmpty(helpFile)) - { - helpFile = "https://www.nikse.dk/SubtitleEdit/Help"; - } - try - { - if (Configuration.IsRunningOnWindows || Configuration.IsRunningOnMac) - { - System.Diagnostics.Process.Start(helpFile + parameter); - } - else if (Configuration.IsRunningOnLinux) - { - System.Diagnostics.Process process = new System.Diagnostics.Process(); - process.EnableRaisingEvents = false; - process.StartInfo.FileName = "xdg-open"; - process.StartInfo.Arguments = helpFile + parameter; - process.Start(); - } - } - catch - { - //Don't do anything - } - } - - public static string AssemblyVersion => Assembly.GetEntryAssembly().GetName().Version.ToString(); - - public static string AssemblyDescription - { - get - { - var assembly = Assembly.GetEntryAssembly(); - if (assembly != null && Attribute.IsDefined(assembly, typeof(AssemblyDescriptionAttribute))) - { - var descriptionAttribute = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(assembly, typeof(AssemblyDescriptionAttribute)); - if (descriptionAttribute != null) - { - return descriptionAttribute.Description; - } - } - return null; - } - } - - public static void RemoveFromUserDictionary(string word, string languageName) - { - word = word.Trim(); - if (word.Length > 0) - { - string userWordsXmlFileName = DictionaryFolder + languageName + "_user.xml"; - var userWords = new XmlDocument(); - if (File.Exists(userWordsXmlFileName)) - { - userWords.Load(userWordsXmlFileName); - } - else - { - userWords.LoadXml(""); - } - - var words = new List(); - var nodes = userWords.DocumentElement?.SelectNodes("word"); - if (nodes != null) - { - foreach (XmlNode node in nodes) - { - string w = node.InnerText.Trim(); - if (w.Length > 0 && w != word) - { - words.Add(w); - } - } - } - - words.Sort(); - - if (userWords.DocumentElement != null) - { - userWords.DocumentElement.RemoveAll(); - foreach (string w in words) - { - XmlNode node = userWords.CreateElement("word"); - node.InnerText = w; - userWords.DocumentElement.AppendChild(node); - } - } - - userWords.Save(userWordsXmlFileName); - } - } - - public static void AddToUserDictionary(string word, string languageName) - { - word = word.Trim(); - if (word.Length > 0) - { - string userWordsXmlFileName = DictionaryFolder + languageName + "_user.xml"; - var userWords = new XmlDocument(); - if (File.Exists(userWordsXmlFileName)) - { - userWords.Load(userWordsXmlFileName); - } - else - { - userWords.LoadXml(""); - } - - var words = new List(); - if (userWords.DocumentElement != null) - { - var nodes = userWords.DocumentElement.SelectNodes("word"); - if (nodes != null) - { - foreach (XmlNode node in nodes) - { - string w = node.InnerText.Trim(); - if (w.Length > 0) - { - words.Add(w); - } - } - } - - if (!words.Contains(word)) - { - words.Add(word); - } - - words.Sort(); - - userWords.DocumentElement.RemoveAll(); - foreach (string w in words) - { - XmlNode node = userWords.CreateElement("word"); - node.InnerText = w; - userWords.DocumentElement.AppendChild(node); - } - } - - userWords.Save(userWordsXmlFileName); - } - } - - public static string LoadUserWordList(List userWordList, string languageName) - { - userWordList.Clear(); - var userWordDictionary = new XmlDocument(); - string userWordListXmlFileName = DictionaryFolder + languageName + "_user.xml"; - if (File.Exists(userWordListXmlFileName)) - { - userWordDictionary.Load(userWordListXmlFileName); - foreach (XmlNode node in userWordDictionary.DocumentElement.SelectNodes("word")) - { - string s = node.InnerText.ToLowerInvariant(); - if (!userWordList.Contains(s)) - { - userWordList.Add(s); - } - } - } - return userWordListXmlFileName; - } - - public static string LoadUserWordList(HashSet userWordList, string languageName) - { - userWordList.Clear(); - var userWordDictionary = new XmlDocument(); - string userWordListXmlFileName = DictionaryFolder + languageName + "_user.xml"; - if (File.Exists(userWordListXmlFileName)) - { - userWordDictionary.Load(userWordListXmlFileName); - var nodes = userWordDictionary.DocumentElement?.SelectNodes("word"); - if (nodes != null) - { - foreach (XmlNode node in nodes) - { - string s = node.InnerText.ToLowerInvariant(); - if (!userWordList.Contains(s)) - { - userWordList.Add(s); - } - } - } - } - return userWordListXmlFileName; - } - - public static readonly string UppercaseLetters = Configuration.Settings.General.UppercaseLetters.ToUpperInvariant(); - public static readonly string LowercaseLetters = Configuration.Settings.General.UppercaseLetters.ToLowerInvariant(); - public static readonly string LowercaseLettersWithNumbers = LowercaseLetters + "0123456789"; - public static readonly string AllLetters = UppercaseLetters + LowercaseLetters; - public static readonly string AllLettersAndNumbers = UppercaseLetters + LowercaseLettersWithNumbers; - - public static Color GetColorFromUserName(string userName) - { - if (string.IsNullOrEmpty(userName)) - { - return Color.Pink; - } - - byte[] buffer = Encoding.UTF8.GetBytes(userName); - long number = 0; - foreach (byte b in buffer) - { - number += b; - } - - switch (number % 20) - { - case 0: return Color.Red; - case 1: return Color.Blue; - case 2: return Color.Green; - case 3: return Color.DarkCyan; - case 4: return Color.DarkGreen; - case 5: return Color.DarkBlue; - case 6: return Color.DarkTurquoise; - case 7: return Color.DarkViolet; - case 8: return Color.DeepPink; - case 9: return Color.DodgerBlue; - case 10: return Color.ForestGreen; - case 11: return Color.Fuchsia; - case 12: return Color.DarkOrange; - case 13: return Color.GreenYellow; - case 14: return Color.IndianRed; - case 15: return Color.Indigo; - case 16: return Color.LawnGreen; - case 17: return Color.LightBlue; - case 18: return Color.DarkGoldenrod; - case 19: return Color.Magenta; - default: - return Color.Black; - } - } - - public static int GetNumber0To7FromUserName(string userName) - { - if (string.IsNullOrEmpty(userName)) - { - return 0; - } - - byte[] buffer = Encoding.UTF8.GetBytes(userName); - long number = 0; - foreach (byte b in buffer) - { - number += b; - } - - return (int)(number % 8); - } - - public static string LowercaseVowels => "aeiouyæøåéóáôèòæøåäöïɤəɛʊʉɨ"; - - public static int CountTagInText(string text, string tag) - { - int count = 0; - int index = text.IndexOf(tag, StringComparison.Ordinal); - while (index >= 0) - { - count++; - index = index + tag.Length; - if (index >= text.Length) - { - return count; - } - - index = text.IndexOf(tag, index, StringComparison.Ordinal); - } - return count; - } - - public static int CountTagInText(string text, char tag) - { - int count = 0; - int index = text.IndexOf(tag); - while (index >= 0) - { - count++; - if ((index + 1) == text.Length) - { - return count; - } - - index = text.IndexOf(tag, index + 1); - } - return count; - } - - public static bool StartsAndEndsWithTag(string text, string startTag, string endTag) - { - if (string.IsNullOrWhiteSpace(text)) - { - return false; - } - - if (!text.Contains(startTag) || !text.Contains(endTag)) - { - return false; - } - - while (text.Contains(" ")) - { - text = text.Replace(" ", " "); - } - - var s1 = "- " + startTag; - var s2 = "-" + startTag; - var s3 = "- ..." + startTag; - var s4 = "- " + startTag + "..."; // - ... - - var e1 = endTag + "."; - var e2 = endTag + "!"; - var e3 = endTag + "?"; - var e4 = endTag + "..."; - var e5 = endTag + "-"; - - bool isStart = false; - bool isEnd = false; - if (text.StartsWith(startTag, StringComparison.Ordinal) || text.StartsWith(s1, StringComparison.Ordinal) || text.StartsWith(s2, StringComparison.Ordinal) || text.StartsWith(s3, StringComparison.Ordinal) || text.StartsWith(s4, StringComparison.Ordinal)) - { - isStart = true; - } - - if (text.EndsWith(endTag, StringComparison.Ordinal) || text.EndsWith(e1, StringComparison.Ordinal) || text.EndsWith(e2, StringComparison.Ordinal) || text.EndsWith(e3, StringComparison.Ordinal) || text.EndsWith(e4, StringComparison.Ordinal) || text.EndsWith(e5, StringComparison.Ordinal)) - { - isEnd = true; - } - - return isStart && isEnd; - } - - public static Paragraph GetOriginalParagraph(int index, Paragraph paragraph, List originalParagraphs) - { - if (index < 0) - { - return null; - } - - if (index < originalParagraphs.Count && Math.Abs(originalParagraphs[index].StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 50) - { - return originalParagraphs[index]; - } - - if (paragraph.StartTime.IsMaxTime && index < originalParagraphs.Count && originalParagraphs[index].StartTime.IsMaxTime) - { - return originalParagraphs[index]; - } - - foreach (var p in originalParagraphs) - { - if (!p.StartTime.IsMaxTime && Math.Abs(p.StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 0.01) - { - return p; - } - } - - foreach (var p in originalParagraphs) - { - if (!p.StartTime.IsMaxTime && - p.StartTime.TotalMilliseconds > paragraph.StartTime.TotalMilliseconds - 200 && - p.StartTime.TotalMilliseconds < paragraph.StartTime.TotalMilliseconds + TimeCode.BaseUnit) - { - return p; - } - } - - return null; - } - - /// - /// UrlEncodes a string without the requirement for System.Web - /// - public static string UrlEncode(string text) - { - return Uri.EscapeDataString(text); - } - - /// - /// UrlDecodes a string without requiring System.Web - /// - public static string UrlDecode(string text) - { - // pre-process for + sign space formatting since System.Uri doesn't handle it - // plus literals are encoded as %2b normally so this should be safe - text = text.Replace('+', ' '); - return Uri.UnescapeDataString(text); - } - - private static readonly Regex TwoOrMoreDigitsNumber = new Regex(@"\d\d+", RegexOptions.Compiled); - private const string PrePostStringsToReverse = @"-— !?.…""،,():;[]+~*/<>&^%$#\\|'"; - - public static string ReverseStartAndEndingForRightToLeft(string s) - { - var newLines = new StringBuilder(); - var pre = new StringBuilder(); - var post = new StringBuilder(); - var lines = s.SplitToLines(); - foreach (var line in lines) - { - string s2 = line; - - var preTags = new StringBuilder(); - while (s2.StartsWith("{\\", StringComparison.Ordinal) && s2.IndexOf('}') > 0) - { - int end = s2.IndexOf('}') + 1; - preTags.Append(s2.Substring(0, end)); - s2 = s2.Remove(0, end); - } - string postTags = string.Empty; - for (int k = 0; k < 10; k++) - { - if (s2.StartsWith("♪ ", StringComparison.Ordinal) || - s2.StartsWith("♫ ", StringComparison.Ordinal)) - { - preTags.Append(s2.Substring(0, 2)); - s2 = s2.Remove(0, 2); - } - if (s2.StartsWith("♪", StringComparison.Ordinal) || - s2.StartsWith("♫", StringComparison.Ordinal)) - { - preTags.Append(s2.Substring(0, 1)); - s2 = s2.Remove(0, 1); - } - if (s2.StartsWith("", StringComparison.Ordinal) || - s2.StartsWith("", StringComparison.Ordinal) || - s2.StartsWith("", StringComparison.Ordinal)) - { - preTags.Append(s2.Substring(0, 3)); - s2 = s2.Remove(0, 3); - } - if (s2.StartsWith("') > 0) - { - int idx = s2.IndexOf('>'); - idx++; - preTags.Append(s2.Substring(0, idx)); - s2 = s2.Remove(0, idx); - } - - if (s2.EndsWith(" ♪", StringComparison.Ordinal) || - s2.EndsWith(" ♫", StringComparison.Ordinal)) - { - postTags = s2.Substring(s2.Length - 2) + postTags; - s2 = s2.Remove(s2.Length - 2); - } - if (s2.EndsWith("♪", StringComparison.Ordinal) || - s2.EndsWith("♫", StringComparison.Ordinal)) - { - postTags = s2.Substring(s2.Length - 1) + postTags; - s2 = s2.Remove(s2.Length - 1); - } - if (s2.EndsWith("", StringComparison.Ordinal) || - s2.EndsWith("", StringComparison.Ordinal) || - s2.EndsWith("", StringComparison.Ordinal)) - { - postTags = s2.Substring(s2.Length - 4) + postTags; - s2 = s2.Remove(s2.Length - 4); - } - if (s2.EndsWith("", StringComparison.Ordinal)) - { - postTags = s2.Substring(s2.Length - 7) + postTags; - s2 = s2.Remove(s2.Length - 7); - } - } - - pre.Clear(); - post.Clear(); - int i = 0; - while (i < s2.Length && PrePostStringsToReverse.Contains(s2[i]) && s2[i] != '{' && - !s2.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase) && - !s2.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase) && - !s2.Substring(i).StartsWith(" i && PrePostStringsToReverse.Contains(s2[j]) && s2[j] != '}' && - !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase) && - !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase) && - !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase)) - { - post.Append(s2[j]); - j--; - } - newLines.Append(preTags); - newLines.Append(ReverseParenthesis(post.ToString())); - newLines.Append(s2.Substring(pre.Length, s2.Length - (pre.Length + post.Length))); - newLines.Append(ReverseParenthesis(ReverseString(pre.ToString()))); - newLines.Append(postTags); - newLines.AppendLine(); - } - return newLines.ToString().Trim(); - } - - public static string ReverseNumbers(string s) - { - return TwoOrMoreDigitsNumber.Replace(s, m => ReverseString(m.Value)); - } - - internal static string ReverseString(string s) - { - int len = s.Length; - if (len <= 1) - { - return s; - } - var chars = new char[len]; - for (int i = 0; i < len; i++) - { - chars[i] = s[len - i - 1]; - } - return new string(chars); - } - - private static string ReverseParenthesis(string s) - { - if (string.IsNullOrEmpty(s)) - { - return s; - } - int len = s.Length; - var chars = new char[len]; - for (int i = 0; i < len; i++) - { - char ch = s[i]; - switch (ch) - { - case '(': - ch = ')'; - break; - case ')': - ch = '('; - break; - case '[': - ch = ']'; - break; - case ']': - ch = '['; - break; - } - chars[i] = ch; - } - return new string(chars); - } - - public static string FixEnglishTextInRightToLeftLanguage(string text, string reverseChars) - { - var sb = new StringBuilder(); - var lines = text.SplitToLines(); - foreach (string line in lines) - { - string s = ReverseParenthesis(line.Trim()); - bool numbersOn = false; - string numbers = string.Empty; - for (int i = 0; i < s.Length; i++) - { - if (numbersOn && reverseChars.Contains(s[i])) - { - numbers = s[i] + numbers; - } - else if (numbersOn) - { - numbersOn = false; - s = s.Remove(i - numbers.Length, numbers.Length).Insert(i - numbers.Length, numbers); - numbers = string.Empty; - } - else if (reverseChars.Contains(s[i])) - { - numbers = s[i] + numbers; - numbersOn = true; - } - } - if (numbersOn) - { - int i = s.Length; - s = s.Remove(i - numbers.Length, numbers.Length).Insert(i - numbers.Length, numbers); - } - - sb.AppendLine(s); - } - return sb.ToString().Trim(); - } - - public static string ToSuperscript(string text) - { - var sb = new StringBuilder(); - var superscript = new List{ - '⁰', - '¹', - '²', - '³', - '⁴', - '⁵', - '⁶', - '⁷', - '⁸', - '⁹', - '⁺', - '⁻', - '⁼', - '⁽', - '⁾', - 'ᵃ', - 'ᵇ', - 'ᶜ', - 'ᵈ', - 'ᵉ', - 'ᶠ', - 'ᵍ', - 'ʰ', - 'ⁱ', - 'ʲ', - 'ᵏ', - 'ˡ', - 'ᵐ', - 'ⁿ', - 'ᵒ', - 'ᵖ', - 'ʳ', - 'ˢ', - 'ᵗ', - 'ᵘ', - 'ᵛ', - 'ʷ', - 'ˣ', - 'ʸ', - 'ᶻ', - 'ᴬ', - 'ᴮ', - 'ᴰ', - 'ᴱ', - 'ᴳ', - 'ᴴ', - 'ᴵ', - 'ᴶ', - 'ᴷ', - 'ᴸ', - 'ᴹ', - 'ᴺ', - 'ᴼ', - 'ᴾ', - 'ᴿ', - 'ᵀ', - 'ᵁ', - 'ᵂ' - }; - var normal = new List{ - '0', // "⁰" - '1', // "¹" - '2', // "²" - '3', // "³" - '4', // "⁴" - '5', // "⁵" - '6', // "⁶" - '7', // "⁷" - '8', // "⁸" - '9', // "⁹" - '+', // "⁺" - '-', // "⁻" - '=', // "⁼" - '(', // "⁽" - ')', // "⁾" - 'a', // "ᵃ" - 'b', // "ᵇ" - 'c', // "ᶜ" - 'd', // "ᵈ" - 'e', // "ᵉ" - 'f', // "ᶠ" - 'g', // "ᵍ" - 'h', // "ʰ" - 'i', // "ⁱ" - 'j', // "ʲ" - 'k', // "ᵏ" - 'l', // "ˡ" - 'm', // "ᵐ" - 'n', // "ⁿ" - 'o', // "ᵒ" - 'p', // "ᵖ" - 'r', // "ʳ" - 's', // "ˢ" - 't', // "ᵗ" - 'u', // "ᵘ" - 'v', // "ᵛ" - 'w', // "ʷ" - 'x', // "ˣ" - 'y', // "ʸ" - 'z', // "ᶻ" - 'A', // "ᴬ" - 'B', // "ᴮ" - 'D', // "ᴰ" - 'E', // "ᴱ" - 'G', // "ᴳ" - 'H', // "ᴴ" - 'I', // "ᴵ" - 'J', // "ᴶ" - 'K', // "ᴷ" - 'L', // "ᴸ" - 'M', // "ᴹ" - 'N', // "ᴺ" - 'O', // "ᴼ" - 'P', // "ᴾ" - 'R', // "ᴿ" - 'T', // "ᵀ" - 'U', // "ᵁ" - 'W', // "ᵂ" - }; - for (int i = 0; i < text.Length; i++) - { - char s = text[i]; - int index = normal.IndexOf(s); - if (index >= 0) - { - sb.Append(superscript[index]); - } - else - { - sb.Append(s); - } - } - return sb.ToString(); - } - - public static string ToSubscript(string text) - { - var sb = new StringBuilder(); - var subcript = new List{ - '₀', - '₁', - '₂', - '₃', - '₄', - '₅', - '₆', - '₇', - '₈', - '₉', - '₊', - '₋', - '₌', - '₍', - '₎', - 'ₐ', - 'ₑ', - 'ᵢ', - 'ₒ', - 'ᵣ', - 'ᵤ', - 'ᵥ', - 'ₓ', - }; - var normal = new List - { - '0', // "₀" - '1', // "₁" - '2', // "₂" - '3', // "₃" - '4', // "₄" - '5', // "₅" - '6', // "₆" - '7', // "₇" - '8', // "₈" - '9', // "₉" - '+', // "₊" - '-', // "₋" - '=', // "₌" - '(', // "₍" - ')', // "₎" - 'a', // "ₐ" - 'e', // "ₑ" - 'i', // "ᵢ" - 'o', // "ₒ" - 'r', // "ᵣ" - 'u', // "ᵤ" - 'v', // "ᵥ" - 'x', // "ₓ" - }; - for (int i = 0; i < text.Length; i++) - { - char s = text[i]; - int index = normal.IndexOf(s); - if (index >= 0) - { - sb.Append(subcript[index]); - } - else - { - sb.Append(s); - } - } - return sb.ToString(); - } - - public static string FixQuotes(string text) - { - if (string.IsNullOrEmpty(text)) - { - return text; - } - - if (text.StartsWith('"') && text.Length > 1) - { - text = text.Substring(1); - } - - if (text.EndsWith('"') && text.Length >= 1) - { - text = text.Substring(0, text.Length - 1); - } - - return text.Replace("\"\"", "\""); - } - - public static Color GetColorFromFontString(string text, Color defaultColor) - { - string s = text.TrimEnd(); - int start = s.IndexOf("= 0 && s.EndsWith("", StringComparison.OrdinalIgnoreCase)) - { - int end = s.IndexOf('>', start); - if (end > 0) - { - string f = s.Substring(start, end - start); - if (f.Contains(" color=", StringComparison.OrdinalIgnoreCase)) - { - int colorStart = f.IndexOf(" color=", StringComparison.OrdinalIgnoreCase); - if (s.IndexOf('"', colorStart + " color=".Length + 1) > 0) - { - end = s.IndexOf('"', colorStart + " color=".Length + 1); - } - - s = s.Substring(colorStart, end - colorStart); - s = s.Replace(" color=", string.Empty); - s = s.Trim('\'').Trim('"').Trim('\''); - try - { - if (s.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase)) - { - var arr = s.Remove(0, 4).TrimEnd(')').Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - return Color.FromArgb(int.Parse(arr[0]), int.Parse(arr[1]), int.Parse(arr[2])); - } - return ColorTranslator.FromHtml(s); - } - catch - { - return defaultColor; - } - } - } - } - return defaultColor; - } - - public static string[] SplitForChangedCalc(string s, bool ignoreLineBreaks, bool ignoreFormatting, bool breakToLetters) - { - const string endChars = "!?.…:;,#%$£"; - var list = new List(); - - if (ignoreFormatting) - { - s = HtmlUtil.RemoveHtmlTags(s, true); - } - - if (breakToLetters) - { - foreach (char ch in s) - { - list.Add(ch.ToString()); - } - } - else - { - var word = new StringBuilder(); - int i = 0; - while (i < s.Length) - { - if (s.Substring(i).StartsWith(Environment.NewLine, StringComparison.Ordinal)) - { - if (word.Length > 0) - { - list.Add(word.ToString()); - } - - word.Clear(); - if (!ignoreLineBreaks) - { - list.Add(Environment.NewLine); - } - - i += Environment.NewLine.Length; - } - else if (s[i] == ' ') - { - if (word.Length > 0) - { - list.Add(word.ToString()); - } - - word.Clear(); - i++; - } - else if (endChars.Contains(s[i]) && (word.Length == 0 || endChars.Contains(word[0]))) - { - word.Append(s[i]); - i++; - } - else if (endChars.Contains(s[i])) - { - if (word.Length > 0) - { - list.Add(word.ToString()); - } - - word.Clear(); - word.Append(s[i]); - i++; - } - else - { - word.Append(s[i]); - i++; - } - } - if (word.Length > 0) - { - list.Add(word.ToString()); - } - } - return list.ToArray(); - } - - public static void GetTotalAndChangedWords(string s1, string s2, ref int total, ref int change, bool ignoreLineBreaks, bool ignoreFormatting, bool breakToLetters) - { - var parts1 = SplitForChangedCalc(s1, ignoreLineBreaks, ignoreFormatting, breakToLetters); - var parts2 = SplitForChangedCalc(s2, ignoreLineBreaks, ignoreFormatting, breakToLetters); - total += Math.Max(parts1.Length, parts2.Length); - change += GetChangesAdvanced(parts1, parts2); - } - - private static int GetChangesAdvanced(string[] parts1, string[] parts2) - { - int i1 = 0; - int i2 = 0; - int i = 0; - int c = 0; - var max = Math.Max(parts1.Length, parts2.Length); - while (i < max && i1 < parts1.Length && i2 < parts2.Length) - { - if (parts1[i1] == parts2[i2]) - { - i1++; - i2++; - } - else - { - int i1Next = FindNext(parts2[i2], parts1, i1); - int i2Next = FindNext(parts1[i1], parts2, i2); - if (i1Next < i2Next) - { - c += i1Next - i1; - i1 = i1Next + 1; - i2++; - } - else if (i2Next < i1Next) - { - c += i2Next - i2; - i1++; - i2 = i2Next + 1; - } - else - { - i1++; - i2++; - c++; - } - } - i++; - } - if (i1 == parts1.Length && i2 == parts2.Length) - { - return c; - } - - return c + Math.Abs(parts1.Length - parts2.Length); - } - - private static int FindNext(string s, string[] parts, int startIndex) - { - for (; startIndex < parts.Length; startIndex++) - { - if (s == parts[startIndex]) - { - return startIndex; - } - } - return int.MaxValue; - } - - public static string RemoveNonNumbers(string p) - { - if (string.IsNullOrEmpty(p)) - { - return p; - } - - var sb = new StringBuilder(); - foreach (var c in p) - { - if (char.IsDigit(c)) - { - sb.Append(c); - } - } - return sb.ToString(); - } - - private static readonly Regex RemoveSpaceBetweenNumbersRegex = new Regex(@"(?<=\b\d+) \d(?!/\d)", RegexOptions.Compiled); - - public static string RemoveSpaceBetweenNumbers(string text) - { - if (!string.IsNullOrEmpty(text)) - { - var match = RemoveSpaceBetweenNumbersRegex.Match(text); - while (match.Success) - { - text = text.Remove(match.Index, 1); - match = RemoveSpaceBetweenNumbersRegex.Match(text, match.Index); - } - } - return text; - } - - /// - /// Remove unneeded spaces - /// - /// text string to remove unneeded spaces from - /// two letter language id string - /// text with unneeded spaces removed - public static string RemoveUnneededSpaces(string input, string language) - { - const char zeroWidthSpace = '\u200B'; - const char zeroWidthNoBreakSpace = '\uFEFF'; - const char noBreakSpace = '\u00A0'; - const char operatingSystemCommand = '\u009D'; - - var text = input.Trim(); - int len = text.Length; - int count = 0; - char[] textChars = new char[len]; - for (int i = 0; i < len; i++) - { - char ch = text[i]; - switch (ch) - { - // Ignore: \u200B, \uFEFF and \u009D. - case zeroWidthSpace: - case zeroWidthNoBreakSpace: - case operatingSystemCommand: - break; - // Replace: \t or \u00A0 with white-space. - case '\t': - case noBreakSpace: - textChars[count++] = ' '; - break; - default: - textChars[count++] = ch; - break; - } - } - // Construct new string from textChars. - text = new string(textChars, 0, count); - text = text.FixExtraSpaces(); - - if (text.EndsWith(' ')) - { - text = text.Substring(0, text.Length - 1); - } - - const string ellipses = "..."; - text = text.Replace(". . ..", ellipses); - text = text.Replace(". ...", ellipses); - text = text.Replace(". .. .", ellipses); - text = text.Replace(". . .", ellipses); - text = text.Replace(". ..", ellipses); - text = text.Replace(".. .", ellipses); - - // Fix recursive: ... - while (text.Contains("....")) - { - text = text.Replace("....", ellipses); - } - - text = text.Replace(" ..." + Environment.NewLine, "..." + Environment.NewLine); - text = text.Replace(Environment.NewLine + "... ", Environment.NewLine + "..."); - text = text.Replace(Environment.NewLine + "... ", Environment.NewLine + "..."); - text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); - text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); - text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); - - if (text.StartsWith("... ", StringComparison.Ordinal)) - { - text = text.Remove(3, 1); - } - - while (text.EndsWith(" ...", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 4, 1); - } - - while (text.EndsWith(" ...", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 8, 1); - } - - while (text.EndsWith(" .", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 6, 1); - } - - while (text.EndsWith(" !", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 6, 1); - } - - while (text.EndsWith(" ?", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 6, 1); - } - - while (text.Contains(" ." + Environment.NewLine)) - { - text = text.Replace(" ." + Environment.NewLine, "." + Environment.NewLine); - } - - while (text.Contains(" !" + Environment.NewLine)) - { - text = text.Replace(" !" + Environment.NewLine, "!" + Environment.NewLine); - } - - while (text.Contains(" ?" + Environment.NewLine)) - { - text = text.Replace(" ?" + Environment.NewLine, "?" + Environment.NewLine); - } - - if (text.StartsWith("- ... ", StringComparison.Ordinal)) - { - text = text.Remove(5, 1); - } - - if (text.StartsWith("... ", StringComparison.Ordinal)) - { - text = text.Remove(6, 1); - } - - if (language != "fr") // special rules for French - { - text = text.Replace("... ?", "...?"); - text = text.Replace("... !", "...!"); - - text = text.Replace(" :", ":"); - text = text.Replace(" :", ":"); - } - - if (!text.Contains("- ...")) - { - text = text.Replace(" ... ", "... "); - } - - while (text.Contains(" ,")) - { - text = text.Replace(" ,", ","); - } - - while (text.Contains(" 's ")) - { - text = text.Replace(" 's ", "'s "); - } - - while (text.Contains(" 's" + Environment.NewLine)) - { - text = text.Replace(" 's" + Environment.NewLine, "'s" + Environment.NewLine); - } - - if (text.EndsWith(" .", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 2, 1); - } - - if (text.EndsWith(" \"", StringComparison.Ordinal)) - { - text = text.Remove(text.Length - 2, 1); - } - - if (text.Contains(" \"" + Environment.NewLine)) - { - text = text.Replace(" \"" + Environment.NewLine, "\"" + Environment.NewLine); - } - - if (text.Contains(" ." + Environment.NewLine)) - { - text = text.Replace(" ." + Environment.NewLine, "." + Environment.NewLine); - } - - if (language == "en" && text.ContainsNumber()) - { - // 1 st => 1st - text = new Regex(@"(1) (st)\b").Replace(text, "$1$2"); - - // 2 nd => 2nd - text = new Regex(@"(2) (nd)\b").Replace(text, "$1$2"); - - // 3 rd => 2rd - text = new Regex(@"(3) (rd)\b").Replace(text, "$1$2"); - - // 4 th => 4th - text = new Regex(@"([0456789]) (th)\b").Replace(text, "$1$2"); - } - - if (language != "fr") // special rules for French - { - if (text.Contains(" !")) - { - text = text.Replace(" !", "!"); - } - - if (text.Contains(" ?")) - { - text = text.Replace(" ?", "?"); - } - } - - - if (language == "ar") // special rules for Arabic - { - while (text.Contains(" ؟")) - { - text = text.Replace(" ؟", "؟"); - } - - while (text.Contains(" \u060C")) // Arabic comma - { - text = text.Replace(" \u060C", "\u060C"); - } - - text = new Regex(@"\bو ").Replace(text, "و"); - - while (text.Contains("ـ ")) - { - text = text.Replace("ـ ", "ـ"); - } - } - - if (text.Contains(" . ")) - { - var regex = new Regex(@"[a-z] \. [A-Z]"); - var match = regex.Match(text); - while (match.Success) - { - text = text.Remove(match.Index + 1, 1); - match = regex.Match(text); - } - } - - while (text.Contains("¿ ")) - { - text = text.Replace("¿ ", "¿"); - } - - while (text.Contains("¡ ")) - { - text = text.Replace("¡ ", "¡"); - } - - // Italic - if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) - { - text = RemoveSpaceBeforeAfterTag(text, ""); - } - - // Bold - if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) - { - text = RemoveSpaceBeforeAfterTag(text, ""); - } - - // Underline - if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) - { - text = RemoveSpaceBeforeAfterTag(text, ""); - } - - // Font - if (text.Contains("', idx + 6); - if (endIdx > idx && endIdx < text.Length - 8) - { - var color = text.Substring(idx, (endIdx - idx) + 1).ToLowerInvariant(); - text = RemoveSpaceBeforeAfterTag(text, color); - } - } - text = text.Trim(); - text = text.Replace(Environment.NewLine + " ", Environment.NewLine); - - if (text.Contains("-") && text.Length > 2 && !text.StartsWith("--", StringComparison.Ordinal)) - { - var dialogHelper = new DialogSplitMerge { DialogStyle = Configuration.Settings.General.DialogStyle, ContinuationStyle = Configuration.Settings.General.ContinuationStyle }; - text = dialogHelper.RemoveSpaces(text); - - int idx = text.IndexOf("- ", 2, StringComparison.Ordinal); - if (text.StartsWith("", StringComparison.OrdinalIgnoreCase)) - { - idx = text.IndexOf("- ", 5, StringComparison.Ordinal); - } - - while (idx > 0) - { - if (idx > 0 && idx < text.Length - 2) - { - string before = string.Empty; - int k = idx - 1; - while (k >= 0 && char.IsLetterOrDigit(text[k])) - { - before = text[k--] + before; - } - string after = string.Empty; - k = idx + 2; - while (k < text.Length && char.IsLetter(text[k])) - { - after = after + text[k++]; - } - if (after.Length > 0 && after.Equals(before, StringComparison.OrdinalIgnoreCase)) - { - text = text.Remove(idx + 1, 1); - } - else if (before.Length > 0) - { - if ((language != "en" || - !after.Equals("and", StringComparison.OrdinalIgnoreCase) && - !after.Equals("or", StringComparison.OrdinalIgnoreCase)) && - (language != "es" || - !after.Equals("y", StringComparison.OrdinalIgnoreCase) && - !after.Equals("o", StringComparison.OrdinalIgnoreCase)) && - (language != "da" || - !after.Equals("og", StringComparison.OrdinalIgnoreCase) && - !after.Equals("eller", StringComparison.OrdinalIgnoreCase)) && - (language != "de" || - !after.Equals("und", StringComparison.OrdinalIgnoreCase) && - !after.Equals("oder", StringComparison.OrdinalIgnoreCase)) && - (language != "fi" || - !after.Equals("ja", StringComparison.OrdinalIgnoreCase) && - !after.Equals("tai", StringComparison.OrdinalIgnoreCase)) && - (language != "fr" || - !after.Equals("et", StringComparison.OrdinalIgnoreCase) && - !after.Equals("ou", StringComparison.OrdinalIgnoreCase)) && - (language != "it" || - !after.Equals("e", StringComparison.OrdinalIgnoreCase) && - !after.Equals("o", StringComparison.OrdinalIgnoreCase)) && - (language != "nl" || - !after.Equals("en", StringComparison.OrdinalIgnoreCase) && - !after.Equals("of", StringComparison.OrdinalIgnoreCase)) && - (language != "pl" || - !after.Equals("i", StringComparison.OrdinalIgnoreCase) && - !after.Equals("czy", StringComparison.OrdinalIgnoreCase)) && - (language != "pt" || - !after.Equals("e", StringComparison.OrdinalIgnoreCase) && - !after.Equals("ou", StringComparison.OrdinalIgnoreCase))) - { - text = text.Remove(idx + 1, 1); - } - } - } - if (idx + 1 < text.Length && idx != -1) - { - idx = text.IndexOf("- ", idx + 1, StringComparison.Ordinal); - } - else - { - break; - } - } - } - - if (CountTagInText(text, '"') == 2 && text.Contains(" \" ")) - { - int idx = text.IndexOf(" \" ", StringComparison.Ordinal); - int idxp = text.IndexOf('"'); - - //"Foo " bar. - if ((idxp >= 0 && idxp < idx) && char.IsLetterOrDigit(text[idx - 1]) && !" \r\n".Contains(text[idxp + 1])) - { - text = text.Remove(idx, 1); - } - - //" Foo " bar. - idx = text.IndexOf(" \" ", StringComparison.Ordinal); - idxp = text.IndexOf('"'); - if (idxp >= 0 && idx > idxp) - { - if (text[idxp + 1] == ' ' && char.IsLetterOrDigit(text[idxp + 2])) - { - text = text.Remove(idxp + 1, 1); - idx--; - } - text = text.Remove(idx, 1); - } - } - - // Fix spaces after quotes - // e.g: Foobar. " Foobar" => Foobar. "Foobar" - string preText = string.Empty; - if (text.LineStartsWithHtmlTag(true, true)) - { - int endIdx = text.IndexOf('>') + 1; - preText = text.Substring(0, endIdx); - text = text.Substring(endIdx); - } - if (text.StartsWith('"')) - { - text = '"' + text.Substring(1).TrimStart(); - } - text = preText + text; - - // Fix spaces before quotes at line ending - string postText = string.Empty; - if (text.LineEndsWithHtmlTag(true, true)) - { - int endIdx = text.LastIndexOf('<'); - postText = text.Substring(endIdx); - text = text.Substring(0, endIdx); - } - if (text.EndsWith(" \"")) - { - text = text.Remove(text.Length - 2, 1); - } - text = text + postText; - - text = text.Replace(". \" ", ". \""); - text = text.Replace("? \" ", "? \""); - text = text.Replace("! \" ", "! \""); - text = text.Replace(") \" ", ") \""); - text = text.Replace("> \" ", "> \""); - - while (text.Contains(" . ")) - { - text = text.Replace(" . ", ". "); - } - - var numberSeparatorNumberMatch = NumberSeparatorNumberRegEx.Match(text); - while (numberSeparatorNumberMatch.Success) - { - var spaceIdx = text.IndexOf(' ', numberSeparatorNumberMatch.Index); - text = text.Remove(spaceIdx, 1); - numberSeparatorNumberMatch = NumberSeparatorNumberRegEx.Match(text); - } - - return text; - } - - public static string RemoveSpaceBeforeAfterTag(string input, string openTag) - { - var text = HtmlUtil.FixUpperTags(input); - var closeTag = string.Empty; - switch (openTag) - { - case "": - closeTag = ""; - break; - case "": - closeTag = ""; - break; - case "": - closeTag = ""; - break; - } - - if (closeTag.Length == 0 && openTag.Contains("
Foobar - if (text.StartsWith(open1, StringComparison.Ordinal)) - { - text = openTag + text.Substring(open1.Length); - } - - // e.g.: \r\n - if (text.StartsWith(open3, StringComparison.Ordinal)) - { - text = text.Remove(openTag.Length, Environment.NewLine.Length); - } - - // e.g.: \r\n - if (text.EndsWith(close5, StringComparison.Ordinal)) - { - text = text.Remove(text.Length - openTag.Length - Environment.NewLine.Length - 1, Environment.NewLine.Length); - } - - if (text.Contains(open2, StringComparison.Ordinal)) - { - text = text.Replace(open2, Environment.NewLine + openTag); - } - - // Hi bad man! -> Hi bad man! - text = text.Replace(" " + openTag + " ", " " + openTag); - text = text.Replace(Environment.NewLine + openTag + " ", Environment.NewLine + openTag); - - // Hi bad man! -> Hi bad man! - text = text.Replace(" " + closeTag + " ", closeTag + " "); - text = text.Replace(" " + closeTag + Environment.NewLine, closeTag + Environment.NewLine); - - text = text.Trim(); - if (text.StartsWith(open1, StringComparison.Ordinal)) - { - text = openTag + text.Substring(open1.Length); - } - - return text; - } - - /// - /// Creates a task that will complete after a time delay. - /// - /// The number of milliseconds to wait before completing the returned task. - /// A task that represents the time delay. - public static Task TaskDelay(int millisecondsDelay) - { - var tcs = new TaskCompletionSource(); - var t = new System.Threading.Timer(_ => tcs.SetResult(null)); - t.Change(millisecondsDelay, -1); - return tcs.Task; - } - - public static SubtitleFormat LoadMatroskaTextSubtitle(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska, List sub, Subtitle subtitle) - { - if (subtitle == null) - { - throw new ArgumentNullException(nameof(subtitle)); - } - - subtitle.Paragraphs.Clear(); - - var isSsa = false; - SubtitleFormat format = new SubRip(); - var codecPrivate = matroskaSubtitleInfo.GetCodecPrivate(); - if (codecPrivate.Contains("[script info]", StringComparison.OrdinalIgnoreCase)) - { - if (codecPrivate.Contains("[V4 Styles]", StringComparison.OrdinalIgnoreCase)) - { - format = new SubStationAlpha(); - } - else - { - format = new AdvancedSubStationAlpha(); - } - - isSsa = true; - } - - if (isSsa) - { - foreach (var p in LoadMatroskaSSA(matroskaSubtitleInfo, matroska.Path, format, sub).Paragraphs) - { - subtitle.Paragraphs.Add(p); - } - - if (!string.IsNullOrEmpty(codecPrivate)) - { - bool eventsStarted = false; - bool fontsStarted = false; - bool graphicsStarted = false; - var header = new StringBuilder(); - foreach (string line in codecPrivate.Replace(Environment.NewLine, "\n").Split('\n')) - { - if (!eventsStarted && !fontsStarted && !graphicsStarted) - { - header.AppendLine(line); - } - - if (line.TrimStart().StartsWith("dialog:", StringComparison.OrdinalIgnoreCase)) - { - eventsStarted = true; - fontsStarted = false; - graphicsStarted = false; - } - else if (line.Trim().Equals("[events]", StringComparison.OrdinalIgnoreCase)) - { - eventsStarted = true; - fontsStarted = false; - graphicsStarted = false; - } - else if (line.Trim().Equals("[fonts]", StringComparison.OrdinalIgnoreCase)) - { - eventsStarted = false; - fontsStarted = true; - graphicsStarted = false; - } - else if (line.Trim().Equals("[graphics]", StringComparison.OrdinalIgnoreCase)) - { - eventsStarted = false; - fontsStarted = false; - graphicsStarted = true; - } - } - subtitle.Header = header.ToString().TrimEnd(); - if (!subtitle.Header.Contains("[events]", StringComparison.OrdinalIgnoreCase)) - { - subtitle.Header += Environment.NewLine + Environment.NewLine + "[Events]" + Environment.NewLine; - } - } - } - else - { - foreach (var p in sub) - { - subtitle.Paragraphs.Add(new Paragraph(p.GetText(matroskaSubtitleInfo), p.Start, p.End)); - } - } - subtitle.Renumber(); - return format; - } - - public static Subtitle LoadMatroskaSSA(MatroskaTrackInfo matroskaSubtitleInfo, string fileName, SubtitleFormat format, List sub) - { - var codecPrivate = matroskaSubtitleInfo.GetCodecPrivate(); - var subtitle = new Subtitle { Header = codecPrivate }; - var lines = subtitle.Header.Trim().SplitToLines(); - var footer = new StringBuilder(); - var comments = new Subtitle(); - if (!string.IsNullOrEmpty(codecPrivate)) - { - bool footerOn = false; - char[] splitChars = { ':', '.' }; - foreach (string line in lines) - { - if (footerOn) - { - footer.AppendLine(line); - } - else if (line.Trim() == "[Events]") - { - } - else if (line.Trim() == "[Fonts]" || line.Trim() == "[Graphics]") - { - footerOn = true; - footer.AppendLine(); - footer.AppendLine(); - footer.AppendLine(line); - } - else if (line.StartsWith("Comment:", StringComparison.Ordinal)) - { - var arr = line.Split(','); - if (arr.Length > 3) - { - arr = arr[1].Split(splitChars); - if (arr.Length == 4) - { - if (int.TryParse(arr[0], out var hour) && int.TryParse(arr[1], out var min) && - int.TryParse(arr[2], out var sec) && int.TryParse(arr[3], out var ms)) - { - comments.Paragraphs.Add(new Paragraph(new TimeCode(hour, min, sec, ms * 10), new TimeCode(), line)); - } - } - } - } - } - } - const string headerFormat = "Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text"; - if (!subtitle.Header.Contains("[Events]")) - { - subtitle.Header = subtitle.Header.Trim() + Environment.NewLine + - Environment.NewLine + - "[Events]" + Environment.NewLine + - headerFormat + Environment.NewLine; - } - else if (subtitle.Header.LastIndexOf("Format:", StringComparison.Ordinal) < subtitle.Header.IndexOf("[Events]", StringComparison.Ordinal)) - { - subtitle.Header = subtitle.Header.Remove(subtitle.Header.IndexOf("[Events]", StringComparison.Ordinal)); - subtitle.Header = subtitle.Header.Trim() + Environment.NewLine + - Environment.NewLine + - "[Events]" + Environment.NewLine + - headerFormat + Environment.NewLine; - } - else - { - subtitle.Header = subtitle.Header.Trim() + Environment.NewLine; - } - - lines = new List(); - foreach (string l in subtitle.Header.Trim().SplitToLines()) - { - lines.Add(l); - } - - const string timeCodeFormat = "{0}:{1:00}:{2:00}.{3:00}"; // h:mm:ss.cc - foreach (var mp in sub) - { - var p = new Paragraph(string.Empty, mp.Start, mp.End); - string start = string.Format(timeCodeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, p.StartTime.Milliseconds / 10); - string end = string.Format(timeCodeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, p.EndTime.Milliseconds / 10); - - //MKS contains this: ReadOrder, Layer, Style, Name, MarginL, MarginR, MarginV, Effect, Text - - for (int commentIndex = 0; commentIndex < comments.Paragraphs.Count; commentIndex++) - { - var cp = comments.Paragraphs[commentIndex]; - if (cp.StartTime.TotalMilliseconds <= p.StartTime.TotalMilliseconds) - { - lines.Add(cp.Text); - } - } - for (int commentIndex = comments.Paragraphs.Count - 1; commentIndex >= 0; commentIndex--) - { - var cp = comments.Paragraphs[commentIndex]; - if (cp.StartTime.TotalMilliseconds <= p.StartTime.TotalMilliseconds) - { - comments.Paragraphs.RemoveAt(commentIndex); - } - } - - string text = mp.GetText(matroskaSubtitleInfo).Replace(Environment.NewLine, "\\N"); - int idx = text.IndexOf(',') + 1; - if (idx > 0 && idx < text.Length) - { - text = text.Remove(0, idx); // remove ReadOrder - idx = text.IndexOf(','); - text = text.Insert(idx, "," + start + "," + end); - lines.Add("Dialogue: " + text); - } - } - for (int commentIndex = 0; commentIndex < comments.Paragraphs.Count; commentIndex++) - { - var cp = comments.Paragraphs[commentIndex]; - lines.Add(cp.Text); - } - - foreach (string l in footer.ToString().SplitToLines()) - { - lines.Add(l); - } - - format.LoadSubtitle(subtitle, lines, fileName); - return subtitle; - } - - public static int GetNumberOfLines(string text) - { - if (string.IsNullOrEmpty(text)) - { - return 0; - } - - int lines = 1; - int idx = text.IndexOf('\n'); - while (idx >= 0) - { - lines++; - idx = text.IndexOf('\n', idx + 1); - } - return lines; - } - - public static bool QualifiesForMerge(Paragraph p, Paragraph next, double maximumMillisecondsBetweenLines, int maximumTotalLength, bool onlyContinuationLines) - { - if (p?.Text != null && next?.Text != null) - { - var s = HtmlUtil.RemoveHtmlTags(p.Text.Trim(), true); - var nextText = HtmlUtil.RemoveHtmlTags(next.Text.Trim(), true); - if (s.Length + nextText.Length < maximumTotalLength && next.StartTime.TotalMilliseconds - p.EndTime.TotalMilliseconds < maximumMillisecondsBetweenLines) - { - if (string.IsNullOrEmpty(s)) - { - return true; - } - - bool isLineContinuation = s.EndsWith(',') || - s.EndsWith('-') || - s.EndsWith("...", StringComparison.Ordinal) || - s.EndsWith("…", StringComparison.Ordinal) || // Unicode Character 'HORIZONTAL ELLIPSIS' (U+2026) - AllLettersAndNumbers.Contains(s.Substring(s.Length - 1)); - - if (!onlyContinuationLines) - { - return true; - } - - return isLineContinuation; - } - } - return false; - } - - public static string GetPathAndFileNameWithoutExtension(string fileName) - { - if (string.IsNullOrEmpty(fileName)) - { - return fileName; - } - - var indexOfPeriod = fileName.LastIndexOf('.'); - if (indexOfPeriod > 0 && fileName.LastIndexOf(Path.DirectorySeparatorChar) < indexOfPeriod) - { - return fileName.Substring(0, indexOfPeriod); - } - - return fileName; - } - - public static string GetFileNameWithoutExtension(string fileName) - { - if (string.IsNullOrEmpty(fileName)) - { - return fileName; - } - - var indexOfDirectorySeparatorChar = fileName.LastIndexOf(Path.DirectorySeparatorChar); - if (indexOfDirectorySeparatorChar >= 0) - { - fileName = fileName.Remove(0, indexOfDirectorySeparatorChar).TrimStart(Path.DirectorySeparatorChar); - } - - var indexOfPeriod = fileName.LastIndexOf('.'); - if (indexOfPeriod > 0) - { - return fileName.Substring(0, indexOfPeriod); - } - - return fileName; - } - - - public static string ReSplit(string text, int selectionStart) - { - if (string.IsNullOrWhiteSpace(text) || !text.Contains(" ") || selectionStart == 0) - { - return text; - } - - var sb = new StringBuilder(); - var isFixed = false; - for (int i = 0; i < text.Length; i++) - { - var ch = text[i]; - - if (!isFixed && ch == ' ' && (i > 0 && i + 1 == selectionStart || i >= selectionStart && ch == ' ')) - { - sb.Append(Environment.NewLine); - isFixed = true; - } - - sb.Append(ch == '\r' || ch == '\n' ? ' ' : ch); - } - - if (!isFixed) - { - return text; - } - return sb.ToString().Replace(" ", " ").Replace(Environment.NewLine + " ", Environment.NewLine); - } - - public static string FixRtlViaUnicodeChars(string input) - { - string rtl = "\u202B"; - var text = input.Replace(rtl, string.Empty); - text = rtl + text.Replace(Environment.NewLine, Environment.NewLine + rtl); - return text; - } - - public static string RemoveUnicodeControlChars(string input) - { - input = input.Replace("\u200E", string.Empty); - input = input.Replace("\u200F", string.Empty); - input = input.Replace("\u202A", string.Empty); - input = input.Replace("\u202B", string.Empty); - input = input.Replace("\u202C", string.Empty); - input = input.Replace("\u202D", string.Empty); - input = input.Replace("\u202E", string.Empty); - input = input.Replace("\u00C2", " "); // no break space - input = input.Replace("\u00A0", " "); // no break space - return input; - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Security.Authentication; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml; +using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; +using Nikse.SubtitleEdit.Core.SubtitleFormats; + +namespace Nikse.SubtitleEdit.Core.Common +{ + public static class Utilities + { + public const string WinXP2KUnicodeFontName = "Times New Roman"; + + /// + /// Cached environment new line characters for faster lookup. + /// + public static readonly char[] NewLineChars = { '\r', '\n' }; + + private static readonly Regex NumberSeparatorNumberRegEx = new Regex(@"\b\d+[\.:;] \d+\b", RegexOptions.Compiled); + + public static string[] VideoFileExtensions { get; } = { ".avi", ".mkv", ".wmv", ".mpg", ".mpeg", ".divx", ".mp4", ".asf", ".flv", ".mov", ".m4v", ".vob", ".ogv", ".webm", ".ts", ".m2ts", ".mts", ".avs", ".mxf" }; + public static string[] AudioFileExtensions { get; } = { ".mp3", ".wav", ".wma", ".ogg", ".mpa", ".m4a", ".ape", ".aiff", ".flac", ".aac", ".ac3", ".eac3", ".mka" }; + + public static string GetVideoFileFilter(bool includeAudioFiles) + { + var sb = new StringBuilder(); + sb.Append(Configuration.Settings.Language.General.VideoFiles + "|*"); + sb.Append(string.Join(";*", VideoFileExtensions)); + + if (includeAudioFiles) + { + sb.Append("|" + Configuration.Settings.Language.General.AudioFiles + "|*"); + sb.Append(string.Join(";*", AudioFileExtensions)); + } + + sb.Append("|" + Configuration.Settings.Language.General.AllFiles + "|*.*"); + return sb.ToString(); + } + + public static bool IsInteger(string s) + { + return int.TryParse(s, out _); + } + + public static bool IsHex(string s) + { + foreach (var ch in s) + { + if (!CharUtils.IsHexadecimal(ch)) + { + return false; + } + } + + return true; + } + + public static SubtitleFormat GetSubtitleFormatByFriendlyName(string friendlyName) + { + foreach (var format in SubtitleFormat.AllSubtitleFormats) + { + if (format.FriendlyName == friendlyName || format.Name == friendlyName) + { + return format; + } + } + return null; + } + + public static string FormatBytesToDisplayFileSize(long fileSize) + { + if (fileSize <= 1024) + { + return $"{fileSize} bytes"; + } + + if (fileSize <= 1024 * 1024) + { + return $"{fileSize / 1024} kb"; + } + + if (fileSize <= 1024 * 1024 * 1024) + { + return $"{(float)fileSize / (1024 * 1024):0.0} mb"; + } + + return $"{(float)fileSize / (1024 * 1024 * 1024):0.0} gb"; + } + + public static long DisplayFileSizeToBytes(string displayFileSize) + { + if (displayFileSize.Contains("bytes")) + { + if (double.TryParse(displayFileSize.Replace("bytes", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) + { + return (int)Math.Round(n); + } + } + + if (displayFileSize.Contains("kb")) + { + if (double.TryParse(displayFileSize.Replace("kb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) + { + return (int)Math.Round(n * 1024); + } + } + + if (displayFileSize.Contains("mb")) + { + if (double.TryParse(displayFileSize.Replace("mb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) + { + return (int)Math.Round(n * 1024 * 1024); + } + } + + if (displayFileSize.Contains("gb")) + { + if (double.TryParse(displayFileSize.Replace("gb", string.Empty).Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out var n)) + { + return (int)Math.Round(n * 1024 * 1024 * 1024); + } + } + + return 0; + } + + /// + /// Downloads the requested resource as a using the configured . + /// + /// A containing the URI to download. + /// Encoding for source text + /// A containing the requested resource. + public static string DownloadString(string address, Encoding encoding = null) + { + using (var wc = new WebClient()) + { + wc.Proxy = GetProxy(); + if (encoding != null) + { + wc.Encoding = encoding; + } + + return wc.DownloadString(address).Trim(); + } + } + + public static void SetSecurityProtocol() + { + // Github requires TLS 1.2 + try + { + var tls12Protocol = (SslProtocols)0x00000C00; //TODO: Remove this when it's standard in .net framework - 4.6+ + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | (SecurityProtocolType)tls12Protocol; + } + catch (Exception) + { + // This will crash on .net framework versions < 4.5! + // .NET 4.5 required for TLS 1.2 - TLS 1.2 is not default so use this: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 + // NET 4.6 and above. You don’t need to do any additional work to support TLS 1.2, it’s supported by default. + } + } + + public static WebProxy GetProxy() + { + if (!string.IsNullOrEmpty(Configuration.Settings.Proxy.ProxyAddress)) + { + var proxy = new WebProxy(Configuration.Settings.Proxy.ProxyAddress); + + if (!string.IsNullOrEmpty(Configuration.Settings.Proxy.UserName)) + { + if (string.IsNullOrEmpty(Configuration.Settings.Proxy.Domain)) + { + proxy.Credentials = new NetworkCredential(Configuration.Settings.Proxy.UserName, Configuration.Settings.Proxy.DecodePassword()); + } + else + { + proxy.Credentials = new NetworkCredential(Configuration.Settings.Proxy.UserName, Configuration.Settings.Proxy.DecodePassword(), Configuration.Settings.Proxy.Domain); + } + } + else + { + proxy.UseDefaultCredentials = true; + } + + return proxy; + } + return null; + } + + public static bool IsBetweenNumbers(string s, int position) + { + if (string.IsNullOrEmpty(s) || position < 1 || position + 2 > s.Length) + { + return false; + } + + return char.IsDigit(s[position - 1]) && char.IsDigit(s[position + 1]); + } + + public static string AutoBreakLine(string text, string language) + { + return AutoBreakLine(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language); + } + + public static string AutoBreakLine(string text) + { + return AutoBreakLine(text, string.Empty); // no language + } + + internal static bool CanBreak(string s, int index, string language) + { + char nextChar; + if (index >= 0 && index < s.Length) + { + nextChar = s[index]; + } + else + { + return false; + } + + if (!"\r\n\t ".Contains(nextChar)) + { + return false; + } + + // Some words we don't like breaking after + string s2 = s.Substring(0, index); + if (Configuration.Settings.Tools.UseNoLineBreakAfter) + { + foreach (NoBreakAfterItem ending in NoBreakAfterList(language)) + { + if (ending.IsMatch(s2)) + { + return false; + } + } + } + else + { + if (s2.EndsWith(" mr.", StringComparison.OrdinalIgnoreCase) || + s2.EndsWith(" dr.", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } + + if (s2.EndsWith("? -", StringComparison.Ordinal) || s2.EndsWith("! -", StringComparison.Ordinal) || s2.EndsWith(". -", StringComparison.Ordinal)) + { + return false; + } + + return true; + } + + public static void ResetNoBreakAfterList() + { + _lastNoBreakAfterListLanguage = null; + } + + private static string _lastNoBreakAfterListLanguage; + private static List _lastNoBreakAfterList = new List(); + internal static IEnumerable NoBreakAfterList(string languageName) + { + if (string.IsNullOrEmpty(languageName)) + { + return new List(); + } + + if (languageName == _lastNoBreakAfterListLanguage) + { + return _lastNoBreakAfterList; + } + + _lastNoBreakAfterList = new List(); + + //load words via xml + string noBreakAfterFileName = DictionaryFolder + languageName + "_NoBreakAfterList.xml"; + var doc = new XmlDocument(); + if (File.Exists(noBreakAfterFileName)) + { + doc.Load(noBreakAfterFileName); + foreach (XmlNode node in doc.DocumentElement.SelectNodes("Item")) + { + if (!string.IsNullOrEmpty(node.InnerText)) + { + if (node.Attributes?["RegEx"] != null && node.Attributes["RegEx"].InnerText.Equals("true", StringComparison.OrdinalIgnoreCase)) + { + var r = new Regex(node.InnerText, RegexOptions.Compiled); + _lastNoBreakAfterList.Add(new NoBreakAfterItem(r, node.InnerText)); + } + else + { + _lastNoBreakAfterList.Add(new NoBreakAfterItem(node.InnerText.TrimStart())); + } + } + } + } + _lastNoBreakAfterListLanguage = languageName; + + return _lastNoBreakAfterList; + } + + public static string AutoBreakLineMoreThanTwoLines(string text, int maximumLength, int mergeLinesShorterThan, string language) + { + if (text == null || text.Length < 3 || !(text.Contains(" ") || text.Contains("\n"))) + { + return text; + } + + string s = AutoBreakLinePrivate(text, maximumLength, mergeLinesShorterThan, language, Configuration.Settings.Tools.AutoBreakLineEndingEarly); + + var arr = HtmlUtil.RemoveHtmlTags(s, true).SplitToLines(); + if (arr.Count == 1 && arr[0].Length <= maximumLength || + arr.Count == 2 && arr[0].Length <= maximumLength && arr[1].Length <= maximumLength) + { + return s; + } + + s = RemoveLineBreaks(text); + var htmlTags = new Dictionary(); + var sb = new StringBuilder(s.Length); + int six = 0; + while (six < s.Length) + { + var letter = s[six]; + var tagFound = letter == '<' && + (s.Substring(six).StartsWith("', six + 1); + } + + if (tagFound && endIndex > 0) + { + string tag = s.Substring(six, endIndex - six + 1); + s = s.Remove(six, tag.Length); + if (htmlTags.ContainsKey(six)) + { + htmlTags[six] = htmlTags[six] + tag; + } + else + { + htmlTags.Add(six, tag); + } + } + else + { + sb.Append(letter); + six++; + } + } + s = sb.ToString(); + + // check 3 lines + var pti = new PlainTextImporter(false, false, 1, ".?!", maximumLength, language); + var three = pti.SplitToThree(sb.ToString()); + if (three.Count == 3 && + three[0].Length < maximumLength && + three[1].Length < maximumLength && + three[2].Length < maximumLength) + { + return ReInsertHtmlTagsAndCleanUp(string.Join(" " + Environment.NewLine, three), htmlTags); + } + + // check 4 lines + var four = pti.SplitToFour(sb.ToString()); + if (four.Count == 4 && + four[0].Length < maximumLength && + four[1].Length < maximumLength && + four[2].Length < maximumLength && + four[3].Length < maximumLength) + { + return ReInsertHtmlTagsAndCleanUp(string.Join(" " + Environment.NewLine, four), htmlTags); + } + + var words = s.Split(' '); + for (int numberOfLines = 3; numberOfLines < 9999; numberOfLines++) + { + int average = s.Length / numberOfLines + 1; + for (int len = average; len < maximumLength; len++) + { + List list = SplitToX(words, numberOfLines, len); + bool allOk = true; + foreach (var lineLength in list) + { + if (lineLength > maximumLength) + { + allOk = false; + } + } + if (allOk) + { + int index = 0; + foreach (var item in list) + { + index += item; + htmlTags.Add(index, Environment.NewLine); + } + return ReInsertHtmlTagsAndCleanUp(s, htmlTags); + } + } + } + + return text; + } + + private static string ReInsertHtmlTagsAndCleanUp(string input, Dictionary htmlTags) + { + var s = ReInsertHtmlTags(input, htmlTags); + s = s.Replace(" " + Environment.NewLine, Environment.NewLine); + s = s.Replace(Environment.NewLine + " ", Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + return s.TrimEnd(); + } + + private static List SplitToX(string[] words, int count, int average) + { + var list = new List(); + int currentIdx = 0; + int currentCount = 0; + foreach (string word in words) + { + if (currentCount + word.Length + 3 > average && currentIdx < count) + { + list.Add(currentCount); + currentIdx++; + currentCount = 0; + } + currentCount += word.Length + 1; + } + if (currentIdx < count) + { + list.Add(currentCount); + } + else + { + list[list.Count - 1] += currentCount; + } + + return list; + } + + public static string AutoBreakLine(string text, int maximumLength, int mergeLinesShorterThan, string language) + { + if (Configuration.Settings.General.MaxNumberOfLines <= 2) + { + return AutoBreakLinePrivate(text, maximumLength, mergeLinesShorterThan, language, Configuration.Settings.Tools.AutoBreakLineEndingEarly); + } + + return AutoBreakLineMoreThanTwoLines(text, maximumLength, mergeLinesShorterThan, language); + } + + public static string AutoBreakLine(string text, string language, bool autoBreakLineEndingEarly) + { + if (Configuration.Settings.General.MaxNumberOfLines <= 2) + { + return AutoBreakLinePrivate(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language, autoBreakLineEndingEarly); + } + + return AutoBreakLineMoreThanTwoLines(text, Configuration.Settings.General.SubtitleLineMaximumLength, Configuration.Settings.General.MergeLinesShorterThan, language); + } + + public static string AutoBreakLinePrivate(string input, int maximumLength, int mergeLinesShorterThan, string language, bool autoBreakLineEndingEarly) + { + if (string.IsNullOrEmpty(input) || input.Length < 3) + { + return input; + } + + var text = input.Replace('\u00a0', ' '); // replace non-break-space (160 decimal) ascii char with normal space + if (!(text.Contains(' ') || text.Contains('\n'))) + { + return input; + } + + // do not auto break dialogs or music symbol + if (text.Contains(Environment.NewLine) && (text.Contains('-') || text.Contains('♪'))) + { + var noTagLines = HtmlUtil.RemoveHtmlTags(text, true).SplitToLines(); + if (noTagLines.Count == 2) + { + var arr0 = noTagLines[0].Trim().TrimEnd('"', '\'').TrimEnd(); + if (language == "ar") + { + if (arr0.EndsWith('-') && noTagLines[1].TrimStart().EndsWith('-') && arr0.Length > 1 && (".?!)]♪؟".Contains(arr0[0]) || arr0.StartsWith("--", StringComparison.Ordinal) || arr0.StartsWith('–'))) + { + if (Configuration.Settings.Tools.AutoBreakDashEarly) + { + return input; + } + } + } + else + { + if (arr0.StartsWith('-') && noTagLines[1].TrimStart().StartsWith('-') && arr0.Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) || arr0.EndsWith("--", StringComparison.Ordinal) || arr0.EndsWith('–') || arr0 == "- _" || arr0 == "-_")) + { + if (Configuration.Settings.Tools.AutoBreakDashEarly) + { + return input; + } + } + } + if (noTagLines[0].StartsWith('♪') && noTagLines[0].EndsWith('♪') || noTagLines[1].StartsWith('♪') && noTagLines[0].EndsWith('♪')) + { + return input; + } + if (noTagLines[0].StartsWith('[') && noTagLines[0].Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) && (noTagLines[1].StartsWith('-') || noTagLines[1].StartsWith('[')))) + { + return input; + } + if (noTagLines[0].StartsWith('-') && noTagLines[0].Length > 1 && (".?!)]♪؟".Contains(arr0[arr0.Length - 1]) && (noTagLines[1].StartsWith('-') || noTagLines[1].StartsWith('[')))) + { + if (Configuration.Settings.Tools.AutoBreakDashEarly) + { + return input; + } + } + } + + var dialogHelper = new DialogSplitMerge { DialogStyle = Configuration.Settings.General.DialogStyle, TwoLetterLanguageCode = language }; + if (Configuration.Settings.Tools.AutoBreakDashEarly && + dialogHelper.IsDialog(noTagLines) && noTagLines.Count <= Configuration.Settings.General.MaxNumberOfLines) + { + return input; + } + } + + string s = RemoveLineBreaks(text); + if (s.CountCharacters(false, Configuration.Settings.General.IgnoreArabicDiacritics) < mergeLinesShorterThan) + { + var lastIndexOfDash = s.LastIndexOf(" -", StringComparison.Ordinal); + if (Configuration.Settings.Tools.AutoBreakDashEarly && lastIndexOfDash > 4 && s.Substring(0, lastIndexOfDash).HasSentenceEnding(language)) + { + s = s.Remove(lastIndexOfDash, 1).Insert(lastIndexOfDash, Environment.NewLine); + } + + return s; + } + + var htmlTags = new Dictionary(); + var sb = new StringBuilder(); + int six = 0; + while (six < s.Length) + { + var letter = s[six]; + bool tagFound = false; + if (letter == '<') + { + string tagString = s.Substring(six); + tagFound = tagString.StartsWith(" 0) + { + tagString = tagString.Substring(0, endIndexAssTag); + if (htmlTags.ContainsKey(six)) + { + htmlTags[six] = htmlTags[six] + tagString; + } + else + { + htmlTags.Add(six, tagString); + } + + s = s.Remove(six, endIndexAssTag); + continue; + } + } + + int endIndex = -1; + if (tagFound) + { + endIndex = s.IndexOf('>', six + 1); + } + + if (tagFound && endIndex > 0) + { + string tag = s.Substring(six, endIndex - six + 1); + s = s.Remove(six, tag.Length); + if (htmlTags.ContainsKey(six)) + { + htmlTags[six] = htmlTags[six] + tag; + } + else + { + htmlTags.Add(six, tag); + } + } + else + { + sb.Append(letter); + six++; + } + } + s = sb.ToString(); + + var textSplit = new TextSplit(s, maximumLength, language); + var split = textSplit.AutoBreak(Configuration.Settings.Tools.AutoBreakDashEarly, autoBreakLineEndingEarly, Configuration.Settings.Tools.AutoBreakCommaBreakEarly, Configuration.Settings.Tools.AutoBreakUsePixelWidth); + if (split != null) + { + s = split; + } + s = ReInsertHtmlTags(s.Replace(Environment.NewLine, " " + Environment.NewLine), htmlTags); + var idx = s.IndexOf(Environment.NewLine + " 2) + { + var endIdx = s.IndexOf('>', idx + 2); + if (endIdx > idx) + { + var tag = s.Substring(idx + Environment.NewLine.Length, endIdx - (idx + Environment.NewLine.Length) + 1); + s = s.Insert(idx, tag); + s = s.Remove(idx + tag.Length + Environment.NewLine.Length, tag.Length); + } + } + s = s.Replace(" " + Environment.NewLine, Environment.NewLine); + s = s.Replace(Environment.NewLine + " ", Environment.NewLine); + return s.TrimEnd(); + } + + public static string RemoveLineBreaks(string input) + { + var s = HtmlUtil.FixUpperTags(input); + + s = s.Replace(" " + Environment.NewLine + "", Environment.NewLine); + s = s.Replace("" + Environment.NewLine + " ", Environment.NewLine); + s = s.Replace("" + Environment.NewLine + "", Environment.NewLine); + + s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + " ", "" + Environment.NewLine); + + s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(" " + Environment.NewLine + "", "" + Environment.NewLine); + + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + s = s.Replace(Environment.NewLine + "", "" + Environment.NewLine); + + while (s.Contains(" " + Environment.NewLine)) + { + s = s.Replace(" " + Environment.NewLine, Environment.NewLine); + } + + while (s.Contains(Environment.NewLine + " ")) + { + s = s.Replace(Environment.NewLine + " ", Environment.NewLine); + } + + s = s.Replace(Environment.NewLine, " "); + return s.Trim(); + } + + /// + /// Note: Requires a space before the NewLine + /// + private static string ReInsertHtmlTags(string s, Dictionary htmlTags) + { + if (htmlTags.Count > 0) + { + var sb = new StringBuilder(s.Length); + int six = 0; + foreach (var letter in s) + { + if (Environment.NewLine.Contains(letter)) + { + sb.Append(letter); + } + else + { + if (htmlTags.ContainsKey(six)) + { + sb.Append(htmlTags[six]); + } + sb.Append(letter); + six++; + } + } + + for (int i = 0; i < 15; i++) + { + if (htmlTags.ContainsKey(six + i)) + { + sb.Append(htmlTags[six + i]); + } + } + + return sb.ToString(); + } + return s; + } + + public static string UnbreakLine(string text) + { + var lines = text.SplitToLines(); + if (lines.Count == 1) + { + return lines[0]; + } + + var singleLine = string.Join(" ", lines); + while (singleLine.Contains(" ")) + { + singleLine = singleLine.Replace(" ", " "); + } + + if (singleLine.Contains(" ", " "); + singleLine = singleLine.Replace("", " "); + + singleLine = singleLine.Replace(" ", " "); + singleLine = singleLine.Replace("", " "); + + singleLine = singleLine.Replace(" ", " "); + singleLine = singleLine.Replace("", " "); + } + return singleLine; + } + + public static string RemoveSsaTags(string input) + { + var s = input; + + if (s.Contains('{') && s.Contains('}')) + { + var p1Index = s.IndexOf("\\p1", StringComparison.Ordinal); + var p0Index = s.IndexOf("{\\p0}", StringComparison.Ordinal); + if (p1Index > 0 && (p0Index > p1Index || p0Index == -1)) + { + var startTagIndex = s.Substring(0, p1Index).LastIndexOf('{'); + if (startTagIndex >= 0) + { + if (p0Index > p1Index) + { + s = s.Remove(startTagIndex, p0Index - startTagIndex + "{\\p0}".Length); + } + else + { + s = s.Remove(startTagIndex); + } + } + } + } + + int k = s.IndexOf("{\\", StringComparison.Ordinal); + var karaokeStart = s.IndexOf("{Kara Effector", StringComparison.Ordinal); + if (k == -1 || karaokeStart >= 0 && karaokeStart < k) + { + k = karaokeStart; + } + + while (k >= 0) + { + int l = s.IndexOf('}', k + 1); + if (l < k) + { + break; + } + + s = s.Remove(k, l - k + 1); + k = s.IndexOf('{', k); + } + + s = s.Replace("\\n", Environment.NewLine); // Soft line break + s = s.Replace("\\N", Environment.NewLine); // Hard line break + s = s.Replace("\\h", " "); // Hard space + + if (s.StartsWith("m ", StringComparison.Ordinal)) + { + var test = s.Remove(0, 2) + .RemoveChar('0') + .RemoveChar('1') + .RemoveChar('2') + .RemoveChar('3') + .RemoveChar('4') + .RemoveChar('5') + .RemoveChar('6') + .RemoveChar('7') + .RemoveChar('8') + .RemoveChar('9') + .RemoveChar('-') + .RemoveChar('l') + .RemoveChar('m') + .RemoveChar(' ') + .RemoveChar('.'); + if (test.Length == 0) + { + return string.Empty; + } + } + + return s; + } + + public static string DictionaryFolder => Configuration.DictionariesDirectory; + + public static List GetDictionaryLanguages() + { + var list = new List(); + if (Directory.Exists(DictionaryFolder)) + { + foreach (string dic in Directory.GetFiles(DictionaryFolder, "*.dic")) + { + string name = Path.GetFileNameWithoutExtension(dic); + if (!name.StartsWith("hyph", StringComparison.Ordinal)) + { + try + { + var ci = CultureInfo.GetCultureInfo(name.Replace('_', '-')); + name = ci.DisplayName + " [" + name + "]"; + } + catch (Exception exception) + { + System.Diagnostics.Debug.WriteLine(exception.Message); + name = "[" + name + "]"; + } + list.Add(name); + } + } + } + return list; + } + + public static List GetDictionaryLanguagesCultureNeutral() + { + var list = new List(); + if (Directory.Exists(DictionaryFolder)) + { + foreach (string dic in Directory.GetFiles(DictionaryFolder, "*.dic")) + { + string name = Path.GetFileNameWithoutExtension(dic); + if (!name.StartsWith("hyph", StringComparison.Ordinal)) + { + try + { + var ci = CultureInfo.GetCultureInfo(name.Replace('_', '-')); + var displayName = ci.DisplayName; + if (displayName.Contains("(")) + { + displayName = displayName.Remove(displayName.IndexOf('(')).TrimEnd(); + } + name = displayName + " [" + ci.TwoLetterISOLanguageName + "]"; + } + catch (Exception exception) + { + System.Diagnostics.Debug.WriteLine(exception.Message); + name = "[" + name + "]"; + } + if (!list.Contains(name)) + { + list.Add(name); + } + } + } + } + return list; + } + + public static IEnumerable GetSubtitleLanguageCultures() + { + var prospects = new List(); + var excludes = new HashSet(); + + foreach (var ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) + { + if (ci.Name.Length < 4 && ci.Name == ci.IetfLanguageTag) + { + excludes.Add(ci.Parent.Name); + prospects.Add(ci); + } + } + + return prospects.Where(ci => !excludes.Contains(ci.Name)); + } + + public static double GetOptimalDisplayMilliseconds(string text) + { + return GetOptimalDisplayMilliseconds(text, Configuration.Settings.General.SubtitleOptimalCharactersPerSeconds); + } + + public static double GetOptimalDisplayMilliseconds(string text, double optimalCharactersPerSecond) + { + if (optimalCharactersPerSecond < 2 || optimalCharactersPerSecond > 100) + { + optimalCharactersPerSecond = 14.7; + } + + var duration = text.CountCharacters(Configuration.Settings.General.CharactersPerSecondsIgnoreWhiteSpace, Configuration.Settings.General.IgnoreArabicDiacritics) / optimalCharactersPerSecond * TimeCode.BaseUnit; + + if (duration < 1400) + { + duration *= 1.2; + } + else if (duration < 1400 * 1.2) + { + duration = 1400 * 1.2; + } + else if (duration > 2900) + { + duration = Math.Max(2900, duration * 0.96); + } + + if (duration < Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds) + { + duration = Configuration.Settings.General.SubtitleMinimumDisplayMilliseconds; + } + + if (duration > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds) + { + duration = Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds; + } + + return duration; + } + + public static string ColorToHex(Color c) + { + return $"#{c.R:x2}{c.G:x2}{c.B:x2}"; + } + + public static int GetMaxLineLength(string text) + { + int maxLength = 0; + foreach (string line in HtmlUtil.RemoveHtmlTags(text, true).SplitToLines()) + { + if (line.Length > maxLength) + { + maxLength = line.Length; + } + } + return maxLength; + } + + public static double GetCharactersPerSecond(Paragraph paragraph) + { + var duration = paragraph.Duration; + if (duration.TotalMilliseconds < 1) + { + return 999; + } + + return paragraph.Text.CountCharacters(Configuration.Settings.General.CharactersPerSecondsIgnoreWhiteSpace, Configuration.Settings.General.IgnoreArabicDiacritics) / duration.TotalSeconds; + } + + public static double GetCharactersPerSecond(Paragraph paragraph, int numberOfCharacters) + { + var duration = paragraph.Duration; + if (duration.TotalMilliseconds < 1) + { + return 999; + } + + return numberOfCharacters / duration.TotalSeconds; + } + + + public static bool IsRunningOnMono() + { + return Type.GetType("Mono.Runtime") != null; + } + + public static void ShowHelp(string parameter) + { + string helpFile = Configuration.Settings.Language.General.HelpFile; + if (string.IsNullOrEmpty(helpFile)) + { + helpFile = "https://www.nikse.dk/SubtitleEdit/Help"; + } + try + { + if (Configuration.IsRunningOnWindows || Configuration.IsRunningOnMac) + { + System.Diagnostics.Process.Start(helpFile + parameter); + } + else if (Configuration.IsRunningOnLinux) + { + System.Diagnostics.Process process = new System.Diagnostics.Process(); + process.EnableRaisingEvents = false; + process.StartInfo.FileName = "xdg-open"; + process.StartInfo.Arguments = helpFile + parameter; + process.Start(); + } + } + catch + { + //Don't do anything + } + } + + public static string AssemblyVersion => Assembly.GetEntryAssembly().GetName().Version.ToString(); + + public static string AssemblyDescription + { + get + { + var assembly = Assembly.GetEntryAssembly(); + if (assembly != null && Attribute.IsDefined(assembly, typeof(AssemblyDescriptionAttribute))) + { + var descriptionAttribute = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(assembly, typeof(AssemblyDescriptionAttribute)); + if (descriptionAttribute != null) + { + return descriptionAttribute.Description; + } + } + return null; + } + } + + public static void RemoveFromUserDictionary(string word, string languageName) + { + word = word.Trim(); + if (word.Length > 0) + { + string userWordsXmlFileName = DictionaryFolder + languageName + "_user.xml"; + var userWords = new XmlDocument(); + if (File.Exists(userWordsXmlFileName)) + { + userWords.Load(userWordsXmlFileName); + } + else + { + userWords.LoadXml(""); + } + + var words = new List(); + var nodes = userWords.DocumentElement?.SelectNodes("word"); + if (nodes != null) + { + foreach (XmlNode node in nodes) + { + string w = node.InnerText.Trim(); + if (w.Length > 0 && w != word) + { + words.Add(w); + } + } + } + + words.Sort(); + + if (userWords.DocumentElement != null) + { + userWords.DocumentElement.RemoveAll(); + foreach (string w in words) + { + XmlNode node = userWords.CreateElement("word"); + node.InnerText = w; + userWords.DocumentElement.AppendChild(node); + } + } + + userWords.Save(userWordsXmlFileName); + } + } + + public static void AddToUserDictionary(string word, string languageName) + { + word = word.Trim(); + if (word.Length > 0) + { + string userWordsXmlFileName = DictionaryFolder + languageName + "_user.xml"; + var userWords = new XmlDocument(); + if (File.Exists(userWordsXmlFileName)) + { + userWords.Load(userWordsXmlFileName); + } + else + { + userWords.LoadXml(""); + } + + var words = new List(); + if (userWords.DocumentElement != null) + { + var nodes = userWords.DocumentElement.SelectNodes("word"); + if (nodes != null) + { + foreach (XmlNode node in nodes) + { + string w = node.InnerText.Trim(); + if (w.Length > 0) + { + words.Add(w); + } + } + } + + if (!words.Contains(word)) + { + words.Add(word); + } + + words.Sort(); + + userWords.DocumentElement.RemoveAll(); + foreach (string w in words) + { + XmlNode node = userWords.CreateElement("word"); + node.InnerText = w; + userWords.DocumentElement.AppendChild(node); + } + } + + userWords.Save(userWordsXmlFileName); + } + } + + public static string LoadUserWordList(List userWordList, string languageName) + { + userWordList.Clear(); + var userWordDictionary = new XmlDocument(); + string userWordListXmlFileName = DictionaryFolder + languageName + "_user.xml"; + if (File.Exists(userWordListXmlFileName)) + { + userWordDictionary.Load(userWordListXmlFileName); + foreach (XmlNode node in userWordDictionary.DocumentElement.SelectNodes("word")) + { + string s = node.InnerText.ToLowerInvariant(); + if (!userWordList.Contains(s)) + { + userWordList.Add(s); + } + } + } + return userWordListXmlFileName; + } + + public static string LoadUserWordList(HashSet userWordList, string languageName) + { + userWordList.Clear(); + var userWordDictionary = new XmlDocument(); + string userWordListXmlFileName = DictionaryFolder + languageName + "_user.xml"; + if (File.Exists(userWordListXmlFileName)) + { + userWordDictionary.Load(userWordListXmlFileName); + var nodes = userWordDictionary.DocumentElement?.SelectNodes("word"); + if (nodes != null) + { + foreach (XmlNode node in nodes) + { + string s = node.InnerText.ToLowerInvariant(); + if (!userWordList.Contains(s)) + { + userWordList.Add(s); + } + } + } + } + return userWordListXmlFileName; + } + + public static readonly string UppercaseLetters = Configuration.Settings.General.UppercaseLetters.ToUpperInvariant(); + public static readonly string LowercaseLetters = Configuration.Settings.General.UppercaseLetters.ToLowerInvariant(); + public static readonly string LowercaseLettersWithNumbers = LowercaseLetters + "0123456789"; + public static readonly string AllLetters = UppercaseLetters + LowercaseLetters; + public static readonly string AllLettersAndNumbers = UppercaseLetters + LowercaseLettersWithNumbers; + + public static Color GetColorFromUserName(string userName) + { + if (string.IsNullOrEmpty(userName)) + { + return Color.Pink; + } + + byte[] buffer = Encoding.UTF8.GetBytes(userName); + long number = 0; + foreach (byte b in buffer) + { + number += b; + } + + switch (number % 20) + { + case 0: return Color.Red; + case 1: return Color.Blue; + case 2: return Color.Green; + case 3: return Color.DarkCyan; + case 4: return Color.DarkGreen; + case 5: return Color.DarkBlue; + case 6: return Color.DarkTurquoise; + case 7: return Color.DarkViolet; + case 8: return Color.DeepPink; + case 9: return Color.DodgerBlue; + case 10: return Color.ForestGreen; + case 11: return Color.Fuchsia; + case 12: return Color.DarkOrange; + case 13: return Color.GreenYellow; + case 14: return Color.IndianRed; + case 15: return Color.Indigo; + case 16: return Color.LawnGreen; + case 17: return Color.LightBlue; + case 18: return Color.DarkGoldenrod; + case 19: return Color.Magenta; + default: + return Color.Black; + } + } + + public static int GetNumber0To7FromUserName(string userName) + { + if (string.IsNullOrEmpty(userName)) + { + return 0; + } + + byte[] buffer = Encoding.UTF8.GetBytes(userName); + long number = 0; + foreach (byte b in buffer) + { + number += b; + } + + return (int)(number % 8); + } + + public static string LowercaseVowels => "aeiouyæøåéóáôèòæøåäöïɤəɛʊʉɨ"; + + public static int CountTagInText(string text, string tag) + { + int count = 0; + int index = text.IndexOf(tag, StringComparison.Ordinal); + while (index >= 0) + { + count++; + index = index + tag.Length; + if (index >= text.Length) + { + return count; + } + + index = text.IndexOf(tag, index, StringComparison.Ordinal); + } + return count; + } + + public static int CountTagInText(string text, char tag) + { + int count = 0; + int index = text.IndexOf(tag); + while (index >= 0) + { + count++; + if ((index + 1) == text.Length) + { + return count; + } + + index = text.IndexOf(tag, index + 1); + } + return count; + } + + public static bool StartsAndEndsWithTag(string text, string startTag, string endTag) + { + if (string.IsNullOrWhiteSpace(text)) + { + return false; + } + + if (!text.Contains(startTag) || !text.Contains(endTag)) + { + return false; + } + + while (text.Contains(" ")) + { + text = text.Replace(" ", " "); + } + + var s1 = "- " + startTag; + var s2 = "-" + startTag; + var s3 = "- ..." + startTag; + var s4 = "- " + startTag + "..."; // - ... + + var e1 = endTag + "."; + var e2 = endTag + "!"; + var e3 = endTag + "?"; + var e4 = endTag + "..."; + var e5 = endTag + "-"; + + bool isStart = false; + bool isEnd = false; + if (text.StartsWith(startTag, StringComparison.Ordinal) || text.StartsWith(s1, StringComparison.Ordinal) || text.StartsWith(s2, StringComparison.Ordinal) || text.StartsWith(s3, StringComparison.Ordinal) || text.StartsWith(s4, StringComparison.Ordinal)) + { + isStart = true; + } + + if (text.EndsWith(endTag, StringComparison.Ordinal) || text.EndsWith(e1, StringComparison.Ordinal) || text.EndsWith(e2, StringComparison.Ordinal) || text.EndsWith(e3, StringComparison.Ordinal) || text.EndsWith(e4, StringComparison.Ordinal) || text.EndsWith(e5, StringComparison.Ordinal)) + { + isEnd = true; + } + + return isStart && isEnd; + } + + public static Paragraph GetOriginalParagraph(int index, Paragraph paragraph, List originalParagraphs) + { + if (index < 0) + { + return null; + } + + if (index < originalParagraphs.Count && Math.Abs(originalParagraphs[index].StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 50) + { + return originalParagraphs[index]; + } + + if (paragraph.StartTime.IsMaxTime && index < originalParagraphs.Count && originalParagraphs[index].StartTime.IsMaxTime) + { + return originalParagraphs[index]; + } + + foreach (var p in originalParagraphs) + { + if (!p.StartTime.IsMaxTime && Math.Abs(p.StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 0.01) + { + return p; + } + } + + foreach (var p in originalParagraphs) + { + if (!p.StartTime.IsMaxTime && + p.StartTime.TotalMilliseconds > paragraph.StartTime.TotalMilliseconds - 200 && + p.StartTime.TotalMilliseconds < paragraph.StartTime.TotalMilliseconds + TimeCode.BaseUnit) + { + return p; + } + } + + return null; + } + + /// + /// UrlEncodes a string without the requirement for System.Web + /// + public static string UrlEncode(string text) + { + return Uri.EscapeDataString(text); + } + + /// + /// UrlDecodes a string without requiring System.Web + /// + public static string UrlDecode(string text) + { + // pre-process for + sign space formatting since System.Uri doesn't handle it + // plus literals are encoded as %2b normally so this should be safe + text = text.Replace('+', ' '); + return Uri.UnescapeDataString(text); + } + + private static readonly Regex TwoOrMoreDigitsNumber = new Regex(@"\d\d+", RegexOptions.Compiled); + private const string PrePostStringsToReverse = @"-— !?.…""،,():;[]+~*/<>&^%$#\\|'"; + + public static string ReverseStartAndEndingForRightToLeft(string s) + { + var newLines = new StringBuilder(); + var pre = new StringBuilder(); + var post = new StringBuilder(); + var lines = s.SplitToLines(); + foreach (var line in lines) + { + string s2 = line; + + var preTags = new StringBuilder(); + while (s2.StartsWith("{\\", StringComparison.Ordinal) && s2.IndexOf('}') > 0) + { + int end = s2.IndexOf('}') + 1; + preTags.Append(s2.Substring(0, end)); + s2 = s2.Remove(0, end); + } + string postTags = string.Empty; + for (int k = 0; k < 10; k++) + { + if (s2.StartsWith("♪ ", StringComparison.Ordinal) || + s2.StartsWith("♫ ", StringComparison.Ordinal)) + { + preTags.Append(s2.Substring(0, 2)); + s2 = s2.Remove(0, 2); + } + if (s2.StartsWith("♪", StringComparison.Ordinal) || + s2.StartsWith("♫", StringComparison.Ordinal)) + { + preTags.Append(s2.Substring(0, 1)); + s2 = s2.Remove(0, 1); + } + if (s2.StartsWith("", StringComparison.Ordinal) || + s2.StartsWith("", StringComparison.Ordinal) || + s2.StartsWith("", StringComparison.Ordinal)) + { + preTags.Append(s2.Substring(0, 3)); + s2 = s2.Remove(0, 3); + } + if (s2.StartsWith("') > 0) + { + int idx = s2.IndexOf('>'); + idx++; + preTags.Append(s2.Substring(0, idx)); + s2 = s2.Remove(0, idx); + } + + if (s2.EndsWith(" ♪", StringComparison.Ordinal) || + s2.EndsWith(" ♫", StringComparison.Ordinal)) + { + postTags = s2.Substring(s2.Length - 2) + postTags; + s2 = s2.Remove(s2.Length - 2); + } + if (s2.EndsWith("♪", StringComparison.Ordinal) || + s2.EndsWith("♫", StringComparison.Ordinal)) + { + postTags = s2.Substring(s2.Length - 1) + postTags; + s2 = s2.Remove(s2.Length - 1); + } + if (s2.EndsWith("", StringComparison.Ordinal) || + s2.EndsWith("", StringComparison.Ordinal) || + s2.EndsWith("", StringComparison.Ordinal)) + { + postTags = s2.Substring(s2.Length - 4) + postTags; + s2 = s2.Remove(s2.Length - 4); + } + if (s2.EndsWith("", StringComparison.Ordinal)) + { + postTags = s2.Substring(s2.Length - 7) + postTags; + s2 = s2.Remove(s2.Length - 7); + } + } + + pre.Clear(); + post.Clear(); + int i = 0; + while (i < s2.Length && PrePostStringsToReverse.Contains(s2[i]) && s2[i] != '{' && + !s2.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase) && + !s2.Substring(i).StartsWith("", StringComparison.OrdinalIgnoreCase) && + !s2.Substring(i).StartsWith(" i && PrePostStringsToReverse.Contains(s2[j]) && s2[j] != '}' && + !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase) && + !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase) && + !s2.Substring(0, j + 1).EndsWith("", StringComparison.OrdinalIgnoreCase)) + { + post.Append(s2[j]); + j--; + } + newLines.Append(preTags); + newLines.Append(ReverseParenthesis(post.ToString())); + newLines.Append(s2.Substring(pre.Length, s2.Length - (pre.Length + post.Length))); + newLines.Append(ReverseParenthesis(ReverseString(pre.ToString()))); + newLines.Append(postTags); + newLines.AppendLine(); + } + return newLines.ToString().Trim(); + } + + public static string ReverseNumbers(string s) + { + return TwoOrMoreDigitsNumber.Replace(s, m => ReverseString(m.Value)); + } + + internal static string ReverseString(string s) + { + int len = s.Length; + if (len <= 1) + { + return s; + } + var chars = new char[len]; + for (int i = 0; i < len; i++) + { + chars[i] = s[len - i - 1]; + } + return new string(chars); + } + + private static string ReverseParenthesis(string s) + { + if (string.IsNullOrEmpty(s)) + { + return s; + } + int len = s.Length; + var chars = new char[len]; + for (int i = 0; i < len; i++) + { + char ch = s[i]; + switch (ch) + { + case '(': + ch = ')'; + break; + case ')': + ch = '('; + break; + case '[': + ch = ']'; + break; + case ']': + ch = '['; + break; + } + chars[i] = ch; + } + return new string(chars); + } + + public static string FixEnglishTextInRightToLeftLanguage(string text, string reverseChars) + { + var sb = new StringBuilder(); + var lines = text.SplitToLines(); + foreach (string line in lines) + { + string s = ReverseParenthesis(line.Trim()); + bool numbersOn = false; + string numbers = string.Empty; + for (int i = 0; i < s.Length; i++) + { + if (numbersOn && reverseChars.Contains(s[i])) + { + numbers = s[i] + numbers; + } + else if (numbersOn) + { + numbersOn = false; + s = s.Remove(i - numbers.Length, numbers.Length).Insert(i - numbers.Length, numbers); + numbers = string.Empty; + } + else if (reverseChars.Contains(s[i])) + { + numbers = s[i] + numbers; + numbersOn = true; + } + } + if (numbersOn) + { + int i = s.Length; + s = s.Remove(i - numbers.Length, numbers.Length).Insert(i - numbers.Length, numbers); + } + + sb.AppendLine(s); + } + return sb.ToString().Trim(); + } + + public static string ToSuperscript(string text) + { + var sb = new StringBuilder(); + var superscript = new List{ + '⁰', + '¹', + '²', + '³', + '⁴', + '⁵', + '⁶', + '⁷', + '⁸', + '⁹', + '⁺', + '⁻', + '⁼', + '⁽', + '⁾', + 'ᵃ', + 'ᵇ', + 'ᶜ', + 'ᵈ', + 'ᵉ', + 'ᶠ', + 'ᵍ', + 'ʰ', + 'ⁱ', + 'ʲ', + 'ᵏ', + 'ˡ', + 'ᵐ', + 'ⁿ', + 'ᵒ', + 'ᵖ', + 'ʳ', + 'ˢ', + 'ᵗ', + 'ᵘ', + 'ᵛ', + 'ʷ', + 'ˣ', + 'ʸ', + 'ᶻ', + 'ᴬ', + 'ᴮ', + 'ᴰ', + 'ᴱ', + 'ᴳ', + 'ᴴ', + 'ᴵ', + 'ᴶ', + 'ᴷ', + 'ᴸ', + 'ᴹ', + 'ᴺ', + 'ᴼ', + 'ᴾ', + 'ᴿ', + 'ᵀ', + 'ᵁ', + 'ᵂ' + }; + var normal = new List{ + '0', // "⁰" + '1', // "¹" + '2', // "²" + '3', // "³" + '4', // "⁴" + '5', // "⁵" + '6', // "⁶" + '7', // "⁷" + '8', // "⁸" + '9', // "⁹" + '+', // "⁺" + '-', // "⁻" + '=', // "⁼" + '(', // "⁽" + ')', // "⁾" + 'a', // "ᵃ" + 'b', // "ᵇ" + 'c', // "ᶜ" + 'd', // "ᵈ" + 'e', // "ᵉ" + 'f', // "ᶠ" + 'g', // "ᵍ" + 'h', // "ʰ" + 'i', // "ⁱ" + 'j', // "ʲ" + 'k', // "ᵏ" + 'l', // "ˡ" + 'm', // "ᵐ" + 'n', // "ⁿ" + 'o', // "ᵒ" + 'p', // "ᵖ" + 'r', // "ʳ" + 's', // "ˢ" + 't', // "ᵗ" + 'u', // "ᵘ" + 'v', // "ᵛ" + 'w', // "ʷ" + 'x', // "ˣ" + 'y', // "ʸ" + 'z', // "ᶻ" + 'A', // "ᴬ" + 'B', // "ᴮ" + 'D', // "ᴰ" + 'E', // "ᴱ" + 'G', // "ᴳ" + 'H', // "ᴴ" + 'I', // "ᴵ" + 'J', // "ᴶ" + 'K', // "ᴷ" + 'L', // "ᴸ" + 'M', // "ᴹ" + 'N', // "ᴺ" + 'O', // "ᴼ" + 'P', // "ᴾ" + 'R', // "ᴿ" + 'T', // "ᵀ" + 'U', // "ᵁ" + 'W', // "ᵂ" + }; + for (int i = 0; i < text.Length; i++) + { + char s = text[i]; + int index = normal.IndexOf(s); + if (index >= 0) + { + sb.Append(superscript[index]); + } + else + { + sb.Append(s); + } + } + return sb.ToString(); + } + + public static string ToSubscript(string text) + { + var sb = new StringBuilder(); + var subcript = new List{ + '₀', + '₁', + '₂', + '₃', + '₄', + '₅', + '₆', + '₇', + '₈', + '₉', + '₊', + '₋', + '₌', + '₍', + '₎', + 'ₐ', + 'ₑ', + 'ᵢ', + 'ₒ', + 'ᵣ', + 'ᵤ', + 'ᵥ', + 'ₓ', + }; + var normal = new List + { + '0', // "₀" + '1', // "₁" + '2', // "₂" + '3', // "₃" + '4', // "₄" + '5', // "₅" + '6', // "₆" + '7', // "₇" + '8', // "₈" + '9', // "₉" + '+', // "₊" + '-', // "₋" + '=', // "₌" + '(', // "₍" + ')', // "₎" + 'a', // "ₐ" + 'e', // "ₑ" + 'i', // "ᵢ" + 'o', // "ₒ" + 'r', // "ᵣ" + 'u', // "ᵤ" + 'v', // "ᵥ" + 'x', // "ₓ" + }; + for (int i = 0; i < text.Length; i++) + { + char s = text[i]; + int index = normal.IndexOf(s); + if (index >= 0) + { + sb.Append(subcript[index]); + } + else + { + sb.Append(s); + } + } + return sb.ToString(); + } + + public static string FixQuotes(string text) + { + if (string.IsNullOrEmpty(text)) + { + return text; + } + + if (text.StartsWith('"') && text.Length > 1) + { + text = text.Substring(1); + } + + if (text.EndsWith('"') && text.Length >= 1) + { + text = text.Substring(0, text.Length - 1); + } + + return text.Replace("\"\"", "\""); + } + + public static Color GetColorFromFontString(string text, Color defaultColor) + { + string s = text.TrimEnd(); + int start = s.IndexOf("= 0 && s.EndsWith("", StringComparison.OrdinalIgnoreCase)) + { + int end = s.IndexOf('>', start); + if (end > 0) + { + string f = s.Substring(start, end - start); + if (f.Contains(" color=", StringComparison.OrdinalIgnoreCase)) + { + int colorStart = f.IndexOf(" color=", StringComparison.OrdinalIgnoreCase); + if (s.IndexOf('"', colorStart + " color=".Length + 1) > 0) + { + end = s.IndexOf('"', colorStart + " color=".Length + 1); + } + + s = s.Substring(colorStart, end - colorStart); + s = s.Replace(" color=", string.Empty); + s = s.Trim('\'').Trim('"').Trim('\''); + try + { + if (s.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase)) + { + var arr = s.Remove(0, 4).TrimEnd(')').Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + return Color.FromArgb(int.Parse(arr[0]), int.Parse(arr[1]), int.Parse(arr[2])); + } + return ColorTranslator.FromHtml(s); + } + catch + { + return defaultColor; + } + } + } + } + return defaultColor; + } + + public static string[] SplitForChangedCalc(string s, bool ignoreLineBreaks, bool ignoreFormatting, bool breakToLetters) + { + const string endChars = "!?.…:;,#%$£"; + var list = new List(); + + if (ignoreFormatting) + { + s = HtmlUtil.RemoveHtmlTags(s, true); + } + + if (breakToLetters) + { + foreach (char ch in s) + { + list.Add(ch.ToString()); + } + } + else + { + var word = new StringBuilder(); + int i = 0; + while (i < s.Length) + { + if (s.Substring(i).StartsWith(Environment.NewLine, StringComparison.Ordinal)) + { + if (word.Length > 0) + { + list.Add(word.ToString()); + } + + word.Clear(); + if (!ignoreLineBreaks) + { + list.Add(Environment.NewLine); + } + + i += Environment.NewLine.Length; + } + else if (s[i] == ' ') + { + if (word.Length > 0) + { + list.Add(word.ToString()); + } + + word.Clear(); + i++; + } + else if (endChars.Contains(s[i]) && (word.Length == 0 || endChars.Contains(word[0]))) + { + word.Append(s[i]); + i++; + } + else if (endChars.Contains(s[i])) + { + if (word.Length > 0) + { + list.Add(word.ToString()); + } + + word.Clear(); + word.Append(s[i]); + i++; + } + else + { + word.Append(s[i]); + i++; + } + } + if (word.Length > 0) + { + list.Add(word.ToString()); + } + } + return list.ToArray(); + } + + public static void GetTotalAndChangedWords(string s1, string s2, ref int total, ref int change, bool ignoreLineBreaks, bool ignoreFormatting, bool breakToLetters) + { + var parts1 = SplitForChangedCalc(s1, ignoreLineBreaks, ignoreFormatting, breakToLetters); + var parts2 = SplitForChangedCalc(s2, ignoreLineBreaks, ignoreFormatting, breakToLetters); + total += Math.Max(parts1.Length, parts2.Length); + change += GetChangesAdvanced(parts1, parts2); + } + + private static int GetChangesAdvanced(string[] parts1, string[] parts2) + { + int i1 = 0; + int i2 = 0; + int i = 0; + int c = 0; + var max = Math.Max(parts1.Length, parts2.Length); + while (i < max && i1 < parts1.Length && i2 < parts2.Length) + { + if (parts1[i1] == parts2[i2]) + { + i1++; + i2++; + } + else + { + int i1Next = FindNext(parts2[i2], parts1, i1); + int i2Next = FindNext(parts1[i1], parts2, i2); + if (i1Next < i2Next) + { + c += i1Next - i1; + i1 = i1Next + 1; + i2++; + } + else if (i2Next < i1Next) + { + c += i2Next - i2; + i1++; + i2 = i2Next + 1; + } + else + { + i1++; + i2++; + c++; + } + } + i++; + } + if (i1 == parts1.Length && i2 == parts2.Length) + { + return c; + } + + return c + Math.Abs(parts1.Length - parts2.Length); + } + + private static int FindNext(string s, string[] parts, int startIndex) + { + for (; startIndex < parts.Length; startIndex++) + { + if (s == parts[startIndex]) + { + return startIndex; + } + } + return int.MaxValue; + } + + public static string RemoveNonNumbers(string p) + { + if (string.IsNullOrEmpty(p)) + { + return p; + } + + var sb = new StringBuilder(); + foreach (var c in p) + { + if (char.IsDigit(c)) + { + sb.Append(c); + } + } + return sb.ToString(); + } + + private static readonly Regex RemoveSpaceBetweenNumbersRegex = new Regex(@"(?<=\b\d+) \d(?!/\d)", RegexOptions.Compiled); + + public static string RemoveSpaceBetweenNumbers(string text) + { + if (!string.IsNullOrEmpty(text)) + { + var match = RemoveSpaceBetweenNumbersRegex.Match(text); + while (match.Success) + { + text = text.Remove(match.Index, 1); + match = RemoveSpaceBetweenNumbersRegex.Match(text, match.Index); + } + } + return text; + } + + /// + /// Remove unneeded spaces + /// + /// text string to remove unneeded spaces from + /// two letter language id string + /// text with unneeded spaces removed + public static string RemoveUnneededSpaces(string input, string language) + { + const char zeroWidthSpace = '\u200B'; + const char zeroWidthNoBreakSpace = '\uFEFF'; + const char noBreakSpace = '\u00A0'; + const char operatingSystemCommand = '\u009D'; + + var text = input.Trim(); + int len = text.Length; + int count = 0; + char[] textChars = new char[len]; + for (int i = 0; i < len; i++) + { + char ch = text[i]; + switch (ch) + { + // Ignore: \u200B, \uFEFF and \u009D. + case zeroWidthSpace: + case zeroWidthNoBreakSpace: + case operatingSystemCommand: + break; + // Replace: \t or \u00A0 with white-space. + case '\t': + case noBreakSpace: + textChars[count++] = ' '; + break; + default: + textChars[count++] = ch; + break; + } + } + // Construct new string from textChars. + text = new string(textChars, 0, count); + text = text.FixExtraSpaces(); + + if (text.EndsWith(' ')) + { + text = text.Substring(0, text.Length - 1); + } + + const string ellipses = "..."; + text = text.Replace(". . ..", ellipses); + text = text.Replace(". ...", ellipses); + text = text.Replace(". .. .", ellipses); + text = text.Replace(". . .", ellipses); + text = text.Replace(". ..", ellipses); + text = text.Replace(".. .", ellipses); + + // Fix recursive: ... + while (text.Contains("....")) + { + text = text.Replace("....", ellipses); + } + + text = text.Replace(" ..." + Environment.NewLine, "..." + Environment.NewLine); + text = text.Replace(Environment.NewLine + "... ", Environment.NewLine + "..."); + text = text.Replace(Environment.NewLine + "... ", Environment.NewLine + "..."); + text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); + text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); + text = text.Replace(Environment.NewLine + "- ... ", Environment.NewLine + "- ..."); + + if (text.StartsWith("... ", StringComparison.Ordinal)) + { + text = text.Remove(3, 1); + } + + while (text.EndsWith(" ...", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 4, 1); + } + + while (text.EndsWith(" ...", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 8, 1); + } + + while (text.EndsWith(" .", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 6, 1); + } + + while (text.EndsWith(" !", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 6, 1); + } + + while (text.EndsWith(" ?", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 6, 1); + } + + while (text.Contains(" ." + Environment.NewLine)) + { + text = text.Replace(" ." + Environment.NewLine, "." + Environment.NewLine); + } + + while (text.Contains(" !" + Environment.NewLine)) + { + text = text.Replace(" !" + Environment.NewLine, "!" + Environment.NewLine); + } + + while (text.Contains(" ?" + Environment.NewLine)) + { + text = text.Replace(" ?" + Environment.NewLine, "?" + Environment.NewLine); + } + + if (text.StartsWith("- ... ", StringComparison.Ordinal)) + { + text = text.Remove(5, 1); + } + + if (text.StartsWith("... ", StringComparison.Ordinal)) + { + text = text.Remove(6, 1); + } + + if (language != "fr") // special rules for French + { + text = text.Replace("... ?", "...?"); + text = text.Replace("... !", "...!"); + + text = text.Replace(" :", ":"); + text = text.Replace(" :", ":"); + } + + if (!text.Contains("- ...")) + { + text = text.Replace(" ... ", "... "); + } + + while (text.Contains(" ,")) + { + text = text.Replace(" ,", ","); + } + + while (text.Contains(" 's ")) + { + text = text.Replace(" 's ", "'s "); + } + + while (text.Contains(" 's" + Environment.NewLine)) + { + text = text.Replace(" 's" + Environment.NewLine, "'s" + Environment.NewLine); + } + + if (text.EndsWith(" .", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 2, 1); + } + + if (text.EndsWith(" \"", StringComparison.Ordinal)) + { + text = text.Remove(text.Length - 2, 1); + } + + if (text.Contains(" \"" + Environment.NewLine)) + { + text = text.Replace(" \"" + Environment.NewLine, "\"" + Environment.NewLine); + } + + if (text.Contains(" ." + Environment.NewLine)) + { + text = text.Replace(" ." + Environment.NewLine, "." + Environment.NewLine); + } + + if (language == "en" && text.ContainsNumber()) + { + // 1 st => 1st + text = new Regex(@"(1) (st)\b").Replace(text, "$1$2"); + + // 2 nd => 2nd + text = new Regex(@"(2) (nd)\b").Replace(text, "$1$2"); + + // 3 rd => 2rd + text = new Regex(@"(3) (rd)\b").Replace(text, "$1$2"); + + // 4 th => 4th + text = new Regex(@"([0456789]) (th)\b").Replace(text, "$1$2"); + } + + if (language != "fr") // special rules for French + { + if (text.Contains(" !")) + { + text = text.Replace(" !", "!"); + } + + if (text.Contains(" ?")) + { + text = text.Replace(" ?", "?"); + } + } + + + if (language == "ar") // special rules for Arabic + { + while (text.Contains(" ؟")) + { + text = text.Replace(" ؟", "؟"); + } + + while (text.Contains(" \u060C")) // Arabic comma + { + text = text.Replace(" \u060C", "\u060C"); + } + + text = new Regex(@"\bو ").Replace(text, "و"); + + while (text.Contains("ـ ")) + { + text = text.Replace("ـ ", "ـ"); + } + } + + if (text.Contains(" . ")) + { + var regex = new Regex(@"[a-z] \. [A-Z]"); + var match = regex.Match(text); + while (match.Success) + { + text = text.Remove(match.Index + 1, 1); + match = regex.Match(text); + } + } + + while (text.Contains("¿ ")) + { + text = text.Replace("¿ ", "¿"); + } + + while (text.Contains("¡ ")) + { + text = text.Replace("¡ ", "¡"); + } + + // Italic + if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) + { + text = RemoveSpaceBeforeAfterTag(text, ""); + } + + // Bold + if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) + { + text = RemoveSpaceBeforeAfterTag(text, ""); + } + + // Underline + if (text.Contains("", StringComparison.OrdinalIgnoreCase) && text.Contains("", StringComparison.OrdinalIgnoreCase)) + { + text = RemoveSpaceBeforeAfterTag(text, ""); + } + + // Font + if (text.Contains("', idx + 6); + if (endIdx > idx && endIdx < text.Length - 8) + { + var color = text.Substring(idx, (endIdx - idx) + 1).ToLowerInvariant(); + text = RemoveSpaceBeforeAfterTag(text, color); + } + } + text = text.Trim(); + text = text.Replace(Environment.NewLine + " ", Environment.NewLine); + + if (text.Contains("-") && text.Length > 2 && !text.StartsWith("--", StringComparison.Ordinal)) + { + var dialogHelper = new DialogSplitMerge { DialogStyle = Configuration.Settings.General.DialogStyle, ContinuationStyle = Configuration.Settings.General.ContinuationStyle }; + text = dialogHelper.RemoveSpaces(text); + + int idx = text.IndexOf("- ", 2, StringComparison.Ordinal); + if (text.StartsWith("", StringComparison.OrdinalIgnoreCase)) + { + idx = text.IndexOf("- ", 5, StringComparison.Ordinal); + } + + while (idx > 0) + { + if (idx > 0 && idx < text.Length - 2) + { + string before = string.Empty; + int k = idx - 1; + while (k >= 0 && char.IsLetterOrDigit(text[k])) + { + before = text[k--] + before; + } + string after = string.Empty; + k = idx + 2; + while (k < text.Length && char.IsLetter(text[k])) + { + after = after + text[k++]; + } + if (after.Length > 0 && after.Equals(before, StringComparison.OrdinalIgnoreCase)) + { + text = text.Remove(idx + 1, 1); + } + else if (before.Length > 0) + { + if ((language != "en" || + !after.Equals("and", StringComparison.OrdinalIgnoreCase) && + !after.Equals("or", StringComparison.OrdinalIgnoreCase)) && + (language != "es" || + !after.Equals("y", StringComparison.OrdinalIgnoreCase) && + !after.Equals("o", StringComparison.OrdinalIgnoreCase)) && + (language != "da" || + !after.Equals("og", StringComparison.OrdinalIgnoreCase) && + !after.Equals("eller", StringComparison.OrdinalIgnoreCase)) && + (language != "de" || + !after.Equals("und", StringComparison.OrdinalIgnoreCase) && + !after.Equals("oder", StringComparison.OrdinalIgnoreCase)) && + (language != "fi" || + !after.Equals("ja", StringComparison.OrdinalIgnoreCase) && + !after.Equals("tai", StringComparison.OrdinalIgnoreCase)) && + (language != "fr" || + !after.Equals("et", StringComparison.OrdinalIgnoreCase) && + !after.Equals("ou", StringComparison.OrdinalIgnoreCase)) && + (language != "it" || + !after.Equals("e", StringComparison.OrdinalIgnoreCase) && + !after.Equals("o", StringComparison.OrdinalIgnoreCase)) && + (language != "nl" || + !after.Equals("en", StringComparison.OrdinalIgnoreCase) && + !after.Equals("of", StringComparison.OrdinalIgnoreCase)) && + (language != "pl" || + !after.Equals("i", StringComparison.OrdinalIgnoreCase) && + !after.Equals("czy", StringComparison.OrdinalIgnoreCase)) && + (language != "pt" || + !after.Equals("e", StringComparison.OrdinalIgnoreCase) && + !after.Equals("ou", StringComparison.OrdinalIgnoreCase))) + { + text = text.Remove(idx + 1, 1); + } + } + } + if (idx + 1 < text.Length && idx != -1) + { + idx = text.IndexOf("- ", idx + 1, StringComparison.Ordinal); + } + else + { + break; + } + } + } + + if (CountTagInText(text, '"') == 2 && text.Contains(" \" ")) + { + int idx = text.IndexOf(" \" ", StringComparison.Ordinal); + int idxp = text.IndexOf('"'); + + //"Foo " bar. + if ((idxp >= 0 && idxp < idx) && char.IsLetterOrDigit(text[idx - 1]) && !" \r\n".Contains(text[idxp + 1])) + { + text = text.Remove(idx, 1); + } + + //" Foo " bar. + idx = text.IndexOf(" \" ", StringComparison.Ordinal); + idxp = text.IndexOf('"'); + if (idxp >= 0 && idx > idxp) + { + if (text[idxp + 1] == ' ' && char.IsLetterOrDigit(text[idxp + 2])) + { + text = text.Remove(idxp + 1, 1); + idx--; + } + text = text.Remove(idx, 1); + } + } + + // Fix spaces after quotes + // e.g: Foobar. " Foobar" => Foobar. "Foobar" + string preText = string.Empty; + if (text.LineStartsWithHtmlTag(true, true)) + { + int endIdx = text.IndexOf('>') + 1; + preText = text.Substring(0, endIdx); + text = text.Substring(endIdx); + } + if (text.StartsWith('"')) + { + text = '"' + text.Substring(1).TrimStart(); + } + text = preText + text; + + // Fix spaces before quotes at line ending + string postText = string.Empty; + if (text.LineEndsWithHtmlTag(true, true)) + { + int endIdx = text.LastIndexOf('<'); + postText = text.Substring(endIdx); + text = text.Substring(0, endIdx); + } + if (text.EndsWith(" \"")) + { + text = text.Remove(text.Length - 2, 1); + } + text = text + postText; + + text = text.Replace(". \" ", ". \""); + text = text.Replace("? \" ", "? \""); + text = text.Replace("! \" ", "! \""); + text = text.Replace(") \" ", ") \""); + text = text.Replace("> \" ", "> \""); + + while (text.Contains(" . ")) + { + text = text.Replace(" . ", ". "); + } + + var numberSeparatorNumberMatch = NumberSeparatorNumberRegEx.Match(text); + while (numberSeparatorNumberMatch.Success) + { + var spaceIdx = text.IndexOf(' ', numberSeparatorNumberMatch.Index); + text = text.Remove(spaceIdx, 1); + numberSeparatorNumberMatch = NumberSeparatorNumberRegEx.Match(text); + } + + return text; + } + + public static string RemoveSpaceBeforeAfterTag(string input, string openTag) + { + var text = HtmlUtil.FixUpperTags(input); + var closeTag = string.Empty; + switch (openTag) + { + case "": + closeTag = ""; + break; + case "": + closeTag = ""; + break; + case "": + closeTag = ""; + break; + } + + if (closeTag.Length == 0 && openTag.Contains("
Foobar + if (text.StartsWith(open1, StringComparison.Ordinal)) + { + text = openTag + text.Substring(open1.Length); + } + + // e.g.: \r\n + if (text.StartsWith(open3, StringComparison.Ordinal)) + { + text = text.Remove(openTag.Length, Environment.NewLine.Length); + } + + // e.g.: \r\n + if (text.EndsWith(close5, StringComparison.Ordinal)) + { + text = text.Remove(text.Length - openTag.Length - Environment.NewLine.Length - 1, Environment.NewLine.Length); + } + + if (text.Contains(open2, StringComparison.Ordinal)) + { + text = text.Replace(open2, Environment.NewLine + openTag); + } + + // Hi bad man! -> Hi bad man! + text = text.Replace(" " + openTag + " ", " " + openTag); + text = text.Replace(Environment.NewLine + openTag + " ", Environment.NewLine + openTag); + + // Hi bad man! -> Hi bad man! + text = text.Replace(" " + closeTag + " ", closeTag + " "); + text = text.Replace(" " + closeTag + Environment.NewLine, closeTag + Environment.NewLine); + + text = text.Trim(); + if (text.StartsWith(open1, StringComparison.Ordinal)) + { + text = openTag + text.Substring(open1.Length); + } + + return text; + } + + /// + /// Creates a task that will complete after a time delay. + /// + /// The number of milliseconds to wait before completing the returned task. + /// A task that represents the time delay. + public static Task TaskDelay(int millisecondsDelay) + { + var tcs = new TaskCompletionSource(); + var t = new System.Threading.Timer(_ => tcs.SetResult(null)); + t.Change(millisecondsDelay, -1); + return tcs.Task; + } + + public static SubtitleFormat LoadMatroskaTextSubtitle(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska, List sub, Subtitle subtitle) + { + if (subtitle == null) + { + throw new ArgumentNullException(nameof(subtitle)); + } + + subtitle.Paragraphs.Clear(); + + var isSsa = false; + SubtitleFormat format = new SubRip(); + var codecPrivate = matroskaSubtitleInfo.GetCodecPrivate(); + if (codecPrivate.Contains("[script info]", StringComparison.OrdinalIgnoreCase)) + { + if (codecPrivate.Contains("[V4 Styles]", StringComparison.OrdinalIgnoreCase)) + { + format = new SubStationAlpha(); + } + else + { + format = new AdvancedSubStationAlpha(); + } + + isSsa = true; + } + + if (isSsa) + { + foreach (var p in LoadMatroskaSSA(matroskaSubtitleInfo, matroska.Path, format, sub).Paragraphs) + { + subtitle.Paragraphs.Add(p); + } + + if (!string.IsNullOrEmpty(codecPrivate)) + { + bool eventsStarted = false; + bool fontsStarted = false; + bool graphicsStarted = false; + var header = new StringBuilder(); + foreach (string line in codecPrivate.Replace(Environment.NewLine, "\n").Split('\n')) + { + if (!eventsStarted && !fontsStarted && !graphicsStarted) + { + header.AppendLine(line); + } + + if (line.TrimStart().StartsWith("dialog:", StringComparison.OrdinalIgnoreCase)) + { + eventsStarted = true; + fontsStarted = false; + graphicsStarted = false; + } + else if (line.Trim().Equals("[events]", StringComparison.OrdinalIgnoreCase)) + { + eventsStarted = true; + fontsStarted = false; + graphicsStarted = false; + } + else if (line.Trim().Equals("[fonts]", StringComparison.OrdinalIgnoreCase)) + { + eventsStarted = false; + fontsStarted = true; + graphicsStarted = false; + } + else if (line.Trim().Equals("[graphics]", StringComparison.OrdinalIgnoreCase)) + { + eventsStarted = false; + fontsStarted = false; + graphicsStarted = true; + } + } + subtitle.Header = header.ToString().TrimEnd(); + if (!subtitle.Header.Contains("[events]", StringComparison.OrdinalIgnoreCase)) + { + subtitle.Header += Environment.NewLine + Environment.NewLine + "[Events]" + Environment.NewLine; + } + } + } + else + { + foreach (var p in sub) + { + subtitle.Paragraphs.Add(new Paragraph(p.GetText(matroskaSubtitleInfo), p.Start, p.End)); + } + } + subtitle.Renumber(); + return format; + } + + public static Subtitle LoadMatroskaSSA(MatroskaTrackInfo matroskaSubtitleInfo, string fileName, SubtitleFormat format, List sub) + { + var codecPrivate = matroskaSubtitleInfo.GetCodecPrivate(); + var subtitle = new Subtitle { Header = codecPrivate }; + var lines = subtitle.Header.Trim().SplitToLines(); + var footer = new StringBuilder(); + var comments = new Subtitle(); + if (!string.IsNullOrEmpty(codecPrivate)) + { + bool footerOn = false; + char[] splitChars = { ':', '.' }; + foreach (string line in lines) + { + if (footerOn) + { + footer.AppendLine(line); + } + else if (line.Trim() == "[Events]") + { + } + else if (line.Trim() == "[Fonts]" || line.Trim() == "[Graphics]") + { + footerOn = true; + footer.AppendLine(); + footer.AppendLine(); + footer.AppendLine(line); + } + else if (line.StartsWith("Comment:", StringComparison.Ordinal)) + { + var arr = line.Split(','); + if (arr.Length > 3) + { + arr = arr[1].Split(splitChars); + if (arr.Length == 4) + { + if (int.TryParse(arr[0], out var hour) && int.TryParse(arr[1], out var min) && + int.TryParse(arr[2], out var sec) && int.TryParse(arr[3], out var ms)) + { + comments.Paragraphs.Add(new Paragraph(new TimeCode(hour, min, sec, ms * 10), new TimeCode(), line)); + } + } + } + } + } + } + const string headerFormat = "Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text"; + if (!subtitle.Header.Contains("[Events]")) + { + subtitle.Header = subtitle.Header.Trim() + Environment.NewLine + + Environment.NewLine + + "[Events]" + Environment.NewLine + + headerFormat + Environment.NewLine; + } + else if (subtitle.Header.LastIndexOf("Format:", StringComparison.Ordinal) < subtitle.Header.IndexOf("[Events]", StringComparison.Ordinal)) + { + subtitle.Header = subtitle.Header.Remove(subtitle.Header.IndexOf("[Events]", StringComparison.Ordinal)); + subtitle.Header = subtitle.Header.Trim() + Environment.NewLine + + Environment.NewLine + + "[Events]" + Environment.NewLine + + headerFormat + Environment.NewLine; + } + else + { + subtitle.Header = subtitle.Header.Trim() + Environment.NewLine; + } + + lines = new List(); + foreach (string l in subtitle.Header.Trim().SplitToLines()) + { + lines.Add(l); + } + + const string timeCodeFormat = "{0}:{1:00}:{2:00}.{3:00}"; // h:mm:ss.cc + foreach (var mp in sub) + { + var p = new Paragraph(string.Empty, mp.Start, mp.End); + string start = string.Format(timeCodeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, p.StartTime.Milliseconds / 10); + string end = string.Format(timeCodeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, p.EndTime.Milliseconds / 10); + + //MKS contains this: ReadOrder, Layer, Style, Name, MarginL, MarginR, MarginV, Effect, Text + + for (int commentIndex = 0; commentIndex < comments.Paragraphs.Count; commentIndex++) + { + var cp = comments.Paragraphs[commentIndex]; + if (cp.StartTime.TotalMilliseconds <= p.StartTime.TotalMilliseconds) + { + lines.Add(cp.Text); + } + } + for (int commentIndex = comments.Paragraphs.Count - 1; commentIndex >= 0; commentIndex--) + { + var cp = comments.Paragraphs[commentIndex]; + if (cp.StartTime.TotalMilliseconds <= p.StartTime.TotalMilliseconds) + { + comments.Paragraphs.RemoveAt(commentIndex); + } + } + + string text = mp.GetText(matroskaSubtitleInfo).Replace(Environment.NewLine, "\\N"); + int idx = text.IndexOf(',') + 1; + if (idx > 0 && idx < text.Length) + { + text = text.Remove(0, idx); // remove ReadOrder + idx = text.IndexOf(','); + text = text.Insert(idx, "," + start + "," + end); + lines.Add("Dialogue: " + text); + } + } + for (int commentIndex = 0; commentIndex < comments.Paragraphs.Count; commentIndex++) + { + var cp = comments.Paragraphs[commentIndex]; + lines.Add(cp.Text); + } + + foreach (string l in footer.ToString().SplitToLines()) + { + lines.Add(l); + } + + format.LoadSubtitle(subtitle, lines, fileName); + return subtitle; + } + + public static int GetNumberOfLines(string text) + { + if (string.IsNullOrEmpty(text)) + { + return 0; + } + + int lines = 1; + int idx = text.IndexOf('\n'); + while (idx >= 0) + { + lines++; + idx = text.IndexOf('\n', idx + 1); + } + return lines; + } + + public static bool QualifiesForMerge(Paragraph p, Paragraph next, double maximumMillisecondsBetweenLines, int maximumTotalLength, bool onlyContinuationLines) + { + if (p?.Text != null && next?.Text != null) + { + var s = HtmlUtil.RemoveHtmlTags(p.Text.Trim(), true); + var nextText = HtmlUtil.RemoveHtmlTags(next.Text.Trim(), true); + if (s.Length + nextText.Length < maximumTotalLength && next.StartTime.TotalMilliseconds - p.EndTime.TotalMilliseconds < maximumMillisecondsBetweenLines) + { + if (string.IsNullOrEmpty(s)) + { + return true; + } + + bool isLineContinuation = s.EndsWith(',') || + s.EndsWith('-') || + s.EndsWith("...", StringComparison.Ordinal) || + s.EndsWith("…", StringComparison.Ordinal) || // Unicode Character 'HORIZONTAL ELLIPSIS' (U+2026) + AllLettersAndNumbers.Contains(s.Substring(s.Length - 1)); + + if (!onlyContinuationLines) + { + return true; + } + + return isLineContinuation; + } + } + return false; + } + + public static string GetPathAndFileNameWithoutExtension(string fileName) + { + if (string.IsNullOrEmpty(fileName)) + { + return fileName; + } + + var indexOfPeriod = fileName.LastIndexOf('.'); + if (indexOfPeriod > 0 && fileName.LastIndexOf(Path.DirectorySeparatorChar) < indexOfPeriod) + { + return fileName.Substring(0, indexOfPeriod); + } + + return fileName; + } + + public static string GetFileNameWithoutExtension(string fileName) + { + if (string.IsNullOrEmpty(fileName)) + { + return fileName; + } + + var indexOfDirectorySeparatorChar = fileName.LastIndexOf(Path.DirectorySeparatorChar); + if (indexOfDirectorySeparatorChar >= 0) + { + fileName = fileName.Remove(0, indexOfDirectorySeparatorChar).TrimStart(Path.DirectorySeparatorChar); + } + + var indexOfPeriod = fileName.LastIndexOf('.'); + if (indexOfPeriod > 0) + { + return fileName.Substring(0, indexOfPeriod); + } + + return fileName; + } + + + public static string ReSplit(string text, int selectionStart) + { + if (string.IsNullOrWhiteSpace(text) || !text.Contains(" ") || selectionStart == 0) + { + return text; + } + + var sb = new StringBuilder(); + var isFixed = false; + for (int i = 0; i < text.Length; i++) + { + var ch = text[i]; + + if (!isFixed && ch == ' ' && (i > 0 && i + 1 == selectionStart || i >= selectionStart && ch == ' ')) + { + sb.Append(Environment.NewLine); + isFixed = true; + } + + sb.Append(ch == '\r' || ch == '\n' ? ' ' : ch); + } + + if (!isFixed) + { + return text; + } + return sb.ToString().Replace(" ", " ").Replace(Environment.NewLine + " ", Environment.NewLine); + } + + public static string FixRtlViaUnicodeChars(string input) + { + string rtl = "\u202B"; + var text = input.Replace(rtl, string.Empty); + text = rtl + text.Replace(Environment.NewLine, Environment.NewLine + rtl); + return text; + } + + public static string RemoveUnicodeControlChars(string input) + { + input = input.Replace("\u200E", string.Empty); + input = input.Replace("\u200F", string.Empty); + input = input.Replace("\u202A", string.Empty); + input = input.Replace("\u202B", string.Empty); + input = input.Replace("\u202C", string.Empty); + input = input.Replace("\u202D", string.Empty); + input = input.Replace("\u202E", string.Empty); + input = input.Replace("\u00C2", " "); // no break space + input = input.Replace("\u00A0", " "); // no break space + return input; + } + } +} diff --git a/libse/VideoInfo.cs b/libse/Common/VideoInfo.cs similarity index 91% rename from libse/VideoInfo.cs rename to libse/Common/VideoInfo.cs index 3f5fc5a71..6eceb1b40 100644 --- a/libse/VideoInfo.cs +++ b/libse/Common/VideoInfo.cs @@ -1,4 +1,4 @@ -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public class VideoInfo { diff --git a/libse/WaveToVisualizer.cs b/libse/Common/WaveToVisualizer.cs similarity index 97% rename from libse/WaveToVisualizer.cs rename to libse/Common/WaveToVisualizer.cs index 75ce01d48..d8e90b000 100644 --- a/libse/WaveToVisualizer.cs +++ b/libse/Common/WaveToVisualizer.cs @@ -1,1096 +1,1096 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml; - -namespace Nikse.SubtitleEdit.Core -{ - /// - /// http://soundfile.sapp.org/doc/WaveFormat - /// - public class WaveHeader - { - private const int ConstantHeaderSize = 20; - public const int AudioFormatPcm = 1; - - public string ChunkId { get; private set; } - public uint ChunkSize { get; private set; } - public string Format { get; private set; } - public string FmtId { get; private set; } - public int FmtChunkSize { get; private set; } - - /// - /// 1 = PCM (uncompressed) - /// 0x0101 = IBM mu-law format - /// 0x0102 = IBM a-law format - /// 0x0103 = IBM AVC Adaptive Differential Pulse Code Modulation format - /// 0xFFFE = WAVE_FORMAT_EXTENSIBLE, Determined by SubFormat - /// - public int AudioFormat { get; private set; } - - public int NumberOfChannels { get; private set; } - - /// - /// Number of samples per second - /// - public int SampleRate { get; private set; } - - /// - /// Should be SampleRate * BlockAlign - /// - public int ByteRate { get; private set; } - - /// - /// 8 bytes per block (32 bit); 6 bytes per block (24 bit); 4 bytes per block (16 bit) - /// - public int BlockAlign { get; private set; } - - public int BitsPerSample { get; private set; } - - public string DataId { get; private set; } - - /// - /// Size of sound data - /// - public uint DataChunkSize { get; private set; } - - public int DataStartPosition { get; private set; } - - public WaveHeader(Stream stream) - { - stream.Position = 0; - var buffer = new byte[ConstantHeaderSize]; - int bytesRead = stream.Read(buffer, 0, buffer.Length); - if (bytesRead < buffer.Length) - { - throw new ArgumentException("Stream is too small"); - } - - // constant header - ChunkId = Encoding.UTF8.GetString(buffer, 0, 4); // Chunk ID: "RIFF" (Resource Interchange File Format), RF64 = new 64-bit format - see http://tech.ebu.ch/docs/tech/tech3306-2009.pdf - ChunkSize = BitConverter.ToUInt32(buffer, 4); // Chunk size: 16 or 18 or 40 - Format = Encoding.UTF8.GetString(buffer, 8, 4); // Format code - "WAVE" - FmtId = Encoding.UTF8.GetString(buffer, 12, 4); // Contains the letters "fmt " - FmtChunkSize = BitConverter.ToInt32(buffer, 16); // 16 for PCM. This is the size of the rest of the Subchunk which follows this number. - - // fmt data - buffer = new byte[FmtChunkSize]; - stream.Read(buffer, 0, buffer.Length); - AudioFormat = BitConverter.ToInt16(buffer, 0); // PCM = 1 - NumberOfChannels = BitConverter.ToInt16(buffer, 2); - SampleRate = BitConverter.ToInt32(buffer, 4); // 8000, 44100, etc. - ByteRate = BitConverter.ToInt32(buffer, 8); // SampleRate * NumChannels * BitsPerSample/8 - BlockAlign = BitConverter.ToInt16(buffer, 12); - BitsPerSample = BitConverter.ToInt16(buffer, 14); // 8 bits = 8, 16 bits = 16, etc. - - // data - buffer = new byte[8]; - stream.Position = ConstantHeaderSize + FmtChunkSize; - stream.Read(buffer, 0, buffer.Length); - DataId = Encoding.UTF8.GetString(buffer, 0, 4); - DataChunkSize = BitConverter.ToUInt32(buffer, 4); - DataStartPosition = ConstantHeaderSize + FmtChunkSize + 8; - - // if some other ChunckId than 'data' (e.g. LIST) we search for 'data' - long oldPos = ConstantHeaderSize + FmtChunkSize; - while (DataId != "data" && oldPos + DataChunkSize + 16 < stream.Length) - { - oldPos = oldPos + DataChunkSize + 8; - stream.Position = oldPos; - stream.Read(buffer, 0, buffer.Length); - DataId = Encoding.UTF8.GetString(buffer, 0, 4); - DataChunkSize = BitConverter.ToUInt32(buffer, 4); - DataStartPosition = (int)oldPos + 8; - } - - // recalculate BlockAlign (older versions wrote incorrect values) - BlockAlign = BytesPerSample * NumberOfChannels; - } - - public int BytesPerSample - { - get - { - // round up to the next byte (20 bit WAVs are like 24 bit WAVs with the 4 least significant bits unused) - return (BitsPerSample + 7) / 8; - } - } - - public long BytesPerSecond - { - get - { - return (long)SampleRate * BlockAlign; - } - } - - public double LengthInSeconds - { - get - { - return (double)DataChunkSize / BytesPerSecond; - } - } - - public long LengthInSamples - { - get - { - return DataChunkSize / BlockAlign; - } - } - - internal static void WriteHeader(Stream toStream, int sampleRate, int numberOfChannels, int bitsPerSample, int sampleCount) - { - const int headerSize = 44; - int bytesPerSample = (bitsPerSample + 7) / 8; - int blockAlign = numberOfChannels * bytesPerSample; - int byteRate = sampleRate * blockAlign; - int dataSize = sampleCount * bytesPerSample * numberOfChannels; - byte[] header = new byte[headerSize]; - WriteStringToByteArray(header, 0, "RIFF"); - WriteInt32ToByteArray(header, 4, headerSize + dataSize - 8); // size of RIFF chunk's data - WriteStringToByteArray(header, 8, "WAVE"); - WriteStringToByteArray(header, 12, "fmt "); - WriteInt32ToByteArray(header, 16, 16); // size of fmt chunk's data - WriteInt16ToByteArray(header, 20, 1); // format, 1 = PCM - WriteInt16ToByteArray(header, 22, numberOfChannels); - WriteInt32ToByteArray(header, 24, sampleRate); - WriteInt32ToByteArray(header, 28, byteRate); - WriteInt16ToByteArray(header, 32, blockAlign); - WriteInt16ToByteArray(header, 34, bitsPerSample); - WriteStringToByteArray(header, 36, "data"); - WriteInt32ToByteArray(header, 40, dataSize); - toStream.Write(header, 0, headerSize); - } - - private static void WriteInt16ToByteArray(byte[] headerData, int index, int value) - { - byte[] buffer = BitConverter.GetBytes((short)value); - Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); - } - - private static void WriteInt32ToByteArray(byte[] headerData, int index, int value) - { - byte[] buffer = BitConverter.GetBytes(value); - Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); - } - - private static void WriteStringToByteArray(byte[] headerData, int index, string value) - { - byte[] buffer = Encoding.ASCII.GetBytes(value); - Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); - } - } - - public struct WavePeak - { - public readonly short Max; - public readonly short Min; - - public WavePeak(short max, short min) - { - Max = max; - Min = min; - } - - public int Abs - { - get { return Math.Max(Math.Abs((int)Max), Math.Abs((int)Min)); } - } - } - - public class WavePeakData - { - public WavePeakData(int sampleRate, IList peaks) - { - SampleRate = sampleRate; - LengthInSeconds = (double)peaks.Count / sampleRate; - Peaks = peaks; - CalculateHighestPeak(); - } - - public int SampleRate { get; private set; } - - public double LengthInSeconds { get; private set; } - - public IList Peaks { get; private set; } - - public int HighestPeak { get; private set; } - - private void CalculateHighestPeak() - { - HighestPeak = 0; - foreach (var peak in Peaks) - { - int abs = peak.Abs; - if (abs > HighestPeak) - { - HighestPeak = abs; - } - } - } - - public static WavePeakData FromDisk(string peakFileName) - { - using (var peakGenerator = new WavePeakGenerator(peakFileName)) - { - return peakGenerator.LoadPeaks(); - } - } - } - - public class SpectrogramData : IDisposable - { - private string _loadFromDirectory; - - public SpectrogramData(int fftSize, int imageWidth, double sampleDuration, IList images) - { - FftSize = fftSize; - ImageWidth = imageWidth; - SampleDuration = sampleDuration; - Images = images; - } - - private SpectrogramData(string loadFromDirectory) - { - _loadFromDirectory = loadFromDirectory; - Images = new Bitmap[0]; - } - - public int FftSize { get; private set; } - - public int ImageWidth { get; private set; } - - public double SampleDuration { get; private set; } - - public IList Images { get; private set; } - - public bool IsLoaded - { - get { return _loadFromDirectory == null; } - } - - public void Load() - { - if (_loadFromDirectory == null) - { - return; - } - - string directory = _loadFromDirectory; - _loadFromDirectory = null; - - try - { - string xmlInfoFileName = Path.Combine(directory, "Info.xml"); - if (!File.Exists(xmlInfoFileName)) - { - return; - } - - var doc = new XmlDocument(); - var culture = CultureInfo.InvariantCulture; - doc.Load(xmlInfoFileName); - FftSize = Convert.ToInt32(doc.DocumentElement.SelectSingleNode("NFFT").InnerText, culture); - ImageWidth = Convert.ToInt32(doc.DocumentElement.SelectSingleNode("ImageWidth").InnerText, culture); - SampleDuration = Convert.ToDouble(doc.DocumentElement.SelectSingleNode("SampleDuration").InnerText, culture); - - var images = new List(); - var fileNames = Enumerable.Range(0, int.MaxValue) - .Select(n => Path.Combine(directory, n + ".gif")) - .TakeWhile(p => File.Exists(p)); - foreach (string fileName in fileNames) - { - // important that this does not lock file (do NOT use Image.FromFile(fileName) or alike!!!) - using (var ms = new MemoryStream(File.ReadAllBytes(fileName))) - { - images.Add((Bitmap)Image.FromStream(ms)); - } - } - Images = images; - } - catch - { - } - } - - public void Dispose() - { - foreach (var image in Images) - { - try - { - image.Dispose(); - } - catch - { - } - } - Images = new Bitmap[0]; - } - - public static SpectrogramData FromDisk(string spectrogramDirectory) - { - return new SpectrogramData(spectrogramDirectory); - } - } - - public class WavePeakGenerator : IDisposable - { - #region Movie Hasher - - - public static string GetPeakWaveFileName(string videoFileName, int trackNumber = 0) - { - var dir = Configuration.WaveformsDirectory.TrimEnd(Path.DirectorySeparatorChar); - if (!Directory.Exists(dir)) - { - Directory.CreateDirectory(dir); - } - - string wavePeakName; - if (trackNumber > 0) - { - wavePeakName = MovieHasher.GenerateHash(videoFileName) + "-" + trackNumber + ".wav"; - } - else - { - wavePeakName = MovieHasher.GenerateHash(videoFileName) + ".wav"; - } - - return Path.Combine(dir, wavePeakName); - } - - #endregion Movie Hasher - - public static bool IsFileValidForVisualizer(string fileName) - { - if (!fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - using (var wpg = new WavePeakGenerator(fileName)) - { - return wpg.IsSupported; - } - } - - private readonly Stream _stream; - private readonly WaveHeader _header; - - private delegate int ReadSampleDataValue(byte[] data, ref int index); - - private delegate void WriteSampleDataValue(byte[] buffer, int offset, int value); - - /// - /// Constructor - /// - /// Wave file name - public WavePeakGenerator(string fileName) - : this(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - } - - /// - /// Constructor - /// - /// Stream of a wave file - public WavePeakGenerator(Stream stream) - { - _stream = stream; - _header = new WaveHeader(_stream); - } - - /// - /// Returns true if the current wave file can be processed. Compressed wave files are not supported. - /// - public bool IsSupported => _header.AudioFormat == WaveHeader.AudioFormatPcm && _header.Format == "WAVE"; - - /// - /// Generates peaks and saves them to disk. - /// - /// Delay in milliseconds (normally zero) - /// Path of the output file - public WavePeakData GeneratePeaks(int delayInMilliseconds, string peakFileName) - { - int peaksPerSecond = Math.Min(Configuration.Settings.VideoControls.WaveformMinimumSampleRate, _header.SampleRate); - - // ensure that peaks per second is a factor of the sample rate - while (_header.SampleRate % peaksPerSecond != 0) - { - peaksPerSecond++; - } - - int delaySampleCount = (int)(_header.SampleRate * (delayInMilliseconds / TimeCode.BaseUnit)); - - // ignore negative delays for now (pretty sure it can't happen in mkv and some places pass in -1 by mistake) - delaySampleCount = Math.Max(delaySampleCount, 0); - - var peaks = new List(); - var readSampleDataValue = GetSampleDataReader(); - float sampleAndChannelScale = (float)GetSampleAndChannelScale(); - long fileSampleCount = _header.LengthInSamples; - long fileSampleOffset = -delaySampleCount; - int chunkSampleCount = _header.SampleRate / peaksPerSecond; - byte[] data = new byte[chunkSampleCount * _header.BlockAlign]; - float[] chunkSamples = new float[chunkSampleCount]; - - _stream.Seek(_header.DataStartPosition, SeekOrigin.Begin); - - // for negative delays, skip samples at the beginning - if (fileSampleOffset > 0) - { - _stream.Seek(fileSampleOffset * _header.BlockAlign, SeekOrigin.Current); - } - - while (fileSampleOffset < fileSampleCount) - { - // calculate how many samples to skip at the beginning (for positive delays) - int startSkipSampleCount = 0; - if (fileSampleOffset < 0) - { - startSkipSampleCount = (int)Math.Min(-fileSampleOffset, chunkSampleCount); - fileSampleOffset += startSkipSampleCount; - } - - // calculate how many samples to read from the file - long fileSamplesRemaining = fileSampleCount - Math.Max(fileSampleOffset, 0); - int fileReadSampleCount = (int)Math.Min(fileSamplesRemaining, chunkSampleCount - startSkipSampleCount); - - // read samples from the file - if (fileReadSampleCount > 0) - { - int fileReadByteCount = fileReadSampleCount * _header.BlockAlign; - _stream.Read(data, 0, fileReadByteCount); - fileSampleOffset += fileReadSampleCount; - - int chunkSampleOffset = 0; - int dataByteOffset = 0; - while (dataByteOffset < fileReadByteCount) - { - float value = 0F; - for (int iChannel = 0; iChannel < _header.NumberOfChannels; iChannel++) - { - value += readSampleDataValue(data, ref dataByteOffset); - } - chunkSamples[chunkSampleOffset] = value * sampleAndChannelScale; - chunkSampleOffset += 1; - } - } - - // calculate peaks - peaks.Add(CalculatePeak(chunkSamples, fileReadSampleCount)); - } - - // save results to file - using (var stream = File.Create(peakFileName)) - { - WaveHeader.WriteHeader(stream, peaksPerSecond, 2, 16, peaks.Count); - byte[] buffer = new byte[4]; - foreach (var peak in peaks) - { - WriteValue16Bit(buffer, 0, peak.Max); - WriteValue16Bit(buffer, 2, peak.Min); - stream.Write(buffer, 0, 4); - } - } - - return new WavePeakData(peaksPerSecond, peaks); - } - - public static WavePeakData GenerateEmptyPeaks(string peakFileName, int totalSeconds) - { - int peaksPerSecond = Configuration.Settings.VideoControls.WaveformMinimumSampleRate; - var peaks = new List - { - new WavePeak(1000, -1000) - }; - var totalPeaks = peaksPerSecond * totalSeconds; - for (int i = 0; i < totalPeaks; i++) - { - peaks.Add(new WavePeak(1, -1)); - } - peaks.Add(new WavePeak(1000, -1000)); - - // save results to file - using (var stream = File.Create(peakFileName)) - { - WaveHeader.WriteHeader(stream, peaksPerSecond, 2, 16, peaks.Count); - byte[] buffer = new byte[4]; - foreach (var peak in peaks) - { - WriteValue16Bit(buffer, 0, peak.Max); - WriteValue16Bit(buffer, 2, peak.Min); - stream.Write(buffer, 0, 4); - } - } - - return new WavePeakData(peaksPerSecond, peaks); - } - - private static WavePeak CalculatePeak(float[] chunk, int count) - { - if (count == 0) - { - return new WavePeak(); - } - - float max = chunk[0]; - float min = chunk[0]; - for (int i = 1; i < count; i++) - { - float value = chunk[i]; - if (value > max) - { - max = value; - } - - if (value < min) - { - min = value; - } - } - return new WavePeak((short)(short.MaxValue * max), (short)(short.MaxValue * min)); - } - - /// - /// Loads previously generated peaks from disk. - /// - internal WavePeakData LoadPeaks() - { - if (_header.BitsPerSample != 16) - { - throw new Exception("Peaks file must be 16 bits per sample."); - } - - if (_header.NumberOfChannels != 1 && _header.NumberOfChannels != 2) - { - throw new Exception("Peaks file must have 1 or 2 channels."); - } - - // load data - byte[] data = new byte[_header.DataChunkSize]; - _stream.Position = _header.DataStartPosition; - _stream.Read(data, 0, data.Length); - - // read peak values - WavePeak[] peaks = new WavePeak[_header.LengthInSamples]; - int peakIndex = 0; - if (_header.NumberOfChannels == 2) - { - // max value in left channel, min value in right channel - int byteIndex = 0; - while (byteIndex < data.Length) - { - short max = (short)ReadValue16Bit(data, ref byteIndex); - short min = (short)ReadValue16Bit(data, ref byteIndex); - peaks[peakIndex++] = new WavePeak(max, min); - } - } - else - { - // single sample value (for backwards compatibility) - int byteIndex = 0; - while (byteIndex < data.Length) - { - short value = (short)ReadValue16Bit(data, ref byteIndex); - if (value == short.MinValue) - { - value = -short.MaxValue; - } - - value = Math.Abs(value); - peaks[peakIndex++] = new WavePeak(value, (short)-value); - } - } - - return new WavePeakData(_header.SampleRate, peaks); - } - - private static int ReadValue8Bit(byte[] data, ref int index) - { - int result = sbyte.MinValue + data[index]; - index += 1; - return result; - } - - private static int ReadValue16Bit(byte[] data, ref int index) - { - int result = (short) - ((data[index]) | - (data[index + 1] << 8)); - index += 2; - return result; - } - - private static int ReadValue24Bit(byte[] data, ref int index) - { - int result = - ((data[index] << 8) | - (data[index + 1] << 16) | - (data[index + 2] << 24)) >> 8; - index += 3; - return result; - } - - private static int ReadValue32Bit(byte[] data, ref int index) - { - int result = - (data[index]) | - (data[index + 1] << 8) | - (data[index + 2] << 16) | - (data[index + 3] << 24); - index += 4; - return result; - } - - private static void WriteValue8Bit(byte[] buffer, int offset, int value) - { - buffer[offset] = (byte)(value - sbyte.MinValue); - } - - private static void WriteValue16Bit(byte[] buffer, int offset, int value) - { - buffer[offset] = (byte)value; - buffer[offset + 1] = (byte)(value >> 8); - } - - private static void WriteValue24Bit(byte[] buffer, int offset, int value) - { - buffer[offset] = (byte)value; - buffer[offset + 1] = (byte)(value >> 8); - buffer[offset + 2] = (byte)(value >> 16); - } - - private static void WriteValue32Bit(byte[] buffer, int offset, int value) - { - buffer[offset] = (byte)value; - buffer[offset + 1] = (byte)(value >> 8); - buffer[offset + 2] = (byte)(value >> 16); - buffer[offset + 3] = (byte)(value >> 24); - } - - private double GetSampleScale() - { - return (1.0 / Math.Pow(2.0, _header.BytesPerSample * 8 - 1)); - } - - private double GetSampleAndChannelScale() - { - return GetSampleScale() / _header.NumberOfChannels; - } - - private ReadSampleDataValue GetSampleDataReader() - { - switch (_header.BytesPerSample) - { - case 1: - return ReadValue8Bit; - case 2: - return ReadValue16Bit; - case 3: - return ReadValue24Bit; - case 4: - return ReadValue32Bit; - default: - throw new InvalidDataException("Cannot read bits per sample of " + _header.BitsPerSample); - } - } - - private WriteSampleDataValue GetSampleDataWriter() - { - switch (_header.BytesPerSample) - { - case 1: - return WriteValue8Bit; - case 2: - return WriteValue16Bit; - case 3: - return WriteValue24Bit; - case 4: - return WriteValue32Bit; - default: - throw new InvalidDataException("Cannot write bits per sample of " + _header.BitsPerSample); - } - } - - public void Dispose() - { - Close(); - } - - public void Close() - { - if (_stream != null) - { - _stream.Close(); - } - } - - //////////////////////////////////////// SPECTRUM /////////////////////////////////////////////////////////// - - public SpectrogramData GenerateSpectrogram(int delayInMilliseconds, string spectrogramDirectory) - { - const int fftSize = 256; // image height = fft size / 2 - const int imageWidth = 1024; - - int delaySampleCount = (int)(_header.SampleRate * (delayInMilliseconds / TimeCode.BaseUnit)); - - // ignore negative delays for now (pretty sure it can't happen in mkv and some places pass in -1 by mistake) - delaySampleCount = Math.Max(delaySampleCount, 0); - - var images = new List(); - var drawer = new SpectrogramDrawer(fftSize); - var readSampleDataValue = GetSampleDataReader(); - Task saveImageTask = null; - double sampleAndChannelScale = GetSampleAndChannelScale(); - long fileSampleCount = _header.LengthInSamples; - long fileSampleOffset = -delaySampleCount; - int chunkSampleCount = fftSize * imageWidth; - int chunkCount = (int)Math.Ceiling((double)(fileSampleCount + delaySampleCount) / chunkSampleCount); - byte[] data = new byte[chunkSampleCount * _header.BlockAlign]; - double[] chunkSamples = new double[chunkSampleCount]; - - Directory.CreateDirectory(spectrogramDirectory); - - _stream.Seek(_header.DataStartPosition, SeekOrigin.Begin); - - // for negative delays, skip samples at the beginning - if (fileSampleOffset > 0) - { - _stream.Seek(fileSampleOffset * _header.BlockAlign, SeekOrigin.Current); - } - - for (int iChunk = 0; iChunk < chunkCount; iChunk++) - { - // calculate padding at the beginning (for positive delays) - int startPaddingSampleCount = 0; - if (fileSampleOffset < 0) - { - startPaddingSampleCount = (int)Math.Min(-fileSampleOffset, chunkSampleCount); - fileSampleOffset += startPaddingSampleCount; - } - - // calculate how many samples to read from the file - long fileSamplesRemaining = fileSampleCount - Math.Max(fileSampleOffset, 0); - int fileReadSampleCount = (int)Math.Min(fileSamplesRemaining, chunkSampleCount - startPaddingSampleCount); - - // calculate padding at the end (when the data isn't an even multiple of our chunk size) - int endPaddingSampleCount = chunkSampleCount - startPaddingSampleCount - fileReadSampleCount; - - int chunkSampleOffset = 0; - - // add padding at the beginning - if (startPaddingSampleCount > 0) - { - Array.Clear(chunkSamples, chunkSampleOffset, startPaddingSampleCount); - chunkSampleOffset += startPaddingSampleCount; - } - - // read samples from the file - if (fileReadSampleCount > 0) - { - int fileReadByteCount = fileReadSampleCount * _header.BlockAlign; - _stream.Read(data, 0, fileReadByteCount); - fileSampleOffset += fileReadSampleCount; - - int dataByteOffset = 0; - while (dataByteOffset < fileReadByteCount) - { - double value = 0D; - for (int iChannel = 0; iChannel < _header.NumberOfChannels; iChannel++) - { - value += readSampleDataValue(data, ref dataByteOffset); - } - chunkSamples[chunkSampleOffset] = value * sampleAndChannelScale; - chunkSampleOffset += 1; - } - } - - // add padding at the end - if (endPaddingSampleCount > 0) - { - Array.Clear(chunkSamples, chunkSampleOffset, endPaddingSampleCount); - } - - // generate spectrogram for this chunk - Bitmap bmp = drawer.Draw(chunkSamples); - images.Add(bmp); - - // wait for previous image to finish saving - saveImageTask?.Wait(); - - // save image - string imagePath = Path.Combine(spectrogramDirectory, iChunk + ".gif"); - saveImageTask = Task.Factory.StartNew(() => - { - bmp.Save(imagePath, System.Drawing.Imaging.ImageFormat.Gif); - }); - } - - // wait for last image to finish saving - saveImageTask?.Wait(); - - var doc = new XmlDocument(); - var culture = CultureInfo.InvariantCulture; - double sampleDuration = (double)fftSize / _header.SampleRate; - doc.LoadXml(""); - doc.DocumentElement.SelectSingleNode("SampleDuration").InnerText = sampleDuration.ToString(culture); - doc.DocumentElement.SelectSingleNode("NFFT").InnerText = fftSize.ToString(culture); - doc.DocumentElement.SelectSingleNode("ImageWidth").InnerText = imageWidth.ToString(culture); - doc.DocumentElement.SelectSingleNode("SecondsPerImage").InnerText = ((double)chunkSampleCount / _header.SampleRate).ToString(culture); // currently unused; for backwards compatibility - doc.Save(Path.Combine(spectrogramDirectory, "Info.xml")); - - return new SpectrogramData(fftSize, imageWidth, sampleDuration, images); - } - - public class SpectrogramDrawer - { - private const double RaisedCosineWindowScale = 0.5; - private const int MagnitudeIndexRange = 256; - - private readonly int _nfft; - private readonly MagnitudeToIndexMapper _mapper; - private readonly RealFFT _fft; - private readonly FastBitmap.PixelData[] _palette; - private readonly double[] _segment; - private readonly double[] _window; - private readonly double[] _magnitude1; - private readonly double[] _magnitude2; - - public static string GetSpectrogramFolder(string videoFileName, int trackNumber = 0) - { - var dir = Configuration.SpectrogramsDirectory.TrimEnd(Path.DirectorySeparatorChar); - if (!Directory.Exists(dir)) - { - Directory.CreateDirectory(dir); - } - - string spectrogramFolder; - if (trackNumber > 0) - { - spectrogramFolder = MovieHasher.GenerateHash(videoFileName) + "-" + trackNumber; - } - else - { - spectrogramFolder = MovieHasher.GenerateHash(videoFileName); - } - - return Path.Combine(dir, spectrogramFolder); - } - - public SpectrogramDrawer(int nfft) - { - _nfft = nfft; - _mapper = new MagnitudeToIndexMapper(100.0, MagnitudeIndexRange - 1); - _fft = new RealFFT(nfft); - _palette = GeneratePalette(); - _segment = new double[nfft]; - _window = CreateRaisedCosineWindow(nfft); - _magnitude1 = new double[nfft / 2]; - _magnitude2 = new double[nfft / 2]; - - double scaleCorrection = 1.0 / (RaisedCosineWindowScale * _fft.ForwardScaleFactor); - for (int i = 0; i < _window.Length; i++) - { - _window[i] *= scaleCorrection; - } - } - - public Bitmap Draw(double[] samples) - { - int width = samples.Length / _nfft; - int height = _nfft / 2; - var bmp = new FastBitmap(new Bitmap(width, height)); - bmp.LockImage(); - for (int x = 0; x < width; x++) - { - // process 2 segments offset by -1/4 and 1/4 fft size, resulting in 1/2 fft size - // window spacing (the minimum overlap to avoid discarding parts of the signal) - ProcessSegment(samples, (x * _nfft) - (x > 0 ? _nfft / 4 : 0), _magnitude1); - ProcessSegment(samples, (x * _nfft) + (x < width - 1 ? _nfft / 4 : 0), _magnitude2); - - // draw - for (int y = 0; y < height; y++) - { - int colorIndex = _mapper.Map((_magnitude1[y] + _magnitude2[y]) / 2.0); - bmp.SetPixel(x, height - y - 1, _palette[colorIndex]); - } - } - bmp.UnlockImage(); - return bmp.GetBitmap(); - } - - private void ProcessSegment(double[] samples, int offset, double[] magnitude) - { - // read a segment of the recorded signal - for (int i = 0; i < _nfft; i++) - { - _segment[i] = samples[offset + i] * _window[i]; - } - - // transform to the frequency domain - _fft.ComputeForward(_segment); - - // compute the magnitude of the spectrum - MagnitudeSpectrum(_segment, magnitude); - } - - private static double[] CreateRaisedCosineWindow(int n) - { - double twoPiOverN = Math.PI * 2.0 / n; - double[] dst = new double[n]; - for (int i = 0; i < n; i++) - { - dst[i] = 0.5 * (1.0 - Math.Cos(twoPiOverN * i)); - } - - return dst; - } - - private static void MagnitudeSpectrum(double[] segment, double[] magnitude) - { - magnitude[0] = Math.Sqrt(SquareSum(segment[0], segment[1])); - for (int i = 2; i < segment.Length; i += 2) - { - magnitude[i / 2] = Math.Sqrt(SquareSum(segment[i], segment[i + 1]) * 2.0); - } - } - - private static double SquareSum(double a, double b) - { - return a * a + b * b; - } - - private static FastBitmap.PixelData[] GeneratePalette() - { - var palette = new FastBitmap.PixelData[MagnitudeIndexRange]; - if (Configuration.Settings.VideoControls.SpectrogramAppearance == "Classic") - { - for (int colorIndex = 0; colorIndex < MagnitudeIndexRange; colorIndex++) - { - palette[colorIndex] = new FastBitmap.PixelData(PaletteValue(colorIndex, MagnitudeIndexRange)); - } - } - else - { - var list = SmoothColors(0, 0, 0, Configuration.Settings.VideoControls.WaveformColor.R, - Configuration.Settings.VideoControls.WaveformColor.G, - Configuration.Settings.VideoControls.WaveformColor.B, MagnitudeIndexRange); - for (int i = 0; i < MagnitudeIndexRange; i++) - { - palette[i] = new FastBitmap.PixelData(list[i]); - } - } - return palette; - } - - private static Color PaletteValue(int x, int range) - { - double g; - double r; - double b; - - double r4 = range / 4.0; - const double u = 255; - - if (x < r4) - { - b = x / r4; - g = 0; - r = 0; - } - else if (x < 2 * r4) - { - b = (1 - (x - r4) / r4); - g = 1 - b; - r = 0; - } - else if (x < 3 * r4) - { - b = 0; - g = (2 - (x - r4) / r4); - r = 1 - g; - } - else - { - b = (x - 3 * r4) / r4; - g = 0; - r = 1 - b; - } - - r = ((int)(Math.Sqrt(r) * u)) & 0xff; - g = ((int)(Math.Sqrt(g) * u)) & 0xff; - b = ((int)(Math.Sqrt(b) * u)) & 0xff; - - return Color.FromArgb((int)r, (int)g, (int)b); - } - - private static List SmoothColors(int fromR, int fromG, int fromB, int toR, int toG, int toB, int count) - { - while (toR < 255 && toG < 255 && toB < 255) - { - toR++; - toG++; - toB++; - } - - var list = new List(); - double r = fromR; - double g = fromG; - double b = fromB; - double diffR = (toR - fromR) / (double)count; - double diffG = (toG - fromG) / (double)count; - double diffB = (toB - fromB) / (double)count; - - for (int i = 0; i < count; i++) - { - list.Add(Color.FromArgb((int)r, (int)g, (int)b)); - r += diffR; - g += diffG; - b += diffB; - } - return list; - } - - /// Maps magnitudes in the range [-decibelRange .. 0] dB to palette index values in the range [0 .. indexMax] - private class MagnitudeToIndexMapper - { - private readonly double _minMagnitude; - private readonly double _multiplier; - private readonly double _addend; - - public MagnitudeToIndexMapper(double decibelRange, int indexMax) - { - double mappingScale = indexMax / decibelRange; - _minMagnitude = Math.Pow(10.0, -decibelRange / 20.0); - _multiplier = 20.0 * mappingScale; - _addend = decibelRange * mappingScale; - } - - public int Map(double magnitude) - { - return magnitude >= _minMagnitude ? (int)(Math.Log10(magnitude) * _multiplier + _addend) : 0; - } - - // Less optimized but readable version of the above - public static int Map(double magnitude, double decibelRange, int indexMax) - { - if (Math.Abs(magnitude) < 0.01) - { - return 0; - } - - double decibelLevel = 20.0 * Math.Log10(magnitude); - return decibelLevel >= -decibelRange ? (int)(indexMax * (decibelLevel + decibelRange) / decibelRange) : 0; - } - } - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace Nikse.SubtitleEdit.Core.Common +{ + /// + /// http://soundfile.sapp.org/doc/WaveFormat + /// + public class WaveHeader + { + private const int ConstantHeaderSize = 20; + public const int AudioFormatPcm = 1; + + public string ChunkId { get; private set; } + public uint ChunkSize { get; private set; } + public string Format { get; private set; } + public string FmtId { get; private set; } + public int FmtChunkSize { get; private set; } + + /// + /// 1 = PCM (uncompressed) + /// 0x0101 = IBM mu-law format + /// 0x0102 = IBM a-law format + /// 0x0103 = IBM AVC Adaptive Differential Pulse Code Modulation format + /// 0xFFFE = WAVE_FORMAT_EXTENSIBLE, Determined by SubFormat + /// + public int AudioFormat { get; private set; } + + public int NumberOfChannels { get; private set; } + + /// + /// Number of samples per second + /// + public int SampleRate { get; private set; } + + /// + /// Should be SampleRate * BlockAlign + /// + public int ByteRate { get; private set; } + + /// + /// 8 bytes per block (32 bit); 6 bytes per block (24 bit); 4 bytes per block (16 bit) + /// + public int BlockAlign { get; private set; } + + public int BitsPerSample { get; private set; } + + public string DataId { get; private set; } + + /// + /// Size of sound data + /// + public uint DataChunkSize { get; private set; } + + public int DataStartPosition { get; private set; } + + public WaveHeader(Stream stream) + { + stream.Position = 0; + var buffer = new byte[ConstantHeaderSize]; + int bytesRead = stream.Read(buffer, 0, buffer.Length); + if (bytesRead < buffer.Length) + { + throw new ArgumentException("Stream is too small"); + } + + // constant header + ChunkId = Encoding.UTF8.GetString(buffer, 0, 4); // Chunk ID: "RIFF" (Resource Interchange File Format), RF64 = new 64-bit format - see http://tech.ebu.ch/docs/tech/tech3306-2009.pdf + ChunkSize = BitConverter.ToUInt32(buffer, 4); // Chunk size: 16 or 18 or 40 + Format = Encoding.UTF8.GetString(buffer, 8, 4); // Format code - "WAVE" + FmtId = Encoding.UTF8.GetString(buffer, 12, 4); // Contains the letters "fmt " + FmtChunkSize = BitConverter.ToInt32(buffer, 16); // 16 for PCM. This is the size of the rest of the Subchunk which follows this number. + + // fmt data + buffer = new byte[FmtChunkSize]; + stream.Read(buffer, 0, buffer.Length); + AudioFormat = BitConverter.ToInt16(buffer, 0); // PCM = 1 + NumberOfChannels = BitConverter.ToInt16(buffer, 2); + SampleRate = BitConverter.ToInt32(buffer, 4); // 8000, 44100, etc. + ByteRate = BitConverter.ToInt32(buffer, 8); // SampleRate * NumChannels * BitsPerSample/8 + BlockAlign = BitConverter.ToInt16(buffer, 12); + BitsPerSample = BitConverter.ToInt16(buffer, 14); // 8 bits = 8, 16 bits = 16, etc. + + // data + buffer = new byte[8]; + stream.Position = ConstantHeaderSize + FmtChunkSize; + stream.Read(buffer, 0, buffer.Length); + DataId = Encoding.UTF8.GetString(buffer, 0, 4); + DataChunkSize = BitConverter.ToUInt32(buffer, 4); + DataStartPosition = ConstantHeaderSize + FmtChunkSize + 8; + + // if some other ChunckId than 'data' (e.g. LIST) we search for 'data' + long oldPos = ConstantHeaderSize + FmtChunkSize; + while (DataId != "data" && oldPos + DataChunkSize + 16 < stream.Length) + { + oldPos = oldPos + DataChunkSize + 8; + stream.Position = oldPos; + stream.Read(buffer, 0, buffer.Length); + DataId = Encoding.UTF8.GetString(buffer, 0, 4); + DataChunkSize = BitConverter.ToUInt32(buffer, 4); + DataStartPosition = (int)oldPos + 8; + } + + // recalculate BlockAlign (older versions wrote incorrect values) + BlockAlign = BytesPerSample * NumberOfChannels; + } + + public int BytesPerSample + { + get + { + // round up to the next byte (20 bit WAVs are like 24 bit WAVs with the 4 least significant bits unused) + return (BitsPerSample + 7) / 8; + } + } + + public long BytesPerSecond + { + get + { + return (long)SampleRate * BlockAlign; + } + } + + public double LengthInSeconds + { + get + { + return (double)DataChunkSize / BytesPerSecond; + } + } + + public long LengthInSamples + { + get + { + return DataChunkSize / BlockAlign; + } + } + + internal static void WriteHeader(Stream toStream, int sampleRate, int numberOfChannels, int bitsPerSample, int sampleCount) + { + const int headerSize = 44; + int bytesPerSample = (bitsPerSample + 7) / 8; + int blockAlign = numberOfChannels * bytesPerSample; + int byteRate = sampleRate * blockAlign; + int dataSize = sampleCount * bytesPerSample * numberOfChannels; + byte[] header = new byte[headerSize]; + WriteStringToByteArray(header, 0, "RIFF"); + WriteInt32ToByteArray(header, 4, headerSize + dataSize - 8); // size of RIFF chunk's data + WriteStringToByteArray(header, 8, "WAVE"); + WriteStringToByteArray(header, 12, "fmt "); + WriteInt32ToByteArray(header, 16, 16); // size of fmt chunk's data + WriteInt16ToByteArray(header, 20, 1); // format, 1 = PCM + WriteInt16ToByteArray(header, 22, numberOfChannels); + WriteInt32ToByteArray(header, 24, sampleRate); + WriteInt32ToByteArray(header, 28, byteRate); + WriteInt16ToByteArray(header, 32, blockAlign); + WriteInt16ToByteArray(header, 34, bitsPerSample); + WriteStringToByteArray(header, 36, "data"); + WriteInt32ToByteArray(header, 40, dataSize); + toStream.Write(header, 0, headerSize); + } + + private static void WriteInt16ToByteArray(byte[] headerData, int index, int value) + { + byte[] buffer = BitConverter.GetBytes((short)value); + Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); + } + + private static void WriteInt32ToByteArray(byte[] headerData, int index, int value) + { + byte[] buffer = BitConverter.GetBytes(value); + Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); + } + + private static void WriteStringToByteArray(byte[] headerData, int index, string value) + { + byte[] buffer = Encoding.ASCII.GetBytes(value); + Buffer.BlockCopy(buffer, 0, headerData, index, buffer.Length); + } + } + + public struct WavePeak + { + public readonly short Max; + public readonly short Min; + + public WavePeak(short max, short min) + { + Max = max; + Min = min; + } + + public int Abs + { + get { return Math.Max(Math.Abs((int)Max), Math.Abs((int)Min)); } + } + } + + public class WavePeakData + { + public WavePeakData(int sampleRate, IList peaks) + { + SampleRate = sampleRate; + LengthInSeconds = (double)peaks.Count / sampleRate; + Peaks = peaks; + CalculateHighestPeak(); + } + + public int SampleRate { get; private set; } + + public double LengthInSeconds { get; private set; } + + public IList Peaks { get; private set; } + + public int HighestPeak { get; private set; } + + private void CalculateHighestPeak() + { + HighestPeak = 0; + foreach (var peak in Peaks) + { + int abs = peak.Abs; + if (abs > HighestPeak) + { + HighestPeak = abs; + } + } + } + + public static WavePeakData FromDisk(string peakFileName) + { + using (var peakGenerator = new WavePeakGenerator(peakFileName)) + { + return peakGenerator.LoadPeaks(); + } + } + } + + public class SpectrogramData : IDisposable + { + private string _loadFromDirectory; + + public SpectrogramData(int fftSize, int imageWidth, double sampleDuration, IList images) + { + FftSize = fftSize; + ImageWidth = imageWidth; + SampleDuration = sampleDuration; + Images = images; + } + + private SpectrogramData(string loadFromDirectory) + { + _loadFromDirectory = loadFromDirectory; + Images = new Bitmap[0]; + } + + public int FftSize { get; private set; } + + public int ImageWidth { get; private set; } + + public double SampleDuration { get; private set; } + + public IList Images { get; private set; } + + public bool IsLoaded + { + get { return _loadFromDirectory == null; } + } + + public void Load() + { + if (_loadFromDirectory == null) + { + return; + } + + string directory = _loadFromDirectory; + _loadFromDirectory = null; + + try + { + string xmlInfoFileName = Path.Combine(directory, "Info.xml"); + if (!File.Exists(xmlInfoFileName)) + { + return; + } + + var doc = new XmlDocument(); + var culture = CultureInfo.InvariantCulture; + doc.Load(xmlInfoFileName); + FftSize = Convert.ToInt32(doc.DocumentElement.SelectSingleNode("NFFT").InnerText, culture); + ImageWidth = Convert.ToInt32(doc.DocumentElement.SelectSingleNode("ImageWidth").InnerText, culture); + SampleDuration = Convert.ToDouble(doc.DocumentElement.SelectSingleNode("SampleDuration").InnerText, culture); + + var images = new List(); + var fileNames = Enumerable.Range(0, int.MaxValue) + .Select(n => Path.Combine(directory, n + ".gif")) + .TakeWhile(p => File.Exists(p)); + foreach (string fileName in fileNames) + { + // important that this does not lock file (do NOT use Image.FromFile(fileName) or alike!!!) + using (var ms = new MemoryStream(File.ReadAllBytes(fileName))) + { + images.Add((Bitmap)Image.FromStream(ms)); + } + } + Images = images; + } + catch + { + } + } + + public void Dispose() + { + foreach (var image in Images) + { + try + { + image.Dispose(); + } + catch + { + } + } + Images = new Bitmap[0]; + } + + public static SpectrogramData FromDisk(string spectrogramDirectory) + { + return new SpectrogramData(spectrogramDirectory); + } + } + + public class WavePeakGenerator : IDisposable + { + #region Movie Hasher - + + public static string GetPeakWaveFileName(string videoFileName, int trackNumber = 0) + { + var dir = Configuration.WaveformsDirectory.TrimEnd(Path.DirectorySeparatorChar); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + string wavePeakName; + if (trackNumber > 0) + { + wavePeakName = MovieHasher.GenerateHash(videoFileName) + "-" + trackNumber + ".wav"; + } + else + { + wavePeakName = MovieHasher.GenerateHash(videoFileName) + ".wav"; + } + + return Path.Combine(dir, wavePeakName); + } + + #endregion Movie Hasher + + public static bool IsFileValidForVisualizer(string fileName) + { + if (!fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + using (var wpg = new WavePeakGenerator(fileName)) + { + return wpg.IsSupported; + } + } + + private readonly Stream _stream; + private readonly WaveHeader _header; + + private delegate int ReadSampleDataValue(byte[] data, ref int index); + + private delegate void WriteSampleDataValue(byte[] buffer, int offset, int value); + + /// + /// Constructor + /// + /// Wave file name + public WavePeakGenerator(string fileName) + : this(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + } + + /// + /// Constructor + /// + /// Stream of a wave file + public WavePeakGenerator(Stream stream) + { + _stream = stream; + _header = new WaveHeader(_stream); + } + + /// + /// Returns true if the current wave file can be processed. Compressed wave files are not supported. + /// + public bool IsSupported => _header.AudioFormat == WaveHeader.AudioFormatPcm && _header.Format == "WAVE"; + + /// + /// Generates peaks and saves them to disk. + /// + /// Delay in milliseconds (normally zero) + /// Path of the output file + public WavePeakData GeneratePeaks(int delayInMilliseconds, string peakFileName) + { + int peaksPerSecond = Math.Min(Configuration.Settings.VideoControls.WaveformMinimumSampleRate, _header.SampleRate); + + // ensure that peaks per second is a factor of the sample rate + while (_header.SampleRate % peaksPerSecond != 0) + { + peaksPerSecond++; + } + + int delaySampleCount = (int)(_header.SampleRate * (delayInMilliseconds / TimeCode.BaseUnit)); + + // ignore negative delays for now (pretty sure it can't happen in mkv and some places pass in -1 by mistake) + delaySampleCount = Math.Max(delaySampleCount, 0); + + var peaks = new List(); + var readSampleDataValue = GetSampleDataReader(); + float sampleAndChannelScale = (float)GetSampleAndChannelScale(); + long fileSampleCount = _header.LengthInSamples; + long fileSampleOffset = -delaySampleCount; + int chunkSampleCount = _header.SampleRate / peaksPerSecond; + byte[] data = new byte[chunkSampleCount * _header.BlockAlign]; + float[] chunkSamples = new float[chunkSampleCount]; + + _stream.Seek(_header.DataStartPosition, SeekOrigin.Begin); + + // for negative delays, skip samples at the beginning + if (fileSampleOffset > 0) + { + _stream.Seek(fileSampleOffset * _header.BlockAlign, SeekOrigin.Current); + } + + while (fileSampleOffset < fileSampleCount) + { + // calculate how many samples to skip at the beginning (for positive delays) + int startSkipSampleCount = 0; + if (fileSampleOffset < 0) + { + startSkipSampleCount = (int)Math.Min(-fileSampleOffset, chunkSampleCount); + fileSampleOffset += startSkipSampleCount; + } + + // calculate how many samples to read from the file + long fileSamplesRemaining = fileSampleCount - Math.Max(fileSampleOffset, 0); + int fileReadSampleCount = (int)Math.Min(fileSamplesRemaining, chunkSampleCount - startSkipSampleCount); + + // read samples from the file + if (fileReadSampleCount > 0) + { + int fileReadByteCount = fileReadSampleCount * _header.BlockAlign; + _stream.Read(data, 0, fileReadByteCount); + fileSampleOffset += fileReadSampleCount; + + int chunkSampleOffset = 0; + int dataByteOffset = 0; + while (dataByteOffset < fileReadByteCount) + { + float value = 0F; + for (int iChannel = 0; iChannel < _header.NumberOfChannels; iChannel++) + { + value += readSampleDataValue(data, ref dataByteOffset); + } + chunkSamples[chunkSampleOffset] = value * sampleAndChannelScale; + chunkSampleOffset += 1; + } + } + + // calculate peaks + peaks.Add(CalculatePeak(chunkSamples, fileReadSampleCount)); + } + + // save results to file + using (var stream = File.Create(peakFileName)) + { + WaveHeader.WriteHeader(stream, peaksPerSecond, 2, 16, peaks.Count); + byte[] buffer = new byte[4]; + foreach (var peak in peaks) + { + WriteValue16Bit(buffer, 0, peak.Max); + WriteValue16Bit(buffer, 2, peak.Min); + stream.Write(buffer, 0, 4); + } + } + + return new WavePeakData(peaksPerSecond, peaks); + } + + public static WavePeakData GenerateEmptyPeaks(string peakFileName, int totalSeconds) + { + int peaksPerSecond = Configuration.Settings.VideoControls.WaveformMinimumSampleRate; + var peaks = new List + { + new WavePeak(1000, -1000) + }; + var totalPeaks = peaksPerSecond * totalSeconds; + for (int i = 0; i < totalPeaks; i++) + { + peaks.Add(new WavePeak(1, -1)); + } + peaks.Add(new WavePeak(1000, -1000)); + + // save results to file + using (var stream = File.Create(peakFileName)) + { + WaveHeader.WriteHeader(stream, peaksPerSecond, 2, 16, peaks.Count); + byte[] buffer = new byte[4]; + foreach (var peak in peaks) + { + WriteValue16Bit(buffer, 0, peak.Max); + WriteValue16Bit(buffer, 2, peak.Min); + stream.Write(buffer, 0, 4); + } + } + + return new WavePeakData(peaksPerSecond, peaks); + } + + private static WavePeak CalculatePeak(float[] chunk, int count) + { + if (count == 0) + { + return new WavePeak(); + } + + float max = chunk[0]; + float min = chunk[0]; + for (int i = 1; i < count; i++) + { + float value = chunk[i]; + if (value > max) + { + max = value; + } + + if (value < min) + { + min = value; + } + } + return new WavePeak((short)(short.MaxValue * max), (short)(short.MaxValue * min)); + } + + /// + /// Loads previously generated peaks from disk. + /// + internal WavePeakData LoadPeaks() + { + if (_header.BitsPerSample != 16) + { + throw new Exception("Peaks file must be 16 bits per sample."); + } + + if (_header.NumberOfChannels != 1 && _header.NumberOfChannels != 2) + { + throw new Exception("Peaks file must have 1 or 2 channels."); + } + + // load data + byte[] data = new byte[_header.DataChunkSize]; + _stream.Position = _header.DataStartPosition; + _stream.Read(data, 0, data.Length); + + // read peak values + WavePeak[] peaks = new WavePeak[_header.LengthInSamples]; + int peakIndex = 0; + if (_header.NumberOfChannels == 2) + { + // max value in left channel, min value in right channel + int byteIndex = 0; + while (byteIndex < data.Length) + { + short max = (short)ReadValue16Bit(data, ref byteIndex); + short min = (short)ReadValue16Bit(data, ref byteIndex); + peaks[peakIndex++] = new WavePeak(max, min); + } + } + else + { + // single sample value (for backwards compatibility) + int byteIndex = 0; + while (byteIndex < data.Length) + { + short value = (short)ReadValue16Bit(data, ref byteIndex); + if (value == short.MinValue) + { + value = -short.MaxValue; + } + + value = Math.Abs(value); + peaks[peakIndex++] = new WavePeak(value, (short)-value); + } + } + + return new WavePeakData(_header.SampleRate, peaks); + } + + private static int ReadValue8Bit(byte[] data, ref int index) + { + int result = sbyte.MinValue + data[index]; + index += 1; + return result; + } + + private static int ReadValue16Bit(byte[] data, ref int index) + { + int result = (short) + ((data[index]) | + (data[index + 1] << 8)); + index += 2; + return result; + } + + private static int ReadValue24Bit(byte[] data, ref int index) + { + int result = + ((data[index] << 8) | + (data[index + 1] << 16) | + (data[index + 2] << 24)) >> 8; + index += 3; + return result; + } + + private static int ReadValue32Bit(byte[] data, ref int index) + { + int result = + (data[index]) | + (data[index + 1] << 8) | + (data[index + 2] << 16) | + (data[index + 3] << 24); + index += 4; + return result; + } + + private static void WriteValue8Bit(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)(value - sbyte.MinValue); + } + + private static void WriteValue16Bit(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + } + + private static void WriteValue24Bit(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + buffer[offset + 2] = (byte)(value >> 16); + } + + private static void WriteValue32Bit(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)value; + buffer[offset + 1] = (byte)(value >> 8); + buffer[offset + 2] = (byte)(value >> 16); + buffer[offset + 3] = (byte)(value >> 24); + } + + private double GetSampleScale() + { + return (1.0 / Math.Pow(2.0, _header.BytesPerSample * 8 - 1)); + } + + private double GetSampleAndChannelScale() + { + return GetSampleScale() / _header.NumberOfChannels; + } + + private ReadSampleDataValue GetSampleDataReader() + { + switch (_header.BytesPerSample) + { + case 1: + return ReadValue8Bit; + case 2: + return ReadValue16Bit; + case 3: + return ReadValue24Bit; + case 4: + return ReadValue32Bit; + default: + throw new InvalidDataException("Cannot read bits per sample of " + _header.BitsPerSample); + } + } + + private WriteSampleDataValue GetSampleDataWriter() + { + switch (_header.BytesPerSample) + { + case 1: + return WriteValue8Bit; + case 2: + return WriteValue16Bit; + case 3: + return WriteValue24Bit; + case 4: + return WriteValue32Bit; + default: + throw new InvalidDataException("Cannot write bits per sample of " + _header.BitsPerSample); + } + } + + public void Dispose() + { + Close(); + } + + public void Close() + { + if (_stream != null) + { + _stream.Close(); + } + } + + //////////////////////////////////////// SPECTRUM /////////////////////////////////////////////////////////// + + public SpectrogramData GenerateSpectrogram(int delayInMilliseconds, string spectrogramDirectory) + { + const int fftSize = 256; // image height = fft size / 2 + const int imageWidth = 1024; + + int delaySampleCount = (int)(_header.SampleRate * (delayInMilliseconds / TimeCode.BaseUnit)); + + // ignore negative delays for now (pretty sure it can't happen in mkv and some places pass in -1 by mistake) + delaySampleCount = Math.Max(delaySampleCount, 0); + + var images = new List(); + var drawer = new SpectrogramDrawer(fftSize); + var readSampleDataValue = GetSampleDataReader(); + Task saveImageTask = null; + double sampleAndChannelScale = GetSampleAndChannelScale(); + long fileSampleCount = _header.LengthInSamples; + long fileSampleOffset = -delaySampleCount; + int chunkSampleCount = fftSize * imageWidth; + int chunkCount = (int)Math.Ceiling((double)(fileSampleCount + delaySampleCount) / chunkSampleCount); + byte[] data = new byte[chunkSampleCount * _header.BlockAlign]; + double[] chunkSamples = new double[chunkSampleCount]; + + Directory.CreateDirectory(spectrogramDirectory); + + _stream.Seek(_header.DataStartPosition, SeekOrigin.Begin); + + // for negative delays, skip samples at the beginning + if (fileSampleOffset > 0) + { + _stream.Seek(fileSampleOffset * _header.BlockAlign, SeekOrigin.Current); + } + + for (int iChunk = 0; iChunk < chunkCount; iChunk++) + { + // calculate padding at the beginning (for positive delays) + int startPaddingSampleCount = 0; + if (fileSampleOffset < 0) + { + startPaddingSampleCount = (int)Math.Min(-fileSampleOffset, chunkSampleCount); + fileSampleOffset += startPaddingSampleCount; + } + + // calculate how many samples to read from the file + long fileSamplesRemaining = fileSampleCount - Math.Max(fileSampleOffset, 0); + int fileReadSampleCount = (int)Math.Min(fileSamplesRemaining, chunkSampleCount - startPaddingSampleCount); + + // calculate padding at the end (when the data isn't an even multiple of our chunk size) + int endPaddingSampleCount = chunkSampleCount - startPaddingSampleCount - fileReadSampleCount; + + int chunkSampleOffset = 0; + + // add padding at the beginning + if (startPaddingSampleCount > 0) + { + Array.Clear(chunkSamples, chunkSampleOffset, startPaddingSampleCount); + chunkSampleOffset += startPaddingSampleCount; + } + + // read samples from the file + if (fileReadSampleCount > 0) + { + int fileReadByteCount = fileReadSampleCount * _header.BlockAlign; + _stream.Read(data, 0, fileReadByteCount); + fileSampleOffset += fileReadSampleCount; + + int dataByteOffset = 0; + while (dataByteOffset < fileReadByteCount) + { + double value = 0D; + for (int iChannel = 0; iChannel < _header.NumberOfChannels; iChannel++) + { + value += readSampleDataValue(data, ref dataByteOffset); + } + chunkSamples[chunkSampleOffset] = value * sampleAndChannelScale; + chunkSampleOffset += 1; + } + } + + // add padding at the end + if (endPaddingSampleCount > 0) + { + Array.Clear(chunkSamples, chunkSampleOffset, endPaddingSampleCount); + } + + // generate spectrogram for this chunk + Bitmap bmp = drawer.Draw(chunkSamples); + images.Add(bmp); + + // wait for previous image to finish saving + saveImageTask?.Wait(); + + // save image + string imagePath = Path.Combine(spectrogramDirectory, iChunk + ".gif"); + saveImageTask = Task.Factory.StartNew(() => + { + bmp.Save(imagePath, System.Drawing.Imaging.ImageFormat.Gif); + }); + } + + // wait for last image to finish saving + saveImageTask?.Wait(); + + var doc = new XmlDocument(); + var culture = CultureInfo.InvariantCulture; + double sampleDuration = (double)fftSize / _header.SampleRate; + doc.LoadXml(""); + doc.DocumentElement.SelectSingleNode("SampleDuration").InnerText = sampleDuration.ToString(culture); + doc.DocumentElement.SelectSingleNode("NFFT").InnerText = fftSize.ToString(culture); + doc.DocumentElement.SelectSingleNode("ImageWidth").InnerText = imageWidth.ToString(culture); + doc.DocumentElement.SelectSingleNode("SecondsPerImage").InnerText = ((double)chunkSampleCount / _header.SampleRate).ToString(culture); // currently unused; for backwards compatibility + doc.Save(Path.Combine(spectrogramDirectory, "Info.xml")); + + return new SpectrogramData(fftSize, imageWidth, sampleDuration, images); + } + + public class SpectrogramDrawer + { + private const double RaisedCosineWindowScale = 0.5; + private const int MagnitudeIndexRange = 256; + + private readonly int _nfft; + private readonly MagnitudeToIndexMapper _mapper; + private readonly RealFFT _fft; + private readonly FastBitmap.PixelData[] _palette; + private readonly double[] _segment; + private readonly double[] _window; + private readonly double[] _magnitude1; + private readonly double[] _magnitude2; + + public static string GetSpectrogramFolder(string videoFileName, int trackNumber = 0) + { + var dir = Configuration.SpectrogramsDirectory.TrimEnd(Path.DirectorySeparatorChar); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + string spectrogramFolder; + if (trackNumber > 0) + { + spectrogramFolder = MovieHasher.GenerateHash(videoFileName) + "-" + trackNumber; + } + else + { + spectrogramFolder = MovieHasher.GenerateHash(videoFileName); + } + + return Path.Combine(dir, spectrogramFolder); + } + + public SpectrogramDrawer(int nfft) + { + _nfft = nfft; + _mapper = new MagnitudeToIndexMapper(100.0, MagnitudeIndexRange - 1); + _fft = new RealFFT(nfft); + _palette = GeneratePalette(); + _segment = new double[nfft]; + _window = CreateRaisedCosineWindow(nfft); + _magnitude1 = new double[nfft / 2]; + _magnitude2 = new double[nfft / 2]; + + double scaleCorrection = 1.0 / (RaisedCosineWindowScale * _fft.ForwardScaleFactor); + for (int i = 0; i < _window.Length; i++) + { + _window[i] *= scaleCorrection; + } + } + + public Bitmap Draw(double[] samples) + { + int width = samples.Length / _nfft; + int height = _nfft / 2; + var bmp = new FastBitmap(new Bitmap(width, height)); + bmp.LockImage(); + for (int x = 0; x < width; x++) + { + // process 2 segments offset by -1/4 and 1/4 fft size, resulting in 1/2 fft size + // window spacing (the minimum overlap to avoid discarding parts of the signal) + ProcessSegment(samples, (x * _nfft) - (x > 0 ? _nfft / 4 : 0), _magnitude1); + ProcessSegment(samples, (x * _nfft) + (x < width - 1 ? _nfft / 4 : 0), _magnitude2); + + // draw + for (int y = 0; y < height; y++) + { + int colorIndex = _mapper.Map((_magnitude1[y] + _magnitude2[y]) / 2.0); + bmp.SetPixel(x, height - y - 1, _palette[colorIndex]); + } + } + bmp.UnlockImage(); + return bmp.GetBitmap(); + } + + private void ProcessSegment(double[] samples, int offset, double[] magnitude) + { + // read a segment of the recorded signal + for (int i = 0; i < _nfft; i++) + { + _segment[i] = samples[offset + i] * _window[i]; + } + + // transform to the frequency domain + _fft.ComputeForward(_segment); + + // compute the magnitude of the spectrum + MagnitudeSpectrum(_segment, magnitude); + } + + private static double[] CreateRaisedCosineWindow(int n) + { + double twoPiOverN = Math.PI * 2.0 / n; + double[] dst = new double[n]; + for (int i = 0; i < n; i++) + { + dst[i] = 0.5 * (1.0 - Math.Cos(twoPiOverN * i)); + } + + return dst; + } + + private static void MagnitudeSpectrum(double[] segment, double[] magnitude) + { + magnitude[0] = Math.Sqrt(SquareSum(segment[0], segment[1])); + for (int i = 2; i < segment.Length; i += 2) + { + magnitude[i / 2] = Math.Sqrt(SquareSum(segment[i], segment[i + 1]) * 2.0); + } + } + + private static double SquareSum(double a, double b) + { + return a * a + b * b; + } + + private static FastBitmap.PixelData[] GeneratePalette() + { + var palette = new FastBitmap.PixelData[MagnitudeIndexRange]; + if (Configuration.Settings.VideoControls.SpectrogramAppearance == "Classic") + { + for (int colorIndex = 0; colorIndex < MagnitudeIndexRange; colorIndex++) + { + palette[colorIndex] = new FastBitmap.PixelData(PaletteValue(colorIndex, MagnitudeIndexRange)); + } + } + else + { + var list = SmoothColors(0, 0, 0, Configuration.Settings.VideoControls.WaveformColor.R, + Configuration.Settings.VideoControls.WaveformColor.G, + Configuration.Settings.VideoControls.WaveformColor.B, MagnitudeIndexRange); + for (int i = 0; i < MagnitudeIndexRange; i++) + { + palette[i] = new FastBitmap.PixelData(list[i]); + } + } + return palette; + } + + private static Color PaletteValue(int x, int range) + { + double g; + double r; + double b; + + double r4 = range / 4.0; + const double u = 255; + + if (x < r4) + { + b = x / r4; + g = 0; + r = 0; + } + else if (x < 2 * r4) + { + b = (1 - (x - r4) / r4); + g = 1 - b; + r = 0; + } + else if (x < 3 * r4) + { + b = 0; + g = (2 - (x - r4) / r4); + r = 1 - g; + } + else + { + b = (x - 3 * r4) / r4; + g = 0; + r = 1 - b; + } + + r = ((int)(Math.Sqrt(r) * u)) & 0xff; + g = ((int)(Math.Sqrt(g) * u)) & 0xff; + b = ((int)(Math.Sqrt(b) * u)) & 0xff; + + return Color.FromArgb((int)r, (int)g, (int)b); + } + + private static List SmoothColors(int fromR, int fromG, int fromB, int toR, int toG, int toB, int count) + { + while (toR < 255 && toG < 255 && toB < 255) + { + toR++; + toG++; + toB++; + } + + var list = new List(); + double r = fromR; + double g = fromG; + double b = fromB; + double diffR = (toR - fromR) / (double)count; + double diffG = (toG - fromG) / (double)count; + double diffB = (toB - fromB) / (double)count; + + for (int i = 0; i < count; i++) + { + list.Add(Color.FromArgb((int)r, (int)g, (int)b)); + r += diffR; + g += diffG; + b += diffB; + } + return list; + } + + /// Maps magnitudes in the range [-decibelRange .. 0] dB to palette index values in the range [0 .. indexMax] + private class MagnitudeToIndexMapper + { + private readonly double _minMagnitude; + private readonly double _multiplier; + private readonly double _addend; + + public MagnitudeToIndexMapper(double decibelRange, int indexMax) + { + double mappingScale = indexMax / decibelRange; + _minMagnitude = Math.Pow(10.0, -decibelRange / 20.0); + _multiplier = 20.0 * mappingScale; + _addend = decibelRange * mappingScale; + } + + public int Map(double magnitude) + { + return magnitude >= _minMagnitude ? (int)(Math.Log10(magnitude) * _multiplier + _addend) : 0; + } + + // Less optimized but readable version of the above + public static int Map(double magnitude, double decibelRange, int indexMax) + { + if (Math.Abs(magnitude) < 0.01) + { + return 0; + } + + double decibelLevel = 20.0 * Math.Log10(magnitude); + return decibelLevel >= -decibelRange ? (int)(indexMax * (decibelLevel + decibelRange) / decibelRange) : 0; + } + } + } + } +} diff --git a/libse/XmlDeserializerGenerator.cs b/libse/Common/XmlDeserializerGenerator.cs similarity index 99% rename from libse/XmlDeserializerGenerator.cs rename to libse/Common/XmlDeserializerGenerator.cs index b3eadbc01..8c1b58aec 100644 --- a/libse/XmlDeserializerGenerator.cs +++ b/libse/Common/XmlDeserializerGenerator.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { public static class XmlDeserializerGenerator { diff --git a/libse/ZipExtractor.cs b/libse/Common/ZipExtractor.cs similarity index 99% rename from libse/ZipExtractor.cs rename to libse/Common/ZipExtractor.cs index a17dbd4d8..e2cf1fe1b 100644 --- a/libse/ZipExtractor.cs +++ b/libse/Common/ZipExtractor.cs @@ -10,7 +10,7 @@ using System.IO; using System.IO.Compression; using System.Text; -namespace Nikse.SubtitleEdit.Core +namespace Nikse.SubtitleEdit.Core.Common { /// /// Zip archive decompression. Represents a Zip file. diff --git a/libse/ContainerFormats/MaterialExchangeFormat/MxfParser.cs b/libse/ContainerFormats/MaterialExchangeFormat/MxfParser.cs index 89e774e0d..e850447c5 100644 --- a/libse/ContainerFormats/MaterialExchangeFormat/MxfParser.cs +++ b/libse/ContainerFormats/MaterialExchangeFormat/MxfParser.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat { diff --git a/libse/ContainerFormats/Matroska/MatroskaFile.cs b/libse/ContainerFormats/Matroska/MatroskaFile.cs index c9133947c..9fe39d3c4 100644 --- a/libse/ContainerFormats/Matroska/MatroskaFile.cs +++ b/libse/ContainerFormats/Matroska/MatroskaFile.cs @@ -5,6 +5,7 @@ using System.IO; using System.IO.MemoryMappedFiles; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.Matroska { diff --git a/libse/ContainerFormats/Matroska/MatroskaSubtitle.cs b/libse/ContainerFormats/Matroska/MatroskaSubtitle.cs index 4cf44f9d1..dfec566c3 100644 --- a/libse/ContainerFormats/Matroska/MatroskaSubtitle.cs +++ b/libse/ContainerFormats/Matroska/MatroskaSubtitle.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.Matroska { diff --git a/libse/ContainerFormats/Mp4/Boxes/Stbl.cs b/libse/ContainerFormats/Mp4/Boxes/Stbl.cs index b83763f8a..8516a7052 100644 --- a/libse/ContainerFormats/Mp4/Boxes/Stbl.cs +++ b/libse/ContainerFormats/Mp4/Boxes/Stbl.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.Mp4.Boxes { diff --git a/libse/ContainerFormats/Mp4/Boxes/Vttc.cs b/libse/ContainerFormats/Mp4/Boxes/Vttc.cs index ce185b2bb..9869486dc 100644 --- a/libse/ContainerFormats/Mp4/Boxes/Vttc.cs +++ b/libse/ContainerFormats/Mp4/Boxes/Vttc.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.Mp4.Boxes { diff --git a/libse/ContainerFormats/Mp4/CmafParser.cs b/libse/ContainerFormats/Mp4/CmafParser.cs index cd5a9195a..2b076d6b3 100644 --- a/libse/ContainerFormats/Mp4/CmafParser.cs +++ b/libse/ContainerFormats/Mp4/CmafParser.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.Mp4 { diff --git a/libse/ContainerFormats/RiffDecodeHeader.cs b/libse/ContainerFormats/RiffDecodeHeader.cs index b65db273d..a9d060e81 100644 --- a/libse/ContainerFormats/RiffDecodeHeader.cs +++ b/libse/ContainerFormats/RiffDecodeHeader.cs @@ -2,6 +2,7 @@ using System; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats { diff --git a/libse/ContainerFormats/TransportStream/DvbSubPes.cs b/libse/ContainerFormats/TransportStream/DvbSubPes.cs index ef0f58261..0f0c4ad8c 100644 --- a/libse/ContainerFormats/TransportStream/DvbSubPes.cs +++ b/libse/ContainerFormats/TransportStream/DvbSubPes.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/ObjectDataSegment.cs b/libse/ContainerFormats/TransportStream/ObjectDataSegment.cs index eebe67a9d..63f2f3735 100644 --- a/libse/ContainerFormats/TransportStream/ObjectDataSegment.cs +++ b/libse/ContainerFormats/TransportStream/ObjectDataSegment.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/ProgramMapTableParser.cs b/libse/ContainerFormats/TransportStream/ProgramMapTableParser.cs index e9a191ade..7f8f25cf8 100644 --- a/libse/ContainerFormats/TransportStream/ProgramMapTableParser.cs +++ b/libse/ContainerFormats/TransportStream/ProgramMapTableParser.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/Teletext.cs b/libse/ContainerFormats/TransportStream/Teletext.cs index 13d98454e..e86a35208 100644 --- a/libse/ContainerFormats/TransportStream/Teletext.cs +++ b/libse/ContainerFormats/TransportStream/Teletext.cs @@ -14,6 +14,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/TeletextRunSettings.cs b/libse/ContainerFormats/TransportStream/TeletextRunSettings.cs index 3692088a7..49cabad2c 100644 --- a/libse/ContainerFormats/TransportStream/TeletextRunSettings.cs +++ b/libse/ContainerFormats/TransportStream/TeletextRunSettings.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/TransportStreamParser.cs b/libse/ContainerFormats/TransportStream/TransportStreamParser.cs index 4107d4470..45ba7fe74 100644 --- a/libse/ContainerFormats/TransportStream/TransportStreamParser.cs +++ b/libse/ContainerFormats/TransportStream/TransportStreamParser.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream { diff --git a/libse/ContainerFormats/TransportStream/TransportStreamSubtitle.cs b/libse/ContainerFormats/TransportStream/TransportStreamSubtitle.cs index 32951d163..9fae80749 100644 --- a/libse/ContainerFormats/TransportStream/TransportStreamSubtitle.cs +++ b/libse/ContainerFormats/TransportStream/TransportStreamSubtitle.cs @@ -1,4 +1,5 @@ using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream diff --git a/libse/ContainerFormats/XSub.cs b/libse/ContainerFormats/XSub.cs index 69de95bd9..d3497fd3e 100644 --- a/libse/ContainerFormats/XSub.cs +++ b/libse/ContainerFormats/XSub.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.ContainerFormats { diff --git a/libse/Dictionaries/NameList.cs b/libse/Dictionaries/NameList.cs index 6b095e97e..08d4dc63b 100644 --- a/libse/Dictionaries/NameList.cs +++ b/libse/Dictionaries/NameList.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Dictionaries { diff --git a/libse/Dictionaries/OcrFixReplaceList.cs b/libse/Dictionaries/OcrFixReplaceList.cs index 51fb9c268..058db73c8 100644 --- a/libse/Dictionaries/OcrFixReplaceList.cs +++ b/libse/Dictionaries/OcrFixReplaceList.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Dictionaries { diff --git a/libse/Forms/CheckForUpdatesHelper.cs b/libse/Forms/CheckForUpdatesHelper.cs index 83114872c..1ed088c49 100644 --- a/libse/Forms/CheckForUpdatesHelper.cs +++ b/libse/Forms/CheckForUpdatesHelper.cs @@ -3,6 +3,7 @@ using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms { diff --git a/libse/Forms/DurationsBridgeGaps.cs b/libse/Forms/DurationsBridgeGaps.cs index dffbfe4c4..a15a23967 100644 --- a/libse/Forms/DurationsBridgeGaps.cs +++ b/libse/Forms/DurationsBridgeGaps.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.Forms diff --git a/libse/Forms/FixCommonErrors/AddMissingQuotes.cs b/libse/Forms/FixCommonErrors/AddMissingQuotes.cs index cc327f576..48fccbf36 100644 --- a/libse/Forms/FixCommonErrors/AddMissingQuotes.cs +++ b/libse/Forms/FixCommonErrors/AddMissingQuotes.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/EmptyFixCallback.cs b/libse/Forms/FixCommonErrors/EmptyFixCallback.cs index 4bf36e6e7..1a0705c09 100644 --- a/libse/Forms/FixCommonErrors/EmptyFixCallback.cs +++ b/libse/Forms/FixCommonErrors/EmptyFixCallback.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.SubtitleFormats; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/Fix3PlusLines.cs b/libse/Forms/FixCommonErrors/Fix3PlusLines.cs index b5fe4f657..d0ad0f8ad 100644 --- a/libse/Forms/FixCommonErrors/Fix3PlusLines.cs +++ b/libse/Forms/FixCommonErrors/Fix3PlusLines.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixAloneLowercaseIToUppercaseI.cs b/libse/Forms/FixCommonErrors/FixAloneLowercaseIToUppercaseI.cs index 6275ef0be..c66696547 100644 --- a/libse/Forms/FixCommonErrors/FixAloneLowercaseIToUppercaseI.cs +++ b/libse/Forms/FixCommonErrors/FixAloneLowercaseIToUppercaseI.cs @@ -1,5 +1,6 @@ using System; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixCommas.cs b/libse/Forms/FixCommonErrors/FixCommas.cs index 6dfabf83f..4171f003f 100644 --- a/libse/Forms/FixCommonErrors/FixCommas.cs +++ b/libse/Forms/FixCommonErrors/FixCommas.cs @@ -1,5 +1,6 @@ using Nikse.SubtitleEdit.Core.Interfaces; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixContinuationStyle.cs b/libse/Forms/FixCommonErrors/FixContinuationStyle.cs index 578efbc35..515061b3f 100644 --- a/libse/Forms/FixCommonErrors/FixContinuationStyle.cs +++ b/libse/Forms/FixCommonErrors/FixContinuationStyle.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.Dictionaries; using Nikse.SubtitleEdit.Core.Enums; using Nikse.SubtitleEdit.Core.Interfaces; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixDanishLetterI.cs b/libse/Forms/FixCommonErrors/FixDanishLetterI.cs index 293163c28..c3af26c3b 100644 --- a/libse/Forms/FixCommonErrors/FixDanishLetterI.cs +++ b/libse/Forms/FixCommonErrors/FixDanishLetterI.cs @@ -1,4 +1,5 @@ using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixDialogsOnOneLine.cs b/libse/Forms/FixCommonErrors/FixDialogsOnOneLine.cs index 241cae99d..1b289dd1a 100644 --- a/libse/Forms/FixCommonErrors/FixDialogsOnOneLine.cs +++ b/libse/Forms/FixCommonErrors/FixDialogsOnOneLine.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixDoubleApostrophes.cs b/libse/Forms/FixCommonErrors/FixDoubleApostrophes.cs index 787c93ae2..024cd9781 100644 --- a/libse/Forms/FixCommonErrors/FixDoubleApostrophes.cs +++ b/libse/Forms/FixCommonErrors/FixDoubleApostrophes.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixDoubleDash.cs b/libse/Forms/FixCommonErrors/FixDoubleDash.cs index c79281046..adbf73982 100644 --- a/libse/Forms/FixCommonErrors/FixDoubleDash.cs +++ b/libse/Forms/FixCommonErrors/FixDoubleDash.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixDoubleGreaterThan.cs b/libse/Forms/FixCommonErrors/FixDoubleGreaterThan.cs index 7bc94e4d2..9a9a020af 100644 --- a/libse/Forms/FixCommonErrors/FixDoubleGreaterThan.cs +++ b/libse/Forms/FixCommonErrors/FixDoubleGreaterThan.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixEllipsesStart.cs b/libse/Forms/FixCommonErrors/FixEllipsesStart.cs index 70c903e29..6e82b7a2d 100644 --- a/libse/Forms/FixCommonErrors/FixEllipsesStart.cs +++ b/libse/Forms/FixCommonErrors/FixEllipsesStart.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixEmptyLines.cs b/libse/Forms/FixCommonErrors/FixEmptyLines.cs index 27dc77625..e02c037ff 100644 --- a/libse/Forms/FixCommonErrors/FixEmptyLines.cs +++ b/libse/Forms/FixCommonErrors/FixEmptyLines.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixHyphensInDialog.cs b/libse/Forms/FixCommonErrors/FixHyphensInDialog.cs index 9caa1eda3..c35082a70 100644 --- a/libse/Forms/FixCommonErrors/FixHyphensInDialog.cs +++ b/libse/Forms/FixCommonErrors/FixHyphensInDialog.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixHyphensRemoveDashSingleLine.cs b/libse/Forms/FixCommonErrors/FixHyphensRemoveDashSingleLine.cs index e84924ae3..0063c284b 100644 --- a/libse/Forms/FixCommonErrors/FixHyphensRemoveDashSingleLine.cs +++ b/libse/Forms/FixCommonErrors/FixHyphensRemoveDashSingleLine.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixInvalidItalicTags.cs b/libse/Forms/FixCommonErrors/FixInvalidItalicTags.cs index 31632121e..2deed4b50 100644 --- a/libse/Forms/FixCommonErrors/FixInvalidItalicTags.cs +++ b/libse/Forms/FixCommonErrors/FixInvalidItalicTags.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixLongDisplayTimes.cs b/libse/Forms/FixCommonErrors/FixLongDisplayTimes.cs index 955ce76ec..cb0b5da0f 100644 --- a/libse/Forms/FixCommonErrors/FixLongDisplayTimes.cs +++ b/libse/Forms/FixCommonErrors/FixLongDisplayTimes.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixLongLines.cs b/libse/Forms/FixCommonErrors/FixLongLines.cs index e4fc55291..4dd2c4e08 100644 --- a/libse/Forms/FixCommonErrors/FixLongLines.cs +++ b/libse/Forms/FixCommonErrors/FixLongLines.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixMissingOpenBracket.cs b/libse/Forms/FixCommonErrors/FixMissingOpenBracket.cs index 3cf0dfb07..d788207c5 100644 --- a/libse/Forms/FixCommonErrors/FixMissingOpenBracket.cs +++ b/libse/Forms/FixCommonErrors/FixMissingOpenBracket.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixMissingPeriodsAtEndOfLine.cs b/libse/Forms/FixCommonErrors/FixMissingPeriodsAtEndOfLine.cs index 40a640b9c..7b661c638 100644 --- a/libse/Forms/FixCommonErrors/FixMissingPeriodsAtEndOfLine.cs +++ b/libse/Forms/FixCommonErrors/FixMissingPeriodsAtEndOfLine.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.Interfaces; using System; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixMissingSpaces.cs b/libse/Forms/FixCommonErrors/FixMissingSpaces.cs index baf4e79c9..b9ea8689f 100644 --- a/libse/Forms/FixCommonErrors/FixMissingSpaces.cs +++ b/libse/Forms/FixCommonErrors/FixMissingSpaces.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.Interfaces; using System; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixMusicNotation.cs b/libse/Forms/FixCommonErrors/FixMusicNotation.cs index 32b907667..e5c46796d 100644 --- a/libse/Forms/FixCommonErrors/FixMusicNotation.cs +++ b/libse/Forms/FixCommonErrors/FixMusicNotation.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixOverlappingDisplayTimes.cs b/libse/Forms/FixCommonErrors/FixOverlappingDisplayTimes.cs index f637e640b..cbe0565f2 100644 --- a/libse/Forms/FixCommonErrors/FixOverlappingDisplayTimes.cs +++ b/libse/Forms/FixCommonErrors/FixOverlappingDisplayTimes.cs @@ -1,5 +1,6 @@ using Nikse.SubtitleEdit.Core.SubtitleFormats; using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixShortDisplayTimes.cs b/libse/Forms/FixCommonErrors/FixShortDisplayTimes.cs index 3d0520e09..cdffdb950 100644 --- a/libse/Forms/FixCommonErrors/FixShortDisplayTimes.cs +++ b/libse/Forms/FixCommonErrors/FixShortDisplayTimes.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixShortGaps.cs b/libse/Forms/FixCommonErrors/FixShortGaps.cs index 6a29a5d39..8e8d6c19d 100644 --- a/libse/Forms/FixCommonErrors/FixShortGaps.cs +++ b/libse/Forms/FixCommonErrors/FixShortGaps.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixShortLines.cs b/libse/Forms/FixCommonErrors/FixShortLines.cs index d410824b6..5dd0738c3 100644 --- a/libse/Forms/FixCommonErrors/FixShortLines.cs +++ b/libse/Forms/FixCommonErrors/FixShortLines.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixShortLinesAll.cs b/libse/Forms/FixCommonErrors/FixShortLinesAll.cs index c68397458..c1f2c3a6a 100644 --- a/libse/Forms/FixCommonErrors/FixShortLinesAll.cs +++ b/libse/Forms/FixCommonErrors/FixShortLinesAll.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixSpanishInvertedQuestionAndExclamationMarks.cs b/libse/Forms/FixCommonErrors/FixSpanishInvertedQuestionAndExclamationMarks.cs index 6f508efe6..239157320 100644 --- a/libse/Forms/FixCommonErrors/FixSpanishInvertedQuestionAndExclamationMarks.cs +++ b/libse/Forms/FixCommonErrors/FixSpanishInvertedQuestionAndExclamationMarks.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterColon.cs b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterColon.cs index f4b3def40..f03d2fe09 100644 --- a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterColon.cs +++ b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterColon.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterParagraph.cs b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterParagraph.cs index af711a346..a37e63ca1 100644 --- a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterParagraph.cs +++ b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterParagraph.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterPeriodInsideParagraph.cs b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterPeriodInsideParagraph.cs index f6d9b3d6f..294147531 100644 --- a/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterPeriodInsideParagraph.cs +++ b/libse/Forms/FixCommonErrors/FixStartWithUppercaseLetterAfterPeriodInsideParagraph.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.Interfaces; using System.Globalization; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixTurkishAnsiToUnicode.cs b/libse/Forms/FixCommonErrors/FixTurkishAnsiToUnicode.cs index 9353ce341..a2ea8067c 100644 --- a/libse/Forms/FixCommonErrors/FixTurkishAnsiToUnicode.cs +++ b/libse/Forms/FixCommonErrors/FixTurkishAnsiToUnicode.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixUnnecessaryLeadingDots.cs b/libse/Forms/FixCommonErrors/FixUnnecessaryLeadingDots.cs index 79d89e663..a6dd4d592 100644 --- a/libse/Forms/FixCommonErrors/FixUnnecessaryLeadingDots.cs +++ b/libse/Forms/FixCommonErrors/FixUnnecessaryLeadingDots.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/FixUnneededPeriods.cs b/libse/Forms/FixCommonErrors/FixUnneededPeriods.cs index 075484275..1dad2700f 100644 --- a/libse/Forms/FixCommonErrors/FixUnneededPeriods.cs +++ b/libse/Forms/FixCommonErrors/FixUnneededPeriods.cs @@ -1,5 +1,6 @@ using System; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixUnneededSpaces.cs b/libse/Forms/FixCommonErrors/FixUnneededSpaces.cs index 644d17c9d..3bc958458 100644 --- a/libse/Forms/FixCommonErrors/FixUnneededSpaces.cs +++ b/libse/Forms/FixCommonErrors/FixUnneededSpaces.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/FixUppercaseIInsideWords.cs b/libse/Forms/FixCommonErrors/FixUppercaseIInsideWords.cs index 827bb81ce..f75379ca7 100644 --- a/libse/Forms/FixCommonErrors/FixUppercaseIInsideWords.cs +++ b/libse/Forms/FixCommonErrors/FixUppercaseIInsideWords.cs @@ -1,5 +1,6 @@ using System; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors diff --git a/libse/Forms/FixCommonErrors/Helper.cs b/libse/Forms/FixCommonErrors/Helper.cs index 67e0b3eac..f52faf247 100644 --- a/libse/Forms/FixCommonErrors/Helper.cs +++ b/libse/Forms/FixCommonErrors/Helper.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/NormalizeStrings.cs b/libse/Forms/FixCommonErrors/NormalizeStrings.cs index 2e2ab632f..7a56d6012 100644 --- a/libse/Forms/FixCommonErrors/NormalizeStrings.cs +++ b/libse/Forms/FixCommonErrors/NormalizeStrings.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/FixCommonErrors/RemoveSpaceBetweenNumbers.cs b/libse/Forms/FixCommonErrors/RemoveSpaceBetweenNumbers.cs index 06020f440..5e937a645 100644 --- a/libse/Forms/FixCommonErrors/RemoveSpaceBetweenNumbers.cs +++ b/libse/Forms/FixCommonErrors/RemoveSpaceBetweenNumbers.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.Interfaces; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors { diff --git a/libse/Forms/MergeLinesWithSameTimeCodes.cs b/libse/Forms/MergeLinesWithSameTimeCodes.cs index 83eb7f9d6..80e13a4eb 100644 --- a/libse/Forms/MergeLinesWithSameTimeCodes.cs +++ b/libse/Forms/MergeLinesWithSameTimeCodes.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms { diff --git a/libse/Forms/MoveWordUpDown.cs b/libse/Forms/MoveWordUpDown.cs index 176583550..b8ccba7d1 100644 --- a/libse/Forms/MoveWordUpDown.cs +++ b/libse/Forms/MoveWordUpDown.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms { diff --git a/libse/Forms/RemoveInterjection.cs b/libse/Forms/RemoveInterjection.cs index 0966bae04..fe8eb48f1 100644 --- a/libse/Forms/RemoveInterjection.cs +++ b/libse/Forms/RemoveInterjection.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms { diff --git a/libse/Forms/RemoveTextForHI.cs b/libse/Forms/RemoveTextForHI.cs index 8002fd112..2b7b07ca2 100644 --- a/libse/Forms/RemoveTextForHI.cs +++ b/libse/Forms/RemoveTextForHI.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Forms.FixCommonErrors; namespace Nikse.SubtitleEdit.Core.Forms diff --git a/libse/Forms/RemoveTextForHISettings.cs b/libse/Forms/RemoveTextForHISettings.cs index 1fed742a9..a195b33b4 100644 --- a/libse/Forms/RemoveTextForHISettings.cs +++ b/libse/Forms/RemoveTextForHISettings.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Dictionaries; namespace Nikse.SubtitleEdit.Core.Forms diff --git a/libse/Forms/SplitLongLinesHelper.cs b/libse/Forms/SplitLongLinesHelper.cs index 5022f5cae..7be4e0071 100644 --- a/libse/Forms/SplitLongLinesHelper.cs +++ b/libse/Forms/SplitLongLinesHelper.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Forms { diff --git a/libse/Interfaces/IFixCallbacks.cs b/libse/Interfaces/IFixCallbacks.cs index 287f4897a..1a975e807 100644 --- a/libse/Interfaces/IFixCallbacks.cs +++ b/libse/Interfaces/IFixCallbacks.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.Interfaces diff --git a/libse/LanguageDeserializer.cs b/libse/LanguageDeserializer.cs index 845076e4f..987385988 100644 --- a/libse/LanguageDeserializer.cs +++ b/libse/LanguageDeserializer.cs @@ -622,21 +622,9 @@ namespace Nikse.SubtitleEdit.Core case "BatchConvert/RemoveLineBreaks": language.BatchConvert.RemoveLineBreaks = reader.Value; break; - case "BatchConvert/DeleteLines": - language.BatchConvert.DeleteLines = reader.Value; - break; case "BatchConvert/TryToUseSourceEncoding": language.BatchConvert.TryToUseSourceEncoding = reader.Value; break; - case "BatchConvert/DeleteFirstLines": - language.BatchConvert.DeleteFirstLines = reader.Value; - break; - case "BatchConvert/DeleteLastLines": - language.BatchConvert.DeleteLastLines = reader.Value; - break; - case "BatchConvert/DeleteContaining": - language.BatchConvert.DeleteContaining = reader.Value; - break; case "BatchConvert/MkvLanguageInOutputFileName": language.BatchConvert.MkvLanguageInOutputFileName = reader.Value; break; @@ -5752,15 +5740,6 @@ namespace Nikse.SubtitleEdit.Core case "Settings/TextBox": language.Settings.TextBox = reader.Value; break; - case "Settings/UseSyntaxColoring": - language.Settings.UseSyntaxColoring = reader.Value; - break; - case "Settings/HtmlColor": - language.Settings.HtmlColor = reader.Value; - break; - case "Settings/AssaColor": - language.Settings.AssaColor = reader.Value; - break; case "Settings/UpdateShortcut": language.Settings.UpdateShortcut = reader.Value; break; @@ -5794,12 +5773,6 @@ namespace Nikse.SubtitleEdit.Core case "Settings/AdjustStartDownEndUpAndGoToNext": language.Settings.AdjustStartDownEndUpAndGoToNext = reader.Value; break; - case "Settings/AdjustSetStartAndEndOfPrevious": - language.Settings.AdjustSetStartAndEndOfPrevious = reader.Value; - break; - case "Settings/AdjustSetStartAndEndOfPreviousAndGoToNext": - language.Settings.AdjustSetStartAndEndOfPreviousAndGoToNext = reader.Value; - break; case "Settings/AdjustSelected100MsForward": language.Settings.AdjustSelected100MsForward = reader.Value; break; @@ -5902,9 +5875,6 @@ namespace Nikse.SubtitleEdit.Core case "Settings/GoToNext": language.Settings.GoToNext = reader.Value; break; - case "Settings/GoToNextCursorAtEnd": - language.Settings.GoToNextCursorAtEnd = reader.Value; - break; case "Settings/GoToPrevious": language.Settings.GoToPrevious = reader.Value; break; @@ -6274,9 +6244,6 @@ namespace Nikse.SubtitleEdit.Core case "Settings/MainTextBoxSelectionToUpper": language.Settings.MainTextBoxSelectionToUpper = reader.Value; break; - case "Settings/MainTextBoxSelectionToggleCasing": - language.Settings.MainTextBoxSelectionToggleCasing = reader.Value; - break; case "Settings/MainTextBoxSelectionToRuby": language.Settings.MainTextBoxSelectionToRuby = reader.Value; break; diff --git a/libse/NetflixQualityCheck/NetflixCheckBridgeGaps.cs b/libse/NetflixQualityCheck/NetflixCheckBridgeGaps.cs index 657258fd1..c30069909 100644 --- a/libse/NetflixQualityCheck/NetflixCheckBridgeGaps.cs +++ b/libse/NetflixQualityCheck/NetflixCheckBridgeGaps.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs b/libse/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs index 5ad1dc362..74879b29d 100644 --- a/libse/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs +++ b/libse/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckGlyph.cs b/libse/NetflixQualityCheck/NetflixCheckGlyph.cs index 5448762e7..5e8760e05 100644 --- a/libse/NetflixQualityCheck/NetflixCheckGlyph.cs +++ b/libse/NetflixQualityCheck/NetflixCheckGlyph.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Compression; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckItalics.cs b/libse/NetflixQualityCheck/NetflixCheckItalics.cs index f07a1dbc0..a488b4178 100644 --- a/libse/NetflixQualityCheck/NetflixCheckItalics.cs +++ b/libse/NetflixQualityCheck/NetflixCheckItalics.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckMaxCps.cs b/libse/NetflixQualityCheck/NetflixCheckMaxCps.cs index 08d2b1950..1a8bc9bb8 100644 --- a/libse/NetflixQualityCheck/NetflixCheckMaxCps.cs +++ b/libse/NetflixQualityCheck/NetflixCheckMaxCps.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck diff --git a/libse/NetflixQualityCheck/NetflixCheckMaxDuration.cs b/libse/NetflixQualityCheck/NetflixCheckMaxDuration.cs index e5fbf3244..f5af4477a 100644 --- a/libse/NetflixQualityCheck/NetflixCheckMaxDuration.cs +++ b/libse/NetflixQualityCheck/NetflixCheckMaxDuration.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { public class NetflixCheckMaxDuration : INetflixQualityChecker { diff --git a/libse/NetflixQualityCheck/NetflixCheckMaxLineLength.cs b/libse/NetflixQualityCheck/NetflixCheckMaxLineLength.cs index 0bd437b60..69b45fcef 100644 --- a/libse/NetflixQualityCheck/NetflixCheckMaxLineLength.cs +++ b/libse/NetflixQualityCheck/NetflixCheckMaxLineLength.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.SubtitleFormats; using System; using System.Globalization; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckMinDuration.cs b/libse/NetflixQualityCheck/NetflixCheckMinDuration.cs index 4919e240b..16663a715 100644 --- a/libse/NetflixQualityCheck/NetflixCheckMinDuration.cs +++ b/libse/NetflixQualityCheck/NetflixCheckMinDuration.cs @@ -1,4 +1,5 @@ using System.Globalization; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckNumberOfLines.cs b/libse/NetflixQualityCheck/NetflixCheckNumberOfLines.cs index ebe3125c5..b1370ed7a 100644 --- a/libse/NetflixQualityCheck/NetflixCheckNumberOfLines.cs +++ b/libse/NetflixQualityCheck/NetflixCheckNumberOfLines.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs b/libse/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs index 94232dedc..7ba028125 100644 --- a/libse/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs +++ b/libse/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs @@ -1,5 +1,6 @@ using System; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckSceneChange.cs b/libse/NetflixQualityCheck/NetflixCheckSceneChange.cs index 55410655c..380f77198 100644 --- a/libse/NetflixQualityCheck/NetflixCheckSceneChange.cs +++ b/libse/NetflixQualityCheck/NetflixCheckSceneChange.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck diff --git a/libse/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs b/libse/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs index 706d40968..794450220 100644 --- a/libse/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs +++ b/libse/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs @@ -1,4 +1,5 @@ using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs b/libse/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs index 84c49bbe3..738f7c55f 100644 --- a/libse/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs +++ b/libse/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs b/libse/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs index 465fe3789..b1221d27c 100644 --- a/libse/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs +++ b/libse/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs b/libse/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs index dd802037f..e20fb3408 100644 --- a/libse/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs +++ b/libse/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs @@ -1,4 +1,5 @@ -using Nikse.SubtitleEdit.Core.SubtitleFormats; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixCheckWhiteSpace.cs b/libse/NetflixQualityCheck/NetflixCheckWhiteSpace.cs index e0c14c3b5..a59b5d31b 100644 --- a/libse/NetflixQualityCheck/NetflixCheckWhiteSpace.cs +++ b/libse/NetflixQualityCheck/NetflixCheckWhiteSpace.cs @@ -1,4 +1,5 @@ using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixHelper.cs b/libse/NetflixQualityCheck/NetflixHelper.cs index 334f4e23a..7ef51d8e8 100644 --- a/libse/NetflixQualityCheck/NetflixHelper.cs +++ b/libse/NetflixQualityCheck/NetflixHelper.cs @@ -1,4 +1,5 @@ using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/NetflixQualityCheck/NetflixQualityController.cs b/libse/NetflixQualityCheck/NetflixQualityController.cs index f65e56d77..514e6546a 100644 --- a/libse/NetflixQualityCheck/NetflixQualityController.cs +++ b/libse/NetflixQualityCheck/NetflixQualityController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.NetflixQualityCheck { diff --git a/libse/SpellCheck/SpellCheckWordLists.cs b/libse/SpellCheck/SpellCheckWordLists.cs index 2594bc4c3..60ce42fb2 100644 --- a/libse/SpellCheck/SpellCheckWordLists.cs +++ b/libse/SpellCheck/SpellCheckWordLists.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Dictionaries; using Nikse.SubtitleEdit.Core.Interfaces; diff --git a/libse/Subtitle.cs b/libse/Subtitle.cs index bdce28f74..126d5d9ef 100644 --- a/libse/Subtitle.cs +++ b/libse/Subtitle.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core { diff --git a/libse/SubtitleFormats/AQTitle.cs b/libse/SubtitleFormats/AQTitle.cs index bd52bf763..6c2830a61 100644 --- a/libse/SubtitleFormats/AQTitle.cs +++ b/libse/SubtitleFormats/AQTitle.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AbcIViewer.cs b/libse/SubtitleFormats/AbcIViewer.cs index f5f50b71d..ad8192616 100644 --- a/libse/SubtitleFormats/AbcIViewer.cs +++ b/libse/SubtitleFormats/AbcIViewer.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeAfterEffectsFTME.cs b/libse/SubtitleFormats/AdobeAfterEffectsFTME.cs index 86f32fe60..27b5f84a5 100644 --- a/libse/SubtitleFormats/AdobeAfterEffectsFTME.cs +++ b/libse/SubtitleFormats/AdobeAfterEffectsFTME.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncore.cs b/libse/SubtitleFormats/AdobeEncore.cs index 912ba2633..bb4027ab9 100644 --- a/libse/SubtitleFormats/AdobeEncore.cs +++ b/libse/SubtitleFormats/AdobeEncore.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncoreLineTabNewLine.cs b/libse/SubtitleFormats/AdobeEncoreLineTabNewLine.cs index 96c645f2d..dcd7231e2 100644 --- a/libse/SubtitleFormats/AdobeEncoreLineTabNewLine.cs +++ b/libse/SubtitleFormats/AdobeEncoreLineTabNewLine.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncoreLineTabs.cs b/libse/SubtitleFormats/AdobeEncoreLineTabs.cs index 5b9ee45db..483566481 100644 --- a/libse/SubtitleFormats/AdobeEncoreLineTabs.cs +++ b/libse/SubtitleFormats/AdobeEncoreLineTabs.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncoreTabs.cs b/libse/SubtitleFormats/AdobeEncoreTabs.cs index 8434c6021..810c83527 100644 --- a/libse/SubtitleFormats/AdobeEncoreTabs.cs +++ b/libse/SubtitleFormats/AdobeEncoreTabs.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncoreWithLineNumbers.cs b/libse/SubtitleFormats/AdobeEncoreWithLineNumbers.cs index b0c803167..76e3641bc 100644 --- a/libse/SubtitleFormats/AdobeEncoreWithLineNumbers.cs +++ b/libse/SubtitleFormats/AdobeEncoreWithLineNumbers.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobeEncoreWithLineNumbersNtsc.cs b/libse/SubtitleFormats/AdobeEncoreWithLineNumbersNtsc.cs index 11225c0e1..350e85d5a 100644 --- a/libse/SubtitleFormats/AdobeEncoreWithLineNumbersNtsc.cs +++ b/libse/SubtitleFormats/AdobeEncoreWithLineNumbersNtsc.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdobePremierePrProj.cs b/libse/SubtitleFormats/AdobePremierePrProj.cs index 4f0561435..5150d1470 100644 --- a/libse/SubtitleFormats/AdobePremierePrProj.cs +++ b/libse/SubtitleFormats/AdobePremierePrProj.cs @@ -6,6 +6,7 @@ using System.IO.Compression; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AdvancedSubStationAlpha.cs b/libse/SubtitleFormats/AdvancedSubStationAlpha.cs index 6f56fbcc1..6969da50c 100644 --- a/libse/SubtitleFormats/AdvancedSubStationAlpha.cs +++ b/libse/SubtitleFormats/AdvancedSubStationAlpha.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AribB36.cs b/libse/SubtitleFormats/AribB36.cs index ed279a04a..9121344e9 100644 --- a/libse/SubtitleFormats/AribB36.cs +++ b/libse/SubtitleFormats/AribB36.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AvidCaption.cs b/libse/SubtitleFormats/AvidCaption.cs index 4cd6a169c..24478613d 100644 --- a/libse/SubtitleFormats/AvidCaption.cs +++ b/libse/SubtitleFormats/AvidCaption.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AvidDvd.cs b/libse/SubtitleFormats/AvidDvd.cs index ae99e7d38..b053c51f5 100644 --- a/libse/SubtitleFormats/AvidDvd.cs +++ b/libse/SubtitleFormats/AvidDvd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AvidStl.cs b/libse/SubtitleFormats/AvidStl.cs index f9da92f11..db141dea9 100644 --- a/libse/SubtitleFormats/AvidStl.cs +++ b/libse/SubtitleFormats/AvidStl.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/AwsTranscribeJson.cs b/libse/SubtitleFormats/AwsTranscribeJson.cs index ae0694476..7ed82e7c5 100644 --- a/libse/SubtitleFormats/AwsTranscribeJson.cs +++ b/libse/SubtitleFormats/AwsTranscribeJson.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Ayato.cs b/libse/SubtitleFormats/Ayato.cs index f5ca6d342..7c972c637 100644 --- a/libse/SubtitleFormats/Ayato.cs +++ b/libse/SubtitleFormats/Ayato.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/BdnXml.cs b/libse/SubtitleFormats/BdnXml.cs index 973bd3193..3bb7fdc17 100644 --- a/libse/SubtitleFormats/BdnXml.cs +++ b/libse/SubtitleFormats/BdnXml.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/BelleNuitSubtitler.cs b/libse/SubtitleFormats/BelleNuitSubtitler.cs index fc429c24c..e8808e1aa 100644 --- a/libse/SubtitleFormats/BelleNuitSubtitler.cs +++ b/libse/SubtitleFormats/BelleNuitSubtitler.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Bilibili.cs b/libse/SubtitleFormats/Bilibili.cs index 1d6db84bd..98a1273c2 100644 --- a/libse/SubtitleFormats/Bilibili.cs +++ b/libse/SubtitleFormats/Bilibili.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CapMakerPlus.cs b/libse/SubtitleFormats/CapMakerPlus.cs index f2861cf65..aaa0123b8 100644 --- a/libse/SubtitleFormats/CapMakerPlus.cs +++ b/libse/SubtitleFormats/CapMakerPlus.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Cappella.cs b/libse/SubtitleFormats/Cappella.cs index 3b931afa3..21c823b08 100644 --- a/libse/SubtitleFormats/Cappella.cs +++ b/libse/SubtitleFormats/Cappella.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CaptionAssistant.cs b/libse/SubtitleFormats/CaptionAssistant.cs index aa743053f..ad33004a1 100644 --- a/libse/SubtitleFormats/CaptionAssistant.cs +++ b/libse/SubtitleFormats/CaptionAssistant.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Captionate.cs b/libse/SubtitleFormats/Captionate.cs index ccb9df83b..319fece29 100644 --- a/libse/SubtitleFormats/Captionate.cs +++ b/libse/SubtitleFormats/Captionate.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CaptionateMs.cs b/libse/SubtitleFormats/CaptionateMs.cs index 5ad409a77..a57982704 100644 --- a/libse/SubtitleFormats/CaptionateMs.cs +++ b/libse/SubtitleFormats/CaptionateMs.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CaptionsInc.cs b/libse/SubtitleFormats/CaptionsInc.cs index 9d412597b..2a5ec45d7 100644 --- a/libse/SubtitleFormats/CaptionsInc.cs +++ b/libse/SubtitleFormats/CaptionsInc.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CaraokeXml.cs b/libse/SubtitleFormats/CaraokeXml.cs index 2fec98503..3ecc28bce 100644 --- a/libse/SubtitleFormats/CaraokeXml.cs +++ b/libse/SubtitleFormats/CaraokeXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Cavena890.cs b/libse/SubtitleFormats/Cavena890.cs index ff78f4196..d3329ee90 100644 --- a/libse/SubtitleFormats/Cavena890.cs +++ b/libse/SubtitleFormats/Cavena890.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CheetahCaption.cs b/libse/SubtitleFormats/CheetahCaption.cs index c9ddc5362..642f4e5ac 100644 --- a/libse/SubtitleFormats/CheetahCaption.cs +++ b/libse/SubtitleFormats/CheetahCaption.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CheetahCaptionOld.cs b/libse/SubtitleFormats/CheetahCaptionOld.cs index 8fc0652a3..3c4a3467a 100644 --- a/libse/SubtitleFormats/CheetahCaptionOld.cs +++ b/libse/SubtitleFormats/CheetahCaptionOld.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Chk.cs b/libse/SubtitleFormats/Chk.cs index 53ca47b8c..881cb5514 100644 --- a/libse/SubtitleFormats/Chk.cs +++ b/libse/SubtitleFormats/Chk.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Csv.cs b/libse/SubtitleFormats/Csv.cs index 4cc63604a..7c4c747d5 100644 --- a/libse/SubtitleFormats/Csv.cs +++ b/libse/SubtitleFormats/Csv.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Csv2.cs b/libse/SubtitleFormats/Csv2.cs index 12d55ebc4..8e4fde18a 100644 --- a/libse/SubtitleFormats/Csv2.cs +++ b/libse/SubtitleFormats/Csv2.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Csv3.cs b/libse/SubtitleFormats/Csv3.cs index be9c9466b..643e01d20 100644 --- a/libse/SubtitleFormats/Csv3.cs +++ b/libse/SubtitleFormats/Csv3.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Csv4.cs b/libse/SubtitleFormats/Csv4.cs index 0f1818add..7c4f8cb7e 100644 --- a/libse/SubtitleFormats/Csv4.cs +++ b/libse/SubtitleFormats/Csv4.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Csv5.cs b/libse/SubtitleFormats/Csv5.cs index 8ad6433e4..39fc8aeed 100644 --- a/libse/SubtitleFormats/Csv5.cs +++ b/libse/SubtitleFormats/Csv5.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/CsvNuendo.cs b/libse/SubtitleFormats/CsvNuendo.cs index ac1ee7efd..f75f2320b 100644 --- a/libse/SubtitleFormats/CsvNuendo.cs +++ b/libse/SubtitleFormats/CsvNuendo.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DCinemaInterop.cs b/libse/SubtitleFormats/DCinemaInterop.cs index 1bacdf2dc..94288714e 100644 --- a/libse/SubtitleFormats/DCinemaInterop.cs +++ b/libse/SubtitleFormats/DCinemaInterop.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DCinemaSmpte2007.cs b/libse/SubtitleFormats/DCinemaSmpte2007.cs index 7b9c849f3..f085621ac 100644 --- a/libse/SubtitleFormats/DCinemaSmpte2007.cs +++ b/libse/SubtitleFormats/DCinemaSmpte2007.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Text; using System.Xml; using System.Xml.Schema; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DCinemaSmpte2010.cs b/libse/SubtitleFormats/DCinemaSmpte2010.cs index dc6a99c56..129429e3f 100644 --- a/libse/SubtitleFormats/DCinemaSmpte2010.cs +++ b/libse/SubtitleFormats/DCinemaSmpte2010.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Text; using System.Xml; using System.Xml.Schema; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DCinemaSmpte2014.cs b/libse/SubtitleFormats/DCinemaSmpte2014.cs index 2efd3f5e4..443b3c593 100644 --- a/libse/SubtitleFormats/DCinemaSmpte2014.cs +++ b/libse/SubtitleFormats/DCinemaSmpte2014.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Text; using System.Xml; using System.Xml.Schema; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DigiBeta.cs b/libse/SubtitleFormats/DigiBeta.cs index da8bb2563..a422891f6 100644 --- a/libse/SubtitleFormats/DigiBeta.cs +++ b/libse/SubtitleFormats/DigiBeta.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DlDd.cs b/libse/SubtitleFormats/DlDd.cs index 0b79eee90..3fcb2fc97 100644 --- a/libse/SubtitleFormats/DlDd.cs +++ b/libse/SubtitleFormats/DlDd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Nikse.SubtitleEdit.Core.SubtitleFormats diff --git a/libse/SubtitleFormats/Dost.cs b/libse/SubtitleFormats/Dost.cs index 6b58fd276..9c3db4bbb 100644 --- a/libse/SubtitleFormats/Dost.cs +++ b/libse/SubtitleFormats/Dost.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvSubtitle.cs b/libse/SubtitleFormats/DvSubtitle.cs index 4f5d58532..8f80c56e3 100644 --- a/libse/SubtitleFormats/DvSubtitle.cs +++ b/libse/SubtitleFormats/DvSubtitle.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdStudioPro.cs b/libse/SubtitleFormats/DvdStudioPro.cs index c1a94b352..3031aa419 100644 --- a/libse/SubtitleFormats/DvdStudioPro.cs +++ b/libse/SubtitleFormats/DvdStudioPro.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdStudioProSpace.cs b/libse/SubtitleFormats/DvdStudioProSpace.cs index de58a3f14..62404bc8b 100644 --- a/libse/SubtitleFormats/DvdStudioProSpace.cs +++ b/libse/SubtitleFormats/DvdStudioProSpace.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdStudioProSpaceGraphic.cs b/libse/SubtitleFormats/DvdStudioProSpaceGraphic.cs index aab521b86..eff176c84 100644 --- a/libse/SubtitleFormats/DvdStudioProSpaceGraphic.cs +++ b/libse/SubtitleFormats/DvdStudioProSpaceGraphic.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdStudioProSpaceOne.cs b/libse/SubtitleFormats/DvdStudioProSpaceOne.cs index 203bd09ba..96082b4c7 100644 --- a/libse/SubtitleFormats/DvdStudioProSpaceOne.cs +++ b/libse/SubtitleFormats/DvdStudioProSpaceOne.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdStudioProSpaceOneSemicolon.cs b/libse/SubtitleFormats/DvdStudioProSpaceOneSemicolon.cs index aa930cad7..af73915dd 100644 --- a/libse/SubtitleFormats/DvdStudioProSpaceOneSemicolon.cs +++ b/libse/SubtitleFormats/DvdStudioProSpaceOneSemicolon.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdSubtitle.cs b/libse/SubtitleFormats/DvdSubtitle.cs index e7c4c7a0b..9d3f6bece 100644 --- a/libse/SubtitleFormats/DvdSubtitle.cs +++ b/libse/SubtitleFormats/DvdSubtitle.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/DvdSubtitleSystem.cs b/libse/SubtitleFormats/DvdSubtitleSystem.cs index 0548588cf..1230edf9b 100644 --- a/libse/SubtitleFormats/DvdSubtitleSystem.cs +++ b/libse/SubtitleFormats/DvdSubtitleSystem.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ELRStudioClosedCaption.cs b/libse/SubtitleFormats/ELRStudioClosedCaption.cs index 400755937..f355cb2a4 100644 --- a/libse/SubtitleFormats/ELRStudioClosedCaption.cs +++ b/libse/SubtitleFormats/ELRStudioClosedCaption.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ESubXf.cs b/libse/SubtitleFormats/ESubXf.cs index 94c51d12b..abbeae75b 100644 --- a/libse/SubtitleFormats/ESubXf.cs +++ b/libse/SubtitleFormats/ESubXf.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/EZTSubtitlesProject.cs b/libse/SubtitleFormats/EZTSubtitlesProject.cs index ec46471d1..3bc94588f 100644 --- a/libse/SubtitleFormats/EZTSubtitlesProject.cs +++ b/libse/SubtitleFormats/EZTSubtitlesProject.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Ebu.cs b/libse/SubtitleFormats/Ebu.cs index 92c7d2400..4c04a40fd 100644 --- a/libse/SubtitleFormats/Ebu.cs +++ b/libse/SubtitleFormats/Ebu.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Edl.cs b/libse/SubtitleFormats/Edl.cs index 71d1bb80d..2bd17831a 100644 --- a/libse/SubtitleFormats/Edl.cs +++ b/libse/SubtitleFormats/Edl.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Eeg708.cs b/libse/SubtitleFormats/Eeg708.cs index c98a7e728..9ba402f77 100644 --- a/libse/SubtitleFormats/Eeg708.cs +++ b/libse/SubtitleFormats/Eeg708.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ElrPrint.cs b/libse/SubtitleFormats/ElrPrint.cs index c69afac1e..e7837f72d 100644 --- a/libse/SubtitleFormats/ElrPrint.cs +++ b/libse/SubtitleFormats/ElrPrint.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/F4Rtf.cs b/libse/SubtitleFormats/F4Rtf.cs index 458748a9f..14791a08d 100644 --- a/libse/SubtitleFormats/F4Rtf.cs +++ b/libse/SubtitleFormats/F4Rtf.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/F4Text.cs b/libse/SubtitleFormats/F4Text.cs index 6161c4985..e09f54fa8 100644 --- a/libse/SubtitleFormats/F4Text.cs +++ b/libse/SubtitleFormats/F4Text.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/F4Xml.cs b/libse/SubtitleFormats/F4Xml.cs index d52ff3402..6f712dd9f 100644 --- a/libse/SubtitleFormats/F4Xml.cs +++ b/libse/SubtitleFormats/F4Xml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FLVCoreCuePoints.cs b/libse/SubtitleFormats/FLVCoreCuePoints.cs index 53f32157a..43575e62e 100644 --- a/libse/SubtitleFormats/FLVCoreCuePoints.cs +++ b/libse/SubtitleFormats/FLVCoreCuePoints.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FabSubtitler.cs b/libse/SubtitleFormats/FabSubtitler.cs index ccbee1672..8a939e7aa 100644 --- a/libse/SubtitleFormats/FabSubtitler.cs +++ b/libse/SubtitleFormats/FabSubtitler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FilmEditXml.cs b/libse/SubtitleFormats/FilmEditXml.cs index e8409eff4..35355e786 100644 --- a/libse/SubtitleFormats/FilmEditXml.cs +++ b/libse/SubtitleFormats/FilmEditXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProImage.cs b/libse/SubtitleFormats/FinalCutProImage.cs index b36891b9a..c36999fae 100644 --- a/libse/SubtitleFormats/FinalCutProImage.cs +++ b/libse/SubtitleFormats/FinalCutProImage.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProTest2Xml.cs b/libse/SubtitleFormats/FinalCutProTest2Xml.cs index 02238433c..8c2b6b99a 100644 --- a/libse/SubtitleFormats/FinalCutProTest2Xml.cs +++ b/libse/SubtitleFormats/FinalCutProTest2Xml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProTextXml.cs b/libse/SubtitleFormats/FinalCutProTextXml.cs index 696312824..1c710a023 100644 --- a/libse/SubtitleFormats/FinalCutProTextXml.cs +++ b/libse/SubtitleFormats/FinalCutProTextXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXCM.cs b/libse/SubtitleFormats/FinalCutProXCM.cs index 0021183c7..e10bb7e68 100644 --- a/libse/SubtitleFormats/FinalCutProXCM.cs +++ b/libse/SubtitleFormats/FinalCutProXCM.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXXml.cs b/libse/SubtitleFormats/FinalCutProXXml.cs index 775644211..be339edc7 100644 --- a/libse/SubtitleFormats/FinalCutProXXml.cs +++ b/libse/SubtitleFormats/FinalCutProXXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXml.cs b/libse/SubtitleFormats/FinalCutProXml.cs index 7ed0182cf..0b2332574 100644 --- a/libse/SubtitleFormats/FinalCutProXml.cs +++ b/libse/SubtitleFormats/FinalCutProXml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXml13.cs b/libse/SubtitleFormats/FinalCutProXml13.cs index 9147f0b06..f148c15a1 100644 --- a/libse/SubtitleFormats/FinalCutProXml13.cs +++ b/libse/SubtitleFormats/FinalCutProXml13.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXml14.cs b/libse/SubtitleFormats/FinalCutProXml14.cs index 164fe8333..c2b507cc7 100644 --- a/libse/SubtitleFormats/FinalCutProXml14.cs +++ b/libse/SubtitleFormats/FinalCutProXml14.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXml14Text.cs b/libse/SubtitleFormats/FinalCutProXml14Text.cs index 78cd9b697..4bd5a3fb3 100644 --- a/libse/SubtitleFormats/FinalCutProXml14Text.cs +++ b/libse/SubtitleFormats/FinalCutProXml14Text.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXml15.cs b/libse/SubtitleFormats/FinalCutProXml15.cs index 9340e057f..75d4c9269 100644 --- a/libse/SubtitleFormats/FinalCutProXml15.cs +++ b/libse/SubtitleFormats/FinalCutProXml15.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalCutProXmlGap.cs b/libse/SubtitleFormats/FinalCutProXmlGap.cs index 88503a562..8f53f125c 100644 --- a/libse/SubtitleFormats/FinalCutProXmlGap.cs +++ b/libse/SubtitleFormats/FinalCutProXmlGap.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FinalDraftTemplate2.cs b/libse/SubtitleFormats/FinalDraftTemplate2.cs index 00cc71886..b982c7bca 100644 --- a/libse/SubtitleFormats/FinalDraftTemplate2.cs +++ b/libse/SubtitleFormats/FinalDraftTemplate2.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/FlashXml.cs b/libse/SubtitleFormats/FlashXml.cs index d27e52600..96f1a02e9 100644 --- a/libse/SubtitleFormats/FlashXml.cs +++ b/libse/SubtitleFormats/FlashXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Footage.cs b/libse/SubtitleFormats/Footage.cs index 24e96fd37..a9ca7167a 100644 --- a/libse/SubtitleFormats/Footage.cs +++ b/libse/SubtitleFormats/Footage.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/GooglePlayJson.cs b/libse/SubtitleFormats/GooglePlayJson.cs index 09446ba5b..1bb62abca 100644 --- a/libse/SubtitleFormats/GooglePlayJson.cs +++ b/libse/SubtitleFormats/GooglePlayJson.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/GpacTtxt.cs b/libse/SubtitleFormats/GpacTtxt.cs index d029a68d0..65da69587 100644 --- a/libse/SubtitleFormats/GpacTtxt.cs +++ b/libse/SubtitleFormats/GpacTtxt.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Gremots.cs b/libse/SubtitleFormats/Gremots.cs index c35e1ac33..633398925 100644 --- a/libse/SubtitleFormats/Gremots.cs +++ b/libse/SubtitleFormats/Gremots.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/HollyStarJson.cs b/libse/SubtitleFormats/HollyStarJson.cs index c847d09cb..688cd9b2b 100644 --- a/libse/SubtitleFormats/HollyStarJson.cs +++ b/libse/SubtitleFormats/HollyStarJson.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/HtmlSamiArray.cs b/libse/SubtitleFormats/HtmlSamiArray.cs index 7921e0d48..7c2c4e389 100644 --- a/libse/SubtitleFormats/HtmlSamiArray.cs +++ b/libse/SubtitleFormats/HtmlSamiArray.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Net; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/IaiSub.cs b/libse/SubtitleFormats/IaiSub.cs index ff4d65ef7..9f6511a76 100644 --- a/libse/SubtitleFormats/IaiSub.cs +++ b/libse/SubtitleFormats/IaiSub.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Idx.cs b/libse/SubtitleFormats/Idx.cs index d8e64584c..8ebf5f80c 100644 --- a/libse/SubtitleFormats/Idx.cs +++ b/libse/SubtitleFormats/Idx.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ImageLogicAutocaption.cs b/libse/SubtitleFormats/ImageLogicAutocaption.cs index c9df320d9..c2140f2ac 100644 --- a/libse/SubtitleFormats/ImageLogicAutocaption.cs +++ b/libse/SubtitleFormats/ImageLogicAutocaption.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/InqScribe.cs b/libse/SubtitleFormats/InqScribe.cs index 569ab2ab9..0c187812f 100644 --- a/libse/SubtitleFormats/InqScribe.cs +++ b/libse/SubtitleFormats/InqScribe.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/IsmtDfxp.cs b/libse/SubtitleFormats/IsmtDfxp.cs index 5c6d8afcf..1c5d98a59 100644 --- a/libse/SubtitleFormats/IsmtDfxp.cs +++ b/libse/SubtitleFormats/IsmtDfxp.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.ContainerFormats.Mp4; using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/IssXml.cs b/libse/SubtitleFormats/IssXml.cs index db7756e6d..977159083 100644 --- a/libse/SubtitleFormats/IssXml.cs +++ b/libse/SubtitleFormats/IssXml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ItunesTimedText.cs b/libse/SubtitleFormats/ItunesTimedText.cs index 220bfce59..020307e21 100644 --- a/libse/SubtitleFormats/ItunesTimedText.cs +++ b/libse/SubtitleFormats/ItunesTimedText.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JacoSub.cs b/libse/SubtitleFormats/JacoSub.cs index bb5492ef4..54ac1526c 100644 --- a/libse/SubtitleFormats/JacoSub.cs +++ b/libse/SubtitleFormats/JacoSub.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Json.cs b/libse/SubtitleFormats/Json.cs index 1589d63fd..054ca5d7f 100644 --- a/libse/SubtitleFormats/Json.cs +++ b/libse/SubtitleFormats/Json.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonTed.cs b/libse/SubtitleFormats/JsonTed.cs index 16ffd36b1..97059a39f 100644 --- a/libse/SubtitleFormats/JsonTed.cs +++ b/libse/SubtitleFormats/JsonTed.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType10.cs b/libse/SubtitleFormats/JsonType10.cs index 60134f081..f49757ad2 100644 --- a/libse/SubtitleFormats/JsonType10.cs +++ b/libse/SubtitleFormats/JsonType10.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType11.cs b/libse/SubtitleFormats/JsonType11.cs index 7460ce9c6..b25fc9f54 100644 --- a/libse/SubtitleFormats/JsonType11.cs +++ b/libse/SubtitleFormats/JsonType11.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType12.cs b/libse/SubtitleFormats/JsonType12.cs index e80d513f5..6c3e900d4 100644 --- a/libse/SubtitleFormats/JsonType12.cs +++ b/libse/SubtitleFormats/JsonType12.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType13.cs b/libse/SubtitleFormats/JsonType13.cs index d825f2bf4..8cc019405 100644 --- a/libse/SubtitleFormats/JsonType13.cs +++ b/libse/SubtitleFormats/JsonType13.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType14.cs b/libse/SubtitleFormats/JsonType14.cs index f0d86e814..48c87a35d 100644 --- a/libse/SubtitleFormats/JsonType14.cs +++ b/libse/SubtitleFormats/JsonType14.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType15.cs b/libse/SubtitleFormats/JsonType15.cs index 6eb9b2b0e..95c59188f 100644 --- a/libse/SubtitleFormats/JsonType15.cs +++ b/libse/SubtitleFormats/JsonType15.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType16.cs b/libse/SubtitleFormats/JsonType16.cs index 32506ad7c..0bfb23717 100644 --- a/libse/SubtitleFormats/JsonType16.cs +++ b/libse/SubtitleFormats/JsonType16.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType17.cs b/libse/SubtitleFormats/JsonType17.cs index e925538ec..591d2b29f 100644 --- a/libse/SubtitleFormats/JsonType17.cs +++ b/libse/SubtitleFormats/JsonType17.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType18.cs b/libse/SubtitleFormats/JsonType18.cs index 9761f1731..f7f67f596 100644 --- a/libse/SubtitleFormats/JsonType18.cs +++ b/libse/SubtitleFormats/JsonType18.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType2.cs b/libse/SubtitleFormats/JsonType2.cs index be29750eb..85718540e 100644 --- a/libse/SubtitleFormats/JsonType2.cs +++ b/libse/SubtitleFormats/JsonType2.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType3.cs b/libse/SubtitleFormats/JsonType3.cs index 0ebbb8150..c8ae9a08a 100644 --- a/libse/SubtitleFormats/JsonType3.cs +++ b/libse/SubtitleFormats/JsonType3.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType4.cs b/libse/SubtitleFormats/JsonType4.cs index 44a082c5f..fab307446 100644 --- a/libse/SubtitleFormats/JsonType4.cs +++ b/libse/SubtitleFormats/JsonType4.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType5.cs b/libse/SubtitleFormats/JsonType5.cs index aa48134bd..8bd8ae29f 100644 --- a/libse/SubtitleFormats/JsonType5.cs +++ b/libse/SubtitleFormats/JsonType5.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType6.cs b/libse/SubtitleFormats/JsonType6.cs index 22f514857..cde540f7a 100644 --- a/libse/SubtitleFormats/JsonType6.cs +++ b/libse/SubtitleFormats/JsonType6.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType7.cs b/libse/SubtitleFormats/JsonType7.cs index 01e0b9026..17a6f48e7 100644 --- a/libse/SubtitleFormats/JsonType7.cs +++ b/libse/SubtitleFormats/JsonType7.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType8.cs b/libse/SubtitleFormats/JsonType8.cs index 126a903d7..86c053973 100644 --- a/libse/SubtitleFormats/JsonType8.cs +++ b/libse/SubtitleFormats/JsonType8.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType8b.cs b/libse/SubtitleFormats/JsonType8b.cs index a558d884a..acf713f5e 100644 --- a/libse/SubtitleFormats/JsonType8b.cs +++ b/libse/SubtitleFormats/JsonType8b.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonType9.cs b/libse/SubtitleFormats/JsonType9.cs index a8c14d06e..6e91eceb4 100644 --- a/libse/SubtitleFormats/JsonType9.cs +++ b/libse/SubtitleFormats/JsonType9.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/JsonTypeOnlyLoad1.cs b/libse/SubtitleFormats/JsonTypeOnlyLoad1.cs index 338928f58..c35724068 100644 --- a/libse/SubtitleFormats/JsonTypeOnlyLoad1.cs +++ b/libse/SubtitleFormats/JsonTypeOnlyLoad1.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/KanopyHtml.cs b/libse/SubtitleFormats/KanopyHtml.cs index 8726ccecb..6b2e39fa1 100644 --- a/libse/SubtitleFormats/KanopyHtml.cs +++ b/libse/SubtitleFormats/KanopyHtml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/KaraokeCdgCreatorText.cs b/libse/SubtitleFormats/KaraokeCdgCreatorText.cs index b82da9076..b8fbad65a 100644 --- a/libse/SubtitleFormats/KaraokeCdgCreatorText.cs +++ b/libse/SubtitleFormats/KaraokeCdgCreatorText.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/LambdaCap.cs b/libse/SubtitleFormats/LambdaCap.cs index fb2fa8bc7..08097301e 100644 --- a/libse/SubtitleFormats/LambdaCap.cs +++ b/libse/SubtitleFormats/LambdaCap.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Lrc.cs b/libse/SubtitleFormats/Lrc.cs index 4912cbfd4..758a63883 100644 --- a/libse/SubtitleFormats/Lrc.cs +++ b/libse/SubtitleFormats/Lrc.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MPlayer2.cs b/libse/SubtitleFormats/MPlayer2.cs index 085873810..d02a6eee9 100644 --- a/libse/SubtitleFormats/MPlayer2.cs +++ b/libse/SubtitleFormats/MPlayer2.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MacCaption.cs b/libse/SubtitleFormats/MacCaption.cs index 86bb9c626..a0b9f20d1 100644 --- a/libse/SubtitleFormats/MacCaption.cs +++ b/libse/SubtitleFormats/MacCaption.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MacSub.cs b/libse/SubtitleFormats/MacSub.cs index ef0e715b2..4e402babd 100644 --- a/libse/SubtitleFormats/MacSub.cs +++ b/libse/SubtitleFormats/MacSub.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MediaTransData.cs b/libse/SubtitleFormats/MediaTransData.cs index ed2db4893..b08197df2 100644 --- a/libse/SubtitleFormats/MediaTransData.cs +++ b/libse/SubtitleFormats/MediaTransData.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MicroDvd.cs b/libse/SubtitleFormats/MicroDvd.cs index e989689d1..3032f5eb6 100644 --- a/libse/SubtitleFormats/MicroDvd.cs +++ b/libse/SubtitleFormats/MicroDvd.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MidwayInscriberCGX.cs b/libse/SubtitleFormats/MidwayInscriberCGX.cs index 3dc26ff17..53d508d44 100644 --- a/libse/SubtitleFormats/MidwayInscriberCGX.cs +++ b/libse/SubtitleFormats/MidwayInscriberCGX.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/MsOfficeWorkbook.cs b/libse/SubtitleFormats/MsOfficeWorkbook.cs index 4ad4299bb..0e593aa7c 100644 --- a/libse/SubtitleFormats/MsOfficeWorkbook.cs +++ b/libse/SubtitleFormats/MsOfficeWorkbook.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/NciCaption.cs b/libse/SubtitleFormats/NciCaption.cs index 407bcaa86..010e4ef17 100644 --- a/libse/SubtitleFormats/NciCaption.cs +++ b/libse/SubtitleFormats/NciCaption.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/NciTimedRollUpCaptions.cs b/libse/SubtitleFormats/NciTimedRollUpCaptions.cs index 8a9320e80..379c237cc 100644 --- a/libse/SubtitleFormats/NciTimedRollUpCaptions.cs +++ b/libse/SubtitleFormats/NciTimedRollUpCaptions.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/NetflixImsc11Japanese.cs b/libse/SubtitleFormats/NetflixImsc11Japanese.cs index 2792aa2c6..6e0769fc4 100644 --- a/libse/SubtitleFormats/NetflixImsc11Japanese.cs +++ b/libse/SubtitleFormats/NetflixImsc11Japanese.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/NetflixTimedText.cs b/libse/SubtitleFormats/NetflixTimedText.cs index f975933c9..ca2663e6f 100644 --- a/libse/SubtitleFormats/NetflixTimedText.cs +++ b/libse/SubtitleFormats/NetflixTimedText.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/OgmChapters.cs b/libse/SubtitleFormats/OgmChapters.cs index 2a2e5bef7..3e47d095f 100644 --- a/libse/SubtitleFormats/OgmChapters.cs +++ b/libse/SubtitleFormats/OgmChapters.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/OpenDvt.cs b/libse/SubtitleFormats/OpenDvt.cs index 2a7a78d59..ceb010008 100644 --- a/libse/SubtitleFormats/OpenDvt.cs +++ b/libse/SubtitleFormats/OpenDvt.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Oresme.cs b/libse/SubtitleFormats/Oresme.cs index a509498c5..c64419a0f 100644 --- a/libse/SubtitleFormats/Oresme.cs +++ b/libse/SubtitleFormats/Oresme.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/OresmeDocXDocument.cs b/libse/SubtitleFormats/OresmeDocXDocument.cs index 230f63e84..672000892 100644 --- a/libse/SubtitleFormats/OresmeDocXDocument.cs +++ b/libse/SubtitleFormats/OresmeDocXDocument.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/OtterAi.cs b/libse/SubtitleFormats/OtterAi.cs index 6cb6c9381..b62a10032 100644 --- a/libse/SubtitleFormats/OtterAi.cs +++ b/libse/SubtitleFormats/OtterAi.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/PE2.cs b/libse/SubtitleFormats/PE2.cs index 725d0f1f0..21d288198 100644 --- a/libse/SubtitleFormats/PE2.cs +++ b/libse/SubtitleFormats/PE2.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/PListCaption.cs b/libse/SubtitleFormats/PListCaption.cs index e8863cbe1..25f7eee23 100644 --- a/libse/SubtitleFormats/PListCaption.cs +++ b/libse/SubtitleFormats/PListCaption.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Pac.cs b/libse/SubtitleFormats/Pac.cs index dffa7b475..4faaba3e1 100644 --- a/libse/SubtitleFormats/Pac.cs +++ b/libse/SubtitleFormats/Pac.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.SubtitleFormats diff --git a/libse/SubtitleFormats/PacUnicode.cs b/libse/SubtitleFormats/PacUnicode.cs index 754c48423..a7fc83b4c 100644 --- a/libse/SubtitleFormats/PacUnicode.cs +++ b/libse/SubtitleFormats/PacUnicode.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/PhoenixSubtitle.cs b/libse/SubtitleFormats/PhoenixSubtitle.cs index b964bfc85..5dbd829a0 100644 --- a/libse/SubtitleFormats/PhoenixSubtitle.cs +++ b/libse/SubtitleFormats/PhoenixSubtitle.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/PinnacleImpression.cs b/libse/SubtitleFormats/PinnacleImpression.cs index fbe60a2d9..a8e53141f 100644 --- a/libse/SubtitleFormats/PinnacleImpression.cs +++ b/libse/SubtitleFormats/PinnacleImpression.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/PlayCaptionsFreeEditor.cs b/libse/SubtitleFormats/PlayCaptionsFreeEditor.cs index 5acb22f22..ccc2a2f9f 100644 --- a/libse/SubtitleFormats/PlayCaptionsFreeEditor.cs +++ b/libse/SubtitleFormats/PlayCaptionsFreeEditor.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Pns.cs b/libse/SubtitleFormats/Pns.cs index 687d405a0..fd36c7fea 100644 --- a/libse/SubtitleFormats/Pns.cs +++ b/libse/SubtitleFormats/Pns.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ProjectionSubtitleList.cs b/libse/SubtitleFormats/ProjectionSubtitleList.cs index f62031eb6..3e25f355e 100644 --- a/libse/SubtitleFormats/ProjectionSubtitleList.cs +++ b/libse/SubtitleFormats/ProjectionSubtitleList.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/QubeMasterImport.cs b/libse/SubtitleFormats/QubeMasterImport.cs index cb7526502..9ecafb327 100644 --- a/libse/SubtitleFormats/QubeMasterImport.cs +++ b/libse/SubtitleFormats/QubeMasterImport.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/QuickTimeText.cs b/libse/SubtitleFormats/QuickTimeText.cs index 0fcbc1dd2..c090e7987 100644 --- a/libse/SubtitleFormats/QuickTimeText.cs +++ b/libse/SubtitleFormats/QuickTimeText.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/RealTime.cs b/libse/SubtitleFormats/RealTime.cs index 8560e7925..f7d350a59 100644 --- a/libse/SubtitleFormats/RealTime.cs +++ b/libse/SubtitleFormats/RealTime.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/RhozetHarmonic.cs b/libse/SubtitleFormats/RhozetHarmonic.cs index 80f72039c..9387d7ea4 100644 --- a/libse/SubtitleFormats/RhozetHarmonic.cs +++ b/libse/SubtitleFormats/RhozetHarmonic.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Rtf1.cs b/libse/SubtitleFormats/Rtf1.cs index 67da5763c..70cd6c4f1 100644 --- a/libse/SubtitleFormats/Rtf1.cs +++ b/libse/SubtitleFormats/Rtf1.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Rtf2.cs b/libse/SubtitleFormats/Rtf2.cs index 587c9cbfc..b3b1d8056 100644 --- a/libse/SubtitleFormats/Rtf2.cs +++ b/libse/SubtitleFormats/Rtf2.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Sami.cs b/libse/SubtitleFormats/Sami.cs index 7668a1551..e1e2b31b2 100644 --- a/libse/SubtitleFormats/Sami.cs +++ b/libse/SubtitleFormats/Sami.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Net; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SamiAvDicPlayer.cs b/libse/SubtitleFormats/SamiAvDicPlayer.cs index 32ba245f2..1d4027d95 100644 --- a/libse/SubtitleFormats/SamiAvDicPlayer.cs +++ b/libse/SubtitleFormats/SamiAvDicPlayer.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SatBoxPng.cs b/libse/SubtitleFormats/SatBoxPng.cs index 6090653bd..428a5b1ec 100644 --- a/libse/SubtitleFormats/SatBoxPng.cs +++ b/libse/SubtitleFormats/SatBoxPng.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Scenarist.cs b/libse/SubtitleFormats/Scenarist.cs index 5b99f52fe..0137e7b13 100644 --- a/libse/SubtitleFormats/Scenarist.cs +++ b/libse/SubtitleFormats/Scenarist.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ScenaristClosedCaptions.cs b/libse/SubtitleFormats/ScenaristClosedCaptions.cs index def244611..abaf2fa73 100644 --- a/libse/SubtitleFormats/ScenaristClosedCaptions.cs +++ b/libse/SubtitleFormats/ScenaristClosedCaptions.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SeImageHtmlIndex.cs b/libse/SubtitleFormats/SeImageHtmlIndex.cs index da9bc6677..99e684588 100644 --- a/libse/SubtitleFormats/SeImageHtmlIndex.cs +++ b/libse/SubtitleFormats/SeImageHtmlIndex.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SmilTimesheetData.cs b/libse/SubtitleFormats/SmilTimesheetData.cs index 2d465e701..df39e4fd7 100644 --- a/libse/SubtitleFormats/SmilTimesheetData.cs +++ b/libse/SubtitleFormats/SmilTimesheetData.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Net; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SmpteTt2052.cs b/libse/SubtitleFormats/SmpteTt2052.cs index ba8f3a915..787b21ce4 100644 --- a/libse/SubtitleFormats/SmpteTt2052.cs +++ b/libse/SubtitleFormats/SmpteTt2052.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SoftNiColonSub.cs b/libse/SubtitleFormats/SoftNiColonSub.cs index 32b30e1c2..14ca011ea 100644 --- a/libse/SubtitleFormats/SoftNiColonSub.cs +++ b/libse/SubtitleFormats/SoftNiColonSub.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SoftNiSub.cs b/libse/SubtitleFormats/SoftNiSub.cs index 669b2f48e..d34c8b378 100644 --- a/libse/SubtitleFormats/SoftNiSub.cs +++ b/libse/SubtitleFormats/SoftNiSub.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Son.cs b/libse/SubtitleFormats/Son.cs index c4f7b67b0..de02f58b7 100644 --- a/libse/SubtitleFormats/Son.cs +++ b/libse/SubtitleFormats/Son.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonicScenaristBitmaps.cs b/libse/SubtitleFormats/SonicScenaristBitmaps.cs index 1d3756a53..353673489 100644 --- a/libse/SubtitleFormats/SonicScenaristBitmaps.cs +++ b/libse/SubtitleFormats/SonicScenaristBitmaps.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitect.cs b/libse/SubtitleFormats/SonyDVDArchitect.cs index 92ff9a757..5f3582260 100644 --- a/libse/SubtitleFormats/SonyDVDArchitect.cs +++ b/libse/SubtitleFormats/SonyDVDArchitect.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitectExplicitDuration.cs b/libse/SubtitleFormats/SonyDVDArchitectExplicitDuration.cs index ba9e52b6b..33b66f69d 100644 --- a/libse/SubtitleFormats/SonyDVDArchitectExplicitDuration.cs +++ b/libse/SubtitleFormats/SonyDVDArchitectExplicitDuration.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs b/libse/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs index 96a723160..b8fed4a56 100644 --- a/libse/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs +++ b/libse/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitectLineDurationLength.cs b/libse/SubtitleFormats/SonyDVDArchitectLineDurationLength.cs index e927a6ad8..c0bf27c0b 100644 --- a/libse/SubtitleFormats/SonyDVDArchitectLineDurationLength.cs +++ b/libse/SubtitleFormats/SonyDVDArchitectLineDurationLength.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitectTabs.cs b/libse/SubtitleFormats/SonyDVDArchitectTabs.cs index 6a35ae4c2..e0506d9c2 100644 --- a/libse/SubtitleFormats/SonyDVDArchitectTabs.cs +++ b/libse/SubtitleFormats/SonyDVDArchitectTabs.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SonyDVDArchitectWithLineNumbers.cs b/libse/SubtitleFormats/SonyDVDArchitectWithLineNumbers.cs index d94a68500..8b9d9ed6a 100644 --- a/libse/SubtitleFormats/SonyDVDArchitectWithLineNumbers.cs +++ b/libse/SubtitleFormats/SonyDVDArchitectWithLineNumbers.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Speechmatics.cs b/libse/SubtitleFormats/Speechmatics.cs index aa42b57c0..d7c2b9ff5 100644 --- a/libse/SubtitleFormats/Speechmatics.cs +++ b/libse/SubtitleFormats/Speechmatics.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Spruce.cs b/libse/SubtitleFormats/Spruce.cs index 36975dfce..902179e16 100644 --- a/libse/SubtitleFormats/Spruce.cs +++ b/libse/SubtitleFormats/Spruce.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SpruceWithSpace.cs b/libse/SubtitleFormats/SpruceWithSpace.cs index 7d6cdf322..8571246b2 100644 --- a/libse/SubtitleFormats/SpruceWithSpace.cs +++ b/libse/SubtitleFormats/SpruceWithSpace.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Spt.cs b/libse/SubtitleFormats/Spt.cs index eafe8dfd1..5cb479ba3 100644 --- a/libse/SubtitleFormats/Spt.cs +++ b/libse/SubtitleFormats/Spt.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Sptx.cs b/libse/SubtitleFormats/Sptx.cs index 343f9d672..a88d5a361 100644 --- a/libse/SubtitleFormats/Sptx.cs +++ b/libse/SubtitleFormats/Sptx.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SpuImage.cs b/libse/SubtitleFormats/SpuImage.cs index fe0f7752e..b046f23f6 100644 --- a/libse/SubtitleFormats/SpuImage.cs +++ b/libse/SubtitleFormats/SpuImage.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/StructuredTitles.cs b/libse/SubtitleFormats/StructuredTitles.cs index 2c538d79e..d60eb8d0f 100644 --- a/libse/SubtitleFormats/StructuredTitles.cs +++ b/libse/SubtitleFormats/StructuredTitles.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubRip.cs b/libse/SubtitleFormats/SubRip.cs index 1344f3222..e4f34a913 100644 --- a/libse/SubtitleFormats/SubRip.cs +++ b/libse/SubtitleFormats/SubRip.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubStationAlpha.cs b/libse/SubtitleFormats/SubStationAlpha.cs index 4482371e7..ec8b1c2b7 100644 --- a/libse/SubtitleFormats/SubStationAlpha.cs +++ b/libse/SubtitleFormats/SubStationAlpha.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubUrbia.cs b/libse/SubtitleFormats/SubUrbia.cs index 7af2a10aa..0c7c88df1 100644 --- a/libse/SubtitleFormats/SubUrbia.cs +++ b/libse/SubtitleFormats/SubUrbia.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubViewer10.cs b/libse/SubtitleFormats/SubViewer10.cs index 099081381..7461dcb56 100644 --- a/libse/SubtitleFormats/SubViewer10.cs +++ b/libse/SubtitleFormats/SubViewer10.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubViewer20.cs b/libse/SubtitleFormats/SubViewer20.cs index 549566b18..afcba3845 100644 --- a/libse/SubtitleFormats/SubViewer20.cs +++ b/libse/SubtitleFormats/SubViewer20.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubtitleEditorProject.cs b/libse/SubtitleFormats/SubtitleEditorProject.cs index eecef7235..803f18859 100644 --- a/libse/SubtitleFormats/SubtitleEditorProject.cs +++ b/libse/SubtitleFormats/SubtitleEditorProject.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SubtitleFormat.cs b/libse/SubtitleFormats/SubtitleFormat.cs index 44d653d70..1eb25b1f6 100644 --- a/libse/SubtitleFormats/SubtitleFormat.cs +++ b/libse/SubtitleFormats/SubtitleFormat.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Interfaces; namespace Nikse.SubtitleEdit.Core.SubtitleFormats diff --git a/libse/SubtitleFormats/SwiftInterchange2.cs b/libse/SubtitleFormats/SwiftInterchange2.cs index 89704ae13..9e97cb61e 100644 --- a/libse/SubtitleFormats/SwiftInterchange2.cs +++ b/libse/SubtitleFormats/SwiftInterchange2.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SwiftText.cs b/libse/SubtitleFormats/SwiftText.cs index 7b2e7f104..36986935f 100644 --- a/libse/SubtitleFormats/SwiftText.cs +++ b/libse/SubtitleFormats/SwiftText.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SwiftTextLineNoAndDur.cs b/libse/SubtitleFormats/SwiftTextLineNoAndDur.cs index a25446524..47c406a5d 100644 --- a/libse/SubtitleFormats/SwiftTextLineNoAndDur.cs +++ b/libse/SubtitleFormats/SwiftTextLineNoAndDur.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/SwiftTextLineNumber.cs b/libse/SubtitleFormats/SwiftTextLineNumber.cs index abde8bd9e..c42e97df1 100644 --- a/libse/SubtitleFormats/SwiftTextLineNumber.cs +++ b/libse/SubtitleFormats/SwiftTextLineNumber.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TMPlayer.cs b/libse/SubtitleFormats/TMPlayer.cs index 90abb694e..92740a29b 100644 --- a/libse/SubtitleFormats/TMPlayer.cs +++ b/libse/SubtitleFormats/TMPlayer.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TSB4.cs b/libse/SubtitleFormats/TSB4.cs index d2b5456ce..a6864fd5d 100644 --- a/libse/SubtitleFormats/TSB4.cs +++ b/libse/SubtitleFormats/TSB4.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Ted20.cs b/libse/SubtitleFormats/Ted20.cs index 622cb5adc..c95871628 100644 --- a/libse/SubtitleFormats/Ted20.cs +++ b/libse/SubtitleFormats/Ted20.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Tek.cs b/libse/SubtitleFormats/Tek.cs index 5bcf3e29b..04dbf8882 100644 --- a/libse/SubtitleFormats/Tek.cs +++ b/libse/SubtitleFormats/Tek.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TextST.cs b/libse/SubtitleFormats/TextST.cs index 6e641454a..69864a6ed 100644 --- a/libse/SubtitleFormats/TextST.cs +++ b/libse/SubtitleFormats/TextST.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimeCodesOnly1.cs b/libse/SubtitleFormats/TimeCodesOnly1.cs index 51aa26b0a..d74a7618e 100644 --- a/libse/SubtitleFormats/TimeCodesOnly1.cs +++ b/libse/SubtitleFormats/TimeCodesOnly1.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimeCodesOnly2.cs b/libse/SubtitleFormats/TimeCodesOnly2.cs index e2b89ebf4..ae63d31ef 100644 --- a/libse/SubtitleFormats/TimeCodesOnly2.cs +++ b/libse/SubtitleFormats/TimeCodesOnly2.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimeXml.cs b/libse/SubtitleFormats/TimeXml.cs index 92ac67911..a95232d8c 100644 --- a/libse/SubtitleFormats/TimeXml.cs +++ b/libse/SubtitleFormats/TimeXml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimeXml2.cs b/libse/SubtitleFormats/TimeXml2.cs index f8527706f..9d7e71b0c 100644 --- a/libse/SubtitleFormats/TimeXml2.cs +++ b/libse/SubtitleFormats/TimeXml2.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimedText.cs b/libse/SubtitleFormats/TimedText.cs index 5fe131d13..2023a7436 100644 --- a/libse/SubtitleFormats/TimedText.cs +++ b/libse/SubtitleFormats/TimedText.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimedText10.cs b/libse/SubtitleFormats/TimedText10.cs index 13acfbb23..4f7e7f068 100644 --- a/libse/SubtitleFormats/TimedText10.cs +++ b/libse/SubtitleFormats/TimedText10.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimedText200604.cs b/libse/SubtitleFormats/TimedText200604.cs index ef3911008..1038720cd 100644 --- a/libse/SubtitleFormats/TimedText200604.cs +++ b/libse/SubtitleFormats/TimedText200604.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimedText200604Ooyala.cs b/libse/SubtitleFormats/TimedText200604Ooyala.cs index d46af99e1..099a3a455 100644 --- a/libse/SubtitleFormats/TimedText200604Ooyala.cs +++ b/libse/SubtitleFormats/TimedText200604Ooyala.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Net; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimedTextImage.cs b/libse/SubtitleFormats/TimedTextImage.cs index bdca36eea..01b5a24f4 100644 --- a/libse/SubtitleFormats/TimedTextImage.cs +++ b/libse/SubtitleFormats/TimedTextImage.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimelineAscii.cs b/libse/SubtitleFormats/TimelineAscii.cs index 948734078..ae885c41f 100644 --- a/libse/SubtitleFormats/TimelineAscii.cs +++ b/libse/SubtitleFormats/TimelineAscii.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimelineFootageAscii.cs b/libse/SubtitleFormats/TimelineFootageAscii.cs index ae452dce9..4bb18aa83 100644 --- a/libse/SubtitleFormats/TimelineFootageAscii.cs +++ b/libse/SubtitleFormats/TimelineFootageAscii.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TimelineMvt.cs b/libse/SubtitleFormats/TimelineMvt.cs index 7c42fd142..17312439f 100644 --- a/libse/SubtitleFormats/TimelineMvt.cs +++ b/libse/SubtitleFormats/TimelineMvt.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TitleExchangePro.cs b/libse/SubtitleFormats/TitleExchangePro.cs index 59355d90b..8693fb7db 100644 --- a/libse/SubtitleFormats/TitleExchangePro.cs +++ b/libse/SubtitleFormats/TitleExchangePro.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Titra.cs b/libse/SubtitleFormats/Titra.cs index f1536e403..55e394f4f 100644 --- a/libse/SubtitleFormats/Titra.cs +++ b/libse/SubtitleFormats/Titra.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TmpegEncAW5.cs b/libse/SubtitleFormats/TmpegEncAW5.cs index feb165c90..0bcb48780 100644 --- a/libse/SubtitleFormats/TmpegEncAW5.cs +++ b/libse/SubtitleFormats/TmpegEncAW5.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TmpegEncText.cs b/libse/SubtitleFormats/TmpegEncText.cs index acb53a0f7..4716367ee 100644 --- a/libse/SubtitleFormats/TmpegEncText.cs +++ b/libse/SubtitleFormats/TmpegEncText.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TmpegEncXml.cs b/libse/SubtitleFormats/TmpegEncXml.cs index 7b14f2047..ed7d35d2f 100644 --- a/libse/SubtitleFormats/TmpegEncXml.cs +++ b/libse/SubtitleFormats/TmpegEncXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Tmx14.cs b/libse/SubtitleFormats/Tmx14.cs index 7d84a8910..1593612be 100644 --- a/libse/SubtitleFormats/Tmx14.cs +++ b/libse/SubtitleFormats/Tmx14.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TranscriberXml.cs b/libse/SubtitleFormats/TranscriberXml.cs index 75a902f8a..639084236 100644 --- a/libse/SubtitleFormats/TranscriberXml.cs +++ b/libse/SubtitleFormats/TranscriberXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TranscriptiveJson.cs b/libse/SubtitleFormats/TranscriptiveJson.cs index f7713fb3f..1acc61aeb 100644 --- a/libse/SubtitleFormats/TranscriptiveJson.cs +++ b/libse/SubtitleFormats/TranscriptiveJson.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TurboTitler.cs b/libse/SubtitleFormats/TurboTitler.cs index b8873a7de..d16d4f710 100644 --- a/libse/SubtitleFormats/TurboTitler.cs +++ b/libse/SubtitleFormats/TurboTitler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TwentyThreeJson.cs b/libse/SubtitleFormats/TwentyThreeJson.cs index 2f6fbb780..a7daaa64e 100644 --- a/libse/SubtitleFormats/TwentyThreeJson.cs +++ b/libse/SubtitleFormats/TwentyThreeJson.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TwentyThreeJsonEmbed.cs b/libse/SubtitleFormats/TwentyThreeJsonEmbed.cs index b61fac318..81eac0bf5 100644 --- a/libse/SubtitleFormats/TwentyThreeJsonEmbed.cs +++ b/libse/SubtitleFormats/TwentyThreeJsonEmbed.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/TwentyThreeJsonEmbedWebSrt.cs b/libse/SubtitleFormats/TwentyThreeJsonEmbedWebSrt.cs index 042129b43..c74137fbc 100644 --- a/libse/SubtitleFormats/TwentyThreeJsonEmbedWebSrt.cs +++ b/libse/SubtitleFormats/TwentyThreeJsonEmbedWebSrt.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Tx3gTextOnly.cs b/libse/SubtitleFormats/Tx3gTextOnly.cs index ad2f1995e..f6fb89ac2 100644 --- a/libse/SubtitleFormats/Tx3gTextOnly.cs +++ b/libse/SubtitleFormats/Tx3gTextOnly.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UTSubtitleXml.cs b/libse/SubtitleFormats/UTSubtitleXml.cs index 90b9fa67d..024984467 100644 --- a/libse/SubtitleFormats/UTSubtitleXml.cs +++ b/libse/SubtitleFormats/UTSubtitleXml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UleadSubtitleFormat.cs b/libse/SubtitleFormats/UleadSubtitleFormat.cs index 9ee2556e1..421737dd0 100644 --- a/libse/SubtitleFormats/UleadSubtitleFormat.cs +++ b/libse/SubtitleFormats/UleadSubtitleFormat.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Ultech130.cs b/libse/SubtitleFormats/Ultech130.cs index f69b2b433..d588fd276 100644 --- a/libse/SubtitleFormats/Ultech130.cs +++ b/libse/SubtitleFormats/Ultech130.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UniversalSubtitleFormat.cs b/libse/SubtitleFormats/UniversalSubtitleFormat.cs index f8c61d991..557942767 100644 --- a/libse/SubtitleFormats/UniversalSubtitleFormat.cs +++ b/libse/SubtitleFormats/UniversalSubtitleFormat.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle1.cs b/libse/SubtitleFormats/UnknownSubtitle1.cs index 33522e434..8092e9278 100644 --- a/libse/SubtitleFormats/UnknownSubtitle1.cs +++ b/libse/SubtitleFormats/UnknownSubtitle1.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle10.cs b/libse/SubtitleFormats/UnknownSubtitle10.cs index 51bfdace1..4acb05a69 100644 --- a/libse/SubtitleFormats/UnknownSubtitle10.cs +++ b/libse/SubtitleFormats/UnknownSubtitle10.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle100.cs b/libse/SubtitleFormats/UnknownSubtitle100.cs index cb112afab..08e3a6951 100644 --- a/libse/SubtitleFormats/UnknownSubtitle100.cs +++ b/libse/SubtitleFormats/UnknownSubtitle100.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle101.cs b/libse/SubtitleFormats/UnknownSubtitle101.cs index ee6a5d2dc..ea17fce89 100644 --- a/libse/SubtitleFormats/UnknownSubtitle101.cs +++ b/libse/SubtitleFormats/UnknownSubtitle101.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle11.cs b/libse/SubtitleFormats/UnknownSubtitle11.cs index 0872a6a88..6adaaa110 100644 --- a/libse/SubtitleFormats/UnknownSubtitle11.cs +++ b/libse/SubtitleFormats/UnknownSubtitle11.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle12.cs b/libse/SubtitleFormats/UnknownSubtitle12.cs index 9ba8ae28b..7931d8e65 100644 --- a/libse/SubtitleFormats/UnknownSubtitle12.cs +++ b/libse/SubtitleFormats/UnknownSubtitle12.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle13.cs b/libse/SubtitleFormats/UnknownSubtitle13.cs index 87f3c0789..3a29077dd 100644 --- a/libse/SubtitleFormats/UnknownSubtitle13.cs +++ b/libse/SubtitleFormats/UnknownSubtitle13.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle14.cs b/libse/SubtitleFormats/UnknownSubtitle14.cs index de28ed6be..f3682ea17 100644 --- a/libse/SubtitleFormats/UnknownSubtitle14.cs +++ b/libse/SubtitleFormats/UnknownSubtitle14.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle15.cs b/libse/SubtitleFormats/UnknownSubtitle15.cs index f5074831f..558eeea27 100644 --- a/libse/SubtitleFormats/UnknownSubtitle15.cs +++ b/libse/SubtitleFormats/UnknownSubtitle15.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle16.cs b/libse/SubtitleFormats/UnknownSubtitle16.cs index 1af139792..e7ab0ca9e 100644 --- a/libse/SubtitleFormats/UnknownSubtitle16.cs +++ b/libse/SubtitleFormats/UnknownSubtitle16.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle17.cs b/libse/SubtitleFormats/UnknownSubtitle17.cs index 4f760f051..64c9ed353 100644 --- a/libse/SubtitleFormats/UnknownSubtitle17.cs +++ b/libse/SubtitleFormats/UnknownSubtitle17.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle18.cs b/libse/SubtitleFormats/UnknownSubtitle18.cs index 69c36b0ac..0a040d5dd 100644 --- a/libse/SubtitleFormats/UnknownSubtitle18.cs +++ b/libse/SubtitleFormats/UnknownSubtitle18.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle19.cs b/libse/SubtitleFormats/UnknownSubtitle19.cs index 4febebbf7..2c793f1da 100644 --- a/libse/SubtitleFormats/UnknownSubtitle19.cs +++ b/libse/SubtitleFormats/UnknownSubtitle19.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle2.cs b/libse/SubtitleFormats/UnknownSubtitle2.cs index 5c8e1e5fa..41ad0b3f3 100644 --- a/libse/SubtitleFormats/UnknownSubtitle2.cs +++ b/libse/SubtitleFormats/UnknownSubtitle2.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle20.cs b/libse/SubtitleFormats/UnknownSubtitle20.cs index bcde0d26d..cbd73c386 100644 --- a/libse/SubtitleFormats/UnknownSubtitle20.cs +++ b/libse/SubtitleFormats/UnknownSubtitle20.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle21.cs b/libse/SubtitleFormats/UnknownSubtitle21.cs index 41b7da817..5d9341c0a 100644 --- a/libse/SubtitleFormats/UnknownSubtitle21.cs +++ b/libse/SubtitleFormats/UnknownSubtitle21.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle22.cs b/libse/SubtitleFormats/UnknownSubtitle22.cs index 03c38a5b4..2f0d0ff28 100644 --- a/libse/SubtitleFormats/UnknownSubtitle22.cs +++ b/libse/SubtitleFormats/UnknownSubtitle22.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle23.cs b/libse/SubtitleFormats/UnknownSubtitle23.cs index 0646e3488..eeb5485c9 100644 --- a/libse/SubtitleFormats/UnknownSubtitle23.cs +++ b/libse/SubtitleFormats/UnknownSubtitle23.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle24.cs b/libse/SubtitleFormats/UnknownSubtitle24.cs index b131c9b1e..a026561fe 100644 --- a/libse/SubtitleFormats/UnknownSubtitle24.cs +++ b/libse/SubtitleFormats/UnknownSubtitle24.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle25.cs b/libse/SubtitleFormats/UnknownSubtitle25.cs index 22ded6e1c..3aa17a4ce 100644 --- a/libse/SubtitleFormats/UnknownSubtitle25.cs +++ b/libse/SubtitleFormats/UnknownSubtitle25.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle26.cs b/libse/SubtitleFormats/UnknownSubtitle26.cs index 52a1bd008..cdccde5b4 100644 --- a/libse/SubtitleFormats/UnknownSubtitle26.cs +++ b/libse/SubtitleFormats/UnknownSubtitle26.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle27.cs b/libse/SubtitleFormats/UnknownSubtitle27.cs index 3b401c7ff..187637d25 100644 --- a/libse/SubtitleFormats/UnknownSubtitle27.cs +++ b/libse/SubtitleFormats/UnknownSubtitle27.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle28.cs b/libse/SubtitleFormats/UnknownSubtitle28.cs index d579ba4b1..ac5c8c0ba 100644 --- a/libse/SubtitleFormats/UnknownSubtitle28.cs +++ b/libse/SubtitleFormats/UnknownSubtitle28.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle29.cs b/libse/SubtitleFormats/UnknownSubtitle29.cs index dbd309683..39a756ace 100644 --- a/libse/SubtitleFormats/UnknownSubtitle29.cs +++ b/libse/SubtitleFormats/UnknownSubtitle29.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle3.cs b/libse/SubtitleFormats/UnknownSubtitle3.cs index 64dcd8e45..1bc5be10f 100644 --- a/libse/SubtitleFormats/UnknownSubtitle3.cs +++ b/libse/SubtitleFormats/UnknownSubtitle3.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle30.cs b/libse/SubtitleFormats/UnknownSubtitle30.cs index b3c9031de..e5662e56e 100644 --- a/libse/SubtitleFormats/UnknownSubtitle30.cs +++ b/libse/SubtitleFormats/UnknownSubtitle30.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle31.cs b/libse/SubtitleFormats/UnknownSubtitle31.cs index 96a13b47c..4635c8f48 100644 --- a/libse/SubtitleFormats/UnknownSubtitle31.cs +++ b/libse/SubtitleFormats/UnknownSubtitle31.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle32.cs b/libse/SubtitleFormats/UnknownSubtitle32.cs index 850c6c998..3b174d546 100644 --- a/libse/SubtitleFormats/UnknownSubtitle32.cs +++ b/libse/SubtitleFormats/UnknownSubtitle32.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle33.cs b/libse/SubtitleFormats/UnknownSubtitle33.cs index 75e618ae1..3559868ce 100644 --- a/libse/SubtitleFormats/UnknownSubtitle33.cs +++ b/libse/SubtitleFormats/UnknownSubtitle33.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle34.cs b/libse/SubtitleFormats/UnknownSubtitle34.cs index 0ef8ce35a..b18c7a254 100644 --- a/libse/SubtitleFormats/UnknownSubtitle34.cs +++ b/libse/SubtitleFormats/UnknownSubtitle34.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle35.cs b/libse/SubtitleFormats/UnknownSubtitle35.cs index 24cf07569..6edbfdf37 100644 --- a/libse/SubtitleFormats/UnknownSubtitle35.cs +++ b/libse/SubtitleFormats/UnknownSubtitle35.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle36.cs b/libse/SubtitleFormats/UnknownSubtitle36.cs index d89672583..510aaab19 100644 --- a/libse/SubtitleFormats/UnknownSubtitle36.cs +++ b/libse/SubtitleFormats/UnknownSubtitle36.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle37.cs b/libse/SubtitleFormats/UnknownSubtitle37.cs index 32ca79be8..f651d7432 100644 --- a/libse/SubtitleFormats/UnknownSubtitle37.cs +++ b/libse/SubtitleFormats/UnknownSubtitle37.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle38.cs b/libse/SubtitleFormats/UnknownSubtitle38.cs index 42157de9c..5f146c054 100644 --- a/libse/SubtitleFormats/UnknownSubtitle38.cs +++ b/libse/SubtitleFormats/UnknownSubtitle38.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle39.cs b/libse/SubtitleFormats/UnknownSubtitle39.cs index 5bcfce490..7d4aa475b 100644 --- a/libse/SubtitleFormats/UnknownSubtitle39.cs +++ b/libse/SubtitleFormats/UnknownSubtitle39.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle4.cs b/libse/SubtitleFormats/UnknownSubtitle4.cs index 5d3d17721..0653afe1f 100644 --- a/libse/SubtitleFormats/UnknownSubtitle4.cs +++ b/libse/SubtitleFormats/UnknownSubtitle4.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle40.cs b/libse/SubtitleFormats/UnknownSubtitle40.cs index 1ae54dc34..ee55a0847 100644 --- a/libse/SubtitleFormats/UnknownSubtitle40.cs +++ b/libse/SubtitleFormats/UnknownSubtitle40.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle41.cs b/libse/SubtitleFormats/UnknownSubtitle41.cs index 704e87fe2..62c50c454 100644 --- a/libse/SubtitleFormats/UnknownSubtitle41.cs +++ b/libse/SubtitleFormats/UnknownSubtitle41.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle42.cs b/libse/SubtitleFormats/UnknownSubtitle42.cs index 4397bf6b2..6eacae112 100644 --- a/libse/SubtitleFormats/UnknownSubtitle42.cs +++ b/libse/SubtitleFormats/UnknownSubtitle42.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle43.cs b/libse/SubtitleFormats/UnknownSubtitle43.cs index 6465da67e..a6fc1985c 100644 --- a/libse/SubtitleFormats/UnknownSubtitle43.cs +++ b/libse/SubtitleFormats/UnknownSubtitle43.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle44.cs b/libse/SubtitleFormats/UnknownSubtitle44.cs index 269874ff7..94ece2735 100644 --- a/libse/SubtitleFormats/UnknownSubtitle44.cs +++ b/libse/SubtitleFormats/UnknownSubtitle44.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle45.cs b/libse/SubtitleFormats/UnknownSubtitle45.cs index 44be35e21..2e88340bf 100644 --- a/libse/SubtitleFormats/UnknownSubtitle45.cs +++ b/libse/SubtitleFormats/UnknownSubtitle45.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle46.cs b/libse/SubtitleFormats/UnknownSubtitle46.cs index 890a5feb0..6b378a232 100644 --- a/libse/SubtitleFormats/UnknownSubtitle46.cs +++ b/libse/SubtitleFormats/UnknownSubtitle46.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle47.cs b/libse/SubtitleFormats/UnknownSubtitle47.cs index 01aecde3c..c52f6d704 100644 --- a/libse/SubtitleFormats/UnknownSubtitle47.cs +++ b/libse/SubtitleFormats/UnknownSubtitle47.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle48.cs b/libse/SubtitleFormats/UnknownSubtitle48.cs index 8a7e845cb..d697b5ae7 100644 --- a/libse/SubtitleFormats/UnknownSubtitle48.cs +++ b/libse/SubtitleFormats/UnknownSubtitle48.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle49.cs b/libse/SubtitleFormats/UnknownSubtitle49.cs index 3970006b0..dae6eb2c9 100644 --- a/libse/SubtitleFormats/UnknownSubtitle49.cs +++ b/libse/SubtitleFormats/UnknownSubtitle49.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle5.cs b/libse/SubtitleFormats/UnknownSubtitle5.cs index 78720c4cc..a11808fcb 100644 --- a/libse/SubtitleFormats/UnknownSubtitle5.cs +++ b/libse/SubtitleFormats/UnknownSubtitle5.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle50.cs b/libse/SubtitleFormats/UnknownSubtitle50.cs index 10ec601bc..3d1dbf9f1 100644 --- a/libse/SubtitleFormats/UnknownSubtitle50.cs +++ b/libse/SubtitleFormats/UnknownSubtitle50.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle51.cs b/libse/SubtitleFormats/UnknownSubtitle51.cs index d9c2755db..46d66b88f 100644 --- a/libse/SubtitleFormats/UnknownSubtitle51.cs +++ b/libse/SubtitleFormats/UnknownSubtitle51.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle52.cs b/libse/SubtitleFormats/UnknownSubtitle52.cs index 6b69c5889..04dc9ce9f 100644 --- a/libse/SubtitleFormats/UnknownSubtitle52.cs +++ b/libse/SubtitleFormats/UnknownSubtitle52.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle53.cs b/libse/SubtitleFormats/UnknownSubtitle53.cs index c5dc73365..b957dbd2d 100644 --- a/libse/SubtitleFormats/UnknownSubtitle53.cs +++ b/libse/SubtitleFormats/UnknownSubtitle53.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle54.cs b/libse/SubtitleFormats/UnknownSubtitle54.cs index cf1897d75..227e4103c 100644 --- a/libse/SubtitleFormats/UnknownSubtitle54.cs +++ b/libse/SubtitleFormats/UnknownSubtitle54.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle55.cs b/libse/SubtitleFormats/UnknownSubtitle55.cs index 28f0b2067..7331c41a0 100644 --- a/libse/SubtitleFormats/UnknownSubtitle55.cs +++ b/libse/SubtitleFormats/UnknownSubtitle55.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle56.cs b/libse/SubtitleFormats/UnknownSubtitle56.cs index 9c822d68a..0dfbe9192 100644 --- a/libse/SubtitleFormats/UnknownSubtitle56.cs +++ b/libse/SubtitleFormats/UnknownSubtitle56.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle57.cs b/libse/SubtitleFormats/UnknownSubtitle57.cs index fc878f697..72cfb715d 100644 --- a/libse/SubtitleFormats/UnknownSubtitle57.cs +++ b/libse/SubtitleFormats/UnknownSubtitle57.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle58.cs b/libse/SubtitleFormats/UnknownSubtitle58.cs index bf4547c72..3bb2daf4b 100644 --- a/libse/SubtitleFormats/UnknownSubtitle58.cs +++ b/libse/SubtitleFormats/UnknownSubtitle58.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle59.cs b/libse/SubtitleFormats/UnknownSubtitle59.cs index d9cbd4744..ee6b93253 100644 --- a/libse/SubtitleFormats/UnknownSubtitle59.cs +++ b/libse/SubtitleFormats/UnknownSubtitle59.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle6.cs b/libse/SubtitleFormats/UnknownSubtitle6.cs index 4fc71c3d8..20c9cd028 100644 --- a/libse/SubtitleFormats/UnknownSubtitle6.cs +++ b/libse/SubtitleFormats/UnknownSubtitle6.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle60.cs b/libse/SubtitleFormats/UnknownSubtitle60.cs index 89cbdce86..32d12f48d 100644 --- a/libse/SubtitleFormats/UnknownSubtitle60.cs +++ b/libse/SubtitleFormats/UnknownSubtitle60.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle61.cs b/libse/SubtitleFormats/UnknownSubtitle61.cs index 98383ff64..d207bc7f0 100644 --- a/libse/SubtitleFormats/UnknownSubtitle61.cs +++ b/libse/SubtitleFormats/UnknownSubtitle61.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle62.cs b/libse/SubtitleFormats/UnknownSubtitle62.cs index 61a57397c..a0500c27d 100644 --- a/libse/SubtitleFormats/UnknownSubtitle62.cs +++ b/libse/SubtitleFormats/UnknownSubtitle62.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle63.cs b/libse/SubtitleFormats/UnknownSubtitle63.cs index c774131a3..cc6408c35 100644 --- a/libse/SubtitleFormats/UnknownSubtitle63.cs +++ b/libse/SubtitleFormats/UnknownSubtitle63.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle64.cs b/libse/SubtitleFormats/UnknownSubtitle64.cs index f953480e2..e1ab9c60a 100644 --- a/libse/SubtitleFormats/UnknownSubtitle64.cs +++ b/libse/SubtitleFormats/UnknownSubtitle64.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle65.cs b/libse/SubtitleFormats/UnknownSubtitle65.cs index 4831b9223..fc0c682c7 100644 --- a/libse/SubtitleFormats/UnknownSubtitle65.cs +++ b/libse/SubtitleFormats/UnknownSubtitle65.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle66.cs b/libse/SubtitleFormats/UnknownSubtitle66.cs index 5fd304116..b5836a258 100644 --- a/libse/SubtitleFormats/UnknownSubtitle66.cs +++ b/libse/SubtitleFormats/UnknownSubtitle66.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle67.cs b/libse/SubtitleFormats/UnknownSubtitle67.cs index d8a71accd..af6a9baa6 100644 --- a/libse/SubtitleFormats/UnknownSubtitle67.cs +++ b/libse/SubtitleFormats/UnknownSubtitle67.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle68.cs b/libse/SubtitleFormats/UnknownSubtitle68.cs index 1776afbc9..ffeee4643 100644 --- a/libse/SubtitleFormats/UnknownSubtitle68.cs +++ b/libse/SubtitleFormats/UnknownSubtitle68.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle69.cs b/libse/SubtitleFormats/UnknownSubtitle69.cs index e80e322cd..d23fd9934 100644 --- a/libse/SubtitleFormats/UnknownSubtitle69.cs +++ b/libse/SubtitleFormats/UnknownSubtitle69.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle7.cs b/libse/SubtitleFormats/UnknownSubtitle7.cs index d88a92af0..62423267e 100644 --- a/libse/SubtitleFormats/UnknownSubtitle7.cs +++ b/libse/SubtitleFormats/UnknownSubtitle7.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle70.cs b/libse/SubtitleFormats/UnknownSubtitle70.cs index 45724c7f2..9885907de 100644 --- a/libse/SubtitleFormats/UnknownSubtitle70.cs +++ b/libse/SubtitleFormats/UnknownSubtitle70.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle71.cs b/libse/SubtitleFormats/UnknownSubtitle71.cs index 9ab7b47f1..74650970c 100644 --- a/libse/SubtitleFormats/UnknownSubtitle71.cs +++ b/libse/SubtitleFormats/UnknownSubtitle71.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle72.cs b/libse/SubtitleFormats/UnknownSubtitle72.cs index a920de8cc..18c8aee85 100644 --- a/libse/SubtitleFormats/UnknownSubtitle72.cs +++ b/libse/SubtitleFormats/UnknownSubtitle72.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle73.cs b/libse/SubtitleFormats/UnknownSubtitle73.cs index d85dfe08a..01767296b 100644 --- a/libse/SubtitleFormats/UnknownSubtitle73.cs +++ b/libse/SubtitleFormats/UnknownSubtitle73.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle74.cs b/libse/SubtitleFormats/UnknownSubtitle74.cs index 51d6e04db..ddcf3c52e 100644 --- a/libse/SubtitleFormats/UnknownSubtitle74.cs +++ b/libse/SubtitleFormats/UnknownSubtitle74.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle75.cs b/libse/SubtitleFormats/UnknownSubtitle75.cs index 68a7cf8bc..5e3fb5a44 100644 --- a/libse/SubtitleFormats/UnknownSubtitle75.cs +++ b/libse/SubtitleFormats/UnknownSubtitle75.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle76.cs b/libse/SubtitleFormats/UnknownSubtitle76.cs index 4c3d35ee4..9cc9da073 100644 --- a/libse/SubtitleFormats/UnknownSubtitle76.cs +++ b/libse/SubtitleFormats/UnknownSubtitle76.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle77.cs b/libse/SubtitleFormats/UnknownSubtitle77.cs index a3d39b3f8..965d39462 100644 --- a/libse/SubtitleFormats/UnknownSubtitle77.cs +++ b/libse/SubtitleFormats/UnknownSubtitle77.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle78.cs b/libse/SubtitleFormats/UnknownSubtitle78.cs index 0fe594536..9f3513e92 100644 --- a/libse/SubtitleFormats/UnknownSubtitle78.cs +++ b/libse/SubtitleFormats/UnknownSubtitle78.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle79.cs b/libse/SubtitleFormats/UnknownSubtitle79.cs index ae8bcb2fb..2692f3728 100644 --- a/libse/SubtitleFormats/UnknownSubtitle79.cs +++ b/libse/SubtitleFormats/UnknownSubtitle79.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle8.cs b/libse/SubtitleFormats/UnknownSubtitle8.cs index d86cf56b6..efdba3a09 100644 --- a/libse/SubtitleFormats/UnknownSubtitle8.cs +++ b/libse/SubtitleFormats/UnknownSubtitle8.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle80.cs b/libse/SubtitleFormats/UnknownSubtitle80.cs index 7c3398fe8..0eb09e663 100644 --- a/libse/SubtitleFormats/UnknownSubtitle80.cs +++ b/libse/SubtitleFormats/UnknownSubtitle80.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle81.cs b/libse/SubtitleFormats/UnknownSubtitle81.cs index 81d52bbd7..a0108c562 100644 --- a/libse/SubtitleFormats/UnknownSubtitle81.cs +++ b/libse/SubtitleFormats/UnknownSubtitle81.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle82.cs b/libse/SubtitleFormats/UnknownSubtitle82.cs index a8e1bf2c1..b5a532999 100644 --- a/libse/SubtitleFormats/UnknownSubtitle82.cs +++ b/libse/SubtitleFormats/UnknownSubtitle82.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle83.cs b/libse/SubtitleFormats/UnknownSubtitle83.cs index f699e6b8e..3bdaa3e0a 100644 --- a/libse/SubtitleFormats/UnknownSubtitle83.cs +++ b/libse/SubtitleFormats/UnknownSubtitle83.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle84.cs b/libse/SubtitleFormats/UnknownSubtitle84.cs index b08555ba1..8a23cad86 100644 --- a/libse/SubtitleFormats/UnknownSubtitle84.cs +++ b/libse/SubtitleFormats/UnknownSubtitle84.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle85.cs b/libse/SubtitleFormats/UnknownSubtitle85.cs index 7098ac932..c39f093e6 100644 --- a/libse/SubtitleFormats/UnknownSubtitle85.cs +++ b/libse/SubtitleFormats/UnknownSubtitle85.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle86.cs b/libse/SubtitleFormats/UnknownSubtitle86.cs index 3ce1b0530..6326d738b 100644 --- a/libse/SubtitleFormats/UnknownSubtitle86.cs +++ b/libse/SubtitleFormats/UnknownSubtitle86.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle87.cs b/libse/SubtitleFormats/UnknownSubtitle87.cs index 67064045e..0187f0ad2 100644 --- a/libse/SubtitleFormats/UnknownSubtitle87.cs +++ b/libse/SubtitleFormats/UnknownSubtitle87.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle88.cs b/libse/SubtitleFormats/UnknownSubtitle88.cs index 8a2b96731..62e5c802d 100644 --- a/libse/SubtitleFormats/UnknownSubtitle88.cs +++ b/libse/SubtitleFormats/UnknownSubtitle88.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle89.cs b/libse/SubtitleFormats/UnknownSubtitle89.cs index c38ab4dd7..79f21392b 100644 --- a/libse/SubtitleFormats/UnknownSubtitle89.cs +++ b/libse/SubtitleFormats/UnknownSubtitle89.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle9.cs b/libse/SubtitleFormats/UnknownSubtitle9.cs index 25147f2dd..7dd2b6fb6 100644 --- a/libse/SubtitleFormats/UnknownSubtitle9.cs +++ b/libse/SubtitleFormats/UnknownSubtitle9.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle90.cs b/libse/SubtitleFormats/UnknownSubtitle90.cs index 00ce3b7b9..3b35019aa 100644 --- a/libse/SubtitleFormats/UnknownSubtitle90.cs +++ b/libse/SubtitleFormats/UnknownSubtitle90.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle91.cs b/libse/SubtitleFormats/UnknownSubtitle91.cs index e1b4dc6d6..f6e34b0b3 100644 --- a/libse/SubtitleFormats/UnknownSubtitle91.cs +++ b/libse/SubtitleFormats/UnknownSubtitle91.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle92.cs b/libse/SubtitleFormats/UnknownSubtitle92.cs index a637f2c75..72e7f1b59 100644 --- a/libse/SubtitleFormats/UnknownSubtitle92.cs +++ b/libse/SubtitleFormats/UnknownSubtitle92.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle93.cs b/libse/SubtitleFormats/UnknownSubtitle93.cs index 04de714d5..753f2f342 100644 --- a/libse/SubtitleFormats/UnknownSubtitle93.cs +++ b/libse/SubtitleFormats/UnknownSubtitle93.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle94.cs b/libse/SubtitleFormats/UnknownSubtitle94.cs index 1381eaffc..05e575450 100644 --- a/libse/SubtitleFormats/UnknownSubtitle94.cs +++ b/libse/SubtitleFormats/UnknownSubtitle94.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle95.cs b/libse/SubtitleFormats/UnknownSubtitle95.cs index bf74ee2a8..37284d12f 100644 --- a/libse/SubtitleFormats/UnknownSubtitle95.cs +++ b/libse/SubtitleFormats/UnknownSubtitle95.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle96.cs b/libse/SubtitleFormats/UnknownSubtitle96.cs index 18ec912c8..f4d62b870 100644 --- a/libse/SubtitleFormats/UnknownSubtitle96.cs +++ b/libse/SubtitleFormats/UnknownSubtitle96.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle97.cs b/libse/SubtitleFormats/UnknownSubtitle97.cs index f1e6e7bb8..a6620eafb 100644 --- a/libse/SubtitleFormats/UnknownSubtitle97.cs +++ b/libse/SubtitleFormats/UnknownSubtitle97.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle98.cs b/libse/SubtitleFormats/UnknownSubtitle98.cs index 25630c00a..87c766187 100644 --- a/libse/SubtitleFormats/UnknownSubtitle98.cs +++ b/libse/SubtitleFormats/UnknownSubtitle98.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UnknownSubtitle99.cs b/libse/SubtitleFormats/UnknownSubtitle99.cs index d748b10fe..e3fd67981 100644 --- a/libse/SubtitleFormats/UnknownSubtitle99.cs +++ b/libse/SubtitleFormats/UnknownSubtitle99.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Utx.cs b/libse/SubtitleFormats/Utx.cs index fe2d7c5b2..018718f9f 100644 --- a/libse/SubtitleFormats/Utx.cs +++ b/libse/SubtitleFormats/Utx.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/UtxFrames.cs b/libse/SubtitleFormats/UtxFrames.cs index e3016edce..5610bbdc2 100644 --- a/libse/SubtitleFormats/UtxFrames.cs +++ b/libse/SubtitleFormats/UtxFrames.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/VidIcelandic.cs b/libse/SubtitleFormats/VidIcelandic.cs index 68c12aecd..709a17684 100644 --- a/libse/SubtitleFormats/VidIcelandic.cs +++ b/libse/SubtitleFormats/VidIcelandic.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/VocapiaSplit.cs b/libse/SubtitleFormats/VocapiaSplit.cs index 41ffe3176..b5b25f7b8 100644 --- a/libse/SubtitleFormats/VocapiaSplit.cs +++ b/libse/SubtitleFormats/VocapiaSplit.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/WebVTT.cs b/libse/SubtitleFormats/WebVTT.cs index 6999a3efe..5d8cd2e7e 100644 --- a/libse/SubtitleFormats/WebVTT.cs +++ b/libse/SubtitleFormats/WebVTT.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/WebVTTFileWithLineNumber.cs b/libse/SubtitleFormats/WebVTTFileWithLineNumber.cs index 6d61a38b1..f0c26ea5f 100644 --- a/libse/SubtitleFormats/WebVTTFileWithLineNumber.cs +++ b/libse/SubtitleFormats/WebVTTFileWithLineNumber.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/WinCaps32.cs b/libse/SubtitleFormats/WinCaps32.cs index a4ed36a0b..cc6296f31 100644 --- a/libse/SubtitleFormats/WinCaps32.cs +++ b/libse/SubtitleFormats/WinCaps32.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Wsb.cs b/libse/SubtitleFormats/Wsb.cs index bfb107e89..217a026cd 100644 --- a/libse/SubtitleFormats/Wsb.cs +++ b/libse/SubtitleFormats/Wsb.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Xif.cs b/libse/SubtitleFormats/Xif.cs index caa573a9c..0d7d5a1d1 100644 --- a/libse/SubtitleFormats/Xif.cs +++ b/libse/SubtitleFormats/Xif.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/Xmp.cs b/libse/SubtitleFormats/Xmp.cs index 987841f5a..306f1c4ca 100644 --- a/libse/SubtitleFormats/Xmp.cs +++ b/libse/SubtitleFormats/Xmp.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/YouTubeAnnotations.cs b/libse/SubtitleFormats/YouTubeAnnotations.cs index c440a860d..827960cf2 100644 --- a/libse/SubtitleFormats/YouTubeAnnotations.cs +++ b/libse/SubtitleFormats/YouTubeAnnotations.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/YouTubeSbv.cs b/libse/SubtitleFormats/YouTubeSbv.cs index f9b160114..85bf3b839 100644 --- a/libse/SubtitleFormats/YouTubeSbv.cs +++ b/libse/SubtitleFormats/YouTubeSbv.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/YouTubeTranscript.cs b/libse/SubtitleFormats/YouTubeTranscript.cs index 1c9341eee..364936438 100644 --- a/libse/SubtitleFormats/YouTubeTranscript.cs +++ b/libse/SubtitleFormats/YouTubeTranscript.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/YouTubeTranscriptOneLine.cs b/libse/SubtitleFormats/YouTubeTranscriptOneLine.cs index a0c67a8c4..2ed4a315f 100644 --- a/libse/SubtitleFormats/YouTubeTranscriptOneLine.cs +++ b/libse/SubtitleFormats/YouTubeTranscriptOneLine.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/SubtitleFormats/ZeroG.cs b/libse/SubtitleFormats/ZeroG.cs index 5c478a136..0771182b5 100644 --- a/libse/SubtitleFormats/ZeroG.cs +++ b/libse/SubtitleFormats/ZeroG.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.SubtitleFormats { diff --git a/libse/Translate/Formatting.cs b/libse/Translate/Formatting.cs index 84fa7345b..5e3d411b3 100644 --- a/libse/Translate/Formatting.cs +++ b/libse/Translate/Formatting.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Translate { diff --git a/libse/Translate/GoogleTranslator1.cs b/libse/Translate/GoogleTranslator1.cs index da5f9a759..b812efcb8 100644 --- a/libse/Translate/GoogleTranslator1.cs +++ b/libse/Translate/GoogleTranslator1.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Translate { diff --git a/libse/Translate/GoogleTranslator2.cs b/libse/Translate/GoogleTranslator2.cs index e85f8133b..bc0b43041 100644 --- a/libse/Translate/GoogleTranslator2.cs +++ b/libse/Translate/GoogleTranslator2.cs @@ -4,6 +4,7 @@ using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Translate { diff --git a/libse/Translate/GoogleTranslator3.cs b/libse/Translate/GoogleTranslator3.cs index bc8c46abc..17cb13747 100644 --- a/libse/Translate/GoogleTranslator3.cs +++ b/libse/Translate/GoogleTranslator3.cs @@ -4,6 +4,7 @@ using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Core.Translate diff --git a/libse/Translate/ITranslator.cs b/libse/Translate/ITranslator.cs index cee8ae88b..1f8a79bf0 100644 --- a/libse/Translate/ITranslator.cs +++ b/libse/Translate/ITranslator.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Translate { diff --git a/libse/Translate/MicrosoftTranslator.cs b/libse/Translate/MicrosoftTranslator.cs index babf97ca7..66ace8f14 100644 --- a/libse/Translate/MicrosoftTranslator.cs +++ b/libse/Translate/MicrosoftTranslator.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.Net; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.Translate { diff --git a/libse/VobSub/Idx.cs b/libse/VobSub/Idx.cs index 8e82c6953..afa04c273 100644 --- a/libse/VobSub/Idx.cs +++ b/libse/VobSub/Idx.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.VobSub { diff --git a/libse/VobSub/SubPicture.cs b/libse/VobSub/SubPicture.cs index 5cf86bcd0..c537d9890 100644 --- a/libse/VobSub/SubPicture.cs +++ b/libse/VobSub/SubPicture.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.VobSub { diff --git a/libse/VobSub/VobSubParser.cs b/libse/VobSub/VobSubParser.cs index 46cca9e82..fc20a33d4 100644 --- a/libse/VobSub/VobSubParser.cs +++ b/libse/VobSub/VobSubParser.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.VobSub { diff --git a/libse/VobSub/VobSubWriter.cs b/libse/VobSub/VobSubWriter.cs index 1d1988650..cb4c83c36 100644 --- a/libse/VobSub/VobSubWriter.cs +++ b/libse/VobSub/VobSubWriter.cs @@ -2,6 +2,7 @@ using System.Drawing; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Core.VobSub { diff --git a/src/Controls/AudioVisualizer.cs b/src/Controls/AudioVisualizer.cs index 9f7209cf4..1e31aa167 100644 --- a/src/Controls/AudioVisualizer.cs +++ b/src/Controls/AudioVisualizer.cs @@ -9,6 +9,7 @@ using System.Globalization; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Controls { diff --git a/src/Controls/SETextBox.cs b/src/Controls/SETextBox.cs index acd3b74b4..4271cf83b 100644 --- a/src/Controls/SETextBox.cs +++ b/src/Controls/SETextBox.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Controls { diff --git a/src/Controls/SubtitleListView.cs b/src/Controls/SubtitleListView.cs index 476fcff78..7e881ae46 100644 --- a/src/Controls/SubtitleListView.cs +++ b/src/Controls/SubtitleListView.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Controls { diff --git a/src/Controls/TimeUpDown.cs b/src/Controls/TimeUpDown.cs index ba012b9cb..bd54c7495 100644 --- a/src/Controls/TimeUpDown.cs +++ b/src/Controls/TimeUpDown.cs @@ -6,6 +6,7 @@ using System.ComponentModel; using System.Drawing; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Controls { diff --git a/src/Controls/VideoPlayerContainer.cs b/src/Controls/VideoPlayerContainer.cs index 1ebb6de18..ddc734c8f 100644 --- a/src/Controls/VideoPlayerContainer.cs +++ b/src/Controls/VideoPlayerContainer.cs @@ -9,6 +9,7 @@ using System.Windows.Forms; using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.Logic; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Controls { diff --git a/src/Forms/About.cs b/src/Forms/About.cs index f79468056..efc95d041 100644 --- a/src/Forms/About.cs +++ b/src/Forms/About.cs @@ -2,6 +2,7 @@ using System; using System.Diagnostics; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/AddToNames.cs b/src/Forms/AddToNames.cs index 394e81355..f7af4faae 100644 --- a/src/Forms/AddToNames.cs +++ b/src/Forms/AddToNames.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.Dictionaries; using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AddToUserDic.cs b/src/Forms/AddToUserDic.cs index 29979bf04..46ac55f86 100644 --- a/src/Forms/AddToUserDic.cs +++ b/src/Forms/AddToUserDic.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AddWaveform.cs b/src/Forms/AddWaveform.cs index aae37e77a..82b7779de 100644 --- a/src/Forms/AddWaveform.cs +++ b/src/Forms/AddWaveform.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.Globalization; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/AddWaveformBatch.cs b/src/Forms/AddWaveformBatch.cs index 2be8ad8a3..cef746c12 100644 --- a/src/Forms/AddWaveformBatch.cs +++ b/src/Forms/AddWaveformBatch.cs @@ -8,6 +8,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AdjustDisplayDuration.cs b/src/Forms/AdjustDisplayDuration.cs index 5aa2d23fc..73f169553 100644 --- a/src/Forms/AdjustDisplayDuration.cs +++ b/src/Forms/AdjustDisplayDuration.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AlignmentPicker.cs b/src/Forms/AlignmentPicker.cs index 5bf8604c2..6062c9a76 100644 --- a/src/Forms/AlignmentPicker.cs +++ b/src/Forms/AlignmentPicker.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AlignmentPickerJapanese.cs b/src/Forms/AlignmentPickerJapanese.cs index 8a119d1c9..de049ff2e 100644 --- a/src/Forms/AlignmentPickerJapanese.cs +++ b/src/Forms/AlignmentPickerJapanese.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/ApplyDurationLimits.cs b/src/Forms/ApplyDurationLimits.cs index 41adcace4..16d8a2c55 100644 --- a/src/Forms/ApplyDurationLimits.cs +++ b/src/Forms/ApplyDurationLimits.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/AudioToText.cs b/src/Forms/AudioToText.cs index 2953f3b48..51f4082a2 100644 --- a/src/Forms/AudioToText.cs +++ b/src/Forms/AudioToText.cs @@ -8,6 +8,7 @@ using System.Threading; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.AudioToText.PocketSphinx; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; using Nikse.SubtitleEdit.Logic; diff --git a/src/Forms/AutoBreakUnbreakLines.cs b/src/Forms/AutoBreakUnbreakLines.cs index 332c0628a..f8f0b649b 100644 --- a/src/Forms/AutoBreakUnbreakLines.cs +++ b/src/Forms/AutoBreakUnbreakLines.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/BatchConvert.Designer.cs b/src/Forms/BatchConvert.Designer.cs index 1602708f8..237869f53 100644 --- a/src/Forms/BatchConvert.Designer.cs +++ b/src/Forms/BatchConvert.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { sealed partial class BatchConvert { @@ -29,7 +31,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.buttonConvert = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.groupBoxConvertOptions = new System.Windows.Forms.GroupBox(); diff --git a/src/Forms/BatchConvert.cs b/src/Forms/BatchConvert.cs index 30bf5ce65..dd1668603 100644 --- a/src/Forms/BatchConvert.cs +++ b/src/Forms/BatchConvert.cs @@ -19,6 +19,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/BatchConvertMkvEnding.cs b/src/Forms/BatchConvertMkvEnding.cs index fe08c13a1..4defb8cb1 100644 --- a/src/Forms/BatchConvertMkvEnding.cs +++ b/src/Forms/BatchConvertMkvEnding.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/BatchConvertTsSettings.cs b/src/Forms/BatchConvertTsSettings.cs index 125ca09f9..af2009b8a 100644 --- a/src/Forms/BatchConvertTsSettings.cs +++ b/src/Forms/BatchConvertTsSettings.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/Beamer.cs b/src/Forms/Beamer.cs index 8774b8f64..fd768be68 100644 --- a/src/Forms/Beamer.cs +++ b/src/Forms/Beamer.cs @@ -7,6 +7,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/BookmarkAdd.cs b/src/Forms/BookmarkAdd.cs index 47418bd84..3cf6801c8 100644 --- a/src/Forms/BookmarkAdd.cs +++ b/src/Forms/BookmarkAdd.cs @@ -1,5 +1,6 @@ using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/BookmarksGoTo.cs b/src/Forms/BookmarksGoTo.cs index 9e6df112b..8daabcc92 100644 --- a/src/Forms/BookmarksGoTo.cs +++ b/src/Forms/BookmarksGoTo.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/Cavena890SaveOptions.Designer.cs b/src/Forms/Cavena890SaveOptions.Designer.cs index 340068206..31ccb519c 100644 --- a/src/Forms/Cavena890SaveOptions.Designer.cs +++ b/src/Forms/Cavena890SaveOptions.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { partial class Cavena890SaveOptions { @@ -28,7 +30,7 @@ /// private void InitializeComponent() { - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.labelTimeCodeStartOfProgramme = new System.Windows.Forms.Label(); this.buttonOK = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); diff --git a/src/Forms/Cavena890SaveOptions.cs b/src/Forms/Cavena890SaveOptions.cs index d1fffcc6f..e7496297d 100644 --- a/src/Forms/Cavena890SaveOptions.cs +++ b/src/Forms/Cavena890SaveOptions.cs @@ -2,6 +2,7 @@ using System.IO; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.Logic; diff --git a/src/Forms/ChangeCasing.cs b/src/Forms/ChangeCasing.cs index 8b34d43ad..e064e7166 100644 --- a/src/Forms/ChangeCasing.cs +++ b/src/Forms/ChangeCasing.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChangeCasingNames.cs b/src/Forms/ChangeCasingNames.cs index 873a2c610..12832b5a0 100644 --- a/src/Forms/ChangeCasingNames.cs +++ b/src/Forms/ChangeCasingNames.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChangeFrameRate.cs b/src/Forms/ChangeFrameRate.cs index 8c17f2f07..6b5c60764 100644 --- a/src/Forms/ChangeFrameRate.cs +++ b/src/Forms/ChangeFrameRate.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChangeSpeedInPercent.cs b/src/Forms/ChangeSpeedInPercent.cs index b971baf6d..8f289e313 100644 --- a/src/Forms/ChangeSpeedInPercent.cs +++ b/src/Forms/ChangeSpeedInPercent.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/CheckForUpdates.cs b/src/Forms/CheckForUpdates.cs index 3d546f778..220eda981 100644 --- a/src/Forms/CheckForUpdates.cs +++ b/src/Forms/CheckForUpdates.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.Forms; using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChooseAudioTrack.cs b/src/Forms/ChooseAudioTrack.cs index 303535077..1d3e85b80 100644 --- a/src/Forms/ChooseAudioTrack.cs +++ b/src/Forms/ChooseAudioTrack.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChooseEncoding.cs b/src/Forms/ChooseEncoding.cs index f0bb40d63..3b707a498 100644 --- a/src/Forms/ChooseEncoding.cs +++ b/src/Forms/ChooseEncoding.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChooseFontName.cs b/src/Forms/ChooseFontName.cs index c2fabb1b2..9271cec3e 100644 --- a/src/Forms/ChooseFontName.cs +++ b/src/Forms/ChooseFontName.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/ChooseLanguage.cs b/src/Forms/ChooseLanguage.cs index d491eeec4..ab6788525 100644 --- a/src/Forms/ChooseLanguage.cs +++ b/src/Forms/ChooseLanguage.cs @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChooseResolution.cs b/src/Forms/ChooseResolution.cs index f4172f7cb..8cf190928 100644 --- a/src/Forms/ChooseResolution.cs +++ b/src/Forms/ChooseResolution.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ChooseStyle.cs b/src/Forms/ChooseStyle.cs index 34a466788..3c971720e 100644 --- a/src/Forms/ChooseStyle.cs +++ b/src/Forms/ChooseStyle.cs @@ -5,6 +5,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ColorChooser.cs b/src/Forms/ColorChooser.cs index 537700d0e..b89d28916 100644 --- a/src/Forms/ColorChooser.cs +++ b/src/Forms/ColorChooser.cs @@ -23,6 +23,7 @@ using Nikse.SubtitleEdit.Logic.ColorChooser; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; #endregion Using directives diff --git a/src/Forms/ColumnPaste.cs b/src/Forms/ColumnPaste.cs index 52aebd333..7b3ceed03 100644 --- a/src/Forms/ColumnPaste.cs +++ b/src/Forms/ColumnPaste.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Compare.cs b/src/Forms/Compare.cs index 37d8d5a30..84b6cffa3 100644 --- a/src/Forms/Compare.cs +++ b/src/Forms/Compare.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DCinema/DCinemaPropertiesInterop.cs b/src/Forms/DCinema/DCinemaPropertiesInterop.cs index b7ae15ab9..2795a5583 100644 --- a/src/Forms/DCinema/DCinemaPropertiesInterop.cs +++ b/src/Forms/DCinema/DCinemaPropertiesInterop.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.DCinema { diff --git a/src/Forms/DCinema/DCinemaPropertiesSmpte.Designer.cs b/src/Forms/DCinema/DCinemaPropertiesSmpte.Designer.cs index 8deba001d..5ab817c9f 100644 --- a/src/Forms/DCinema/DCinemaPropertiesSmpte.Designer.cs +++ b/src/Forms/DCinema/DCinemaPropertiesSmpte.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms.DCinema +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms.DCinema { partial class DCinemaPropertiesSmpte { @@ -28,7 +30,7 @@ /// private void InitializeComponent() { - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.timeUpDownStartTime = new Nikse.SubtitleEdit.Controls.TimeUpDown(); this.labelStartTime = new System.Windows.Forms.Label(); diff --git a/src/Forms/DCinema/DCinemaPropertiesSmpte.cs b/src/Forms/DCinema/DCinemaPropertiesSmpte.cs index 23e796a4d..f1b6d07f1 100644 --- a/src/Forms/DCinema/DCinemaPropertiesSmpte.cs +++ b/src/Forms/DCinema/DCinemaPropertiesSmpte.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.DCinema { diff --git a/src/Forms/DialogDoNotShowAgain.cs b/src/Forms/DialogDoNotShowAgain.cs index c2ba9d14d..a6616ad40 100644 --- a/src/Forms/DialogDoNotShowAgain.cs +++ b/src/Forms/DialogDoNotShowAgain.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DoNotBreakAfterListEdit.cs b/src/Forms/DoNotBreakAfterListEdit.cs index 0537080fa..82315fa54 100644 --- a/src/Forms/DoNotBreakAfterListEdit.cs +++ b/src/Forms/DoNotBreakAfterListEdit.cs @@ -7,6 +7,7 @@ using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DownloadFfmpeg.cs b/src/Forms/DownloadFfmpeg.cs index da5ab1ed4..a0e44cf3b 100644 --- a/src/Forms/DownloadFfmpeg.cs +++ b/src/Forms/DownloadFfmpeg.cs @@ -4,6 +4,7 @@ using System.IO; using System.Net; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DurationsBridgeGaps.cs b/src/Forms/DurationsBridgeGaps.cs index 77477702f..db8c9fac4 100644 --- a/src/Forms/DurationsBridgeGaps.cs +++ b/src/Forms/DurationsBridgeGaps.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/DvdStudioProProperties.cs b/src/Forms/DvdStudioProProperties.cs index a2dfb2ed7..982e4e704 100644 --- a/src/Forms/DvdStudioProProperties.cs +++ b/src/Forms/DvdStudioProProperties.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DvdSubRip.cs b/src/Forms/DvdSubRip.cs index 4bf8f8447..a44d46e97 100644 --- a/src/Forms/DvdSubRip.cs +++ b/src/Forms/DvdSubRip.cs @@ -8,6 +8,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/DvdSubRipChooseLanguage.cs b/src/Forms/DvdSubRipChooseLanguage.cs index 9cb95ae30..1b21ebea0 100644 --- a/src/Forms/DvdSubRipChooseLanguage.cs +++ b/src/Forms/DvdSubRipChooseLanguage.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Forms.Ocr; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/EbuColorPicker.cs b/src/Forms/EbuColorPicker.cs index 7e2eb6163..e8d16f7f5 100644 --- a/src/Forms/EbuColorPicker.cs +++ b/src/Forms/EbuColorPicker.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/EbuLanguageCode.cs b/src/Forms/EbuLanguageCode.cs index bb9bd6503..b1fcf1e1e 100644 --- a/src/Forms/EbuLanguageCode.cs +++ b/src/Forms/EbuLanguageCode.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/EbuSaveOptions.Designer.cs b/src/Forms/EbuSaveOptions.Designer.cs index 6aab0a14a..f93b12565 100644 --- a/src/Forms/EbuSaveOptions.Designer.cs +++ b/src/Forms/EbuSaveOptions.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { partial class EbuSaveOptions { @@ -29,7 +31,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.buttonOK = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); diff --git a/src/Forms/EbuSaveOptions.cs b/src/Forms/EbuSaveOptions.cs index ed99bb7d8..a425c3830 100644 --- a/src/Forms/EbuSaveOptions.cs +++ b/src/Forms/EbuSaveOptions.cs @@ -6,6 +6,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/EffectKaraoke.cs b/src/Forms/EffectKaraoke.cs index a29bf2378..9bef51736 100644 --- a/src/Forms/EffectKaraoke.cs +++ b/src/Forms/EffectKaraoke.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/EffectTypewriter.cs b/src/Forms/EffectTypewriter.cs index c6b49d99a..36bb77111 100644 --- a/src/Forms/EffectTypewriter.cs +++ b/src/Forms/EffectTypewriter.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportCustomText.cs b/src/Forms/ExportCustomText.cs index fb8893535..8497c056d 100644 --- a/src/Forms/ExportCustomText.cs +++ b/src/Forms/ExportCustomText.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportCustomTextFormat.cs b/src/Forms/ExportCustomTextFormat.cs index 6f26194fe..48fc4db46 100644 --- a/src/Forms/ExportCustomTextFormat.cs +++ b/src/Forms/ExportCustomTextFormat.cs @@ -4,6 +4,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportFcpXmlAdvanced.cs b/src/Forms/ExportFcpXmlAdvanced.cs index 3d46aad5e..be49276bf 100644 --- a/src/Forms/ExportFcpXmlAdvanced.cs +++ b/src/Forms/ExportFcpXmlAdvanced.cs @@ -8,6 +8,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportPngXml.cs b/src/Forms/ExportPngXml.cs index 5fcbecf33..00872947c 100644 --- a/src/Forms/ExportPngXml.cs +++ b/src/Forms/ExportPngXml.cs @@ -20,6 +20,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { @@ -5519,7 +5520,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + } } - private void SubtitleListView1InitializeLanguage(LanguageStructure.General general, Core.Settings settings) + private void SubtitleListView1InitializeLanguage(LanguageStructure.General general, Core.Common.Settings settings) { int columnIndexNumber = 0; int columnIndexStart = 1; diff --git a/src/Forms/ExportPngXmlDialogOpenFolder.cs b/src/Forms/ExportPngXmlDialogOpenFolder.cs index 54052f677..e768cf2b5 100644 --- a/src/Forms/ExportPngXmlDialogOpenFolder.cs +++ b/src/Forms/ExportPngXmlDialogOpenFolder.cs @@ -2,6 +2,7 @@ using System.Drawing; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/ExportPngXmlPreview.cs b/src/Forms/ExportPngXmlPreview.cs index 5185cc650..70a0481e5 100644 --- a/src/Forms/ExportPngXmlPreview.cs +++ b/src/Forms/ExportPngXmlPreview.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportText.cs b/src/Forms/ExportText.cs index db739be5a..58c99291d 100644 --- a/src/Forms/ExportText.cs +++ b/src/Forms/ExportText.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExportTextST.cs b/src/Forms/ExportTextST.cs index 9b099fbc6..a0604fb29 100644 --- a/src/Forms/ExportTextST.cs +++ b/src/Forms/ExportTextST.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ExtractDateTimeInfo.Designer.cs b/src/Forms/ExtractDateTimeInfo.Designer.cs index 792ea9974..56d8818ee 100644 --- a/src/Forms/ExtractDateTimeInfo.Designer.cs +++ b/src/Forms/ExtractDateTimeInfo.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { sealed partial class ExtractDateTimeInfo { @@ -28,8 +30,8 @@ /// private void InitializeComponent() { - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); - Nikse.SubtitleEdit.Core.TimeCode timeCode2 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); + TimeCode timeCode2 = new TimeCode(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.buttonOpenVideo = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); diff --git a/src/Forms/ExtractDateTimeInfo.cs b/src/Forms/ExtractDateTimeInfo.cs index b213ecf52..5d45e1027 100644 --- a/src/Forms/ExtractDateTimeInfo.cs +++ b/src/Forms/ExtractDateTimeInfo.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/FcpProperties.cs b/src/Forms/FcpProperties.cs index 486c35998..f8710975e 100644 --- a/src/Forms/FcpProperties.cs +++ b/src/Forms/FcpProperties.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/FindDialog.cs b/src/Forms/FindDialog.cs index cc7830231..b338381fe 100644 --- a/src/Forms/FindDialog.cs +++ b/src/Forms/FindDialog.cs @@ -5,6 +5,7 @@ using System; using System.Drawing; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/FindSubtitleLine.cs b/src/Forms/FindSubtitleLine.cs index 509946063..23ac9de52 100644 --- a/src/Forms/FindSubtitleLine.cs +++ b/src/Forms/FindSubtitleLine.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/FixCommonErrors.Designer.cs b/src/Forms/FixCommonErrors.Designer.cs index 49c1df1dc..37a17e563 100644 --- a/src/Forms/FixCommonErrors.Designer.cs +++ b/src/Forms/FixCommonErrors.Designer.cs @@ -1,4 +1,5 @@ using Nikse.SubtitleEdit.Controls; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { @@ -31,7 +32,7 @@ namespace Nikse.SubtitleEdit.Forms private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonNextFinish = new System.Windows.Forms.Button(); this.labelStatus = new System.Windows.Forms.Label(); diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index d0bea698a..02e96fcb1 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/GetDictionaries.cs b/src/Forms/GetDictionaries.cs index ba63c27ad..f4fa65c65 100644 --- a/src/Forms/GetDictionaries.cs +++ b/src/Forms/GetDictionaries.cs @@ -7,6 +7,7 @@ using System.IO.Compression; using System.Net; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/GoToLine.cs b/src/Forms/GoToLine.cs index a864eada0..bbcc11de3 100644 --- a/src/Forms/GoToLine.cs +++ b/src/Forms/GoToLine.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/GoogleOrMicrosoftTranslate.cs b/src/Forms/GoogleOrMicrosoftTranslate.cs index cc868e336..430447352 100644 --- a/src/Forms/GoogleOrMicrosoftTranslate.cs +++ b/src/Forms/GoogleOrMicrosoftTranslate.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Translate; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/GoogleTranslate.cs b/src/Forms/GoogleTranslate.cs index 60ebe9cff..4b3cfe9b8 100644 --- a/src/Forms/GoogleTranslate.cs +++ b/src/Forms/GoogleTranslate.cs @@ -10,6 +10,7 @@ using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/HardSubExtract.cs b/src/Forms/HardSubExtract.cs index 86151a711..1780282e1 100644 --- a/src/Forms/HardSubExtract.cs +++ b/src/Forms/HardSubExtract.cs @@ -5,6 +5,8 @@ using System; using System.Drawing; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; + //using Nikse.SubtitleEdit.Logic.DirectShow.Custom; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/ImportCdg.cs b/src/Forms/ImportCdg.cs index 2e3e13a8b..ccceb4fef 100644 --- a/src/Forms/ImportCdg.cs +++ b/src/Forms/ImportCdg.cs @@ -12,6 +12,7 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ImportFinalDraft.cs b/src/Forms/ImportFinalDraft.cs index 6b3a48312..756c5675d 100644 --- a/src/Forms/ImportFinalDraft.cs +++ b/src/Forms/ImportFinalDraft.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ImportImages.cs b/src/Forms/ImportImages.cs index 387290a7c..2cb3ce898 100644 --- a/src/Forms/ImportImages.cs +++ b/src/Forms/ImportImages.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/ImportSceneChanges.cs b/src/Forms/ImportSceneChanges.cs index 45775c1e4..df6af4fd9 100644 --- a/src/Forms/ImportSceneChanges.cs +++ b/src/Forms/ImportSceneChanges.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ImportText.cs b/src/Forms/ImportText.cs index 87448aae3..c6f740200 100644 --- a/src/Forms/ImportText.cs +++ b/src/Forms/ImportText.cs @@ -10,6 +10,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ImportUnknownFormat.cs b/src/Forms/ImportUnknownFormat.cs index c8a5f98d8..4f85cc80d 100644 --- a/src/Forms/ImportUnknownFormat.cs +++ b/src/Forms/ImportUnknownFormat.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Interjections.cs b/src/Forms/Interjections.cs index 62192697a..d79f00d52 100644 --- a/src/Forms/Interjections.cs +++ b/src/Forms/Interjections.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/JoinSubtitles.cs b/src/Forms/JoinSubtitles.cs index b582e1c12..62b213d79 100644 --- a/src/Forms/JoinSubtitles.cs +++ b/src/Forms/JoinSubtitles.cs @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Main.Designer.cs b/src/Forms/Main.Designer.cs index 8d21eb9dd..246e28555 100644 --- a/src/Forms/Main.Designer.cs +++ b/src/Forms/Main.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { sealed partial class Main { @@ -38,9 +40,9 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); - Nikse.SubtitleEdit.Core.TimeCode timeCode4 = new Nikse.SubtitleEdit.Core.TimeCode(); - Nikse.SubtitleEdit.Core.TimeCode timeCode5 = new Nikse.SubtitleEdit.Core.TimeCode(); - Nikse.SubtitleEdit.Core.TimeCode timeCode6 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode4 = new TimeCode(); + TimeCode timeCode5 = new TimeCode(); + TimeCode timeCode6 = new TimeCode(); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.labelStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripSelected = new System.Windows.Forms.ToolStripStatusLabel(); diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index 7a97866e1..1edcc0bd7 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -32,6 +32,7 @@ using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MatroskaSubtitleChooser.cs b/src/Forms/MatroskaSubtitleChooser.cs index 544f2061f..2ffa511f3 100644 --- a/src/Forms/MatroskaSubtitleChooser.cs +++ b/src/Forms/MatroskaSubtitleChooser.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MeasurementConverter.cs b/src/Forms/MeasurementConverter.cs index 59526f8b6..b004dbf5f 100644 --- a/src/Forms/MeasurementConverter.cs +++ b/src/Forms/MeasurementConverter.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MergeDoubleLines.cs b/src/Forms/MergeDoubleLines.cs index e86469b57..f1f2ee7e5 100644 --- a/src/Forms/MergeDoubleLines.cs +++ b/src/Forms/MergeDoubleLines.cs @@ -6,6 +6,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MergeShortLines.cs b/src/Forms/MergeShortLines.cs index 97ebc2987..8df0d2ef8 100644 --- a/src/Forms/MergeShortLines.cs +++ b/src/Forms/MergeShortLines.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MergeTextWithSameTimeCodes.cs b/src/Forms/MergeTextWithSameTimeCodes.cs index d162fcea4..c991b4ae4 100644 --- a/src/Forms/MergeTextWithSameTimeCodes.cs +++ b/src/Forms/MergeTextWithSameTimeCodes.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ModifySelection.cs b/src/Forms/ModifySelection.cs index ffeac60a6..736e14594 100644 --- a/src/Forms/ModifySelection.cs +++ b/src/Forms/ModifySelection.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/MultipleReplace.cs b/src/Forms/MultipleReplace.cs index 8f5a4858e..0f7613360 100644 --- a/src/Forms/MultipleReplace.cs +++ b/src/Forms/MultipleReplace.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MultipleReplaceExportImport.cs b/src/Forms/MultipleReplaceExportImport.cs index 8aeb78e3c..baa61765e 100644 --- a/src/Forms/MultipleReplaceExportImport.cs +++ b/src/Forms/MultipleReplaceExportImport.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Windows.Forms; using System.Xml; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/MultipleReplaceNewGroup.cs b/src/Forms/MultipleReplaceNewGroup.cs index 4b14c12f7..66c5bbd8e 100644 --- a/src/Forms/MultipleReplaceNewGroup.cs +++ b/src/Forms/MultipleReplaceNewGroup.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/NetflixFixErrors.cs b/src/Forms/NetflixFixErrors.cs index a52295c91..3ac76053b 100644 --- a/src/Forms/NetflixFixErrors.cs +++ b/src/Forms/NetflixFixErrors.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IO; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.NetflixQualityCheck; using Nikse.SubtitleEdit.Core.SubtitleFormats; using static Nikse.SubtitleEdit.Forms.FixCommonErrors; diff --git a/src/Forms/Networking/NetworkChat.cs b/src/Forms/Networking/NetworkChat.cs index 1be201d6d..d76944512 100644 --- a/src/Forms/Networking/NetworkChat.cs +++ b/src/Forms/Networking/NetworkChat.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; using Nikse.SubtitleEdit.Logic.Networking; diff --git a/src/Forms/Networking/NetworkJoin.cs b/src/Forms/Networking/NetworkJoin.cs index 710b4a584..24adb389b 100644 --- a/src/Forms/Networking/NetworkJoin.cs +++ b/src/Forms/Networking/NetworkJoin.cs @@ -2,6 +2,7 @@ using System.Net; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms.Networking diff --git a/src/Forms/Networking/NetworkLogAndInfo.cs b/src/Forms/Networking/NetworkLogAndInfo.cs index b56242c2e..831a77fd7 100644 --- a/src/Forms/Networking/NetworkLogAndInfo.cs +++ b/src/Forms/Networking/NetworkLogAndInfo.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms.Networking diff --git a/src/Forms/Networking/NetworkStart.cs b/src/Forms/Networking/NetworkStart.cs index 19cf43c7e..3a8b10523 100644 --- a/src/Forms/Networking/NetworkStart.cs +++ b/src/Forms/Networking/NetworkStart.cs @@ -2,6 +2,7 @@ using System.Net; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms.Networking diff --git a/src/Forms/NuendoProperties.cs b/src/Forms/NuendoProperties.cs index 9eafdf7f5..cd404b561 100644 --- a/src/Forms/NuendoProperties.cs +++ b/src/Forms/NuendoProperties.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Ocr/AddBeterMultiMatch.cs b/src/Forms/Ocr/AddBeterMultiMatch.cs index dc26be0b8..6b502d0ae 100644 --- a/src/Forms/Ocr/AddBeterMultiMatch.cs +++ b/src/Forms/Ocr/AddBeterMultiMatch.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using Nikse.SubtitleEdit.Logic.Ocr.Binary; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/AddBetterMultiMatchNOcr.cs b/src/Forms/Ocr/AddBetterMultiMatchNOcr.cs index 308569058..96bef1109 100644 --- a/src/Forms/Ocr/AddBetterMultiMatchNOcr.cs +++ b/src/Forms/Ocr/AddBetterMultiMatchNOcr.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/AddToOcrReplaceList.cs b/src/Forms/Ocr/AddToOcrReplaceList.cs index bb18ea17f..2441db802 100644 --- a/src/Forms/Ocr/AddToOcrReplaceList.cs +++ b/src/Forms/Ocr/AddToOcrReplaceList.cs @@ -4,6 +4,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/BinaryOcrChooseEditDb.cs b/src/Forms/Ocr/BinaryOcrChooseEditDb.cs index e8ea2adc5..9ec785b9a 100644 --- a/src/Forms/Ocr/BinaryOcrChooseEditDb.cs +++ b/src/Forms/Ocr/BinaryOcrChooseEditDb.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; using Nikse.SubtitleEdit.Logic.Ocr; using Nikse.SubtitleEdit.Logic.Ocr.Binary; diff --git a/src/Forms/Ocr/BinaryOcrTrain.cs b/src/Forms/Ocr/BinaryOcrTrain.cs index bb7354db0..d4e9730ab 100644 --- a/src/Forms/Ocr/BinaryOcrTrain.cs +++ b/src/Forms/Ocr/BinaryOcrTrain.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/DownloadTesseract302.cs b/src/Forms/Ocr/DownloadTesseract302.cs index dc275fd92..465172759 100644 --- a/src/Forms/Ocr/DownloadTesseract302.cs +++ b/src/Forms/Ocr/DownloadTesseract302.cs @@ -4,6 +4,7 @@ using System.IO.Compression; using System.Net; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/DownloadTesseract4.cs b/src/Forms/Ocr/DownloadTesseract4.cs index 7ac9a8951..2d98d099b 100644 --- a/src/Forms/Ocr/DownloadTesseract4.cs +++ b/src/Forms/Ocr/DownloadTesseract4.cs @@ -4,6 +4,7 @@ using System.IO; using System.IO.Compression; using System.Net; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/GetTesseract302Dictionaries.cs b/src/Forms/Ocr/GetTesseract302Dictionaries.cs index daf446cb4..86f46abad 100644 --- a/src/Forms/Ocr/GetTesseract302Dictionaries.cs +++ b/src/Forms/Ocr/GetTesseract302Dictionaries.cs @@ -7,6 +7,7 @@ using System.Net; using System.Windows.Forms; using System.Xml; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms.Ocr diff --git a/src/Forms/Ocr/GetTesseractDictionaries.cs b/src/Forms/Ocr/GetTesseractDictionaries.cs index 4e0dad9e9..e7916816e 100644 --- a/src/Forms/Ocr/GetTesseractDictionaries.cs +++ b/src/Forms/Ocr/GetTesseractDictionaries.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Net; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms.Ocr diff --git a/src/Forms/Ocr/OCRSpellCheck.cs b/src/Forms/Ocr/OCRSpellCheck.cs index 573477e2b..4e7390953 100644 --- a/src/Forms/Ocr/OCRSpellCheck.cs +++ b/src/Forms/Ocr/OCRSpellCheck.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/OcrPreprocessingSettings.cs b/src/Forms/Ocr/OcrPreprocessingSettings.cs index a0d5ed7de..2739fee96 100644 --- a/src/Forms/Ocr/OcrPreprocessingSettings.cs +++ b/src/Forms/Ocr/OcrPreprocessingSettings.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic.Ocr; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/OcrPreprocessingT4.cs b/src/Forms/Ocr/OcrPreprocessingT4.cs index a47d07399..6614544f2 100644 --- a/src/Forms/Ocr/OcrPreprocessingT4.cs +++ b/src/Forms/Ocr/OcrPreprocessingT4.cs @@ -2,6 +2,7 @@ using System.Drawing; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic.Ocr; using Bitmap = System.Drawing.Bitmap; diff --git a/src/Forms/Ocr/VobSubCharactersImport.cs b/src/Forms/Ocr/VobSubCharactersImport.cs index 1d99978c7..14c09e7f2 100644 --- a/src/Forms/Ocr/VobSubCharactersImport.cs +++ b/src/Forms/Ocr/VobSubCharactersImport.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubEditCharacters.cs b/src/Forms/Ocr/VobSubEditCharacters.cs index 73b22b869..3b42345e6 100644 --- a/src/Forms/Ocr/VobSubEditCharacters.cs +++ b/src/Forms/Ocr/VobSubEditCharacters.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubNOcrCharacterInspect.cs b/src/Forms/Ocr/VobSubNOcrCharacterInspect.cs index 3f0e6c08c..c07259d60 100644 --- a/src/Forms/Ocr/VobSubNOcrCharacterInspect.cs +++ b/src/Forms/Ocr/VobSubNOcrCharacterInspect.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubNOcrEdit.cs b/src/Forms/Ocr/VobSubNOcrEdit.cs index 1c547fd0d..f4a55f63c 100644 --- a/src/Forms/Ocr/VobSubNOcrEdit.cs +++ b/src/Forms/Ocr/VobSubNOcrEdit.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubNOcrTrain.cs b/src/Forms/Ocr/VobSubNOcrTrain.cs index 9b5c6c2ba..831ecccbe 100644 --- a/src/Forms/Ocr/VobSubNOcrTrain.cs +++ b/src/Forms/Ocr/VobSubNOcrTrain.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcr.cs b/src/Forms/Ocr/VobSubOcr.cs index 97ba21cce..af49b3de0 100644 --- a/src/Forms/Ocr/VobSubOcr.cs +++ b/src/Forms/Ocr/VobSubOcr.cs @@ -25,6 +25,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcrCharacter.cs b/src/Forms/Ocr/VobSubOcrCharacter.cs index 2e02e6442..d37a62986 100644 --- a/src/Forms/Ocr/VobSubOcrCharacter.cs +++ b/src/Forms/Ocr/VobSubOcrCharacter.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcrCharacterInspect.cs b/src/Forms/Ocr/VobSubOcrCharacterInspect.cs index 4650d5de6..d24250fb5 100644 --- a/src/Forms/Ocr/VobSubOcrCharacterInspect.cs +++ b/src/Forms/Ocr/VobSubOcrCharacterInspect.cs @@ -9,6 +9,7 @@ using System.IO; using System.Text; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcrNOcrCharacter.cs b/src/Forms/Ocr/VobSubOcrNOcrCharacter.cs index 0b7608861..ea73f40aa 100644 --- a/src/Forms/Ocr/VobSubOcrNOcrCharacter.cs +++ b/src/Forms/Ocr/VobSubOcrNOcrCharacter.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcrNewFolder.cs b/src/Forms/Ocr/VobSubOcrNewFolder.cs index c9e294e54..065840f18 100644 --- a/src/Forms/Ocr/VobSubOcrNewFolder.cs +++ b/src/Forms/Ocr/VobSubOcrNewFolder.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/Ocr/VobSubOcrSetItalicFactor.cs b/src/Forms/Ocr/VobSubOcrSetItalicFactor.cs index d2f5c55af..fb2fee015 100644 --- a/src/Forms/Ocr/VobSubOcrSetItalicFactor.cs +++ b/src/Forms/Ocr/VobSubOcrSetItalicFactor.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Ocr { diff --git a/src/Forms/OpenVideoDvd.cs b/src/Forms/OpenVideoDvd.cs index 9cce7cb41..463b6f9a5 100644 --- a/src/Forms/OpenVideoDvd.cs +++ b/src/Forms/OpenVideoDvd.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/PacEncoding.cs b/src/Forms/PacEncoding.cs index 7c61922f1..47db8205f 100644 --- a/src/Forms/PacEncoding.cs +++ b/src/Forms/PacEncoding.cs @@ -4,6 +4,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/PluginsGet.cs b/src/Forms/PluginsGet.cs index 9f12ad148..2323d3cad 100644 --- a/src/Forms/PluginsGet.cs +++ b/src/Forms/PluginsGet.cs @@ -9,6 +9,7 @@ using System.Net; using System.Net.Cache; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ProfileChoose.cs b/src/Forms/ProfileChoose.cs index a037afaf6..03476e0c0 100644 --- a/src/Forms/ProfileChoose.cs +++ b/src/Forms/ProfileChoose.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/RemoveTextFromHearImpaired.cs b/src/Forms/RemoveTextFromHearImpaired.cs index 8a5c27848..ba3d81d2f 100644 --- a/src/Forms/RemoveTextFromHearImpaired.cs +++ b/src/Forms/RemoveTextFromHearImpaired.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.Globalization; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ReplaceDialog.cs b/src/Forms/ReplaceDialog.cs index 33ee15628..491e4c27f 100644 --- a/src/Forms/ReplaceDialog.cs +++ b/src/Forms/ReplaceDialog.cs @@ -5,6 +5,7 @@ using System; using System.Drawing; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/RestoreAutoBackup.cs b/src/Forms/RestoreAutoBackup.cs index fc7c87885..0cc2ef39a 100644 --- a/src/Forms/RestoreAutoBackup.cs +++ b/src/Forms/RestoreAutoBackup.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/RubyJapanese.cs b/src/Forms/RubyJapanese.cs index cc277cf01..cc7b07039 100644 --- a/src/Forms/RubyJapanese.cs +++ b/src/Forms/RubyJapanese.cs @@ -1,5 +1,6 @@ using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/SeekSilence.cs b/src/Forms/SeekSilence.cs index 63e411147..61c30bbaf 100644 --- a/src/Forms/SeekSilence.cs +++ b/src/Forms/SeekSilence.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SetMinimumDisplayTimeBetweenParagraphs.cs b/src/Forms/SetMinimumDisplayTimeBetweenParagraphs.cs index c84ef2d91..7c8b4f152 100644 --- a/src/Forms/SetMinimumDisplayTimeBetweenParagraphs.cs +++ b/src/Forms/SetMinimumDisplayTimeBetweenParagraphs.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SetSyncPoint.Designer.cs b/src/Forms/SetSyncPoint.Designer.cs index 916304589..a554c8540 100644 --- a/src/Forms/SetSyncPoint.Designer.cs +++ b/src/Forms/SetSyncPoint.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { partial class SetSyncPoint { @@ -29,7 +31,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.groupBoxSyncPointTimeCode = new System.Windows.Forms.GroupBox(); this.timeUpDownLine = new Nikse.SubtitleEdit.Controls.TimeUpDown(); this.groupBox2 = new System.Windows.Forms.GroupBox(); diff --git a/src/Forms/SetSyncPoint.cs b/src/Forms/SetSyncPoint.cs index df4c841c3..449e6bd47 100644 --- a/src/Forms/SetSyncPoint.cs +++ b/src/Forms/SetSyncPoint.cs @@ -4,6 +4,7 @@ using Nikse.SubtitleEdit.Logic.VideoPlayers; using System; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SetVideoOffset.Designer.cs b/src/Forms/SetVideoOffset.Designer.cs index 80335adf1..e7f8a68ef 100644 --- a/src/Forms/SetVideoOffset.Designer.cs +++ b/src/Forms/SetVideoOffset.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { sealed partial class SetVideoOffset { @@ -28,7 +30,7 @@ /// private void InitializeComponent() { - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOK = new System.Windows.Forms.Button(); this.labelDescription = new System.Windows.Forms.Label(); diff --git a/src/Forms/SetVideoOffset.cs b/src/Forms/SetVideoOffset.cs index 94e6320b9..18d487de4 100644 --- a/src/Forms/SetVideoOffset.cs +++ b/src/Forms/SetVideoOffset.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Settings.cs b/src/Forms/Settings.cs index ff652f0c2..4d019a2c7 100644 --- a/src/Forms/Settings.cs +++ b/src/Forms/Settings.cs @@ -16,6 +16,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SettingsFixContinuationStyle.cs b/src/Forms/SettingsFixContinuationStyle.cs index 8850f4cbe..bc76d233d 100644 --- a/src/Forms/SettingsFixContinuationStyle.cs +++ b/src/Forms/SettingsFixContinuationStyle.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SettingsGapChoose.cs b/src/Forms/SettingsGapChoose.cs index 4b6a5b323..ca03bc7a3 100644 --- a/src/Forms/SettingsGapChoose.cs +++ b/src/Forms/SettingsGapChoose.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SettingsLineWidth.cs b/src/Forms/SettingsLineWidth.cs index f014e2485..784040789 100644 --- a/src/Forms/SettingsLineWidth.cs +++ b/src/Forms/SettingsLineWidth.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SettingsMpv.cs b/src/Forms/SettingsMpv.cs index 55bc4c1f3..444e9d391 100644 --- a/src/Forms/SettingsMpv.cs +++ b/src/Forms/SettingsMpv.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Net; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic.VideoPlayers; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/SettingsProfile.cs b/src/Forms/SettingsProfile.cs index 12a855c96..959be1562 100644 --- a/src/Forms/SettingsProfile.cs +++ b/src/Forms/SettingsProfile.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; using Nikse.SubtitleEdit.Logic; diff --git a/src/Forms/SettingsProfileExport.cs b/src/Forms/SettingsProfileExport.cs index 830e8c8ed..ff8e5a449 100644 --- a/src/Forms/SettingsProfileExport.cs +++ b/src/Forms/SettingsProfileExport.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ShowEarlierLater.Designer.cs b/src/Forms/ShowEarlierLater.Designer.cs index 09b572fac..20193cc14 100644 --- a/src/Forms/ShowEarlierLater.Designer.cs +++ b/src/Forms/ShowEarlierLater.Designer.cs @@ -1,4 +1,5 @@ using Nikse.SubtitleEdit.Controls; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { @@ -31,7 +32,7 @@ namespace Nikse.SubtitleEdit.Forms private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.labelHourMinSecMilliSecond = new System.Windows.Forms.Label(); this.buttonShowLater = new System.Windows.Forms.Button(); this.buttonShowEarlier = new System.Windows.Forms.Button(); diff --git a/src/Forms/ShowEarlierLater.cs b/src/Forms/ShowEarlierLater.cs index 3e87a40d3..28cd2703a 100644 --- a/src/Forms/ShowEarlierLater.cs +++ b/src/Forms/ShowEarlierLater.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.Enums; using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/ShowHistory.cs b/src/Forms/ShowHistory.cs index 28b3d5a54..12bba9a3f 100644 --- a/src/Forms/ShowHistory.cs +++ b/src/Forms/ShowHistory.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SpellCheck.cs b/src/Forms/SpellCheck.cs index 4bfbe4a54..c8e930d78 100644 --- a/src/Forms/SpellCheck.cs +++ b/src/Forms/SpellCheck.cs @@ -10,6 +10,7 @@ using System.Drawing; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Split.cs b/src/Forms/Split.cs index b72f93b89..5995f0682 100644 --- a/src/Forms/Split.cs +++ b/src/Forms/Split.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SplitLongLines.cs b/src/Forms/SplitLongLines.cs index c19646fd4..5f43064c6 100644 --- a/src/Forms/SplitLongLines.cs +++ b/src/Forms/SplitLongLines.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SplitSubtitle.Designer.cs b/src/Forms/SplitSubtitle.Designer.cs index b837fafde..a01d6ed37 100644 --- a/src/Forms/SplitSubtitle.Designer.cs +++ b/src/Forms/SplitSubtitle.Designer.cs @@ -1,4 +1,6 @@ -namespace Nikse.SubtitleEdit.Forms +using Nikse.SubtitleEdit.Core.Common; + +namespace Nikse.SubtitleEdit.Forms { sealed partial class SplitSubtitle { @@ -28,7 +30,7 @@ /// private void InitializeComponent() { - Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode(); + TimeCode timeCode1 = new TimeCode(); this.buttonGetFrameRate = new System.Windows.Forms.Button(); this.buttonDone = new System.Windows.Forms.Button(); this.buttonSplit = new System.Windows.Forms.Button(); diff --git a/src/Forms/SplitSubtitle.cs b/src/Forms/SplitSubtitle.cs index db609f963..647dccd3b 100644 --- a/src/Forms/SplitSubtitle.cs +++ b/src/Forms/SplitSubtitle.cs @@ -5,6 +5,7 @@ using System; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/StartNumberingFrom.cs b/src/Forms/StartNumberingFrom.cs index 9c54fce85..70c9edef8 100644 --- a/src/Forms/StartNumberingFrom.cs +++ b/src/Forms/StartNumberingFrom.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Statistics.cs b/src/Forms/Statistics.cs index 0f6bd147a..415d3379f 100644 --- a/src/Forms/Statistics.cs +++ b/src/Forms/Statistics.cs @@ -7,6 +7,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/StatusLog.cs b/src/Forms/StatusLog.cs index 36e12cfc7..56cfc973f 100644 --- a/src/Forms/StatusLog.cs +++ b/src/Forms/StatusLog.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System.Collections.Generic; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Styles/SubStationAlphaStyles.cs b/src/Forms/Styles/SubStationAlphaStyles.cs index f70d6ccc0..9dbbfaaf9 100644 --- a/src/Forms/Styles/SubStationAlphaStyles.cs +++ b/src/Forms/Styles/SubStationAlphaStyles.cs @@ -7,6 +7,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Styles { diff --git a/src/Forms/Styles/SubStationAlphaStylesBatchConvert.cs b/src/Forms/Styles/SubStationAlphaStylesBatchConvert.cs index ccaa1f6ae..f7d43c5f1 100644 --- a/src/Forms/Styles/SubStationAlphaStylesBatchConvert.cs +++ b/src/Forms/Styles/SubStationAlphaStylesBatchConvert.cs @@ -6,6 +6,7 @@ using System.Drawing; using System.Globalization; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Styles { diff --git a/src/Forms/Styles/SubStationAlphaStylesExport.cs b/src/Forms/Styles/SubStationAlphaStylesExport.cs index 2d5a42d44..1660cc133 100644 --- a/src/Forms/Styles/SubStationAlphaStylesExport.cs +++ b/src/Forms/Styles/SubStationAlphaStylesExport.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Styles { diff --git a/src/Forms/Styles/TimedTextStyles.cs b/src/Forms/Styles/TimedTextStyles.cs index c6ec70120..86074e43e 100644 --- a/src/Forms/Styles/TimedTextStyles.cs +++ b/src/Forms/Styles/TimedTextStyles.cs @@ -8,6 +8,7 @@ using System.Drawing.Text; using System.Text; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms.Styles { diff --git a/src/Forms/SubStationAlphaProperties.cs b/src/Forms/SubStationAlphaProperties.cs index 7c741ebf6..c4dd4e8be 100644 --- a/src/Forms/SubStationAlphaProperties.cs +++ b/src/Forms/SubStationAlphaProperties.cs @@ -6,6 +6,7 @@ using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/SyncPointsSync.cs b/src/Forms/SyncPointsSync.cs index 7f7054e30..4c42529a8 100644 --- a/src/Forms/SyncPointsSync.cs +++ b/src/Forms/SyncPointsSync.cs @@ -6,6 +6,7 @@ using System.Drawing; using System.Globalization; using System.Linq; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/TextPrompt.cs b/src/Forms/TextPrompt.cs index d131506fd..85a226aa4 100644 --- a/src/Forms/TextPrompt.cs +++ b/src/Forms/TextPrompt.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/TimedTextNewLanguage.cs b/src/Forms/TimedTextNewLanguage.cs index 6270cb345..718f9716d 100644 --- a/src/Forms/TimedTextNewLanguage.cs +++ b/src/Forms/TimedTextNewLanguage.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/TimedTextProperties.cs b/src/Forms/TimedTextProperties.cs index 9a83289f7..0bb4dbb66 100644 --- a/src/Forms/TimedTextProperties.cs +++ b/src/Forms/TimedTextProperties.cs @@ -5,6 +5,7 @@ using System; using System.Globalization; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/TransportStreamSubtitleChooser.cs b/src/Forms/TransportStreamSubtitleChooser.cs index bfa3327cc..8fbe3f803 100644 --- a/src/Forms/TransportStreamSubtitleChooser.cs +++ b/src/Forms/TransportStreamSubtitleChooser.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.Globalization; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; namespace Nikse.SubtitleEdit.Forms diff --git a/src/Forms/UnknownSubtitle.cs b/src/Forms/UnknownSubtitle.cs index 49dc29c16..88a190375 100644 --- a/src/Forms/UnknownSubtitle.cs +++ b/src/Forms/UnknownSubtitle.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Logic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/VideoControlsUndocked.cs b/src/Forms/VideoControlsUndocked.cs index 08bb33877..6b71cd4e4 100644 --- a/src/Forms/VideoControlsUndocked.cs +++ b/src/Forms/VideoControlsUndocked.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/VideoError.cs b/src/Forms/VideoError.cs index a7961e99a..3ef6b125c 100644 --- a/src/Forms/VideoError.cs +++ b/src/Forms/VideoError.cs @@ -4,6 +4,7 @@ using Nikse.SubtitleEdit.Logic.VideoPlayers; using System; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/VideoPlayerUndocked.cs b/src/Forms/VideoPlayerUndocked.cs index be8cfaf26..23713e3ce 100644 --- a/src/Forms/VideoPlayerUndocked.cs +++ b/src/Forms/VideoPlayerUndocked.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/VisualSync.cs b/src/Forms/VisualSync.cs index a0eb2d054..8f74bdfad 100644 --- a/src/Forms/VisualSync.cs +++ b/src/Forms/VisualSync.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/Watermark.cs b/src/Forms/Watermark.cs index 35d23d5bf..af43475d4 100644 --- a/src/Forms/Watermark.cs +++ b/src/Forms/Watermark.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/WaveformGenerateTimeCodes.cs b/src/Forms/WaveformGenerateTimeCodes.cs index 40608b1d4..f78f1854c 100644 --- a/src/Forms/WaveformGenerateTimeCodes.cs +++ b/src/Forms/WaveformGenerateTimeCodes.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/WaveformUndocked.cs b/src/Forms/WaveformUndocked.cs index 3896a3569..273c8e37f 100644 --- a/src/Forms/WaveformUndocked.cs +++ b/src/Forms/WaveformUndocked.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Forms/YouTubeAnnotationsImport.cs b/src/Forms/YouTubeAnnotationsImport.cs index 73b22174b..7104eae7c 100644 --- a/src/Forms/YouTubeAnnotationsImport.cs +++ b/src/Forms/YouTubeAnnotationsImport.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Logic; using System.Collections.Generic; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Forms { diff --git a/src/Logic/CommandLineConvert/BluRaySupToBluRaySup.cs b/src/Logic/CommandLineConvert/BluRaySupToBluRaySup.cs index e07f87171..9eb401bad 100644 --- a/src/Logic/CommandLineConvert/BluRaySupToBluRaySup.cs +++ b/src/Logic/CommandLineConvert/BluRaySupToBluRaySup.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.IO; using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.BluRaySup; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.CommandLineConvert { diff --git a/src/Logic/CommandLineConvert/CommandLineConverter.cs b/src/Logic/CommandLineConvert/CommandLineConverter.cs index a48b1d249..52b37ae46 100644 --- a/src/Logic/CommandLineConvert/CommandLineConverter.cs +++ b/src/Logic/CommandLineConvert/CommandLineConverter.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.BluRaySup; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.ContainerFormats.Matroska; using Nikse.SubtitleEdit.Core.ContainerFormats.Mp4; using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; diff --git a/src/Logic/CommandLineConvert/TsConvert.cs b/src/Logic/CommandLineConvert/TsConvert.cs index 96cce12d0..70609a83e 100644 --- a/src/Logic/CommandLineConvert/TsConvert.cs +++ b/src/Logic/CommandLineConvert/TsConvert.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.CommandLineConvert { diff --git a/src/Logic/CommandLineConvert/TsToBdnXml.cs b/src/Logic/CommandLineConvert/TsToBdnXml.cs index 122048961..924f986ce 100644 --- a/src/Logic/CommandLineConvert/TsToBdnXml.cs +++ b/src/Logic/CommandLineConvert/TsToBdnXml.cs @@ -3,6 +3,7 @@ using System.Drawing; using System.IO; using System.Text; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.Forms; diff --git a/src/Logic/CommandLineConvert/TsToBluRaySup.cs b/src/Logic/CommandLineConvert/TsToBluRaySup.cs index 62d1a4cd3..a2b9abdf2 100644 --- a/src/Logic/CommandLineConvert/TsToBluRaySup.cs +++ b/src/Logic/CommandLineConvert/TsToBluRaySup.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Globalization; using System.IO; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream; using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.Forms; diff --git a/src/Logic/DarkTheme.cs b/src/Logic/DarkTheme.cs index eee8ad40e..ac66d6b5b 100644 --- a/src/Logic/DarkTheme.cs +++ b/src/Logic/DarkTheme.cs @@ -6,6 +6,7 @@ using System.Drawing; using System.Linq; using System.Reflection; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/FindReplaceDialogHelper.cs b/src/Logic/FindReplaceDialogHelper.cs index 90ca1e817..91144b4a3 100644 --- a/src/Logic/FindReplaceDialogHelper.cs +++ b/src/Logic/FindReplaceDialogHelper.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core.Enums; using System; using System.Text.RegularExpressions; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/ListViewSorter.cs b/src/Logic/ListViewSorter.cs index d4eccbed6..9a52b24ac 100644 --- a/src/Logic/ListViewSorter.cs +++ b/src/Logic/ListViewSorter.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/MainShortcuts.cs b/src/Logic/MainShortcuts.cs index d406fe198..b5851b060 100644 --- a/src/Logic/MainShortcuts.cs +++ b/src/Logic/MainShortcuts.cs @@ -1,5 +1,6 @@ using Nikse.SubtitleEdit.Core; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/NativeMethods.cs b/src/Logic/NativeMethods.cs index 5187330bc..34c4c39c6 100644 --- a/src/Logic/NativeMethods.cs +++ b/src/Logic/NativeMethods.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core; using System; using System.Runtime.InteropServices; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/Networking/NikseWebServiceSession.cs b/src/Logic/Networking/NikseWebServiceSession.cs index 8578e4a62..c5112cb22 100644 --- a/src/Logic/Networking/NikseWebServiceSession.cs +++ b/src/Logic/Networking/NikseWebServiceSession.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Networking { diff --git a/src/Logic/NikseBitmapImageSplitter.cs b/src/Logic/NikseBitmapImageSplitter.cs index e39b123f8..6d77ab422 100644 --- a/src/Logic/NikseBitmapImageSplitter.cs +++ b/src/Logic/NikseBitmapImageSplitter.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/Ocr/Binary/BinaryOcrBitmap.cs b/src/Logic/Ocr/Binary/BinaryOcrBitmap.cs index 735ce4b68..c1d27677b 100644 --- a/src/Logic/Ocr/Binary/BinaryOcrBitmap.cs +++ b/src/Logic/Ocr/Binary/BinaryOcrBitmap.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Binary { diff --git a/src/Logic/Ocr/Binary/BinaryOcrDb.cs b/src/Logic/Ocr/Binary/BinaryOcrDb.cs index 1e71f3f31..151d530af 100644 --- a/src/Logic/Ocr/Binary/BinaryOcrDb.cs +++ b/src/Logic/Ocr/Binary/BinaryOcrDb.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Binary { diff --git a/src/Logic/Ocr/NOcrDb.cs b/src/Logic/Ocr/NOcrDb.cs index 8ff8f1db0..9a6798d7d 100644 --- a/src/Logic/Ocr/NOcrDb.cs +++ b/src/Logic/Ocr/NOcrDb.cs @@ -6,6 +6,7 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr { diff --git a/src/Logic/Ocr/OcrFixEngine.cs b/src/Logic/Ocr/OcrFixEngine.cs index e402f7f99..103e1692b 100644 --- a/src/Logic/Ocr/OcrFixEngine.cs +++ b/src/Logic/Ocr/OcrFixEngine.cs @@ -16,6 +16,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr { diff --git a/src/Logic/Ocr/Tesseract/TesseractMultiRunner.cs b/src/Logic/Ocr/Tesseract/TesseractMultiRunner.cs index b682e7d55..db6f9d235 100644 --- a/src/Logic/Ocr/Tesseract/TesseractMultiRunner.cs +++ b/src/Logic/Ocr/Tesseract/TesseractMultiRunner.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.IO; using System.Text; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract { diff --git a/src/Logic/Ocr/Tesseract/TesseractMultiThreadRunner.cs b/src/Logic/Ocr/Tesseract/TesseractMultiThreadRunner.cs index 88b10e5b8..b5df4a842 100644 --- a/src/Logic/Ocr/Tesseract/TesseractMultiThreadRunner.cs +++ b/src/Logic/Ocr/Tesseract/TesseractMultiThreadRunner.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract { diff --git a/src/Logic/Ocr/Tesseract/TesseractRunner.cs b/src/Logic/Ocr/Tesseract/TesseractRunner.cs index 163d5c0a2..d91731626 100644 --- a/src/Logic/Ocr/Tesseract/TesseractRunner.cs +++ b/src/Logic/Ocr/Tesseract/TesseractRunner.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.IO; using System.Text; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract { diff --git a/src/Logic/Ocr/Tesseract/TesseractThreadRunner.cs b/src/Logic/Ocr/Tesseract/TesseractThreadRunner.cs index b08075e72..046dad198 100644 --- a/src/Logic/Ocr/Tesseract/TesseractThreadRunner.cs +++ b/src/Logic/Ocr/Tesseract/TesseractThreadRunner.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Threading; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract { diff --git a/src/Logic/SceneChangesGenerator.cs b/src/Logic/SceneChangesGenerator.cs index 0c2ad3f5d..43f822874 100644 --- a/src/Logic/SceneChangesGenerator.cs +++ b/src/Logic/SceneChangesGenerator.cs @@ -6,6 +6,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/SpellCheck/Hunspell.cs b/src/Logic/SpellCheck/Hunspell.cs index e6f9c051e..3ce25b979 100644 --- a/src/Logic/SpellCheck/Hunspell.cs +++ b/src/Logic/SpellCheck/Hunspell.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core; using System; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.SpellCheck { diff --git a/src/Logic/SpellCheck/VoikkoSpellCheck.cs b/src/Logic/SpellCheck/VoikkoSpellCheck.cs index 41a615e81..0f341e74e 100644 --- a/src/Logic/SpellCheck/VoikkoSpellCheck.cs +++ b/src/Logic/SpellCheck/VoikkoSpellCheck.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.SpellCheck { diff --git a/src/Logic/TextDesigner.cs b/src/Logic/TextDesigner.cs index 3bb817bb3..8a935ae6c 100644 --- a/src/Logic/TextDesigner.cs +++ b/src/Logic/TextDesigner.cs @@ -2,6 +2,7 @@ using System.Drawing; using System.Drawing.Drawing2D; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/TextWidth.cs b/src/Logic/TextWidth.cs index e43488776..6e359ac00 100644 --- a/src/Logic/TextWidth.cs +++ b/src/Logic/TextWidth.cs @@ -2,6 +2,7 @@ using System; using System.Drawing; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/UiGetPacEncoding.cs b/src/Logic/UiGetPacEncoding.cs index 0c7deb179..ee27a5c15 100644 --- a/src/Logic/UiGetPacEncoding.cs +++ b/src/Logic/UiGetPacEncoding.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.Forms; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/UiUtil.cs b/src/Logic/UiUtil.cs index 3e1cacaa9..176cd268a 100644 --- a/src/Logic/UiUtil.cs +++ b/src/Logic/UiUtil.cs @@ -11,6 +11,7 @@ using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic { diff --git a/src/Logic/VideoPlayers/LibMpvDynamic.cs b/src/Logic/VideoPlayers/LibMpvDynamic.cs index 8ad1e1426..fcae35a10 100644 --- a/src/Logic/VideoPlayers/LibMpvDynamic.cs +++ b/src/Logic/VideoPlayers/LibMpvDynamic.cs @@ -7,6 +7,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.VideoPlayers { diff --git a/src/Logic/VideoPlayers/LibMpvMono.cs b/src/Logic/VideoPlayers/LibMpvMono.cs index 90869214e..6939c9d97 100644 --- a/src/Logic/VideoPlayers/LibMpvMono.cs +++ b/src/Logic/VideoPlayers/LibMpvMono.cs @@ -6,6 +6,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; diff --git a/src/Logic/VideoPlayers/LibVlcDynamic.cs b/src/Logic/VideoPlayers/LibVlcDynamic.cs index 8df998416..c54af9e1a 100644 --- a/src/Logic/VideoPlayers/LibVlcDynamic.cs +++ b/src/Logic/VideoPlayers/LibVlcDynamic.cs @@ -6,6 +6,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.VideoPlayers { diff --git a/src/Logic/VideoPlayers/LibVlcMono.cs b/src/Logic/VideoPlayers/LibVlcMono.cs index 8068cd6ac..843e32b03 100644 --- a/src/Logic/VideoPlayers/LibVlcMono.cs +++ b/src/Logic/VideoPlayers/LibVlcMono.cs @@ -2,6 +2,7 @@ using System; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.VideoPlayers { diff --git a/src/Logic/VideoPlayers/MpcHC/MpcHc.cs b/src/Logic/VideoPlayers/MpcHC/MpcHc.cs index 6b4177c1b..634adae60 100644 --- a/src/Logic/VideoPlayers/MpcHC/MpcHc.cs +++ b/src/Logic/VideoPlayers/MpcHC/MpcHc.cs @@ -7,6 +7,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; namespace Nikse.SubtitleEdit.Logic.VideoPlayers.MpcHC { diff --git a/src/Logic/VideoPlayers/QuartsPlayer.cs b/src/Logic/VideoPlayers/QuartsPlayer.cs index da7aff427..3e68238cc 100644 --- a/src/Logic/VideoPlayers/QuartsPlayer.cs +++ b/src/Logic/VideoPlayers/QuartsPlayer.cs @@ -5,6 +5,7 @@ using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; +using Nikse.SubtitleEdit.Core.Common; //https://docs.microsoft.com/en-us/windows/win32/directshow/directshow //https://docs.microsoft.com/en-us/previous-versions//dd387928(v=vs.85) diff --git a/src/Test/Core/CharUtilsTest.cs b/src/Test/Core/CharUtilsTest.cs index 9a34d1e04..25c67df8f 100644 --- a/src/Test/Core/CharUtilsTest.cs +++ b/src/Test/Core/CharUtilsTest.cs @@ -1,5 +1,6 @@ using Nikse.SubtitleEdit.Core; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/DialogTypeTest.cs b/src/Test/Core/DialogTypeTest.cs index db76ace32..63c5ee98d 100644 --- a/src/Test/Core/DialogTypeTest.cs +++ b/src/Test/Core/DialogTypeTest.cs @@ -1,6 +1,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Test.Core diff --git a/src/Test/Core/FixCasingTest.cs b/src/Test/Core/FixCasingTest.cs index 53fd13a0b..04bd28fba 100644 --- a/src/Test/Core/FixCasingTest.cs +++ b/src/Test/Core/FixCasingTest.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/HtmlUtilTest.cs b/src/Test/Core/HtmlUtilTest.cs index e111cf4ee..674ef6da1 100644 --- a/src/Test/Core/HtmlUtilTest.cs +++ b/src/Test/Core/HtmlUtilTest.cs @@ -1,6 +1,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/LanguageAutoDetectTest.cs b/src/Test/Core/LanguageAutoDetectTest.cs index 802e8a3f1..b97337077 100644 --- a/src/Test/Core/LanguageAutoDetectTest.cs +++ b/src/Test/Core/LanguageAutoDetectTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using System.IO; using System.Text; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/NikseBitmapTest.cs b/src/Test/Core/NikseBitmapTest.cs index d989c5907..ae2774f59 100644 --- a/src/Test/Core/NikseBitmapTest.cs +++ b/src/Test/Core/NikseBitmapTest.cs @@ -1,5 +1,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/PlainTextImporterTest.cs b/src/Test/Core/PlainTextImporterTest.cs index 7ab0b9ccb..4ad90801d 100644 --- a/src/Test/Core/PlainTextImporterTest.cs +++ b/src/Test/Core/PlainTextImporterTest.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/RichTextToPlainTextTest.cs b/src/Test/Core/RichTextToPlainTextTest.cs index 78697a592..d82c19781 100644 --- a/src/Test/Core/RichTextToPlainTextTest.cs +++ b/src/Test/Core/RichTextToPlainTextTest.cs @@ -1,5 +1,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/SeJsonParserTest.cs b/src/Test/Core/SeJsonParserTest.cs index 901dc602b..99ffc5de5 100644 --- a/src/Test/Core/SeJsonParserTest.cs +++ b/src/Test/Core/SeJsonParserTest.cs @@ -2,6 +2,7 @@ using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/StringExtensionsTest.cs b/src/Test/Core/StringExtensionsTest.cs index cfa90082c..99f02128f 100644 --- a/src/Test/Core/StringExtensionsTest.cs +++ b/src/Test/Core/StringExtensionsTest.cs @@ -1,6 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/Core/SubtitleFormatTest.cs b/src/Test/Core/SubtitleFormatTest.cs index d53e00c1f..bf586f177 100644 --- a/src/Test/Core/SubtitleFormatTest.cs +++ b/src/Test/Core/SubtitleFormatTest.cs @@ -1,5 +1,6 @@ using Nikse.SubtitleEdit.Core; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.SubtitleFormats; namespace Test.Core diff --git a/src/Test/Core/SubtitleTest.cs b/src/Test/Core/SubtitleTest.cs index 5a951e976..5f1834064 100644 --- a/src/Test/Core/SubtitleTest.cs +++ b/src/Test/Core/SubtitleTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using System; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Core { diff --git a/src/Test/FixCommonErrors/FixCommonErrorsTest.cs b/src/Test/FixCommonErrors/FixCommonErrorsTest.cs index 63fb95465..3f14fac41 100644 --- a/src/Test/FixCommonErrors/FixCommonErrorsTest.cs +++ b/src/Test/FixCommonErrors/FixCommonErrorsTest.cs @@ -6,6 +6,7 @@ using Nikse.SubtitleEdit.Forms; using System; using System.Collections.Generic; using System.IO; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Test.FixCommonErrors diff --git a/src/Test/Logic/BridgeGapsTest.cs b/src/Test/Logic/BridgeGapsTest.cs index b961d09bf..f4b9e3107 100644 --- a/src/Test/Logic/BridgeGapsTest.cs +++ b/src/Test/Logic/BridgeGapsTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.Forms; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/ContinuationUtilitiesTest.cs b/src/Test/Logic/ContinuationUtilitiesTest.cs index 03821c0ea..ecc4d11ac 100644 --- a/src/Test/Logic/ContinuationUtilitiesTest.cs +++ b/src/Test/Logic/ContinuationUtilitiesTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using System; using System.Collections.Generic; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Test.Logic diff --git a/src/Test/Logic/Forms/RemoveTextForHearImpairedTest.cs b/src/Test/Logic/Forms/RemoveTextForHearImpairedTest.cs index 27b07706d..b2a5c43a6 100644 --- a/src/Test/Logic/Forms/RemoveTextForHearImpairedTest.cs +++ b/src/Test/Logic/Forms/RemoveTextForHearImpairedTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core.Forms; using System; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Enums; namespace Test.Logic.Forms diff --git a/src/Test/Logic/LanguageTest.cs b/src/Test/Logic/LanguageTest.cs index 9278ef65c..e69a54c4d 100644 --- a/src/Test/Logic/LanguageTest.cs +++ b/src/Test/Logic/LanguageTest.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/NetflixQualityCheckTest.cs b/src/Test/Logic/NetflixQualityCheckTest.cs index a619885b4..dd0e8b7fc 100644 --- a/src/Test/Logic/NetflixQualityCheckTest.cs +++ b/src/Test/Logic/NetflixQualityCheckTest.cs @@ -2,6 +2,7 @@ using System.Globalization; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.NetflixQualityCheck; namespace Test.Logic diff --git a/src/Test/Logic/Ocr/BinaryOcrTest.cs b/src/Test/Logic/Ocr/BinaryOcrTest.cs index 39a1132a9..6d669e19b 100644 --- a/src/Test/Logic/Ocr/BinaryOcrTest.cs +++ b/src/Test/Logic/Ocr/BinaryOcrTest.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Logic.Ocr.Binary; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic.Ocr { diff --git a/src/Test/Logic/Ocr/NOcrTest.cs b/src/Test/Logic/Ocr/NOcrTest.cs index f2b25e704..575545812 100644 --- a/src/Test/Logic/Ocr/NOcrTest.cs +++ b/src/Test/Logic/Ocr/NOcrTest.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Logic.Ocr; using System.Drawing; using System.IO; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic.Ocr { diff --git a/src/Test/Logic/ParagraphTest.cs b/src/Test/Logic/ParagraphTest.cs index 511e91f21..61b8f0165 100644 --- a/src/Test/Logic/ParagraphTest.cs +++ b/src/Test/Logic/ParagraphTest.cs @@ -1,6 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/SplitLongLinesHelperTest.cs b/src/Test/Logic/SplitLongLinesHelperTest.cs index 5da26228d..cc4c86d02 100644 --- a/src/Test/Logic/SplitLongLinesHelperTest.cs +++ b/src/Test/Logic/SplitLongLinesHelperTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.Forms; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/StrippableTextTest.cs b/src/Test/Logic/StrippableTextTest.cs index 3ff1ed917..f39186c50 100644 --- a/src/Test/Logic/StrippableTextTest.cs +++ b/src/Test/Logic/StrippableTextTest.cs @@ -1,6 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/SubtitleFormats/SubtitleFormatsTest.cs b/src/Test/Logic/SubtitleFormats/SubtitleFormatsTest.cs index 8ae3b2a70..c83cc83a6 100644 --- a/src/Test/Logic/SubtitleFormats/SubtitleFormatsTest.cs +++ b/src/Test/Logic/SubtitleFormats/SubtitleFormatsTest.cs @@ -7,6 +7,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic.SubtitleFormats { diff --git a/src/Test/Logic/TarFileTest.cs b/src/Test/Logic/TarFileTest.cs index eda1fce84..bb2b361ed 100644 --- a/src/Test/Logic/TarFileTest.cs +++ b/src/Test/Logic/TarFileTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using System.IO; using System.Linq; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/TimeCodeTest.cs b/src/Test/Logic/TimeCodeTest.cs index af2c35e60..6dae0ec40 100644 --- a/src/Test/Logic/TimeCodeTest.cs +++ b/src/Test/Logic/TimeCodeTest.cs @@ -1,6 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/UknownFormatImporterJsonTest.cs b/src/Test/Logic/UknownFormatImporterJsonTest.cs index 1ed3987c7..c4df6ce96 100644 --- a/src/Test/Logic/UknownFormatImporterJsonTest.cs +++ b/src/Test/Logic/UknownFormatImporterJsonTest.cs @@ -1,6 +1,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nikse.SubtitleEdit.Core; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/UtilitiesTest.cs b/src/Test/Logic/UtilitiesTest.cs index 9f02ac148..69171ac6b 100644 --- a/src/Test/Logic/UtilitiesTest.cs +++ b/src/Test/Logic/UtilitiesTest.cs @@ -2,6 +2,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.Forms.FixCommonErrors; using System; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic { diff --git a/src/Test/Logic/VobSub/VobSubTest.cs b/src/Test/Logic/VobSub/VobSubTest.cs index cb6068905..389047305 100644 --- a/src/Test/Logic/VobSub/VobSubTest.cs +++ b/src/Test/Logic/VobSub/VobSubTest.cs @@ -3,6 +3,7 @@ using Nikse.SubtitleEdit.Core; using Nikse.SubtitleEdit.Core.VobSub; using System; using System.Drawing; +using Nikse.SubtitleEdit.Core.Common; namespace Test.Logic.VobSub { diff --git a/src/UpdateLanguageFiles/LanguageDeserializerGenerator.cs b/src/UpdateLanguageFiles/LanguageDeserializerGenerator.cs index 83bc6cb0f..a511fe702 100644 --- a/src/UpdateLanguageFiles/LanguageDeserializerGenerator.cs +++ b/src/UpdateLanguageFiles/LanguageDeserializerGenerator.cs @@ -2,7 +2,7 @@ using System; using System.Text; -namespace Nikse.SubtitleEdit.Logic +namespace UpdateLanguageFiles { public static class LanguageDeserializerGenerator { @@ -12,6 +12,7 @@ namespace Nikse.SubtitleEdit.Logic var sb = new StringBuilder(@"using System.IO; using System.Text; using System.Xml; +using Nikse.SubtitleEdit.Core.Logic; // !!! THIS FILE IS AUTO-GENERATED!!! // !!! THIS FILE IS AUTO-GENERATED!!! @@ -68,7 +69,7 @@ namespace Nikse.SubtitleEdit.Core { "); - sb.AppendLine(SubElementDeserializer(typeof(Language), "language", string.Empty)); + sb.AppendLine(SubElementDeserializer(typeof(Language), string.Empty)); sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t}"); sb.AppendLine("\t}"); @@ -77,7 +78,7 @@ namespace Nikse.SubtitleEdit.Core return sb.ToString().Replace("Nikse.SubtitleEdit.Logic.", string.Empty).Replace("\t", " ").Replace(" " + Environment.NewLine, Environment.NewLine); } - private static string SubElementDeserializer(Type classType, string currentName, string xmlPath) + private static string SubElementDeserializer(Type classType, string xmlPath) { xmlPath = xmlPath.Trim('/'); @@ -100,7 +101,7 @@ namespace Nikse.SubtitleEdit.Core { if (fieldInfo.FieldType.Name != "String" && fieldInfo.FieldType.FullName.Contains("LanguageStructure")) { - sb.AppendLine(SubElementDeserializer(fieldInfo.FieldType, currentName + "." + fieldInfo.Name, xmlPath + "/" + fieldInfo.Name + "/").TrimEnd()); + sb.AppendLine(SubElementDeserializer(fieldInfo.FieldType, xmlPath + "/" + fieldInfo.Name + "/").TrimEnd()); } } } @@ -119,7 +120,7 @@ namespace Nikse.SubtitleEdit.Core { if (prp.PropertyType.Name != "String" && prp.PropertyType.FullName.Contains("LanguageStructure")) { - sb.AppendLine(SubElementDeserializer(prp.PropertyType, currentName + "." + prp.Name, xmlPath + "/" + prp.Name + "/").TrimEnd()); + sb.AppendLine(SubElementDeserializer(prp.PropertyType, xmlPath + "/" + prp.Name + "/").TrimEnd()); } } } diff --git a/src/UpdateLanguageFiles/Program.cs b/src/UpdateLanguageFiles/Program.cs index 57e370900..8e8234aa1 100644 --- a/src/UpdateLanguageFiles/Program.cs +++ b/src/UpdateLanguageFiles/Program.cs @@ -57,7 +57,7 @@ namespace UpdateLanguageFiles Console.Write(" {0} generated...", Path.GetFileName(args[0])); } - var languageDeserializerContent = Nikse.SubtitleEdit.Logic.LanguageDeserializerGenerator.GenerateCSharpXmlDeserializerForLanguage(); + var languageDeserializerContent = LanguageDeserializerGenerator.GenerateCSharpXmlDeserializerForLanguage(); var oldLanguageDeserializerContent = string.Empty; if (File.Exists(args[1])) {