private RepositoryObjectVariableType ImportObjectVariableType(MarkdownDocument document) { RepositoryObjectVariableType entry = new RepositoryObjectVariableType(); TableData references = null; Dictionary <string, CellData> attributes = null; int start = 0; while (start < document.Count) { HeadingBlock heading = document[start++] as HeadingBlock; if (heading != null) { entry.Name = heading.Inline.FirstChild.ToString(); break; } } entry.Documentation = ReadDescription(document, ref start); while (start < document.Count) { Table table = document[start++] as Table; if (table != null) { attributes = ParseAttributeTable(table); break; } } while (start < document.Count) { Table table = document[start++] as Table; if (table != null) { references = ParseGenericTable(table); break; } } if (attributes != null) { entry.NodeClass = Opc.Ua.NodeClass.ObjectType; entry.IsAbstract = false; entry.BaseType = null; entry.DataType = null; entry.ValueRank = Opc.Ua.ValueRanks.Scalar; CellData cell = null; if (attributes.TryGetValue("BrowseName", out cell)) { var name = cell.Text; name = name.Replace("<", "<"); name = name.Replace(">", ">"); entry.Name = name; } if (attributes.TryGetValue("NodeClass", out cell)) { if (!Enum.TryParse <Opc.Ua.NodeClass>(cell.Text, out entry.NodeClass)) { entry.NodeClass = Opc.Ua.NodeClass.ObjectType; } } if (attributes.TryGetValue("IsAbstract", out cell)) { if (!Boolean.TryParse(cell.Text, out entry.IsAbstract)) { entry.IsAbstract = false; } } if (attributes.TryGetValue("BaseType", out cell)) { entry.BaseType = new RepositoryLink() { Name = cell.Text, Path = cell.Link }; } if (attributes.TryGetValue("DataType", out cell)) { entry.BaseType = new RepositoryLink() { Name = cell.Text, Path = cell.Link }; } if (attributes.TryGetValue("ValueRank", out cell)) { if (!Int32.TryParse(cell.Text, out entry.ValueRank)) { entry.ValueRank = Opc.Ua.ValueRanks.Scalar; } } if (attributes.TryGetValue("Categories", out cell)) { var name = cell.Text; if (!String.IsNullOrEmpty(name)) { var categories = name.Split(','); entry.Categories = new List <string>(); foreach (var category in categories) { if (!String.IsNullOrEmpty(name) && !entry.Categories.Contains(category)) { entry.Categories.Add(category); } } } } } if (references != null) { var descriptions = ReadReferenceDescription(document, ref start); UpdateReferences(references, descriptions, entry.References); } return(entry); }
public void Export(RepositoryObjectVariableType entry, string path) { if (path == null) { throw new ArgumentNullException("path"); } if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var filePath = Path.Combine(path, "readme.md"); using (var writer = new StreamWriter(filePath)) { writer.WriteLine("<!-- objecttype -->"); writer.WriteLine($"## {entry.Name}"); WriteParagraphs(writer, entry.Documentation, false); writer.WriteLine("<!-- end of text -->"); writer.WriteLine($"The representation of the {entry.Name} {entry.NodeClass} in the address space is shown in the following table: "); writer.WriteLine(); writer.WriteLine($"|Name|Attribute|"); writer.WriteLine($"|---|---|"); writer.WriteLine($"|NodeId|{entry.NodeId}|"); writer.WriteLine($"|NamespaceUri|{entry.NamespaceUri}|"); writer.WriteLine($"|BrowseName|{entry.Name}|"); writer.WriteLine($"|NodeClass|{entry.NodeClass}|"); if (entry.NodeClass == NodeClass.Variable || entry.NodeClass == NodeClass.VariableType) { writer.WriteLine($"|DataType|{Export(entry.DataType)}|"); writer.WriteLine($"|ValueRank|{entry.ValueRank}|"); } if (entry.NodeClass == NodeClass.ObjectType || entry.NodeClass == NodeClass.VariableType || entry.NodeClass == NodeClass.DataType || entry.NodeClass == NodeClass.ReferenceType) { writer.WriteLine($"|IsAbstract|{entry.IsAbstract}|"); writer.WriteLine($"|BaseType|{Export(entry.BaseType)}|"); } writer.WriteLine($"|Categories|{ExportCategories(entry.Categories)}|"); writer.WriteLine(); if (entry.References != null && entry.References.Count > 0) { writer.WriteLine($"The references from the {entry.Name} {entry.NodeClass} Node are shown in the following table: "); writer.WriteLine(); writer.WriteLine($"|Reference|NodeClass|BrowseName|DataType|TypeDefinition|ModellingRule|"); writer.WriteLine($"|---|---|---|---|---|---|"); foreach (var reference in entry.References) { var name = reference.BrowseName; name = name.Replace("<", "<"); name = name.Replace(">", ">"); writer.Write($"|{Export(reference.ReferenceType)}"); writer.Write($"|{reference.NodeClass}"); writer.Write($"|[{name}](#{name})"); writer.Write($"|{Export(reference.DataType)}"); if (reference.DataType != null) { if (reference.ValueRank != ValueRanks.Scalar) { writer.Write("[]"); } } writer.Write($"|{Export(reference.TypeDefinition)}"); writer.Write($"|{Export(reference.ModellingRule)}"); writer.WriteLine($"|"); } writer.WriteLine(); foreach (var reference in entry.References) { if (reference.NodeClass == NodeClass.Method) { WriteMethod(writer, reference); continue; } if (reference.Documentation != null && reference.Documentation.Count > 0) { var name = reference.BrowseName; name = name.Replace("<", "<"); name = name.Replace(">", ">"); writer.WriteLine($"### <a name=\"{name}\"></a>{name}"); WriteParagraphs(writer, reference.Documentation, true); } } writer.WriteLine(); } } }