5using System.Threading.Tasks;
76 this.XmlOutput = XmlWriter.Create(this.
Output, XmlSettings);
89 this.XmlOutput = XmlWriter.Create(this.Output, XmlSettings);
97 this.XmlOutput.Dispose();
109 return base.RenderDocument(
Document, Inclusion);
117 this.XmlOutput.WriteStartElement(
"StackPanel",
"http://schemas.microsoft.com/winfx/2006/xaml/presentation");
118 this.XmlOutput.WriteAttributeString(
"xmlns",
"x",
null,
"http://schemas.microsoft.com/winfx/2006/xaml");
120 return Task.CompletedTask;
129 string FootnoteMargin =
"0," + this.XamlSettings.ParagraphMarginTop.
ToString() +
"," +
130 this.XamlSettings.FootnoteSeparator.ToString() +
"," +
131 this.XamlSettings.ParagraphMarginBottom.ToString();
133 string Offset = this.XamlSettings.SuperscriptOffset.ToString();
137 this.XmlOutput.WriteElementString(
"Separator",
string.Empty);
139 this.XmlOutput.WriteStartElement(
"Grid");
140 this.XmlOutput.WriteStartElement(
"Grid.ColumnDefinitions");
142 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
143 this.XmlOutput.WriteAttributeString(
"Width",
"Auto");
144 this.XmlOutput.WriteEndElement();
146 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
147 this.XmlOutput.WriteAttributeString(
"Width",
"*");
148 this.XmlOutput.WriteEndElement();
150 this.XmlOutput.WriteEndElement();
151 this.XmlOutput.WriteStartElement(
"Grid.RowDefinitions");
155 if ((this.
Document?.TryGetFootnoteNumber(Key, out Nr) ??
false) &&
159 this.XmlOutput.WriteStartElement(
"RowDefinition");
160 this.XmlOutput.WriteAttributeString(
"Height",
"Auto");
161 this.XmlOutput.WriteEndElement();
165 this.XmlOutput.WriteEndElement();
169 if ((this.
Document?.TryGetFootnoteNumber(Key, out Nr) ??
false) &&
173 this.XmlOutput.WriteStartElement(
"TextBlock");
174 this.XmlOutput.WriteAttributeString(
"Text", Nr.ToString());
175 this.XmlOutput.WriteAttributeString(
"Margin", FootnoteMargin);
176 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"0");
177 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
179 this.XmlOutput.WriteStartElement(
"TextBlock.LayoutTransform");
180 this.XmlOutput.WriteStartElement(
"TransformGroup");
182 this.XmlOutput.WriteStartElement(
"ScaleTransform");
183 this.XmlOutput.WriteAttributeString(
"ScaleX", Scale);
184 this.XmlOutput.WriteAttributeString(
"ScaleY", Scale);
185 this.XmlOutput.WriteEndElement();
187 this.XmlOutput.WriteStartElement(
"TranslateTransform");
188 this.XmlOutput.WriteAttributeString(
"Y", Offset);
189 this.XmlOutput.WriteEndElement();
191 this.XmlOutput.WriteEndElement();
192 this.XmlOutput.WriteEndElement();
193 this.XmlOutput.WriteEndElement();
197 this.XmlOutput.WriteStartElement(
"TextBlock");
198 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
201 this.XmlOutput.WriteStartElement(
"StackPanel");
203 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"1");
204 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
210 this.Alignment = Bak;
212 this.XmlOutput.WriteEndElement();
218 this.XmlOutput.WriteEndElement();
226 this.XmlOutput.WriteEndElement();
227 this.XmlOutput.Flush();
229 return Task.CompletedTask;
232 #region Span Elements
249 this.XmlOutput.WriteStartElement(
"Hyperlink");
250 this.XmlOutput.WriteAttributeString(
"NavigateUri",
"mailto:" + Element.
EMail);
251 this.XmlOutput.WriteValue(Element.
EMail);
252 this.XmlOutput.WriteEndElement();
254 return Task.CompletedTask;
263 this.XmlOutput.WriteStartElement(
"Hyperlink");
264 this.XmlOutput.WriteAttributeString(
"NavigateUri", this.
Document.
CheckURL(Element.
URL,
null));
265 this.XmlOutput.WriteValue(Element.
URL);
266 this.XmlOutput.WriteEndElement();
268 return Task.CompletedTask;
277 this.XmlOutput.WriteStartElement(
"TextBlock");
278 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
281 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
283 this.XmlOutput.WriteStartElement(
"TextBlock.TextDecorations");
284 this.XmlOutput.WriteStartElement(
"TextDecoration");
285 this.XmlOutput.WriteAttributeString(
"Location",
"Strikethrough");
286 this.XmlOutput.WriteEndElement();
287 this.XmlOutput.WriteEndElement();
291 this.XmlOutput.WriteEndElement();
314 if (EmojiSource is
null)
316 this.XmlOutput.WriteValue(Element.
Delimiter);
318 this.XmlOutput.WriteValue(Element.
Delimiter);
335 this.XmlOutput.WriteStartElement(
"Italic");
337 this.XmlOutput.WriteEndElement();
350 await this.
Render(Footnote);
351 else if (this.
Document?.TryGetFootnoteNumber(Element.
Key, out
int Nr) ??
false)
355 this.XmlOutput.WriteStartElement(
"TextBlock");
356 this.XmlOutput.WriteAttributeString(
"Text", Nr.ToString());
358 this.XmlOutput.WriteStartElement(
"TextBlock.LayoutTransform");
359 this.XmlOutput.WriteStartElement(
"TransformGroup");
361 this.XmlOutput.WriteStartElement(
"ScaleTransform");
362 this.XmlOutput.WriteAttributeString(
"ScaleX", s =
CommonTypes.
Encode(
this.XamlSettings.SuperscriptScale));
363 this.XmlOutput.WriteAttributeString(
"ScaleY", s);
364 this.XmlOutput.WriteEndElement();
366 this.XmlOutput.WriteStartElement(
"TranslateTransform");
367 this.XmlOutput.WriteAttributeString(
"Y", this.XamlSettings.SuperscriptOffset.ToString());
368 this.XmlOutput.WriteEndElement();
370 this.XmlOutput.WriteEndElement();
371 this.XmlOutput.WriteEndElement();
372 this.XmlOutput.WriteEndElement();
375 Footnote.Referenced =
true;
385 this.XmlOutput.WriteValue(Element.
Tag);
387 return Task.CompletedTask;
396 string s = Html.HtmlEntity.EntityToCharacter(Element.
Entity);
398 this.XmlOutput.WriteRaw(
"&" + Element.
Entity +
";");
400 this.XmlOutput.WriteValue(s);
402 return Task.CompletedTask;
411 this.XmlOutput.WriteValue(
new string((
char)Element.
Code, 1));
413 return Task.CompletedTask;
422 this.XmlOutput.WriteStartElement(
"TextBlock");
423 this.XmlOutput.WriteAttributeString(
"xml",
"space",
null,
"preserve");
424 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
425 this.XmlOutput.WriteAttributeString(
"FontFamily",
"Courier New");
428 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
430 if (!
string.IsNullOrEmpty(this.XamlSettings.CodeBlockBackgroundColor))
431 this.XmlOutput.WriteAttributeString(
"Background", this.XamlSettings.CodeBlockBackgroundColor);
433 this.XmlOutput.WriteValue(Element.
Code);
435 this.XmlOutput.WriteEndElement();
437 return Task.CompletedTask;
446 this.XmlOutput.WriteComment(Element.
HTML);
448 return Task.CompletedTask;
474 if (Result is XmlDocument Xml)
479 if (Result is
Graph G)
484 s =
"data:image/png;base64," + Convert.ToBase64String(Bin, 0, Bin.Length);
489 Width = Pixels.
Width,
490 Height = Pixels.Height
493 else if (Result is SKImage Img)
495 using (SKData Data = Img.Encode(SKEncodedImageFormat.Png, 100))
497 byte[] Bin = Data.ToArray();
499 s =
"data:image/png;base64," + Convert.ToBase64String(Bin, 0, Bin.Length);
512 Doc.ProcessAsyncTasks();
518 Doc.ProcessAsyncTasks();
520 else if (Result is Exception ex)
524 if (ex is AggregateException ex2)
526 foreach (Exception ex3
in ex2.InnerExceptions)
528 this.XmlOutput.WriteStartElement(
"TextBlock");
529 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
530 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
533 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
535 this.XmlOutput.WriteAttributeString(
"Foreground",
"Red");
536 this.XmlOutput.WriteValue(ex3.Message);
537 this.XmlOutput.WriteEndElement();
542 if (AloneInParagraph)
544 this.XmlOutput.WriteStartElement(
"TextBlock");
545 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
546 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
548 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
551 this.XmlOutput.WriteStartElement(
"Run");
553 this.XmlOutput.WriteAttributeString(
"Foreground",
"Red");
554 this.XmlOutput.WriteValue(ex.Message);
555 this.XmlOutput.WriteEndElement();
560 if (AloneInParagraph)
562 this.XmlOutput.WriteStartElement(
"TextBlock");
563 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
564 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
566 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
569 this.XmlOutput.WriteValue(Result.ToString());
571 if (AloneInParagraph)
572 this.XmlOutput.WriteEndElement();
582 this.XmlOutput.WriteValue(Element.
Value);
584 return Task.CompletedTask;
593 this.XmlOutput.WriteStartElement(
"Underline");
595 this.XmlOutput.WriteEndElement();
604 this.XmlOutput.WriteElementString(
"LineBreak",
string.Empty);
606 return Task.CompletedTask;
627 this.XmlOutput.WriteStartElement(
"Hyperlink");
628 this.XmlOutput.WriteAttributeString(
"NavigateUri",
Document.
CheckURL(Url,
null));
630 if (!
string.IsNullOrEmpty(Title))
631 this.XmlOutput.WriteAttributeString(
"ToolTip", Title);
633 await this.
Render(ChildNodes);
635 this.XmlOutput.WriteEndElement();
658 bool FirstOnRow =
true;
660 if (Element.
TryGetMetaData(out KeyValuePair<string, bool>[] Values))
662 foreach (KeyValuePair<string, bool> P
in Values)
667 this.XmlOutput.WriteValue(
' ');
669 this.XmlOutput.WriteValue(P.Key);
672 this.XmlOutput.WriteElementString(
"LineBreak",
string.Empty);
678 return Task.CompletedTask;
685 public override Task
Render(Model.SpanElements.Multimedia Element)
691 return Renderer.RenderWpfXaml(
this, Element.Items, Element.Children, Element.AloneInParagraph, Element.Document);
718 this.XmlOutput.WriteStartElement(
"TextBlock");
719 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
721 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
723 this.XmlOutput.WriteStartElement(
"TextBlock.TextDecorations");
724 this.XmlOutput.WriteStartElement(
"TextDecoration");
725 this.XmlOutput.WriteAttributeString(
"Location",
"Strikethrough");
726 this.XmlOutput.WriteEndElement();
727 this.XmlOutput.WriteEndElement();
731 this.XmlOutput.WriteEndElement();
740 this.XmlOutput.WriteStartElement(
"Bold");
742 this.XmlOutput.WriteEndElement();
751 this.XmlOutput.WriteStartElement(
"Run");
752 this.XmlOutput.WriteAttributeString(
"Typography.Variants",
"Subscript");
756 this.XmlOutput.WriteEndElement();
765 this.XmlOutput.WriteStartElement(
"Run");
766 this.XmlOutput.WriteAttributeString(
"Typography.Variants",
"Superscript");
770 this.XmlOutput.WriteEndElement();
779 this.XmlOutput.WriteStartElement(
"Underline");
781 this.XmlOutput.WriteEndElement();
786 #region Block elements
794 this.XmlOutput.WriteStartElement(
"Border");
795 this.XmlOutput.WriteAttributeString(
"BorderThickness", this.XamlSettings.BlockQuoteBorderThickness.ToString() +
",0,0,0");
796 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.BlockQuoteMargin.ToString() +
"," +
797 this.XamlSettings.ParagraphMarginTop.ToString() +
",0," +
this.XamlSettings.ParagraphMarginBottom.ToString());
798 this.XmlOutput.WriteAttributeString(
"Padding", this.XamlSettings.BlockQuotePadding.ToString() +
",0,0,0");
799 this.XmlOutput.WriteAttributeString(
"BorderBrush", this.XamlSettings.BlockQuoteBorderColor);
800 this.XmlOutput.WriteStartElement(
"StackPanel");
804 this.XmlOutput.WriteEndElement();
805 this.XmlOutput.WriteEndElement();
815 bool ParagraphBullet;
818 this.XmlOutput.WriteStartElement(
"Grid");
819 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
820 this.XmlOutput.WriteStartElement(
"Grid.ColumnDefinitions");
822 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
823 this.XmlOutput.WriteAttributeString(
"Width",
"Auto");
824 this.XmlOutput.WriteEndElement();
826 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
827 this.XmlOutput.WriteAttributeString(
"Width",
"*");
828 this.XmlOutput.WriteEndElement();
830 this.XmlOutput.WriteEndElement();
831 this.XmlOutput.WriteStartElement(
"Grid.RowDefinitions");
835 this.XmlOutput.WriteStartElement(
"RowDefinition");
836 this.XmlOutput.WriteAttributeString(
"Height",
"Auto");
837 this.XmlOutput.WriteEndElement();
840 this.XmlOutput.WriteEndElement();
845 while (!(Loop is
null))
847 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
852 this.GetMargins(E, out
int TopMargin, out
int BottomMargin);
854 this.XmlOutput.WriteStartElement(
"TextBlock");
855 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
856 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"0");
857 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
859 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
861 this.XmlOutput.WriteAttributeString(
"Margin",
"0," + TopMargin.ToString() +
"," +
862 this.XamlSettings.ListContentMargin.ToString() +
"," + BottomMargin.ToString());
864 this.XmlOutput.WriteValue(
"•");
865 this.XmlOutput.WriteEndElement();
867 this.XmlOutput.WriteStartElement(
"StackPanel");
868 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"1");
869 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
875 this.XmlOutput.WriteStartElement(
"TextBlock");
876 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
878 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
882 this.XmlOutput.WriteEndElement();
885 this.XmlOutput.WriteEndElement();
893 this.XmlOutput.WriteEndElement();
902 private void GetMargins(
MarkdownElement Element, out
int TopMargin, out
int BottomMargin)
916 TopMargin = BottomMargin = 0;
918 while (!(Loop is
null))
920 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
927 this.GetMargins(E, out TopMargin, out BottomMargin);
930 this.GetMargins(E, out
int _, out BottomMargin);
937 this.GetMargins(SingleChild.Child, out TopMargin, out BottomMargin);
940 TopMargin = this.XamlSettings.ParagraphMarginTop;
941 BottomMargin = this.XamlSettings.ParagraphMarginBottom;
951 this.XmlOutput.WriteStartElement(
"StackPanel");
958 this.Alignment = Bak;
959 this.XmlOutput.WriteEndElement();
981 if (ex is AggregateException ex2)
983 foreach (Exception ex3
in ex2.InnerExceptions)
985 this.XmlOutput.WriteStartElement(
"TextBlock");
986 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
987 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
990 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
992 this.XmlOutput.WriteAttributeString(
"Foreground",
"Red");
993 this.XmlOutput.WriteValue(ex3.Message);
994 this.XmlOutput.WriteEndElement();
999 this.XmlOutput.WriteStartElement(
"TextBlock");
1000 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1001 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1003 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1005 this.XmlOutput.WriteAttributeString(
"Foreground",
"Red");
1006 this.XmlOutput.WriteValue(ex.Message);
1007 this.XmlOutput.WriteEndElement();
1015 this.XmlOutput.WriteStartElement(
"TextBlock");
1016 this.XmlOutput.WriteAttributeString(
"xml",
"space",
null,
"preserve");
1017 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"NoWrap");
1018 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1019 this.XmlOutput.WriteAttributeString(
"FontFamily",
"Courier New");
1022 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1024 if (!
string.IsNullOrEmpty(this.XamlSettings.CodeBlockBackgroundColor))
1025 this.XmlOutput.WriteAttributeString(
"Background",
this.XamlSettings.CodeBlockBackgroundColor);
1027 for (i = Element.
Start; i <= Element.
End; i++)
1032 this.XmlOutput.WriteElementString(
"LineBreak",
string.Empty);
1034 this.XmlOutput.WriteValue(Element.
Rows[i]);
1037 this.XmlOutput.WriteEndElement();
1046 return Task.CompletedTask;
1055 MarkdownElement Last = Element.Children.HasLastItem ? Element.Children.LastItem :
null;
1060 while (!(Loop is
null))
1062 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1068 this.XmlOutput.WriteStartElement(
"TextBlock");
1069 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1072 this.XmlOutput.WriteStartElement(
"StackPanel");
1074 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.DefinitionMargin.ToString() +
",0,0," +
1075 (E == Last ?
this.XamlSettings.DefinitionSeparator : 0).ToString());
1078 this.XmlOutput.WriteEndElement();
1100 int TopMargin = this.XamlSettings.ParagraphMarginTop;
1104 while (!(Loop is
null))
1106 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1108 this.XmlOutput.WriteStartElement(
"TextBlock");
1109 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1110 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMarginLeft.ToString() +
"," +
1111 TopMargin.ToString() +
"," +
this.XamlSettings.ParagraphMarginRight.ToString() +
",0");
1112 this.XmlOutput.WriteAttributeString(
"FontWeight",
"Bold");
1114 await Loop[i].Render(
this);
1116 this.XmlOutput.WriteEndElement();
1130 this.XmlOutput.WriteStartElement(
"Border");
1131 this.XmlOutput.WriteAttributeString(
"BorderThickness", this.XamlSettings.BlockQuoteBorderThickness.ToString() +
",0,0,0");
1132 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.BlockQuoteMargin.ToString() +
"," +
1133 this.XamlSettings.ParagraphMarginTop.ToString() +
",0," +
this.XamlSettings.ParagraphMarginBottom.ToString());
1134 this.XmlOutput.WriteAttributeString(
"Padding", this.XamlSettings.BlockQuotePadding.ToString() +
",0,0,0");
1135 this.XmlOutput.WriteAttributeString(
"BorderBrush", this.XamlSettings.DeletedBlockQuoteBorderColor);
1136 this.XmlOutput.WriteStartElement(
"StackPanel");
1140 this.XmlOutput.WriteEndElement();
1141 this.XmlOutput.WriteEndElement();
1159 this.XmlOutput.WriteStartElement(
"TextBlock");
1160 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1161 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1163 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1165 if (Element.
Level > 0 && Element.
Level <=
this.XamlSettings.HeaderFontSize.Length)
1167 this.XmlOutput.WriteAttributeString(
"FontSize", this.XamlSettings.HeaderFontSize[Element.
Level - 1].ToString());
1168 this.XmlOutput.WriteAttributeString(
"Foreground", this.XamlSettings.HeaderForegroundColor[Element.
Level - 1].ToString());
1173 this.XmlOutput.WriteEndElement();
1182 this.XmlOutput.WriteElementString(
"Separator",
string.Empty);
1184 return Task.CompletedTask;
1193 this.XmlOutput.WriteStartElement(
"TextBlock");
1194 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1195 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1197 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1201 this.XmlOutput.WriteEndElement();
1210 this.XmlOutput.WriteStartElement(
"Border");
1211 this.XmlOutput.WriteAttributeString(
"BorderThickness", this.XamlSettings.BlockQuoteBorderThickness.ToString() +
",0,0,0");
1212 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.BlockQuoteMargin.ToString() +
"," +
1213 this.XamlSettings.ParagraphMarginTop.ToString() +
",0," +
this.XamlSettings.ParagraphMarginBottom.ToString());
1214 this.XmlOutput.WriteAttributeString(
"Padding", this.XamlSettings.BlockQuotePadding.ToString() +
",0,0,0");
1215 this.XmlOutput.WriteAttributeString(
"BorderBrush", this.XamlSettings.InsertedBlockQuoteBorderColor);
1216 this.XmlOutput.WriteStartElement(
"StackPanel");
1220 this.XmlOutput.WriteEndElement();
1221 this.XmlOutput.WriteEndElement();
1230 return Task.CompletedTask;
1239 this.XmlOutput.WriteStartElement(
"StackPanel");
1246 this.Alignment = Bak;
1247 this.XmlOutput.WriteEndElement();
1256 this.XmlOutput.WriteStartElement(
"StackPanel");
1263 this.Alignment = Bak;
1264 this.XmlOutput.WriteEndElement();
1277 bool SpanOpen =
false;
1282 while (!(Loop is
null))
1284 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1292 this.XmlOutput.WriteStartElement(
"TextBlock");
1293 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1295 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1301 this.XmlOutput.WriteEndElement();
1312 this.XmlOutput.WriteEndElement();
1334 bool ParagraphBullet;
1337 this.XmlOutput.WriteStartElement(
"Grid");
1338 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1339 this.XmlOutput.WriteStartElement(
"Grid.ColumnDefinitions");
1341 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
1342 this.XmlOutput.WriteAttributeString(
"Width",
"Auto");
1343 this.XmlOutput.WriteEndElement();
1345 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
1346 this.XmlOutput.WriteAttributeString(
"Width",
"*");
1347 this.XmlOutput.WriteEndElement();
1349 this.XmlOutput.WriteEndElement();
1350 this.XmlOutput.WriteStartElement(
"Grid.RowDefinitions");
1354 this.XmlOutput.WriteStartElement(
"RowDefinition");
1355 this.XmlOutput.WriteAttributeString(
"Height",
"Auto");
1356 this.XmlOutput.WriteEndElement();
1359 this.XmlOutput.WriteEndElement();
1364 while (!(Loop is
null))
1366 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1373 this.GetMargins(E, out
int TopMargin, out
int BottomMargin);
1375 this.XmlOutput.WriteStartElement(
"TextBlock");
1376 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1377 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"0");
1378 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
1380 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1382 this.XmlOutput.WriteAttributeString(
"Margin",
"0," + TopMargin.ToString() +
"," +
1383 this.XamlSettings.ListContentMargin.ToString() +
"," + BottomMargin.ToString());
1385 if (!(Item is
null))
1386 this.XmlOutput.WriteValue((Expected = Item.
Number).ToString());
1388 this.XmlOutput.WriteValue(Expected.ToString());
1390 this.XmlOutput.WriteValue(
".");
1391 this.XmlOutput.WriteEndElement();
1393 this.XmlOutput.WriteStartElement(
"StackPanel");
1394 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"1");
1395 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
1397 if (ParagraphBullet)
1401 this.XmlOutput.WriteStartElement(
"TextBlock");
1402 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1404 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1408 this.XmlOutput.WriteEndElement();
1411 this.XmlOutput.WriteEndElement();
1419 this.XmlOutput.WriteEndElement();
1430 this.XmlOutput.WriteStartElement(
"TextBlock");
1431 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1432 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1434 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1440 while (!(Loop is
null))
1442 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1448 this.XmlOutput.WriteStartElement(
"InlineUIContainer");
1449 this.XmlOutput.WriteAttributeString(
"BaselineAlignment", s.ToString());
1453 this.XmlOutput.WriteEndElement();
1462 this.XmlOutput.WriteEndElement();
1471 this.XmlOutput.WriteStartElement(
"StackPanel");
1478 this.Alignment = Bak;
1479 this.XmlOutput.WriteEndElement();
1497 this.XmlOutput.WriteElementString(
"Separator",
string.Empty);
1499 return Task.CompletedTask;
1511 int NrColumns = Element.
Columns;
1513 this.XmlOutput.WriteStartElement(
"Grid");
1514 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1515 if (!
string.IsNullOrEmpty(Element.
Caption))
1516 this.XmlOutput.WriteAttributeString(
"ToolTip", Element.
Caption);
1518 this.XmlOutput.WriteStartElement(
"Grid.ColumnDefinitions");
1520 for (Column = 0; Column < NrColumns; Column++)
1522 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
1523 this.XmlOutput.WriteAttributeString(
"Width",
"Auto");
1524 this.XmlOutput.WriteEndElement();
1527 this.XmlOutput.WriteEndElement();
1528 this.XmlOutput.WriteStartElement(
"Grid.RowDefinitions");
1530 for (Row = 0, NrRows = Element.
Rows.Length + Element.
Headers.Length; Row < NrRows; Row++)
1532 this.XmlOutput.WriteStartElement(
"RowDefinition");
1533 this.XmlOutput.WriteAttributeString(
"Height",
"Auto");
1534 this.XmlOutput.WriteEndElement();
1537 this.XmlOutput.WriteEndElement();
1539 for (Row = 0, NrRows = Element.
Headers.Length; Row < NrRows; Row++, RowNr++)
1542 for (Row = 0, NrRows = Element.
Rows.Length; Row < NrRows; Row++, RowNr++)
1545 this.XmlOutput.WriteEndElement();
1552 int NrColumns = Element.
Columns;
1556 for (Column = 0; Column < NrColumns; Column++)
1558 E = CurrentRow[Column];
1562 this.Alignment = CellAlignments[Column] ?? Element.
ColumnAlignments[Column];
1563 ColSpan = Column + 1;
1564 while (ColSpan < NrColumns && CurrentRow[ColSpan] is
null)
1569 this.XmlOutput.WriteStartElement(
"Border");
1570 this.XmlOutput.WriteAttributeString(
"BorderBrush", this.XamlSettings.TableCellBorderColor);
1571 this.XmlOutput.WriteAttributeString(
"BorderThickness",
CommonTypes.
Encode(
this.XamlSettings.TableCellBorderThickness));
1573 if ((RowNr & 1) == 0)
1575 if (!
string.IsNullOrEmpty(this.XamlSettings.TableCellRowBackgroundColor1))
1576 this.XmlOutput.WriteAttributeString(
"Background", this.XamlSettings.TableCellRowBackgroundColor1);
1580 if (!
string.IsNullOrEmpty(this.XamlSettings.TableCellRowBackgroundColor2))
1581 this.XmlOutput.WriteAttributeString(
"Background", this.XamlSettings.TableCellRowBackgroundColor2);
1584 this.XmlOutput.WriteAttributeString(
"Grid.Column", Column.ToString());
1585 this.XmlOutput.WriteAttributeString(
"Grid.Row", RowNr.ToString());
1588 this.XmlOutput.WriteAttributeString(
"Grid.ColumnSpan", ColSpan.ToString());
1592 this.XmlOutput.WriteStartElement(
"TextBlock");
1593 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1594 this.XmlOutput.WriteAttributeString(
"Padding", this.XamlSettings.TableCellPadding);
1597 this.XmlOutput.WriteAttributeString(
"FontWeight",
"Bold");
1600 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1604 this.XmlOutput.WriteStartElement(
"StackPanel");
1605 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.TableCellPadding);
1609 this.XmlOutput.WriteEndElement();
1610 this.XmlOutput.WriteEndElement();
1613 this.Alignment = Bak;
1632 bool ParagraphBullet;
1635 this.XmlOutput.WriteStartElement(
"Grid");
1636 this.XmlOutput.WriteAttributeString(
"Margin", this.XamlSettings.ParagraphMargins);
1637 this.XmlOutput.WriteStartElement(
"Grid.ColumnDefinitions");
1639 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
1640 this.XmlOutput.WriteAttributeString(
"Width",
"Auto");
1641 this.XmlOutput.WriteEndElement();
1643 this.XmlOutput.WriteStartElement(
"ColumnDefinition");
1644 this.XmlOutput.WriteAttributeString(
"Width",
"*");
1645 this.XmlOutput.WriteEndElement();
1647 this.XmlOutput.WriteEndElement();
1648 this.XmlOutput.WriteStartElement(
"Grid.RowDefinitions");
1652 this.XmlOutput.WriteStartElement(
"RowDefinition");
1653 this.XmlOutput.WriteAttributeString(
"Height",
"Auto");
1654 this.XmlOutput.WriteEndElement();
1657 this.XmlOutput.WriteEndElement();
1662 while (!(Loop is
null))
1664 for (i = Loop.
Start, c = Loop.
Pos; i < c; i++)
1669 this.GetMargins(E, out
int TopMargin, out
int BottomMargin);
1673 this.XmlOutput.WriteStartElement(
"TextBlock");
1674 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1675 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"0");
1676 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
1678 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1680 this.XmlOutput.WriteAttributeString(
"Margin",
"0," + TopMargin.ToString() +
"," +
1681 this.XamlSettings.ListContentMargin.ToString() +
"," + BottomMargin.ToString());
1683 this.XmlOutput.WriteValue(
"✓");
1684 this.XmlOutput.WriteEndElement();
1687 this.XmlOutput.WriteStartElement(
"StackPanel");
1688 this.XmlOutput.WriteAttributeString(
"Grid.Column",
"1");
1689 this.XmlOutput.WriteAttributeString(
"Grid.Row", Row.ToString());
1691 if (ParagraphBullet)
1695 this.XmlOutput.WriteStartElement(
"TextBlock");
1696 this.XmlOutput.WriteAttributeString(
"TextWrapping",
"Wrap");
1698 this.XmlOutput.WriteAttributeString(
"TextAlignment", this.Alignment.ToString());
1702 this.XmlOutput.WriteEndElement();
1705 this.XmlOutput.WriteEndElement();
1713 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.
string ShortName
Emoji short name.
string Unicode
Unicode representation of emoji.
string Description
Short description of emoji.
Contains information about an emoji image.
int? Width
Width of image, if available.
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.
string CheckURL(string Url, string URL)
Checks the URL if it needs redirection to a proxy.
IEnumerable< string > FootnoteOrder
Order of footnotes.
IEmojiSource EmojiSource
Source for emojis in the document.
MarkdownDocument Detail
Detail document of a master document.
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.
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.
TextAlignment[] ColumnAlignments
Table column alignments.
string Caption
Table caption.
MarkdownElement[][] Headers
Headers in table.
int Columns
Number of columns.
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 ChunkedList< MarkdownElement > Children
Any children of the element.
bool HasOneChild
If the element has only one child.
MarkdownElement FirstChild
First child, or null if none.
Abstract base class for all markdown elements.
abstract Task Render(IRenderer Output)
Renders the element.
abstract bool InlineSpanElement
If the element is an inline span element.
virtual bool OutsideParagraph
If element, parsed as a span element, can stand outside of a paragraph if alone in it.
virtual ChunkedList< MarkdownElement > Children
Any children of the element.
MarkdownDocument Document
Markdown document.
virtual BaselineAlignment BaselineAlignment
Baseline alignment
Abstract base class for all markdown elements with one child element.
string Title
Optional title.
string Delimiter
Delimiter string used to identify emoji.
int Level
Level (number of colons used to define the emoji)
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.
string Title
Optional Link title.
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 .
Task RenderChildren(MarkdownElementChildren Element)
Renders the children of Element .
MarkdownDocument Document
Reference to Markdown document being processed.
Renders XAML (WPF flavour) from a Markdown document.
override async Task Render(HtmlBlock Element)
Renders Element .
async Task RenderObject(object Result, bool AloneInParagraph, Variables Variables)
Generates WPF XAML from Script output.
override Task Render(InvisibleBreak Element)
Renders Element .
override async Task Render(Insert Element)
Renders Element .
override Task Render(SectionSeparator Element)
Renders Element .
override async Task RenderFootnotes()
Renders footnotes.
TextAlignment Alignment
Current text-alignment.
override void Dispose()
Disposes of the renderer.
override Task Render(HorizontalRule Element)
Renders Element .
override async Task Render(BulletList Element)
Renders Element .
override async Task Render(DefinitionTerms Element)
Renders Element .
WpfXamlRenderer(XmlWriterSettings XmlSettings)
Renders XAML (WPF flavour) from a Markdown document.
override async Task Render(CodeBlock Element)
Renders Element .
override Task Render(Sections Element)
Renders Element .
override async Task Render(SuperScript Element)
Renders Element .
WpfXamlRenderer(XamlSettings XamlSettings)
Renders XAML (WPF flavour) from a Markdown document.
override async Task Render(Table Element)
Renders Element .
override Task RenderDocumentHeader()
Renders the document header.
override Task Render(Link Element)
Renders Element .
WpfXamlRenderer()
Renders XAML (WPF flavour) from a Markdown document.
override async Task Render(Underline Element)
Renders Element .
override async Task Render(RightAligned Element)
Renders Element .
override async Task Render(BlockQuote Element)
Renders Element .
readonly XmlWriter XmlOutput
XML output
override async Task Render(StrikeThrough Element)
Renders Element .
WpfXamlRenderer(StringBuilder Output, XmlWriterSettings XmlSettings, XamlSettings XamlSettings)
Renders XAML (WPF flavour) from a Markdown document.
override Task Render(Footnote Element)
Renders Element .
override async Task Render(FootnoteReference Element)
Renders Element .
override async Task Render(InlineScript Element)
Renders Element .
override async Task Render(DeleteBlocks Element)
Renders Element .
override Task Render(LinkReference Element)
Renders Element .
override Task Render(MultimediaReference Element)
Renders Element .
override Task Render(Abbreviation Element)
Renders Element .
override Task Render(UnnumberedItem Element)
Renders Element .
override Task Render(Model.SpanElements.Multimedia Element)
Renders Element .
override Task Render(HashTag Element)
Renders Element .
override async Task Render(NestedBlock Element)
Renders Element .
override async Task Render(SubScript Element)
Renders Element .
readonly XamlSettings XamlSettings
XAML settings.
override async Task Render(CenterAligned Element)
Renders Element .
override Task Render(TaskItem Element)
Renders Element .
override Task Render(NumberedItem Element)
Renders Element .
override async Task Render(TaskList Element)
Renders Element .
override Task Render(HtmlEntity Element)
Renders Element .
override Task Render(AutomaticLinkUrl Element)
Renders Element .
override Task Render(LineBreak Element)
Renders Element .
override async Task Render(Paragraph Element)
Renders Element .
override async Task Render(MarginAligned Element)
Renders Element .
override Task Render(MetaReference Element)
Renders Element .
override async Task Render(Emphasize Element)
Renders Element .
override Task RenderDocumentFooter()
Renders the document header.
override async Task Render(NumberedList Element)
Renders Element .
override Task Render(InlineCode Element)
Renders Element .
override async Task Render(InsertBlocks Element)
Renders Element .
override async Task Render(DefinitionDescriptions Element)
Renders Element .
override async Task Render(Delete Element)
Renders Element .
override Task Render(AutomaticLinkMail Element)
Renders Element .
override Task Render(InlineHTML Element)
Renders Element .
override Task Render(HtmlEntityUnicode Element)
Renders Element .
WpfXamlRenderer(XmlWriterSettings XmlSettings, XamlSettings XamlSettings)
Renders XAML (WPF flavour) from a Markdown document.
override Task Render(DefinitionList Element)
Renders Element .
override Task Render(InlineText Element)
Renders Element .
override async Task Render(LeftAligned Element)
Renders Element .
async Task Render(string Url, string Title, ChunkedList< MarkdownElement > ChildNodes, MarkdownDocument Document)
Generates XAML for a link.
override async Task Render(EmojiReference Element)
Renders Element .
override async Task Render(Strong Element)
Renders Element .
override async Task Render(Header Element)
Renders Element .
override Task Render(DetailsReference Element)
Renders Element .
override Task Render(CommentBlock Element)
Renders Element .
override Task RenderDocument(MarkdownDocument Document, bool Inclusion)
Renders a document.
Contains settings that the XAML export uses to customize XAML output.
Helps with common XML-related tasks.
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.
Node referencing a chunk in a ChunkedList<T>
ChunkNode< T > Next
Next chunk
int Pos
Index after the last element in chunk.
int Start
Index of first element in chunk.
A chunked list is a linked list of chunks of objects of type T .
ChunkNode< T > FirstChunk
First chunk
int Count
Number of elements in collection.
ToMatrix(ScriptNode Operand, bool NullCheck, int Start, int Length, Expression Expression)
To-Matrix operator.
Interface for Emoji sources. Emoji sources provide emojis to content providers.
Task< IImageSource > GetImageSource(EmojiInfo Emoji)
Gets the image source of an emoji.
bool EmojiSupported(EmojiInfo Emoji)
If the emoji is supported by the emoji source.
Contains information about an emoji image.
Interface for code content WPF XAML renderers.
Interface for multimedia content WPF XAML renderers.
Interface for objects that can be converted into matrices.
TextAlignment
Text alignment of contents.
BaselineAlignment
Where baselign of horizontally organized elements are rendered.