Add XML serialization support for syntax generator
This commit is contained in:
parent
58f342fdb2
commit
c18f52abc3
Binary file not shown.
|
|
@ -1,3 +1,3 @@
|
|||
tree.nin
|
||||
tree.xml
|
||||
1
|
||||
Storage
|
||||
|
|
|
|||
|
|
@ -342,12 +342,12 @@ namespace NodesGenerator
|
|||
// openFileDialog1
|
||||
//
|
||||
this.openFileDialog1.DefaultExt = "nin";
|
||||
this.openFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*";
|
||||
this.openFileDialog1.Filter = "Файлы синтаксического дерева (*.nin, *.xml)|*.nin;*.xml|Все файлы (*.*)|*.*";
|
||||
//
|
||||
// saveFileDialog1
|
||||
//
|
||||
this.saveFileDialog1.DefaultExt = "nin";
|
||||
this.saveFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*";
|
||||
this.saveFileDialog1.Filter = "Файлы синтаксического дерева (*.nin, *.xml)|*.nin;*.xml|Все файлы (*.*)|*.*";
|
||||
//
|
||||
// toolStripStatusLabel1
|
||||
//
|
||||
|
|
@ -1535,7 +1535,7 @@ namespace NodesGenerator
|
|||
else
|
||||
{
|
||||
set_nodes_information();
|
||||
this.Text = Path.GetFileNameWithoutExtension(fname) + " - " + default_caption;
|
||||
this.Text = Path.GetFileName(fname) + " - " + default_caption;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using NodesGenerator.XmlModel;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
|
@ -7,6 +8,7 @@ using System.Runtime.Serialization;
|
|||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodeGenerator
|
||||
{
|
||||
|
|
@ -445,6 +447,8 @@ namespace NodeGenerator
|
|||
{
|
||||
private Hashtable ht=new Hashtable();
|
||||
|
||||
public Hashtable HelpData => ht;
|
||||
|
||||
public void add_context(object ob,HelpContext hc)
|
||||
{
|
||||
ht.Add(ob,hc);
|
||||
|
|
@ -707,6 +711,14 @@ namespace NodeGenerator
|
|||
writer.CloseBlock();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает эквивалент поля для модели XML
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public virtual SyntaxField XmlField()
|
||||
{
|
||||
return new SyntaxField(this);
|
||||
}
|
||||
}
|
||||
//miks 31.05.10
|
||||
[Serializable]
|
||||
|
|
@ -806,7 +818,11 @@ namespace NodeGenerator
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
public override SyntaxField XmlField()
|
||||
{
|
||||
return new SimpleField(this);
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class extended_simple_element:simple_element
|
||||
|
|
@ -872,6 +888,11 @@ namespace NodeGenerator
|
|||
else
|
||||
writer.WriteLine($"{destination} = {field_name};");
|
||||
}
|
||||
|
||||
public override SyntaxField XmlField()
|
||||
{
|
||||
return new ExtendedField(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3517,6 +3538,7 @@ namespace NodeGenerator
|
|||
{
|
||||
return hstr;
|
||||
}
|
||||
set { hstr = value; }
|
||||
}
|
||||
|
||||
public void add_node(node_info ni)
|
||||
|
|
@ -4492,9 +4514,24 @@ namespace NodeGenerator
|
|||
|
||||
Stream str=File.Open(file_name,FileMode.Create);
|
||||
|
||||
BinaryFormatter formatter=new BinaryFormatter();
|
||||
var extension = Path.GetExtension(file_name).ToLower();
|
||||
switch (extension)
|
||||
{
|
||||
case ".xml":
|
||||
var serializer = new XmlSerializer(typeof(NodeGeneratorData));
|
||||
serializer.Serialize(str, new NodeGeneratorData(this));
|
||||
break;
|
||||
case ".nin":
|
||||
var formatter = new BinaryFormatter();
|
||||
formatter.Serialize(str, this);
|
||||
break;
|
||||
default:
|
||||
throw new FileLoadException($"Unknown file format: {extension}");
|
||||
}
|
||||
|
||||
formatter.Serialize(str,this);
|
||||
//var formatter=new XmlSerializer(typeof(NodeGenerator)); //new BinaryFormatter();
|
||||
|
||||
|
||||
|
||||
str.Flush();
|
||||
str.Close();
|
||||
|
|
@ -4503,16 +4540,30 @@ namespace NodeGenerator
|
|||
public static NodeGenerator deserialize(string file_name)
|
||||
{
|
||||
Stream str=File.Open(file_name,FileMode.Open);
|
||||
|
||||
BinaryFormatter formatter=new BinaryFormatter();
|
||||
|
||||
object o=formatter.Deserialize(str);
|
||||
var extension = Path.GetExtension(file_name).ToLower();
|
||||
object deserializedGenerator;
|
||||
switch (extension)
|
||||
{
|
||||
case ".xml":
|
||||
var deserializer = new XmlSerializer(typeof(NodeGeneratorData));
|
||||
var generator = (deserializer.Deserialize(str) as NodeGeneratorData).ToNodeGenerator();
|
||||
generator.unsorted_nodes = new ArrayList(generator.nodes);
|
||||
deserializedGenerator = generator;
|
||||
break;
|
||||
case ".nin":
|
||||
var formatter = new BinaryFormatter();
|
||||
deserializedGenerator = formatter.Deserialize(str);
|
||||
break;
|
||||
default:
|
||||
throw new FileLoadException($"Unknown file format: {extension}");
|
||||
}
|
||||
str.Close();
|
||||
|
||||
NodeGenerator ng=(o as NodeGenerator);
|
||||
NodeGenerator ng=(deserializedGenerator as NodeGenerator);
|
||||
ng.removeIncorrectTags();
|
||||
|
||||
//str.Flush();
|
||||
str.Close();
|
||||
|
||||
//for compatibility with the older serialization method
|
||||
if (ng.hstr == null)
|
||||
|
|
|
|||
|
|
@ -119,6 +119,13 @@
|
|||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="XmlModel\ExtendedField.cs" />
|
||||
<Compile Include="XmlModel\HelpStorage.cs" />
|
||||
<Compile Include="XmlModel\Method.cs" />
|
||||
<Compile Include="XmlModel\SimpleField.cs" />
|
||||
<Compile Include="XmlModel\SyntaxField.cs" />
|
||||
<Compile Include="XmlModel\SyntaxNodeTags.cs" />
|
||||
<Compile Include="XmlModel\SyntaxTagStorage.cs" />
|
||||
<Content Include="App.ico" />
|
||||
<Compile Include="AboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
|
|
@ -151,6 +158,9 @@
|
|||
<Compile Include="GrammarBrowser.Designer.cs">
|
||||
<DependentUpon>GrammarBrowser.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="XmlModel\SyntaxNode.cs" />
|
||||
<Compile Include="XmlModel\Settings.cs" />
|
||||
<Compile Include="XmlModel\NodeGeneratorData.cs" />
|
||||
<Compile Include="options_form.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
|
@ -213,6 +223,7 @@
|
|||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -53,7 +53,6 @@ G:\MMCS\Programming\PABC.NET_GitRepo\Utils\NodesGeneratorNew\NodesGenerator_old\
|
|||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.exe.config
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.exe
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.pdb
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator_old.csprojResolveAssemblyReference.cache
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.Form1.resources
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.method_editor.resources
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.node_def.resources
|
||||
|
|
@ -63,3 +62,17 @@ G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj
|
|||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator_old.csproj.GenerateResource.Cache
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.exe
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.pdb
|
||||
G:\MMCS\Programming\PascalABC.NET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator_old.csprojResolveAssemblyReference.cache
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.exe.config
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.exe
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\bin\Debug\NodesGenerator.pdb
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator_old.csprojResolveAssemblyReference.cache
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.Form1.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.method_editor.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.node_def.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.simple_node_editor.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.subnode_editor.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.template_form.resources
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator_old.csproj.GenerateResource.Cache
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.exe
|
||||
G:\MMCS\Programming\PascalABCNET\Utils\NodesGeneratorNew\NodesGenerator_old\obj\Debug\NodesGenerator.pdb
|
||||
|
|
|
|||
43
Utils/NodesGeneratorNew/XmlModel/ExtendedField.cs
Normal file
43
Utils/NodesGeneratorNew/XmlModel/ExtendedField.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
using NodeGenerator;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
public class ExtendedField : SimpleField
|
||||
{
|
||||
public ExtendedField() { }
|
||||
|
||||
public ExtendedField(extended_simple_element field)
|
||||
: base(field)
|
||||
{
|
||||
CreateVariable = field.create_var;
|
||||
DeleteVariable = field.delete_var;
|
||||
}
|
||||
|
||||
public override node_field_info ToNodeFieldInfo(Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var result = new extended_simple_element();
|
||||
InitFieldInfo(result, nodeNames);
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void InitFieldInfo(extended_simple_element nodeField, Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var extendedField = nodeField as simple_element;
|
||||
base.InitFieldInfo(extendedField, nodeNames);
|
||||
nodeField.create_var = CreateVariable;
|
||||
nodeField.delete_var = DeleteVariable;
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public bool CreateVariable;
|
||||
|
||||
[XmlAttribute]
|
||||
public bool DeleteVariable;
|
||||
}
|
||||
}
|
||||
56
Utils/NodesGeneratorNew/XmlModel/HelpStorage.cs
Normal file
56
Utils/NodesGeneratorNew/XmlModel/HelpStorage.cs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class HelpUnit
|
||||
{
|
||||
public HelpUnit() { }
|
||||
|
||||
public HelpUnit(string key, string value)
|
||||
{
|
||||
Key = key;
|
||||
Value = value;
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Key;
|
||||
|
||||
[XmlAttribute]
|
||||
public string Value;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class HelpStorage
|
||||
{
|
||||
[XmlArrayItem("HelpData")]
|
||||
public List<HelpUnit> HelpData = new List<HelpUnit>();
|
||||
//public Dictionary<string, string> HelpData = new Dictionary<string, string>();
|
||||
|
||||
public HelpStorage() { }
|
||||
|
||||
public HelpStorage(NodeGenerator.HelpStorage storage)
|
||||
{
|
||||
foreach (var helpElementKey in storage.HelpData.Keys)
|
||||
{
|
||||
HelpData.Add(new HelpUnit(
|
||||
helpElementKey as string,
|
||||
(storage.HelpData[helpElementKey] as NodeGenerator.HelpContext).help_context));
|
||||
}
|
||||
}
|
||||
|
||||
public NodeGenerator.HelpStorage ToHelpStorage()
|
||||
{
|
||||
NodeGenerator.HelpStorage storage = new NodeGenerator.HelpStorage();
|
||||
foreach (var helpElement in HelpData)
|
||||
storage.add_context(helpElement.Key, new NodeGenerator.HelpContext() { help_context = helpElement.Value });
|
||||
|
||||
return storage;
|
||||
}
|
||||
}
|
||||
}
|
||||
28
Utils/NodesGeneratorNew/XmlModel/Method.cs
Normal file
28
Utils/NodesGeneratorNew/XmlModel/Method.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class Method
|
||||
{
|
||||
public Method() { }
|
||||
|
||||
public Method(string text)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public NodeGenerator.method_info ToMethodInfo()
|
||||
{
|
||||
return new NodeGenerator.method_info(Text);
|
||||
}
|
||||
|
||||
[XmlElement]
|
||||
public string Text;
|
||||
}
|
||||
}
|
||||
64
Utils/NodesGeneratorNew/XmlModel/NodeGeneratorData.cs
Normal file
64
Utils/NodesGeneratorNew/XmlModel/NodeGeneratorData.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
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<node_info>())
|
||||
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<SyntaxNode> SyntaxNodes = new List<SyntaxNode>();
|
||||
|
||||
[XmlElement]
|
||||
public Settings Settings;
|
||||
|
||||
[XmlArrayItem("FilterCategory")]
|
||||
public List<FilterCategory> TagCategories = new List<FilterCategory>();
|
||||
|
||||
[XmlElement]
|
||||
public HelpStorage HelpStorage;
|
||||
|
||||
|
||||
|
||||
public NodeGenerator.NodeGenerator ToNodeGenerator()
|
||||
{
|
||||
NodeGenerator.NodeGenerator generator = new NodeGenerator.NodeGenerator();
|
||||
|
||||
var nodeNames = new Dictionary<string, node_info>();
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
73
Utils/NodesGeneratorNew/XmlModel/Settings.cs
Normal file
73
Utils/NodesGeneratorNew/XmlModel/Settings.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class Settings
|
||||
{
|
||||
public Settings() { }
|
||||
|
||||
public Settings(NodeGenerator.NodeGenerator generator)
|
||||
{
|
||||
FileName = generator.file_name;
|
||||
NamespaceName = generator.namespace_name;
|
||||
FactoryName = generator.factory_name;
|
||||
VisitorInterfaceFileName = generator.visitor_interface_file_name;
|
||||
PcuWriterName = generator.pcu_writer_name;
|
||||
PcuWriterFileName = generator.pcu_writer_file_name;
|
||||
PcuReaderName = generator.pcu_reader_name;
|
||||
PcuReaderFileName = generator.pcu_reader_file_name;
|
||||
PcuReaderFileNameHeader = generator.pcu_reader_file_name_h;
|
||||
PcuReaderFileNameCpp = generator.pcu_reader_file_name_cpp;
|
||||
}
|
||||
|
||||
public void InitNodeGenerator(NodeGenerator.NodeGenerator generator)
|
||||
{
|
||||
generator.file_name = FileName;
|
||||
generator.namespace_name = NamespaceName;
|
||||
generator.factory_name = FactoryName;
|
||||
generator.visitor_interface_file_name = VisitorInterfaceFileName;
|
||||
generator.pcu_writer_name = PcuWriterName;
|
||||
generator.pcu_writer_file_name = PcuWriterFileName;
|
||||
generator.pcu_reader_name = PcuReaderName;
|
||||
generator.pcu_reader_file_name = PcuReaderFileName;
|
||||
generator.pcu_reader_file_name_h = PcuReaderFileNameHeader;
|
||||
generator.pcu_reader_file_name_cpp = PcuReaderFileNameCpp;
|
||||
}
|
||||
|
||||
[XmlElement]
|
||||
public string FileName;
|
||||
|
||||
[XmlElement]
|
||||
public string NamespaceName;
|
||||
|
||||
[XmlElement]
|
||||
public string FactoryName;
|
||||
|
||||
[XmlElement]
|
||||
public string VisitorInterfaceFileName;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuWriterName;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuWriterFileName;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuReaderName;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuReaderFileName;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuReaderFileNameHeader;
|
||||
|
||||
[XmlElement]
|
||||
public string PcuReaderFileNameCpp;
|
||||
}
|
||||
}
|
||||
38
Utils/NodesGeneratorNew/XmlModel/SimpleField.cs
Normal file
38
Utils/NodesGeneratorNew/XmlModel/SimpleField.cs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
using NodeGenerator;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
public class SimpleField : SyntaxField
|
||||
{
|
||||
public SimpleField() { }
|
||||
|
||||
public SimpleField(simple_element field)
|
||||
: base(field)
|
||||
{
|
||||
Type = field.val_field_type_name;
|
||||
}
|
||||
|
||||
public override node_field_info ToNodeFieldInfo(Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var result = new simple_element();
|
||||
InitFieldInfo(result, nodeNames);
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void InitFieldInfo(simple_element nodeField, Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var simpleField = nodeField as node_field_info;
|
||||
base.InitFieldInfo(simpleField, nodeNames);
|
||||
nodeField.val_field_type_name = Type;
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Type;
|
||||
}
|
||||
}
|
||||
41
Utils/NodesGeneratorNew/XmlModel/SyntaxField.cs
Normal file
41
Utils/NodesGeneratorNew/XmlModel/SyntaxField.cs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
using NodeGenerator;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class SyntaxField
|
||||
{
|
||||
public SyntaxField() { }
|
||||
|
||||
public SyntaxField(node_field_info field)
|
||||
{
|
||||
Name = field.field_name;
|
||||
SyntaxType = field.field_type?.node_name;
|
||||
}
|
||||
|
||||
public virtual node_field_info ToNodeFieldInfo(Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var nodeField = new node_field_info();
|
||||
InitFieldInfo(nodeField, nodeNames);
|
||||
return nodeField;
|
||||
}
|
||||
|
||||
protected void InitFieldInfo(node_field_info nodeField, Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
nodeField.field_name = Name;
|
||||
nodeField.field_type = SyntaxType == null ? null : nodeNames[SyntaxType];
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Name;
|
||||
|
||||
[XmlAttribute]
|
||||
public string SyntaxType;
|
||||
}
|
||||
}
|
||||
63
Utils/NodesGeneratorNew/XmlModel/SyntaxNode.cs
Normal file
63
Utils/NodesGeneratorNew/XmlModel/SyntaxNode.cs
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
using NodeGenerator;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class SyntaxNode
|
||||
{
|
||||
public SyntaxNode() { }
|
||||
|
||||
public SyntaxNode(node_info node)
|
||||
{
|
||||
Name = node.node_name;
|
||||
BaseName = node?.base_class?.node_name;
|
||||
foreach (var field in node.subnodes)
|
||||
Fields.Add(field.XmlField());
|
||||
Methods.AddRange(
|
||||
node.methods.Select(
|
||||
method => new Method(method.method_text)));
|
||||
|
||||
Tags = new SyntaxNodeTags(node.tags);
|
||||
}
|
||||
|
||||
public node_info ToNodeInfo(Dictionary<string, node_info> nodeNames)
|
||||
{
|
||||
var result = new node_info();
|
||||
InitNodeInfo(nodeNames, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void InitNodeInfo(Dictionary<string, node_info> nodeNames, node_info nodeInfo)
|
||||
{
|
||||
nodeInfo.node_name = Name;
|
||||
nodeInfo.base_class = BaseName == null ? null : nodeNames[BaseName];
|
||||
foreach (var field in Fields)
|
||||
nodeInfo.add_subnode(field.ToNodeFieldInfo(nodeNames));
|
||||
nodeInfo.set_methods(Methods.Select(m => m.ToMethodInfo()).ToArray());
|
||||
nodeInfo.tags = Tags.ToNodeInfoTags();
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Name;
|
||||
|
||||
[XmlAttribute]
|
||||
public string BaseName;
|
||||
|
||||
[XmlArrayItem(typeof(SyntaxField), ElementName = "SyntaxField")]
|
||||
[XmlArrayItem(typeof(SimpleField), ElementName = "SimpleField")]
|
||||
[XmlArrayItem(typeof(ExtendedField), ElementName = "ExtendedField")]
|
||||
public List<SyntaxField> Fields = new List<SyntaxField>();
|
||||
|
||||
[XmlArrayItem(typeof(Method), ElementName = "Method")]
|
||||
public List<Method> Methods = new List<Method>();
|
||||
|
||||
[XmlElement]
|
||||
public SyntaxNodeTags Tags;
|
||||
}
|
||||
}
|
||||
38
Utils/NodesGeneratorNew/XmlModel/SyntaxNodeTags.cs
Normal file
38
Utils/NodesGeneratorNew/XmlModel/SyntaxNodeTags.cs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class SyntaxNodeTags
|
||||
{
|
||||
public SyntaxNodeTags() { }
|
||||
|
||||
public SyntaxNodeTags(List<Tuple<int, int>> tags)
|
||||
{
|
||||
tags.ForEach(t =>
|
||||
{
|
||||
CategoryIndices.Add(t.Item1);
|
||||
TagIndices.Add(t.Item2);
|
||||
});
|
||||
}
|
||||
|
||||
public List<Tuple<int, int>> ToNodeInfoTags()
|
||||
{
|
||||
|
||||
return CategoryIndices
|
||||
.Zip(TagIndices, (category, tag) => new Tuple<int, int>(category, tag))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
[XmlArrayItem("CategoryIndex")]
|
||||
public List<int> CategoryIndices = new List<int>();
|
||||
|
||||
[XmlArrayItem("TagIndex")]
|
||||
public List<int> TagIndices = new List<int>();
|
||||
}
|
||||
}
|
||||
58
Utils/NodesGeneratorNew/XmlModel/SyntaxTagStorage.cs
Normal file
58
Utils/NodesGeneratorNew/XmlModel/SyntaxTagStorage.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace NodesGenerator.XmlModel
|
||||
{
|
||||
[Serializable]
|
||||
public class FilterTag
|
||||
{
|
||||
public FilterTag() { }
|
||||
|
||||
public FilterTag(NodeGenerator.FilterTag tag)
|
||||
{
|
||||
Name = tag.name;
|
||||
ReferenceCount = tag.ref_count;
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Name = "";
|
||||
|
||||
[XmlAttribute]
|
||||
public int ReferenceCount = 0;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class FilterCategory
|
||||
{
|
||||
public FilterCategory() { }
|
||||
|
||||
public FilterCategory(NodeGenerator.FilterCategory filter)
|
||||
{
|
||||
Name = filter.name;
|
||||
Tags = filter.tags.Select(tag => new FilterTag(tag)).ToList();
|
||||
}
|
||||
|
||||
public NodeGenerator.FilterCategory ToFilterCategory()
|
||||
{
|
||||
var result = new NodeGenerator.FilterCategory();
|
||||
result.name = Name;
|
||||
result.tags = Tags.Select(x => new NodeGenerator.FilterTag() { name = x.Name, ref_count = x.ReferenceCount }).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
[XmlAttribute]
|
||||
public string Name = "";
|
||||
|
||||
[XmlArrayItem("Tag")]
|
||||
public List<FilterTag> Tags = new List<FilterTag>();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue