1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 'use strict'
- var trim = require('trim')
- var trimTrailingLines = require('trim-trailing-lines')
- var interrupt = require('../util/interrupt')
- module.exports = paragraph
- var tab = '\t'
- var lineFeed = '\n'
- var space = ' '
- var tabSize = 4
- // Tokenise paragraph.
- function paragraph(eat, value, silent) {
- var self = this
- var settings = self.options
- var commonmark = settings.commonmark
- var tokenizers = self.blockTokenizers
- var interruptors = self.interruptParagraph
- var index = value.indexOf(lineFeed)
- var length = value.length
- var position
- var subvalue
- var character
- var size
- var now
- while (index < length) {
- // Eat everything if there’s no following newline.
- if (index === -1) {
- index = length
- break
- }
- // Stop if the next character is NEWLINE.
- if (value.charAt(index + 1) === lineFeed) {
- break
- }
- // In commonmark-mode, following indented lines are part of the paragraph.
- if (commonmark) {
- size = 0
- position = index + 1
- while (position < length) {
- character = value.charAt(position)
- if (character === tab) {
- size = tabSize
- break
- } else if (character === space) {
- size++
- } else {
- break
- }
- position++
- }
- if (size >= tabSize && character !== lineFeed) {
- index = value.indexOf(lineFeed, index + 1)
- continue
- }
- }
- subvalue = value.slice(index + 1)
- // Check if the following code contains a possible block.
- if (interrupt(interruptors, tokenizers, self, [eat, subvalue, true])) {
- break
- }
- position = index
- index = value.indexOf(lineFeed, index + 1)
- if (index !== -1 && trim(value.slice(position, index)) === '') {
- index = position
- break
- }
- }
- subvalue = value.slice(0, index)
- /* istanbul ignore if - never used (yet) */
- if (silent) {
- return true
- }
- now = eat.now()
- subvalue = trimTrailingLines(subvalue)
- return eat(subvalue)({
- type: 'paragraph',
- children: self.tokenizeInline(subvalue, now)
- })
- }
|