import { StreamLanguage } from "@codemirror/language"; // Source-engine .cfg syntax (server.cfg style). // Linewise. No nesting. Tokens: comment, string, number, keyword, identifier. const KEYWORDS = new Set(["exec", "alias", "bind", "unbindall", "wait"]); export const srccfgLanguage = StreamLanguage.define({ name: "srccfg", startState: () => ({}), token(stream) { if (stream.eatSpace()) return null; if (stream.match("//")) { stream.skipToEnd(); return "comment"; } if (stream.match(/^"(?:[^"\\]|\\.)*"?/)) return "string"; if (stream.match(/^-?\d+(?:\.\d+)?/)) return "number"; if (stream.match(/^[A-Za-z_][A-Za-z0-9_]*/)) { const word = stream.current(); return KEYWORDS.has(word) ? "keyword" : "variableName"; } stream.next(); return null; }, languageData: { commentTokens: { line: "//" } }, });