Exemplo n.º 1
0
        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("&lt;", "<");
                    name       = name.Replace("&gt;", ">");
                    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);
        }
Exemplo n.º 2
0
        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("<", "&lt;");
                        name = name.Replace(">", "&gt;");

                        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("<", "&lt;");
                            name = name.Replace(">", "&gt;");

                            writer.WriteLine($"### <a name=\"{name}\"></a>{name}");
                            WriteParagraphs(writer, reference.Documentation, true);
                        }
                    }

                    writer.WriteLine();
                }
            }
        }