Настройка поддерживаемых языков программирования для подсветки синтаксиса

: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 лайков

Я хочу добавить Solidity — язык, который не входит в стандартную поставку highlight.js. Он доступен в этом пакете: GitHub - highlightjs/highlightjs-solidity · GitHub

Не уверен, как это сделать. Я добавил его в настройки Discourse. Система сама найдёт пакет и всё настроит, или мне нужно вручную разместить этот дополнительный JavaScript-пакет где-то ещё? Буду признателен за подсказку :slight_smile:

1 лайк

Я тоже заинтересован в этом, чтобы добавить подсветку синтаксиса языка SuperCollider через GitHub - highlightjs/highlightjs-supercollider · GitHub

1 лайк

Поднимаю тему. Если мы хотим добавить поддержку подсветки синтаксиса для языков, которых ещё нет в highlight.js, есть ли способ сделать это напрямую, например, через компонент темы, или нам нужно, чтобы разработчики upstream highlight.js приняли наш PR с дополнительными определениями синтаксиса?

Я спрашиваю, потому что существует довольно экзотическая пара языков: Archetype Description Language (ADL) и Archetype Query Language (AQL), которые владельцы discourse.openehr.org хотели бы добавить в список поддерживаемых для подсветки синтаксиса. У них есть техническая возможность создать парсер/подсветчик, им просто нужно понять, как заставить это работать в Discourse.

3 лайка

Это вполне реализуемо как компонент темы! Как только вы подготовите скрипт HighlightJS, напишите мне здесь, и я помогу вам создать #theme-component.

3 лайка

Спасибо @Falco! Я соберу скрипт и напишу, когда будет готово.

3 лайка

За последнюю неделю или две я заметил, что подсветка синтаксиса, похоже, не срабатывает, когда должна. Смотрите пример здесь. Когда я указываю язык (в приведённом выше случае — Java), цвета применяются.

Вот ещё один пример для XML:
https://developer.sailpoint.com/discuss/t/get-application-roles-as-well-as-search-for-the-roles/78194?u=derek_putnam

У нас десятки языков, которые должны определяться. Я вижу, что под этим параметром указано, что слишком большое их количество может привести к ухудшению производительности, но я не думаю, что мы что-то недавно добавляли.