@hpcc-js/observablehq-compiler
Version:
hpcc-js - ObservableHQ Compiler (unoffical)
1,005 lines (1,004 loc) • 39.9 kB
JavaScript
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