unsafe public object Convert(object value, Type targetType, object parameter, string language) { if (value is MarkdownData) { var markdownData = value as MarkdownData; try { var categoryVisitor = new SnuDomCategoryVisitor(); ((IDomObject)markdownData.MarkdownDom).Accept(categoryVisitor); switch (categoryVisitor.Category) { case MarkdownCategory.PlainText: { var visitor = new SnuDomPlainTextVisitor(); ((IDomObject)markdownData.MarkdownDom).Accept(visitor); return MakePlain(visitor.Result); } case MarkdownCategory.Formatted: case MarkdownCategory.Full: { var visitor = new SnuDomFullUIVisitor(new SolidColorBrush(Colors.White)); ((IDomObject)markdownData.MarkdownDom).Accept(visitor); if (visitor.ResultGroup != null) return visitor.ResultGroup; else return visitor.Result; } default: return new TextBlock { Text = "" }; } } catch (Exception ex) { return MakePlain(ex.ToString()); } } else return new TextBlock { Text = "" }; }
unsafe public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is MarkdownData) { var markdownData = value as MarkdownData; try { var categoryVisitor = new SnuDomCategoryVisitor(); ((IDomObject)markdownData.MarkdownDom).Accept(categoryVisitor); switch (categoryVisitor.Category) { case MarkdownCategory.PlainText: { var visitor = new SnuDomPlainTextVisitor(); ((IDomObject)markdownData.MarkdownDom).Accept(visitor); return MakePlain(visitor.Result); } case MarkdownCategory.Formatted: case MarkdownCategory.Full: { var visitor = new SnuDomFullUIVisitor(Styles.Resources["PhoneForegroundBrush"] as Brush); ((IDomObject)markdownData.MarkdownDom).Accept(visitor); if (visitor.ResultGroup != null) return visitor.ResultGroup; else return visitor.Result; } default: return new TextBlock { Text = "" }; } } catch(Exception ex) { return MakePlain(ex.ToString()); } } else return new TextBlock { Text = "" }; }
private IEnumerable<UIElement> BuildChildUIList(IEnumerable<IDomObject> objects) { List<UIElement> results = new List<UIElement>(); foreach (var item in objects) { SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); item.Accept(categoryVisitor); var column = item as TableColumn; if (categoryVisitor.Category == MarkdownCategory.PlainText) { var plainTextVisitor = new SnuDomPlainTextVisitor(); //this might be a pp if (column != null) { foreach (var contents in column.Contents) { contents.Accept(plainTextVisitor); } } else if (item is SnuDom.Paragraph) { item.Accept(plainTextVisitor); } results.Add(new TextBlock { Text = plainTextVisitor.Result }); } else { var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); item.Accept(fullUIVisitor); results.Add(fullUIVisitor.Result); } if (column != null) { switch (column.Alignment) { case ColumnAlignment.Center: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Center); break; case ColumnAlignment.Left: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Left); break; case ColumnAlignment.Right: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Right); break; } } } return results; }
public void Visit(Quote code) { var inlineContainer = new InlineUIContainer(); SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); foreach (var item in code) { item.Accept(categoryVisitor); } if (categoryVisitor.Category == MarkdownCategory.PlainText && code.Count() == 1) { var plainTextVisitor = new SnuDomPlainTextVisitor(); foreach (var item in code) item.Accept(plainTextVisitor); inlineContainer.Child = new MarkdownQuote(plainTextVisitor.Result); } else { var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); //cant be null in this category foreach (var item in code) item.Accept(fullUIVisitor); inlineContainer.Child = new MarkdownQuote(fullUIVisitor.Result); } if (_currentParagraph == null) { MaybeSplitForParagraph(); } else { _currentParagraph.Inlines.Add(new Windows.UI.Xaml.Documents.LineBreak()); } _currentParagraph.Inlines.Add(inlineContainer); _currentParagraph.Inlines.Add(new Windows.UI.Xaml.Documents.LineBreak()); }
public void Visit(Code code) { var plainTextVisitor = new SnuDomPlainTextVisitor(); foreach (var item in code) item.Accept(plainTextVisitor); var madeRun = new Run { Text = plainTextVisitor.Result }; if (_currentParagraph == null || code.IsBlock) { MaybeSplitForParagraph(); } _currentParagraph.Inlines.Add(madeRun); if (code.IsBlock) { _currentParagraph.Inlines.Add(new Windows.UI.Xaml.Documents.LineBreak()); } }
public void Visit(Link link) { var inlineContainer = new InlineUIContainer(); SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); if (link.Display != null) { foreach (var item in link.Display) { item.Accept(categoryVisitor); } } if (categoryVisitor.Category == MarkdownCategory.PlainText) { var plainTextVisitor = new SnuDomPlainTextVisitor(); if (link.Display != null) { foreach (var item in link.Display) item.Accept(plainTextVisitor); } else plainTextVisitor.Result = link.Url; inlineContainer.Child = new MarkdownLink(link.Url, plainTextVisitor.Result); } else { var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); //cant be null in this category foreach (var item in link.Display) item.Accept(fullUIVisitor); inlineContainer.Child = new MarkdownLink(link.Url, fullUIVisitor.Result); } _currentParagraph.Inlines.Add(inlineContainer); }
private IEnumerable<UIElement> BuildChildUIList(IEnumerable<IDomObject> objects) { List<UIElement> results = new List<UIElement>(); foreach (var item in objects) { SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); if (item is TableColumn) { foreach (var contents in ((TableColumn)item).Contents) { contents.Accept(categoryVisitor); } } else { item.Accept(categoryVisitor); } var column = item as TableColumn; IDomObject columnFirstContent = null; if (categoryVisitor.Category == MarkdownCategory.PlainText) { var plainTextVisitor = new SnuDomPlainTextVisitor(); //this might be a pp if (column != null) { foreach (var contents in column.Contents) { contents.Accept(plainTextVisitor); } } else if(item is SnuDomWP8.Paragraph) { item.Accept(plainTextVisitor); } results.Add(new TextBlock { TextWrapping = System.Windows.TextWrapping.Wrap, Text = plainTextVisitor.Result, Margin = new Thickness(4, 6, 4, 6) }); } else if (column != null && ((TableColumn)item).Contents.Count() == 1 && (columnFirstContent = ((TableColumn)item).Contents.FirstOrDefault()) != null && (columnFirstContent is Text)) { if (columnFirstContent is Link) { var plainTextVisitor = new SnuDomPlainTextVisitor(); var lnk = columnFirstContent as Link; var firstContent = lnk.Display.FirstOrDefault(); if(firstContent != null) firstContent.Accept(plainTextVisitor); results.Add(new MarkdownButton(lnk.Url, plainTextVisitor.Result)); } else { results.Add(new TextBlock { TextWrapping = System.Windows.TextWrapping.Wrap, Text = ((Text)columnFirstContent).Contents, Margin = new Thickness(4, 6, 4, 6) }); } } else { var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); if (column != null) { foreach (var contents in column.Contents) { contents.Accept(fullUIVisitor); } } else if (item is SnuDomWP8.Paragraph) { FlatenVisitParagraph(fullUIVisitor, item as SnuDomWP8.Paragraph); } if (fullUIVisitor.ResultGroup != null) results.Add(fullUIVisitor.ResultGroup); else results.Add(fullUIVisitor.Result); } if (column != null) { switch (column.Alignment) { case ColumnAlignment.Center: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Center); break; case ColumnAlignment.Left: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Left); break; case ColumnAlignment.Right: results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Right); break; } results.Last().SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top); } } return results; }
public void Visit(Quote code) { SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); UIElement result = null; foreach (var item in code) { item.Accept(categoryVisitor); } if (categoryVisitor.Category == MarkdownCategory.PlainText && code.Count() == 1) { var plainTextVisitor = new SnuDomPlainTextVisitor(); foreach (var item in code) item.Accept(plainTextVisitor); result = new MarkdownQuote(plainTextVisitor.Result); } else { var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); //cant be null in this category foreach (var item in code) item.Accept(fullUIVisitor); if (fullUIVisitor.ResultGroup != null) { result = new MarkdownQuote(fullUIVisitor.ResultGroup); } else { result = new MarkdownQuote(fullUIVisitor.Result); } } DirectlyPlaceUIContent(result); }
public void Visit(Link link) { if(link.Display.Count() == 0 && (link.Url.StartsWith("#") || link.Url.StartsWith("/#") || link.Url.StartsWith("//#") || (link.Url.StartsWith("/") && link.Url.Count(ch => ch == '/') == 1))) { return; } Inline inlineContainer = null; SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor(); if (link.Display != null) { foreach (var item in link.Display) { item.Accept(categoryVisitor); } } if (categoryVisitor.Category == MarkdownCategory.PlainText) { var plainTextVisitor = new SnuDomPlainTextVisitor(); if (link.Display != null && link.Display.FirstOrDefault() != null) { foreach (var item in link.Display) item.Accept(plainTextVisitor); } else plainTextVisitor.Result = link.Url; inlineContainer = new Hyperlink { Command = new RelayCommand<string>(UtilityCommandImpl.GotoLinkImpl), CommandParameter = link.Url }; ((Hyperlink)inlineContainer).Inlines.Add(plainTextVisitor.Result); //inlineContainer.Child = new MarkdownButton(link.Url, plainTextVisitor.Result); } else { inlineContainer = new Hyperlink { Command = new RelayCommand<string>(UtilityCommandImpl.GotoLinkImpl), CommandParameter = link.Url }; var text = link.Display.FirstOrDefault() as Text; if (text != null) { if (text.Italic) inlineContainer.FontStyle = FontStyles.Italic; if (text.Bold) inlineContainer.FontWeight = FontWeights.Bold; if (text.HeaderSize != 0) { switch (text.HeaderSize) { case 1: inlineContainer.FontSize = 24; break; case 2: inlineContainer.FontSize = 24; inlineContainer.FontWeight = FontWeights.Bold; inlineContainer.Foreground = _forgroundBrush; break; case 3: case 4: case 5: case 6: inlineContainer.FontSize = 28; inlineContainer.FontWeight = FontWeights.Bold; break; } } } else { inlineContainer = new System.Windows.Documents.InlineUIContainer(); var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush); //cant be null in this category foreach (var item in link.Display) item.Accept(fullUIVisitor); ((InlineUIContainer)inlineContainer).Child = new RichMarkdownButton(link.Url, fullUIVisitor.Result); } } if (_currentParagraph == null) { MaybeSplitForParagraph(); } _currentParagraph.Inlines.Add(inlineContainer); }