12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- export default labelFactory
-
- import assert from 'assert'
- import codes from '../character/codes.mjs'
- import markdownLineEnding from '../character/markdown-line-ending.mjs'
- import markdownSpace from '../character/markdown-space.mjs'
- import constants from '../constant/constants.mjs'
- import types from '../constant/types.mjs'
-
- // 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) {
- assert(code === codes.leftSquareBracket, 'expected `[`')
- effects.enter(type)
- effects.enter(markerType)
- effects.consume(code)
- effects.exit(markerType)
- effects.enter(stringType)
- return atBreak
- }
-
- function atBreak(code) {
- if (
- code === codes.eof ||
- code === codes.leftSquareBracket ||
- (code === codes.rightSquareBracket && !data) ||
- /* c8 ignore next */
- (code === codes.caret &&
- /* c8 ignore next */
- !size &&
- /* c8 ignore next */
- '_hiddenFootnoteSupport' in self.parser.constructs) ||
- size > constants.linkReferenceSizeMax
- ) {
- return nok(code)
- }
-
- if (code === codes.rightSquareBracket) {
- effects.exit(stringType)
- effects.enter(markerType)
- effects.consume(code)
- effects.exit(markerType)
- effects.exit(type)
- return ok
- }
-
- if (markdownLineEnding(code)) {
- effects.enter(types.lineEnding)
- effects.consume(code)
- effects.exit(types.lineEnding)
- return atBreak
- }
-
- effects.enter(types.chunkString, {contentType: constants.contentTypeString})
- return label(code)
- }
-
- function label(code) {
- if (
- code === codes.eof ||
- code === codes.leftSquareBracket ||
- code === codes.rightSquareBracket ||
- markdownLineEnding(code) ||
- size++ > constants.linkReferenceSizeMax
- ) {
- effects.exit(types.chunkString)
- return atBreak(code)
- }
-
- effects.consume(code)
- data = data || !markdownSpace(code)
- return code === codes.backslash ? labelEscape : label
- }
-
- function labelEscape(code) {
- if (
- code === codes.leftSquareBracket ||
- code === codes.backslash ||
- code === codes.rightSquareBracket
- ) {
- effects.consume(code)
- size++
- return label
- }
-
- return label(code)
- }
- }
|