Проблема с форматированием блоков кода в Discourse — красный текст и нежелательное выделение

Я столкнулся с проблемой форматирования блоков кода в Discourse. При публикации кода на Python некоторые его части (например, URL-адреса и пути) подсвечиваются красным или форматируются некорректно, как показано на скриншоте ниже:

Описание проблемы

  • Когда я публикую код на Python, используя тройные обратные кавычки для блоков кода, отдельные части текста (например, символы подчеркивания в URL или путях) подсвечиваются красным или отображаются с ошибками форматирования.
  • Я пробовал экранировать символы, использовать HTML-сущности и отключать подсветку синтаксиса, не указывая язык, но проблема сохраняется.

Пример кода

Вот фрагмент кода, вызывающий проблемы (Python):

import degirum as dg
zoo = dg.connect(dg.CLOUD, “https://cs.degirum.com”, “”)
model = zoo.load_model(“mobilenet_v2_ssd_coco–300x300_quant_n2x_orca_1”)
result = model(“https://docs.degirum.com/images/samples/TwoCats.jpg”)
display(result.image_overlay)

Что я пробовал

  • Экранирование символов подчеркивания с помощью обратного слэша.
  • Использование HTML-сущностей для замены символов подчеркивания.
  • Отключение подсветки синтаксиса путем не указания python в блоке кода.
  • Публикация кода как простого текста без какого-либо форматирования.

Информация о настройках

  • В настройках подсвечиваются следующие языки:
  • bash, c, cpp, csharp, css, diff, go, graphql, ini, java, javascript, json, kotlin, lua, makefile, markdown, objectivec, perl, php, php-template, plaintext, python, python-repl, r, ruby, rust, scss, shell, sql, swift, typescript, xml, yaml, wasm

Запрос на поддержку

  • Сталкивался ли кто-то ещё с этой проблемой?
  • Есть ли рекомендуемый способ предотвратить некорректную интерпретацию частей кода в Discourse?
  • Есть ли какие-либо настройки или конфигурации, которые мне следует проверить, так как они могут влиять на отображение блоков кода?

Я не очень знаком с системой подсветки синтаксиса и её настройками в целом, но если вы просто хотите убрать красный текст, вы можете использовать CSS в теме вашего сайта:

code.language-python span {
    color: inherit;
}

Красный цвет используется для обозначения строк, поэтому, если вы хотите просто изменить его на другой, вы можете сделать что-то вроде этого:

code.language-python span.hljs-string {
    color: #FFF; /* Замените на нужный цвет */
}

Помимо красного текста, есть ли другие части, которые отображаются некорректно?

Спасибо за ваше предложение, @bryce! Я попробую настроить CSS в теме нашего сайта, чтобы решить проблему с красным текстом.

Я попробую настроить CSS в теме нашего сайта, чтобы решить проблему с красным текстом.

Думаю, основная проблема в том, что шрифт на моем первоначальном скриншоте не отформатирован как код — в нем отсутствует моноширинный стиль, который обычно используется для блоков кода. В идеале я надеялся, что код будет выглядеть примерно так, с правильным шрифтом и цветом:

Screenshot 2024-08-12 at 12.04.53 PM

Есть ли способ обеспечить отображение кода моноширинным шрифтом, похожим на тот, что в этом примере?

Помимо этого, я не заметил других серьезных проблем с форматированием, но продолжу тестировать и сообщу, если возникнут ещё какие-либо вопросы.

Ещё раз спасибо за помощь!

Цвета подсветки можно изменить, переопределив следующие CSS-переменные:

  1. --hljs-comment: используется для комментариев в коде
  2. --hljs-number: используется для числовых значений в коде
  3. --hljs-string: используется для строковых значений в коде
  4. --hljs-literal: используется для литеральных значений в коде
  5. --hljs-tag: используется для тегов HTML/XML
  6. --hljs-attribute: используется для атрибутов в тегах HTML/XML
  7. --hljs-symbol: используется для символов в коде
  8. --hljs-bg: используется для цвета фона блоков кода
  9. --hljs-builtin-name: используется для имен встроенных функций

Например, чтобы изменить цвет строк:

:root {
   --hljs-string: pink;
}

Похоже, что hljs (используемая библиотека подсветки) может не поддерживать подсветку идентификаторов Python, таких как degirum в вашем примере, но вы сможете добиться близкого результата, изменив другие цвета.

Что касается шрифта — это странно: блоки кода по умолчанию должны отображаться моноширинным шрифтом. Рекомендую перепроверить вашу тему, чтобы убедиться, что там ничего не переопределяется.

Чтобы прояснить ситуацию: в данный момент мы используем тему Default без дополнительных компонентов, поэтому странно, что моноширинный шрифт по умолчанию не применяется к блокам кода. Похоже, что ничто его не переопределяет.

Для справки: я работаю в Chrome версии 127.0.6533.100 на macOS 14.6.1.

Можете ли вы воспроизвести проблему на try.discourse.org?

Я попробовал, но ссылки не были выделены.

Я протестировал код на try.discourse.org, и результаты показаны на скриншоте ниже:

Шрифт выглядит правильно, а ссылки подсвечиваются, как и ожидалось. Однако в нашем сообществе я всё ещё сталкиваюсь с проблемой: шрифт отображается некорректно, а ссылки не подсвечиваются так, как должны.

Не совсем понимаю, почему возникает это расхождение.

Для справки, вот ссылка на страницу в нашем сообществе.

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

Значит, проблема в каком-то плагине, теме или компоненте.

Это подсветка Java

а на вашем форуме — Makefile

Существует руководство по Selecting the programming language used in code blocks
Вы также можете выбрать язык по умолчанию в настройках сайта.

Скриншот на вашем форуме был сделан без безопасного режима, поэтому у меня шрифт моноширинный.

Спасибо вам обоим за то, что нашли время помочь мне с этим. Хорошо знать, что шрифт отображается моноширинным у других.

Поскольку у меня он отображается некорректно, возможно, это проблема, специфичная для моей конфигурации или среды. У меня он отображается неправильно как в Chrome, так и в Safari (обе последние версии). Также он отображается некорректно у других сотрудников нашей организации на ПК.

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

Это, похоже, исключает проблему с моим основным окружением, так как проблема наблюдается на разных устройствах.

Пытались ли вы отключить настройки темы в безопасном режиме?

https://community.degirum.com/t/pysdk-quick-start-guide/71?safe_mode=no_themes

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

Это сбивает с толку, поскольку мы используем тему «По умолчанию» без дополнительных компонентов, поэтому я не понимаю, что может вызывать проблему в обычном режиме.

Вот наши настройки темы по умолчанию:

Так я и ожидал. Эти строки отображаются другим цветом, чтобы вы могли быстро понять, что это строки. Разве не так это выглядит в вашем текстовом редакторе?

Кажется, вам просто нужно изменить SiteSetting.default_code_lang на “text” или “”. Также есть настройка highlighted_languages. Я почти уверен, что здесь они изменили язык кода по умолчанию на что-то вроде text, так что

Это выглядит так:

result=model("https://big.bang")

а если я принудительно укажу ```python, то это будет выглядеть так:

result=model("https://big.bang")

Язык кода по умолчанию был установлен в auto. Я только что изменил его на text, но на моей стороне ничего не изменилось.

Вот наши подсвечиваемые языки:

Вот как это выглядит в моем текстовом редакторе:

Когда я посмотрел, автоопределение посчитало это Makefile, а не Python.

Вы указали язык программирования для блока кода в своих сообщениях?

Вот как это выглядит, когда я добавляю Python в блок кода:

Поскольку я управляю сообществом, моя цель — видеть это так, как его видят конечные пользователи. Как вы можете заметить справа, это выглядит не совсем правильно.

Что вы добавили в общее: CSS?