import{NodeType,NodeProp,NodeSet,Tree,Parser,parseMixed}from"@lezer/common";import{styleTags,tags,Tag}from"@lezer/highlight";class CompositeBlock{static create(e,t,n,s,r){return new CompositeBlock(e,t,n,s+(s<<8)+e+(t<<4)|0,r,[],[])}constructor(e,t,n,s,r,i,a){this.type=e,this.value=t,this.from=n,this.hash=s,this.end=r,this.children=i,this.positions=a,this.hashProp=[[NodeProp.contextHash,s]]}addChild(e,t){e.prop(NodeProp.contextHash)!=this.hash&&(e=new Tree(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let n=this.children.length-1;return n>=0&&(t=Math.max(t,this.positions[n]+this.children[n].length+this.from)),new Tree(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(e,t,n)=>new Tree(NodeType.none,e,t,n,this.hashProp)})}}var Type;!function(e){e[e.Document=1]="Document",e[e.CodeBlock=2]="CodeBlock",e[e.FencedCode=3]="FencedCode",e[e.Blockquote=4]="Blockquote",e[e.HorizontalRule=5]="HorizontalRule",e[e.BulletList=6]="BulletList",e[e.OrderedList=7]="OrderedList",e[e.ListItem=8]="ListItem",e[e.ATXHeading1=9]="ATXHeading1",e[e.ATXHeading2=10]="ATXHeading2",e[e.ATXHeading3=11]="ATXHeading3",e[e.ATXHeading4=12]="ATXHeading4",e[e.ATXHeading5=13]="ATXHeading5",e[e.ATXHeading6=14]="ATXHeading6",e[e.SetextHeading1=15]="SetextHeading1",e[e.SetextHeading2=16]="SetextHeading2",e[e.HTMLBlock=17]="HTMLBlock",e[e.LinkReference=18]="LinkReference",e[e.Paragraph=19]="Paragraph",e[e.CommentBlock=20]="CommentBlock",e[e.ProcessingInstructionBlock=21]="ProcessingInstructionBlock",e[e.Escape=22]="Escape",e[e.Entity=23]="Entity",e[e.HardBreak=24]="HardBreak",e[e.Emphasis=25]="Emphasis",e[e.StrongEmphasis=26]="StrongEmphasis",e[e.Link=27]="Link",e[e.Image=28]="Image",e[e.InlineCode=29]="InlineCode",e[e.HTMLTag=30]="HTMLTag",e[e.Comment=31]="Comment",e[e.ProcessingInstruction=32]="ProcessingInstruction",e[e.URL=33]="URL",e[e.HeaderMark=34]="HeaderMark",e[e.QuoteMark=35]="QuoteMark",e[e.ListMark=36]="ListMark",e[e.LinkMark=37]="LinkMark",e[e.EmphasisMark=38]="EmphasisMark",e[e.CodeMark=39]="CodeMark",e[e.CodeText=40]="CodeText",e[e.CodeInfo=41]="CodeInfo",e[e.LinkTitle=42]="LinkTitle",e[e.LinkLabel=43]="LinkLabel"}(Type||(Type={}));class LeafBlock{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}}class Line{constructor(){this.text="",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return skipSpace(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let s=t;s=t.stack[n.depth+1].value+n.baseIndent)return!0;if(n.indent>=n.baseIndent+4)return!1;let s=(e.type==Type.OrderedList?isOrderedList:isBulletList)(n,t,!1);return s>0&&(e.type!=Type.BulletList||isHorizontalRule(n,t,!1)<0)&&n.text.charCodeAt(n.pos+s-1)==e.value}const DefaultSkipMarkup={[Type.Blockquote]:(e,t,n)=>62==n.next&&(n.markers.push(elt(Type.QuoteMark,t.lineStart+n.pos,t.lineStart+n.pos+1)),n.moveBase(n.pos+(space(n.text.charCodeAt(n.pos+1))?2:1)),e.end=t.lineStart+n.text.length,!0),[Type.ListItem]:(e,t,n)=>!(n.indent-1)&&(n.moveBaseColumn(n.baseIndent+e.value),!0),[Type.OrderedList]:skipForList,[Type.BulletList]:skipForList,[Type.Document]:()=>!0};function space(e){return 32==e||9==e||10==e||13==e}function skipSpace(e,t=0){for(;tn&&space(e.charCodeAt(t-1));)t--;return t}function isFencedCode(e){if(96!=e.next&&126!=e.next)return-1;let t=e.pos+1;for(;t-1&&e.depth==t.stack.length||s<3?-1:1}function inList(e,t){for(let n=e.stack.length-1;n>=0;n--)if(e.stack[n].type==t)return!0;return!1}function isBulletList(e,t,n){return 45!=e.next&&43!=e.next&&42!=e.next||e.pos!=e.text.length-1&&!space(e.text.charCodeAt(e.pos+1))||!(!n||inList(t,Type.BulletList)||e.skipSpace(e.pos+2)=48&&r<=57;){if(s++,s==e.text.length)return-1;r=e.text.charCodeAt(s)}return s==e.pos||s>e.pos+9||46!=r&&41!=r||se.pos+1||49!=e.next)?-1:s+1-e.pos}function isAtxHeading(e){if(35!=e.next)return-1;let t=e.pos+1;for(;t6?-1:n}function isSetextUnderline(e){if(45!=e.next&&61!=e.next||e.indent>=e.baseIndent+4)return-1;let t=e.pos+1;for(;t/,ProcessingEnd=/\?>/,HTMLBlockStyle=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/i.exec(s);if(i)return e.append(elt(Type.Comment,n,n+1+i[0].length));let a=/^\?[^]*?\?>/.exec(s);if(a)return e.append(elt(Type.ProcessingInstruction,n,n+1+a[0].length));let o=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(s);return o?e.append(elt(Type.HTMLTag,n,n+1+o[0].length)):-1},Emphasis(e,t,n){if(95!=t&&42!=t)return-1;let s=n+1;for(;e.char(s)==t;)s++;let r=e.slice(n-1,n),i=e.slice(s,s+1),a=Punctuation.test(r),o=Punctuation.test(i),l=/\s|^$/.test(r),h=/\s|^$/.test(i),p=!h&&(!o||l||a),d=!l&&(!a||h||o),c=p&&(42==t||!d||a),f=d&&(42==t||!p||o);return e.append(new InlineDelimiter(95==t?EmphasisUnderscore:EmphasisAsterisk,n,s,(c?1:0)|(f?2:0)))},HardBreak(e,t,n){if(92==t&&10==e.char(n+1))return e.append(elt(Type.HardBreak,n,n+2));if(32==t){let t=n+1;for(;32==e.char(t);)t++;if(10==e.char(t)&&t>=n+2)return e.append(elt(Type.HardBreak,n,t+1))}return-1},Link:(e,t,n)=>91==t?e.append(new InlineDelimiter(LinkStart,n,n+1,1)):-1,Image:(e,t,n)=>33==t&&91==e.char(n+1)?e.append(new InlineDelimiter(ImageStart,n,n+2,1)):-1,LinkEnd(e,t,n){if(93!=t)return-1;for(let t=e.parts.length-1;t>=0;t--){let s=e.parts[t];if(s instanceof InlineDelimiter&&(s.type==LinkStart||s.type==ImageStart)){if(!s.side||e.skipSpace(s.to)==n&&!/[(\[]/.test(e.slice(n+1,n+2)))return e.parts[t]=null,-1;let r=e.takeContent(t),i=e.parts[t]=finishLink(e,r,s.type==LinkStart?Type.Link:Type.Image,s.from,n+1);if(s.type==LinkStart)for(let n=0;nt?elt(Type.URL,t+n,r+n):r==e.length&&null}}function parseLinkTitle(e,t,n){let s=e.charCodeAt(t);if(39!=s&&34!=s&&40!=s)return!1;let r=40==s?41:s;for(let s=t+1,i=!1;s=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,t){return this.text.slice(e-this.offset,t-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,t,n,s,r){return this.append(new InlineDelimiter(e,t,n,(s?1:0)|(r?2:0)))}addElement(e){return this.append(e)}resolveMarkers(e){for(let t=e;t=e;a--){let e=this.parts[a];if(e instanceof InlineDelimiter&&1&e.side&&e.type==n.type&&!(r&&(1&n.side||2&e.side)&&(e.to-e.from+i)%3==0&&((e.to-e.from)%3||i%3))){s=e;break}}if(!s)continue;let o=n.type.resolve,l=[],h=s.from,p=n.to;if(r){let e=Math.min(2,s.to-s.from,i);h=s.to-e,p=n.from+e,o=1==e?"Emphasis":"StrongEmphasis"}s.type.mark&&l.push(this.elt(s.type.mark,h,s.to));for(let e=a+1;e=0;t--){let n=this.parts[t];if(n instanceof InlineDelimiter&&n.type==e)return t}return null}takeContent(e){let t=this.resolveMarkers(e);return this.parts.length=e,t}skipSpace(e){return skipSpace(this.text,e-this.offset)+this.offset}elt(e,t,n,s){return"string"==typeof e?elt(this.parser.getNodeType(e),t,n,s):new TreeElement(e,t)}}function injectMarks(e,t){if(!t.length)return e;if(!e.length)return t;let n=e.slice(),s=0;for(let e of t){for(;s(e?e-1:0))return!1;if(this.fragmentEnd<0){let e=this.fragment.to;for(;e>0&&"\n"!=this.input.read(e-1,e);)e--;this.fragmentEnd=e?e-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let s=e+this.fragment.offset;for(;n.to<=s;)if(!n.parent())return!1;for(;;){if(n.from>=s)return this.fragment.from<=t;if(!n.childAfter(s))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(NodeProp.contextHash)==e}takeNodes(e){let t=this.cursor,n=this.fragment.offset,s=this.fragmentEnd-(this.fragment.openEnd?1:0),r=e.absoluteLineStart,i=r,a=e.block.children.length,o=i,l=a;for(;;){if(t.to-n>s){if(t.type.isAnonymous&&t.firstChild())continue;break}let r=toRelative(t.from-n,e.ranges);if(t.to-n<=e.ranges[e.rangeI].to)e.addNode(t.tree,r);else{let n=new Tree(e.parser.nodeSet.types[Type.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(n,t.tree),e.addNode(n,r)}if(t.type.is("Block")&&(NotLast.indexOf(t.type.id)<0?(i=t.to-n,a=e.block.children.length):(i=o,a=l,o=t.to-n,l=e.block.children.length)),!t.nextSibling())break}for(;e.block.children.length>a;)e.block.children.pop(),e.block.positions.pop();return i-r}}function toRelative(e,t){let n=e;for(let s=1;sDefaultBlockParsers[e])),Object.keys(DefaultBlockParsers).map((e=>DefaultLeafBlocks[e])),Object.keys(DefaultBlockParsers),DefaultEndLeaf,DefaultSkipMarkup,Object.keys(DefaultInline).map((e=>DefaultInline[e])),Object.keys(DefaultInline),[]);function leftOverSpace(e,t,n){let s=[];for(let r=e.firstChild,i=t;;r=r.nextSibling){let e=r?r.from:n;if(e>i&&s.push({from:i,to:e}),!r)break;i=r.to}return s}function parseCode(e){let{codeParser:t,htmlParser:n}=e,s=parseMixed(((e,s)=>{let r=e.type.id;if(!t||r!=Type.CodeBlock&&r!=Type.FencedCode){if(n&&(r==Type.HTMLBlock||r==Type.HTMLTag))return{parser:n,overlay:leftOverSpace(e.node,e.from,e.to)}}else{let n="";if(r==Type.FencedCode){let t=e.node.getChild(Type.CodeInfo);t&&(n=s.read(t.from,t.to))}let i=t(n);if(i)return{parser:i,overlay:e=>e.type.id==Type.CodeText}}return null}));return{wrap:s}}const StrikethroughDelim={resolve:"Strikethrough",mark:"StrikethroughMark"},Strikethrough={defineNodes:[{name:"Strikethrough",style:{"Strikethrough/...":tags.strikethrough}},{name:"StrikethroughMark",style:tags.processingInstruction}],parseInline:[{name:"Strikethrough",parse(e,t,n){if(126!=t||126!=e.char(n+1)||126==e.char(n+2))return-1;let s=e.slice(n-1,n),r=e.slice(n+2,n+3),i=/\s|^$/.test(s),a=/\s|^$/.test(r),o=Punctuation.test(s),l=Punctuation.test(r);return e.addDelimiter(StrikethroughDelim,n,n+2,!a&&(!l||i||o),!i&&(!o||a||l))},after:"Emphasis"}]};function parseRow(e,t,n=0,s,r=0){let i=0,a=!0,o=-1,l=-1,h=!1,p=()=>{s.push(e.elt("TableCell",r+o,r+l,e.parser.parseInline(t.slice(o,l),r+o)))};for(let d=n;d-1)&&i++,a=!1,s&&(o>-1&&p(),s.push(e.elt("TableDelimiter",d+r,d+r+1))),o=l=-1),h=!h&&92==n}return o>-1&&(i++,s&&p()),i}function hasPipe(e,t){for(let n=t;nhasPipe(t.content,0)?new TableParser:null,endLeaf(e,t,n){if(n.parsers.some((e=>e instanceof TableParser))||!hasPipe(t.text,t.basePos))return!1;let s=e.scanLine(e.absoluteLineEnd+1).text;return delimiterLine.test(s)&&parseRow(e,t.text,t.basePos)==parseRow(e,s,t.basePos)},before:"SetextHeading"}]};class TaskParser{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt("Task",t.start,t.start+t.content.length,[e.elt("TaskMarker",t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}}const TaskList={defineNodes:[{name:"Task",block:!0,style:tags.list},{name:"TaskMarker",style:tags.atom}],parseBlock:[{name:"TaskList",leaf:(e,t)=>/^\[[ xX]\][ \t]/.test(t.content)&&"ListItem"==e.parentType().name?new TaskParser:null,after:"SetextHeading"}]},autolinkRE=/(www\.)|(https?:\/\/)|([\w.+-]+@)|(mailto:|xmpp:)/gy,urlRE=/[\w-]+(\.\w+(\.\w+)?)(\/[^\s<]*)?/gy,emailRE=/[\w.+-]+@[\w-]+\.[\w.-]+/gy,xmppResourceRE=/\/[a-zA-Z\d@.]+/gy;function count(e,t,n,s){let r=0;for(let i=t;icount(e,t,s,"("))s--;else{if(";"!=r||!(n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(t,s))))break;s=t+n.index}}return s}function autolinkEmailEnd(e,t){emailRE.lastIndex=t;let n=emailRE.exec(e);if(!n)return-1;let s=n[0][n[0].length-1];return"_"==s||"-"==s?-1:t+n[0].length-("."==s?1:0)}const Autolink={parseInline:[{name:"Autolink",parse(e,t,n){let s=n-e.offset;autolinkRE.lastIndex=s;let r=autolinkRE.exec(e.text),i=-1;return r?(r[1]||r[2]?i=autolinkURLEnd(e.text,s+r[0].length):r[3]?i=autolinkEmailEnd(e.text,s):(i=autolinkEmailEnd(e.text,s+r[0].length),i>-1&&"xmpp:"==r[0]&&(xmppResourceRE.lastIndex=i,r=xmppResourceRE.exec(e.text),r&&(i=r.index+r[0].length))),i<0?-1:(e.addElement(e.elt("URL",n,i+e.offset)),i+e.offset)):-1}}]},GFM=[Table,TaskList,Strikethrough,Autolink];function parseSubSuper(e,t,n){return(s,r,i)=>{if(r!=e||s.char(i+1)==e)return-1;let a=[s.elt(n,i,i+1)];for(let r=i+1;r