I’d like to make a proposal/PR for a new config option in hugo/markup/highlight. It would address #8913 and possibly #8824: Code fences with no language ``` are handled differently from ```plain code fences, causing a bit of extra work in Markdown prep.
The code fence with no language doesn’t pass through Chroma, meaning the output is just:
<pre tabindex="0"><code>horses never run in the wind
</code></pre>
Whereas the output with ```plain is:
<div class="highlight">
<pre
tabindex="0"
style="
background-color: #fff;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
"
><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>horses, in fact, do love to run in the wind. The previous code block is incorrect.
</span></span></code></pre>
</div>
This isn’t a bug; the simpler behavior when there’s no language specified is defined in CommonMark. However, since Hugo already extends the syntax highlighting behavior using Chroma, I think there should be an option to effectively alias ``` to ```plain.
The problem, as I’ve encountered it, is that on the blog I maintain, most people just write ``` for plain code blocks, expecting it to be put into the same type of code block. Applying styles directly to the <pre> block is too general and could mess up <pre> blocks that have nothing to do with syntax highlighting, but using a more specific selector like .blog-content pre would be too specific; it’s nice to apply styling to div.highlight and it’d be better to not manually review every blank code block to maker sure it has a plain tag.
I’d like to add an AlwaysUseChromaLexer highlight config option, which could be enabled to assume that ``` should “alias” to ```plain. Any thoughts before I make a proposal in the repo? I’m happy to make the PR if this gets approved.