Example #1
0
        protected string DoGenerateMDRoots(string rootNodeName, XDocument doc, MarkdownGeneratorContext context)
        {
            var result = new StringBuilder();

            var children = doc.Descendants(ns + rootNodeName).FirstOrDefault();

            if (children != null && children.HasElements)
            {
                var rootElements = children
                                   .Elements()
                                   .ToList();
                foreach (var rootElement in rootElements)
                {
                    int level = 0;
                    GenerateChildObjectMD(rootElement, context, level, result);
                }

                if (context.HasPairedContent())
                {
                    result.Append(context.Get().Content);
                    context.Reset();
                }
            }

            return(result.ToString());
        }
Example #2
0
        protected MarkdownPage DoGenerateMD(string parentId, IWriter writer)
        {
            MarkdownPage markdownPage = new MarkdownPage();

            var scope = Microsoft.Office.Interop.OneNote.HierarchyScope.hsChildren;
            var doc   = parser.GetXDocument(parentId, scope);

            StringBuilder mdContent = new StringBuilder();

            // create context
            var quickStyles = GetQuickStyleDef(doc);
            var tags        = GetTagDef(doc);
            var context     = new MarkdownGeneratorContext(writer, parentId, quickStyles, tags);
            var pageTitle   = GetPageTitle(doc);

            context.SetPageTitle(pageTitle);

            var titleElement = GetTitleElement(doc);

            GenerateChildObjectMD(titleElement, context, 0, mdContent);


            var childenContent = DoGenerateMDRoots("OEChildren", doc, context);

            if (String.IsNullOrWhiteSpace(childenContent))
            {
                var directImageContent = DoGenerateMDRoots("Image", doc, context);
                if (!String.IsNullOrWhiteSpace(directImageContent))
                {
                    mdContent.Append(directImageContent);
                }
            }
            else
            {
                mdContent.Append(childenContent);
            }


            markdownPage.Content  = mdContent.ToString();
            markdownPage.Title    = context.GetPageTitle();
            markdownPage.Filename = context.GetPageFullPath();

            return(markdownPage);
        }
Example #3
0
        protected void GenerateChildObjectMD(
            XElement node, MarkdownGeneratorContext context, long level, StringBuilder results)
        {
            if (node != null)
            {
                string name         = NormalizeName(node.Name.ToString());
                bool   stdTraversal = true;


                StringBuilder content = new StringBuilder();
                switch (name)
                {
                case "OE":
                {
                    if (context.HasPairedContent())
                    {
                        content.Append(context.Get().Content);
                        context.Reset();
                    }

                    if (context.TableInfo.IsOnTable())
                    {
                    }
                    else
                    {
                        var quickStyleIndex = GetAttibuteValue(node, "quickStyleIndex");
                        if (!String.IsNullOrEmpty(quickStyleIndex))
                        {
                            var quickStyleDef = context.GetQuickStyleDef(quickStyleIndex);
                            if (quickStyleDef != null)
                            {
                                var mdContent = quickStyleDef.GetMD();
                                if (!mdContent.WillAppendLine())
                                {
                                    content.AppendLine();
                                }
                                context.Set(mdContent);
                                content.Append(mdContent.Content);
                            }
                        }
                    }
                }
                break;

                case "T":
                {
                    string v = ReplaceMultiline(node.Value);

                    v = ConvertSpanToMd(v);
                    v = TextReplacement(v);
                    content.Append(v);
                }
                break;

                case "Bullet":
                {
                    content.Append("- ");
                }
                break;

                case "Number":
                {
                    content.Append("1. ");
                }
                break;

                case "Tag":
                {
                    var tagIndex = GetAttibuteValue(node, "index");
                    var tagDef   = context.GetTagDef(tagIndex);

                    if (tagDef != null)
                    {
                        if (tagDef.Name.Equals("To Do", StringComparison.InvariantCultureIgnoreCase))
                        {
                            var completed = GetAttibuteValue(node, "completed");
                            if (completed == "true")
                            {
                                content.Append("- [x] ");
                            }
                            else
                            {
                                content.Append("- [ ] ");
                            }
                        }
                        else
                        {
                            var tagMdContent = tagDef.GetMD();
                            content.Append("- ");
                            content.Append(tagMdContent.Content);
                        }
                    }
                }
                break;



                case "Table":
                {
                    if (context.HasPairedContent())
                    {
                        content.Append(context.Get().Content);
                        context.Reset();
                    }

                    stdTraversal = false;
                    context.TableInfo.SetOnTable();
                    results.Append(content);

                    if (node.HasElements)
                    {
                        var subs = node.Elements().ToList();
                        foreach (var item in subs)
                        {
                            GenerateChildObjectMD(item, context, ++level, results);
                        }
                    }

                    results.AppendLine();
                    context.TableInfo.Reset();
                }
                break;

                case "Column":
                {
                    context.TableInfo.AppendTableColumn();
                }
                break;

                case "Row":
                {
                    if (context.TableInfo.IsOnTable())
                    {
                        if (context.TableInfo.OnHeaderRow())
                        {
                            content.AppendLine();
                            var columns = context.TableInfo.GetTableColumnCount();
                            for (int i = 0; i < columns; i++)
                            {
                                content.Append("| - ");
                            }
                            content.Append("|");
                        }

                        stdTraversal = false;

                        content.AppendLine();
                        context.TableInfo.AppendRow();

                        results.Append(content);

                        if (node.HasElements)
                        {
                            var subs = node.Elements().ToList();
                            foreach (var item in subs)
                            {
                                GenerateChildObjectMD(item, context, ++level, results);
                            }
                        }

                        results.Append(" |");
                    }
                    else
                    {
                        // how we get here?
                    }
                }
                break;

                case "Cell":
                {
                    if (context.TableInfo.IsOnTable())
                    {
                        content.Append(" | ");
                        //context.Set(new MarkdownContent("|", true));
                    }
                    else
                    {
                        // how we get here?
                    }
                }
                break;

                case "Image":
                {
                    var format = GetAttibuteValue(node, "format");
                    if (String.IsNullOrEmpty(format))
                    {
                        format = "png";
                    }
                    context.ImageDef.SetWithinImage(format);
                }
                break;

                case "Size":
                {
                    var width  = GetAttibuteValue(node, "width");
                    var height = GetAttibuteValue(node, "height");


                    var w = Convert.ToDecimal(width);
                    var h = Convert.ToDecimal(height);

                    context.ImageDef.SetDimensions(w, h);
                }
                break;

                case "CallbackID":
                {
                    var id = GetAttibuteValue(node, "callbackID");

                    string stringValue;
                    onenoteApp.GetBinaryPageContent(context.ParentId, id, out stringValue);

                    if (!context.ImageDef.IsWithinImage())
                    {
                        context.ImageDef.SetWithinImage("png");
                    }

                    var fullPath = context.GetPageImageFullPath();
                    var bytes    = Convert.FromBase64String(stringValue);
                    context.Writer.WritePageImage(fullPath, bytes);

                    var altText         = context.GetPageImageFilename();
                    var contentFullPath = $"file://{fullPath}";
                    contentFullPath = contentFullPath.Replace(@"\", @"/");
                    contentFullPath = HttpUtility.UrlPathEncode(contentFullPath);

                    var image = $"![{altText}]({contentFullPath})";
                    //Lwn![test_2.](file://c:/Storage/Repositories/OneGitNote/Tester/aa/test_2.png)

                    content.Append(image);
                    context.ImageDef.Reset();
                }
                break;

                case "OCRData":
                {
                }
                break;



                default:
                    break;
                }

                if (stdTraversal)
                {
                    results.Append(content);

                    if (node.HasElements)
                    {
                        var subs = node.Elements().ToList();
                        foreach (var item in subs)
                        {
                            GenerateChildObjectMD(item, context, ++level, results);
                        }
                    }
                }
            }
        }