/** | |
* @typedef {import('micromark-util-types').Construct} Construct | |
* @typedef {import('micromark-util-types').State} State | |
* @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext | |
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer | |
*/ | |
import {labelEnd} from './label-end.js' | |
/** @type {Construct} */ | |
export const labelStartLink = { | |
name: 'labelStartLink', | |
tokenize: tokenizeLabelStartLink, | |
resolveAll: labelEnd.resolveAll | |
} | |
/** | |
* @this {TokenizeContext} | |
* @type {Tokenizer} | |
*/ | |
function tokenizeLabelStartLink(effects, ok, nok) { | |
const self = this | |
return start | |
/** | |
* Start of label (link) start. | |
* | |
* ```markdown | |
* > | a [b] c | |
* ^ | |
* ``` | |
* | |
* @type {State} | |
*/ | |
function start(code) { | |
effects.enter('labelLink') | |
effects.enter('labelMarker') | |
effects.consume(code) | |
effects.exit('labelMarker') | |
effects.exit('labelLink') | |
return after | |
} | |
/** @type {State} */ | |
function after(code) { | |
// To do: this isn’t needed in `micromark-extension-gfm-footnote`, | |
// remove. | |
// Hidden footnotes hook. | |
/* c8 ignore next 3 */ | |
return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs | |
? nok(code) | |
: ok(code) | |
} | |
} | |