WIP - add extractor, generate snippet_data
This commit is contained in:
275
node_modules/remark-parse/lib/tokenize/definition.js
generated
vendored
Normal file
275
node_modules/remark-parse/lib/tokenize/definition.js
generated
vendored
Normal file
@ -0,0 +1,275 @@
|
||||
'use strict'
|
||||
|
||||
var whitespace = require('is-whitespace-character')
|
||||
var normalize = require('../util/normalize')
|
||||
|
||||
module.exports = definition
|
||||
definition.notInList = true
|
||||
definition.notInBlock = true
|
||||
|
||||
var quotationMark = '"'
|
||||
var apostrophe = "'"
|
||||
var backslash = '\\'
|
||||
var lineFeed = '\n'
|
||||
var tab = '\t'
|
||||
var space = ' '
|
||||
var leftSquareBracket = '['
|
||||
var rightSquareBracket = ']'
|
||||
var leftParenthesis = '('
|
||||
var rightParenthesis = ')'
|
||||
var colon = ':'
|
||||
var lessThan = '<'
|
||||
var greaterThan = '>'
|
||||
|
||||
function definition(eat, value, silent) {
|
||||
var self = this
|
||||
var commonmark = self.options.commonmark
|
||||
var index = 0
|
||||
var length = value.length
|
||||
var subvalue = ''
|
||||
var beforeURL
|
||||
var beforeTitle
|
||||
var queue
|
||||
var character
|
||||
var test
|
||||
var identifier
|
||||
var url
|
||||
var title
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== space && character !== tab) {
|
||||
break
|
||||
}
|
||||
|
||||
subvalue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== leftSquareBracket) {
|
||||
return
|
||||
}
|
||||
|
||||
index++
|
||||
subvalue += character
|
||||
queue = ''
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character === rightSquareBracket) {
|
||||
break
|
||||
} else if (character === backslash) {
|
||||
queue += character
|
||||
index++
|
||||
character = value.charAt(index)
|
||||
}
|
||||
|
||||
queue += character
|
||||
index++
|
||||
}
|
||||
|
||||
if (
|
||||
!queue ||
|
||||
value.charAt(index) !== rightSquareBracket ||
|
||||
value.charAt(index + 1) !== colon
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
identifier = queue
|
||||
subvalue += queue + rightSquareBracket + colon
|
||||
index = subvalue.length
|
||||
queue = ''
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== tab && character !== space && character !== lineFeed) {
|
||||
break
|
||||
}
|
||||
|
||||
subvalue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
queue = ''
|
||||
beforeURL = subvalue
|
||||
|
||||
if (character === lessThan) {
|
||||
index++
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (!isEnclosedURLCharacter(character)) {
|
||||
break
|
||||
}
|
||||
|
||||
queue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character === isEnclosedURLCharacter.delimiter) {
|
||||
subvalue += lessThan + queue + character
|
||||
index++
|
||||
} else {
|
||||
if (commonmark) {
|
||||
return
|
||||
}
|
||||
|
||||
index -= queue.length + 1
|
||||
queue = ''
|
||||
}
|
||||
}
|
||||
|
||||
if (!queue) {
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (!isUnclosedURLCharacter(character)) {
|
||||
break
|
||||
}
|
||||
|
||||
queue += character
|
||||
index++
|
||||
}
|
||||
|
||||
subvalue += queue
|
||||
}
|
||||
|
||||
if (!queue) {
|
||||
return
|
||||
}
|
||||
|
||||
url = queue
|
||||
queue = ''
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== tab && character !== space && character !== lineFeed) {
|
||||
break
|
||||
}
|
||||
|
||||
queue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
test = null
|
||||
|
||||
if (character === quotationMark) {
|
||||
test = quotationMark
|
||||
} else if (character === apostrophe) {
|
||||
test = apostrophe
|
||||
} else if (character === leftParenthesis) {
|
||||
test = rightParenthesis
|
||||
}
|
||||
|
||||
if (!test) {
|
||||
queue = ''
|
||||
index = subvalue.length
|
||||
} else if (queue) {
|
||||
subvalue += queue + character
|
||||
index = subvalue.length
|
||||
queue = ''
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character === test) {
|
||||
break
|
||||
}
|
||||
|
||||
if (character === lineFeed) {
|
||||
index++
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character === lineFeed || character === test) {
|
||||
return
|
||||
}
|
||||
|
||||
queue += lineFeed
|
||||
}
|
||||
|
||||
queue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== test) {
|
||||
return
|
||||
}
|
||||
|
||||
beforeTitle = subvalue
|
||||
subvalue += queue + character
|
||||
index++
|
||||
title = queue
|
||||
queue = ''
|
||||
} else {
|
||||
return
|
||||
}
|
||||
|
||||
while (index < length) {
|
||||
character = value.charAt(index)
|
||||
|
||||
if (character !== tab && character !== space) {
|
||||
break
|
||||
}
|
||||
|
||||
subvalue += character
|
||||
index++
|
||||
}
|
||||
|
||||
character = value.charAt(index)
|
||||
|
||||
if (!character || character === lineFeed) {
|
||||
if (silent) {
|
||||
return true
|
||||
}
|
||||
|
||||
beforeURL = eat(beforeURL).test().end
|
||||
url = self.decode.raw(self.unescape(url), beforeURL, {nonTerminated: false})
|
||||
|
||||
if (title) {
|
||||
beforeTitle = eat(beforeTitle).test().end
|
||||
title = self.decode.raw(self.unescape(title), beforeTitle)
|
||||
}
|
||||
|
||||
return eat(subvalue)({
|
||||
type: 'definition',
|
||||
identifier: normalize(identifier),
|
||||
label: identifier,
|
||||
title: title || null,
|
||||
url: url
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Check if `character` can be inside an enclosed URI.
|
||||
function isEnclosedURLCharacter(character) {
|
||||
return (
|
||||
character !== greaterThan &&
|
||||
character !== leftSquareBracket &&
|
||||
character !== rightSquareBracket
|
||||
)
|
||||
}
|
||||
|
||||
isEnclosedURLCharacter.delimiter = greaterThan
|
||||
|
||||
// Check if `character` can be inside an unclosed URI.
|
||||
function isUnclosedURLCharacter(character) {
|
||||
return (
|
||||
character !== leftSquareBracket &&
|
||||
character !== rightSquareBracket &&
|
||||
!whitespace(character)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user