const unified = require('unified');
const markdownToRemark = require('remark-parse');
const remarkToMarkdown = require('remark-stringify');
const remarkToHtml = require('remark-html');
const commonmark = require('commonmark');
const commonmarkParser = new commonmark.Parser();
const commonmarkRenderer = new commonmark.HtmlRenderer();
const remarkParse = md => unified()
.use(markdownToRemark, { commonmark: true })
.parse(md)
.children[0]
.children;
const remarkProcess = md => unified()
.use(markdownToRemark, { commonmark: true })
.use(remarkToMarkdown, { commonmark: true })
.processSync(md)
.contents;
const remarkRender = md => unified()
.use(markdownToRemark, { commonmark: true })
.use(remarkToHtml)
.processSync(md)
.contents;
const commonmarkParse = md => {
const parsed = commonmarkParser.parse(md);
const walker = parsed.walker();
const acc = [];
let event, node, indent = '';
while (event = walker.next()) {
acc.push(`TYPE: ${event.node.type}\n`);
if (event.node.literal === null) {
indent += ' ';
acc.push(indent);
} else {
acc.push(`${indent}VALUE: ${event.node.literal}\n`);
indent = indent.slice(0, indent.length - 3);
}
}
console.log(acc.join(''));
};
const commonmarkRender = md => commonmarkRenderer.render(commonmarkParser.parse(md));
const parse = md => {
console.log('Remark:');
console.log(remarkParse(md));
console.log('Commonmark:');
console.log(commonmarkParse(md));
};
const render = md => {
console.log('Remark:');
console.log(remarkRender(md));
console.log('Commonmark:');
console.log(commonmarkRender(md));
};
render(`
_a_b
a_b_
a__b__c
`);