4using System.Threading.Tasks;
62 this.XmlOutput = XmlWriter.Create(this.
Output, XmlSettings);
88 this.XmlOutput = XmlWriter.Create(this.Output, XmlSettings);
98 this.XmlOutput.Dispose();
110 await base.RenderDocument(
Document, Inclusion);
112 while (this.Level > 0)
114 this.XmlOutput.WriteEndElement();
115 this.XmlOutput.WriteEndElement();
119 this.XmlOutput.Flush();
127 if (!
string.IsNullOrEmpty(this.LocalName))
129 if (
string.IsNullOrEmpty(this.Namespace))
130 this.XmlOutput.WriteStartElement(this.LocalName);
132 this.XmlOutput.WriteStartElement(this.LocalName, this.Namespace);
135 return Task.CompletedTask;
144 bool FootNotesAdded =
false;
146 while (this.Level > 0)
148 this.XmlOutput.WriteEndElement();
149 this.XmlOutput.WriteEndElement();
155 if (!(this.
Document?.TryGetFootnoteNumber(Key, out
int Nr) ??
false) ||
167 FootNotesAdded =
true;
168 this.XmlOutput.WriteElementString(
"separator",
string.Empty);
169 this.XmlOutput.WriteStartElement(
"numberedItems");
172 this.XmlOutput.WriteStartElement(
"item");
173 await Note.Render(
this);
174 this.XmlOutput.WriteEndElement();
178 this.XmlOutput.WriteEndElement();
186 if (!
string.IsNullOrEmpty(this.LocalName))
187 this.XmlOutput.WriteEndElement();
189 this.XmlOutput.Flush();
191 return Task.CompletedTask;
194 #region Span Elements
211 this.XmlOutput.WriteElementString(
"text", Element.
EMail);
213 return Task.CompletedTask;
222 this.XmlOutput.WriteElementString(
"text", Element.
URL);
224 return Task.CompletedTask;
251 this.XmlOutput.WriteElementString(
"text", Element.
Emoji.Unicode);
253 return Task.CompletedTask;
262 this.XmlOutput.WriteStartElement(
"italic");
264 this.XmlOutput.WriteEndElement();
277 await this.
Render(Footnote);
278 else if (this.
Document?.TryGetFootnoteNumber(Element.
Key, out
int Nr) ??
false)
280 this.XmlOutput.WriteStartElement(
"super");
281 this.XmlOutput.WriteElementString(
"text", Nr.ToString());
282 this.XmlOutput.WriteEndElement();
285 Footnote.Referenced =
true;
295 this.XmlOutput.WriteElementString(
"text", Element.
Tag);
297 return Task.CompletedTask;
306 string s = Html.HtmlEntity.EntityToCharacter(Element.
Entity);
307 if (!
string.IsNullOrEmpty(s))
308 this.XmlOutput.WriteElementString(
"text", s);
310 return Task.CompletedTask;
319 this.XmlOutput.WriteElementString(
"text",
new string((
char)Element.
Code, 1));
321 return Task.CompletedTask;
330 this.XmlOutput.WriteElementString(
"text", Element.
Code);
332 return Task.CompletedTask;
341 return Task.CompletedTask;
367 if (Result is XmlDocument Xml)
372 if (Result is
Graph G)
377 if (AloneInParagraph)
378 this.XmlOutput.WriteStartElement(
"imageStandalone");
380 this.XmlOutput.WriteStartElement(
"imageInline");
386 this.XmlOutput.WriteStartElement(
"binary");
387 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
388 this.XmlOutput.WriteEndElement();
390 this.XmlOutput.WriteStartElement(
"caption");
392 this.XmlOutput.WriteElementString(
"text",
Graph2D.
Title);
394 this.XmlOutput.WriteElementString(
"text",
"Graph");
396 this.XmlOutput.WriteEndElement();
397 this.XmlOutput.WriteEndElement();
401 byte[] Bin = Pixels.EncodeAsPng();
403 if (AloneInParagraph)
404 this.XmlOutput.WriteStartElement(
"imageStandalone");
406 this.XmlOutput.WriteStartElement(
"imageInline");
409 this.XmlOutput.WriteAttributeString(
"width", Pixels.Width.ToString());
410 this.XmlOutput.WriteAttributeString(
"height", Pixels.Height.ToString());
412 this.XmlOutput.WriteStartElement(
"binary");
413 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
414 this.XmlOutput.WriteEndElement();
416 this.XmlOutput.WriteStartElement(
"caption");
417 this.XmlOutput.WriteElementString(
"text",
"Image");
418 this.XmlOutput.WriteEndElement();
419 this.XmlOutput.WriteEndElement();
421 else if (Result is SKImage Img)
423 using (SKData Data = Img.Encode(SKEncodedImageFormat.Png, 100))
425 byte[] Bin = Data.ToArray();
427 if (AloneInParagraph)
428 this.XmlOutput.WriteStartElement(
"imageStandalone");
430 this.XmlOutput.WriteStartElement(
"imageInline");
433 this.XmlOutput.WriteAttributeString(
"width", Img.Width.ToString());
434 this.XmlOutput.WriteAttributeString(
"height", Img.Height.ToString());
436 this.XmlOutput.WriteStartElement(
"binary");
437 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
438 this.XmlOutput.WriteEndElement();
440 this.XmlOutput.WriteStartElement(
"caption");
441 this.XmlOutput.WriteElementString(
"text",
"Image");
442 this.XmlOutput.WriteEndElement();
443 this.XmlOutput.WriteEndElement();
449 Doc.ProcessAsyncTasks();
455 Doc.ProcessAsyncTasks();
457 else if (Result is Exception ex)
463 if (ex is AggregateException ex2)
465 foreach (Exception ex3
in ex2.InnerExceptions)
467 if (AloneInParagraph)
468 this.XmlOutput.WriteStartElement(
"paragraph");
470 foreach (
string Row
in ex3.Message.Replace(
"\r\n",
"\n").
471 Replace(
'\r',
'\n').Split(
'\n'))
476 this.XmlOutput.WriteElementString(
"lineBreak",
string.Empty);
478 this.XmlOutput.WriteElementString(
"text", Result?.
ToString() ??
string.Empty);
481 if (AloneInParagraph)
482 this.XmlOutput.WriteEndElement();
487 if (AloneInParagraph)
488 this.XmlOutput.WriteStartElement(
"paragraph");
490 foreach (
string Row
in ex.Message.Replace(
"\r\n",
"\n").
491 Replace(
'\r',
'\n').Split(
'\n'))
496 this.XmlOutput.WriteElementString(
"lineBreak",
string.Empty);
498 this.XmlOutput.WriteElementString(
"text", Result?.
ToString() ??
string.Empty);
501 if (AloneInParagraph)
502 this.XmlOutput.WriteEndElement();
505 else if (Result is Array A)
507 foreach (
object Item
in A)
512 if (AloneInParagraph)
513 this.XmlOutput.WriteStartElement(
"paragraph");
515 this.XmlOutput.WriteElementString(
"text", Result?.
ToString() ??
string.Empty);
517 if (AloneInParagraph)
518 this.XmlOutput.WriteEndElement();
528 this.XmlOutput.WriteElementString(
"text", Element.
Value);
530 return Task.CompletedTask;
548 this.XmlOutput.WriteElementString(
"lineBreak",
string.Empty);
549 return Task.CompletedTask;
576 this.XmlOutput.WriteStartElement(
"parameter");
577 this.XmlOutput.WriteAttributeString(
"name", Element.
Key);
578 this.XmlOutput.WriteEndElement();
580 return Task.CompletedTask;
587 public override Task
Render(Model.SpanElements.Multimedia Element)
593 return Renderer.RenderContractXml(
this, Element.Items, Element.Children, Element.AloneInParagraph, Element.Document);
620 this.XmlOutput.WriteStartElement(
"strikeThrough");
622 this.XmlOutput.WriteEndElement();
631 this.XmlOutput.WriteStartElement(
"bold");
633 this.XmlOutput.WriteEndElement();
642 this.XmlOutput.WriteStartElement(
"sub");
644 this.XmlOutput.WriteEndElement();
653 this.XmlOutput.WriteStartElement(
"super");
655 this.XmlOutput.WriteEndElement();
664 this.XmlOutput.WriteStartElement(
"underline");
666 this.XmlOutput.WriteEndElement();
671 #region Block elements
688 this.XmlOutput.WriteStartElement(
"bulletItems");
690 this.XmlOutput.WriteEndElement();
723 this.XmlOutput.WriteStartElement(
"paragraph");
728 for (i = Element.
Start; i <= Element.
End; i++)
733 this.XmlOutput.WriteElementString(
"lineBreak",
string.Empty);
735 this.XmlOutput.WriteElementString(
"text", Element.
Rows[i]);
738 this.XmlOutput.WriteEndElement();
747 return Task.CompletedTask;
801 while (this.Level >= Element.
Level)
803 this.XmlOutput.WriteEndElement();
804 this.XmlOutput.WriteEndElement();
808 this.XmlOutput.WriteStartElement(
"section");
809 this.XmlOutput.WriteStartElement(
"header");
813 this.XmlOutput.WriteEndElement();
814 this.XmlOutput.WriteStartElement(
"body");
825 this.XmlOutput.WriteElementString(
"separator",
string.Empty);
826 return Task.CompletedTask;
835 this.XmlOutput.WriteStartElement(
"paragraph");
837 this.XmlOutput.WriteEndElement();
855 return Task.CompletedTask;
891 this.XmlOutput.WriteStartElement(
"item");
898 this.XmlOutput.WriteEndElement();
907 this.XmlOutput.WriteStartElement(
"numberedItems");
909 this.XmlOutput.WriteEndElement();
918 this.XmlOutput.WriteStartElement(
"paragraph");
920 this.XmlOutput.WriteEndElement();
947 this.XmlOutput.WriteElementString(
"separator",
string.Empty);
948 return Task.CompletedTask;
957 this.XmlOutput.WriteStartElement(
"table");
962 for (RowIndex = 0, NrRows = Element.
Headers.Length; RowIndex < NrRows; RowIndex++)
965 for (RowIndex = 0, NrRows = Element.
Rows.Length; RowIndex < NrRows; RowIndex++)
968 this.XmlOutput.WriteEndElement();
973 int i, c = Row.Length;
975 this.XmlOutput.WriteStartElement(
"row");
977 for (i = 0; i < c; i++)
985 while (i + 1 < c && Row[i + 1] is
null)
991 this.XmlOutput.WriteStartElement(
"cell");
992 this.XmlOutput.WriteAttributeString(
"alignment", (CellAlignments[i] ?? Element.
ColumnAlignments[i]).ToString());
993 this.XmlOutput.WriteAttributeString(
"colSpan", Span.ToString());
998 this.XmlOutput.WriteEndElement();
1002 this.XmlOutput.WriteEndElement();
1011 this.XmlOutput.WriteStartElement(
"row");
1012 this.XmlOutput.WriteStartElement(
"cell");
1013 this.XmlOutput.WriteAttributeString(
"alignment",
"Center");
1014 this.XmlOutput.WriteAttributeString(
"colSpan",
"1");
1015 this.XmlOutput.WriteAttributeString(
"header",
"false");
1016 this.XmlOutput.WriteElementString(
"text", Element.
IsChecked ?
"✓" :
" ");
1017 this.XmlOutput.WriteEndElement();
1019 this.XmlOutput.WriteStartElement(
"cell");
1020 this.XmlOutput.WriteAttributeString(
"alignment",
"Left");
1021 this.XmlOutput.WriteAttributeString(
"colSpan",
"1");
1022 this.XmlOutput.WriteAttributeString(
"header",
"false");
1026 this.XmlOutput.WriteEndElement();
1027 this.XmlOutput.WriteEndElement();
1036 this.XmlOutput.WriteStartElement(
"table");
1038 this.XmlOutput.WriteEndElement();
1047 this.XmlOutput.WriteStartElement(
"item");
1054 this.XmlOutput.WriteEndElement();
Helps with parsing of commong data types.
static string Encode(bool x)
Encodes a Boolean for use in XML and other formats.
const string ContentTypePng
image/png
Renders Contracts XML from a Markdown document.
override Task Render(InlineText Element)
Renders Element .
override Task Render(AutomaticLinkUrl Element)
Renders Element .
override Task Render(HashTag Element)
Renders Element .
override void Dispose()
Disposes of the renderer.
override Task Render(Sections Element)
Renders Element .
override async Task Render(FootnoteReference Element)
Renders Element .
override Task Render(DetailsReference Element)
Renders Element .
override Task Render(InsertBlocks Element)
Renders Element .
override Task Render(Link Element)
Renders Element .
override async Task Render(Strong Element)
Renders Element .
async Task RenderObject(object Result, bool AloneInParagraph, Variables Variables)
Generates Human-Readable XML for Smart Contracts from the markdown text. Ref: https://neuro-foundatio...
override async Task Render(CodeBlock Element)
Renders Element .
override async Task Render(InlineScript Element)
Renders Element .
override Task Render(SectionSeparator Element)
Renders Element .
override Task Render(CommentBlock Element)
Renders Element .
override Task Render(MetaReference Element)
Renders Element .
ContractsRenderer(XmlWriterSettings XmlSettings, string LocalName, string Namespace)
Renders Contracts XML from a Markdown document.
override Task Render(DefinitionList Element)
Renders Element .
override Task Render(LeftAligned Element)
Renders Element .
override Task Render(Delete Element)
Renders Element .
override Task Render(NestedBlock Element)
Renders Element .
ContractsRenderer(StringBuilder Output, XmlWriterSettings XmlSettings, string LocalName, string Namespace)
Renders Contracts XML from a Markdown document.
override Task Render(DefinitionTerms Element)
Renders Element .
override Task Render(Footnote Element)
Renders Element .
override Task Render(RightAligned Element)
Renders Element .
override Task Render(HtmlEntityUnicode Element)
Renders Element .
override async Task Render(NumberedList Element)
Renders Element .
override async Task RenderFootnotes()
Renders footnotes.
override Task Render(EmojiReference Element)
Renders Element .
override Task Render(DeleteBlocks Element)
Renders Element .
override Task Render(InlineCode Element)
Renders Element .
override Task Render(LineBreak Element)
Renders Element .
override async Task Render(BulletList Element)
Renders Element .
override async Task Render(TaskList Element)
Renders Element .
override Task Render(BlockQuote Element)
Renders Element .
override Task Render(HtmlEntity Element)
Renders Element .
override Task Render(InvisibleBreak Element)
Renders Element .
readonly string LocalName
Local Name of container element, or null if none.
override async Task Render(TaskItem Element)
Renders Element .
override Task Render(Insert Element)
Renders Element .
readonly XmlWriter XmlOutput
XML output
readonly string Namespace
Namespace of container element, or null if none specified.
override async Task Render(Emphasize Element)
Renders Element .
override Task Render(Abbreviation Element)
Renders Element .
override Task Render(HorizontalRule Element)
Renders Element .
override Task Render(CenterAligned Element)
Renders Element .
override async Task Render(NumberedItem Element)
Renders Element .
override async Task Render(Table Element)
Renders Element .
ContractsRenderer(StringBuilder Output, XmlWriterSettings XmlSettings, string LocalName)
Renders Contracts XML from a Markdown document.
override async Task Render(SubScript Element)
Renders Element .
override Task Render(LinkReference Element)
Renders Element .
int Level
Current section header level.
override async Task Render(Paragraph Element)
Renders Element .
override Task Render(MultimediaReference Element)
Renders Element .
ContractsRenderer(XmlWriterSettings XmlSettings, string LocalName)
Renders Contracts XML from a Markdown document.
override Task Render(Model.SpanElements.Multimedia Element)
Renders Element .
override Task Render(InlineHTML Element)
Renders Element .
override Task Render(DefinitionDescriptions Element)
Renders Element .
override async Task Render(StrikeThrough Element)
Renders Element .
override async Task Render(SuperScript Element)
Renders Element .
override async Task Render(Underline Element)
Renders Element .
override async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
Renders a document.
override Task RenderDocumentHeader()
Renders the document header.
override async Task Render(UnnumberedItem Element)
Renders Element .
override async Task Render(HtmlBlock Element)
Renders Element .
override Task Render(AutomaticLinkMail Element)
Renders Element .
override Task RenderDocumentFooter()
Renders the document header.
override async Task Render(Header Element)
Renders Element .
override Task Render(MarginAligned Element)
Renders Element .
Class that can be used to encapsulate Markdown to be returned from a Web Service, bypassing any encod...
Contains a markdown document. This markdown document class supports original markdown,...
static async Task< object > TransformXml(XmlDocument Xml, Variables Variables)
Transforms XML to an object that is easier to visualize.
IEnumerable< string > FootnoteOrder
Order of footnotes.
Multimedia GetReference(string Label)
Gets the multimedia information referenced by a label.
static Task< MarkdownDocument > CreateAsync(string MarkdownText, params Type[] TransparentExceptionTypes)
Contains a markdown document. This markdown document class supports original markdown,...
Contains settings that the Markdown parser uses to customize its behavior.
Represents a block quote in a markdown document.
Represents a bullet list in a markdown document.
Represents a center-aligned set of blocks in a markdown document.
Represents a code block in a markdown document.
int Indent
Code block indentation.
string[] Rows
Rows in code block
Represents a definition list in a markdown document.
Represents inserted blocks in a markdown document.
Represents a block of HTML in a markdown document.
Represents inserted blocks in a markdown document.
Represents a left-aligned set of blocks in a markdown document.
Represents a margin-aligned set of blocks in a markdown document.
Represents a nested block with no special formatting rules in a markdown document.
Represents a numbered item in an ordered list.
Represents a numbered list in a markdown document.
Represents a paragraph in a markdown document.
Represents a right-aligned set of blocks in a markdown document.
Represents a sequence of sections.
Represents a table in a markdown document.
TextAlignment[] ColumnAlignments
Table column alignments.
MarkdownElement[][] Headers
Headers in table.
TextAlignment?[][] RowCellAlignments
Row cell alignments in table.
TextAlignment?[][] HeaderCellAlignments
Header cell alignments in table.
MarkdownElement[][] Rows
Rows in table.
Represents a task item in a task list.
bool IsChecked
If the item is checked or not.
Represents a task list in a markdown document.
Represents an unnumbered item in an ordered list.
override IEnumerable< MarkdownElement > Children
Any children of the element.
Abstract base class for all markdown elements.
abstract Task Render(IRenderer Output)
Renders the element.
MarkdownDocument Document
Markdown document.
MarkdownElement Child
Child element.
EmojiInfo Emoji
Emoji information.
Represents an HTML entity.
Represents an HTML entity in Unicode format.
int Code
Unicode character
bool AloneInParagraph
If the element is alone in a paragraph.
Variables Variables
Variables.
async Task< object > EvaluateExpression()
Evaluates the script expression.
string Value
Unformatted text.
MultimediaItem[] Items
Multimedia items.
bool AloneInParagraph
If the element is alone in a paragraph.
Abstract base class for Markdown renderers.
readonly StringBuilder Output
Renderer output.
Task RenderChild(MarkdownElementSingleChild Element)
Renders the child of Element .
async Task RenderChildren(MarkdownElementChildren Element)
Renders the children of Element .
override string ToString()
Returns the renderer output.
MarkdownDocument Document
Reference to Markdown document being processed.
Static class managing the application event log. Applications and services log events on this static ...
static Exception UnnestException(Exception Exception)
Unnests an exception, to extract the relevant inner exception.
Handles two-dimensional graphs.
string Title
Title for graph.
int Width
Width of graph, in pixels. (Default=640 pixels.)
int Height
Height of graph, in pixels. (Default=480 pixels.)
ToMatrix(ScriptNode Operand, bool NullCheck, int Start, int Length, Expression Expression)
To-Matrix operator.
Interface for code content contract renderers.
Interface for multimedia content contract renderers.
Interface for objects that can be converted into matrices.
TextAlignment
Text alignment of contents.