이 문제는 제 개발 환경, 라이브 디스커스 포럼(https://discourse.gohugo.io/) 및 디스커스 플레이그라운드에서 발생합니다.
일반적으로 펜스 코드 블록(fenced code block)에 언어가 설정되지 않은 경우 자동 감지가 수행됩니다. 이는 일반적인 Highlight.JS 사용 환경(노드 또는 브라우저)에서는 항상 무언가를 선택하여 성공합니다.
디스커스는 이러한 블록을 <code class="lang-auto">로 저장하는 것 같습니다. 이는 유효한 언어가 아닙니다. ![]()
AI 봇 ask.discourse.cm…30386과 대화했는데,
런타임 시 "lang-auto"를 제거하는 마법을 부린 다음 highlight.js가 자동 감지 작업을 다시 수행하게 한다고 했습니다. 이 업데이트가 항상 highlight.JS가 코드를 처리하기 이전에 수행되는 것은 아닌 것 같습니다. 따라서 이는 디스커스 내 highlight.js 통합 및 자동 감지 구현의 버그로 보입니다.
기본 언어를 해제하는 것도 작동하지 않습니다. 그렇게 하면 "lang-auto 제거"가 작동하지 않고, 디스커스 방식은 자동 감지를 다시 수행하지 않는 것으로 보입니다.
- 언어를 수동으로 설정하면 항상 작동합니다. 내장 언어와 PluginAPI(registerHLJSLanguage)를 통해 테마 컴포넌트로 추가된 사용자 정의 언어(hugo-templates) 모두 해당됩니다.
- 언어가 없으면 콘텐츠() 레이스 컨디션과 타이밍에 따라 실패합니다.
기본 언어를 "text"로 설정하는 것은 해결책이 될 수 없습니다. 우리는 하이라이팅이 필요하며, 사용성을 위해 자동 감지가 필요합니다(그리고 실제로 작동하니까요…).
여기 마크다운 예시가 있습니다. 두 번째 코드 블록이 실패합니다(물론 기본 언어가 "auto"로 설정된 경우에만). 아래 마크다운으로 https://try.discourse.org/에서 쉽게 재현할 수 있습니다.
그리고 24시간 이내: https://try.discourse.org/t/failed-discourse-autodetection-breaks-rendering-of-fenced-code-blocks/1504
# This works
```
{{ $currentPagemd5 := md5 $currentPage.File.Path }}
{{ $currentPagemd5ext := (print $currentPagemd5 ".json")}}
```
# This failed and assigned "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>Changements de la page</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 }}
```
