12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // Paragraph
- export default function paragraph (state, startLine, endLine) {
- const terminatorRules = state.md.block.ruler.getRules('paragraph')
- const oldParentType = state.parentType
- let nextLine = startLine + 1
- state.parentType = 'paragraph'
- // jump line-by-line until empty one or EOF
- 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.sCount[nextLine] - state.blkIndent > 3) { continue }
- // quirk for blockquotes, this line should already be checked by that rule
- if (state.sCount[nextLine] < 0) { continue }
- // Some tags can terminate paragraph without empty line.
- let terminate = false
- for (let i = 0, l = terminatorRules.length; i < l; i++) {
- if (terminatorRules[i](state, nextLine, endLine, true)) {
- terminate = true
- break
- }
- }
- if (terminate) { break }
- }
- const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()
- state.line = nextLine
- const token_o = state.push('paragraph_open', 'p', 1)
- token_o.map = [startLine, state.line]
- const token_i = state.push('inline', '', 0)
- token_i.content = content
- token_i.map = [startLine, state.line]
- token_i.children = []
- state.push('paragraph_close', 'p', -1)
- state.parentType = oldParentType
- return true
- }
|