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*>
- // < / 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(" i>", 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("< /I>", endTag);
- text = text.Replace(" I>", endTag);
- text = text.Replace("< /I >", endTag);
- text = text.Replace("", endTag);
- text = text.Replace(" I >", 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("" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0)
- {
- text = text.Replace("<" + tag + ">", string.Empty);
- text = text.Replace("" + tag + ">", string.Empty);
- text = text.Replace("<" + tag.ToUpperInvariant() + ">", string.Empty);
- text = text.Replace("" + tag.ToUpperInvariant() + ">", 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)}{tag}>";
- }
- else
- {
- text = $"<{tag}>{text}{tag}>";
- }
- }
- 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*>
+ // < / 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(" i>", 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("< /I>", endTag);
+ text = text.Replace(" I>", endTag);
+ text = text.Replace("< /I >", endTag);
+ text = text.Replace("", endTag);
+ text = text.Replace(" I >", 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("" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0)
+ {
+ text = text.Replace("<" + tag + ">", string.Empty);
+ text = text.Replace("" + tag + ">", string.Empty);
+ text = text.Replace("<" + tag.ToUpperInvariant() + ">", string.Empty);
+ text = text.Replace("" + tag.ToUpperInvariant() + ">", 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)}{tag}>";
+ }
+ else
+ {
+ text = $"<{tag}>{text}{tag}>";
+ }
+ }
+ 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 + "", StringComparison.Ordinal);
- if (idx > 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("")) // Fix tag
- {
- singleLine = singleLine.Replace(" ", " ");
- 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", "" + 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 + "", StringComparison.Ordinal);
+ if (idx > 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("")) // Fix tag
+ {
+ singleLine = singleLine.Replace(" ", " ");
+ 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
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]))
{