UNPKG

showdown

Version:

A Markdown to HTML converter written in Javascript

39 lines (29 loc) 1.28 kB
/** * Process Markdown `<pre><code>` blocks. */ showdown.subParser('codeBlocks', function (text, options, globals) { 'use strict'; text = globals.converter._dispatch('codeBlocks.before', text, options, globals); // sentinel workarounds for lack of \A and \Z, safari\khtml bug text += '¨0'; var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g; text = text.replace(pattern, function (wholeMatch, m1, m2) { var codeblock = m1, nextChar = m2, end = '\n'; codeblock = showdown.subParser('outdent')(codeblock, options, globals); codeblock = showdown.subParser('encodeCode')(codeblock, options, globals); codeblock = showdown.subParser('detab')(codeblock, options, globals); codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines if (options.omitExtraWLInCodeBlocks) { end = ''; } codeblock = '<pre><code>' + codeblock + end + '</code></pre>'; return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar; }); // strip sentinel text = text.replace(/¨0/, ''); text = globals.converter._dispatch('codeBlocks.after', text, options, globals); return text; });