示例#1
0
        private Phrase Render(Markdig.Extensions.Tables.Table tableBlock)
        {
            int maxColumns = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                maxColumns = Math.Max(maxColumns, row.Count);
            }

            var table = new PdfPTable(maxColumns);

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                foreach (Markdig.Extensions.Tables.TableCell cell in row)
                {
                    var phrase = new Phrase();
                    foreach (var blockpar in cell)
                    {
                        var par         = blockpar as Markdig.Syntax.ParagraphBlock;
                        var blockPhrase = CreateFormatted(par.Inline, ParagraphFont, 0, new iTextSharp.text.Color(0));
                        phrase.Add(blockPhrase);
                    }
                    table.AddCell(phrase);
                }
            }

            var tablePhrase = new Phrase();

            tablePhrase.Add(table);
            return(tablePhrase);
        }
示例#2
0
        private string Render(Markdig.Extensions.Tables.Table tableBlock)
        {
            int maxColumns = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                maxColumns = Math.Max(maxColumns, row.Count);
            }

            var table = "";

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                foreach (Markdig.Extensions.Tables.TableCell cell in row)
                {
                    var phrase = "";
                    foreach (var blockpar in cell)
                    {
                        var par         = blockpar as Markdig.Syntax.ParagraphBlock;
                        var blockPhrase = CreateFormatted(par.Inline);
                        phrase += blockPhrase + " ";
                    }
                    table += phrase + " ";
                }
                table += "\n";
            }

            return(table);
        }
示例#3
0
        public static Dictionary <string, List <string> > ToTable(this Markdig.Extensions.Tables.Table tableBlock)
        {
            var table   = new Dictionary <string, List <string> >();
            var indexes = new Dictionary <int, string>();

            foreach (var blockrow in tableBlock)
            {
                var row      = blockrow as Markdig.Extensions.Tables.TableRow;
                int indexCol = 0;
                foreach (var blockcell in row)
                {
                    var cell = blockcell as Markdig.Extensions.Tables.TableCell;
                    foreach (var blockpar in cell)
                    {
                        var par  = blockpar as Markdig.Syntax.ParagraphBlock;
                        var name = par.ToMarkdownString().Trim();
                        if (row.IsHeader)
                        {
                            indexes[indexCol] = name;
                            table[name]       = new List <string>();
                        }
                        else
                        {
                            table[indexes[indexCol]].Add(name);
                        }
                    }
                    indexCol++;
                }
            }
            return(table);
        }
示例#4
0
        public static string ToMarkdownString(this Markdig.Extensions.Tables.Table tableBlock)
        {
            var ret = string.Empty;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                var line = "|";
                foreach (Markdig.Extensions.Tables.TableCell cell in row)
                {
                    foreach (Markdig.Syntax.ParagraphBlock block in cell)
                    {
                        line += block.ToMarkdownString().Replace("\n", "");
                    }
                    line += "|";
                }
                if (row.IsHeader)
                {
                    line += "\n|";
                    for (int i = 0; i < row.Count; i++)
                    {
                        line += "---|";
                    }
                }
                ret += line + "\n";
            }
            return(ret);
        }
示例#5
0
        public void ParseItemProperties(string source, Item item, Markdig.Extensions.Tables.Table table)
        {
            Markdig.Extensions.Tables.TableRow firstRow = table.FirstOrDefault() as Markdig.Extensions.Tables.TableRow;
            var matrix = new string[firstRow.Count, table.Count];
            int y      = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in table)
            {
                int x = 0;
                foreach (Markdig.Extensions.Tables.TableCell col in row)
                {
                    ParseItemProperties(source, item, col);
                    matrix[x, y] = col.ToMarkdownString();
                    x++;
                }
                y++;
            }
            //Debug.WriteLine(matrix);
        }
示例#6
0
        public void Export(string targetPath)
        {
            using (this.m_Document = WordprocessingDocument.CreateFromTemplate(this.TemplatePath))
            {
                var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().UseGridTables().UsePipeTables().Build();
                var markdown = Markdown.Parse(this.Source, pipeline);

                foreach (Block block in markdown)
                {
                    if (block is HeadingBlock)
                    {
                        HeadingBlock b = block as HeadingBlock;
                        string       s = "";
                        foreach (Inline run in b.Inline)
                        {
                            s += this.Source.Substring(run.Span.Start, run.Span.Length);
                        }

                        this.m_Document.MainDocumentPart.Document.Body.Append(this.MakeHeaderParagprah(s.ToString(), b.Level));
                    }

                    if (block is ParagraphBlock)
                    {
                        this.m_Document.MainDocumentPart.Document.Body.Append(this.ParseParagaph(block as ParagraphBlock));
                    }

                    if (block is ListBlock)
                    {
                        this.m_Document.MainDocumentPart.Document.Body.Append(this.ParseList(block as ListBlock));
                    }

                    if (block is Markdig.Extensions.Tables.Table)
                    {
                        //TODO Header row

                        Markdig.Extensions.Tables.Table b = block as Markdig.Extensions.Tables.Table;
                        Table table = this.MakeTable();

                        foreach (Block rowBlock in b)
                        {
                            Markdig.Extensions.Tables.TableRow mdRow = rowBlock as Markdig.Extensions.Tables.TableRow;
                            TableRow row = this.MakeTableRow();

                            foreach (Block cellBlock in mdRow)
                            {
                                Markdig.Extensions.Tables.TableCell mdCell = cellBlock as Markdig.Extensions.Tables.TableCell;
                                TableCell cell = this.MakTableCell();

                                foreach (Block content in mdCell)
                                {
                                    if (content is ParagraphBlock)
                                    {
                                        cell.Append(this.ParseParagaph(content as ParagraphBlock));
                                    }
                                }
                                if (mdCell.Count == 0)
                                {
                                    cell.Append(this.MakeParagraph());
                                }
                                row.Append(cell);
                            }
                            table.Append(row);
                        }

                        this.m_Document.MainDocumentPart.Document.Body.Append(table);
                    }

                    if (block is BlockQuote)
                    {
                    }

                    if (block is CodeBlock)
                    {
                    }
                }

                this.m_Document.PackageProperties.Creator     = this.DocumentInfo.First(di => di.Name == "Creator").Value;
                this.m_Document.PackageProperties.Category    = this.DocumentInfo.First(di => di.Name == "Category").Value;
                this.m_Document.PackageProperties.Description = this.DocumentInfo.First(di => di.Name == "Description").Value;
                this.m_Document.PackageProperties.Subject     = this.DocumentInfo.First(di => di.Name == "Subject").Value;
                this.m_Document.PackageProperties.Title       = this.DocumentInfo.First(di => di.Name == "Title").Value;

                //// Save changes to the main document part.
                this.m_Document.MainDocumentPart.Document.Save();

                var doc2 = this.m_Document.SaveAs(targetPath) as WordprocessingDocument;

                doc2.MainDocumentPart.DocumentSettingsPart.Settings.PrependChild <UpdateFieldsOnOpen>(new UpdateFieldsOnOpen()
                {
                    Val = new OnOffValue(true)
                });
                doc2.MainDocumentPart.DocumentSettingsPart.Settings.Save();

                this.m_Document.Close();
                doc2.Close();
            }
        }
示例#7
0
        private void Render(Markdig.Extensions.Tables.Table tableBlock)
        {
            var scroll = new ScrollView()
            {
                HorizontalScrollBarVisibility = ScrollBarVisibility.Default, Orientation = ScrollOrientation.Horizontal
            };
            var grid = new Grid()
            {
                HorizontalOptions = LayoutOptions.Start, Margin = 0, Padding = 1, BackgroundColor = Theme.TableHeader.BackgroundColor, RowSpacing = 1, ColumnSpacing = 1
            };

            int top        = 0;
            int maxColumns = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                int left = 0;
                foreach (Markdig.Extensions.Tables.TableCell cell in row)
                {
                    foreach (var blockpar in cell)
                    {
                        var par   = blockpar as Markdig.Syntax.ParagraphBlock;
                        var style = row.IsHeader ? Theme.TableHeader : Theme.Paragraph;
                        var frame = new Frame
                        {
                            BackgroundColor = style.BackgroundColor,
                            Margin          = 1,
                            Padding         = 5,
                        };
                        var label = new Label
                        {
                            FormattedText           = CreateFormatted(par.Inline, style.FontFamily, style.Attributes, style.ForegroundColor, style.BackgroundColor, style.FontSize),
                            HorizontalOptions       = LayoutOptions.CenterAndExpand,
                            BackgroundColor         = style.BackgroundColor,
                            VerticalTextAlignment   = TextAlignment.Center,
                            HorizontalTextAlignment = TextAlignment.Center,
                        };
                        frame.Content = label;
                        AttachLinks(label);
                        grid.Children.Add(frame, left, top);
                    }

                    left++;
                    maxColumns = Math.Max(maxColumns, left);
                }
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = GridLength.Auto
                });
                top++;
            }
            for (int i = 0; i < maxColumns; i++)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = GridLength.Auto
                });
            }
            double?gridHeight = null;

            grid.SizeChanged += (object sender, EventArgs e) =>
            {
                if (gridHeight == null)
                {
                    gridHeight = grid.HeightRequest = grid.Height;
                }
                else
                {
                    grid.HeightRequest = gridHeight.Value;
                }
            };

            //grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
            //grid.RowDefinitions.Add(new RowDefinition { Height= new GridLength(1, GridUnitType.Star) });
            stack.Children.Add(scroll);
            scroll.Content = grid;
            //grid.WidthRequest = 1000;
            scroll.ForceLayout();
            this.UpdateChildrenLayout();
        }
示例#8
0
        private void Render(Markdig.Extensions.Tables.Table tableBlock)
        {
            var scroll = new ScrollView()
            {
                HorizontalScrollBarVisibility = ScrollBarVisibility.Default, Orientation = ScrollOrientation.Horizontal
            };
            var grid = new Grid()
            {
                HorizontalOptions = LayoutOptions.Start, Margin = 0, Padding = 1, BackgroundColor = Theme.TableHeader.BackgroundColor, RowSpacing = 1, ColumnSpacing = 1
            };

            int maxColumns = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                maxColumns = Math.Max(maxColumns, row.Count);
                grid.RowDefinitions.Add(new RowDefinition {
                    Height = GridLength.Auto
                });
            }
            for (int i = 0; i < maxColumns; i++)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = GridLength.Auto
                });
            }



            int top = 0;

            foreach (Markdig.Extensions.Tables.TableRow row in tableBlock)
            {
                int left = 0;
                foreach (Markdig.Extensions.Tables.TableCell cell in row)
                {
                    foreach (var blockpar in cell)
                    {
                        var par   = blockpar as Markdig.Syntax.ParagraphBlock;
                        var style = row.IsHeader ? Theme.TableHeader : Theme.TableCell;
                        var frame = new Frame
                        {
                            BackgroundColor = style.BackgroundColor,
                            Margin          = 1,
                            Padding         = 5,
                        };
                        //var align = tableBlock.ColumnDefinitions[left].Alignment;
                        var layoutOptions = row.IsHeader ? LayoutOptions.CenterAndExpand : LayoutOptions.StartAndExpand;
                        var textAlignment = row.IsHeader ? TextAlignment.Center : TextAlignment.Start;
                        var label         = new Label
                        {
                            FormattedText           = CreateFormatted(par.Inline, style.FontFamily, style.Attributes, style.ForegroundColor, style.BackgroundColor, style.FontSize),
                            HorizontalOptions       = layoutOptions,
                            BackgroundColor         = style.BackgroundColor,
                            LineBreakMode           = LineBreakMode.WordWrap,
                            VerticalTextAlignment   = TextAlignment.Center,
                            HorizontalTextAlignment = textAlignment,
                        };
                        frame.Content = label;
                        AttachLinks(label);
                        grid.Children.Add(frame, left, top);
                    }

                    left++;
                }
                top++;
            }
            stack.Children.Add(scroll);
            scroll.Content = grid;
        }