| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /**
- * @import {
- * InitialConstruct,
- * Initializer,
- * State,
- * TokenizeContext
- * } from 'micromark-util-types'
- */
- import {ok as assert} from 'devlop'
- import {blankLine, content} from 'micromark-core-commonmark'
- import {factorySpace} from 'micromark-factory-space'
- import {markdownLineEnding} from 'micromark-util-character'
- import {codes, types} from 'micromark-util-symbol'
- /** @type {InitialConstruct} */
- export const flow = {tokenize: initializeFlow}
- /**
- * @this {TokenizeContext}
- * Self.
- * @type {Initializer}
- * Initializer.
- */
- function initializeFlow(effects) {
- const self = this
- const initial = effects.attempt(
- // Try to parse a blank line.
- blankLine,
- atBlankEnding,
- // Try to parse initial flow (essentially, only code).
- effects.attempt(
- this.parser.constructs.flowInitial,
- afterConstruct,
- factorySpace(
- effects,
- effects.attempt(
- this.parser.constructs.flow,
- afterConstruct,
- effects.attempt(content, afterConstruct)
- ),
- types.linePrefix
- )
- )
- )
- return initial
- /** @type {State} */
- function atBlankEnding(code) {
- assert(
- code === codes.eof || markdownLineEnding(code),
- 'expected eol or eof'
- )
- if (code === codes.eof) {
- effects.consume(code)
- return
- }
- effects.enter(types.lineEndingBlank)
- effects.consume(code)
- effects.exit(types.lineEndingBlank)
- self.currentConstruct = undefined
- return initial
- }
- /** @type {State} */
- function afterConstruct(code) {
- assert(
- code === codes.eof || markdownLineEnding(code),
- 'expected eol or eof'
- )
- if (code === codes.eof) {
- effects.consume(code)
- return
- }
- effects.enter(types.lineEnding)
- effects.consume(code)
- effects.exit(types.lineEnding)
- self.currentConstruct = undefined
- return initial
- }
- }
|