md2hatena
Version:
Markdown to Hatena Syntax converter
180 lines (167 loc) • 5.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = nodeToHatena;
var _joinNodes = require('./joinNodes');
var _joinNodes2 = _interopRequireDefault(_joinNodes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var converter = {
root: function root(node, opts) {
return (0, _joinNodes2.default)(node.children, node.children.map(function (n) {
return nodeToHatena(n, opts);
}));
},
heading: function heading(node, opts) {
return '**********'.slice(0, node.depth) + ' ' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('');
},
text: function text(node) {
return node.value;
},
paragraph: function paragraph(node, opts) {
return (0, _joinNodes2.default)(node.children, node.children.map(function (n) {
return nodeToHatena(n, opts);
}));
},
inlineCode: function inlineCode(node) {
return '<code>' + node.value + '</code>';
},
html: function html(node) {
return node.value;
},
thematicBreak: function thematicBreak() {
return '<hr>';
},
link: function link(node, opts) {
var title = node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('');
var suffix = title.match(/\S+/) ? ':title=' + title : ':title';
return '[' + node.url + suffix + ']';
},
list: function list(node, opts) {
var level = opts.level || 0;
return node.children.map(function (n) {
return nodeToHatena(n, _extends({}, opts, { level: level + 1 }));
}).join('\n');
},
listItem: function listItem(node, opts) {
var level = opts.level || 0;
return '----------'.slice(0, level) + ' ' + node.children.map(function (n) {
var h = nodeToHatena(n, _extends({}, opts, { level: level }));
return n.type === 'list' ? '\n' + h : h;
}).join('');
},
table: function table(node, opts) {
return nodeToHatena(node.children[0], { prefix: '*' }) + '\n' + node.children.slice(1).map(function (n) {
return nodeToHatena(n, opts);
}).join('\n');
},
tableRow: function tableRow(node, opts) {
return '| ' + node.children.map(function (n) {
return (opts.prefix || '') + nodeToHatena(n, opts);
}).join(' | ') + ' |';
},
tableCell: function tableCell(node, opts) {
return node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('');
},
code: function code(node) {
return '>|' + (node.lang || '') + '|\n' + node.value + '\n||<';
},
blockquote: function blockquote(node, opts) {
return '>>\n' + (0, _joinNodes2.default)(node.children, node.children.map(function (n) {
return nodeToHatena(n, opts);
})) + '\n<<';
},
yaml: function yaml(node) {
return '>|yaml|\n---\n' + node.value + '\n---\n||<';
},
break: function _break() {
return '\n';
},
emphasis: function emphasis(node, opts) {
return '<em>' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('') + '</em>';
},
strong: function strong(node, opts) {
return '<strong>' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('') + '</strong>';
},
delete: function _delete(node, opts) {
return '<del>' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('') + '</del>';
},
image: function image(node) {
if (node.alt && node.title) {
return '<img src="' + node.url + '" alt="' + node.alt + '" title="' + node.title + '"/>';
}
if (node.alt) {
return '<img src="' + node.url + '" alt="' + node.alt + '"/>';
}
if (node.title) {
return '<img src="' + node.url + '" title="' + node.title + '"/>';
}
return '[' + node.url + ':image]';
},
footnote: function footnote(node, opts) {
return '((' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('') + '))';
},
footnoteDefinition: function footnoteDefinition() {
return '';
},
footnoteReference: function footnoteReference(node, opts) {
if (!opts.footnoteDefinition) {
return '';
}
var def = opts.footnoteDefinition[node.identifier];
if (def) {
var body = def.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('');
return '((' + body + '))';
}
return '';
},
definition: function definition() {
return '';
},
linkReference: function linkReference(node, opts) {
if (!opts.definition || !opts.definition[node.identifier]) {
return '';
}
var def = opts.definition[node.identifier];
if (node.referenceType === 'full') {
return '[' + def + ':title=' + node.children.map(function (n) {
return nodeToHatena(n, opts);
}).join('') + ']';
}
return '[' + def + ']';
},
imageReference: function imageReference(node, opts) {
if (!opts.definition || !opts.definition[node.identifier]) {
return '';
}
var def = opts.definition[node.identifier];
if (node.referenceType === 'full') {
return '<img src="' + def + '" alt="' + node.alt + '"/>';
}
return '[' + def + ':image]';
}
};
function nodeToHatena(node) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (converter[node.type]) {
return converter[node.type](node, opts);
}
return node.value || '';
}