mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 14:32:35 +01:00
Switched to a even faster way of loading languages files
This commit is contained in:
parent
924eccf687
commit
0715befd72
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
public static class LanguageDeserializerGenerator
|
||||
{
|
||||
|
||||
public static string GenerateCSharpXmlDeserializerForLanguage()
|
||||
public static string GenerateCSharpXmlDeserializerForLanguage_VIA_XML_DOCUMENT_WHICH_IS_SLOW()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(@"using System.IO;
|
||||
@ -109,11 +109,12 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
}
|
||||
|
||||
|
||||
public static string GenerateCSharpXmlDeserializerForLanguageNeeewwTEST()
|
||||
public static void GenerateCSharpXmlDeserializerForLanguage()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(@"using System.IO;
|
||||
using System.Xml;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
@ -122,33 +123,35 @@ using System.Xml;
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
|
||||
public class LanguageDeserializer // NOTE: This class is AUTO-GENERATED!!!! (Choose language + press ctrl+alt+shift+C to generate)
|
||||
{
|
||||
|
||||
public static Language CustomDeserializeLanguage(string fileName)
|
||||
{
|
||||
string name = string.Empty;
|
||||
var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
var language = new Language();
|
||||
[NewObjects]
|
||||
using (XmlReader reader = XmlReader.Create(stream))
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
name = (name + " + "/" + @"reader.Name).TrimStart('/');
|
||||
//SetValue(language, reader);
|
||||
if (name.Length > 0 || reader.Name != " + "\"Language\"" + @")
|
||||
name = (name + " + "\"/\" + " + @"reader.Name).TrimStart('/');
|
||||
}
|
||||
else if (reader.NodeType == XmlNodeType.EndElement)
|
||||
{
|
||||
int idx = name.LastIndexOf(" +"\"/\"" + @");
|
||||
if (idx > 0)
|
||||
{
|
||||
name = name.Remove(idx);
|
||||
}
|
||||
//SetValue(language, reader);
|
||||
else
|
||||
name = string.Empty;
|
||||
}
|
||||
else if (reader.NodeType == XmlNodeType.Text)
|
||||
{
|
||||
SetValue(language, reader, name);
|
||||
//SetValue(language, reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -162,17 +165,66 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
{");
|
||||
|
||||
var language = new Language();
|
||||
sb.AppendLine(GenerateCSharpXmlDeserializer(typeof(Language), "language", string.Empty));
|
||||
var newObjectsString = new StringBuilder();
|
||||
sb.AppendLine(SubElementDeserializer(typeof(Language), "language", string.Empty, newObjectsString));
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("\t\t\treturn language;");
|
||||
sb.AppendLine("\t\t\t}");
|
||||
sb.AppendLine("\t\t}");
|
||||
sb.AppendLine("\t}");
|
||||
sb.AppendLine("}");
|
||||
System.IO.File.WriteAllText(@"C:\Data\subtitleedit\subtitleedit\src\Logic\LanguageDeserializer2.cs", sb.ToString());
|
||||
return sb.ToString();
|
||||
System.IO.File.WriteAllText(@"C:\Data\subtitleedit\subtitleedit\src\Logic\LanguageDeserializer.cs", sb.ToString().Replace("[NewObjects]", newObjectsString.ToString()));
|
||||
}
|
||||
|
||||
private static string SubElementDeserializer(Type classType, string currentName, string xmlPath, StringBuilder newObjectsString)
|
||||
{
|
||||
xmlPath = xmlPath.Trim('/');
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
var properties = classType.GetProperties();
|
||||
if (properties.Length == 0)
|
||||
{
|
||||
var fields = classType.GetFields();
|
||||
foreach (var fieldInfo in fields)
|
||||
{
|
||||
if (fieldInfo.FieldType.Name == "String")
|
||||
{
|
||||
sb.AppendLine("\t\t\t\tcase \"" + (xmlPath + "/" + fieldInfo.Name).TrimStart('/') + "\": ");
|
||||
sb.AppendLine("\t\t\t\t\tlanguage." + (xmlPath.Replace("/", ".") + ".").TrimStart('.') + fieldInfo.Name + " = reader.Value;");
|
||||
sb.AppendLine("\t\t\t\t\tbreak;");
|
||||
}
|
||||
}
|
||||
foreach (var fieldInfo in fields)
|
||||
{
|
||||
if (fieldInfo.FieldType.Name != "String" && fieldInfo.FieldType.FullName.Contains("LanguageStructure"))
|
||||
{
|
||||
newObjectsString.AppendLine("\t\t\t" + currentName + "." + fieldInfo.Name + " = new " + fieldInfo.FieldType.FullName.Replace("+", ".") + "();");
|
||||
sb.AppendLine(SubElementDeserializer(fieldInfo.FieldType, currentName + "." + fieldInfo.Name, xmlPath + "/" + fieldInfo.Name + "/", newObjectsString).TrimEnd());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var prp in properties)
|
||||
{
|
||||
if (prp.PropertyType.Name == "String")
|
||||
{
|
||||
sb.AppendLine("\t\t\t\tcase \"" + xmlPath + "/" + prp.Name + "\":");
|
||||
sb.AppendLine("\t\t\t\t\tlanguage." + xmlPath.Replace("/", ".") + "." + prp.Name + " = reader.Value;");
|
||||
sb.AppendLine("\t\t\t\t\tbreak;");
|
||||
}
|
||||
}
|
||||
foreach (var prp in properties)
|
||||
{
|
||||
if (prp.PropertyType.Name != "String" && prp.PropertyType.FullName.Contains("LanguageStructure"))
|
||||
{
|
||||
newObjectsString.AppendLine("\t\t\t" + currentName + "." + prp.Name + " = new " + prp.PropertyType.FullName.Replace("+", ".") + "();");
|
||||
sb.AppendLine(SubElementDeserializer(prp.PropertyType, currentName + "." + prp.Name, xmlPath + "/" + prp.Name + "/", newObjectsString).TrimEnd());
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user