Configure which programming languages are available for syntax highlighting

:bookmark: Это руководство объясняет, как настроить доступные языки программирования для подсветки синтаксиса в Discourse.

:person_raising_hand: Требуемый уровень доступа: Администратор

Подсветка синтаксиса улучшает читаемость блоков кода, применяя форматирование в зависимости от языка программирования. В Discourse можно настроить список языков, доступных для подсветки синтаксиса.

Настройка параметра сайта highlighted_languages

Чтобы настроить список языков программирования для подсветки синтаксиса:

  1. Перейдите в панель администратора.
  2. Откройте раздел ConfigContentPosts and Topics.
  3. Найдите параметр сайта highlighted_languages.

В этом параметре вы можете определить, какие языки будут доступны для подсветки синтаксиса. Введите названия языков, которые вы хотите поддерживать, разделяя их запятыми.

Связанные параметры

В том же разделе есть два дополнительных параметра сайта, связанных с подсветкой синтаксиса:

  • default_code_lang — Язык по умолчанию, применяемый к блокам кода, если язык не указан. По умолчанию установлено значение auto, которое пытается автоматически определить язык.
  • autohighlight_all_code — При включении применяется подсветка синтаксиса ко всем блокам <code>, даже тем, у которых не указан класс языка. По умолчанию отключено.

Добавление поддержки дополнительных языков

Если нужный вам язык не включён в highlight.js, его можно добавить с помощью компонента темы, используя плагин API api.registerHighlightJSLanguage(). Ниже приведены шаги для этого:

  1. Найдите модуль для вашего языка: Найдите определение языка для highlight.js, которое поддерживает нужный вам язык. Например:
  • Solidity: https://github.com/highlightjs/highlightjs-solidity
  • Supercollider: https://github.com/highlightjs/highlightjs-supercollider
  1. Интегрируйте модуль с помощью компонента темы:
7 лайков

I want to add solidity, a language that is not bundled with highlight.js. It is provided in this package: GitHub - highlightjs/highlightjs-solidity

I’m not sure how to do this. I’ve added it to the discourse settings. Is it going to find the package for me and take care of everything, or do I have to put this extra javascript package somewhere? I’ll appreciate some guidance :slight_smile:

1 лайк

I’m also interested in this, to support syntax highlighting of the supercollider language via GitHub - highlightjs/highlightjs-supercollider

1 лайк

Bump. If we want to add syntax highlighting support for languages not already in highlight.js, is there any way to add this directly eg via a theme component, or do we need to get the upstream highlight.js people to accept a PR with the additional syntax?

I’m asking as there is an fairly esoteric pair of languages Archetype Description Language (ADL) and Archetype Query Language (AQL) which the owners of discourse.openehr.org would like to be syntax highlight-able. They have technical capability to build a parser/highlighter, they just need to know how to make it work in a Discourse.

3 лайка

It’s totally doable as a theme component! Once you get the HighlightJS script ready ping me here and I can help you build the theme-component .

3 лайка

Thanks @Falco ! I will get the script built and will post back when ready.

3 лайка

In the last week or two, I’ve noticed that the code highlighting doesn’t seem to be registering when it should. See here for an example. When I specify a language (java in the case above), it will apply the colors.

Here is another example for XML:

We have dozens of languages to be detected. I see the subtext under this setting says that too many can cause it to perform poorly, but I don’t think we added anything recently.

CleanShot 2024-08-26 at 16.27.17