Подсветка кода с экранированными кавычками

Подсветка кода, похоже, игнорирует экранированные кавычки (как одинарные, так и двойные). Это означает, что если строка внутри блока кода содержит экранированные кавычки, её части подсвечиваются как обычный код. На этом форуме подсветка кода, судя по всему, отключена, поэтому я прилагаю ссылку на конкретную тему форума, где я впервые заметил эту проблему.

image
Ссылка на тему с моим скриншотом: https://unofficialnextion.com/t/set-vale-on-page2/1679/3

Дополнительные детали:

  • Указанный форум работает на версии Discourse v2.9.0.beta9
  • Подсветка кода включена для bash, cs, cpp, xml, ini, json, makefile, markdown, python, c, c-like. По умолчанию установлен cpp. Сброс этих настроек подсветки языков к значениям по умолчанию не решает проблему.
  • Проблема также проявляется в безопасном режиме
  • Проблема также возникает при экранировании одинарных кавычек внутри строки в одинарных кавычках (экранирование одинарной кавычки внутри строки в двойных кавычках и наоборот работает корректно).

С уважением,
Макс

Это библиотека highlightjs, поэтому любые ошибки следует искать в её исходном репозитории.

Также, похоже, это работает в режиме cpp?

const char* NXT_CMD_END = "\xff\xff\xff";
Serial.print("page2.t0.txt=\"Any text\"");
Serial.print(NXT_CMD_END);

Вы можете явно указать язык с помощью функции «строка информации» в блоке кода:

```cpp
ваш код здесь   
```

это создаст блок кода с подсветкой синтаксиса для C++.

Спасибо за быстрый ответ и информацию!

Действительно, подсветка C++ работает, если её явно задать. Однако, углубившись в проблему, я обнаружил ещё одно… неожиданное поведение.
Я удалил из списка подсвечиваемых языков все языки, кроме cpp, и вернул язык по умолчанию обратно в auto. Результат всё равно оказался неверным. Открытие Инспектора в Firefox показало, что код, apparently, распознаётся как vbnet — язык, который никогда не входил в список подсвечиваемых языков (ни как язык по умолчанию, ни как один из пользовательских, которые я пробовал в рамках этой проблемы)? Это должно происходить?

С уважением,
Макс

Вы пересобрали пост с блоком кода после изменения настроек?

Я перезагрузил страницу. Хотя сам пост на форуме не менялся — даже после перезапуска Firefox или перезагрузки страницы с помощью CTRL+F5 — я заметил, что предпросмотр при редактировании поста действительно использует изменённые настройки при перезагрузке страницы.

Итак, если в списке языков указан только cpp (чтобы упростить задачу), и я установлю язык по умолчанию в cpp, подсветка синтаксиса в предпросмотре редактирования поста будет корректной. Если же я установлю язык по умолчанию в auto и снова перезагружу страницу, всё перестанет работать правильно, как описано в предыдущем сообщении.

С уважением,
Макс

Перезапуск браузера не поможет. В Discourse посты «запекаются» (конвертируются из Markdown в HTML) на сервере только один раз, а полученный HTML кэшируется в базе данных. Чтобы обновить такой «запечённый» пост, его нужно «перепечь». Это может сделать сотрудник через меню с ключом в посте или автор поста, отредактировав его содержимое.

Спасибо. Пересборка приводит к тому же поведению, что и при предварительном просмотре редактирования: auto выбирает язык (vbnet), которого нет в списке языков для подсветки. Явное задание языка по умолчанию как cpp (либо в настройках форума, либо так, как вы показали здесь) работает, как сообщалось ранее.

Таким образом, остаётся вопрос: должен ли auto использовать языки, не входящие в этот список?

С уважением,
Макс