12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 'use strict'
-
- var markdownLineEnding = require('../character/markdown-line-ending.js')
- var markdownSpace = require('../character/markdown-space.js')
-
- // eslint-disable-next-line max-params
- function labelFactory(effects, ok, nok, type, markerType, stringType) {
- var self = this
- var size = 0
- var data
- return start
-
- function start(code) {
- effects.enter(type)
- effects.enter(markerType)
- effects.consume(code)
- effects.exit(markerType)
- effects.enter(stringType)
- return atBreak
- }
-
- function atBreak(code) {
- if (
- code === null ||
- code === 91 ||
- (code === 93 && !data) ||
- /* c8 ignore next */
- (code === 94 &&
- /* c8 ignore next */
- !size &&
- /* c8 ignore next */
- '_hiddenFootnoteSupport' in self.parser.constructs) ||
- size > 999
- ) {
- return nok(code)
- }
-
- if (code === 93) {
- effects.exit(stringType)
- effects.enter(markerType)
- effects.consume(code)
- effects.exit(markerType)
- effects.exit(type)
- return ok
- }
-
- if (markdownLineEnding(code)) {
- effects.enter('lineEnding')
- effects.consume(code)
- effects.exit('lineEnding')
- return atBreak
- }
-
- effects.enter('chunkString', {
- contentType: 'string'
- })
- return label(code)
- }
-
- function label(code) {
- if (
- code === null ||
- code === 91 ||
- code === 93 ||
- markdownLineEnding(code) ||
- size++ > 999
- ) {
- effects.exit('chunkString')
- return atBreak(code)
- }
-
- effects.consume(code)
- data = data || !markdownSpace(code)
- return code === 92 ? labelEscape : label
- }
-
- function labelEscape(code) {
- if (code === 91 || code === 92 || code === 93) {
- effects.consume(code)
- size++
- return label
- }
-
- return label(code)
- }
- }
-
- module.exports = labelFactory
|