123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 'use strict'
-
- var assert = require('assert')
- var codes = require('../character/codes.js')
- var markdownLineEnding = require('../character/markdown-line-ending.js')
- var markdownSpace = require('../character/markdown-space.js')
- var constants = require('../constant/constants.js')
- var types = require('../constant/types.js')
-
- function _interopDefaultLegacy(e) {
- return e && typeof e === 'object' && 'default' in e ? e : {default: e}
- }
-
- var assert__default = /*#__PURE__*/ _interopDefaultLegacy(assert)
-
- // 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__default['default'](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)
- }
- }
-
- module.exports = labelFactory
|