Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Renderer.cs
2using System.Text;
3using System.Threading.Tasks;
8
10{
14 public abstract class Renderer : IRenderer
15 {
19 public readonly StringBuilder Output;
20
25
29 public Renderer()
30 : this(new StringBuilder())
31 {
32 }
33
38 public Renderer(StringBuilder Output)
39 {
40 this.Output = Output;
41 }
42
48 : this(new StringBuilder(), Document)
49 {
50 }
51
58 {
59 this.Output = Output;
60 this.Document = Document;
61 }
62
66 public virtual void Dispose()
67 {
68 // Do nothing by default.
69 }
70
76 public virtual async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
77 {
78 MarkdownDocument DocBak = this.Document;
79
80 this.Document = Document;
81
82 if (!Inclusion && this.Document.TryGetMetaData("BODYONLY", out KeyValuePair<string, bool>[] Values))
83 {
84 if (CommonTypes.TryParse(Values[0].Key, out bool b) && b)
85 Inclusion = true;
86 }
87
88 if (!Inclusion)
89 await this.RenderDocumentHeader();
90
91 await this.Render(this.Document.Elements);
92
93 if (this.Document.NeedsToDisplayFootnotes)
94 await this.RenderFootnotes();
95
96 if (!Inclusion)
97 await this.RenderDocumentFooter();
98
99 this.Document = DocBak;
100 }
101
105 public virtual Task RenderDocumentHeader()
106 {
107 return Task.CompletedTask; // Do nothing by default.
108 }
109
113 public virtual Task RenderFootnotes()
114 {
115 return Task.CompletedTask; // Do nothing by default.
116 }
117
121 public virtual Task RenderDocumentFooter()
122 {
123 return Task.CompletedTask; // Do nothing by default.
124 }
125
130 public override string ToString()
131 {
132 return this.Output.ToString();
133 }
134
138 public void Clear()
139 {
140 this.Output.Clear();
141 }
142
148 {
149 ChunkedList<MarkdownElement> Children = Element.Children;
150 if (!(Children is null))
151 return this.Render(Children);
152 else
153 return Task.CompletedTask;
154 }
155
160 public async Task RenderChildren(MarkdownElement Element)
161 {
163 int i, c;
164
165 while (!(Loop is null))
166 {
167 for (i = Loop.Start, c = Loop.Pos; i < c; i++)
168 await Loop[i].Render(this);
169
170 Loop = Loop.Next;
171 }
172 }
173
179 {
180 if (Element.Child is null)
181 return Task.CompletedTask;
182 else
183 return Element.Child.Render(this);
184 }
185
191 public async Task<bool> Render(ChunkedList<MarkdownElement> Elements)
192 {
194 int i, c;
195 bool Rendered = false;
196
197 while (!(Loop is null))
198 {
199 for (i = Loop.Start, c = Loop.Pos; i < c; i++)
200 {
201 await Loop[i].Render(this);
202 Rendered = true;
203 }
204
205 Loop = Loop.Next;
206 }
207
208 return Rendered;
209 }
210
211 #region Span Elements
212
217 public abstract Task Render(Abbreviation Element);
218
223 public abstract Task Render(AutomaticLinkMail Element);
224
229 public abstract Task Render(AutomaticLinkUrl Element);
230
235 public abstract Task Render(Delete Element);
236
241 public abstract Task Render(DetailsReference Element);
242
247 public abstract Task Render(EmojiReference Element);
248
253 public abstract Task Render(Emphasize Element);
254
259 public abstract Task Render(FootnoteReference Element);
260
265 public abstract Task Render(HashTag Element);
266
271 public abstract Task Render(HtmlEntity Element);
272
277 public abstract Task Render(HtmlEntityUnicode Element);
278
283 public abstract Task Render(InlineCode Element);
284
289 public abstract Task Render(InlineHTML Element);
290
295 public abstract Task Render(InlineScript Element);
296
301 public abstract Task Render(InlineText Element);
302
307 public abstract Task Render(Insert Element);
308
313 public abstract Task Render(LineBreak Element);
314
319 public abstract Task Render(Link Element);
320
325 public abstract Task Render(LinkReference Element);
326
331 public abstract Task Render(MetaReference Element);
332
337 public abstract Task Render(Model.SpanElements.Multimedia Element);
338
343 public abstract Task Render(MultimediaReference Element);
344
349 public abstract Task Render(StrikeThrough Element);
350
355 public abstract Task Render(Strong Element);
356
361 public abstract Task Render(SubScript Element);
362
367 public abstract Task Render(SuperScript Element);
368
373 public abstract Task Render(Underline Element);
374
375 #endregion
376
377 #region Block elements
378
383 public abstract Task Render(BlockQuote Element);
384
389 public abstract Task Render(BulletList Element);
390
395 public abstract Task Render(CenterAligned Element);
396
401 public abstract Task Render(CodeBlock Element);
402
407 public abstract Task Render(CommentBlock Element);
408
413 public abstract Task Render(DefinitionDescriptions Element);
414
419 public abstract Task Render(DefinitionList Element);
420
425 public abstract Task Render(DefinitionTerms Element);
426
431 public abstract Task Render(DeleteBlocks Element);
432
437 public abstract Task Render(Footnote Element);
438
443 public abstract Task Render(Header Element);
444
449 public abstract Task Render(HorizontalRule Element);
450
455 public abstract Task Render(HtmlBlock Element);
456
461 public abstract Task Render(InsertBlocks Element);
462
467 public abstract Task Render(InvisibleBreak Element);
468
473 public abstract Task Render(LeftAligned Element);
474
479 public abstract Task Render(MarginAligned Element);
480
485 public abstract Task Render(NestedBlock Element);
486
491 public abstract Task Render(NumberedItem Element);
492
497 public abstract Task Render(NumberedList Element);
498
503 public abstract Task Render(Paragraph Element);
504
509 public abstract Task Render(RightAligned Element);
510
515 public abstract Task Render(Sections Element);
516
521 public abstract Task Render(SectionSeparator Element);
522
527 public abstract Task Render(Table Element);
528
533 public abstract Task Render(TaskItem Element);
534
539 public abstract Task Render(TaskList Element);
540
545 public abstract Task Render(UnnumberedItem Element);
546
547 #endregion
548 }
549}
Helps with parsing of commong data types.
Definition: CommonTypes.cs:15
static bool TryParse(string s, out double Value)
Tries to decode a string encoded double.
Definition: CommonTypes.cs:48
Contains a markdown document. This markdown document class supports original markdown,...
bool TryGetMetaData(string Key, out KeyValuePair< string, bool >[] Value)
Tries to get a meta-data value given its key.
ChunkedList< MarkdownElement > Elements
Markdown elements making up the document.
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:17
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:12
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
Represents a task item in a task list.
Definition: TaskItem.cs:10
Represents a task list in a markdown document.
Definition: TaskList.cs:11
Represents an unnumbered item in an ordered list.
Abstract base class for all markdown elements with a variable number of child elements.
override ChunkedList< MarkdownElement > Children
Any children of the element.
Abstract base class for all markdown elements.
abstract Task Render(IRenderer Output)
Renders the element.
virtual ChunkedList< MarkdownElement > Children
Any children of the element.
Abstract base class for all markdown elements with one child element.
Represents an HTML entity in Unicode format.
Abstract base class for Markdown renderers.
Definition: Renderer.cs:15
abstract Task Render(Header Element)
Renders Element .
abstract Task Render(UnnumberedItem Element)
Renders Element .
abstract Task Render(NestedBlock Element)
Renders Element .
abstract Task Render(CommentBlock Element)
Renders Element .
abstract Task Render(DeleteBlocks Element)
Renders Element .
virtual Task RenderDocumentHeader()
Renders the document header.
Definition: Renderer.cs:105
async Task< bool > Render(ChunkedList< MarkdownElement > Elements)
Renders a collection of elements.
Definition: Renderer.cs:191
abstract Task Render(HtmlBlock Element)
Renders Element .
abstract Task Render(DefinitionDescriptions Element)
Renders Element .
abstract Task Render(Underline Element)
Renders Element .
abstract Task Render(Paragraph Element)
Renders Element .
Renderer(StringBuilder Output, MarkdownDocument Document)
Abstract base class for Markdown renderers.
Definition: Renderer.cs:57
abstract Task Render(SubScript Element)
Renders Element .
abstract Task Render(InlineText Element)
Renders Element .
abstract Task Render(AutomaticLinkMail Element)
Renders Element .
abstract Task Render(BulletList Element)
Renders Element .
readonly StringBuilder Output
Renderer output.
Definition: Renderer.cs:19
virtual Task RenderFootnotes()
Renders footnotes.
Definition: Renderer.cs:113
Task RenderChild(MarkdownElementSingleChild Element)
Renders the child of Element .
Definition: Renderer.cs:178
abstract Task Render(NumberedList Element)
Renders Element .
abstract Task Render(Table Element)
Renders Element .
abstract Task Render(SectionSeparator Element)
Renders Element .
abstract Task Render(InsertBlocks Element)
Renders Element .
abstract Task Render(BlockQuote Element)
Renders Element .
abstract Task Render(DefinitionTerms Element)
Renders Element .
virtual Task RenderDocumentFooter()
Renders the document header.
Definition: Renderer.cs:121
abstract Task Render(Insert Element)
Renders Element .
abstract Task Render(StrikeThrough Element)
Renders Element .
abstract Task Render(DetailsReference Element)
Renders Element .
void Clear()
Clears the underlying StringBuilder.
Definition: Renderer.cs:138
abstract Task Render(HorizontalRule Element)
Renders Element .
abstract Task Render(MultimediaReference Element)
Renders Element .
virtual async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
Renders a document.
Definition: Renderer.cs:76
Renderer(MarkdownDocument Document)
Abstract base class for Markdown renderers.
Definition: Renderer.cs:47
abstract Task Render(NumberedItem Element)
Renders Element .
Task RenderChildren(MarkdownElementChildren Element)
Renders the children of Element .
Definition: Renderer.cs:147
Renderer(StringBuilder Output)
Abstract base class for Markdown renderers.
Definition: Renderer.cs:38
async Task RenderChildren(MarkdownElement Element)
Renders the children of Element .
Definition: Renderer.cs:160
abstract Task Render(InvisibleBreak Element)
Renders Element .
abstract Task Render(HtmlEntity Element)
Renders Element .
abstract Task Render(FootnoteReference Element)
Renders Element .
abstract Task Render(LeftAligned Element)
Renders Element .
abstract Task Render(MarginAligned Element)
Renders Element .
abstract Task Render(InlineScript Element)
Renders Element .
abstract Task Render(InlineHTML Element)
Renders Element .
override string ToString()
Returns the renderer output.
Definition: Renderer.cs:130
abstract Task Render(EmojiReference Element)
Renders Element .
abstract Task Render(Abbreviation Element)
Renders Element .
abstract Task Render(MetaReference Element)
Renders Element .
abstract Task Render(LineBreak Element)
Renders Element .
abstract Task Render(Sections Element)
Renders Element .
abstract Task Render(Emphasize Element)
Renders Element .
virtual void Dispose()
Disposes of the renderer.
Definition: Renderer.cs:66
abstract Task Render(DefinitionList Element)
Renders Element .
abstract Task Render(Link Element)
Renders Element .
abstract Task Render(Delete Element)
Renders Element .
abstract Task Render(TaskList Element)
Renders Element .
abstract Task Render(HtmlEntityUnicode Element)
Renders Element .
MarkdownDocument Document
Reference to Markdown document being processed.
Definition: Renderer.cs:24
abstract Task Render(TaskItem Element)
Renders Element .
abstract Task Render(Footnote Element)
Renders Element .
abstract Task Render(CenterAligned Element)
Renders Element .
abstract Task Render(RightAligned Element)
Renders Element .
Renderer()
Abstract base class for Markdown renderers.
Definition: Renderer.cs:29
abstract Task Render(CodeBlock Element)
Renders Element .
abstract Task Render(InlineCode Element)
Renders Element .
abstract Task Render(HashTag Element)
Renders Element .
abstract Task Render(SuperScript Element)
Renders Element .
abstract Task Render(LinkReference Element)
Renders Element .
abstract Task Render(AutomaticLinkUrl Element)
Renders Element .
abstract Task Render(Model.SpanElements.Multimedia Element)
Renders Element .
abstract Task Render(Strong Element)
Renders Element .
Node referencing a chunk in a ChunkedList<T>
Definition: ChunkNode.cs:11
ChunkNode< T > Next
Next chunk
Definition: ChunkNode.cs:26
int Pos
Index after the last element in chunk.
Definition: ChunkNode.cs:51
int Start
Index of first element in chunk.
Definition: ChunkNode.cs:46
A chunked list is a linked list of chunks of objects of type T .
Definition: ChunkedList.cs:54
ChunkNode< T > FirstChunk
First chunk
Definition: ChunkedList.cs:259
Interface for Markdown renderers.
Definition: IRenderer.cs:12