/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("Hyperlink"); Output.WriteAttributeString("NavigateUri", "mailto:" + this.eMail); Output.WriteValue(this.eMail); Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("Hyperlink"); Output.WriteAttributeString("NavigateUri", Document.CheckURL(this.url, null)); Output.WriteValue(this.url); Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("TextWrapping", "Wrap"); Output.WriteAttributeString("Margin", Settings.ParagraphMargins); if (TextAlignment != TextAlignment.Left) { Output.WriteAttributeString("TextAlignment", TextAlignment.ToString()); } if (this.level > 0 && this.level <= Settings.HeaderFontSize.Length) { Output.WriteAttributeString("FontSize", Settings.HeaderFontSize[this.level - 1].ToString()); Output.WriteAttributeString("Foreground", Settings.HeaderForegroundColor[this.level - 1].ToString()); } foreach (MarkdownElement E in this.Children) { E.GenerateXAML(Output, TextAlignment); } Output.WriteEndElement(); }
/// <summary> /// Represents one item in a chat output. /// </summary> /// <param name="Type">Type of chat record.</param> /// <param name="Message">Message</param> /// <param name="Markdown">Markdown, if available, or null if plain text.</param> /// <param name="FormattedMessage">Formatted message.</param> /// <param name="Data">Optional binary data.</param> /// <param name="ForegroundColor">Foreground Color</param> /// <param name="BackgroundColor">Background Color</param> public ChatItem(ChatItemType Type, string Message, MarkdownDocument Markdown, Color ForegroundColor, Color BackgroundColor) : base(ForegroundColor, BackgroundColor) { this.type = Type; this.timestamp = this.lastUpdated = DateTime.Now; this.message = Message; if (Markdown == null) { XamlSettings Settings = new XamlSettings(); this.formattedMessage = new TextBlock() { TextWrapping = TextWrapping.Wrap, Margin = new Thickness(Settings.ParagraphMarginLeft, Settings.ParagraphMarginTop, Settings.ParagraphMarginRight, Settings.ParagraphMarginBottom), Text = Message }; if (this.formattedMessage is DependencyObject Root) { this.AddEventHandlers(Root); } this.lastIsTable = false; } else { this.ParseMarkdown(Markdown); foreach (MarkdownElement E in Markdown) { this.lastIsTable = (E is Waher.Content.Markdown.Model.BlockElements.Table); } } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { foreach (MarkdownElement E in this.Children) { E.GenerateXAML(Output, Settings, TextAlignment); } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { string s; Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("TextWrapping", "Wrap"); Output.WriteAttributeString("Margin", Settings.ParagraphMargins); if (TextAlignment != TextAlignment.Left) { Output.WriteAttributeString("TextAlignment", TextAlignment.ToString()); } foreach (MarkdownElement E in this.Children) { if ((!E.InlineSpanElement || E.OutsideParagraph) && (s = E.BaselineAlignment) != "Baseline") { Output.WriteStartElement("InlineUIContainer"); Output.WriteAttributeString("BaselineAlignment", s); E.GenerateXAML(Output, Settings, TextAlignment); Output.WriteEndElement(); } else { E.GenerateXAML(Output, Settings, TextAlignment); } } Output.WriteEndElement(); }
private void ParseMarkdown(MarkdownDocument Markdown) { try { if (Markdown != null) { XamlSettings Settings = new XamlSettings() { TableCellRowBackgroundColor1 = "#20404040", TableCellRowBackgroundColor2 = "#10808080" }; string XAML = Markdown.GenerateXAML(Settings); this.formattedMessage = XamlReader.Parse(XAML); if (this.formattedMessage is DependencyObject Root) { this.AddEventHandlers(Root); } } else { this.formattedMessage = Message; } } catch (Exception) { this.formattedMessage = Message; } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> /// <param name="Items">Multimedia items.</param> /// <param name="ChildNodes">Child nodes.</param> /// <param name="AloneInParagraph">If the element is alone in a paragraph.</param> /// <param name="Document">Markdown document containing element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment, MultimediaItem[] Items, IEnumerable <MarkdownElement> ChildNodes, bool AloneInParagraph, MarkdownDocument Document) { Variables Variables = Document.Settings.Variables; if (Variables != null) { Variables.Push(); } try { foreach (MultimediaItem Item in Items) { MarkdownDocument Markdown = this.GetMarkdown(Item, Document.URL); Markdown.GenerateXAML(Output, Settings, true); } } finally { if (Variables != null) { Variables.Pop(); } } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> /// <param name="Items">Multimedia items.</param> /// <param name="ChildNodes">Child nodes.</param> /// <param name="AloneInParagraph">If the element is alone in a paragraph.</param> /// <param name="Document">Markdown document containing element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment, MultimediaItem[] Items, IEnumerable <MarkdownElement> ChildNodes, bool AloneInParagraph, MarkdownDocument Document) { foreach (MultimediaItem Item in Items) { Output.WriteStartElement("MediaElement"); Output.WriteAttributeString("Source", Document.CheckURL(Item.Url, Document.URL)); if (Item.Width.HasValue) { Output.WriteAttributeString("Width", Item.Width.Value.ToString()); } if (Item.Height.HasValue) { Output.WriteAttributeString("Height", Item.Height.Value.ToString()); } if (!string.IsNullOrEmpty(Item.Title)) { Output.WriteAttributeString("ToolTip", Item.Title); } Output.WriteEndElement(); break; } }
/// <summary> /// Generates Xamarin.Forms XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXamarinForms(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; Output.WriteStartElement("ContentView"); Output.WriteAttributeString("Padding", Settings.BlockQuoteMargin.ToString() + "," + Settings.ParagraphMarginTop.ToString() + ",0," + Settings.ParagraphMarginBottom.ToString()); Output.WriteStartElement("Frame"); Output.WriteAttributeString("Padding", Settings.BlockQuotePadding.ToString() + ",0," + Settings.BlockQuotePadding.ToString() + ",0"); Output.WriteAttributeString("BorderColor", Settings.InsertedBlockQuoteBorderColor); // TODO: Border thickness Output.WriteStartElement("StackLayout"); Output.WriteAttributeString("Orientation", "Vertical"); foreach (MarkdownElement E in this.Children) { E.GenerateXamarinForms(Output, TextAlignment); } Output.WriteEndElement(); Output.WriteEndElement(); Output.WriteEndElement(); }
/// <summary> /// Generates Xamarin.Forms XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXamarinForms(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; int TopMargin = Settings.ParagraphMarginTop; foreach (MarkdownElement Term in this.Children) { Paragraph.GenerateXamarinFormsContentView(Output, TextAlignment, Settings.ParagraphMarginLeft.ToString() + "," + TopMargin.ToString() + "," + Settings.ParagraphMarginRight.ToString() + ",0"); Output.WriteStartElement("Label"); Output.WriteAttributeString("LineBreakMode", "WordWrap"); Output.WriteAttributeString("TextType", "Html"); Output.WriteAttributeString("FontAttributes", "Bold"); StringBuilder Html = new StringBuilder(); Term.GenerateHTML(Html); Output.WriteCData(Html.ToString()); Output.WriteEndElement(); Output.WriteEndElement(); TopMargin = 0; } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, TextAlignment TextAlignment) { if (this.Document.TryGetFootnoteNumber(this.key, out int Nr)) { XamlSettings Settings = this.Document.Settings.XamlSettings; string s; Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("Text", Nr.ToString()); Output.WriteStartElement("TextBlock.LayoutTransform"); Output.WriteStartElement("TransformGroup"); Output.WriteStartElement("ScaleTransform"); Output.WriteAttributeString("ScaleX", s = CommonTypes.Encode(Settings.SuperscriptScale)); Output.WriteAttributeString("ScaleY", s); Output.WriteEndElement(); Output.WriteStartElement("TranslateTransform"); Output.WriteAttributeString("Y", Settings.SuperscriptOffset.ToString()); Output.WriteEndElement(); Output.WriteEndElement(); Output.WriteEndElement(); Output.WriteEndElement(); } }
/// <summary> /// Generates Xamarin.Forms XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXamarinForms(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; Paragraph.GenerateXamarinFormsContentView(Output, TextAlignment, Settings); Output.WriteStartElement("Label"); Output.WriteAttributeString("LineBreakMode", "WordWrap"); if (this.level > 0 && this.level <= Settings.HeaderFontSize.Length) { Output.WriteAttributeString("FontSize", Settings.HeaderFontSize[this.level - 1].ToString()); Output.WriteAttributeString("TextColor", Settings.HeaderForegroundColor[this.level - 1].ToString()); } Output.WriteAttributeString("TextType", "Html"); StringBuilder Html = new StringBuilder(); foreach (MarkdownElement E in this.Children) { E.GenerateHTML(Html); } Output.WriteCData(Html.ToString()); Output.WriteEndElement(); Output.WriteEndElement(); }
/// <summary> /// Generates WPF XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; MarkdownElement Last = null; foreach (MarkdownElement Description in this.Children) { Last = Description; } foreach (MarkdownElement Description in this.Children) { if (Description.InlineSpanElement && !Description.OutsideParagraph) { Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("TextWrapping", "Wrap"); } else { Output.WriteStartElement("StackPanel"); } Output.WriteAttributeString("Margin", Settings.DefinitionMargin.ToString() + ",0,0," + (Description == Last ? Settings.DefinitionSeparator : 0).ToString()); Description.GenerateXAML(Output, TextAlignment); Output.WriteEndElement(); } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { bool FirstOnRow = true; if (this.Document.TryGetMetaData(this.key, out KeyValuePair <string, bool>[] Values)) { foreach (KeyValuePair <string, bool> P in Values) { if (FirstOnRow) { FirstOnRow = false; } else { Output.WriteValue(' '); } Output.WriteValue(P.Key); if (P.Value) { Output.WriteElementString("LineBreak", string.Empty); FirstOnRow = true; } } } }
/// <summary> /// Generates Xamarin.Forms XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXamarinForms(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; if (this.handler != null && this.handler.HandlesXAML) { try { if (this.handler.GenerateXamarinForms(Output, TextAlignment, this.rows, this.language, this.indent, this.Document)) { return; } } catch (Exception ex) { ex = Log.UnnestException(ex); if (ex is AggregateException ex2) { foreach (Exception ex3 in ex2.InnerExceptions) { Paragraph.GenerateXamarinFormsContentView(Output, TextAlignment, Settings); Output.WriteStartElement("Label"); Output.WriteAttributeString("LineBreakMode", "WordWrap"); Output.WriteAttributeString("TextColor", "Red"); Output.WriteValue(ex3.Message); Output.WriteEndElement(); Output.WriteEndElement(); } } else { Paragraph.GenerateXamarinFormsContentView(Output, TextAlignment, Settings); Output.WriteStartElement("Label"); Output.WriteAttributeString("LineBreakMode", "WordWrap"); Output.WriteAttributeString("TextColor", "Red"); Output.WriteValue(ex.Message); Output.WriteEndElement(); Output.WriteEndElement(); } } } Paragraph.GenerateXamarinFormsContentView(Output, TextAlignment, Settings); Output.WriteStartElement("StackLayout"); Output.WriteAttributeString("Orientation", "Vertical"); foreach (string Row in this.rows) { Output.WriteStartElement("Label"); Output.WriteAttributeString("LineBreakMode", "NoWrap"); Output.WriteAttributeString("FontFamily", "Courier New"); Output.WriteAttributeString("Text", Row); Output.WriteEndElement(); } Output.WriteEndElement(); Output.WriteEndElement(); }
/// <summary> /// Generates WPF XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; NumberedItem Item; int Expected = 0; int Row = 0; bool ParagraphBullet; Output.WriteStartElement("Grid"); Output.WriteAttributeString("Margin", Settings.ParagraphMargins); Output.WriteStartElement("Grid.ColumnDefinitions"); Output.WriteStartElement("ColumnDefinition"); Output.WriteAttributeString("Width", "Auto"); Output.WriteEndElement(); Output.WriteStartElement("ColumnDefinition"); Output.WriteAttributeString("Width", "*"); Output.WriteEndElement(); Output.WriteEndElement(); Output.WriteStartElement("Grid.RowDefinitions"); foreach (MarkdownElement _ in this.Children) { Output.WriteStartElement("RowDefinition"); Output.WriteAttributeString("Height", "Auto"); Output.WriteEndElement(); } Output.WriteEndElement(); foreach (MarkdownElement E in this.Children) { Expected++; Item = E as NumberedItem; ParagraphBullet = !E.InlineSpanElement || E.OutsideParagraph; E.GetMargins(out int TopMargin, out int BottomMargin); Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("TextWrapping", "Wrap"); Output.WriteAttributeString("Grid.Column", "0"); Output.WriteAttributeString("Grid.Row", Row.ToString()); if (TextAlignment != TextAlignment.Left) { Output.WriteAttributeString("TextAlignment", TextAlignment.ToString()); } Output.WriteAttributeString("Margin", "0," + TopMargin.ToString() + "," + Settings.ListContentMargin.ToString() + "," + BottomMargin.ToString()); if (!(Item is null)) { Output.WriteValue((Expected = Item.Number).ToString()); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Multimedia Multimedia = this.Document.GetReference(this.Label); if (Multimedia != null) { Multimedia.MultimediaHandler.GenerateXAML(Output, Settings, TextAlignment, Multimedia.Items, this.Children, this.aloneInParagraph, this.Document); } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("Italic"); foreach (MarkdownElement E in this.Children) { E.GenerateXAML(Output, Settings, TextAlignment); } Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { if (this.Document.Detail != null) { this.Document.Detail.GenerateXAML(Output, Settings, false); } else { base.GenerateXAML(Output, Settings, TextAlignment); } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("Run"); Output.WriteAttributeString("Typography.Variants", "Superscript"); foreach (MarkdownElement E in this.Children) { E.GenerateXAML(Output, Settings, TextAlignment); } Output.WriteEndElement(); }
/// <summary> /// Gets margins for content. /// </summary> /// <param name="Settings">XAML settings.</param> /// <param name="TopMargin">Top margin.</param> /// <param name="BottomMargin">Bottom margin.</param> internal virtual void GetMargins(XamlSettings Settings, out int TopMargin, out int BottomMargin) { if (this.InlineSpanElement && !this.OutsideParagraph) { TopMargin = 0; BottomMargin = 0; } else { TopMargin = Settings.ParagraphMarginTop; BottomMargin = Settings.ParagraphMarginBottom; } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { string s = Html.HtmlEntity.EntityToCharacter(this.entity); if (s is null) { Output.WriteRaw("&" + this.entity + ";"); } else { Output.WriteValue(s); } }
/// <summary> /// Generates Xamarin.Forms XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXamarinForms(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; int Column; int Row, NrRows; int RowNr = 0; Output.WriteStartElement("ContentView"); Output.WriteAttributeString("Padding", Settings.ParagraphMargins); Output.WriteStartElement("Grid"); Output.WriteAttributeString("RowSpacing", "-2"); Output.WriteAttributeString("ColumnSpacing", "-2"); // TODO: Tooltip/caption Output.WriteStartElement("Grid.ColumnDefinitions"); for (Column = 0; Column < this.columns; Column++) { Output.WriteStartElement("ColumnDefinition"); Output.WriteAttributeString("Width", "Auto"); Output.WriteEndElement(); } Output.WriteEndElement(); Output.WriteStartElement("Grid.RowDefinitions"); for (Row = 0, NrRows = this.rows.Length + this.headers.Length; Row < NrRows; Row++) { Output.WriteStartElement("RowDefinition"); Output.WriteAttributeString("Height", "Auto"); Output.WriteEndElement(); } Output.WriteEndElement(); for (Row = 0, NrRows = this.headers.Length; Row < NrRows; Row++, RowNr++) { this.GenerateXamarinForms(Output, this.headers[Row], RowNr, true); } for (Row = 0, NrRows = this.rows.Length; Row < NrRows; Row++, RowNr++) { this.GenerateXamarinForms(Output, this.rows[Row], RowNr, false); } Output.WriteEndElement(); Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> /// <param name="Rows">Code rows.</param> /// <param name="Language">Language used.</param> /// <param name="Indent">Additional indenting.</param> /// <param name="Document">Markdown document containing element.</param> public void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment, string[] Rows, string Language, int Indent, MarkdownDocument Document) { string FileName = this.GetFileName(Language, Rows, out string Title); Output.WriteStartElement("Image"); Output.WriteAttributeString("Source", FileName); if (!string.IsNullOrEmpty(Title)) { Output.WriteAttributeString("ToolTip", Title); } Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("xml", "space", null, "preserve"); Output.WriteAttributeString("TextWrapping", "Wrap"); Output.WriteAttributeString("FontFamily", "Courier New"); if (TextAlignment != TextAlignment.Left) { Output.WriteAttributeString("TextAlignment", TextAlignment.ToString()); } Output.WriteValue(this.code); Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> /// <param name="Items">Multimedia items.</param> /// <param name="ChildNodes">Child nodes.</param> /// <param name="AloneInParagraph">If the element is alone in a paragraph.</param> /// <param name="Document">Markdown document containing element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment, MultimediaItem[] Items, IEnumerable <MarkdownElement> ChildNodes, bool AloneInParagraph, MarkdownDocument Document) { string Source; int i; int? Width; int? Height; foreach (MultimediaItem Item in Items) { Width = Item.Width; Height = Item.Height; if ((Source = Item.Url).StartsWith("data:", StringComparison.CurrentCultureIgnoreCase) && (i = Item.Url.IndexOf("base64,")) > 0) { byte[] Data = Convert.FromBase64String(Item.Url.Substring(i + 7)); using (SKBitmap Bitmap = SKBitmap.Decode(Data)) { Width = Bitmap.Width; Height = Bitmap.Height; } Source = GetTemporaryFile(Data); } Output.WriteStartElement("Image"); Output.WriteAttributeString("Source", Document.CheckURL(Source, null)); if (Width.HasValue) { Output.WriteAttributeString("Width", Width.Value.ToString()); } if (Height.HasValue) { Output.WriteAttributeString("Height", Height.Value.ToString()); } if (!string.IsNullOrEmpty(Item.Title)) { Output.WriteAttributeString("ToolTip", Item.Title); } Output.WriteEndElement(); break; } }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { this.Document.EmojiSource.GetImageSource(this.emoji, this.level, out string Url, out int Width, out int Height); Output.WriteStartElement("Image"); Output.WriteAttributeString("Source", Url); Output.WriteAttributeString("Width", Width.ToString()); Output.WriteAttributeString("Height", Height.ToString()); if (!string.IsNullOrEmpty(Emoji.Description)) { Output.WriteAttributeString("ToolTip", Emoji.Description); } Output.WriteEndElement(); }
/// <summary> /// Generates WPF XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, TextAlignment TextAlignment) { XamlSettings Settings = this.Document.Settings.XamlSettings; int Column; int Row, NrRows; int RowNr = 0; Output.WriteStartElement("Grid"); Output.WriteAttributeString("Margin", Settings.ParagraphMargins); if (!string.IsNullOrEmpty(this.caption)) { Output.WriteAttributeString("ToolTip", this.caption); } Output.WriteStartElement("Grid.ColumnDefinitions"); for (Column = 0; Column < this.columns; Column++) { Output.WriteStartElement("ColumnDefinition"); Output.WriteAttributeString("Width", "Auto"); Output.WriteEndElement(); } Output.WriteEndElement(); Output.WriteStartElement("Grid.RowDefinitions"); for (Row = 0, NrRows = this.rows.Length + this.headers.Length; Row < NrRows; Row++) { Output.WriteStartElement("RowDefinition"); Output.WriteAttributeString("Height", "Auto"); Output.WriteEndElement(); } Output.WriteEndElement(); for (Row = 0, NrRows = this.headers.Length; Row < NrRows; Row++, RowNr++) { this.GenerateXAML(Output, this.headers[Row], RowNr, true); } for (Row = 0, NrRows = this.rows.Length; Row < NrRows; Row++, RowNr++) { this.GenerateXAML(Output, this.rows[Row], RowNr, false); } Output.WriteEndElement(); }
/// <summary> /// Generates XAML for the markdown element. /// </summary> /// <param name="Output">XAML will be output here.</param> /// <param name="Settings">XAML settings.</param> /// <param name="TextAlignment">Alignment of text in element.</param> public override void GenerateXAML(XmlWriter Output, XamlSettings Settings, TextAlignment TextAlignment) { Output.WriteStartElement("TextBlock"); Output.WriteAttributeString("TextWrapping", "Wrap"); Output.WriteAttributeString("Margin", Settings.ParagraphMargins); if (TextAlignment != TextAlignment.Left) { Output.WriteAttributeString("TextAlignment", TextAlignment.ToString()); } foreach (MarkdownElement E in this.Children) { E.GenerateXAML(Output, Settings, TextAlignment); } Output.WriteEndElement(); }