var mdown = function (s) {
var r = s;
// detect newline format
var newline = r.indexOf('\r\n') != -1 ? '\r\n' : r.indexOf('\n') != -1 ? '\n' : ''
// h1 - h2 and hr
r = r.replace(/^== (.*)=*/gm, '
$1
');
r = r.replace(/^= (.*)=*/gm, '$1
');
r = r.replace(/^[-*][-*][-*]+/gm, '
');
// bold, italics
r = r.replace(/\*\*(.*?)\*\*/g, '$1');
r = r.replace(new RegExp('//(((?!https?://).)*?)//', 'g'), '$1');
// unordered lists
r = r.replace(/^\* (.*)/gm, '');
r = r.replace(new RegExp('' + newline + '', 'g'), newline);
// links & images
r = r.replace(/\[\[([^|]*?)\|(.*?)\]\]/g, '$2');
r = r.replace(/{{([^\]|]*?)}}/g, '
');
// split on double-newlines, then add paragraph tags when the first tag isn't a block level element
if(newline != '') {
for(var p = r.split(newline + newline), i = 0; i < p.length; i++) {
p[i] = '' + p[i] + '
';
}
r = p.join(newline + newline); // reassemble the paragraphs
}
return r;
}