Added missing language deserializer generator cs file (for faster loading of languages)

This commit is contained in:
niksedk 2014-06-28 17:24:18 +02:00
parent 5fc9b4802f
commit 734f14b1e5

View 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();
}
}
}