var characterEscape = { name: 'characterEscape', tokenize: tokenizeCharacterEscape } export default characterEscape import assert from 'assert' import asciiPunctuation from '../character/ascii-punctuation.mjs' import codes from '../character/codes.mjs' import types from '../constant/types.mjs' function tokenizeCharacterEscape(effects, ok, nok) { return start function start(code) { assert(code === codes.backslash, 'expected `\\`') effects.enter(types.characterEscape) effects.enter(types.escapeMarker) effects.consume(code) effects.exit(types.escapeMarker) return open } function open(code) { if (asciiPunctuation(code)) { effects.enter(types.characterEscapeValue) effects.consume(code) effects.exit(types.characterEscapeValue) effects.exit(types.characterEscape) return ok } return nok(code) } }