UNPKG

@hpcc-js/observablehq-compiler

Version:
1,005 lines (1,004 loc) 39.9 kB
import "./chunk-rwCFCtyI.js"; import { a as e, c as t, d as n, f as r, l as i, r as a, t as o, u as s } from "./dist-CecFOdLa.js"; //#region ../../node_modules/@lezer/markdown/dist/index.js var c = class CompositeBlock { static create(e, t, n, r, i) { return new CompositeBlock(e, t, n, r + (r << 8) + e + (t << 4) | 0, i, [], []); } constructor(e, n, r, i, a, o, s) { this.type = e, this.value = n, this.from = r, this.hash = i, this.end = a, this.children = o, this.positions = s, this.hashProp = [[t.contextHash, i]]; } addChild(e, n) { e.prop(t.contextHash) != this.hash && (e = new r(e.type, e.children, e.positions, e.length, this.hashProp)), this.children.push(e), this.positions.push(n); } 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 r(e.types[this.type], this.children, this.positions, t - this.from).balance({ makeTree: (e, t, n) => new r(s.none, e, t, n, this.hashProp) }); } }, l; (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.Autolink = 33] = "Autolink", 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", e[e.URL = 44] = "URL"; })(l ||= {}); var LeafBlock = class { constructor(e, t) { this.start = e, this.content = t, this.marks = [], this.parsers = []; } }, Line = class { 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 r = t; r < e; r++) n += this.text.charCodeAt(r) == 9 ? 4 - n % 4 : 1; return n; } findColumn(e) { let t = 0; for (let n = 0; t < this.text.length && n < e; t++) n += this.text.charCodeAt(t) == 9 ? 4 - n % 4 : 1; return t; } scrub() { if (!this.baseIndent) return this.text; let e = ""; for (let t = 0; t < this.basePos; t++) e += " "; return e + this.text.slice(this.basePos); } }; function skipForList(e, t, n) { if (n.pos == n.text.length || e != t.block && n.indent >= t.stack[n.depth + 1].value + n.baseIndent) return !0; if (n.indent >= n.baseIndent + 4) return !1; let r = (e.type == l.OrderedList ? isOrderedList : isBulletList)(n, t, !1); return r > 0 && (e.type != l.BulletList || isHorizontalRule(n, t, !1) < 0) && n.text.charCodeAt(n.pos + r - 1) == e.value; } var u = { [l.Blockquote](e, t, n) { return n.next == 62 ? (n.markers.push(elt(l.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) : !1; }, [l.ListItem](e, t, n) { return n.indent < n.baseIndent + e.value && n.next > -1 ? !1 : (n.moveBaseColumn(n.baseIndent + e.value), !0); }, [l.OrderedList]: skipForList, [l.BulletList]: skipForList, [l.Document]() { return !0; } }; function space(e) { return e == 32 || e == 9 || e == 10 || e == 13; } function skipSpace(e, t = 0) { for (; t < e.length && space(e.charCodeAt(t));) t++; return t; } function skipSpaceBack(e, t, n) { for (; t > n && space(e.charCodeAt(t - 1));) t--; return t; } function isFencedCode(e) { if (e.next != 96 && e.next != 126) return -1; let t = e.pos + 1; for (; t < e.text.length && e.text.charCodeAt(t) == e.next;) t++; if (t < e.pos + 3) return -1; if (e.next == 96) { for (let n = t; n < e.text.length; n++) if (e.text.charCodeAt(n) == 96) return -1; } return t; } function isBlockquote(e) { return e.next == 62 ? e.text.charCodeAt(e.pos + 1) == 32 ? 2 : 1 : -1; } function isHorizontalRule(e, t, n) { if (e.next != 42 && e.next != 45 && e.next != 95) return -1; let r = 1; for (let t = e.pos + 1; t < e.text.length; t++) { let n = e.text.charCodeAt(t); if (n == e.next) r++; else if (!space(n)) return -1; } return n && e.next == 45 && isSetextUnderline(e) > -1 && e.depth == t.stack.length && t.parser.leafBlockParsers.indexOf(g.SetextHeading) > -1 || r < 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 (e.next == 45 || e.next == 43 || e.next == 42) && (e.pos == e.text.length - 1 || space(e.text.charCodeAt(e.pos + 1))) && (!n || inList(t, l.BulletList) || e.skipSpace(e.pos + 2) < e.text.length) ? 1 : -1; } function isOrderedList(e, t, n) { let r = e.pos, i = e.next; for (; i >= 48 && i <= 57;) { if (r++, r == e.text.length) return -1; i = e.text.charCodeAt(r); } return r == e.pos || r > e.pos + 9 || i != 46 && i != 41 || r < e.text.length - 1 && !space(e.text.charCodeAt(r + 1)) || n && !inList(t, l.OrderedList) && (e.skipSpace(r + 1) == e.text.length || r > e.pos + 1 || e.next != 49) ? -1 : r + 1 - e.pos; } function isAtxHeading(e) { if (e.next != 35) return -1; let t = e.pos + 1; for (; t < e.text.length && e.text.charCodeAt(t) == 35;) t++; if (t < e.text.length && e.text.charCodeAt(t) != 32) return -1; let n = t - e.pos; return n > 6 ? -1 : n; } function isSetextUnderline(e) { if (e.next != 45 && e.next != 61 || e.indent >= e.baseIndent + 4) return -1; let t = e.pos + 1; for (; t < e.text.length && e.text.charCodeAt(t) == e.next;) t++; let n = t; for (; t < e.text.length && space(e.text.charCodeAt(t));) t++; return t == e.text.length ? n : -1; } var d = /^[ \t]*$/, f = /-->/, p = /\?>/, m = [ [/^<(?:script|pre|style)(?:\s|>|$)/i, /<\/(?:script|pre|style)>/i], [/^\s*<!--/, f], [/^\s*<\?/, p], [/^\s*<![A-Z]/, />/], [/^\s*<!\[CDATA\[/, /\]\]>/], [/^\s*<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/i, d], [/^\s*(?:<\/[a-z][\w-]*\s*>|<[a-z][\w-]*(\s+[a-z:_][\w-.]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*>)\s*$/i, d] ]; function isHTMLBlock(e, t, n) { if (e.next != 60) return -1; let r = e.text.slice(e.pos); for (let e = 0, t = m.length - +!!n; e < t; e++) if (m[e][0].test(r)) return e; return -1; } function getListIndent(e, t) { let n = e.countIndent(t, e.pos, e.indent), r = e.countIndent(e.skipSpace(t), t, n); return r >= n + 5 ? n + 1 : r; } function addCodeText(e, t, n) { let r = e.length - 1; r >= 0 && e[r].to == t && e[r].type == l.CodeText ? e[r].to = n : e.push(elt(l.CodeText, t, n)); } var h = { LinkReference: void 0, IndentedCode(e, t) { let n = t.baseIndent + 4; if (t.indent < n) return !1; let r = t.findColumn(n), i = e.lineStart + r, a = e.lineStart + t.text.length, o = [], s = []; for (addCodeText(o, i, a); e.nextLine() && t.depth >= e.stack.length;) if (t.pos == t.text.length) { addCodeText(s, e.lineStart - 1, e.lineStart); for (let e of t.markers) s.push(e); } else if (t.indent < n) break; else { if (s.length) { for (let e of s) e.type == l.CodeText ? addCodeText(o, e.from, e.to) : o.push(e); s = []; } addCodeText(o, e.lineStart - 1, e.lineStart); for (let e of t.markers) o.push(e); a = e.lineStart + t.text.length; let n = e.lineStart + t.findColumn(t.baseIndent + 4); n < a && addCodeText(o, n, a); } return s.length && (s = s.filter((e) => e.type != l.CodeText), s.length && (t.markers = s.concat(t.markers))), e.addNode(e.buffer.writeElements(o, -i).finish(l.CodeBlock, a - i), i), !0; }, FencedCode(e, t) { let n = isFencedCode(t); if (n < 0) return !1; let r = e.lineStart + t.pos, i = t.next, a = n - t.pos, o = t.skipSpace(n), s = skipSpaceBack(t.text, t.text.length, o), c = [elt(l.CodeMark, r, r + a)]; o < s && c.push(elt(l.CodeInfo, e.lineStart + o, e.lineStart + s)); for (let n = !0, r = !0, o = !1; e.nextLine() && t.depth >= e.stack.length; n = !1) { let s = t.pos; if (t.indent - t.baseIndent < 4) for (; s < t.text.length && t.text.charCodeAt(s) == i;) s++; if (s - t.pos >= a && t.skipSpace(s) == t.text.length) { for (let e of t.markers) c.push(e); r && o && addCodeText(c, e.lineStart - 1, e.lineStart), c.push(elt(l.CodeMark, e.lineStart + t.pos, e.lineStart + s)), e.nextLine(); break; } else { o = !0, n || (addCodeText(c, e.lineStart - 1, e.lineStart), r = !1); for (let e of t.markers) c.push(e); let i = e.lineStart + t.basePos, a = e.lineStart + t.text.length; i < a && (addCodeText(c, i, a), r = !1); } } return e.addNode(e.buffer.writeElements(c, -r).finish(l.FencedCode, e.prevLineEnd() - r), r), !0; }, Blockquote(e, t) { let n = isBlockquote(t); return n < 0 ? !1 : (e.startContext(l.Blockquote, t.pos), e.addNode(l.QuoteMark, e.lineStart + t.pos, e.lineStart + t.pos + 1), t.moveBase(t.pos + n), null); }, HorizontalRule(e, t) { if (isHorizontalRule(t, e, !1) < 0) return !1; let n = e.lineStart + t.pos; return e.nextLine(), e.addNode(l.HorizontalRule, n), !0; }, BulletList(e, t) { let n = isBulletList(t, e, !1); if (n < 0) return !1; e.block.type != l.BulletList && e.startContext(l.BulletList, t.basePos, t.next); let r = getListIndent(t, t.pos + 1); return e.startContext(l.ListItem, t.basePos, r - t.baseIndent), e.addNode(l.ListMark, e.lineStart + t.pos, e.lineStart + t.pos + n), t.moveBaseColumn(r), null; }, OrderedList(e, t) { let n = isOrderedList(t, e, !1); if (n < 0) return !1; e.block.type != l.OrderedList && e.startContext(l.OrderedList, t.basePos, t.text.charCodeAt(t.pos + n - 1)); let r = getListIndent(t, t.pos + n); return e.startContext(l.ListItem, t.basePos, r - t.baseIndent), e.addNode(l.ListMark, e.lineStart + t.pos, e.lineStart + t.pos + n), t.moveBaseColumn(r), null; }, ATXHeading(e, t) { let n = isAtxHeading(t); if (n < 0) return !1; let r = t.pos, i = e.lineStart + r, a = skipSpaceBack(t.text, t.text.length, r), o = a; for (; o > r && t.text.charCodeAt(o - 1) == t.next;) o--; (o == a || o == r || !space(t.text.charCodeAt(o - 1))) && (o = t.text.length); let s = e.buffer.write(l.HeaderMark, 0, n).writeElements(e.parser.parseInline(t.text.slice(r + n + 1, o), i + n + 1), -i); o < t.text.length && s.write(l.HeaderMark, o - r, a - r); let c = s.finish(l.ATXHeading1 - 1 + n, t.text.length - r); return e.nextLine(), e.addNode(c, i), !0; }, HTMLBlock(e, t) { let n = isHTMLBlock(t, e, !1); if (n < 0) return !1; let r = e.lineStart + t.pos, i = m[n][1], a = [], o = i != d; for (; !i.test(t.text) && e.nextLine();) { if (t.depth < e.stack.length) { o = !1; break; } for (let e of t.markers) a.push(e); } o && e.nextLine(); let s = i == f ? l.CommentBlock : i == p ? l.ProcessingInstructionBlock : l.HTMLBlock, c = e.prevLineEnd(); return e.addNode(e.buffer.writeElements(a, -r).finish(s, c - r), r), !0; }, SetextHeading: void 0 }, LinkReferenceParser = class { constructor(e) { this.stage = 0, this.elts = [], this.pos = 0, this.start = e.start, this.advance(e.content); } nextLine(e, t, n) { if (this.stage == -1) return !1; let r = n.content + "\n" + t.scrub(), i = this.advance(r); return i > -1 && i < r.length ? this.complete(e, n, i) : !1; } finish(e, t) { return (this.stage == 2 || this.stage == 3) && skipSpace(t.content, this.pos) == t.content.length ? this.complete(e, t, t.content.length) : !1; } complete(e, t, n) { return e.addLeafElement(t, elt(l.LinkReference, this.start, this.start + n, this.elts)), !0; } nextStage(e) { return e ? (this.pos = e.to - this.start, this.elts.push(e), this.stage++, !0) : (e === !1 && (this.stage = -1), !1); } advance(e) { for (;;) if (this.stage == -1) return -1; else if (this.stage == 0) { if (!this.nextStage(parseLinkLabel(e, this.pos, this.start, !0))) return -1; if (e.charCodeAt(this.pos) != 58) return this.stage = -1; this.elts.push(elt(l.LinkMark, this.pos + this.start, this.pos + this.start + 1)), this.pos++; } else if (this.stage == 1) { if (!this.nextStage(parseURL(e, skipSpace(e, this.pos), this.start))) return -1; } else if (this.stage == 2) { let t = skipSpace(e, this.pos), n = 0; if (t > this.pos) { let r = parseLinkTitle(e, t, this.start); if (r) { let t = lineEnd(e, r.to - this.start); t > 0 && (this.nextStage(r), n = t); } } return n ||= lineEnd(e, this.pos), n > 0 && n < e.length ? n : -1; } else return lineEnd(e, this.pos); } }; function lineEnd(e, t) { for (; t < e.length; t++) { let n = e.charCodeAt(t); if (n == 10) break; if (!space(n)) return -1; } return t; } var SetextHeadingParser = class { nextLine(e, t, n) { let r = t.depth < e.stack.length ? -1 : isSetextUnderline(t), i = t.next; if (r < 0) return !1; let a = elt(l.HeaderMark, e.lineStart + t.pos, e.lineStart + r); return e.nextLine(), e.addLeafElement(n, elt(i == 61 ? l.SetextHeading1 : l.SetextHeading2, n.start, e.prevLineEnd(), [...e.parser.parseInline(n.content, n.start), a])), !0; } finish() { return !1; } }, g = { LinkReference(e, t) { return t.content.charCodeAt(0) == 91 ? new LinkReferenceParser(t) : null; }, SetextHeading() { return new SetextHeadingParser(); } }, _ = [ (e, t) => isAtxHeading(t) >= 0, (e, t) => isFencedCode(t) >= 0, (e, t) => isBlockquote(t) >= 0, (e, t) => isBulletList(t, e, !0) >= 0, (e, t) => isOrderedList(t, e, !0) >= 0, (e, t) => isHorizontalRule(t, e, !0) >= 0, (e, t) => isHTMLBlock(t, e, !0) >= 0 ], v = { text: "", end: 0 }, BlockContext = class { constructor(e, t, n, r) { this.parser = e, this.input = t, this.ranges = r, this.line = new Line(), this.atEnd = !1, this.reusePlaceholders = /* @__PURE__ */ new Map(), this.stoppedAt = null, this.rangeI = 0, this.to = r[r.length - 1].to, this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = r[0].from, this.block = c.create(l.Document, 0, this.lineStart, 0, 0), this.stack = [this.block], this.fragments = n.length ? new FragmentCursor(n, t) : null, this.readLine(); } get parsedPos() { return this.absoluteLineStart; } advance() { if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt) return this.finish(); let { line: e } = this; for (;;) { for (let t = 0;;) { let n = e.depth < this.stack.length ? this.stack[this.stack.length - 1] : null; for (; t < e.markers.length && (!n || e.markers[t].from < n.end);) { let n = e.markers[t++]; this.addNode(n.type, n.from, n.to); } if (!n) break; this.finishContext(); } if (e.pos < e.text.length) break; if (!this.nextLine()) return this.finish(); } if (this.fragments && this.reuseFragment(e.basePos)) return null; start: for (;;) { for (let t of this.parser.blockParsers) if (t) { let n = t(this, e); if (n != 0) { if (n == 1) return null; e.forward(); continue start; } } break; } let t = new LeafBlock(this.lineStart + e.pos, e.text.slice(e.pos)); for (let e of this.parser.leafBlockParsers) if (e) { let n = e(this, t); n && t.parsers.push(n); } lines: for (; this.nextLine() && e.pos != e.text.length;) { if (e.indent < e.baseIndent + 4) { for (let n of this.parser.endLeafBlock) if (n(this, e, t)) break lines; } for (let n of t.parsers) if (n.nextLine(this, e, t)) return null; t.content += "\n" + e.scrub(); for (let n of e.markers) t.marks.push(n); } return this.finishLeaf(t), null; } stopAt(e) { if (this.stoppedAt != null && this.stoppedAt < e) throw RangeError("Can't move stoppedAt forward"); this.stoppedAt = e; } reuseFragment(e) { if (!this.fragments.moveTo(this.absoluteLineStart + e, this.absoluteLineStart) || !this.fragments.matches(this.block.hash)) return !1; let t = this.fragments.takeNodes(this); return t ? (this.absoluteLineStart += t, this.lineStart = toRelative(this.absoluteLineStart, this.ranges), this.moveRangeI(), this.absoluteLineStart < this.to ? (this.lineStart++, this.absoluteLineStart++, this.readLine()) : (this.atEnd = !0, this.readLine()), !0) : !1; } get depth() { return this.stack.length; } parentType(e = this.depth - 1) { return this.parser.nodeSet.types[this.stack[e].type]; } nextLine() { return this.lineStart += this.line.text.length, this.absoluteLineEnd >= this.to ? (this.absoluteLineStart = this.absoluteLineEnd, this.atEnd = !0, this.readLine(), !1) : (this.lineStart++, this.absoluteLineStart = this.absoluteLineEnd + 1, this.moveRangeI(), this.readLine(), !0); } peekLine() { return this.scanLine(this.absoluteLineEnd + 1).text; } moveRangeI() { for (; this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to;) this.rangeI++, this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from); } scanLine(e) { let t = v; if (t.end = e, e >= this.to) t.text = ""; else if (t.text = this.lineChunkAt(e), t.end += t.text.length, this.ranges.length > 1) { let e = this.absoluteLineStart, n = this.rangeI; for (; this.ranges[n].to < t.end;) { n++; let r = this.ranges[n].from, i = this.lineChunkAt(r); t.end = r + i.length, t.text = t.text.slice(0, this.ranges[n - 1].to - e) + i, e = t.end - t.text.length; } } return t; } readLine() { let { line: e } = this, { text: t, end: n } = this.scanLine(this.absoluteLineStart); for (this.absoluteLineEnd = n, e.reset(t); e.depth < this.stack.length; e.depth++) { let t = this.stack[e.depth], n = this.parser.skipContextMarkup[t.type]; if (!n) throw Error("Unhandled block context " + l[t.type]); let r = this.line.markers.length; if (!n(t, this, e)) { this.line.markers.length > r && (t.end = this.line.markers[this.line.markers.length - 1].to), e.forward(); break; } e.forward(); } } lineChunkAt(e) { let t = this.input.chunk(e), n; if (this.input.lineChunks) n = t == "\n" ? "" : t; else { let e = t.indexOf("\n"); n = e < 0 ? t : t.slice(0, e); } return e + n.length > this.to ? n.slice(0, this.to - e) : n; } prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; } startContext(e, t, n = 0) { this.block = c.create(e, n, this.lineStart + t, this.block.hash, this.lineStart + this.line.text.length), this.stack.push(this.block); } startComposite(e, t, n = 0) { this.startContext(this.parser.getNodeType(e), t, n); } addNode(e, t, n) { typeof e == "number" && (e = new r(this.parser.nodeSet.types[e], x, x, (n ?? this.prevLineEnd()) - t)), this.block.addChild(e, t - this.block.from); } addElement(e) { this.block.addChild(e.toTree(this.parser.nodeSet), e.from - this.block.from); } addLeafElement(e, t) { this.addNode(this.buffer.writeElements(injectMarks(t.children, e.marks), -t.from).finish(t.type, t.to - t.from), t.from); } finishContext() { let e = this.stack.pop(), t = this.stack[this.stack.length - 1]; t.addChild(e.toTree(this.parser.nodeSet), e.from - t.from), this.block = t; } finish() { for (; this.stack.length > 1;) this.finishContext(); return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart)); } addGaps(e) { return this.ranges.length > 1 ? injectGaps(this.ranges, 0, e.topNode, this.ranges[0].from, this.reusePlaceholders) : e; } finishLeaf(e) { for (let t of e.parsers) if (t.finish(this, e)) return; let t = injectMarks(this.parser.parseInline(e.content, e.start), e.marks); this.addNode(this.buffer.writeElements(t, -e.start).finish(l.Paragraph, e.content.length), e.start); } elt(e, t, n, r) { return typeof e == "string" ? elt(this.parser.getNodeType(e), t, n, r) : new TreeElement(e, t); } get buffer() { return new Buffer(this.parser.nodeSet); } }; function injectGaps(e, t, n, i, a) { let o = e[t].to, s = [], c = [], l = n.from + i; function movePastNext(n, r) { for (; r ? n >= o : n > o;) { let r = e[t + 1].from - o; i += r, n += r, t++, o = e[t].to; } } for (let r = n.firstChild; r; r = r.nextSibling) { movePastNext(r.from + i, !0); let n = r.from + i, u, d = a.get(r.tree); d ? u = d : r.to + i > o ? (u = injectGaps(e, t, r, i, a), movePastNext(r.to + i, !1)) : u = r.toTree(), s.push(u), c.push(n - l); } return movePastNext(n.to + i, !1), new r(n.type, s, c, n.to + i - l, n.tree ? n.tree.propValues : void 0); } var y = class MarkdownParser extends n { constructor(e, t, n, r, i, a, o, s, c) { super(), this.nodeSet = e, this.blockParsers = t, this.leafBlockParsers = n, this.blockNames = r, this.endLeafBlock = i, this.skipContextMarkup = a, this.inlineParsers = o, this.inlineNames = s, this.wrappers = c, this.nodeTypes = Object.create(null); for (let t of e.types) this.nodeTypes[t.name] = t.id; } createParse(e, t, n) { let r = new BlockContext(this, e, t, n); for (let i of this.wrappers) r = i(r, e, t, n); return r; } configure(e) { let n = resolveConfig(e); if (!n) return this; let { nodeSet: r, skipContextMarkup: c } = this, u = this.blockParsers.slice(), d = this.leafBlockParsers.slice(), f = this.blockNames.slice(), p = this.inlineParsers.slice(), m = this.inlineNames.slice(), h = this.endLeafBlock.slice(), g = this.wrappers; if (nonEmpty(n.defineNodes)) { c = Object.assign({}, c); let e = r.types.slice(), u; for (let r of n.defineNodes) { let { name: n, block: i, composite: a, style: d } = typeof r == "string" ? { name: r } : r; if (e.some((e) => e.name == n)) continue; a && (c[e.length] = (e, t, n) => a(t, n, e.value)); let f = e.length, p = a ? ["Block", "BlockContext"] : i ? f >= l.ATXHeading1 && f <= l.SetextHeading2 ? [ "Block", "LeafBlock", "Heading" ] : ["Block", "LeafBlock"] : void 0; e.push(s.define({ id: f, name: n, props: p && [[t.group, p]] })), d && (u ||= {}, Array.isArray(d) || d instanceof o ? u[n] = d : Object.assign(u, d)); } r = new i(e), u && (r = r.extend(a(u))); } if (nonEmpty(n.props) && (r = r.extend(...n.props)), nonEmpty(n.remove)) for (let e of n.remove) { let t = this.blockNames.indexOf(e), n = this.inlineNames.indexOf(e); t > -1 && (u[t] = d[t] = void 0), n > -1 && (p[n] = void 0); } if (nonEmpty(n.parseBlock)) for (let e of n.parseBlock) { let t = f.indexOf(e.name); if (t > -1) u[t] = e.parse, d[t] = e.leaf; else { let t = e.before ? findName(f, e.before) : e.after ? findName(f, e.after) + 1 : f.length - 1; u.splice(t, 0, e.parse), d.splice(t, 0, e.leaf), f.splice(t, 0, e.name); } e.endLeaf && h.push(e.endLeaf); } if (nonEmpty(n.parseInline)) for (let e of n.parseInline) { let t = m.indexOf(e.name); if (t > -1) p[t] = e.parse; else { let t = e.before ? findName(m, e.before) : e.after ? findName(m, e.after) + 1 : m.length - 1; p.splice(t, 0, e.parse), m.splice(t, 0, e.name); } } return n.wrap && (g = g.concat(n.wrap)), new MarkdownParser(r, u, d, f, h, c, p, m, g); } getNodeType(e) { let t = this.nodeTypes[e]; if (t == null) throw RangeError(`Unknown node type '${e}'`); return t; } parseInline(e, t) { let n = new InlineContext(this, e, t); outer: for (let e = t; e < n.end;) { let t = n.char(e); for (let r of this.inlineParsers) if (r) { let i = r(n, t, e); if (i >= 0) { e = i; continue outer; } } e++; } return n.resolveMarkers(0); } }; function nonEmpty(e) { return e != null && e.length > 0; } function resolveConfig(e) { if (!Array.isArray(e)) return e; if (e.length == 0) return null; let t = resolveConfig(e[0]); if (e.length == 1) return t; let n = resolveConfig(e.slice(1)); if (!n || !t) return t || n; let conc = (e, t) => (e || x).concat(t || x), r = t.wrap, i = n.wrap; return { props: conc(t.props, n.props), defineNodes: conc(t.defineNodes, n.defineNodes), parseBlock: conc(t.parseBlock, n.parseBlock), parseInline: conc(t.parseInline, n.parseInline), remove: conc(t.remove, n.remove), wrap: r ? i ? (e, t, n, a) => r(i(e, t, n, a), t, n, a) : r : i }; } function findName(e, t) { let n = e.indexOf(t); if (n < 0) throw RangeError(`Position specified relative to unknown parser ${t}`); return n; } var b = [s.none]; for (let e = 1, n; n = l[e]; e++) b[e] = s.define({ id: e, name: n, props: e >= l.Escape ? [] : [[t.group, e in u ? ["Block", "BlockContext"] : ["Block", "LeafBlock"]]], top: n == "Document" }); var x = [], Buffer = class { constructor(e) { this.nodeSet = e, this.content = [], this.nodes = []; } write(e, t, n, r = 0) { return this.content.push(e, t, n, 4 + r * 4), this; } writeElements(e, t = 0) { for (let n of e) n.writeTo(this, t); return this; } finish(e, t) { return r.build({ buffer: this.content, nodeSet: this.nodeSet, reused: this.nodes, topID: e, length: t }); } }, Element = class { constructor(e, t, n, r = x) { this.type = e, this.from = t, this.to = n, this.children = r; } writeTo(e, t) { let n = e.content.length; e.writeElements(this.children, t), e.content.push(this.type, this.from + t, this.to + t, e.content.length + 4 - n); } toTree(e) { return new Buffer(e).writeElements(this.children, -this.from).finish(this.type, this.to - this.from); } }, TreeElement = class { constructor(e, t) { this.tree = e, this.from = t; } get to() { return this.from + this.tree.length; } get type() { return this.tree.type.id; } get children() { return x; } writeTo(e, t) { e.nodes.push(this.tree), e.content.push(e.nodes.length - 1, this.from + t, this.to + t, -1); } toTree() { return this.tree; } }; function elt(e, t, n, r) { return new Element(e, t, n, r); } var S = { resolve: "Emphasis", mark: "EmphasisMark" }, C = { resolve: "Emphasis", mark: "EmphasisMark" }, w = {}, T = {}, InlineDelimiter = class { constructor(e, t, n, r) { this.type = e, this.from = t, this.to = n, this.side = r; } }, E = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", D = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/; try { D = /* @__PURE__ */ RegExp("[\\p{S}|\\p{P}]", "u"); } catch {} var O = { Escape(e, t, n) { if (t != 92 || n == e.end - 1) return -1; let r = e.char(n + 1); for (let t = 0; t < 32; t++) if (E.charCodeAt(t) == r) return e.append(elt(l.Escape, n, n + 2)); return -1; }, Entity(e, t, n) { if (t != 38) return -1; let r = /^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(e.slice(n + 1, n + 31)); return r ? e.append(elt(l.Entity, n, n + 1 + r[0].length)) : -1; }, InlineCode(e, t, n) { if (t != 96 || n && e.char(n - 1) == 96) return -1; let r = n + 1; for (; r < e.end && e.char(r) == 96;) r++; let i = r - n, a = 0; for (; r < e.end; r++) if (e.char(r) == 96) { if (a++, a == i && e.char(r + 1) != 96) return e.append(elt(l.InlineCode, n, r + 1, [elt(l.CodeMark, n, n + i), elt(l.CodeMark, r + 1 - i, r + 1)])); } else a = 0; return -1; }, HTMLTag(e, t, n) { if (t != 60 || n == e.end - 1) return -1; let r = e.slice(n + 1, e.end), i = /^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(r); if (i) return e.append(elt(l.Autolink, n, n + 1 + i[0].length, [ elt(l.LinkMark, n, n + 1), elt(l.URL, n + 1, n + i[0].length), elt(l.LinkMark, n + i[0].length, n + 1 + i[0].length) ])); let a = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(r); if (a) return e.append(elt(l.Comment, n, n + 1 + a[0].length)); let o = /^\?[^]*?\?>/.exec(r); if (o) return e.append(elt(l.ProcessingInstruction, n, n + 1 + o[0].length)); let s = /^(?:![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(r); return s ? e.append(elt(l.HTMLTag, n, n + 1 + s[0].length)) : -1; }, Emphasis(e, t, n) { if (t != 95 && t != 42) return -1; let r = n + 1; for (; e.char(r) == t;) r++; let i = e.slice(n - 1, n), a = e.slice(r, r + 1), o = D.test(i), s = D.test(a), c = /\s|^$/.test(i), l = /\s|^$/.test(a), u = !l && (!s || c || o), d = !c && (!o || l || s), f = u && (t == 42 || !d || o), p = d && (t == 42 || !u || s); return e.append(new InlineDelimiter(t == 95 ? S : C, n, r, !!f | (p ? 2 : 0))); }, HardBreak(e, t, n) { if (t == 92 && e.char(n + 1) == 10) return e.append(elt(l.HardBreak, n, n + 2)); if (t == 32) { let t = n + 1; for (; e.char(t) == 32;) t++; if (e.char(t) == 10 && t >= n + 2) return e.append(elt(l.HardBreak, n, t + 1)); } return -1; }, Link(e, t, n) { return t == 91 ? e.append(new InlineDelimiter(w, n, n + 1, 1)) : -1; }, Image(e, t, n) { return t == 33 && e.char(n + 1) == 91 ? e.append(new InlineDelimiter(T, n, n + 2, 1)) : -1; }, LinkEnd(e, t, n) { if (t != 93) return -1; for (let t = e.parts.length - 1; t >= 0; t--) { let r = e.parts[t]; if (r instanceof InlineDelimiter && (r.type == w || r.type == T)) { if (!r.side || e.skipSpace(r.to) == n && !/[(\[]/.test(e.slice(n + 1, n + 2))) return e.parts[t] = null, -1; let i = e.takeContent(t), a = e.parts[t] = finishLink(e, i, r.type == w ? l.Link : l.Image, r.from, n + 1); if (r.type == w) for (let n = 0; n < t; n++) { let t = e.parts[n]; t instanceof InlineDelimiter && t.type == w && (t.side = 0); } return a.to; } } return -1; } }; function finishLink(e, t, n, r, i) { let { text: a } = e, o = e.char(i), s = i; if (t.unshift(elt(l.LinkMark, r, r + (n == l.Image ? 2 : 1))), t.push(elt(l.LinkMark, i - 1, i)), o == 40) { let n = e.skipSpace(i + 1), r = parseURL(a, n - e.offset, e.offset), o; r && (n = e.skipSpace(r.to), n != r.to && (o = parseLinkTitle(a, n - e.offset, e.offset), o && (n = e.skipSpace(o.to)))), e.char(n) == 41 && (t.push(elt(l.LinkMark, i, i + 1)), s = n + 1, r && t.push(r), o && t.push(o), t.push(elt(l.LinkMark, n, s))); } else if (o == 91) { let n = parseLinkLabel(a, i - e.offset, e.offset, !1); n && (t.push(n), s = n.to); } return elt(n, r, s, t); } function parseURL(e, t, n) { if (e.charCodeAt(t) == 60) { for (let r = t + 1; r < e.length; r++) { let i = e.charCodeAt(r); if (i == 62) return elt(l.URL, t + n, r + 1 + n); if (i == 60 || i == 10) return !1; } return null; } else { let r = 0, i = t; for (let t = !1; i < e.length; i++) { let n = e.charCodeAt(i); if (space(n)) break; if (t) t = !1; else if (n == 40) r++; else if (n == 41) { if (!r) break; r--; } else n == 92 && (t = !0); } return i > t ? elt(l.URL, t + n, i + n) : i == e.length ? null : !1; } } function parseLinkTitle(e, t, n) { let r = e.charCodeAt(t); if (r != 39 && r != 34 && r != 40) return !1; let i = r == 40 ? 41 : r; for (let r = t + 1, a = !1; r < e.length; r++) { let o = e.charCodeAt(r); if (a) a = !1; else if (o == i) return elt(l.LinkTitle, t + n, r + 1 + n); else o == 92 && (a = !0); } return null; } function parseLinkLabel(e, t, n, r) { for (let i = !1, a = t + 1, o = Math.min(e.length, a + 999); a < o; a++) { let o = e.charCodeAt(a); if (i) i = !1; else if (o == 93) return r ? !1 : elt(l.LinkLabel, t + n, a + 1 + n); else { if (r && !space(o) && (r = !1), o == 91) return !1; o == 92 && (i = !0); } } return null; } var InlineContext = class { constructor(e, t, n) { this.parser = e, this.text = t, this.offset = n, this.parts = []; } char(e) { return e >= 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, r, i) { return this.append(new InlineDelimiter(e, t, n, !!r | (i ? 2 : 0))); } get hasOpenLink() { for (let e = this.parts.length - 1; e >= 0; e--) { let t = this.parts[e]; if (t instanceof InlineDelimiter && (t.type == w || t.type == T)) return !0; } return !1; } addElement(e) { return this.append(e); } resolveMarkers(e) { for (let t = e; t < this.parts.length; t++) { let n = this.parts[t]; if (!(n instanceof InlineDelimiter && n.type.resolve && n.side & 2)) continue; let r = n.type == S || n.type == C, i = n.to - n.from, a, o = t - 1; for (; o >= e; o--) { let e = this.parts[o]; if (e instanceof InlineDelimiter && e.side & 1 && e.type == n.type && !(r && (n.side & 1 || e.side & 2) && (e.to - e.from + i) % 3 == 0 && ((e.to - e.from) % 3 || i % 3))) { a = e; break; } } if (!a) continue; let s = n.type.resolve, c = [], l = a.from, u = n.to; if (r) { let e = Math.min(2, a.to - a.from, i); l = a.to - e, u = n.from + e, s = e == 1 ? "Emphasis" : "StrongEmphasis"; } a.type.mark && c.push(this.elt(a.type.mark, l, a.to)); for (let e = o + 1; e < t; e++) this.parts[e] instanceof Element && c.push(this.parts[e]), this.parts[e] = null; n.type.mark && c.push(this.elt(n.type.mark, n.from, u)); let d = this.elt(s, l, u, c); this.parts[o] = r && a.from != l ? new InlineDelimiter(a.type, a.from, l, a.side) : null, (this.parts[t] = r && n.to != u ? new InlineDelimiter(n.type, u, n.to, n.side) : null) ? this.parts.splice(t, 0, d) : this.parts[t] = d; } let t = []; for (let n = e; n < this.parts.length; n++) { let e = this.parts[n]; e instanceof Element && t.push(e); } return t; } findOpeningDelimiter(e) { for (let t = this.parts.length - 1; t >= 0; t--) { let n = this.parts[t]; if (n instanceof InlineDelimiter && n.type == e && n.side & 1) return t; } return null; } takeContent(e) { let t = this.resolveMarkers(e); return this.parts.length = e, t; } getDelimiterAt(e) { let t = this.parts[e]; return t instanceof InlineDelimiter ? t : null; } skipSpace(e) { return skipSpace(this.text, e - this.offset) + this.offset; } elt(e, t, n, r) { return typeof e == "string" ? elt(this.parser.getNodeType(e), t, n, r) : new TreeElement(e, t); } }; InlineContext.linkStart = w, InlineContext.imageStart = T; function injectMarks(e, t) { if (!t.length) return e; if (!e.length) return t; let n = e.slice(), r = 0; for (let e of t) { for (; r < n.length && n[r].to < e.to;) r++; if (r < n.length && n[r].from < e.from) { let t = n[r]; t instanceof Element && (n[r] = new Element(t.type, t.from, t.to, injectMarks(t.children, [e]))); } else n.splice(r++, 0, e); } return n; } var k = [ l.CodeBlock, l.ListItem, l.OrderedList, l.BulletList ], FragmentCursor = class { constructor(e, t) { this.fragments = e, this.input = t, this.i = 0, this.fragment = null, this.fragmentEnd = -1, this.cursor = null, e.length && (this.fragment = e[this.i++]); } nextFragment() { this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null, this.cursor = null, this.fragmentEnd = -1; } moveTo(e, t) { for (; this.fragment && this.fragment.to <= e;) this.nextFragment(); if (!this.fragment || this.fragment.from > (e ? e - 1 : 0)) return !1; if (this.fragmentEnd < 0) { let e = this.fragment.to; for (; e > 0 && this.input.read(e - 1, e) != "\n";) e--; this.fragmentEnd = e ? e - 1 : 0; } let n = this.cursor; n || (n = this.cursor = this.fragment.tree.cursor(), n.firstChild()); let r = e + this.fragment.offset; for (; n.to <= r;) if (!n.parent()) return !1; for (;;) { if (n.from >= r) return this.fragment.from <= t; if (!n.childAfter(r)) return !1; } } matches(e) { let n = this.cursor.tree; return n && n.prop(t.contextHash) == e; } takeNodes(e) { let t = this.cursor, n = this.fragment.offset, i = this.fragmentEnd - +!!this.fragment.openEnd, a = e.absoluteLineStart, o = a, s = e.block.children.length, c = o, u = s; for (;;) { if (t.to - n > i) { if (t.type.isAnonymous && t.firstChild()) continue; break; } let a = toRelative(t.from - n, e.ranges); if (t.to - n <= e.ranges[e.rangeI].to) e.addNode(t.tree, a); else { let n = new r(e.parser.nodeSet.types[l.Paragraph], [], [], 0, e.block.hashProp); e.reusePlaceholders.set(n, t.tree), e.addNode(n, a); } if (t.type.is("Block") && (k.indexOf(t.type.id) < 0 ? (o = t.to - n, s = e.block.children.length) : (o = c, s = u), c = t.to - n, u = e.block.children.length), !t.nextSibling()) break; } for (; e.block.children.length > s;) e.block.children.pop(), e.block.positions.pop(); return o - a; } }; function toRelative(e, t) { let n = e; for (let r = 1; r < t.length; r++) { let i = t[r - 1].to, a = t[r].from; i < e && (n -= a - i); } return n; } var A = a({ "Blockquote/...": e.quote, HorizontalRule: e.contentSeparator, "ATXHeading1/... SetextHeading1/...": e.heading1, "ATXHeading2/... SetextHeading2/...": e.heading2, "ATXHeading3/...": e.heading3, "ATXHeading4/...": e.heading4, "ATXHeading5/...": e.heading5, "ATXHeading6/...": e.heading6, "Comment CommentBlock": e.comment, Escape: e.escape, Entity: e.character, "Emphasis/...": e.emphasis, "StrongEmphasis/...": e.strong, "Link/... Image/...": e.link, "OrderedList/... BulletList/...": e.list, "BlockQuote/...": e.quote, "InlineCode CodeText": e.monospace, "URL Autolink": e.url, "HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark": e.processingInstruction, "CodeInfo LinkLabel": e.labelName, LinkTitle: e.string, Paragraph: e.content }), j = new y(new i(b).extend(A), Object.keys(h).map((e) => h[e]), Object.keys(h).map((e) => g[e]), Object.keys(h), _, u, Object.keys(O).map((e) => O[e]), Object.keys(O), []); e.strikethrough, e.processingInstruction, e.heading, e.content, e.processingInstruction, e.list, e.atom, e.special(e.content), e.processingInstruction, e.special(e.content), e.processingInstruction, e.character; //#endregion export { j as parser }; //# sourceMappingURL=dist-BKFRBZ7S.js.map