js-markdown
Version:
A markdown language js compiler.
113 lines (95 loc) • 2.46 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
/**
* match a emphasize
*
* syntax like this:
*
* **strong emphasized**
* __strong emphasized__
*
* or
*
* *weak emphasized*
* _weak emphasized_
*
* and emphasize can be nested
*
*/
var EmphasizeType = {
DOUBLE: Symbol('DOUBLE'),
STRONG: Symbol('STRONG'),
WEAK: Symbol('WEAK')
};
/**
* reg like:
* /^([*]{2})((\\\*|[^*])*?)(\1)/
*
* @param flag
* @param count
* @returns {RegExp}
*/
function generateRegExp(flag, count) {
return new RegExp("^([".concat(flag, "]{").concat(count, "})((\\\\\\").concat(flag, "|[^").concat(flag, "])*?)(\\1)"));
}
function parse(str, children, renderTree) {
var flag = str.at(0);
var resultDouble = str.match(generateRegExp(flag, 3));
if (resultDouble && resultDouble[2]) {
var node = {
// strong root node
type: 'Emphasize',
emphasizeType: EmphasizeType.DOUBLE,
rawValue: resultDouble[2]
}; // parse recursively
this.parseInline(node);
return [node, resultDouble[2].length + 6];
}
var resultStrong = str.match(generateRegExp(flag, 2));
if (resultStrong && resultStrong[2]) {
var _node = {
// strong root node
type: 'Emphasize',
emphasizeType: EmphasizeType.STRONG,
rawValue: resultStrong[2]
}; // parse recursively
this.parseInline(_node);
return [_node, resultStrong[2].length + 4];
}
var resultWeak = str.match(generateRegExp(flag, 1));
if (resultWeak && resultWeak[2]) {
var _node2 = {
// strong root node
type: 'Emphasize',
emphasizeType: EmphasizeType.WEAK,
rawValue: resultWeak[2]
}; // parse recursively
this.parseInline(_node2);
return [_node2, resultWeak[2].length + 2];
}
return;
}
function getTag(emphasizeType) {
switch (emphasizeType) {
case EmphasizeType.DOUBLE:
return ['<strong><em>', '</em></strong>'];
case EmphasizeType.STRONG:
return ['<strong>', '</strong>'];
default:
return ['<em>', '</em>'];
}
}
function render() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var node = arguments.length > 1 ? arguments[1] : undefined;
var tag = getTag(node.emphasizeType);
return "".concat(tag[0]).concat(node.rawValue || '').concat(data).concat(tag[1]);
}
var _default = {
parse: parse,
render: render
};
exports["default"] = _default;
;