数通智联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

48 lines
1.1 KiB

"use strict";
const JsxLikeTokenizer = require("./jsx-like-tokenizer");
const MINUS = "-".charCodeAt(0);
const LINE_FEED = "\n".charCodeAt(0);
module.exports = class AstroTokenizer extends JsxLikeTokenizer {
constructor(...args) {
super(...args);
this._hasFrontmatter = false;
}
parse() {
super.parse();
}
stateText(c) {
if (!this._hasFrontmatter) {
if (c === MINUS) {
const startIndex = this.index - this.offset;
if (
startIndex === 0 &&
this.buffer.slice(startIndex, startIndex + 3) === "---"
) {
const closeIndex = this.buffer.indexOf("\n---", startIndex + 3);
if (closeIndex >= 0) {
this.index = closeIndex + 3;
this._hasFrontmatter = true;
return;
}
}
}
if (c === LINE_FEED) {
const startIndex = this.index - this.offset;
if (this.buffer.slice(startIndex, startIndex + 4) === "\n---") {
const closeIndex = this.buffer.indexOf("\n---", startIndex + 4);
if (closeIndex >= 0) {
this.index = closeIndex + 3;
this._hasFrontmatter = true;
return;
}
}
}
}
super.stateText(c);
}
};