You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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的格式会“渗透”进来,而且只影响缩进块的第一行,就像下面这张图显示的那样:

Klipper语法高亮异常截图

我也做了一个代码调试环境可以直接测试。

有没有大佬能给点解决思路?提前谢谢大家了!

备注:内容来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:48:00