markdown-vetur
Version:
simple parse markdown to vue component description for vetur auto-completion
84 lines • 2.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var TITLE_REG = /^(#+)\s+([^\n]*)/;
var TABLE_REG = /^\|.+\n\|\s*\-+/;
var TD_REG = /\s*`[^`]+`\s*|([^\|`]+)/g;
var TABLE_SPLIT_LINE_REG = /^\|\s*-/;
function parse(input) {
var artical = [];
var start = 0;
var end = input.length;
while (start < end) {
var target = input.substr(start);
var match = void 0;
if ((match = TITLE_REG.exec(target))) {
artical.push({
type: 'title',
content: match[2],
level: match[1].length
});
start += match.index + match[0].length;
}
else if ((match = TABLE_REG.exec(target))) {
var _a = tableParse(target.substr(match.index)), table = _a.table, usedLength = _a.usedLength;
artical.push({
type: 'table',
table: table
});
start += match.index + usedLength;
}
else {
start += readLine(target).length + 1;
}
}
return artical;
}
exports.default = parse;
function tableParse(input) {
var start = 0;
var end = input.length;
var table = {
head: [],
body: []
};
var isHead = true;
while (start < end) {
var target = input.substr(start);
var line = readLine(target);
if (!/^\|/.test(target)) {
break;
}
if (TABLE_SPLIT_LINE_REG.test(target)) {
isHead = false;
}
else if (isHead) {
// temp do nothing
}
else {
table.body.push(line
.trim()
.match(TD_REG)
.map(function (i) {
if (i.indexOf('|') !== 0) {
return i
.trim()
.toLowerCase()
.split('|')
.map(function (s) { return s.trim(); })
.join('|');
}
return i.trim();
}));
}
start += line.length + 1;
}
return {
table: table,
usedLength: start
};
}
function readLine(input) {
var end = input.indexOf('\n');
return input.substr(0, end !== -1 ? end : input.length);
}
//# sourceMappingURL=md-parser.js.map