配置可用于语法高亮的编程语言

:bookmark: 本指南介绍如何配置 Discourse 中支持语法高亮的编程语言。

:person_raising_hand: 所需用户等级:管理员

语法高亮通过根据编程语言应用格式设置,增强了代码块的可读性。您可以自定义 Discourse 中可用的语法高亮语言。

配置 highlighted_languages 站点设置

要配置语法高亮的编程语言列表,请执行以下操作:

  1. 导航至管理面板。
  2. 进入 配置内容帖子与主题
  3. 找到 highlighted_languages 站点设置。

在此设置中,您可以定义哪些语言可用于语法高亮。输入您希望支持的语言名称,以逗号分隔。

相关设置

在同一区域还有两个与语法高亮相关的附加站点设置:

  • default_code_lang — 当未指定语言时,应用于代码块的默认语言。默认为 auto,即尝试自动检测语言。
  • autohighlight_all_code — 启用后,即使未指定语言类,也会对所有 <code> 块应用语法高亮。默认为关闭。

添加对其他语言的支持

如果您的目标语言未包含在 highlight.js 中,可以通过主题组件使用 api.registerHighlightJSLanguage() 插件 API 添加。以下是实现步骤:

  1. 查找对应语言的模块:找到支持您想要添加的语言的 highlight.js 语言定义。例如:
  • Solidity: https://github.com/highlightjs/highlightjs-solidity
  • Supercollider: https://github.com/highlightjs/highlightjs-supercollider
  1. 使用主题组件集成模块
  • 获取所需语言的 HighlightJS 语言定义。
  • 在 Discourse 中创建一个新的 主题组件
  • 在主题组件的 JavaScript 中,使用插件 API 注册该语言:
    api.registerHighlightJSLanguage("languageName", languageDefinitionFunction);
    
  • 请参阅 通过主题组件为 Highlight.JS 安装新语言 以获取完整示例。
7 个赞

我想添加 Solidity,这是一个未随 highlight.js 一起打包的语言。它在此包中提供:GitHub - highlightjs/highlightjs-solidity

我不确定如何做到这一点。我已经将其添加到 discourse 设置中。它会为我找到包并处理所有事情,还是我必须将这个额外的 JavaScript 包放在某个地方?我将不胜感激 :slight_smile:

1 个赞

我也对此感兴趣,以通过 GitHub - highlightjs/highlightjs-supercollider 支持 supercollider 语言的语法高亮显示。

1 个赞

Bump。如果我们想为 highlight.js 中尚未支持的语言添加语法高亮支持,是否有任何方法可以直接添加,例如通过主题组件,还是我们需要让上游 highlight.js 的人员接受一个包含附加语法的 PR?

我之所以这样问,是因为有一对相当晦涩的语言 Archetype Description Language (ADL) 和 Archetype Query Language (AQL),discourse.openehr.org 的所有者希望它们能够进行语法高亮。他们具备构建解析器/高亮器的技术能力,只是需要知道如何在 Discourse 中实现它。

3 个赞

这完全可以作为一个主题组件来实现!一旦你准备好了 HighlightJS 脚本,请在这里 ping 我,我可以帮你构建 #theme-component。

3 个赞

感谢 @Falco!我会构建脚本,准备好后会在此回复。

3 个赞

在过去一两周里,我注意到代码高亮似乎没有按预期注册。请参见此处的示例(Leaver Process Deprovisioning - #2 by Carlatto - ISC Discussion and Questions - SailPoint Developer Community Java)时,它会应用颜色。

这是另一个 XML 示例:
https://developer.sailpoint.com/discuss/t/get-application-roles-as-well-as-search-for-the-roles/78194?u=derek_putnam

我们有数十种语言需要检测。我看到此设置下的副文本说,过多的语言会导致性能下降,但我认为我们最近没有添加任何内容。