mirror of
https://github.com/showdownjs/showdown.git
synced 2024-03-22 13:30:55 +08:00
f97e072bc4
Closes #291
67 lines
2.0 KiB
JavaScript
67 lines
2.0 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
showdown.subParser('paragraphs', function (text, options, globals) {
|
|
'use strict';
|
|
|
|
text = globals.converter._dispatch('paragraphs.before', text, options, globals);
|
|
// Strip leading and trailing lines:
|
|
text = text.replace(/^\n+/g, '');
|
|
text = text.replace(/\n+$/g, '');
|
|
|
|
var grafs = text.split(/\n{2,}/g),
|
|
grafsOut = [],
|
|
end = grafs.length; // Wrap <p> tags
|
|
|
|
for (var i = 0; i < end; i++) {
|
|
var str = grafs[i];
|
|
// if this is an HTML marker, copy it
|
|
if (str.search(/~(K|G)(\d+)\1/g) >= 0) {
|
|
grafsOut.push(str);
|
|
} else {
|
|
str = showdown.subParser('spanGamut')(str, options, globals);
|
|
str = str.replace(/^([ \t]*)/g, '<p>');
|
|
str += '</p>';
|
|
grafsOut.push(str);
|
|
}
|
|
}
|
|
|
|
/** Unhashify HTML blocks */
|
|
end = grafsOut.length;
|
|
for (i = 0; i < end; i++) {
|
|
var blockText = '',
|
|
grafsOutIt = grafsOut[i],
|
|
codeFlag = false;
|
|
// if this is a marker for an html block...
|
|
while (grafsOutIt.search(/~(K|G)(\d+)\1/) >= 0) {
|
|
var delim = RegExp.$1,
|
|
num = RegExp.$2;
|
|
|
|
if (delim === 'K') {
|
|
blockText = globals.gHtmlBlocks[num];
|
|
} else {
|
|
// we need to check if ghBlock is a false positive
|
|
if (codeFlag) {
|
|
// use encoded version of all text
|
|
blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text);
|
|
} else {
|
|
blockText = globals.ghCodeBlocks[num].codeblock;
|
|
}
|
|
}
|
|
blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
|
|
|
|
grafsOutIt = grafsOutIt.replace(/(\n\n)?~(K|G)\d+\2(\n\n)?/, blockText);
|
|
// Check if grafsOutIt is a pre->code
|
|
if (/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(grafsOutIt)) {
|
|
codeFlag = true;
|
|
}
|
|
}
|
|
grafsOut[i] = grafsOutIt;
|
|
}
|
|
text = grafsOut.join('\n');
|
|
// Strip leading and trailing lines:
|
|
text = text.replace(/^\n+/g, '');
|
|
text = text.replace(/\n+$/g, '');
|
|
return globals.converter._dispatch('paragraphs.after', text, options, globals);
|
|
});
|