Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Renderer.cs
1using System.Collections.Generic;
2using System.Text;
3using System.Threading.Tasks;
7
9{
13 public abstract class Renderer : IRenderer
14 {
18 public readonly StringBuilder Output;
19
24
28 public Renderer()
29 : this(new StringBuilder())
30 {
31 }
32
37 public Renderer(StringBuilder Output)
38 {
39 this.Output = Output;
40 }
41
47 : this(new StringBuilder(), Document)
48 {
49 }
50
57 {
58 this.Output = Output;
59 this.Document = Document;
60 }
61
65 public virtual void Dispose()
66 {
67 // Do nothing by default.
68 }
69
75 public virtual async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
76 {
77 MarkdownDocument DocBak = this.Document;
78
79 this.Document = Document;
80
81 if (!Inclusion && this.Document.TryGetMetaData("BODYONLY", out KeyValuePair<string, bool>[] Values))
82 {
83 if (CommonTypes.TryParse(Values[0].Key, out bool b) && b)
84 Inclusion = true;
85 }
86
87 if (!Inclusion)
88 await this.RenderDocumentHeader();
89
90 foreach (MarkdownElement E in this.Document.Elements)
91 await E.Render(this);
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
147 public async Task RenderChildren(MarkdownElementChildren Element)
148 {
149 if (!(Element.Children is null))
150 {
151 foreach (MarkdownElement E in Element.Children)
152 await E.Render(this);
153 }
154 }
155
160 public async Task RenderChildren(MarkdownElement Element)
161 {
162 IEnumerable<MarkdownElement> Children = Element.Children;
163
164 if (!(Children is null))
165 {
166 foreach (MarkdownElement E in Children)
167 await E.Render(this);
168 }
169 }
170
176 {
177 if (Element.Child is null)
178 return Task.CompletedTask;
179 else
180 return Element.Child.Render(this);
181 }
182
183 #region Span Elements
184
189 public abstract Task Render(Abbreviation Element);
190
195 public abstract Task Render(AutomaticLinkMail Element);
196
201 public abstract Task Render(AutomaticLinkUrl Element);
202
207 public abstract Task Render(Delete Element);
208
213 public abstract Task Render(DetailsReference Element);
214
219 public abstract Task Render(EmojiReference Element);
220
225 public abstract Task Render(Emphasize Element);
226
231 public abstract Task Render(FootnoteReference Element);
232
237 public abstract Task Render(HashTag Element);
238
243 public abstract Task Render(HtmlEntity Element);
244
249 public abstract Task Render(HtmlEntityUnicode Element);
250
255 public abstract Task Render(InlineCode Element);
256
261 public abstract Task Render(InlineHTML Element);
262
267 public abstract Task Render(InlineScript Element);
268
273 public abstract Task Render(InlineText Element);
274
279 public abstract Task Render(Insert Element);
280
285 public abstract Task Render(LineBreak Element);
286
291 public abstract Task Render(Link Element);
292
297 public abstract Task Render(LinkReference Element);
298
303 public abstract Task Render(MetaReference Element);
304
309 public abstract Task Render(Model.SpanElements.Multimedia Element);
310
315 public abstract Task Render(MultimediaReference Element);
316
321 public abstract Task Render(StrikeThrough Element);
322
327 public abstract Task Render(Strong Element);
328
333 public abstract Task Render(SubScript Element);
334
339 public abstract Task Render(SuperScript Element);
340
345 public abstract Task Render(Underline Element);
346
347 #endregion
348
349 #region Block elements
350
355 public abstract Task Render(BlockQuote Element);
356
361 public abstract Task Render(BulletList Element);
362
367 public abstract Task Render(CenterAligned Element);
368
373 public abstract Task Render(CodeBlock Element);
374
379 public abstract Task Render(CommentBlock Element);
380
385 public abstract Task Render(DefinitionDescriptions Element);
386
391 public abstract Task Render(DefinitionList Element);
392
397 public abstract Task Render(DefinitionTerms Element);
398
403 public abstract Task Render(DeleteBlocks Element);
404
409 public abstract Task Render(Footnote Element);
410
415 public abstract Task Render(Header Element);
416
421 public abstract Task Render(HorizontalRule Element);
422
427 public abstract Task Render(HtmlBlock Element);
428
433 public abstract Task Render(InsertBlocks Element);
434
439 public abstract Task Render(InvisibleBreak Element);
440
445 public abstract Task Render(LeftAligned Element);
446
451 public abstract Task Render(MarginAligned Element);
452
457 public abstract Task Render(NestedBlock Element);
458
463 public abstract Task Render(NumberedItem Element);
464
469 public abstract Task Render(NumberedList Element);
470
475 public abstract Task Render(Paragraph Element);
476
481 public abstract Task Render(RightAligned Element);
482
487 public abstract Task Render(Sections Element);
488
493 public abstract Task Render(SectionSeparator Element);
494
499 public abstract Task Render(Table Element);
500
505 public abstract Task Render(TaskItem Element);
506
511 public abstract Task Render(TaskList Element);
512
517 public abstract Task Render(UnnumberedItem Element);
518
519 #endregion
520 }
521}
Helps with parsing of commong data types.
Definition: CommonTypes.cs:13
static bool TryParse(string s, out double Value)
Tries to decode a string encoded double.
Definition: CommonTypes.cs:46
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.
IEnumerable< 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: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
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 IEnumerable< MarkdownElement > Children
Any children of the element.
Abstract base class for all markdown elements.
abstract Task Render(IRenderer Output)
Renders the element.
virtual IEnumerable< 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:14
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
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:56
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:18
virtual Task RenderFootnotes()
Renders footnotes.
Definition: Renderer.cs:113
Task RenderChild(MarkdownElementSingleChild Element)
Renders the child of Element .
Definition: Renderer.cs:175
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 .
async Task RenderChildren(MarkdownElementChildren Element)
Renders the children of Element .
Definition: Renderer.cs:147
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:75
Renderer(MarkdownDocument Document)
Abstract base class for Markdown renderers.
Definition: Renderer.cs:46
abstract Task Render(NumberedItem Element)
Renders Element .
Renderer(StringBuilder Output)
Abstract base class for Markdown renderers.
Definition: Renderer.cs:37
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:65
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:23
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:28
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 .
Interface for Markdown renderers.
Definition: IRenderer.cs:12