WIP - add extractor, generate snippet_data
This commit is contained in:
149
node_modules/remark-parse/lib/parser.js
generated
vendored
Normal file
149
node_modules/remark-parse/lib/parser.js
generated
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
'use strict'
|
||||
|
||||
var xtend = require('xtend')
|
||||
var toggle = require('state-toggle')
|
||||
var vfileLocation = require('vfile-location')
|
||||
var unescape = require('./unescape')
|
||||
var decode = require('./decode')
|
||||
var tokenizer = require('./tokenizer')
|
||||
|
||||
module.exports = Parser
|
||||
|
||||
function Parser(doc, file) {
|
||||
this.file = file
|
||||
this.offset = {}
|
||||
this.options = xtend(this.options)
|
||||
this.setOptions({})
|
||||
|
||||
this.inList = false
|
||||
this.inBlock = false
|
||||
this.inLink = false
|
||||
this.atStart = true
|
||||
|
||||
this.toOffset = vfileLocation(file).toOffset
|
||||
this.unescape = unescape(this, 'escape')
|
||||
this.decode = decode(this)
|
||||
}
|
||||
|
||||
var proto = Parser.prototype
|
||||
|
||||
// Expose core.
|
||||
proto.setOptions = require('./set-options')
|
||||
proto.parse = require('./parse')
|
||||
|
||||
// Expose `defaults`.
|
||||
proto.options = require('./defaults')
|
||||
|
||||
// Enter and exit helpers.
|
||||
proto.exitStart = toggle('atStart', true)
|
||||
proto.enterList = toggle('inList', false)
|
||||
proto.enterLink = toggle('inLink', false)
|
||||
proto.enterBlock = toggle('inBlock', false)
|
||||
|
||||
// Nodes that can interupt a paragraph:
|
||||
//
|
||||
// ```markdown
|
||||
// A paragraph, followed by a thematic break.
|
||||
// ___
|
||||
// ```
|
||||
//
|
||||
// In the above example, the thematic break “interupts” the paragraph.
|
||||
proto.interruptParagraph = [
|
||||
['thematicBreak'],
|
||||
['atxHeading'],
|
||||
['fencedCode'],
|
||||
['blockquote'],
|
||||
['html'],
|
||||
['setextHeading', {commonmark: false}],
|
||||
['definition', {commonmark: false}],
|
||||
['footnote', {commonmark: false}]
|
||||
]
|
||||
|
||||
// Nodes that can interupt a list:
|
||||
//
|
||||
// ```markdown
|
||||
// - One
|
||||
// ___
|
||||
// ```
|
||||
//
|
||||
// In the above example, the thematic break “interupts” the list.
|
||||
proto.interruptList = [
|
||||
['atxHeading', {pedantic: false}],
|
||||
['fencedCode', {pedantic: false}],
|
||||
['thematicBreak', {pedantic: false}],
|
||||
['definition', {commonmark: false}],
|
||||
['footnote', {commonmark: false}]
|
||||
]
|
||||
|
||||
// Nodes that can interupt a blockquote:
|
||||
//
|
||||
// ```markdown
|
||||
// > A paragraph.
|
||||
// ___
|
||||
// ```
|
||||
//
|
||||
// In the above example, the thematic break “interupts” the blockquote.
|
||||
proto.interruptBlockquote = [
|
||||
['indentedCode', {commonmark: true}],
|
||||
['fencedCode', {commonmark: true}],
|
||||
['atxHeading', {commonmark: true}],
|
||||
['setextHeading', {commonmark: true}],
|
||||
['thematicBreak', {commonmark: true}],
|
||||
['html', {commonmark: true}],
|
||||
['list', {commonmark: true}],
|
||||
['definition', {commonmark: false}],
|
||||
['footnote', {commonmark: false}]
|
||||
]
|
||||
|
||||
// Handlers.
|
||||
proto.blockTokenizers = {
|
||||
newline: require('./tokenize/newline'),
|
||||
indentedCode: require('./tokenize/code-indented'),
|
||||
fencedCode: require('./tokenize/code-fenced'),
|
||||
blockquote: require('./tokenize/blockquote'),
|
||||
atxHeading: require('./tokenize/heading-atx'),
|
||||
thematicBreak: require('./tokenize/thematic-break'),
|
||||
list: require('./tokenize/list'),
|
||||
setextHeading: require('./tokenize/heading-setext'),
|
||||
html: require('./tokenize/html-block'),
|
||||
footnote: require('./tokenize/footnote-definition'),
|
||||
definition: require('./tokenize/definition'),
|
||||
table: require('./tokenize/table'),
|
||||
paragraph: require('./tokenize/paragraph')
|
||||
}
|
||||
|
||||
proto.inlineTokenizers = {
|
||||
escape: require('./tokenize/escape'),
|
||||
autoLink: require('./tokenize/auto-link'),
|
||||
url: require('./tokenize/url'),
|
||||
html: require('./tokenize/html-inline'),
|
||||
link: require('./tokenize/link'),
|
||||
reference: require('./tokenize/reference'),
|
||||
strong: require('./tokenize/strong'),
|
||||
emphasis: require('./tokenize/emphasis'),
|
||||
deletion: require('./tokenize/delete'),
|
||||
code: require('./tokenize/code-inline'),
|
||||
break: require('./tokenize/break'),
|
||||
text: require('./tokenize/text')
|
||||
}
|
||||
|
||||
// Expose precedence.
|
||||
proto.blockMethods = keys(proto.blockTokenizers)
|
||||
proto.inlineMethods = keys(proto.inlineTokenizers)
|
||||
|
||||
// Tokenizers.
|
||||
proto.tokenizeBlock = tokenizer('block')
|
||||
proto.tokenizeInline = tokenizer('inline')
|
||||
proto.tokenizeFactory = tokenizer
|
||||
|
||||
// Get all keys in `value`.
|
||||
function keys(value) {
|
||||
var result = []
|
||||
var key
|
||||
|
||||
for (key in value) {
|
||||
result.push(key)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user