| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | /** * @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 {asciiPunctuation} from 'micromark-util-character'/** @type {Construct} */export const characterEscape = {  name: 'characterEscape',  tokenize: tokenizeCharacterEscape}/** * @this {TokenizeContext} * @type {Tokenizer} */function tokenizeCharacterEscape(effects, ok, nok) {  return start  /**   * Start of character escape.   *   * ```markdown   * > | a\*b   *      ^   * ```   *   * @type {State}   */  function start(code) {    effects.enter('characterEscape')    effects.enter('escapeMarker')    effects.consume(code)    effects.exit('escapeMarker')    return inside  }  /**   * After `\`, at punctuation.   *   * ```markdown   * > | a\*b   *       ^   * ```   *   * @type {State}   */  function inside(code) {    // ASCII punctuation.    if (asciiPunctuation(code)) {      effects.enter('characterEscapeValue')      effects.consume(code)      effects.exit('characterEscapeValue')      effects.exit('characterEscape')      return ok    }    return nok(code)  }}
 |