// Minimal markdown → HTML for blog posts and legal docs (headings, lists, quotes, code, emphasis, links, tables-free).
function mdInline(s){
return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
.replace(/`([^`]+)`/g,'<code>$1</code>')
.replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>')
.replace(/(^|[^*])\*([^*\n]+)\*/g,'$1<em>$2</em>')
.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2">$1</a>');
}
function mdToHtml(md){
const lines=md.replace(/\r/g,'').split('\n');const out=[];let i=0;
const slug=t=>t.toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'');
while(i<lines.length){
const l=lines[i];
if(/^```/.test(l)){const buf=[];i++;while(i<lines.length&&!/^```/.test(lines[i]))buf.push(lines[i++]);i++;
out.push('<pre><code>'+buf.join('\n').replace(/&/g,'&amp;').replace(/</g,'&lt;')+'</code></pre>');continue;}
if(/^\s*$/.test(l)){i++;continue;}
if(/^(-{3,}|\*{3,})\s*$/.test(l)){out.push('<hr>');i++;continue;}
const h=l.match(/^(#{1,4})\s+(.*)$/);
if(h){const t=mdInline(h[2]);const lvl=h[1].length;out.push(`<h${lvl} id="${slug(h[2])}">${t}</h${lvl}>`);i++;continue;}
if(/^>\s?/.test(l)){const buf=[];while(i<lines.length&&/^>\s?/.test(lines[i]))buf.push(lines[i++].replace(/^>\s?/,''));
out.push('<blockquote><p>'+mdInline(buf.join(' '))+'</p></blockquote>');continue;}
if(/^\s*([-*+]|\d+\.)\s+/.test(l)){const ordered=/^\s*\d+\./.test(l);const items=[];
while(i<lines.length&&/^\s*([-*+]|\d+\.)\s+/.test(lines[i]))items.push(mdInline(lines[i++].replace(/^\s*([-*+]|\d+\.)\s+/,'')));
out.push(`<${ordered?'ol':'ul'}>`+items.map(t=>'<li>'+t+'</li>').join('')+`</${ordered?'ol':'ul'}>`);continue;}
const buf=[];while(i<lines.length&&!/^\s*$/.test(lines[i])&&!/^(#{1,4}\s|>|```|\s*([-*+]|\d+\.)\s)/.test(lines[i]))buf.push(lines[i++]);
out.push('<p>'+mdInline(buf.join(' '))+'</p>');
}
return out.join('\n');
}
function mdHeadings(md){
return md.replace(/\r/g,'').split('\n').filter(l=>/^##\s+/.test(l)).map(l=>{const t=l.replace(/^##\s+/,'');
return{text:t,id:t.toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'')};});
}
Object.assign(window,{mdToHtml,mdHeadings});
