123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import {markdownLineEnding, markdownSpace} from 'micromark-util-character'
-
- export function factoryLabel(effects, ok, nok, type, markerType, stringType) {
- const self = this
- let size = 0
-
- let seen
- 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 (
- size > 999 ||
- code === null ||
- code === 91 ||
- (code === 93 && !seen) ||
-
-
-
-
-
- (code === 94 &&
- !size &&
- '_hiddenFootnoteSupport' in self.parser.constructs)
- ) {
- 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 labelInside(code)
- }
-
- function labelInside(code) {
- if (
- code === null ||
- code === 91 ||
- code === 93 ||
- markdownLineEnding(code) ||
- size++ > 999
- ) {
- effects.exit('chunkString')
- return atBreak(code)
- }
- effects.consume(code)
- if (!seen) seen = !markdownSpace(code)
- return code === 92 ? labelEscape : labelInside
- }
-
- function labelEscape(code) {
- if (code === 91 || code === 92 || code === 93) {
- effects.consume(code)
- size++
- return labelInside
- }
- return labelInside(code)
- }
- }
|