WIP - add extractor, generate snippet_data
This commit is contained in:
117
node_modules/remark-parse/lib/tokenize/paragraph.js
generated
vendored
Normal file
117
node_modules/remark-parse/lib/tokenize/paragraph.js
generated
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
'use strict'
|
||||
|
||||
var trim = require('trim')
|
||||
var decimal = require('is-decimal')
|
||||
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 gfm = settings.gfm
|
||||
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
|
||||
}
|
||||
|
||||
// Break if the following line starts a list, when already in a list, or
|
||||
// when in commonmark, or when in gfm mode and the bullet is *not* numeric.
|
||||
if (
|
||||
tokenizers.list.call(self, eat, subvalue, true) &&
|
||||
(self.inList ||
|
||||
commonmark ||
|
||||
(gfm && !decimal(trim.left(subvalue).charAt(0))))
|
||||
) {
|
||||
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)
|
||||
|
||||
if (trim(subvalue) === '') {
|
||||
eat(subvalue)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
/* 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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user