import { parser } from "./syntax.grammar"; import { LRLanguage, LanguageSupport, indentNodeProp, foldNodeProp, foldInside, delimitedIndent, } from "@codemirror/language"; import { highlighting } from "./highlight"; import { tabloidCompletion } from "./autocomplete"; import { autocompletion } from "@codemirror/autocomplete"; // Wrap parser to debug const originalParse = parser.parse.bind(parser); parser.parse = function (input, fragments, ranges) { console.log( "[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input, ); const result = originalParse(input, fragments, ranges); console.log("[PARSER] parse result:", result.toString()); return result; }; export const tabloidLanguage = LRLanguage.define({ parser: parser.configure({ props: [ indentNodeProp.add({ Block: delimitedIndent({ closing: "endOfStory", align: false }), ParenBlock: delimitedIndent({ closing: ")", align: false }), FunctionDecl: (context) => context.baseIndent + context.unit, IfStatement: (context) => context.baseIndent + context.unit, }), foldNodeProp.add({ Block: foldInside, ParenBlock: foldInside, }), highlighting, ], }), languageData: { commentTokens: {}, closeBrackets: { brackets: ["(", '"', "'"] }, autocomplete: tabloidCompletion, }, }); export function tabloid() { return new LanguageSupport(tabloidLanguage, [ autocompletion({ override: [tabloidCompletion] }), ]); } export { tabloidCompletion };