Это происходит в моей локальной среде разработки, на живом форуме Discourse https://discourse.gohugo.io/ и в песочнице Discourse.
В целом, когда у fenced-блока кода не указан язык, срабатывает автоопределение. В обычном использовании Highlight.JS (в Node.js или браузере) это всегда успешно завершается, выбирая какой-либо язык.
Кажется, Discourse сохраняет такие блоки как <code class="lang-auto">, что не является валидным языком ![]()
Я пообщался с AI-ботом ask.discourse.cm…30386:
on сказал, что вы делаете некоторую магию ВРЕМЯ ВЫПОЛНЕНИЯ, удаляя “lang-auto”, а затем позволяете highlight.js снова выполнить автоопределение. Похоже, что это обновление не всегда происходит ДО того, как highlight.JS обрабатывает код. Таким образом, это выглядит как особенность интеграции highlight.js и реализации автоопределения в Discourse.
Сброс языка по умолчанию также не поможет, потому что тогда “удаление lang-auto” не сработает, и похоже, что способ Discourse не перезапускает автоопределение.
- ручное указание языка работает всегда — как для встроенных, так и для пользовательских (шаблоны Hugo) языков, добавленных через PluginAPI (registerHLJSLanguage) как компонент темы.
- без указания языка происходит сбой в зависимости от гонки состояний content() и таймингов.
Установка языка по умолчанию в “text” не подойдет, потому что мы хотим, чтобы он подсвечивался, и нам нужно автоопределение для удобства (и оно работает…).
Вот пример Markdown, где второй блок кода не работает (конечно, только если язык по умолчанию установлен в “auto”). Легко воспроизводится на https://try.discourse.org/
и в течение 24 часов: Failed Discourse Autodetection breaks rendering of fenced code blocks - support - Discourse Demo
# Это работает
```
{{ $currentPagemd5 := md5 $currentPage.File.Path }}
{{ $currentPagemd5ext := (print $currentPagemd5 ".json")}}
```
# Это не сработало и назначило "lang-auto"
```
{{ $currentPage := . }}
{{ $jsonFile := "" }}
{{ with $currentPage.File }}
{{ $currentPagemd5 := md5 $currentPage.File.Path }}
{{ $currentPagemd5ext := (print $currentPagemd5 ".json")}}
{{ $files := readDir "data/commits/" }}
{{if gt (len $files ) 0}}
<div class="bord-bas"></div>
<div>
<details>
<summary>Изменения на странице</summary>
<div>
{{ range $files }}
{{ if eq .Name $currentPagemd5ext }}
{{ $jsonFile := $currentPagemd5 }}
{{ $data := index $.Site.Data.commits $jsonFile }}
<ul>
{{ range $data }}
<li>
{{ dateFormat "02/01/2006" .commit_date }} : {{ trim .message "\n" }} ({{ .author }})
</li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
</details>
</div>
{{ end }}
{{ end }}
```
