Files
voidraft/frontend/src/views/editor/extensions/codeblock/lang-parser/codeblock-lang.ts
2025-06-18 21:19:19 +08:00

65 lines
1.2 KiB
TypeScript

/**
* 代码块语言支持
* 提供多语言代码块支持
*/
import { parser } from "./parser.js";
import { configureNesting } from "./nested-parser";
import {
LRLanguage,
LanguageSupport,
foldNodeProp,
} from "@codemirror/language";
import { styleTags, tags as t } from "@lezer/highlight";
import { json } from "@codemirror/lang-json";
/**
* 折叠节点函数
*/
function foldNode(node: any) {
return { from: node.from, to: node.to - 1 };
}
/**
* 代码块语言定义
*/
export const CodeBlockLanguage = LRLanguage.define({
parser: parser.configure({
props: [
styleTags({
BlockDelimiter: t.tagName,
}),
foldNodeProp.add({
BlockContent(node: any) {
return { from: node.from, to: node.to - 1 };
},
}),
],
wrap: configureNesting(),
}),
languageData: {
commentTokens: { line: ";" }
}
});
/**
* 创建代码块语言支持
*/
export function codeBlockLang() {
let wrap = configureNesting();
let lang = CodeBlockLanguage.configure({ dialect: "", wrap: wrap });
return [
new LanguageSupport(lang, [json().support]),
];
}
/**
* 获取代码块语言扩展
*/
export function getCodeBlockLanguageExtension() {
return codeBlockLang();
}