使用Highlight.js开发Klipper配置语法高亮时,VALUE_PART匹配异常导致缩进块格式混乱的问题求助
Highlight.js开发Klipper配置语法高亮时,VALUE_PART匹配异常导致缩进块格式混乱的问题求助
我正在为Klipper 3D打印机固件开发一个语法高亮器,这个语言包含设置元素、注释和Jinja2模板元素。一开始我只想先实现简单的高亮效果,但现在遇到了瓶颈。
高亮器代码:
hljs.registerLanguage("klipper", function (hljs) { const COMMENT = { scope: "comment", variants: [ { begin: /^\s*[#;].*$/, end: /$/ }, // Standalone comments { begin: /(?!\s)[#|;].*/, end: /$/ }, // Inline/trailing comments ], relevance: 10, } const KEY_PART = { scope: "symbol", begin: /^[^=\s]+(?=\s*[:=])/, //end: /^(?!\s).+?\s?[=:](?=(?:[^\n]*$))/, } const VALUE_PART = { scope: "addition", begin: /[:=][\s*|$]/, //end: /\r?\n$/, // Match until the end of the line end: /$/, // Match until the end of the line excludeBegin: true, // Ensure the separator is not included excludeEnd: true, } const SECTION = { scope: "addition", begin: /^\s*\[/, end: /\]/, contains: [ { scope: "title", match: /[^\]]+/, }, ], } const INDENTED_BLOCK = { scope: "deletion", begin: /^\s+/, end: /$/, relevance: 10, } return { name: "Klipper Config", aliases: ["klipper", "cfg"], disableAutodetect: true, contains: [COMMENT, SECTION, KEY_PART, VALUE_PART, INDENTED_BLOCK], } })
我的问题是没办法写出合适的正则或者设置来正确匹配VALUE_PART,举个例子:
[idle_timeout] gcode: {% if printer.pause_resume.is_paused %}
像step_pin: PC2这种简单的键值对能正常匹配,但如果键后面没有直接跟值,而是下面有一个缩进块的话,正则就失效了。这个缩进块本该被格式化为INDENTED_BLOCK,但现在VALUE_PART的格式会“渗透”进来,而且只影响缩进块的第一行,就像下面这张图显示的那样:

我也做了一个代码调试环境可以直接测试。
有没有大佬能给点解决思路?提前谢谢大家了!
备注:内容来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

