mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-23 22:11:09 +03:00
Avoid filtering markdown code blocks
closes #1045 - Fixed markdown code block format issue. - Added test case to verify fix.
This commit is contained in:
parent
47e507b37e
commit
1f15df41ef
20
core/shared/vendor/showdown/extensions/github.js
vendored
20
core/shared/vendor/showdown/extensions/github.js
vendored
@ -19,7 +19,7 @@
|
||||
// GFM newline and underscore modifications, happen BEFORE showdown
|
||||
type : 'lang',
|
||||
filter : function (text) {
|
||||
var preExtractions = {},
|
||||
var extractions = {},
|
||||
imageMarkdownRegex = /^(?:\{(.*?)\})?!(?:\[([^\n\]]*)\])(?:\(([^\n\]]*)\))?$/gim,
|
||||
hashID = 0;
|
||||
|
||||
@ -30,15 +30,27 @@
|
||||
// Extract pre blocks
|
||||
text = text.replace(/<pre>[\s\S]*?<\/pre>/gim, function (x) {
|
||||
var hash = hashId();
|
||||
preExtractions[hash] = x;
|
||||
extractions[hash] = x;
|
||||
return "{gfm-js-extract-pre-" + hash + "}";
|
||||
}, 'm');
|
||||
|
||||
// Extract code blocks
|
||||
text = text.replace(/```[\s\S]*```/gim, function (x) {
|
||||
var hash = hashId();
|
||||
extractions[hash] = x;
|
||||
return "{gfm-js-extract-code-" + hash + "}";
|
||||
}, 'm');
|
||||
|
||||
|
||||
//prevent foo_bar and foo_bar_baz from ending up with an italic word in the middle
|
||||
text = text.replace(/(^(?! {4}|\t)\w+_\w+_\w[\w_]*)/gm, function (x) {
|
||||
return x.replace(/_/gm, '\\_');
|
||||
});
|
||||
|
||||
text = text.replace(/\{gfm-js-extract-code-([0-9]+)\}/gm, function (x, y) {
|
||||
return extractions[y];
|
||||
});
|
||||
|
||||
// in very clear cases, let newlines become <br /> tags
|
||||
text = text.replace(/^[\w\<][^\n]*\n+/gm, function (x) {
|
||||
return x.match(/\n{2}/) ? x : x.trim() + " \n";
|
||||
@ -54,7 +66,7 @@
|
||||
});
|
||||
|
||||
text = text.replace(/\{gfm-js-extract-pre-([0-9]+)\}/gm, function (x, y) {
|
||||
return "\n\n" + preExtractions[y];
|
||||
return "\n\n" + extractions[y];
|
||||
});
|
||||
|
||||
|
||||
@ -127,4 +139,4 @@
|
||||
if (typeof window !== 'undefined' && window.Showdown && window.Showdown.extensions) { window.Showdown.extensions.github = github; }
|
||||
// Server-side export
|
||||
if (typeof module !== 'undefined') module.exports = github;
|
||||
}());
|
||||
}());
|
||||
|
@ -279,6 +279,17 @@ describe("Showdown client side converter", function () {
|
||||
});
|
||||
});
|
||||
|
||||
it("should NOT escape underscore inside of code/pre blocks", function() {
|
||||
var testPhrase = {
|
||||
input: "```\n_____\n```",
|
||||
output: /^<pre><code>_____ \n<\/code><\/pre>$/
|
||||
} ,
|
||||
processedMarkup;
|
||||
|
||||
processedMarkup = converter.makeHtml(testPhrase.input);
|
||||
processedMarkup.should.match(testPhrase.output);
|
||||
});
|
||||
|
||||
it("should NOT auto-link URLS inside of code/pre blocks", function () {
|
||||
var testPhrases = [
|
||||
{
|
||||
@ -437,4 +448,4 @@ describe("Showdown client side converter", function () {
|
||||
processedMarkup.should.match(testPhrase.output);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user