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(parts[2]) + ""; } function parseParagraph(text) { 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;