/** | |
* @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 {factorySpace} from 'micromark-factory-space' | |
import {markdownLineEnding, markdownSpace} from 'micromark-util-character' | |
/** @type {Construct} */ | |
export const blankLine = { | |
tokenize: tokenizeBlankLine, | |
partial: true | |
} | |
/** | |
* @this {TokenizeContext} | |
* @type {Tokenizer} | |
*/ | |
function tokenizeBlankLine(effects, ok, nok) { | |
return start | |
/** | |
* Start of blank line. | |
* | |
* > π **Note**: `β ` represents a space character. | |
* | |
* ```markdown | |
* > | β β β | |
* ^ | |
* > | β | |
* ^ | |
* ``` | |
* | |
* @type {State} | |
*/ | |
function start(code) { | |
return markdownSpace(code) | |
? factorySpace(effects, after, 'linePrefix')(code) | |
: after(code) | |
} | |
/** | |
* At eof/eol, after optional whitespace. | |
* | |
* > π **Note**: `β ` represents a space character. | |
* | |
* ```markdown | |
* > | β β β | |
* ^ | |
* > | β | |
* ^ | |
* ``` | |
* | |
* @type {State} | |
*/ | |
function after(code) { | |
return code === null || markdownLineEnding(code) ? ok(code) : nok(code) | |
} | |
} | |