Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Is code formatting of double underscore + 4 spaces indention a bug?
Normal code formatting can be done by adding 4 spaces in front, no problem:
#define STUFF 123
And that turns out light blue:ish in my browser (Firefox) in some code-friendly, fixed-width font like Courier or whatever.
I just noticed that code containing double underscore and code formatted by adding 4 spaces ends up like this:
#define COUNT(...) ( 0 __VA_OPT__(COUNT1(__VA_ARGS__)) )
Now the color is wine red and part of it is in italics. But otherwise code formatted in a code-friendly font. Huh.
If we instead do 5 spaces:
#define COUNT(...) ( 0 __VA_OPT__(COUNT1(__VA_ARGS__)) )
Then it ends up as expected.
Is this is a bug or am I missing something about how code formatting/markdown works?
Screen shot of this meta post:
(In case the result isn't rendered the same way for everyone or in case the bug gets fixed in the future.)
1 answer
We use highlight.js for highlighting which has a feature to automatically guess which language a code snippet is in. Unfortunately, this relies on heuristics and can sometimes be incorrect. Although we don't display the guess (perhaps we should?), we can see what it is by inspecting the HTML manually.
In this case, it guesses the code without a leading space as Markdown (<code class="hljs language-markdown">
); presumably because it looks like a header.
However, it guesses the code with a leading space as C++ (<code class="hljs language-cpp">
).[1]
The only solution to this problem is to set the correct language, in this case presumably C, so that highlight.js doesn't need to guess. Unfortunately, there is no way to set it with the four spaces indent variant, so you'll have to use backticks.
```c
#define COUNT(...) ( 0 __VA_OPT__(COUNT1(__VA_ARGS__)) )
```
#define COUNT(...) ( 0 __VA_OPT__(COUNT1(__VA_ARGS__)) )
-
Interestingly, the current version of highlight.js detects both versions as Lisp for some reason.
↩︎
0 comment threads