From 8b55ddea622502b3fcff6066d5061af403c5b475 Mon Sep 17 00:00:00 2001 From: pipeline Date: Fri, 15 Sep 2017 22:30:41 +0530 Subject: [PATCH] Convert back to md string --- ReadMe.md | 30 ++++++++++++++++++++++++++++-- index.js | 36 ++++++++++++++++++++++++++++++++---- package.json | 5 +++-- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index e9a773b..d6c8f14 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -4,7 +4,7 @@ A simple library to convert markdown content to JSON object. ## Usage -Simple content +### Simple content ```js @@ -20,7 +20,7 @@ md2json.parse('This is a markdown content'); ``` -Multiline Content +### Multiline Content ```js @@ -50,4 +50,30 @@ md2json.parse(mdContent); } */ +``` + +### Converting JSON to MD string + +The method `toMd` can be used to convert the JSON Object to Markdown string. + +```js + +var md2json = require('md-2-json'); +var json = { + "Heading 1": { + raw: "This is a para\n", + } +} + +md2json.toMd(json); + +/* output +` +# Heading 1 + +This is a para + +` +*/ + ``` \ No newline at end of file diff --git a/index.js b/index.js index 3e03ed3..00ede50 100644 --- a/index.js +++ b/index.js @@ -2,10 +2,12 @@ var fs = require('fs'); var marked = require('marked'); +var traverse = require('traverse'); var parse = function(mdContent) { var json = marked.lexer(mdContent); - var currentHeading, headings = []; + var currentHeading, headings = [], + isOrdered = true; var output = json.reduce(function(result, item, index, array) { switch (item.type) { case 'heading': @@ -22,8 +24,12 @@ var parse = function(mdContent) { currentHeading = currentHeading[item.text]; } break; + case 'list_start': + isOrdered = item.ordered; + break; case 'text': - var text = '- ' + item.text + '\n'; + var ordered = isOrdered ? '1. ' : '- '; + var text = ordered + item.text + '\n'; currentHeading.raw = currentHeading.raw ? currentHeading.raw + text : text; break; case 'table': @@ -51,8 +57,8 @@ exports.parse = parse; function getParentHeading(headings, item, result) { var parent, index = item.depth - 1; - var curreHeading = headings[index]; - if (curreHeading) { + var currentHeading = headings[index]; + if (currentHeading) { headings.splice(index, headings.length - index); } headings.push(item.text); @@ -86,4 +92,26 @@ function getTableContent(item) { } } return '| ' + tableHeader + '\n|: ' + separator + '\n| ' + tableContent + '\n'; +} + +function toMd(jsonObject) { + var mdText = ''; + traverse(jsonObject).reduce(function(acc, value) { + if (this.isLeaf && this.key === 'raw') { + mdText += value; + } else { + mdText += getHash(this.level) + ' ' + this.key + '\n\n'; + } + return; + }); + return mdText; +} +exports.toMd = toMd; + +function getHash(level) { + var hash = ''; + for (var i = 0; i < level; i++) { + hash += '#'; + } + return hash; } \ No newline at end of file diff --git a/package.json b/package.json index c914a3a..a5090cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "md-2-json", - "version": "1.0.1", + "version": "1.0.2", "description": "Markdown to JSON convertor", "main": "index.js", "keywords": [ @@ -16,7 +16,8 @@ "author": "ajithr", "license": "MIT", "dependencies": { - "marked": "^0.3.6" + "marked": "^0.3.6", + "traverse": "^0.6.6" }, "repository": { "type": "git",