|
|
@ -4,31 +4,26 @@ |
|
|
|
|
|
|
|
|
|
|
|
module.exports = function paragraph(state, startLine/*, endLine*/) { |
|
|
|
var endLine, content, terminate, i, l, token, |
|
|
|
var content, terminate, i, l, token, |
|
|
|
nextLine = startLine + 1, |
|
|
|
terminatorRules; |
|
|
|
|
|
|
|
endLine = state.lineMax; |
|
|
|
terminatorRules = state.md.block.ruler.getRules('paragraph'), |
|
|
|
endLine = state.lineMax; |
|
|
|
|
|
|
|
// jump line-by-line until empty one or EOF
|
|
|
|
if (nextLine < endLine && !state.isEmpty(nextLine)) { |
|
|
|
terminatorRules = state.md.block.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; |
|
|
|
} |
|
|
|
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; } |
|
|
|
} |
|
|
|
if (terminate) { break; } |
|
|
|
} |
|
|
|
|
|
|
|
content = state.getLines(startLine, nextLine, state.blkIndent, false).trim(); |
|
|
|