Files
NapCatQQ/.pnpm-store/v3/files/53/00f9f423ae71981f9d4a0c35680a11fa11ddc370a4e06d239b2ed2bb2763b23eb3a0678b5f4fea77ad5f7cad6f6cb2e3ce5f8bd5a3ce2315ecffe1f220a323
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

54 lines
1.3 KiB
Plaintext

/**
* @import {Effects, State} from 'micromark-util-types'
*/
import {factorySpace} from 'micromark-factory-space'
import {markdownLineEnding, markdownSpace} from 'micromark-util-character'
import {types} from 'micromark-util-symbol'
/**
* Parse spaces and tabs.
*
* There is no `nok` parameter:
*
* * line endings or spaces in markdown are often optional, in which case this
* factory can be used and `ok` will be switched to whether spaces were found
* or not
* * one line ending or space can be detected with
* `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`
*
* @param {Effects} effects
* Context.
* @param {State} ok
* State switched to when successful.
* @returns {State}
* Start state.
*/
export function factoryWhitespace(effects, ok) {
/** @type {boolean} */
let seen
return start
/** @type {State} */
function start(code) {
if (markdownLineEnding(code)) {
effects.enter(types.lineEnding)
effects.consume(code)
effects.exit(types.lineEnding)
seen = true
return start
}
if (markdownSpace(code)) {
return factorySpace(
effects,
start,
seen ? types.linePrefix : types.lineSuffix
)(code)
}
return ok(code)
}
}