Skip to content

Commit

Permalink
Convert back to md string
Browse files Browse the repository at this point in the history
  • Loading branch information
pipeline committed Sep 15, 2017
1 parent 400761c commit 8b55dde
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 8 deletions.
30 changes: 28 additions & 2 deletions ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ A simple library to convert markdown content to JSON object.

## Usage

Simple content
### Simple content

```js

Expand All @@ -20,7 +20,7 @@ md2json.parse('This is a markdown content');

```

Multiline Content
### Multiline Content

```js

Expand Down Expand Up @@ -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
`
*/

```
36 changes: 32 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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':
Expand All @@ -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':
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand All @@ -16,7 +16,8 @@
"author": "ajithr",
"license": "MIT",
"dependencies": {
"marked": "^0.3.6"
"marked": "^0.3.6",
"traverse": "^0.6.6"
},
"repository": {
"type": "git",
Expand Down

0 comments on commit 8b55dde

Please sign in to comment.