mirror of
https://github.com/Funkoala14/knowledgebase_law.git
synced 2025-06-08 14:31:53 +08:00
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
/**
|
|
* @import {Effects, State} from 'micromark-util-types'
|
|
*/
|
|
|
|
import { factorySpace } from 'micromark-factory-space';
|
|
import { markdownLineEnding, markdownSpace } from 'micromark-util-character';
|
|
/**
|
|
* 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("lineEnding");
|
|
effects.consume(code);
|
|
effects.exit("lineEnding");
|
|
seen = true;
|
|
return start;
|
|
}
|
|
if (markdownSpace(code)) {
|
|
return factorySpace(effects, start, seen ? "linePrefix" : "lineSuffix")(code);
|
|
}
|
|
return ok(code);
|
|
}
|
|
} |