private Inline Fill(CommonMark.Syntax.Inline firstChild) { var span = new Span(); while (firstChild != null) { span.Inlines.Add(Convert(firstChild)); firstChild = firstChild.NextSibling; } return(span); }
private Inline Convert(CommonMark.Syntax.Inline inline) { switch (inline.Tag) { case InlineTag.String: return(new Run(inline.LiteralContent)); case InlineTag.SoftBreak: return(new LineBreak()); case InlineTag.LineBreak: return(new LineBreak()); case InlineTag.Code: case InlineTag.RawHtml: return(new Run(inline.LiteralContent) { FontFamily = new FontFamily("GlobalMonospace.CompositeFont") }); case InlineTag.Emphasis: return(new Italic(Fill(inline.FirstChild))); case InlineTag.Strong: return(new Bold(Fill(inline.FirstChild))); case InlineTag.Link: var link = new Hyperlink(Fill(inline.FirstChild)) { NavigateUri = new Uri(inline.TargetUrl), ToolTip = string.IsNullOrWhiteSpace(inline.LiteralContent) ? null : inline.LiteralContent }; link.RequestNavigate += NavigateToUri; return(link); case InlineTag.Image: return(new InlineUIContainer(new Image { Source = (ImageSource) new ImageSourceConverter().ConvertFrom(null, CultureInfo.InvariantCulture, inline.TargetUrl), ToolTip = string.IsNullOrWhiteSpace(inline.LiteralContent) ? null : inline.LiteralContent })); case InlineTag.Strikethrough: return(new Span(Fill(inline.FirstChild)) { TextDecorations = TextDecorations.Strikethrough }); case InlineTag.Placeholder: return(new Run(inline.LiteralContent)); } throw new NotImplementedException(); }