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()); }
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); } } } } }