/* jshint node:true, browser:true, -W044 */ // Adds highlight syntax as per RedCarpet: // // https://github.com/vmg/redcarpet // // This is ==highlighted==. It looks like this: highlighted (function () { var highlight = function () { return [ { type: 'html', filter: function (text) { var highlightRegex = /(=){2}([\s\S]+?)(=){2}/gim, preExtractions = {}, codeExtractions = {}, hashID = 0; function hashId() { return hashID += 1; } // Extract pre blocks text = text.replace(/
[\s\S]*?<\/pre>/gim, function (x) {
var hash = hashId();
preExtractions[hash] = x;
return '{gfm-js-extract-pre-' + hash + '}';
}, 'm');
// Extract code blocks
text = text.replace(/[\s\S]*?<\/code>/gim, function (x) {
var hash = hashId();
codeExtractions[hash] = x;
return '{gfm-js-extract-code-' + hash + '}';
}, 'm');
text = text.replace(highlightRegex, function (match, n, content) {
// Check the content isn't just an `=`
if (!/^=+$/.test(content)) {
return '' + content + '';
}
return match;
});
// replace pre extractions
text = text.replace(/\{gfm-js-extract-pre-([0-9]+)\}/gm, function (x, y) {
return preExtractions[y];
});
// replace code extractions
text = text.replace(/\{gfm-js-extract-code-([0-9]+)\}/gm, function (x, y) {
return codeExtractions[y];
});
return text;
}
}
];
};
// Client-side export
if (typeof window !== 'undefined' && window.Showdown && window.Showdown.extensions) {
window.Showdown.extensions.highlight = highlight;
}
// Server-side export
if (typeof module !== 'undefined') {
module.exports = highlight;
}
}());