BaconographyWP8.Converters.SnuDomFullUIVisitor.BuildChildUIList C# (CSharp) Method

BuildChildUIList() private method

private BuildChildUIList ( IEnumerable objects ) : IEnumerable
objects IEnumerable
return IEnumerable
        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;
        }