2using System.Collections.Generic;
4using System.Threading.Tasks;
39 this.
Output.AppendLine(
new string(
'-', 80));
49 if (this.
Document?.TryGetFootnoteNumber(Key, out
int Nr) ??
false)
50 this.
Output.Append(Nr.ToString());
56 await Note.Render(
this);
80 return Task.CompletedTask;
91 return Task.CompletedTask;
123 return Task.CompletedTask;
142 Footnote.Referenced =
true;
146 if ((this.
Document?.TryGetFootnoteNumber(Element.
Key, out
int Nr) ??
false))
147 this.
Output.Append(Nr.ToString());
153 return Task.CompletedTask;
164 return Task.CompletedTask;
173 string s = Html.HtmlEntity.EntityToCharacter(Element.
Entity);
174 if (!
string.IsNullOrEmpty(s))
177 return Task.CompletedTask;
188 return Task.CompletedTask;
199 return Task.CompletedTask;
208 return Task.CompletedTask;
229 return Task.CompletedTask;
231 this.
Output.Append(Result.ToString());
233 if (AloneInParagraph)
239 return Task.CompletedTask;
250 return Task.CompletedTask;
270 return Task.CompletedTask;
297 bool FirstOnRow =
true;
299 if (Element.
TryGetMetaData(out KeyValuePair<string, bool>[] Values))
301 foreach (KeyValuePair<string, bool> P
in Values)
308 this.
Output.Append(P.Key);
317 return Task.CompletedTask;
324 public override Task
Render(Model.SpanElements.Multimedia Element)
328 return this.DefaultRenderingMultimedia(Element.Children, Element.AloneInParagraph);
330 return Renderer.RenderText(
this, Element.Items, Element.Children, Element.AloneInParagraph, Element.Document);
338 private async Task DefaultRenderingMultimedia(IEnumerable<MarkdownElement> ChildNodes,
339 bool AloneInParagraph)
344 if (AloneInParagraph)
403 i = nrmScriptLetters.IndexOf(ch);
407 this.
Output.Append(subScriptLetters[i]);
412 private const string nrmScriptLetters =
"0123456789+-=()aeoxhklmnpstijruv";
413 private const string subScriptLetters =
"₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓₕₖₗₘₙₚₛₜᵢⱼᵣᵤᵥ";
422 StringBuilder sb =
new StringBuilder();
425 foreach (
char ch
in s)
427 i = nrmScriptLetters.IndexOf(ch);
431 sb.Append(subScriptLetters[i]);
434 return sb.ToString();
451 i = normlScriptLetters.IndexOf(ch);
455 this.
Output.Append(superScriptLetters[i]);
460 private const string normlScriptLetters =
"abcdefghijklmnoprstuvwxyzABDEGHIJKLMNOPRTUW0123456789+-=()";
461 private const string superScriptLetters =
"ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁᵂ⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾";
470 StringBuilder sb =
new StringBuilder();
473 foreach (
char ch
in s)
475 i = normlScriptLetters.IndexOf(ch);
479 sb.Append(superScriptLetters[i]);
482 return sb.ToString();
496 #region Block elements
509 s = s.Replace(
"\r\n",
"\n").Replace(
"\r",
"\n");
511 foreach (
string Row
in s.Split(
'\n'))
514 this.
Output.AppendLine(Row);
530 string s2 = Environment.NewLine + Environment.NewLine;
531 bool LastIsParagraph =
false;
533 s = this.
Output.ToString();
534 if (!s.EndsWith(Environment.NewLine) && !
string.IsNullOrEmpty(s))
545 LastIsParagraph = s.EndsWith(s2);
548 if (!LastIsParagraph)
581 if (ex is AggregateException ex2)
583 foreach (Exception ex3
in ex2.InnerExceptions)
584 this.
Output.AppendLine(ex3.Message);
587 this.
Output.AppendLine(ex.Message);
594 for (i = Element.
Start; i <= Element.
End; i++)
610 return Task.CompletedTask;
621 this.
Output.Append(
":\t");
636 string s2 = Environment.NewLine + Environment.NewLine;
637 bool LastIsParagraph =
false;
638 bool FirstTerm =
true;
640 s = this.
Output.ToString();
641 if (!s.EndsWith(Environment.NewLine) && !
string.IsNullOrEmpty(s))
659 LastIsParagraph = s.EndsWith(s2);
662 if (!LastIsParagraph)
684 if (!s.EndsWith(Environment.NewLine))
702 s = s.Replace(
"\r\n",
"\n").Replace(
"\r",
"\n");
704 foreach (
string Row
in s.Split(
'\n'))
706 this.
Output.Append(
"-> ");
707 this.
Output.AppendLine(Row);
729 if (Element.
Level <= 2)
731 int Len = this.
Output.Length;
735 Len = this.Output.Length - Len + 3;
737 this.
Output.AppendLine(
new string(Element.
Level == 1 ?
'=' :
'-', Len));
742 this.
Output.Append(
new string(
'#', Element.
Level));
758 this.
Output.AppendLine(
new string(
'-', 80));
761 return Task.CompletedTask;
781 if (!
string.IsNullOrEmpty(s))
790 if (s.EndsWith(
"\n"))
812 s = s.Replace(
"\r\n",
"\n").Replace(
"\r",
"\n");
814 foreach (
string Row
in s.Split(
'\n'))
816 this.
Output.Append(
"+> ");
817 this.
Output.AppendLine(Row);
830 return Task.CompletedTask;
877 if (!s.EndsWith(
"\n"))
891 string s2 = Environment.NewLine + Environment.NewLine;
892 bool LastIsParagraph =
false;
894 s = this.
Output.ToString();
895 if (!s.EndsWith(Environment.NewLine) && !
string.IsNullOrEmpty(s))
905 LastIsParagraph = s.EndsWith(s2);
908 if (!LastIsParagraph)
949 this.
Output.AppendLine(
new string(
'=', 80));
952 return Task.CompletedTask;
1000 this.
Output.AppendLine();
1003 this.
Output.AppendLine();
1013 this.
Output.Append(
"[X] ");
1015 this.
Output.Append(
"[ ] ");
1025 if (!s.EndsWith(
"\n"))
1026 this.
Output.AppendLine();
1039 string s2 = Environment.NewLine + Environment.NewLine;
1040 bool LastIsParagraph =
false;
1042 s = this.
Output.ToString();
1043 if (!s.EndsWith(Environment.NewLine) && !
string.IsNullOrEmpty(s))
1044 this.
Output.AppendLine();
1053 LastIsParagraph = s.EndsWith(s2);
1056 if (!LastIsParagraph)
1057 this.
Output.AppendLine();
1078 if (!s.EndsWith(
"\n"))
1079 this.
Output.AppendLine();
IEnumerable< string > FootnoteOrder
Order of footnotes.
MarkdownDocument Detail
Detail document of a master document.
Multimedia GetReference(string Label)
Gets the multimedia information referenced by a label.
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.
string IndentString
String used for indentation.
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.
int Number
Number associated with item.
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.
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.
string Prefix
Prefix, in plain text mode.
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.
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.
async Task< object > EvaluateExpression()
Evaluates the script expression.
string Value
Unformatted text.
bool TryGetMetaData(out KeyValuePair< string, bool >[] Values)
Tries to get meta-data from the document.
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 .
void Clear()
Clears the underlying StringBuilder.
virtual async Task RenderDocument(MarkdownDocument Document, bool Inclusion)
Renders a document.
override string ToString()
Returns the renderer output.
MarkdownDocument Document
Reference to Markdown document being processed.
Renders plain text from a Markdown document.
override Task Render(Strong Element)
Renders Element .
override async Task Render(DefinitionTerms Element)
Renders Element .
override Task Render(InvisibleBreak Element)
Renders Element .
override Task Render(HtmlEntityUnicode Element)
Renders Element .
override Task Render(HorizontalRule Element)
Renders Element .
override async Task Render(TaskItem Element)
Renders Element .
Task RenderObject(object Result, bool AloneInParagraph)
Generates plain text from Script output.
override Task Render(InlineText Element)
Renders Element .
override Task Render(MultimediaReference Element)
Renders Element .
override Task Render(MetaReference Element)
Renders Element .
override Task Render(Model.SpanElements.Multimedia Element)
Renders Element .
override async Task RenderFootnotes()
Renders footnotes.
override Task Render(FootnoteReference Element)
Renders Element .
override Task Render(AutomaticLinkUrl Element)
Renders Element .
override async Task Render(TaskList Element)
Renders Element .
override Task Render(SectionSeparator Element)
Renders Element .
override async Task Render(DefinitionDescriptions Element)
Renders Element .
override async Task Render(DeleteBlocks Element)
Renders Element .
override Task Render(HashTag Element)
Renders Element .
override Task Render(HtmlEntity Element)
Renders Element .
static string ToSubscript(string s)
Converts a string to subscript (as far as it goes).
override async Task Render(Table Element)
Renders Element .
override Task Render(MarginAligned Element)
Renders Element .
override async Task Render(Header Element)
Renders Element .
override Task Render(RightAligned Element)
Renders Element .
override Task Render(Delete Element)
Renders Element .
override async Task Render(BlockQuote Element)
Renders Element .
override Task Render(EmojiReference Element)
Renders Element .
override Task Render(Sections Element)
Renders Element .
override Task Render(Abbreviation Element)
Renders Element .
override async Task Render(NumberedItem Element)
Renders Element .
override async Task Render(DefinitionList Element)
Renders Element .
override Task Render(CommentBlock Element)
Renders Element .
override Task Render(Insert Element)
Renders Element .
static string ToSuperscript(string s)
Converts a string to superscript (as far as it goes).
override async Task Render(HtmlBlock Element)
Renders Element .
override async Task Render(NumberedList Element)
Renders Element .
override Task Render(Footnote Element)
Renders Element .
override Task Render(InlineCode Element)
Renders Element .
override async Task Render(CodeBlock Element)
Renders Element .
override async Task Render(SuperScript Element)
Renders Element .
override Task Render(InlineHTML Element)
Renders Element .
override async Task Render(InsertBlocks Element)
Renders Element .
override async Task Render(SubScript Element)
Renders Element .
override Task Render(StrikeThrough Element)
Renders Element .
TextRenderer(StringBuilder Output)
Renders plain text from a Markdown document.
override Task Render(Underline Element)
Renders Element .
override async Task Render(Paragraph Element)
Renders Element .
TextRenderer()
Renders plain text from a Markdown document.
override async Task Render(BulletList Element)
Renders Element .
override Task Render(AutomaticLinkMail Element)
Renders Element .
override Task Render(LinkReference Element)
Renders Element .
override Task Render(LeftAligned Element)
Renders Element .
override Task Render(Emphasize Element)
Renders Element .
override async Task Render(UnnumberedItem Element)
Renders Element .
override Task Render(NestedBlock Element)
Renders Element .
override Task Render(DetailsReference Element)
Renders Element .
override async Task Render(InlineScript Element)
Renders Element .
override Task Render(Link Element)
Renders Element .
override Task Render(LineBreak Element)
Renders Element .
override Task Render(CenterAligned Element)
Renders Element .
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.
Interface for code content plain text renderers.
Interface for multimedia content plain text renderers.