var ume = (function() {
function normalise(text) {
return text.replace(/\s+/g, " ").trim();
}
function escapeEntities(text) {
return text.replace(/&/g, '&').replace(//g, '>');
}
const BOLD_ITALIC_REGEX = /(?:(\W|^)(\*)|(\*)(\W|$)|(\W|^)(_)|(_)(\W|$))/;
function parseInlines(text) {
const parts = text.split(BOLD_ITALIC_REGEX);
if(parts.filter(function(part) { return part == "*"; }).length % 2 != 0) return text;
if(parts.filter(function(part) { return part == "_"; }).length % 2 != 0) return text;
var inBold = false;
var inItalic = false;
var html = [];
for(const part of parts) {
if(part == "*") {
inBold = !inBold;
html.push(inBold ? "" : ""); //Note that in_bold has been inverted, so this is inverted as well
}
else if(part == "_") {
inItalic = !inItalic;
html.push(inItalic ? "" : ""); //Note that in_italic has been inverted, so this is inverted as well
}
else {
html.push(part);
}
}
return html.join("");
}
function parseHeading(text) {
const parts = text.match(/^(#+) (.*)$/);
return "
" + parseInlines(text) + "
"; } return function(text) { const nodes = text.split(/(\r?\n){2,}/g); var html = []; for(const node of nodes) { const cleanedNode = escapeEntities(normalise(node)); if(cleanedNode.startsWith("#")) html.push(parseHeading(cleanedNode)); else html.push(parseParagraph(cleanedNode)); } return html.join(""); } })(); if(typeof module === "object" && typeof module.exports === "object") module.exports = ume;