markdown-it
Version:
Markdown-it - modern pluggable markdown parser.
51 lines (31 loc) • 1.34 kB
JavaScript
// lheading (---, ===)
;
module.exports = function lheading(state, startLine, endLine/*, silent*/) {
var marker, pos, max, token, level,
next = startLine + 1;
if (next >= endLine) { return false; }
if (state.sCount[next] < state.blkIndent) { return false; }
// Scan next line
if (state.sCount[next] - state.blkIndent > 3) { return false; }
pos = state.bMarks[next] + state.tShift[next];
max = state.eMarks[next];
if (pos >= max) { return false; }
marker = state.src.charCodeAt(pos);
if (marker !== 0x2D/* - */ && marker !== 0x3D/* = */) { return false; }
pos = state.skipChars(pos, marker);
pos = state.skipSpaces(pos);
if (pos < max) { return false; }
pos = state.bMarks[startLine] + state.tShift[startLine];
state.line = next + 1;
level = (marker === 0x3D/* = */ ? 1 : 2);
token = state.push('heading_open', 'h' + String(level), 1);
token.markup = String.fromCharCode(marker);
token.map = [ startLine, state.line ];
token = state.push('inline', '', 0);
token.content = state.src.slice(pos, state.eMarks[startLine]).trim();
token.map = [ startLine, state.line - 1 ];
token.children = [];
token = state.push('heading_close', 'h' + String(level), -1);
token.markup = String.fromCharCode(marker);
return true;
};