md2hatena
Version:
Markdown to Hatena Syntax converter
65 lines (49 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.nodeToHatena = undefined;
exports.md2hatena = md2hatena;
exports.stringify = stringify;
var _unified = require('unified');
var _unified2 = _interopRequireDefault(_unified);
var _remarkParse = require('remark-parse');
var _remarkParse2 = _interopRequireDefault(_remarkParse);
var _nodeToHatena = require('./nodeToHatena');
var _nodeToHatena2 = _interopRequireDefault(_nodeToHatena);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function md2hatena(md) {
return (0, _unified2.default)().use(_remarkParse2.default, { footnotes: true }).use(stringify).process(md).then(function (vfile) {
return vfile.contents;
});
}
function findInTree(node, type) {
var nodes = [];
if (node.children) {
nodes = node.children.reduce(function (acc, n) {
return acc.concat(findInTree(n, type));
}, []);
}
if (node.type === type) {
nodes.push(node);
}
return nodes;
}
function getDefinition(tree) {
var definition = {};
var footnoteDefinition = {};
findInTree(tree, 'definition').forEach(function (n) {
definition[n.identifier] = n.url;
});
findInTree(tree, 'footnoteDefinition').forEach(function (n) {
footnoteDefinition[n.identifier] = n;
});
return { definition: definition, footnoteDefinition: footnoteDefinition };
}
function compiler(tree) {
return (0, _nodeToHatena2.default)(tree, getDefinition(tree));
}
function stringify() {
this.Compiler = compiler;
}
exports.nodeToHatena = _nodeToHatena2.default;