UNPKG

markdown-parser-react

Version:

A lightweight and configurable Markdown renderer for React and Next.js with syntax highlighting, definition lists, images, math and table support.

3 lines (2 loc) 6.35 kB
import e,{useMemo as t}from"react";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var l in r)({}).hasOwnProperty.call(r,l)&&(e[l]=r[l])}return e},r.apply(null,arguments)}function l(l){var n=l.content,s=l.options,a=l.className,i=l.style,c=l.asArticle,o=void 0!==c&&c,m=l.id,u=l.aria,p=t(function(){try{return function(t,l){void 0===l&&(l={});var n=l.langPrefix,s=void 0===n?"language-":n,a=l.customClasses,i=void 0===a?{}:a,c=l.customStyles,o=void 0===c?{}:c,m=l.linkTarget,u=void 0===m?"_blank":m,p=l.maxNestingLevel,d=void 0===p?6:p,g=t.trim().split(/\r\n|\n/),f=[],h=!1,v=null,y=[],k=0,E=0,x=function(e,t){void 0===t&&(t={});var l=r({},o[e],t.style),n=i[e]?i[e]+(t.className?" "+t.className:""):t.className;return r({},t,{style:Object.keys(l).length>0?l:void 0,className:n||void 0})},b=function(e){if(!e)return"";var t=[{regex:/\$(.+?)\$/g,replace:function(e,t){return'<span class="math-inline">'+t+"</span>"}},{regex:/~~(.+?)~~/g,replace:"<del>$1</del>"},{regex:/\^(.+?)\^/g,replace:"<sup>$1</sup>"},{regex:/~(.+?)~/g,replace:"<sub>$1</sub>"},{regex:/==(.+?)==/g,replace:"<mark>$1</mark>"},{regex:/\*\*\*(.+?)\*\*\*/g,replace:"<strong><em>$1</em></strong>"},{regex:/___(.+?)___/g,replace:"<strong><em>$1</em></strong>"},{regex:/\*\*(.+?)\*\*/g,replace:"<strong>$1</strong>"},{regex:/__(.+?)__/g,replace:"<strong>$1</strong>"},{regex:/\*(.+?)\*/g,replace:"<em>$1</em>"},{regex:/_(.+?)_/g,replace:"<em>$1</em>"},{regex:/`([^`]+)`/g,replace:"<code>$1</code>"},{regex:/\[([^\]]+)\]\(([^)"'\s]+)(?:\s+"([^"]+)")?\)/g,replace:function(e,t,l,n){var s=x("links",r({href:l},n&&{title:n},{target:u,rel:"_blank"===u?"noopener noreferrer":void 0}));return"<a "+Object.entries(s).filter(function(e){return void 0!==e[1]}).map(function(e){return e[0]+'="'+e[1]+'"'}).join(" ")+">"+t+"</a>"}}];return t.reduce(function(e,t){return e.replace(t.regex,t.replace)},e)};return g.forEach(function(t,l){if(E>0)E--;else if(k>d)f.push(/*#__PURE__*/e.createElement("p",{key:"error-"+l},"Maximum nesting level reached"));else{if(l<g.length-1){var n=t.trim(),a=g[l+1].trim();if(""!==n&&!n.startsWith(":")&&a.startsWith(":")){for(var i=n,c=[],o=l+1;o<g.length&&g[o].trim().startsWith(":");)c.push(g[o].trim().slice(1).trim()),o++;return E=c.length,void f.push(/*#__PURE__*/e.createElement("dl",r({key:"dl-"+l},x("lists")),/*#__PURE__*/e.createElement("dt",null,b(i)),c.map(function(t,r){/*#__PURE__*/return e.createElement("dd",{key:r},b(t))})))}}if(/^(\s*)-\s\[(x| )\]/.test(t.trim())){var m=(t.match(/^\s*/)||[""])[0].length,u=t.includes("[x]"),p=t.replace(/^(\s*)-\s\[(x| )\]\s*/,"");return k=Math.floor(m/2),void f.push(/*#__PURE__*/e.createElement("div",r({key:"task-"+l},x("lists"),{style:{marginLeft:20*k+"px"}}),/*#__PURE__*/e.createElement("input",{type:"checkbox",checked:u,readOnly:!0}),/*#__PURE__*/e.createElement("span",null,b(p))))}if(/^#{1,6}\s/.test(t.trim())){var _,$=(null==(_=t.match(/^#{1,6}/))?void 0:_[0].length)||1,N=t.replace(/^#{1,6}\s/,""),j=N.match(/\{#([^}]+)\}/),q=j?j[1]:void 0,O=N.replace(/\{#([^}]+)\}/,"").trim();f.push(/*#__PURE__*/e.createElement("h"+$,r({key:"h-"+l,id:q},x("headings")),b(O)))}else if(/^```(\S+)?(\s+\{.*\})?$/.test(t.trim()))if(h=!h){var W=t.trim().match(/^```(\S+)?/);v=(null==W?void 0:W[1])||null,y=[]}else{var w=y.join("\n");f.push(/*#__PURE__*/e.createElement("pre",r({key:"code-"+l},x("codeBlocks")),/*#__PURE__*/e.createElement("code",{className:v?""+s+v:void 0},w))),y=[],v=null}else if(h)y.push(t);else if(/^>\s/.test(t.trim())){var L=t.match(/^>\s?(.+?)(?:\s+--\s+(.+))?$/);if(L){var M=L[1],S=L[2];return void f.push(/*#__PURE__*/e.createElement("blockquote",r({key:"quote-"+l},x("blockquotes")),b(M),S&&/*#__PURE__*/e.createElement("footer",null,"— ",S)))}f.push(/*#__PURE__*/e.createElement("blockquote",r({key:"quote-"+l},x("blockquotes")),b(t.trim().replace(/^>\s/,""))))}else if(/^\|(.+\|)+/.test(t.trim())){if(l>0&&/^\|(.+\|)+/.test(g[l-1].trim()))return;if(!/^\|(\s*:?-+:?\s*\|)+/.test(t.trim())){var A=[t.trim()],B=[];if(l+1<g.length&&/^\|(\s*:?-+:?\s*\|)+/.test(g[l+1].trim())){var P=g[l+1].trim();B.push.apply(B,P.split("|").slice(1,-1).map(function(e){return e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"})),l++}for(;l+1<g.length&&/^\|(.+\|)+/.test(g[l+1].trim())&&!/^\|(\s*:?-+:?\s*\|)+/.test(g[l+1].trim());)A.push(g[l+1].trim()),l++;if(A.length>0){var T=A[0].split("|").slice(1,-1).map(function(e){return e.trim()}),C=x("tables");f.push(/*#__PURE__*/e.createElement("table",r({key:"table-"+l},C),/*#__PURE__*/e.createElement("thead",null,/*#__PURE__*/e.createElement("tr",null,T.map(function(t,r){/*#__PURE__*/return e.createElement("th",{key:r,style:{textAlign:B[r]||"left"}},b(t))}))),/*#__PURE__*/e.createElement("tbody",null,A.slice(1).map(function(t,r){/*#__PURE__*/return e.createElement("tr",{key:r},t.split("|").slice(1,-1).map(function(t,r){/*#__PURE__*/return e.createElement("td",{key:r,style:{textAlign:B[r]||"left"}},b(t.trim()))}))}))))}}}else if(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"([^"]+)")?\)/.test(t.trim())){var H=t.trim().match(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"([^"]+)")?\)/);if(H){var I=H[1],z=H[2],D=H[3];f.push(/*#__PURE__*/e.createElement("img",r({key:"img-"+l,src:void 0===z?"":z,alt:void 0===I?"":I,title:(void 0===D?"":D)||void 0},x("images"))))}}else{if(/^(\s*)([-*+]|\d+\.)\s/.test(t.trim())){var F=(t.match(/^\s*/)||[""])[0].length,G=/^\s*\d+\./.test(t),J=t.replace(/^(\s*)([-*+]|\d+\.)\s/,"");return k=Math.floor(F/2),void f.push(/*#__PURE__*/e.createElement(G?"ol":"ul",r({key:"list-"+l},x("lists"),{style:{marginLeft:20*k+"px"}}),/*#__PURE__*/e.createElement("li",null,b(J))))}var K=b(t.trim());K.trim()&&f.push(/*#__PURE__*/e.createElement("p",r({key:"p-"+l},x("paragraphs")),/*#__PURE__*/e.createElement("span",{dangerouslySetInnerHTML:{__html:K}})))}}}),f}(n,s)}catch(t){return console.error("Error parsing markdown:",t),[/*#__PURE__*/e.createElement("p",{key:"error"},"Error parsing markdown content")]}},[n,s]),d=r({className:a?"markdown-container "+a:"markdown-container",style:i,id:m},(null==u?void 0:u.label)&&{"aria-label":u.label},(null==u?void 0:u.describedBy)&&{"aria-describedby":u.describedBy});/*#__PURE__*/return e.createElement(o?"article":"div",r({},d),p)}export{l as default}; //# sourceMappingURL=lib.module.js.map