protected override void Write(XamlMarkdownWriter renderer, LinkInline link)
        {
            var url = link.GetDynamicUrl != null?link.GetDynamicUrl() ?? link.Url : link.Url;

            if (link.IsImage)
            {
                if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
                {
                    url = "#";
                }

                renderer.WriteStartObject(typeof(Image));
                renderer.WriteResourceMember(null, MarkdownXamlStyle.Image);
                if (!String.IsNullOrEmpty(link.Title))
                {
                    renderer.WriteMember(ToolTipService.ToolTipProperty, link.Title);
                }
                renderer.WriteMember(Image.SourceProperty, new Uri(url, UriKind.RelativeOrAbsolute));
                renderer.WriteEndObject();
            }
            else
            {
                WriteStartHyperlink(renderer, url, link.Title);
                renderer.WriteItems(link);
                WriteEndHyperlink(renderer);
            }
        }         // proc Write
        protected override void Write(XamlMarkdownWriter renderer, CodeInline code)
        {
            renderer.WriteStartObject(typeof(Span));
            renderer.WriteResourceMember(null, MarkdownXamlStyle.Code);

            renderer.WriteStartItems(nameof(Span.Inlines), true);
            renderer.WriteText(code.Content);
            renderer.WriteEndItems();
            renderer.WriteEndObject();
        } // proc Write
        protected override void Write(XamlMarkdownWriter renderer, HtmlEntityInline obj)
        {
            var txt = obj.Transcoded.Text.Substring(obj.Transcoded.Start, obj.Transcoded.Length);

            using (var xaml = new XamlXmlReader(new StringReader(txt), new XamlXmlReaderSettings()
            {
            }))
            {
                while (xaml.Read())
                {
                    switch (xaml.NodeType)
                    {
                    case XamlNodeType.NamespaceDeclaration:
                        renderer.WriteNamespace(xaml.Namespace);
                        break;

                    case XamlNodeType.StartObject:
                        renderer.WriteStartObject(xaml.Type);
                        break;

                    case XamlNodeType.GetObject:
                        renderer.WriteGetObject();
                        break;

                    case XamlNodeType.EndObject:
                        renderer.WriteEndObject();
                        break;

                    case XamlNodeType.StartMember:
                        renderer.WriteStartMember(xaml.Member);
                        break;

                    case XamlNodeType.EndMember:
                        renderer.WriteEndMember();
                        break;

                    case XamlNodeType.Value:
                        if (xaml.Value is string text)
                        {
                            renderer.WriteValue(text);
                        }
                        else
                        {
                            renderer.WriteValue(xaml.Value.ToString());                                     // todo: use xaml to text converter
                        }
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                }
            }
        } // proc Write
        }         // proc WriteSpan

        protected override void Write(XamlMarkdownWriter renderer, EmphasisInline span)
        {
            if (WriteSpan(renderer, span))
            {
                renderer.WriteItems(span);
                renderer.WriteEndObject();
            }
            else
            {
                renderer.WriteChildren(span);
            }
        } // proc Write
예제 #5
0
        protected override void Write(XamlMarkdownWriter renderer, LinkInline link)
        {
            var url = link.GetDynamicUrl != null?link.GetDynamicUrl() ?? link.Url : link.Url;

            if (link.IsImage)
            {
                if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
                {
                    url = "#";
                }

                renderer.WriteStartObject(typeof(Image));
                renderer.WriteResourceMember(null, MarkdownXamlStyle.Image);
                if (!String.IsNullOrEmpty(link.Title))
                {
                    renderer.WriteMember(ToolTipService.ToolTipProperty, link.Title);
                }
                renderer.WriteMember(Image.SourceProperty, renderer.GetUri(new Uri(url, UriKind.RelativeOrAbsolute), false));

                var attr = link.TryGetAttributes();
                if (attr.TryGetPropertyInt32("width", out var width))
                {
                    renderer.WriteMember(FrameworkElement.WidthProperty, width);
                }
                if (attr.TryGetPropertyInt32("height", out var height))
                {
                    renderer.WriteMember(FrameworkElement.HeightProperty, height);
                }

                renderer.WriteEndObject();
            }
            else
            {
                WriteStartHyperlink(renderer, url, link.Title);
                renderer.WriteItems(link);
                WriteEndHyperlink(renderer);
            }
        }         // proc Write
 internal static void WriteEndHyperlink(XamlMarkdownWriter renderer)
 => renderer.WriteEndObject();
예제 #7
0
        protected override void Write(XamlMarkdownWriter renderer, MdTable table)
        {
            renderer.WriteStartObject(typeof(WpfTable));
            renderer.WriteResourceMember(null, MarkdownXamlStyle.Table);
            var t = new WpfTable();

            renderer.WriteStartItems(nameof(WpfTable.Columns));
            foreach (var col in table.ColumnDefinitions)
            {
                renderer.WriteStartObject(typeof(WpfTableColumn));
                renderer.WriteMember(nameof(WpfTableColumn.Width),
                                     (col?.Width ?? 0) != 0
                        ? new GridLength(col.Width, GridUnitType.Star)
                        : GridLength.Auto
                                     );
                renderer.WriteEndObject();
            }
            renderer.WriteEndItems();

            renderer.WriteStartItems(nameof(WpfTable.RowGroups));
            renderer.WriteStartObject(typeof(WpfTableRowGroup));
            renderer.WriteStartItems(nameof(WpfTableRowGroup.Rows));

            foreach (var c in table)
            {
                var row = (MdTableRow)c;
                renderer.WriteStartObject(typeof(WpfTableRow));
                if (row.IsHeader)
                {
                    renderer.WriteResourceMember(null, MarkdownXamlStyle.TableHeader);
                }
                renderer.WriteStartItems(nameof(WpfTableRow.Cells));

                for (var i = 0; i < row.Count; i++)
                {
                    var cell = (MdTableCell)row[i];
                    renderer.WriteStartObject(typeof(WpfTableCell));
                    renderer.WriteResourceMember(null, MarkdownXamlStyle.TableCell);

                    if (cell.ColumnSpan > 1)
                    {
                        renderer.WriteMember(nameof(WpfTableCell.ColumnSpan), cell.ColumnSpan);
                    }
                    if (cell.RowSpan > 1)
                    {
                        renderer.WriteMember(nameof(WpfTableCell.RowSpan), cell.RowSpan);
                    }

                    var columnIndex = cell.ColumnIndex < 0 || cell.ColumnIndex >= table.ColumnDefinitions.Count ? i : cell.ColumnIndex;
                    columnIndex = columnIndex >= table.ColumnDefinitions.Count ? table.ColumnDefinitions.Count - 1 : columnIndex;
                    var alignment = table.ColumnDefinitions[columnIndex].Alignment;
                    if (alignment.HasValue)
                    {
                        switch (alignment)
                        {
                        case TableColumnAlign.Center:
                            renderer.WriteMember(nameof(WpfTableCell.TextAlignment), TextAlignment.Center);
                            break;

                        case TableColumnAlign.Right:
                            renderer.WriteMember(nameof(WpfTableCell.TextAlignment), TextAlignment.Right);
                            break;

                        case TableColumnAlign.Left:
                            renderer.WriteMember(nameof(WpfTableCell.TextAlignment), TextAlignment.Left);
                            break;
                        }
                    }

                    renderer.WriteItems(cell);

                    renderer.WriteEndObject();
                }

                renderer.WriteEndItems();
                renderer.WriteEndObject();
            }

            renderer.WriteEndItems();
            renderer.WriteEndObject();
            renderer.WriteEndItems();

            renderer.WriteEndObject();
        } // proc Write