| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /**
- * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
- * @typedef {import('micromark-util-types').Effects} Effects
- * @typedef {import('micromark-util-types').State} State
- */
- import { asciiAlpha, asciiAlphanumeric } from 'micromark-util-character';
- import { codes } from 'micromark-util-symbol';
- /**
- * @this {TokenizeContext}
- * @param {Effects} effects
- * @param {State} ok
- * @param {State} nok
- * @param {string} type
- */
- export function factoryName(effects, ok, nok, type) {
- const self = this;
- return start;
- /** @type {State} */
- function start(code) {
- if (asciiAlpha(code)) {
- effects.enter(type);
- effects.consume(code);
- return name;
- }
- return nok(code);
- }
- /** @type {State} */
- function name(code) {
- if (
- code === codes.dash ||
- code === codes.underscore ||
- asciiAlphanumeric(code)
- ) {
- effects.consume(code);
- return name;
- }
- effects.exit(type);
- return self.previous === codes.dash || self.previous === codes.underscore
- ? nok(code)
- : ok(code);
- }
- }
|