Navigation Menu

Skip to content

Commit

Permalink
Markdown: Better language detection for code blocks (#2114)
Browse files Browse the repository at this point in the history
This improves the language detection for code blocks by using only the first word instead of the whole expression and replacing some characters so languages like `c#` and `c++` are supported.
  • Loading branch information
RunDevelopment committed Jan 6, 2020
1 parent 191b411 commit d7ad48f
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
7 changes: 6 additions & 1 deletion components/prism-markdown.js
Expand Up @@ -280,7 +280,12 @@
typeof codeLang.content === 'string') {

// this might be a language that Prism does not support
var alias = 'language-' + codeLang.content.trim().split(/\s+/)[0].toLowerCase();

// do some replacements to support C++, C#, and F#
var lang = codeLang.content.replace(/\b#/g, 'sharp').replace(/\b\+\+/g, 'pp')
// only use the first word
lang = (/[a-z][\w-]*/i.exec(lang) || [''])[0].toLowerCase();
var alias = 'language-' + lang;

// add alias
if (!codeBlock.alias) {
Expand Down
2 changes: 1 addition & 1 deletion components/prism-markdown.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions tests/languages/markdown/code_block_language_detection_feature.js
@@ -0,0 +1,11 @@
module.exports = {

'```js\nlet a = 0;\n```': '<span class="token code"><span class="token punctuation">```</span><span class="token code-language">js</span>\n<span class="token code-block language-js">let a = 0;</span>\n<span class="token punctuation">```</span></span>',

'``` c++\nint a = 0;\n```': '<span class="token code"><span class="token punctuation">```</span><span class="token code-language"> c++</span>\n<span class="token code-block language-cpp">int a = 0;</span>\n<span class="token punctuation">```</span></span>',

'``` c#\nvar a = 0;\n```': '<span class="token code"><span class="token punctuation">```</span><span class="token code-language"> c#</span>\n<span class="token code-block language-csharp">var a = 0;</span>\n<span class="token punctuation">```</span></span>',

'```{r pressure, echo=FALSE}\nplot(pressure)\n```': '<span class="token code"><span class="token punctuation">```</span><span class="token code-language">{r pressure, echo=FALSE}</span>\n<span class="token code-block language-r">plot(pressure)</span>\n<span class="token punctuation">```</span></span>'

};

0 comments on commit d7ad48f

Please sign in to comment.