This commit is contained in:
458
node_modules/micromark/lib/tokenize/html-text.js
generated
vendored
Normal file
458
node_modules/micromark/lib/tokenize/html-text.js
generated
vendored
Normal file
@@ -0,0 +1,458 @@
|
||||
'use strict'
|
||||
|
||||
var assert = require('assert')
|
||||
var asciiAlpha = require('../character/ascii-alpha.js')
|
||||
var asciiAlphanumeric = require('../character/ascii-alphanumeric.js')
|
||||
var codes = require('../character/codes.js')
|
||||
var markdownLineEnding = require('../character/markdown-line-ending.js')
|
||||
var markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')
|
||||
var markdownSpace = require('../character/markdown-space.js')
|
||||
var constants = require('../constant/constants.js')
|
||||
var types = require('../constant/types.js')
|
||||
var factorySpace = require('./factory-space.js')
|
||||
|
||||
function _interopDefaultLegacy(e) {
|
||||
return e && typeof e === 'object' && 'default' in e ? e : {default: e}
|
||||
}
|
||||
|
||||
var assert__default = /*#__PURE__*/ _interopDefaultLegacy(assert)
|
||||
|
||||
var htmlText = {
|
||||
name: 'htmlText',
|
||||
tokenize: tokenizeHtmlText
|
||||
}
|
||||
|
||||
function tokenizeHtmlText(effects, ok, nok) {
|
||||
var self = this
|
||||
var marker
|
||||
var buffer
|
||||
var index
|
||||
var returnState
|
||||
|
||||
return start
|
||||
|
||||
function start(code) {
|
||||
assert__default['default'](code === codes.lessThan, 'expected `<`')
|
||||
effects.enter(types.htmlText)
|
||||
effects.enter(types.htmlTextData)
|
||||
effects.consume(code)
|
||||
return open
|
||||
}
|
||||
|
||||
function open(code) {
|
||||
if (code === codes.exclamationMark) {
|
||||
effects.consume(code)
|
||||
return declarationOpen
|
||||
}
|
||||
|
||||
if (code === codes.slash) {
|
||||
effects.consume(code)
|
||||
return tagCloseStart
|
||||
}
|
||||
|
||||
if (code === codes.questionMark) {
|
||||
effects.consume(code)
|
||||
return instruction
|
||||
}
|
||||
|
||||
if (asciiAlpha(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpen
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function declarationOpen(code) {
|
||||
if (code === codes.dash) {
|
||||
effects.consume(code)
|
||||
return commentOpen
|
||||
}
|
||||
|
||||
if (code === codes.leftSquareBracket) {
|
||||
effects.consume(code)
|
||||
buffer = constants.cdataOpeningString
|
||||
index = 0
|
||||
return cdataOpen
|
||||
}
|
||||
|
||||
if (asciiAlpha(code)) {
|
||||
effects.consume(code)
|
||||
return declaration
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function commentOpen(code) {
|
||||
if (code === codes.dash) {
|
||||
effects.consume(code)
|
||||
return commentStart
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function commentStart(code) {
|
||||
if (code === codes.eof || code === codes.greaterThan) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.dash) {
|
||||
effects.consume(code)
|
||||
return commentStartDash
|
||||
}
|
||||
|
||||
return comment(code)
|
||||
}
|
||||
|
||||
function commentStartDash(code) {
|
||||
if (code === codes.eof || code === codes.greaterThan) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
return comment(code)
|
||||
}
|
||||
|
||||
function comment(code) {
|
||||
if (code === codes.eof) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.dash) {
|
||||
effects.consume(code)
|
||||
return commentClose
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = comment
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return comment
|
||||
}
|
||||
|
||||
function commentClose(code) {
|
||||
if (code === codes.dash) {
|
||||
effects.consume(code)
|
||||
return end
|
||||
}
|
||||
|
||||
return comment(code)
|
||||
}
|
||||
|
||||
function cdataOpen(code) {
|
||||
if (code === buffer.charCodeAt(index++)) {
|
||||
effects.consume(code)
|
||||
return index === buffer.length ? cdata : cdataOpen
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function cdata(code) {
|
||||
if (code === codes.eof) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.rightSquareBracket) {
|
||||
effects.consume(code)
|
||||
return cdataClose
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = cdata
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return cdata
|
||||
}
|
||||
|
||||
function cdataClose(code) {
|
||||
if (code === codes.rightSquareBracket) {
|
||||
effects.consume(code)
|
||||
return cdataEnd
|
||||
}
|
||||
|
||||
return cdata(code)
|
||||
}
|
||||
|
||||
function cdataEnd(code) {
|
||||
if (code === codes.greaterThan) {
|
||||
return end(code)
|
||||
}
|
||||
|
||||
if (code === codes.rightSquareBracket) {
|
||||
effects.consume(code)
|
||||
return cdataEnd
|
||||
}
|
||||
|
||||
return cdata(code)
|
||||
}
|
||||
|
||||
function declaration(code) {
|
||||
if (code === codes.eof || code === codes.greaterThan) {
|
||||
return end(code)
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = declaration
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return declaration
|
||||
}
|
||||
|
||||
function instruction(code) {
|
||||
if (code === codes.eof) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.questionMark) {
|
||||
effects.consume(code)
|
||||
return instructionClose
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = instruction
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return instruction
|
||||
}
|
||||
|
||||
function instructionClose(code) {
|
||||
return code === codes.greaterThan ? end(code) : instruction(code)
|
||||
}
|
||||
|
||||
function tagCloseStart(code) {
|
||||
if (asciiAlpha(code)) {
|
||||
effects.consume(code)
|
||||
return tagClose
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function tagClose(code) {
|
||||
if (code === codes.dash || asciiAlphanumeric(code)) {
|
||||
effects.consume(code)
|
||||
return tagClose
|
||||
}
|
||||
|
||||
return tagCloseBetween(code)
|
||||
}
|
||||
|
||||
function tagCloseBetween(code) {
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = tagCloseBetween
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
if (markdownSpace(code)) {
|
||||
effects.consume(code)
|
||||
return tagCloseBetween
|
||||
}
|
||||
|
||||
return end(code)
|
||||
}
|
||||
|
||||
function tagOpen(code) {
|
||||
if (code === codes.dash || asciiAlphanumeric(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpen
|
||||
}
|
||||
|
||||
if (
|
||||
code === codes.slash ||
|
||||
code === codes.greaterThan ||
|
||||
markdownLineEndingOrSpace(code)
|
||||
) {
|
||||
return tagOpenBetween(code)
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function tagOpenBetween(code) {
|
||||
if (code === codes.slash) {
|
||||
effects.consume(code)
|
||||
return end
|
||||
}
|
||||
|
||||
if (code === codes.colon || code === codes.underscore || asciiAlpha(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeName
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = tagOpenBetween
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
if (markdownSpace(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpenBetween
|
||||
}
|
||||
|
||||
return end(code)
|
||||
}
|
||||
|
||||
function tagOpenAttributeName(code) {
|
||||
if (
|
||||
code === codes.dash ||
|
||||
code === codes.dot ||
|
||||
code === codes.colon ||
|
||||
code === codes.underscore ||
|
||||
asciiAlphanumeric(code)
|
||||
) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeName
|
||||
}
|
||||
|
||||
return tagOpenAttributeNameAfter(code)
|
||||
}
|
||||
|
||||
function tagOpenAttributeNameAfter(code) {
|
||||
if (code === codes.equalsTo) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeValueBefore
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = tagOpenAttributeNameAfter
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
if (markdownSpace(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeNameAfter
|
||||
}
|
||||
|
||||
return tagOpenBetween(code)
|
||||
}
|
||||
|
||||
function tagOpenAttributeValueBefore(code) {
|
||||
if (
|
||||
code === codes.eof ||
|
||||
code === codes.lessThan ||
|
||||
code === codes.equalsTo ||
|
||||
code === codes.greaterThan ||
|
||||
code === codes.graveAccent
|
||||
) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.quotationMark || code === codes.apostrophe) {
|
||||
effects.consume(code)
|
||||
marker = code
|
||||
return tagOpenAttributeValueQuoted
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = tagOpenAttributeValueBefore
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
if (markdownSpace(code)) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeValueBefore
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
marker = undefined
|
||||
return tagOpenAttributeValueUnquoted
|
||||
}
|
||||
|
||||
function tagOpenAttributeValueQuoted(code) {
|
||||
if (code === marker) {
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeValueQuotedAfter
|
||||
}
|
||||
|
||||
if (code === codes.eof) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (markdownLineEnding(code)) {
|
||||
returnState = tagOpenAttributeValueQuoted
|
||||
return atLineEnding(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeValueQuoted
|
||||
}
|
||||
|
||||
function tagOpenAttributeValueQuotedAfter(code) {
|
||||
if (
|
||||
code === codes.greaterThan ||
|
||||
code === codes.slash ||
|
||||
markdownLineEndingOrSpace(code)
|
||||
) {
|
||||
return tagOpenBetween(code)
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
function tagOpenAttributeValueUnquoted(code) {
|
||||
if (
|
||||
code === codes.eof ||
|
||||
code === codes.quotationMark ||
|
||||
code === codes.apostrophe ||
|
||||
code === codes.lessThan ||
|
||||
code === codes.equalsTo ||
|
||||
code === codes.graveAccent
|
||||
) {
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
if (code === codes.greaterThan || markdownLineEndingOrSpace(code)) {
|
||||
return tagOpenBetween(code)
|
||||
}
|
||||
|
||||
effects.consume(code)
|
||||
return tagOpenAttributeValueUnquoted
|
||||
}
|
||||
|
||||
// We can’t have blank lines in content, so no need to worry about empty
|
||||
// tokens.
|
||||
function atLineEnding(code) {
|
||||
assert__default['default'](returnState, 'expected return state')
|
||||
assert__default['default'](markdownLineEnding(code), 'expected eol')
|
||||
effects.exit(types.htmlTextData)
|
||||
effects.enter(types.lineEnding)
|
||||
effects.consume(code)
|
||||
effects.exit(types.lineEnding)
|
||||
return factorySpace(
|
||||
effects,
|
||||
afterPrefix,
|
||||
types.linePrefix,
|
||||
self.parser.constructs.disable.null.indexOf('codeIndented') > -1
|
||||
? undefined
|
||||
: constants.tabSize
|
||||
)
|
||||
}
|
||||
|
||||
function afterPrefix(code) {
|
||||
effects.enter(types.htmlTextData)
|
||||
return returnState(code)
|
||||
}
|
||||
|
||||
function end(code) {
|
||||
if (code === codes.greaterThan) {
|
||||
effects.consume(code)
|
||||
effects.exit(types.htmlTextData)
|
||||
effects.exit(types.htmlText)
|
||||
return ok
|
||||
}
|
||||
|
||||
return nok(code)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = htmlText
|
||||
Reference in New Issue
Block a user