mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 14:32:35 +01:00
Added missing language deserializer generator cs file (for faster loading of languages)
This commit is contained in:
parent
5fc9b4802f
commit
734f14b1e5
179
src/Logic/LanguageDeserializerGenerator.cs
Normal file
179
src/Logic/LanguageDeserializerGenerator.cs
Normal file
@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
public static class LanguageDeserializerGenerator
|
||||
{
|
||||
|
||||
public static string GenerateCSharpXmlDeserializerForLanguage()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(@"using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
|
||||
public class LanguageDeserializer
|
||||
{
|
||||
|
||||
public static Language CustomDeserializeLanguage(string fileName)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
doc.PreserveWhitespace = true;
|
||||
|
||||
var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
doc.Load(stream);
|
||||
stream.Close();
|
||||
|
||||
XmlNode node = doc.DocumentElement;
|
||||
XmlNode subNode;
|
||||
var language = new Language();
|
||||
");
|
||||
sb.AppendLine(GenerateCSharpXmlDeserializer(typeof(Language), "language", string.Empty));
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("\t\t\treturn language;");
|
||||
sb.AppendLine("\t\t}");
|
||||
sb.AppendLine("\t}");
|
||||
sb.AppendLine("}");
|
||||
System.IO.File.WriteAllText(@"C:\Data\subtitleedit\subtitleedit\src\Logic\LanguageDeserializer.cs", sb.ToString());
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static string GenerateCSharpXmlDeserializer(Type classType, string currentName, string xmlPath)
|
||||
{
|
||||
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\tsubNode = node.SelectSingleNode(\"" + fieldInfo.Name + "\");");
|
||||
sb.AppendLine("\t\t\t\tif (subNode != null)");
|
||||
sb.AppendLine("\t\t\t\t" + currentName + "." + fieldInfo.Name + " = subNode.InnerText;");
|
||||
}
|
||||
}
|
||||
foreach (var fieldInfo in fields)
|
||||
{
|
||||
if (fieldInfo.FieldType.Name != "String" && fieldInfo.FieldType.FullName.Contains("LanguageStructure"))
|
||||
{
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("\t\t\t" + currentName + "." + fieldInfo.Name + " = new " + fieldInfo.FieldType.FullName.Replace("+", ".") + "();");
|
||||
sb.AppendLine("\t\t\tnode = doc.DocumentElement.SelectSingleNode(\"" + fieldInfo.Name + "\");");
|
||||
sb.AppendLine("\t\t\tif (node != null)");
|
||||
sb.AppendLine("\t\t\t{");
|
||||
sb.AppendLine(GenerateCSharpXmlDeserializer(fieldInfo.FieldType, currentName + "." + fieldInfo.Name, xmlPath + "/" + fieldInfo.Name + "/"));
|
||||
sb.AppendLine("\t\t\t}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var prp in properties)
|
||||
{
|
||||
if (prp.PropertyType.Name == "String")
|
||||
{
|
||||
sb.AppendLine("\t\t\tsubNode = node.SelectSingleNode(\"" + prp.Name + "\");");
|
||||
sb.AppendLine("\t\t\tif (subNode != null)");
|
||||
sb.AppendLine("\t\t\t\t" + currentName + "." + prp.Name + " = subNode.InnerText;");
|
||||
}
|
||||
}
|
||||
foreach (var prp in properties)
|
||||
{
|
||||
if (prp.PropertyType.Name != "String" && prp.PropertyType.FullName.Contains("LanguageStructure"))
|
||||
{
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("\t\t\t" + currentName + "." + prp.Name + " = new " + prp.PropertyType.FullName.Replace("+", ".") + "();");
|
||||
sb.AppendLine("\t\t\tnode = doc.DocumentElement.SelectSingleNode(\"" + xmlPath + "/" + prp.Name + "\");");
|
||||
sb.AppendLine("\t\t\tif (node != null)");
|
||||
sb.AppendLine("\t\t\t{");
|
||||
sb.AppendLine(GenerateCSharpXmlDeserializer(prp.PropertyType, currentName + "." + prp.Name, xmlPath + "/" + prp.Name + "/"));
|
||||
sb.AppendLine("\t\t\t}");
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
public static string GenerateCSharpXmlDeserializerForLanguageNeeewwTEST()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(@"using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
// !!! THIS FILE IS AUTO-GENERATED!!!
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
|
||||
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();
|
||||
using (XmlReader reader = XmlReader.Create(stream))
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
name = (name + " + "/" + @"reader.Name).TrimStart('/');
|
||||
//SetValue(language, reader);
|
||||
}
|
||||
else if (reader.NodeType == XmlNodeType.EndElement)
|
||||
{
|
||||
int idx = name.LastIndexOf(" +"\"/\"" + @");
|
||||
if (idx > 0)
|
||||
{
|
||||
name = name.Remove(idx);
|
||||
}
|
||||
//SetValue(language, reader);
|
||||
}
|
||||
else if (reader.NodeType == XmlNodeType.Text)
|
||||
{
|
||||
SetValue(language, reader, name);
|
||||
//SetValue(language, reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
stream.Close();
|
||||
return language;
|
||||
}
|
||||
|
||||
private static void SetValue(Language language, XmlReader reader, string name)
|
||||
{
|
||||
switch (name)
|
||||
{");
|
||||
|
||||
var language = new Language();
|
||||
sb.AppendLine(GenerateCSharpXmlDeserializer(typeof(Language), "language", string.Empty));
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("\t\t\treturn language;");
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user