示例#1
0
        public override void Render(ExtensionHtmlRenderer renderer, RequirementsTableName table, IFormatState formatState)
        {
            var package = _provider.GetElementsByPackage(new Path(table.Name));

            if (package != null)
            {
                var sb = new StringBuilder();
                Format(package, sb, formatState.HeadingLevel);
                renderer.Write(sb.ToString());
            }
        }
示例#2
0
 public override IErrors ValidateTyped(TableNotes tableNotes, ValidationContext context)
 {
     if (tableNotes.PackagePath != null)
     {
         IEnumerable <string> nameCollisions = _provider
                                               .GetElementsByPackage(tableNotes.PackagePath)
                                               .GetElementsRecursively()
                                               .Where(e => TableNotes.Include(tableNotes, e))
                                               .GroupBy(x => x.Name)
                                               .Where(g => g.Count() > 1)
                                               .Select(g => g.Key);
         if (nameCollisions.Count() > 0)
         {
             var errors = nameCollisions.Select(nc => new Error($@"Element named {nc} has multiple elements in package"));
             return(new ValidationFailure(errors));
         }
     }
     return(new Valid());
 }
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, TableNotesBlock block, TableNotes tableNotes)
        {
            IEnumerable <Element> tables = null;

            if (tableNotes.PackagePath != null)
            {
                var package = _provider.GetElementsByPackage(tableNotes.PackagePath);
                tables = package
                         .GetElementsRecursively()
                         .Where(e => TableNotes.Include(tableNotes, e));
            }
            else
            {
                //tables = _provider
                //	.GetElements(e => e.Stereotype == "table")
                //	.Where(e => TableNotes.Include(tableNotes, e));
                throw new NotImplementedException();
            }

            var all = new StringBuilder();

            void transform(MarkdownDocument md)
            {
                md.IncreaseHeadingLevel(1);
            }

            foreach (var table in tables)
            {
                var sb = new StringBuilder();
                sb.AppendLine($@"## {table.Name}");
                bool hasTableNotes = false;

                if (!string.IsNullOrEmpty(table.Notes))
                {
                    hasTableNotes = true;
                    var notes = Helper.Converter(table.Notes, transform, extensionHtmlRenderer.Pipeline);
                    sb.AppendLine(notes);
                }
                bool hasFieldNotes = false;
                sb.AppendLine($@"### Properties");
                foreach (var taggedValue in table.TaggedValues)
                {
                    if (string.IsNullOrEmpty(taggedValue.Value))
                    {
                        continue;
                    }
                    sb.AppendLine($@"- **{taggedValue.Key}**: {taggedValue.Value}");
                }

                sb.AppendLine($@"### Attributes");
                foreach (var attribute in table.Attributes)
                {
                    if (string.IsNullOrEmpty(attribute.Notes))
                    {
                        continue;
                    }
                    hasFieldNotes = true;
                    var notes = Helper.Converter(attribute.Notes, transform, extensionHtmlRenderer.Pipeline);
                    sb.AppendLine($@"#### {attribute.Name}");
                    sb.AppendLine(notes);
                }
                bool hasNotes = hasTableNotes || hasFieldNotes;
                if (hasNotes)
                {
                    all.Append(sb);
                }
            }

            MarkdownDocument document = Markdown.Parse(all.ToString(), extensionHtmlRenderer.Pipeline);

            Replace(block, document);
        }