/** | |
* @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 {markdownLineEnding} from 'micromark-util-character' | |
/** @type {Construct} */ | |
export const hardBreakEscape = { | |
name: 'hardBreakEscape', | |
tokenize: tokenizeHardBreakEscape | |
} | |
/** | |
* @this {TokenizeContext} | |
* @type {Tokenizer} | |
*/ | |
function tokenizeHardBreakEscape(effects, ok, nok) { | |
return start | |
/** | |
* Start of a hard break (escape). | |
* | |
* ```markdown | |
* > | a\ | |
* ^ | |
* | b | |
* ``` | |
* | |
* @type {State} | |
*/ | |
function start(code) { | |
effects.enter('hardBreakEscape') | |
effects.consume(code) | |
return after | |
} | |
/** | |
* After `\`, at eol. | |
* | |
* ```markdown | |
* > | a\ | |
* ^ | |
* | b | |
* ``` | |
* | |
* @type {State} | |
*/ | |
function after(code) { | |
if (markdownLineEnding(code)) { | |
effects.exit('hardBreakEscape') | |
return ok(code) | |
} | |
return nok(code) | |
} | |
} | |