コード例 #1
0
 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 = "" };
 }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }