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()); } }
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); }