From 734f14b1e5bf9a919521409df62138d808fc775e Mon Sep 17 00:00:00 2001 From: niksedk Date: Sat, 28 Jun 2014 17:24:18 +0200 Subject: [PATCH] Added missing language deserializer generator cs file (for faster loading of languages) --- src/Logic/LanguageDeserializerGenerator.cs | 179 +++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 src/Logic/LanguageDeserializerGenerator.cs diff --git a/src/Logic/LanguageDeserializerGenerator.cs b/src/Logic/LanguageDeserializerGenerator.cs new file mode 100644 index 000000000..42f68e2a6 --- /dev/null +++ b/src/Logic/LanguageDeserializerGenerator.cs @@ -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(); + } + + + + } +} +