| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /**
- * @import {
- * InitialConstruct,
- * Initializer,
- * State,
- * TokenizeContext,
- * Token
- * } from 'micromark-util-types'
- */
- import { factorySpace } from 'micromark-factory-space';
- import { markdownLineEnding } from 'micromark-util-character';
- /** @type {InitialConstruct} */
- export const content = {
- tokenize: initializeContent
- };
- /**
- * @this {TokenizeContext}
- * Context.
- * @type {Initializer}
- * Content.
- */
- function initializeContent(effects) {
- const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);
- /** @type {Token} */
- let previous;
- return contentStart;
- /** @type {State} */
- function afterContentStartConstruct(code) {
- if (code === null) {
- effects.consume(code);
- return;
- }
- effects.enter("lineEnding");
- effects.consume(code);
- effects.exit("lineEnding");
- return factorySpace(effects, contentStart, "linePrefix");
- }
- /** @type {State} */
- function paragraphInitial(code) {
- effects.enter("paragraph");
- return lineStart(code);
- }
- /** @type {State} */
- function lineStart(code) {
- const token = effects.enter("chunkText", {
- contentType: "text",
- previous
- });
- if (previous) {
- previous.next = token;
- }
- previous = token;
- return data(code);
- }
- /** @type {State} */
- function data(code) {
- if (code === null) {
- effects.exit("chunkText");
- effects.exit("paragraph");
- effects.consume(code);
- return;
- }
- if (markdownLineEnding(code)) {
- effects.consume(code);
- effects.exit("chunkText");
- return lineStart;
- }
- // Data.
- effects.consume(code);
- return data;
- }
- }
|