using NodeGenerator; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; using NodesGenerator; namespace NodesGenerator.XmlModel { [XmlRoot] public class NodeGeneratorData { public NodeGeneratorData() { } public NodeGeneratorData(NodeGenerator.NodeGenerator nodeGenerator) { foreach (var node in nodeGenerator.all_nodes.Cast()) SyntaxNodes.Add(new SyntaxNode(node)); Settings = new Settings(nodeGenerator); TagCategories = nodeGenerator.tag_cats.Select(x => new FilterCategory(x)).ToList(); HelpStorage = new HelpStorage(nodeGenerator.help_storage); } [XmlArrayItem(typeof(SyntaxNode), ElementName = "SyntaxNode")] public List SyntaxNodes = new List(); [XmlElement] public Settings Settings; [XmlArrayItem("FilterCategory")] public List TagCategories = new List(); [XmlElement] public HelpStorage HelpStorage; public NodeGenerator.NodeGenerator ToNodeGenerator() { NodeGenerator.NodeGenerator generator = new NodeGenerator.NodeGenerator(); var nodeNames = new Dictionary(); foreach (var node in SyntaxNodes) nodeNames.Add(node.Name, new node_info()); foreach (var node in SyntaxNodes) node.InitNodeInfo(nodeNames, nodeInfo: nodeNames[node.Name]); var oldNodes = SyntaxNodes.Select(x => nodeNames[x.Name]).ToArray(); generator.set_nodes(oldNodes); Settings.InitNodeGenerator(generator); generator.tag_cats = TagCategories.Select(x => x.ToFilterCategory()).ToList(); generator.help_storage = HelpStorage.ToHelpStorage(); return generator; } } }