4 lines
2.8 KiB
JavaScript
4 lines
2.8 KiB
JavaScript
const O=(r,w)=>(e,o,p,n)=>{if(e.sCount[o]-e.blkIndent>=4||e.level!==0&&!w)return!1;const f=e.bMarks[o]+e.tShift[o],u=e.eMarks[o];if(e.src.charCodeAt(f)!==62)return!1;let s=f+1,i=e.sCount[o]+1,R=!1;e.src.charCodeAt(s)===32?(s++,i++):e.src.charCodeAt(s)===9&&((e.bsCount[o]+i)%4===3?(s++,i++):R=!0);let h=i;for(;s<u;){const a=e.src.charCodeAt(s);if(a===9)h+=4-(h+e.bsCount[o]+(R?1:0))%4;else if(a===32)h++;else break;s++}if(h-i>=4||u-s<4||e.src.charCodeAt(s)!==91||e.src.charCodeAt(s+1)!==33)return!1;s+=2;let S="";for(;s<u;){const a=e.src.charAt(s);if(a==="]")break;S+=a,s++}if(s===u)return!1;const b=S.toLowerCase();if(!r.has(b)||(s=e.skipSpaces(s+1),s<u))return!1;const C=[],d=[],m=[],k=[],L=e.lineMax,$=e.parentType,z=[e.md.block.ruler.getRules("blockquote"),e.md.block.ruler.getRules("alert")].flat();e.parentType="alert";let t=o;for(;t<p;t++){const a=e.sCount[t]<e.blkIndent;let l=e.bMarks[t]+e.tShift[t];const _=e.eMarks[t];if(l>=_)break;let v=!1;if(e.src.charCodeAt(l++)===62&&!a){let c=e.sCount[t]+1,g=!1,T=!1;e.src.charCodeAt(l)===32?(l++,c++,g=!0):e.src.charCodeAt(l)===9&&(g=!0,(e.bsCount[t]+c)%4===3?(l++,c++):T=!0);let A=c;for(n||(C.push(e.bMarks[t]),e.bMarks[t]=l);l<_;){const J=e.src.charCodeAt(l);if(J===9)A+=4-(A+e.bsCount[t]+(T?1:0))%4;else if(J===32)A++;else break;l++}v=l>=_,n||(d.push(e.bsCount[t]),e.bsCount[t]=e.sCount[t]+1+(g?1:0),m.push(e.sCount[t]),e.sCount[t]=A-c,k.push(e.tShift[t]),e.tShift[t]=l-e.bMarks[t]);continue}if(v)break;let y=!1;for(const c of z)if(c(e,t,p,!0)){y=!0;break}if(y){e.lineMax=t,e.blkIndent!==0&&!n&&(C.push(e.bMarks[t]),d.push(e.bsCount[t]),m.push(e.sCount[t]),k.push(e.tShift[t]),e.sCount[t]-=e.blkIndent);break}n||(C.push(e.bMarks[t]),d.push(e.bsCount[t]),m.push(e.sCount[t]),k.push(e.tShift[t]),e.sCount[t]=-1)}const x=()=>{e.lineMax=L,e.parentType=$;for(let a=0;a<k.length;a++)e.bMarks[a+o]=C[a],e.tShift[a+o]=k[a],e.sCount[a+o]=m[a],e.bsCount[a+o]=d[a]};if(o+1>=t)return n||x(),!1;if(n)return!0;const j=e.blkIndent;e.blkIndent=0;const B=[o,o+1],q=[o+1,0],I=e.push("alert_open","div",1);I.markup=b,I.attrJoin("class",`markdown-alert markdown-alert-${b}`),I.map=q;const M=e.push("alert_title","",0);M.attrJoin("class","markdown-alert-title"),M.markup=b,M.content=S,M.map=B,e.md.block.tokenize(e,o+1,t);const N=e.push("alert_close","div",-1);return N.markup=b,q[1]=e.line,e.blkIndent=j,x(),!0},P=(r,{alertNames:w=["tip","warning","caution","important","note"],deep:e=!1,openRender:o,closeRender:p,titleRender:n}={})=>{r.block.ruler.before("blockquote","alert",O(new Set(w.map(f=>f.toLowerCase())),e),{alt:["paragraph","reference","blockquote","list"]}),o&&(r.renderer.rules.alert_open=o),p&&(r.renderer.rules.alert_close=p),r.renderer.rules.alert_title=n??((f,u)=>{const s=f[u];return`<p class="markdown-alert-title">${s.content[0].toUpperCase()+s.content.slice(1).toLowerCase()}</p>
|
|
`})};export{P as alert};
|
|
//# sourceMappingURL=index.js.map
|