Files
echo-nexus/node_modules/@codemirror/lang-cpp/dist/index.js
T

42 lines
1.7 KiB
JavaScript

import { parser } from '@lezer/cpp';
import { LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';
/**
A language provider based on the [Lezer C++
parser](https://github.com/lezer-parser/cpp), extended with
highlighting and indentation information.
*/
const cppLanguage = /*@__PURE__*/LRLanguage.define({
name: "cpp",
parser: /*@__PURE__*/parser.configure({
props: [
/*@__PURE__*/indentNodeProp.add({
IfStatement: /*@__PURE__*/continuedIndent({ except: /^\s*({|else\b)/ }),
TryStatement: /*@__PURE__*/continuedIndent({ except: /^\s*({|catch)\b/ }),
LabeledStatement: flatIndent,
CaseStatement: context => context.baseIndent + context.unit,
BlockComment: () => null,
CompoundStatement: /*@__PURE__*/delimitedIndent({ closing: "}" }),
Statement: /*@__PURE__*/continuedIndent({ except: /^{/ })
}),
/*@__PURE__*/foldNodeProp.add({
"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList": foldInside,
BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }
})
]
}),
languageData: {
commentTokens: { line: "//", block: { open: "/*", close: "*/" } },
indentOnInput: /^\s*(?:case |default:|\{|\})$/,
closeBrackets: { stringPrefixes: ["L", "u", "U", "u8", "LR", "UR", "uR", "u8R", "R"] }
}
});
/**
Language support for C++.
*/
function cpp() {
return new LanguageSupport(cppLanguage);
}
export { cpp, cppLanguage };