Ejemplo n.º 1
0
 /// <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();
 }
Ejemplo n.º 2
0
 /// <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();
 }
Ejemplo n.º 3
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)
        {
            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();
        }
Ejemplo n.º 4
0
        /// <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);
                }
            }
        }
Ejemplo n.º 5
0
 /// <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);
     }
 }
Ejemplo n.º 6
0
        /// <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();
        }
Ejemplo n.º 7
0
        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;
            }
        }
Ejemplo n.º 8
0
        /// <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();
                }
            }
        }
Ejemplo n.º 9
0
        /// <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;
            }
        }
Ejemplo n.º 10
0
        /// <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();
        }
Ejemplo n.º 11
0
        /// <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;
            }
        }
Ejemplo n.º 12
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();
            }
        }
Ejemplo n.º 13
0
        /// <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();
        }
Ejemplo n.º 14
0
        /// <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();
            }
        }
Ejemplo n.º 15
0
        /// <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;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        /// <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();
        }
Ejemplo n.º 17
0
        /// <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());
                }
Ejemplo n.º 18
0
        /// <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);
            }
        }
Ejemplo n.º 19
0
        /// <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();
        }
Ejemplo n.º 20
0
 /// <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);
     }
 }
Ejemplo n.º 21
0
        /// <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();
        }
Ejemplo n.º 22
0
 /// <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;
     }
 }
Ejemplo n.º 23
0
        /// <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);
            }
        }
Ejemplo n.º 24
0
        /// <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();
        }
Ejemplo n.º 25
0
        /// <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();
        }
Ejemplo n.º 26
0
        /// <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();
        }
Ejemplo n.º 27
0
        /// <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;
            }
        }
Ejemplo n.º 28
0
        /// <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();
        }
Ejemplo n.º 29
0
        /// <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();
        }
Ejemplo n.º 30
0
        /// <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();
        }