@ztl-uwu/nuxt-content
Version:
Write your content inside your Nuxt app
155 lines (154 loc) • 3.85 kB
JavaScript
import { markdownLineEnding, markdownSpace } from "micromark-util-character";
import { createTokenizer } from "./create-tokenizer.js";
function initializeDocument(effects) {
const self = this;
const delimiter = (this.parser.delimiter || ",").charCodeAt(0);
return enterRow;
function enterRow(code) {
return effects.attempt(
{ tokenize: attemptLastLine },
(code2) => {
effects.consume(code2);
return enterRow;
},
(code2) => {
effects.enter("row");
return enterColumn(code2);
}
)(code);
}
function enterColumn(code) {
effects.enter("column");
return content(code);
}
function content(code) {
if (code === null) {
effects.exit("column");
effects.exit("row");
effects.consume(code);
return content;
}
if (code === 34) {
return quotedData(code);
}
if (code === delimiter) {
if (self.previous === delimiter || markdownLineEnding(self.previous) || self.previous === null) {
effects.enter("data");
effects.exit("data");
}
effects.exit("column");
effects.enter("columnSeparator");
effects.consume(code);
effects.exit("columnSeparator");
effects.enter("column");
return content;
}
if (markdownLineEnding(code)) {
effects.exit("column");
effects.enter("newline");
effects.consume(code);
effects.exit("newline");
effects.exit("row");
return enterRow;
}
return data(code);
}
function data(code) {
effects.enter("data");
return dataChunk(code);
}
function dataChunk(code) {
if (code === null || markdownLineEnding(code) || code === delimiter) {
effects.exit("data");
return content(code);
}
if (code === 92) {
return escapeCharacter(code);
}
effects.consume(code);
return dataChunk;
}
function escapeCharacter(code) {
effects.consume(code);
return function(code2) {
effects.consume(code2);
return content;
};
}
function quotedData(code) {
effects.enter("quotedData");
effects.enter("quotedDataChunk");
effects.consume(code);
return quotedDataChunk;
}
function quotedDataChunk(code) {
if (code === 92) {
return escapeCharacter(code);
}
if (code === 34) {
return effects.attempt(
{ tokenize: attemptDoubleQuote },
(code2) => {
effects.exit("quotedDataChunk");
effects.enter("quotedDataChunk");
return quotedDataChunk(code2);
},
(code2) => {
effects.consume(code2);
effects.exit("quotedDataChunk");
effects.exit("quotedData");
return content;
}
)(code);
}
effects.consume(code);
return quotedDataChunk;
}
}
function attemptDoubleQuote(effects, ok, nok) {
return startSequence;
function startSequence(code) {
if (code !== 34) {
return nok(code);
}
effects.enter("quoteFence");
effects.consume(code);
return sequence;
}
function sequence(code) {
if (code !== 34) {
return nok(code);
}
effects.consume(code);
effects.exit("quoteFence");
return (code2) => ok(code2);
}
}
function attemptLastLine(effects, ok, nok) {
return enterLine;
function enterLine(code) {
if (!markdownSpace(code) && code !== null) {
return nok(code);
}
effects.enter("emptyLine");
return continueLine(code);
}
function continueLine(code) {
if (markdownSpace(code)) {
effects.consume(code);
return continueLine;
}
if (code === null) {
effects.exit("emptyLine");
return ok(code);
}
return nok(code);
}
}
export const parse = (options) => {
return createTokenizer(
{ ...options },
{ tokenize: initializeDocument },
void 0
);
};