// Paragraph 'use strict'; module.exports = function paragraph(state, startLine/*, endLine*/) { var endLine, content, terminate, i, l, nextLine = startLine + 1, terminatorRules; endLine = state.lineMax; // jump line-by-line until empty one or EOF if (nextLine < endLine && !state.isEmpty(nextLine)) { terminatorRules = state.parser.ruler.getRules('paragraph'); for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) { // this would be a code block normally, but after paragraph // it's considered a lazy continuation regardless of what's there if (state.tShift[nextLine] - state.blkIndent > 3) { continue; } // Some tags can terminate paragraph without empty line. terminate = false; for (i = 0, l = terminatorRules.length; i < l; i++) { if (terminatorRules[i](state, nextLine, endLine, true)) { terminate = true; break; } } if (terminate) { break; } } } content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); state.line = nextLine; if (content.length) { state.tokens.push({ type: 'paragraph_open', tight: false, lines: [ startLine, state.line ], level: state.level }); state.tokens.push({ type: 'inline', content: content, level: state.level + 1, lines: [ startLine, state.line ], children: [] }); state.tokens.push({ type: 'paragraph_close', tight: false, level: state.level }); } return true; };