js-markdown
Version:
A markdown language js compiler.
93 lines (78 loc) • 2.38 kB
JavaScript
/**
* match text and paragraph
*
* If one string does not match any syntax, it will be a text or paragraph.
* String will render as a text preferentially.
* Adjacent text will combine as a paragraph.
* Only if parent is render tree root node, string will render as a paragraph.
*
*/
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _Valid = _interopRequireDefault(require("../../utils/Valid"));
var _Str = _interopRequireDefault(require("../../utils/Str"));
// get prev node in render tree
function getPrev(renderTree) {
if (!renderTree || !renderTree.children || renderTree.children.length < 1 || !renderTree.children[renderTree.children.length - 1]) {
return;
}
return renderTree.children[renderTree.children.length - 1];
}
function parse(line, index, lines, renderTree) {
var prev = getPrev(renderTree),
isBlankLine = _Valid["default"].isBlank(line);
if (prev) {
if (prev.type === 'Text') {
// multi Text line will be a Paragraph
if (isBlankLine) {
prev.type = 'Paragraph';
return [{
type: 'BlankLine',
rawValue: ''
}, index];
} else {
prev.type = 'Paragraph';
prev.rawValue += '\n' + line;
return [null, index];
}
}
if (isBlankLine && prev.type === 'BlankLine') {
return [null, index];
}
if (!isBlankLine && prev.type === 'Paragraph') {
// append to prev Paragraph
prev.rawValue += '\n' + line;
return [null, index];
}
}
if (isBlankLine) {
return [{
type: 'BlankLine',
rawValue: ''
}, index];
} // render as a single line text when parent is a list
// if (renderTree && renderTree.type === 'ListItem') {
// return [{
// type: 'Text',
// rawValue: line
// }, index];
// }
return [{
type: 'Paragraph',
rawValue: line
}, index];
}
function render() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var node = arguments.length > 1 ? arguments[1] : undefined;
return "<p>".concat(node.rawValue || '').concat(_Str["default"].trim(data, ' \n'), "</p>");
}
var _default = {
parse: parse,
render: render
};
exports["default"] = _default;