Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
ContractsRenderer.cs
1using SkiaSharp;
2using System;
3using System.Text;
4using System.Threading.Tasks;
5using System.Xml;
11using Waher.Events;
12using Waher.Script;
15
17{
22 {
26 public readonly XmlWriter XmlOutput;
27
31 public readonly string LocalName;
32
36 public readonly string Namespace;
37
41 public int Level = 0;
42
48 public ContractsRenderer(XmlWriterSettings XmlSettings, string LocalName)
49 : this(XmlSettings, LocalName, null)
50 {
51 }
52
59 public ContractsRenderer(XmlWriterSettings XmlSettings, string LocalName, string Namespace)
60 : base()
61 {
62 this.XmlOutput = XmlWriter.Create(this.Output, XmlSettings);
63 this.LocalName = LocalName;
64 this.Namespace = Namespace;
65 }
66
73 public ContractsRenderer(StringBuilder Output, XmlWriterSettings XmlSettings, string LocalName)
74 : this(Output, XmlSettings, LocalName, null)
75 {
76 }
77
85 public ContractsRenderer(StringBuilder Output, XmlWriterSettings XmlSettings, string LocalName, string Namespace)
86 : base(Output)
87 {
88 this.XmlOutput = XmlWriter.Create(this.Output, XmlSettings);
89 this.LocalName = LocalName;
90 this.Namespace = Namespace;
91 }
92
94 public override void Dispose()
95 {
96 base.Dispose();
97
98 this.XmlOutput.Dispose();
99 }
100
106 public override async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
107 {
108 this.Level = 0;
109
110 await base.RenderDocument(Document, Inclusion);
111
112 while (this.Level > 0)
113 {
114 this.XmlOutput.WriteEndElement();
115 this.XmlOutput.WriteEndElement();
116 this.Level--;
117 }
118
119 this.XmlOutput.Flush();
120 }
121
125 public override Task RenderDocumentHeader()
126 {
127 if (!string.IsNullOrEmpty(this.LocalName))
128 {
129 if (string.IsNullOrEmpty(this.Namespace))
130 this.XmlOutput.WriteStartElement(this.LocalName);
131 else
132 this.XmlOutput.WriteStartElement(this.LocalName, this.Namespace);
133 }
134
135 return Task.CompletedTask;
136 }
137
141 public override async Task RenderFootnotes()
142 {
143 int ExpectedNr = 1;
144 bool FootNotesAdded = false;
145
146 while (this.Level > 0)
147 {
148 this.XmlOutput.WriteEndElement();
149 this.XmlOutput.WriteEndElement();
150 this.Level--;
151 }
152
153 foreach (string Key in this.Document.FootnoteOrder)
154 {
155 if (!(this.Document?.TryGetFootnoteNumber(Key, out int Nr) ?? false) ||
156 Nr != ExpectedNr ||
157 !(this.Document?.TryGetFootnote(Key, out Footnote Note) ?? false) ||
158 !Note.Referenced)
159 {
160 continue;
161 }
162
163 ExpectedNr++;
164
165 if (!FootNotesAdded)
166 {
167 FootNotesAdded = true;
168 this.XmlOutput.WriteElementString("separator", string.Empty);
169 this.XmlOutput.WriteStartElement("numberedItems");
170 }
171
172 this.XmlOutput.WriteStartElement("item");
173 await Note.Render(this);
174 this.XmlOutput.WriteEndElement();
175 }
176
177 if (FootNotesAdded)
178 this.XmlOutput.WriteEndElement();
179 }
180
184 public override Task RenderDocumentFooter()
185 {
186 if (!string.IsNullOrEmpty(this.LocalName))
187 this.XmlOutput.WriteEndElement();
188
189 this.XmlOutput.Flush();
190
191 return Task.CompletedTask;
192 }
193
194 #region Span Elements
195
200 public override Task Render(Abbreviation Element)
201 {
202 return this.RenderChildren(Element);
203 }
204
209 public override Task Render(AutomaticLinkMail Element)
210 {
211 this.XmlOutput.WriteElementString("text", Element.EMail);
212
213 return Task.CompletedTask;
214 }
215
220 public override Task Render(AutomaticLinkUrl Element)
221 {
222 this.XmlOutput.WriteElementString("text", Element.URL);
223
224 return Task.CompletedTask;
225 }
226
231 public override Task Render(Delete Element)
232 {
233 return this.RenderChildren(Element);
234 }
235
240 public override Task Render(DetailsReference Element)
241 {
242 return this.Render((MetaReference)Element);
243 }
244
249 public override Task Render(EmojiReference Element)
250 {
251 this.XmlOutput.WriteElementString("text", Element.Emoji.Unicode);
252
253 return Task.CompletedTask;
254 }
255
260 public override async Task Render(Emphasize Element)
261 {
262 this.XmlOutput.WriteStartElement("italic");
263 await this.RenderChildren(Element);
264 this.XmlOutput.WriteEndElement();
265 }
266
271 public override async Task Render(FootnoteReference Element)
272 {
273 if (!(this.Document?.TryGetFootnote(Element.Key, out Footnote Footnote) ?? false))
274 Footnote = null;
275
276 if (Element.AutoExpand && !(Footnote is null))
277 await this.Render(Footnote);
278 else if (this.Document?.TryGetFootnoteNumber(Element.Key, out int Nr) ?? false)
279 {
280 this.XmlOutput.WriteStartElement("super");
281 this.XmlOutput.WriteElementString("text", Nr.ToString());
282 this.XmlOutput.WriteEndElement();
283
284 if (!(Footnote is null))
285 Footnote.Referenced = true;
286 }
287 }
288
293 public override Task Render(HashTag Element)
294 {
295 this.XmlOutput.WriteElementString("text", Element.Tag);
296
297 return Task.CompletedTask;
298 }
299
304 public override Task Render(HtmlEntity Element)
305 {
306 string s = Html.HtmlEntity.EntityToCharacter(Element.Entity);
307 if (!string.IsNullOrEmpty(s))
308 this.XmlOutput.WriteElementString("text", s);
309
310 return Task.CompletedTask;
311 }
312
317 public override Task Render(HtmlEntityUnicode Element)
318 {
319 this.XmlOutput.WriteElementString("text", new string((char)Element.Code, 1));
320
321 return Task.CompletedTask;
322 }
323
328 public override Task Render(InlineCode Element)
329 {
330 this.XmlOutput.WriteElementString("text", Element.Code);
331
332 return Task.CompletedTask;
333 }
334
339 public override Task Render(InlineHTML Element)
340 {
341 return Task.CompletedTask; // TODO
342 }
343
348 public override async Task Render(InlineScript Element)
349 {
350 object Result = await Element.EvaluateExpression();
351
352 await this.RenderObject(Result, Element.AloneInParagraph, Element.Variables);
353 }
354
362 public async Task RenderObject(object Result, bool AloneInParagraph, Variables Variables)
363 {
364 if (Result is null)
365 return;
366
367 if (Result is XmlDocument Xml)
368 Result = await MarkdownDocument.TransformXml(Xml, Variables);
369 else if (Result is IToMatrix ToMatrix)
370 Result = ToMatrix.ToMatrix();
371
372 if (Result is Graph G)
373 {
374 PixelInformation Pixels = G.CreatePixels(out GraphSettings GraphSettings);
375 byte[] Bin = Pixels.EncodeAsPng();
376
377 if (AloneInParagraph)
378 this.XmlOutput.WriteStartElement("imageStandalone");
379 else
380 this.XmlOutput.WriteStartElement("imageInline");
381
382 this.XmlOutput.WriteAttributeString("contentType", ImageCodec.ContentTypePng);
383 this.XmlOutput.WriteAttributeString("width", GraphSettings.Width.ToString());
384 this.XmlOutput.WriteAttributeString("height", GraphSettings.Height.ToString());
385
386 this.XmlOutput.WriteStartElement("binary");
387 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
388 this.XmlOutput.WriteEndElement();
389
390 this.XmlOutput.WriteStartElement("caption");
391 if (G is Graph2D Graph2D && !string.IsNullOrEmpty(Graph2D.Title))
392 this.XmlOutput.WriteElementString("text", Graph2D.Title);
393 else
394 this.XmlOutput.WriteElementString("text", "Graph");
395
396 this.XmlOutput.WriteEndElement();
397 this.XmlOutput.WriteEndElement();
398 }
399 else if (Result is PixelInformation Pixels)
400 {
401 byte[] Bin = Pixels.EncodeAsPng();
402
403 if (AloneInParagraph)
404 this.XmlOutput.WriteStartElement("imageStandalone");
405 else
406 this.XmlOutput.WriteStartElement("imageInline");
407
408 this.XmlOutput.WriteAttributeString("contentType", ImageCodec.ContentTypePng);
409 this.XmlOutput.WriteAttributeString("width", Pixels.Width.ToString());
410 this.XmlOutput.WriteAttributeString("height", Pixels.Height.ToString());
411
412 this.XmlOutput.WriteStartElement("binary");
413 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
414 this.XmlOutput.WriteEndElement();
415
416 this.XmlOutput.WriteStartElement("caption");
417 this.XmlOutput.WriteElementString("text", "Image");
418 this.XmlOutput.WriteEndElement();
419 this.XmlOutput.WriteEndElement();
420 }
421 else if (Result is SKImage Img)
422 {
423 using (SKData Data = Img.Encode(SKEncodedImageFormat.Png, 100))
424 {
425 byte[] Bin = Data.ToArray();
426
427 if (AloneInParagraph)
428 this.XmlOutput.WriteStartElement("imageStandalone");
429 else
430 this.XmlOutput.WriteStartElement("imageInline");
431
432 this.XmlOutput.WriteAttributeString("contentType", ImageCodec.ContentTypePng);
433 this.XmlOutput.WriteAttributeString("width", Img.Width.ToString());
434 this.XmlOutput.WriteAttributeString("height", Img.Height.ToString());
435
436 this.XmlOutput.WriteStartElement("binary");
437 this.XmlOutput.WriteValue(Convert.ToBase64String(Bin));
438 this.XmlOutput.WriteEndElement();
439
440 this.XmlOutput.WriteStartElement("caption");
441 this.XmlOutput.WriteElementString("text", "Image");
442 this.XmlOutput.WriteEndElement();
443 this.XmlOutput.WriteEndElement();
444 }
445 }
446 else if (Result is MarkdownDocument Doc)
447 {
448 await this.RenderDocument(Doc, true); // Does not call ProcessAsyncTasks()
449 Doc.ProcessAsyncTasks();
450 }
451 else if (Result is MarkdownContent Markdown)
452 {
453 Doc = await MarkdownDocument.CreateAsync(Markdown.Markdown, Markdown.Settings ?? new MarkdownSettings());
454 await this.RenderDocument(Doc, true); // Does not call ProcessAsyncTasks()
455 Doc.ProcessAsyncTasks();
456 }
457 else if (Result is Exception ex)
458 {
459 bool First = true;
460
461 ex = Log.UnnestException(ex);
462
463 if (ex is AggregateException ex2)
464 {
465 foreach (Exception ex3 in ex2.InnerExceptions)
466 {
467 if (AloneInParagraph)
468 this.XmlOutput.WriteStartElement("paragraph");
469
470 foreach (string Row in ex3.Message.Replace("\r\n", "\n").
471 Replace('\r', '\n').Split('\n'))
472 {
473 if (First)
474 First = false;
475 else
476 this.XmlOutput.WriteElementString("lineBreak", string.Empty);
477
478 this.XmlOutput.WriteElementString("text", Result?.ToString() ?? string.Empty);
479 }
480
481 if (AloneInParagraph)
482 this.XmlOutput.WriteEndElement();
483 }
484 }
485 else
486 {
487 if (AloneInParagraph)
488 this.XmlOutput.WriteStartElement("paragraph");
489
490 foreach (string Row in ex.Message.Replace("\r\n", "\n").
491 Replace('\r', '\n').Split('\n'))
492 {
493 if (First)
494 First = false;
495 else
496 this.XmlOutput.WriteElementString("lineBreak", string.Empty);
497
498 this.XmlOutput.WriteElementString("text", Result?.ToString() ?? string.Empty);
499 }
500
501 if (AloneInParagraph)
502 this.XmlOutput.WriteEndElement();
503 }
504 }
505 else if (Result is Array A)
506 {
507 foreach (object Item in A)
508 await this.RenderObject(Item, false, Variables);
509 }
510 else
511 {
512 if (AloneInParagraph)
513 this.XmlOutput.WriteStartElement("paragraph");
514
515 this.XmlOutput.WriteElementString("text", Result?.ToString() ?? string.Empty);
516
517 if (AloneInParagraph)
518 this.XmlOutput.WriteEndElement();
519 }
520 }
521
526 public override Task Render(InlineText Element)
527 {
528 this.XmlOutput.WriteElementString("text", Element.Value);
529
530 return Task.CompletedTask;
531 }
532
537 public override Task Render(Insert Element)
538 {
539 return this.RenderChildren(Element);
540 }
541
546 public override Task Render(LineBreak Element)
547 {
548 this.XmlOutput.WriteElementString("lineBreak", string.Empty);
549 return Task.CompletedTask;
550 }
551
556 public override Task Render(Link Element)
557 {
558 return this.RenderChildren(Element);
559 }
560
565 public override Task Render(LinkReference Element)
566 {
567 return this.RenderChildren(Element);
568 }
569
574 public override Task Render(MetaReference Element)
575 {
576 this.XmlOutput.WriteStartElement("parameter");
577 this.XmlOutput.WriteAttributeString("name", Element.Key);
578 this.XmlOutput.WriteEndElement();
579
580 return Task.CompletedTask;
581 }
582
587 public override Task Render(Model.SpanElements.Multimedia Element)
588 {
590 if (Renderer is null)
591 return this.RenderChildren(Element);
592 else
593 return Renderer.RenderContractXml(this, Element.Items, Element.Children, Element.AloneInParagraph, Element.Document);
594 }
595
600 public override Task Render(MultimediaReference Element)
601 {
603
604 if (!(Multimedia is null))
605 {
607 if (!(Renderer is null))
608 return Renderer.RenderContractXml(this, Multimedia.Items, Element.Children, Element.AloneInParagraph, Element.Document);
609 }
610
611 return this.RenderChildren(Element);
612 }
613
618 public override async Task Render(StrikeThrough Element)
619 {
620 this.XmlOutput.WriteStartElement("strikeThrough");
621 await this.RenderChildren(Element);
622 this.XmlOutput.WriteEndElement();
623 }
624
629 public override async Task Render(Strong Element)
630 {
631 this.XmlOutput.WriteStartElement("bold");
632 await this.RenderChildren(Element);
633 this.XmlOutput.WriteEndElement();
634 }
635
640 public override async Task Render(SubScript Element)
641 {
642 this.XmlOutput.WriteStartElement("sub");
643 await this.RenderChildren(Element);
644 this.XmlOutput.WriteEndElement();
645 }
646
651 public override async Task Render(SuperScript Element)
652 {
653 this.XmlOutput.WriteStartElement("super");
654 await this.RenderChildren(Element);
655 this.XmlOutput.WriteEndElement();
656 }
657
662 public override async Task Render(Underline Element)
663 {
664 this.XmlOutput.WriteStartElement("underline");
665 await this.RenderChildren(Element);
666 this.XmlOutput.WriteEndElement();
667 }
668
669 #endregion
670
671 #region Block elements
672
677 public override Task Render(BlockQuote Element)
678 {
679 return this.RenderChildren(Element);
680 }
681
686 public override async Task Render(BulletList Element)
687 {
688 this.XmlOutput.WriteStartElement("bulletItems");
689 await this.RenderChildren(Element);
690 this.XmlOutput.WriteEndElement();
691 }
692
697 public override Task Render(CenterAligned Element)
698 {
699 return this.RenderChildren(Element);
700 }
701
706 public override async Task Render(CodeBlock Element)
707 {
709
710 if (!(Renderer is null))
711 {
712 try
713 {
714 if (await Renderer.RenderContractXml(this, Element.Rows, Element.Language, Element.Indent, Element.Document))
715 return;
716 }
717 catch (Exception)
718 {
719 // Continue
720 }
721 }
722
723 this.XmlOutput.WriteStartElement("paragraph");
724
725 int i;
726 bool First = true;
727
728 for (i = Element.Start; i <= Element.End; i++)
729 {
730 if (First)
731 First = false;
732 else
733 this.XmlOutput.WriteElementString("lineBreak", string.Empty);
734
735 this.XmlOutput.WriteElementString("text", Element.Rows[i]);
736 }
737
738 this.XmlOutput.WriteEndElement();
739 }
740
745 public override Task Render(CommentBlock Element)
746 {
747 return Task.CompletedTask;
748 }
749
754 public override Task Render(DefinitionDescriptions Element)
755 {
756 return this.RenderChildren(Element);
757 }
758
763 public override Task Render(DefinitionList Element)
764 {
765 return this.RenderChildren(Element);
766 }
767
772 public override Task Render(DefinitionTerms Element)
773 {
774 return this.RenderChildren(Element);
775 }
776
781 public override Task Render(DeleteBlocks Element)
782 {
783 return this.RenderChildren(Element);
784 }
785
790 public override Task Render(Footnote Element)
791 {
792 return this.RenderChildren(Element);
793 }
794
799 public override async Task Render(Header Element)
800 {
801 while (this.Level >= Element.Level)
802 {
803 this.XmlOutput.WriteEndElement();
804 this.XmlOutput.WriteEndElement();
805 this.Level--;
806 }
807
808 this.XmlOutput.WriteStartElement("section");
809 this.XmlOutput.WriteStartElement("header");
810
811 await this.RenderChildren(Element);
812
813 this.XmlOutput.WriteEndElement();
814 this.XmlOutput.WriteStartElement("body");
815
816 this.Level++;
817 }
818
823 public override Task Render(HorizontalRule Element)
824 {
825 this.XmlOutput.WriteElementString("separator", string.Empty);
826 return Task.CompletedTask;
827 }
828
833 public override async Task Render(HtmlBlock Element)
834 {
835 this.XmlOutput.WriteStartElement("paragraph");
836 await this.RenderChildren(Element);
837 this.XmlOutput.WriteEndElement();
838 }
839
844 public override Task Render(InsertBlocks Element)
845 {
846 return this.RenderChildren(Element);
847 }
848
853 public override Task Render(InvisibleBreak Element)
854 {
855 return Task.CompletedTask;
856 }
857
862 public override Task Render(LeftAligned Element)
863 {
864 return this.RenderChildren(Element);
865 }
866
871 public override Task Render(MarginAligned Element)
872 {
873 return this.RenderChildren(Element);
874 }
875
880 public override Task Render(NestedBlock Element)
881 {
882 return this.RenderChildren(Element);
883 }
884
889 public override async Task Render(NumberedItem Element)
890 {
891 this.XmlOutput.WriteStartElement("item");
892
893 if (Element.Child is Paragraph P)
894 await this.RenderChildren(P);
895 else
896 await this.RenderChild(Element);
897
898 this.XmlOutput.WriteEndElement();
899 }
900
905 public override async Task Render(NumberedList Element)
906 {
907 this.XmlOutput.WriteStartElement("numberedItems");
908 await this.RenderChildren(Element);
909 this.XmlOutput.WriteEndElement();
910 }
911
916 public override async Task Render(Paragraph Element)
917 {
918 this.XmlOutput.WriteStartElement("paragraph");
919 await this.RenderChildren(Element);
920 this.XmlOutput.WriteEndElement();
921 }
922
927 public override Task Render(RightAligned Element)
928 {
929 return this.RenderChildren(Element);
930 }
931
936 public override Task Render(Sections Element)
937 {
938 return this.RenderChildren(Element);
939 }
940
945 public override Task Render(SectionSeparator Element)
946 {
947 this.XmlOutput.WriteElementString("separator", string.Empty);
948 return Task.CompletedTask;
949 }
950
955 public override async Task Render(Table Element)
956 {
957 this.XmlOutput.WriteStartElement("table");
958
959 int NrRows;
960 int RowIndex;
961
962 for (RowIndex = 0, NrRows = Element.Headers.Length; RowIndex < NrRows; RowIndex++)
963 await this.Render(Element.Headers[RowIndex], Element.HeaderCellAlignments[RowIndex], true, Element);
964
965 for (RowIndex = 0, NrRows = Element.Rows.Length; RowIndex < NrRows; RowIndex++)
966 await this.Render(Element.Rows[RowIndex], Element.RowCellAlignments[RowIndex], false, Element);
967
968 this.XmlOutput.WriteEndElement();
969 }
970
971 private async Task Render(MarkdownElement[] Row, TextAlignment?[] CellAlignments, bool HeaderRow, Table Element)
972 {
973 int i, c = Row.Length;
974
975 this.XmlOutput.WriteStartElement("row");
976
977 for (i = 0; i < c; i++)
978 {
979 MarkdownElement Cell = Row[i];
980
981 if (!(Cell is null))
982 {
983 int Span = 1;
984
985 while (i + 1 < c && Row[i + 1] is null)
986 {
987 i++;
988 Span++;
989 }
990
991 this.XmlOutput.WriteStartElement("cell");
992 this.XmlOutput.WriteAttributeString("alignment", (CellAlignments[i] ?? Element.ColumnAlignments[i]).ToString());
993 this.XmlOutput.WriteAttributeString("colSpan", Span.ToString());
994 this.XmlOutput.WriteAttributeString("header", CommonTypes.Encode(HeaderRow));
995
996 await Cell.Render(this);
997
998 this.XmlOutput.WriteEndElement();
999 }
1000 }
1001
1002 this.XmlOutput.WriteEndElement();
1003 }
1004
1009 public override async Task Render(TaskItem Element)
1010 {
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();
1018
1019 this.XmlOutput.WriteStartElement("cell");
1020 this.XmlOutput.WriteAttributeString("alignment", "Left");
1021 this.XmlOutput.WriteAttributeString("colSpan", "1");
1022 this.XmlOutput.WriteAttributeString("header", "false");
1023
1024 await this.RenderChild(Element);
1025
1026 this.XmlOutput.WriteEndElement();
1027 this.XmlOutput.WriteEndElement();
1028 }
1029
1034 public override async Task Render(TaskList Element)
1035 {
1036 this.XmlOutput.WriteStartElement("table");
1037 await this.RenderChildren(Element);
1038 this.XmlOutput.WriteEndElement();
1039 }
1040
1045 public override async Task Render(UnnumberedItem Element)
1046 {
1047 this.XmlOutput.WriteStartElement("item");
1048
1049 if (Element.Child is Paragraph P)
1050 await this.RenderChildren(P);
1051 else
1052 await this.RenderChild(Element);
1053
1054 this.XmlOutput.WriteEndElement();
1055 }
1056
1057 #endregion
1058
1059 }
1060}
Helps with parsing of commong data types.
Definition: CommonTypes.cs:13
static string Encode(bool x)
Encodes a Boolean for use in XML and other formats.
Definition: CommonTypes.cs:594
Image encoder/decoder.
Definition: ImageCodec.cs:14
const string ContentTypePng
image/png
Definition: ImageCodec.cs:30
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 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 .
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.
Definition: BlockQuote.cs:11
Represents a bullet list in a markdown document.
Definition: BulletList.cs:11
Represents a center-aligned set of blocks in a markdown document.
Represents a code block in a markdown document.
Definition: CodeBlock.cs:16
Represents a comment block in a markdown document.
Definition: CommentBlock.cs:10
Represents a definition list in a markdown document.
Represents inserted blocks in a markdown document.
Definition: DeleteBlocks.cs:11
Represents a header in a markdown document.
Definition: Header.cs:15
Represents a block of HTML in a markdown document.
Definition: HtmlBlock.cs:11
Represents inserted blocks in a markdown document.
Definition: InsertBlocks.cs:11
Represents a left-aligned set of blocks in a markdown document.
Definition: LeftAligned.cs:11
Represents a margin-aligned set of blocks in a markdown document.
Represents a nested block with no special formatting rules in a markdown document.
Definition: NestedBlock.cs:11
Represents a numbered item in an ordered list.
Definition: NumberedItem.cs:10
Represents a numbered list in a markdown document.
Definition: NumberedList.cs:11
Represents a paragraph in a markdown document.
Definition: Paragraph.cs:11
Represents a right-aligned set of blocks in a markdown document.
Definition: RightAligned.cs:11
Represents a sequence of sections.
Definition: Sections.cs:11
Represents a table in a markdown document.
Definition: Table.cs:11
TextAlignment[] ColumnAlignments
Table column alignments.
Definition: Table.cs:64
MarkdownElement[][] Headers
Headers in table.
Definition: Table.cs:54
TextAlignment?[][] RowCellAlignments
Row cell alignments in table.
Definition: Table.cs:79
TextAlignment?[][] HeaderCellAlignments
Header cell alignments in table.
Definition: Table.cs:74
MarkdownElement[][] Rows
Rows in table.
Definition: Table.cs:59
Represents a task item in a task list.
Definition: TaskItem.cs:10
bool IsChecked
If the item is checked or not.
Definition: TaskItem.cs:31
Represents a task list in a markdown document.
Definition: TaskList.cs:11
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.
bool AutoExpand
If the footnote should automatically be expanded when rendered, if format supports auto-expansion.
Represents an HTML entity in Unicode format.
bool AloneInParagraph
If the element is alone in a paragraph.
Definition: InlineScript.cs:55
async Task< object > EvaluateExpression()
Evaluates the script expression.
Definition: InlineScript.cs:71
MultimediaItem[] Items
Multimedia items.
Definition: Multimedia.cs:40
bool AloneInParagraph
If the element is alone in a paragraph.
Abstract base class for Markdown renderers.
Definition: Renderer.cs:14
readonly StringBuilder Output
Renderer output.
Definition: Renderer.cs:18
Task RenderChild(MarkdownElementSingleChild Element)
Renders the child of Element .
Definition: Renderer.cs:175
async Task RenderChildren(MarkdownElementChildren Element)
Renders the children of Element .
Definition: Renderer.cs:147
override string ToString()
Returns the renderer output.
Definition: Renderer.cs:130
MarkdownDocument Document
Reference to Markdown document being processed.
Definition: Renderer.cs:23
Static class managing the application event log. Applications and services log events on this static ...
Definition: Log.cs:13
static Exception UnnestException(Exception Exception)
Unnests an exception, to extract the relevant inner exception.
Definition: Log.cs:818
Handles two-dimensional graphs.
Definition: Graph2D.cs:26
string Title
Title for graph.
Definition: Graph2D.cs:251
Base class for graphs.
Definition: Graph.cs:79
int Width
Width of graph, in pixels. (Default=640 pixels.)
int Height
Height of graph, in pixels. (Default=480 pixels.)
Contains pixel information
virtual byte[] EncodeAsPng()
Encodes the pixels into a binary PNG image.
ToMatrix(ScriptNode Operand, bool NullCheck, int Start, int Length, Expression Expression)
To-Matrix operator.
Definition: ToMatrix.cs:22
Collection of variables.
Definition: Variables.cs:25
Interface for multimedia content contract renderers.
Interface for objects that can be converted into matrices.
Definition: IToMatrix.cs:9
TextAlignment
Text alignment of contents.