@the_dissidents/libemmm 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["src: string","name: string","postfix: string","src: string","#inspectors","#pos","result: Inspector[]","x","prefix","content","lines: string[]","loc","loc: LocationRange | undefined","code: number","severity: MessageSeverity","location: LocationRange","info: string","what: string","what?: string","limit: number","error: any","name: string","varname: string","previous: string","config: Configuration","root: RootNode","context: ParseContext","messages: readonly Message[]","nodes: (BlockEntity | InlineEntity | ArgumentEntity)[]","result: (BlockEntity | InlineEntity | ArgumentEntity)[]","config","scanner: Scanner","cxt: ParseContext","#reparse","#expand","#expandArgument","#expandArguments","#tryAndMessage","#try","#loc","#locFrom","#defs","node: ModifierNode","paragraphEnd: number | undefined","char: string | null","node: PreNode","group: GroupNode","node: ParagraphNode","#trimNode","args: ModifierArgument[]","node: EscapedNode","content: ArgumentEntity[]","end","name: { type: 'possible' | 'ok', value: string } | undefined","arg: ModifierArgument","msgs: Message[] | undefined","args: ModifierArguments","config: RenderConfiguration<Type>","parsedDocument: Document","state: getState<Type>","options: getOptions<Type>","postprocessor:\n (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>","config","args: any","nodes: any","msgs: Message[]","concat: InlineEntity[]","parseDefineArguments","signature: CustomModifierSignature","slotName: string | undefined","parts: [string, string][]","postfix: string | undefined","signature: CustomModifierSignature","shorthand: BlockShorthand<any>","shorthand: InlineShorthand<any>","result: ParagraphNode","overlap: T[]","signature","mod","value: string | undefined","BuiltinConfiguration: ReadonlyConfiguration","system: NoteSystem","entry: NoteDefinition","NotesFooterPlugin: HTMLComponentPlugin","transformed: string | undefined","DefaultConfiguration: ReadonlyConfiguration","document","HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType>"],"sources":["../src/util.ts","../src/debug.ts","../src/source.ts","../src/interface.ts","../src/modifier.ts","../src/scanner.ts","../src/debug-print.ts","../src/messages.ts","../src/node-util.ts","../src/parser-config.ts","../src/parser.ts","../src/renderer.ts","../src/modifier-helper.ts","../src/builtin/internal.ts","../src/builtin/define-modifier.ts","../src/builtin/define-shorthand.ts","../src/builtin/misc.ts","../src/module.ts","../src/builtin/module.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts","../src/default/bullets.tsx","../src/default/headings.tsx","../src/default/notes.tsx","../src/default/code.tsx","../src/default/quotes.tsx","../src/default/inline-styles.tsx","../src/default/misc.tsx","../src/default/table.tsx","../src/default/gallery.tsx","../src/default/default.ts","../src/default/html-renderer.tsx","../src/index.ts"],"sourcesContent":["\n// TODO: use a prefix tree to find names?\nexport class NameManager<T extends {name: string}> {\n private array: {k: string, v: T}[] = [];\n private data = new Map<string, T>();\n\n constructor(from?: ReadonlyNameManager<T> | readonly T[] | ReadonlySet<T>) {\n if (from === undefined) return;\n if (from instanceof NameManager) {\n this.array = [...from.array];\n this.data = new Map(from.data);\n } else {\n const array = [...from as (readonly T[] | ReadonlySet<T>)];\n assert((from instanceof Set ? from : new Set(array)).size == array.length);\n this.array = array.map((x) => ({k: x.name, v: x}));\n this.array.sort((a, b) => b.k.length - a.k.length);\n this.data = new Map(array.map((x) => [x.name, x]));\n }\n }\n\n toArray(): T[] {\n return this.array.map(({v}) => v);\n }\n\n toSet(): Set<T> {\n return new Set(this.toArray());\n }\n\n get(name: string) {\n return this.data.get(name);\n }\n\n has(name: string) {\n return this.data.has(name);\n }\n\n remove(name: string) {\n let i = this.data.get(name);\n assert(i !== undefined);\n this.data.delete(name);\n this.array.splice(this.array.findIndex((x) => x.k == name), 1);\n }\n\n add(...elems: T[]) {\n for (const elem of elems) {\n assert(!this.has(elem.name));\n this.data.set(elem.name, elem);\n const len = elem.name.length;\n let i = 0;\n while (i < this.array.length && this.array[i].k.length > len) i++;\n this.array.splice(i, 0, {k: elem.name, v: elem});\n }\n }\n\n find(predicate: (x: T) => boolean): T | undefined {\n const result = this.array.find((x) => predicate(x.v));\n return result ? result.v : undefined;\n }\n}\n\nexport type ReadonlyNameManager<T extends {name: string}> = Omit<NameManager<T>, 'add' | 'remove'>;\n\nexport function assert(x: boolean): asserts x {\n if (!!!x) {\n let error = new Error('assertion failed');\n console.log(error.stack);\n throw error;\n }\n}\n\nexport function has(v: number, f: number): boolean {\n return (v & f) === f;\n}\n","import { assert } from \"./util\";\n\nexport enum DebugLevel {\n Trace,\n Info,\n Warning,\n Error,\n None\n}\n\nexport const debug = {\n level: DebugLevel.Info,\n trace(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Trace) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.info('TRACE', arg0, ...args);\n },\n info(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Info) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.info(' INFO', arg0, ...args);\n },\n warning(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Warning) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.warn(' WARN', arg0, ...args);\n },\n error(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Error) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.error('ERROR', arg0, ...args);\n },\n never(_: never) {\n assert(false);\n }\n}","import { assert } from \"./util\";\n\nexport type SourceDescriptor = {\n readonly name: string\n};\n\nexport interface Source extends SourceDescriptor {\n readonly nLines: number;\n /**\n * Return the row- and column-index corresponding to a given location. The indices are zero-based.\n */\n getRowCol(loc: number): [row: number, col: number];\n /**\n * Returns the position of the start of row `n` (zero-based). If `n` is zero, returns zero. If the source contains less than `n` rows, returns `Infinity`.\n */\n getRowStart(n: number): number;\n /**\n * Returns the content of the row `n` (zero-based). If the source contains less than `n` rows, returns `undefined`.\n */\n getRow(n: number): string | undefined;\n}\n\nexport class StringSource implements Source {\n readonly name: string;\n readonly nLines: number;\n private readonly lineMap: number[];\n\n constructor(d: SourceDescriptor, private readonly src: string) {\n this.name = d.name;\n this.lineMap = [0];\n [...src].forEach((x, i) => {\n if (x == '\\n') this.lineMap.push(i+1);\n });\n this.nLines = this.lineMap.length;\n this.lineMap.push(Infinity);\n }\n\n getRowCol(pos: number): [row: number, col: number] {\n let line = -1, linepos = 0;\n for (let i = 1; i < this.lineMap.length; i++) {\n if (this.lineMap[i] > pos) {\n line = i - 1;\n linepos = this.lineMap[i - 1];\n break;\n }\n }\n return [line, pos - linepos];\n }\n\n getRowStart(n: number): number {\n assert(n >= 0);\n if (n >= this.lineMap.length) return Infinity;\n return this.lineMap[n];\n }\n\n getRow(n: number): string | undefined {\n const start = this.getRowStart(n);\n const end = this.getRowStart(n + 1);\n if (start === Infinity) return undefined;\n return this.src.substring(start, end - 1);\n } \n}","import { Source } from \"./source\";\nimport { SystemModifierDefinition, BlockModifierDefinition, InlineModifierDefinition, ArgumentInterpolatorDefinition } from \"./modifier\";\n\nexport enum MessageSeverity {\n Info,\n Warning,\n Error\n}\n\nexport type Message = {\n readonly severity: MessageSeverity,\n readonly location: LocationRange,\n readonly info: string,\n readonly code: number\n};\n\nexport type LocationRange = {\n original?: LocationRange\n source: Source,\n start: number,\n end: number,\n\n // FIXME: eh...\n actualEnd?: number\n};\n\nexport enum NodeType {\n Root,\n Group,\n Paragraph,\n Preformatted,\n Text,\n Escaped,\n SystemModifier,\n InlineModifier,\n BlockModifier,\n Interpolation\n}\n\nexport type RootNode = {\n type: NodeType.Root\n content: BlockEntity[],\n source: Source\n};\n\nexport type GroupNode = {\n location: LocationRange,\n type: NodeType.Group,\n content: BlockEntity[]\n};\n\nexport type ParagraphNode = {\n location: LocationRange,\n type: NodeType.Paragraph,\n content: InlineEntity[]\n};\n\nexport type PreNode = {\n location: LocationRange,\n type: NodeType.Preformatted,\n content: {\n start: number,\n end: number,\n text: string\n }\n};\n\nexport type TextNode = {\n location: LocationRange,\n type: NodeType.Text,\n content: string\n};\n\nexport type EscapedNode = {\n location: LocationRange,\n type: NodeType.Escaped,\n content: string\n}\n\nexport type ModifierArguments = {\n positional: ModifierArgument[],\n named: Map<string, ModifierArgument>,\n location: LocationRange,\n}\n\ntype ModifierNodeBase<TState> = {\n location: LocationRange,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArguments\n}\n\nexport type SystemModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n content: BlockEntity[],\n expansion?: never[],\n};\n\nexport type BlockModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type ModifierNode<T = any> =\n BlockModifierNode<T> | InlineModifierNode<T> | SystemModifierNode<T>;\nexport type BlockEntity =\n GroupNode | ParagraphNode | PreNode | BlockModifierNode<any> | SystemModifierNode<any>;\nexport type InlineEntity =\n TextNode | EscapedNode | InlineModifierNode<any> | SystemModifierNode<any>;\nexport type DocumentNode =\n BlockEntity | InlineEntity | RootNode;\n\n// used in arguments only\nexport type InterpolationNode = {\n location: LocationRange,\n type: NodeType.Interpolation,\n definition: ArgumentInterpolatorDefinition,\n argument: ModifierArgument,\n expansion?: string\n};\n\nexport type ModifierArgument = {\n location: LocationRange,\n content: ArgumentEntity[]\n expansion?: string\n};\n\nexport type ArgumentEntity = TextNode | EscapedNode | InterpolationNode;\n","import { Message, BlockModifierNode, BlockEntity, InlineModifierNode, InlineEntity, SystemModifierNode } from \"./interface\";\nimport { ParseContext } from \"./parser-config\";\n\nexport enum ModifierSlotType {\n Normal,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted,\n /** No content slot */\n None\n}\n\nexport type ModifierMetadata = {\n // TODO\n};\n\nclass ModifierBase<TNode, TEntity> {\n constructor(\n public readonly name: string,\n public readonly slotType = ModifierSlotType.Normal,\n args?: Partial<ModifierBase<TNode, TEntity>>) {\n if (args) Object.assign(this, args);\n }\n\n metadata: ModifierMetadata = {};\n\n /**\n * Common values: heading, emphasis, keyword, highlight, commentary, comment, link, quote, pre\n */\n roleHint?: string;\n /**\n * If true, any modifier encountered inside it will *not* be expanded *during parse-content*,\n * *unless* that modifier is `alwaysTryExpand`. In the vast majority of cases, you shouldn't\n * be using this.\n */\n delayContentExpansion = false;\n /**\n * If true, such a modifier will always be expanded whenever it is encountered, *even if*\n * it is contained in a modifier with `delayContentExpansion`. In the vast majority of cases,\n * you shouldn't be using this.\n */\n alwaysTryExpand = false;\n\n /** Called before the modifier's content is parsed.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n beforeParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called after the modifier's content is parsed.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n afterParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n /** Called before reparsing of the expansion.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.*/\n beforeProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called before reparsing of the expansion.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.*/\n afterProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n /**\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n prepareExpand?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /**\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n expand?: (node: TNode, cxt: ParseContext, immediate: boolean) => TEntity[] | undefined;\n}\n\nexport class BlockModifierDefinition<TState>\n extends ModifierBase<BlockModifierNode<TState>, BlockEntity> {\n}\n\nexport class InlineModifierDefinition<TState>\n extends ModifierBase<InlineModifierNode<TState>, InlineEntity> {\n}\n\nexport class SystemModifierDefinition<TState>\n extends ModifierBase<SystemModifierNode<TState>, never> {\n}\n\nexport class ArgumentInterpolatorDefinition {\n constructor(\n public readonly name: string,\n public readonly postfix: string,\n args?: Partial<ArgumentInterpolatorDefinition>) {\n if (args) Object.assign(this, args);\n }\n\n alwaysTryExpand = false;\n expand?: (content: string, cxt: ParseContext, immediate: boolean) => string | undefined;\n}\n","import { ParseContext } from \"./parser-config\";\nimport { Source, SourceDescriptor, StringSource } from \"./source\";\nimport { assert } from \"./util\";\n\nexport type Inspector = {\n position: number,\n callback: (cxt: ParseContext, pos: number) => void\n};\n\nexport class SimpleScanner implements Scanner {\n public readonly source: Source;\n #pos = 0;\n #inspectors: Inspector[];\n\n constructor(\n private src: string,\n sourceDesc: SourceDescriptor = {name: '<input>'},\n inspectors: Inspector[] = []\n ) {\n this.source = new StringSource(sourceDesc, src);\n this.#inspectors = inspectors.toSorted((a, b) => a.position - b.position);\n }\n\n position(): number {\n return this.#pos;\n }\n\n isEOF(): boolean {\n return this.#pos >= this.src.length;\n }\n\n inspectors(): Inspector[] {\n let result: Inspector[] = [];\n while (this.#inspectors.length > 0 && this.#inspectors[0].position <= this.#pos)\n result.push(this.#inspectors.shift()!);\n return result;\n }\n\n peek(str: string): boolean {\n assert(str !== '');\n let next = this.#pos + str.length;\n if (next > this.src.length) return false;\n return this.src.slice(this.#pos, this.#pos + str.length) == str;\n }\n\n acceptChar(): string {\n if (this.isEOF()) throw new RangeError('EOF');\n let char = this.src[this.#pos];\n this.#pos++;\n return char;\n }\n\n accept(str: string): boolean {\n if (!this.peek(str)) return false;\n this.#pos += str.length;\n return true;\n }\n\n acceptWhitespaceChar(): string | null {\n if (this.isEOF()) return null;\n let char = this.src[this.#pos];\n if (!' \\t'.includes(char)) return null;\n this.#pos++;\n return char;\n }\n}\n\n// The scanner of any implementation should be capable of handling UTF-8 \n// strings at least as well as Typescript.\nexport interface Scanner {\n readonly source: Source;\n\n position(): number;\n isEOF(): boolean;\n\n /** Sources can have inspectors in them, which are positions that trigger a callback when encounterede. This function returns the inspectors that lie between the current position and where this function was previously called (or the beginning for the first call). */\n inspectors(): Inspector[];\n\n /** return true if sees str immediately */\n peek(str: string): boolean;\n\n /** if sees str immediately, consumes it and returns true */\n accept(str: string): boolean;\n\n /** consumes a character and returns it; throws at EOF */\n acceptChar(): string;\n\n /** newlines are NOT whitespaces */\n acceptWhitespaceChar(): string | null;\n}\n","import { debug } from \"./debug\";\nimport { ArgumentEntity, NodeType, ModifierArgument, Message, MessageSeverity, BlockEntity, InlineEntity, LocationRange } from \"./interface\";\nimport { BlockShorthand, InlineShorthand } from \"./parser-config\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"./modifier\";\nimport { Document } from \"./parser-config\";\n\nexport const debugPrint = {\n blockModifier: (x: BlockModifierDefinition<any>) =>\n `[.${x.name}] (${ModifierSlotType[x.slotType]})`,\n\n inlineModifier: (x: InlineModifierDefinition<any>) =>\n `[/${x.name}] (${ModifierSlotType[x.slotType]})`,\n\n inlineShorthand: (x: InlineShorthand<any>) =>\n x.name + x.parts.map((x, i) => ` .. <arg${i}> .. ${x}`).join('')\n + (x.mod.slotType == ModifierSlotType.None\n ? '' : ` .. <slot> .. ${x.postfix ?? '<no postfix>'}`),\n\n blockShorthand: (x: BlockShorthand<any>) =>\n x.name + x.parts.map((x, i) => ` .. <arg${i}> .. ${x}`).join('')\n + (x.mod.slotType == ModifierSlotType.None\n ? '' : ` .. <slot> .. ${x.postfix ?? '<no postfix>'}`),\n\n argument: (arg: ModifierArgument) =>\n arg.content.map(debugPrintArgEntity).join(''),\n\n node: (...nodes: (BlockEntity | InlineEntity)[]) =>\n nodes.map((x) => debugPrintNode(x)).join('\\n'),\n\n message: debugPrintMsg,\n range: debugPrintRange,\n document: debugDumpDocument\n}\n\nfunction debugPrintArgEntity(node: ArgumentEntity): string {\n switch (node.type) {\n case NodeType.Text:\n return node.content;\n case NodeType.Escaped:\n return `<Escaped:${node.content}>`;\n case NodeType.Interpolation:\n return `<Interp:${node.definition.name}-${node.definition.postfix}:${debugPrint.argument(node.argument)}${node.expansion ? `=${node.expansion}` : ''}>`;\n default:\n return debug.never(node);\n }\n}\n\nfunction debugPrintNode(node: BlockEntity | InlineEntity, prefix = '') {\n function debugPrintNodes(content: (BlockEntity | InlineEntity)[], prefix: string = '') {\n let dumps = content.map((x) => debugPrintNode(x, prefix + ' ')).filter((x) => x.length > 0);\n if (dumps.length == 0) return '';\n return dumps.map((x) => `${prefix} ${x}`).join('\\n');\n }\n let result = `<${NodeType[node.type]}@${node.location.start}`;\n switch (node.type) {\n case NodeType.Group:\n case NodeType.Paragraph:\n const content = debugPrintNodes(node.content, prefix);\n if (content.length > 0)\n result += `>\\n${content}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n else result += `-${node.location.end} />`;\n break;\n case NodeType.Escaped:\n result += `>\\n${prefix} ${node.content}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n break;\n case NodeType.Preformatted:\n result += `>\\n${prefix} ${node.content.text}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n break;\n case NodeType.InlineModifier:\n case NodeType.BlockModifier:\n case NodeType.SystemModifier:\n const posargs = node.arguments.positional.map((x, i) =>\n `\\n${prefix} (${i})@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n const namedargs = [...node.arguments.named].map(([name, x], i) =>\n `\\n${prefix} <${name}>@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n if (node.content.length > 0) {\n result += ` id=${node.mod.name}${posargs}${namedargs}>\\n` + debugPrintNodes(node.content, prefix) + `\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n } else result += `-${node.location.end} id=${node.mod.name}${posargs}${namedargs} />`;\n if (node.expansion) {\n const content = debugPrintNodes(node.expansion, prefix);\n if (content.length > 0)\n result += `\\n${prefix}<expansion>\\n${content}\\n${prefix}</expansion>`;\n else if (node.type != NodeType.SystemModifier)\n result += `\\n${prefix}<expansion />`;\n }\n break;\n case NodeType.Text:\n return node.content;\n default:\n return debug.never(node);\n }\n return result;\n}\n\nfunction debugPrintRange(loc: LocationRange, context = 1) {\n const isSingleCharacter = loc.start == loc.end;\n let [sr, sc] = loc.source.getRowCol(loc.start);\n let [er, ec] = loc.source.getRowCol(loc.actualEnd ?? loc.end);\n const rowWidth = Math.max((sr+1).toString().length, (er+1).toString().length);\n\n const startLine = Math.max(0, sr - context);\n const endLine = Math.min(loc.source.nLines - 1, er + context);\n let lines: string[] = [];\n for (let i = startLine; i <= endLine; i++) {\n const line = loc.source.getRow(i)!;\n lines.push((i+1).toString().padStart(rowWidth) + ' | ' + line);\n if (i >= sr && i <= er) {\n const startPos = i == sr ? sc : 0;\n const endPos = i == er ? ec : line.length;\n lines.push(\n ' '.repeat(rowWidth) + ' | '\n + ' '.repeat(startPos)\n + (isSingleCharacter ? '^' : '~'.repeat(endPos - startPos + 1)));\n }\n }\n return lines.join('\\n');\n}\n\nfunction debugPrintMsg(m: Message) {\n const poss = (loc: LocationRange) => {\n const [r1, c1] = loc.source.getRowCol(loc.start);\n if (loc.start == loc.end) return `l${r1+1}c${c1+1}`;\n const [r2, c2] = loc.source.getRowCol(loc.end);\n return `l${r1+1}c${c1+1}-l${r2+1}c${c2+1}`;\n }\n let loc: LocationRange | undefined = m.location;\n let result = `at ${poss(loc)}: ${MessageSeverity[m.severity]}[${m.code}]: ${m.info}`;\n while (loc = loc.original) {\n let d = loc.source !== m.location.source ? `(in ${loc.source.name}) ` : '';\n result += `\\n---> original at: ${d}${poss(loc)}`;\n }\n return result;\n}\n\nfunction debugDumpDocument(doc: Document): string {\n let root = debugPrint.node(...doc.root.content);\n let msgs = doc.messages.map((x) =>\n debugPrintRange(x.location) + '\\n' + debugPrintMsg(x)).join('\\n');\n if (msgs.length > 0) msgs += '\\n';\n return `Document: ${doc.root.source.name}\\n${msgs}${root}`;\n}\n","import { Message, MessageSeverity, LocationRange } from \"./interface\";\nimport { assert } from \"./util\";\n\nclass AddThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly location: LocationRange, \n public readonly info: string){}\n // get fixes(): readonly FixSuggestion[] {\n // let [start, what, fixstr] = [this.location.start, this.what, this.fixstr];\n // return [{\n // get info() { return fixstr; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < start) \n // ? cursor \n // : cursor + what.length;\n // return [src.substring(0, start) + what + src.substring(start), newCursor];\n // }\n // }];\n // }\n}\n\nclass RemoveThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly location: LocationRange, \n // private fixstr: string,\n public readonly info: string){}\n // get fixes(): readonly FixSuggestion[] {\n // let [start, end, fixstr] = [this.start, this.end, this.fixstr];\n // return [{\n // get info() { return fixstr; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < end && cursor >= start) \n // ? start \n // : cursor; // Removing text, cursor shouldn't shift if it's outside the removed range\n // return [src.substring(0, start) + src.substring(end), newCursor];\n // }\n // }];\n // }\n}\n\nexport class ExpectedMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string)\n {\n assert(location.end == location.start);\n }\n readonly code = 1;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `expected '${this.what}'` }\n}\n\nexport class UnknownModifierMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string) {}\n readonly code = 2;\n readonly severity = MessageSeverity.Error;\n get info() { return `unknown modifier '${this.what}'`; };\n // get fixes(): readonly FixSuggestion[] {\n // let [start, end] = [this.start, this.end];\n // return [{\n // get info() { return 'this is not a modifier -- escape it'; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < start) \n // ? cursor \n // : cursor + 1;\n // return [src.substring(0, start) + '\\\\' + src.substring(start), newCursor];\n // }\n // }];\n // }\n}\n\nexport class UnclosedInlineModifierMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string)\n {\n assert(location.end == location.start);\n }\n readonly code = 3;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `unclosed inline modifier ${this.what}'` }\n}\n\nexport class ArgumentCountMismatchMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n min?: number, max?: number)\n {\n if (min !== undefined) {\n if (max == min) this.msg = `: ${min} expected`;\n else if (max !== undefined) this.msg = `: ${min} to ${max} expected`;\n else this.msg = `: at least ${min} expected`;\n } else {\n if (max !== undefined) this.msg = `: at most ${max} expected`;\n }\n }\n private msg = '';\n readonly code = 4;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `argument count mismatch` + this.msg; }\n}\n\nexport class CannotExpandArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what?: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `failed to expand argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class InvalidArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what?: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `invalid argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class EntityNotAllowedMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what?: string) {}\n readonly code = 7;\n readonly severity = MessageSeverity.Error;\n get info(): string { return 'This entity is not allowed here' + \n (this.what ? `: ${this.what}` : '') }\n}\n\nexport class ReachedRecursionLimitMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private limit: number,\n private what: string) {}\n readonly code = 8;\n readonly severity = MessageSeverity.Error;\n get info(): string { \n return `Reached recursion limit ${this.limit} when expanding ${this.what}`\n };\n}\n\nexport class SlotUsedOutsideDefinitionMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 9;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `slot used outside a definition` }\n}\n\nexport class NoNestedModuleMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 10;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `nested module definitions not allowed` }\n}\n\nexport class CannotUseModuleInSelfMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 11;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `cannot use the same module inside its definition` }\n}\n\nexport class EitherNormalOrPreMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 12;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `a definition cannot be at once normal and preformatted` }\n}\n\nexport class MultipleBlocksNotPermittedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 13;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `multiple blocks are not permitted here` }\n}\n\nexport class OnlySimpleParagraphsPermittedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 14;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `only simple paragraphs are permitted here` }\n}\n\nexport class ContentExpectedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 15;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `content expected` }\n}\n\nexport class InternalErrorMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n public readonly error: any) {}\n readonly code = 16;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `an internal error occurred when parsing: ${this.error}` }\n}\n\nexport class DuplicateNamedArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n public readonly name: string) {}\n readonly code = 17;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `an argument has already been defined with the same name \"${this.name}\"` }\n}\n\n// warnings\n\nexport class UnnecessaryNewlineMessage extends RemoveThingMessage {\n constructor(location: LocationRange) {\n super(1, MessageSeverity.Warning, location, \n 'more than one newlines have the same effect as one');\n }\n}\n\nexport class NewBlockShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(location: LocationRange) {\n super(2, MessageSeverity.Warning, location, \n 'a new block should begin in a new line to avoid confusion');\n }\n}\n\nexport class ShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(location: LocationRange) {\n super(3, MessageSeverity.Warning, location, \n 'the following should begin in a new line to avoid confusion');\n }\n}\n\nexport class NameAlreadyDefinedMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 4;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `name is already defined, will overwrite: ${this.what}` }\n}\n\nexport class UndefinedVariableMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `variable is undefined, will expand to empty string: ${this.what}` }\n}\n\nexport class OverwriteDefinitionsMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `using this module will overwrite: ${this.what}` }\n}\n\nexport class OverwriteSpecialVariableMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private varname: string,\n private previous: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `${this.varname} is already defined (as \"${this.previous}\"), will be overwritten` }\n}","import { debug } from \"./debug\";\nimport { LocationRange, ModifierArgument, NodeType, DocumentNode } from \"./interface\";\n\n\nexport type CloneNodeOptions = {\n newLocation?: LocationRange;\n withState?: boolean;\n};\nconst cloneArgument = (arg: ModifierArgument, options: CloneNodeOptions): ModifierArgument => ({\n location: cloneLocation(arg.location, options),\n content: arg.content.map((ent) => {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n return cloneNode(ent, options);\n case NodeType.Interpolation:\n return {\n type: ent.type,\n location: cloneLocation(arg.location, options),\n definition: ent.definition,\n argument: cloneArgument(ent.argument, options),\n expansion: ent.expansion\n };\n default:\n return debug.never(ent);\n }\n })\n});\nfunction cloneLocation(pos: LocationRange, options: CloneNodeOptions): LocationRange {\n let base = options.newLocation ?? pos;\n return {\n start: base.start,\n end: base.end,\n actualEnd: base.actualEnd,\n original: options.newLocation ? pos : pos.original,\n source: base.source\n };\n}\n\nexport function cloneNode<T extends DocumentNode>(\n node: T, options: CloneNodeOptions = {}\n): T {\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n location: cloneLocation(node.location, options),\n type: node.type,\n mod: node.mod,\n state: options.withState ? node.state : undefined,\n head: cloneLocation(node.head, options), // TODO: options or {}?\n arguments: {\n positional: node.arguments.positional.map((x) => cloneArgument(x, options)),\n named: new Map([...node.arguments.named].map(\n ([x, y]) => [x, cloneArgument(y, options)])),\n },\n content: node.content.map((x) => cloneNode(x, options)),\n expansion: node.expansion ? cloneNodes(node.expansion, options) : undefined\n } as T;\n case NodeType.Root:\n return {\n type: node.type,\n source: node.source,\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Group:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Paragraph:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Preformatted:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: { ...node.content }\n } as T;\n case NodeType.Text:\n case NodeType.Escaped:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content\n } as T;\n default:\n return debug.never(node);\n }\n}\n\nexport function cloneNodes<T extends readonly DocumentNode[]>(\n nodes: T, options: CloneNodeOptions = {}\n): T {\n return nodes.map((x) => cloneNode(x, options)) as unknown as T;\n}\n/** Warning: modifies the original nodes */\n\nexport function stripNode(...nodes: DocumentNode[]): DocumentNode[] {\n return nodes.flatMap((node) => {\n switch (node.type) {\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return [node];\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n if (node.expansion !== undefined)\n return node.expansion.flatMap((x) => stripNode(x));\n // else fallthrough!\n case NodeType.Root:\n case NodeType.Group:\n case NodeType.Paragraph:\n node.content = node.content.flatMap((x) => stripNode(x)) as any;\n return [node];\n case NodeType.SystemModifier:\n return [];\n default:\n return debug.never(node);\n }\n });\n}\n","import { RootNode, Message, BlockEntity, InlineEntity, ArgumentEntity } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, SystemModifierDefinition, ArgumentInterpolatorDefinition } from \"./modifier\";\nimport { ModuleDefinition } from \"./module\";\nimport { Parser } from \"./parser\";\nimport { Scanner } from \"./scanner\";\nimport { assert, ReadonlyNameManager, NameManager } from \"./util\";\nimport { cloneNode, stripNode } from \"./node-util\";\n\nexport interface ParseContextStoreDefinitions { }\nexport type ParseContextStoreKey = keyof ParseContextStoreDefinitions;\ntype ParseContextStoreEntry<S extends ParseContextStoreKey> = ParseContextStoreDefinitions[S];\n\nexport class ParseContext {\n private data: ParseContextStoreDefinitions = {};\n public usedModules = new Set<string>();\n\n constructor(\n public readonly config: Configuration,\n public variables = new Map<string, string>()\n ) {\n config.initializers.forEach((x) => x(this));\n }\n\n init<S extends ParseContextStoreKey>(key: S, obj: ParseContextStoreEntry<S>) {\n assert(!(key in this.data));\n this.data[key] = obj;\n }\n\n set<S extends ParseContextStoreKey>(key: S, obj: ParseContextStoreEntry<S>) {\n assert(key in this.data);\n this.data[key] = obj;\n }\n\n get<S extends ParseContextStoreKey>(key: S): ParseContextStoreEntry<S> {\n assert(key in this.data);\n return this.data[key];\n }\n\n parse(scanner: Scanner) {\n return new Parser(scanner, this).parse();\n }\n}\n\nexport class Document {\n constructor(\n public readonly root: RootNode,\n public readonly context: ParseContext,\n public readonly messages: readonly Message[]) { };\n\n toStripped() {\n let doc = new Document(\n stripNode(cloneNode(this.root, {withState: true}))[0] as RootNode,\n this.context, this.messages);\n return doc;\n }\n\n /**\n * Performs a depth-first walk of the node tree.\n */\n walk(\n callback: (node: BlockEntity | InlineEntity | ArgumentEntity) =>\n 'skip' | 'break' | 'continue'\n ) {\n let nodes: (BlockEntity | InlineEntity | ArgumentEntity)[] = this.root.content;\n let node;\n while (node = nodes.shift()) {\n const result = callback(node);\n if (result == 'break') break;\n if (result == 'skip') continue;\n\n if ('arguments' in node) {\n nodes.push(...node.arguments.positional.flatMap((x) => x.content));\n nodes.push(...[...node.arguments.named].flatMap(([_name, x]) => x.content));\n }\n if ('content' in node && Array.isArray(node.content))\n nodes.push(...node.content);\n }\n }\n\n /**\n * Gets all nodes that covers the given position, from outermost to innermost (essentially a path).\n */\n resolvePosition(pos: number): (BlockEntity | InlineEntity | ArgumentEntity)[] {\n const result: (BlockEntity | InlineEntity | ArgumentEntity)[] = [];\n this.walk((node) => {\n if (node.location.start <= pos\n && (node.location.actualEnd ?? node.location.end) >= pos)\n {\n result.push(node);\n return 'continue';\n }\n return 'skip';\n });\n return result;\n }\n}\n\ntype Shorthand<TMod> = {\n name: string;\n parts: readonly string[];\n postfix: string | undefined;\n mod: TMod;\n};\n\nexport type BlockShorthand<TState> = Shorthand<BlockModifierDefinition<TState>>;\nexport type InlineShorthand<TState> = Shorthand<InlineModifierDefinition<TState>>;\n\nexport type KernelConfiguration = {\n collapseWhitespaces: boolean;\n reparseDepthLimit: number;\n};\n\nexport interface ReadonlyConfiguration {\n readonly initializers: readonly ((cxt: ParseContext) => void)[];\n readonly blockModifiers: ReadonlyNameManager<BlockModifierDefinition<any>>;\n readonly inlineModifiers: ReadonlyNameManager<InlineModifierDefinition<any>>;\n readonly systemModifiers: ReadonlyNameManager<SystemModifierDefinition<any>>;\n readonly argumentInterpolators: ReadonlyNameManager<ArgumentInterpolatorDefinition>;\n\n readonly blockShorthands: ReadonlyNameManager<BlockShorthand<any>>;\n readonly inlineShorthands: ReadonlyNameManager<InlineShorthand<any>>;\n readonly kernel: KernelConfiguration;\n}\n\nexport class Configuration implements ReadonlyConfiguration {\n initializers: ((cxt: ParseContext) => void)[] = [];\n modules = new Map<string, ModuleDefinition>;\n\n blockModifiers = new NameManager<BlockModifierDefinition<any>>;\n inlineModifiers = new NameManager<InlineModifierDefinition<any>>;\n systemModifiers = new NameManager<SystemModifierDefinition<any>>;\n argumentInterpolators = new NameManager<ArgumentInterpolatorDefinition>;\n\n blockShorthands = new NameManager<BlockShorthand<any>>;\n inlineShorthands = new NameManager<InlineShorthand<any>>;\n\n kernel: KernelConfiguration = {\n collapseWhitespaces: false,\n reparseDepthLimit: 10\n };\n\n static from(from: ReadonlyConfiguration) {\n let config = new Configuration();\n config.initializers = [...from.initializers];\n config.kernel = structuredClone(from.kernel);\n\n config.blockModifiers = new NameManager(from.blockModifiers);\n config.inlineModifiers = new NameManager(from.inlineModifiers);\n config.systemModifiers = new NameManager(from.systemModifiers);\n config.argumentInterpolators = new NameManager(from.argumentInterpolators);\n config.blockShorthands = new NameManager(from.blockShorthands);\n config.inlineShorthands = new NameManager(from.inlineShorthands);\n return config;\n }\n}\n","import { debug } from \"./debug\";\nimport { debugPrint } from \"./debug-print\";\nimport { BlockEntity, BlockModifierNode, EscapedNode, InlineEntity, InlineModifierNode, Message, ModifierArgument, ParagraphNode, LocationRange, PreNode, RootNode, ArgumentEntity, ModifierNode, SystemModifierNode, NodeType, ModifierArguments, GroupNode } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType, SystemModifierDefinition } from \"./modifier\";\nimport { ShouldBeOnNewlineMessage, ExpectedMessage, ReachedRecursionLimitMessage, UnknownModifierMessage, UnnecessaryNewlineMessage, InternalErrorMessage, DuplicateNamedArgumentMessage } from \"./messages\";\nimport { ParseContext, Document } from \"./parser-config\";\nimport { Scanner } from \"./scanner\";\nimport { _Def, _Node, _Shorthand } from \"./typing-helper\";\nimport { assert, NameManager } from \"./util\";\n\nconst ESCAPE_CHAR = '\\\\';\n\nconst GROUP_BEGIN = '<<<';\nconst GROUP_END = '>>>';\n\nconst MODIFIER_BLOCK_OPEN = '[.';\nconst MODIFIER_INLINE_OPEN = '[/';\nconst MODIFIER_SYSTEM_OPEN = '[-';\nconst MODIFIER_CLOSE_SIGN = ']';\nconst MODIFIER_END_SIGN = ';';\nconst MODIFIER_INLINE_END_TAG = '[;]';\nconst MODIFIER_ARGUMENT_SEPARATOR = '|';\n\nconst UnknownModifier = {\n [NodeType.BlockModifier]: new BlockModifierDefinition('UNKNOWN', ModifierSlotType.Normal),\n [NodeType.InlineModifier]: new InlineModifierDefinition('UNKNOWN', ModifierSlotType.Normal),\n [NodeType.SystemModifier]: new SystemModifierDefinition('UNKNOWN', ModifierSlotType.Normal)\n};\n\ntype NodeWithBlockContent =\n GroupNode | BlockModifierNode<unknown> | SystemModifierNode<unknown>;\ntype NodeWithInlineContent =\n InlineModifierNode<unknown> | ParagraphNode;\n\nclass EmitEnvironment {\n public root: RootNode;\n public messages: Message[] = [];\n private blockStack: NodeWithBlockContent[] = [];\n private inlineStack: NodeWithInlineContent[] = [];\n\n constructor(private scanner: Scanner) {\n this.root = {type: NodeType.Root, source: scanner.source, content: []};\n }\n\n message(...m: Message[]) {\n for (let msg of m) {\n this.messages.push(msg);\n debug.trace('issued msg', msg.code, msg.info);\n }\n }\n\n addBlockNode(n: BlockEntity) {\n (this.blockStack.at(-1) ?? this.root).content.push(n);\n return n;\n }\n\n addInlineNode(n: InlineEntity) {\n assert(this.inlineStack.length > 0);\n this.inlineStack.at(-1)!.content.push(n);\n return n;\n }\n\n addString(str: string) {\n assert(this.inlineStack.length > 0);\n const content = this.inlineStack.at(-1)!.content;\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += str;\n last.location.end = this.scanner.position();\n } else content.push({\n type: NodeType.Text,\n location: {\n source: this.scanner.source,\n start: this.scanner.position() - str.length,\n end: this.scanner.position(),\n },\n content: str\n });\n }\n\n startBlock(block: NodeWithBlockContent) {\n this.addBlockNode(block);\n this.blockStack.push(block);\n }\n\n endBlock() {\n assert(this.blockStack.length > 0);\n const node = this.blockStack.pop()!;\n node.location.end = this.scanner.position();\n }\n\n startInline(n: InlineModifierNode<unknown> | ParagraphNode) {\n if (n.type == NodeType.Paragraph) this.addBlockNode(n);\n else this.addInlineNode(n);\n this.inlineStack.push(n);\n }\n\n endInline() {\n assert(this.inlineStack.length > 0);\n const node = this.inlineStack.pop()!;\n node.location.end = this.scanner.position();\n }\n}\n\nexport class Parser {\n private emit: EmitEnvironment;\n private delayDepth = 0;\n\n constructor(\n private scanner: Scanner,\n private cxt: ParseContext\n ) {\n this.emit = new EmitEnvironment(scanner);\n }\n\n #loc(to?: number): LocationRange {\n return {\n source: this.scanner.source,\n start: this.scanner.position(),\n end: to ?? this.scanner.position()\n };\n }\n\n #locFrom(from: number, to?: number): LocationRange {\n return {\n source: this.scanner.source,\n start: from,\n end: to ?? this.scanner.position()\n };\n }\n\n /* istanbul ignore next -- @preserve */\n #defs<\n Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier\n >(type: Type): NameManager<_Def<Type, any>> {\n switch (type) {\n case NodeType.SystemModifier: return this.cxt.config.systemModifiers as any;\n case NodeType.InlineModifier: return this.cxt.config.inlineModifiers as any;\n case NodeType.BlockModifier: return this.cxt.config.blockModifiers as any;\n default: return debug.never(type);\n }\n }\n\n #reparse(nodes: (BlockEntity | InlineEntity)[], depth: number): boolean {\n if (depth > this.cxt.config.kernel.reparseDepthLimit)\n return false;\n let ok = true;\n for (const node of nodes) {\n switch (node.type) {\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n continue;\n case NodeType.Group:\n case NodeType.Paragraph:\n ok = this.#reparse(node.content, depth + 1) && ok;\n continue;\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n ok = this.#expand(node, depth + 1) && ok;\n continue;\n default:\n debug.never(node);\n }\n }\n return ok;\n }\n\n #expandArgument(arg: ModifierArgument) {\n if (arg.expansion !== undefined)\n return arg.expansion;\n let result = '';\n const immediate = this.delayDepth == 0;\n for (const e of arg.content) {\n switch (e.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n result += e.content;\n break;\n case NodeType.Interpolation:\n if (e.expansion === undefined) {\n const inner = this.#expandArgument(e.argument);\n if (inner === undefined\n || e.definition.expand === undefined\n || (!immediate && !e.definition.alwaysTryExpand))\n return undefined;\n e.expansion = e.definition.expand(inner, this.cxt, immediate);\n if (e.expansion === undefined)\n return undefined;\n }\n result += e.expansion;\n break;\n default:\n debug.never(e);\n }\n }\n // debug.trace('expanded arg:', result);\n arg.expansion = result;\n return result;\n }\n\n #expandArguments(node: ModifierNode) {\n for (const arg of node.arguments.positional)\n this.#expandArgument(arg);\n\n for (const [_name, arg] of node.arguments.named)\n this.#expandArgument(arg);\n }\n\n #tryAndMessage<Params extends any[]>(\n node: ModifierNode,\n fn: ((...p: Params) => Message[]) | undefined, ...p: Params\n ) {\n if (!fn) return;\n\n try {\n this.emit.message(...fn.call(node.mod, ...p));\n } catch (e) {\n this.emit.message(new InternalErrorMessage(node.location, e));\n }\n }\n\n #try<Params extends any[], R>(\n node: ModifierNode,\n fn: ((...p: Params) => R) | undefined, ...p: Params\n ) {\n if (!fn) return;\n\n try {\n return fn.call(node.mod, ...p);\n } catch (e) {\n this.emit.message(new InternalErrorMessage(node.location, e));\n return undefined;\n }\n }\n\n #expand(node: ModifierNode, depth = 0) {\n if (node.expansion !== undefined) {\n debug.trace('already expanded, skipping:', node.mod.name);\n return true;\n }\n\n if (depth > 0) {\n this.#expandArguments(node);\n }\n\n if (this.delayDepth > 0 && !node.mod.alwaysTryExpand) {\n debug.trace('delaying expansion of', node.mod.name);\n return true;\n }\n\n const immediate = this.delayDepth == 0;\n if (depth > 0) {\n // simulate initial parse for generated content\n this.#tryAndMessage(node, node.mod.beforeParseContent, node as never, this.cxt, immediate);\n\n if (node.content.length > 0) {\n if (node.mod.delayContentExpansion) this.delayDepth++;\n this.#reparse(node.content, depth);\n if (node.mod.delayContentExpansion) this.delayDepth--;\n }\n\n this.#tryAndMessage(node, node.mod.afterParseContent, node as never, this.cxt, immediate);\n }\n\n this.#tryAndMessage(node, node.mod.prepareExpand, node as never, this.cxt, immediate);\n if (node.mod.expand) {\n node.expansion = this.#try(node,\n node.mod.expand as never, node as never, this.cxt, immediate);\n\n if (!node.expansion)\n return true;\n\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n if (node.expansion.length > 0)\n debug.trace(() => '-->\\n' + debugPrint.node(...node.expansion!));\n }\n\n this.#tryAndMessage(node, node.mod.beforeProcessExpansion, node as never, this.cxt, immediate);\n\n const expansion = node.expansion;\n if (!expansion || expansion.length == 0) return true;\n debug.trace('reparsing expansion of:', node.mod.name);\n let ok = this.#reparse(expansion, depth);\n debug.trace('done reparsing expansion of:', node.mod.name);\n\n this.#tryAndMessage(node, node.mod.afterProcessExpansion, node as never, this.cxt, immediate);\n\n if (!ok && depth == 0) {\n const limit = this.cxt.config.kernel.reparseDepthLimit;\n this.emit.message(\n new ReachedRecursionLimitMessage(node.location, limit, node.mod.name));\n }\n return ok;\n }\n\n parse() {\n this.DOCUMENT();\n return new Document(this.emit.root, this.cxt, this.emit.messages);\n }\n\n private WHITESPACES() {\n while (this.scanner.acceptWhitespaceChar() !== null) {}\n }\n\n private WHITESPACES_OR_NEWLINES() {\n while (this.scanner.acceptWhitespaceChar() !== null\n || this.scanner.accept('\\n')) {}\n }\n\n private SHOULD_BE_A_NEWLINE() {\n this.WHITESPACES();\n if (!this.scanner.accept('\\n')) this.emit.message(\n new ShouldBeOnNewlineMessage(this.#loc()));\n }\n\n // TODO: this is awkward and doesn't emit messages in the most appropriate way\n private WARN_IF_MORE_NEWLINES_THAN(n: number) {\n let nlines = 0;\n const start = this.scanner.position();\n while (true) {\n if (this.scanner.accept('\\n')) {\n nlines++;\n continue;\n }\n if (this.scanner.acceptWhitespaceChar() == null) break;\n }\n const end = this.scanner.position();\n if (nlines > n) this.emit.message(\n new UnnecessaryNewlineMessage(this.#locFrom(start, end)));\n }\n\n private DOCUMENT() {\n this.WHITESPACES_OR_NEWLINES();\n while (!this.scanner.isEOF()) {\n this.BLOCK_ENTITY();\n this.WHITESPACES_OR_NEWLINES();\n }\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n }\n\n private BLOCK_ENTITY() {\n assert(!this.scanner.isEOF());\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)) {\n this.MODIFIER(NodeType.BlockModifier);\n return;\n }\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN)) {\n this.MODIFIER(NodeType.SystemModifier);\n return;\n }\n\n const short = this.cxt.config.blockShorthands.find((x) => this.scanner.accept(x.name));\n if (short) return this.SHORTHAND(NodeType.BlockModifier, short);\n\n // simple paragraph(s)\n this.MAYBE_GROUPED_PARAGRAPH();\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n }\n\n private MODIFIER\n <Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>\n (type: Type): boolean\n {\n const posStart = this.scanner.position();\n assert(this.scanner.accept({\n [NodeType.BlockModifier]: MODIFIER_BLOCK_OPEN,\n [NodeType.SystemModifier]: MODIFIER_SYSTEM_OPEN,\n [NodeType.InlineModifier]: MODIFIER_INLINE_OPEN\n }[type]));\n\n const result = this.#defs(type).find((x) => this.scanner.accept(x.name));\n const mod = result ?? UnknownModifier[type];\n if (result === undefined) {\n let name = '';\n while (!this.scanner.isEOF()\n && !this.scanner.acceptWhitespaceChar()\n && !this.scanner.peek(MODIFIER_CLOSE_SIGN)\n && !this.scanner.peek(MODIFIER_END_SIGN))\n {\n if (this.scanner.accept(ESCAPE_CHAR))\n if (this.scanner.isEOF()) break;\n name += this.scanner.acceptChar();\n }\n this.emit.message(\n new UnknownModifierMessage(this.#locFrom(posStart), name));\n }\n const args = this.ARGUMENTS();\n debug.trace(`PARSE ${NodeType[type]}:`, mod.name);\n\n const endsign = this.scanner.accept(MODIFIER_END_SIGN);\n const flagMarker = mod.slotType == ModifierSlotType.None;\n if (!this.scanner.accept(MODIFIER_CLOSE_SIGN))\n this.emit.message(\n new ExpectedMessage(this.#loc(), MODIFIER_CLOSE_SIGN));\n\n const headEnd = this.scanner.position();\n const node: ModifierNode = {\n type, mod: mod as any,\n head: this.#locFrom(posStart, headEnd),\n location: this.#locFrom(posStart, headEnd),\n arguments: args,\n content: [],\n expansion: undefined\n };\n\n const isMarker = flagMarker || endsign;\n return this.MODIFIER_BODY(type, node, MODIFIER_INLINE_END_TAG, isMarker);\n }\n\n // also handles \"grouped\" (delimited) pre-paragraphs\n private PRE_PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const posStart = this.scanner.position();\n const grouped = this.scanner.accept(GROUP_BEGIN);\n if (grouped) this.SHOULD_BE_A_NEWLINE();\n const posContentStart = this.scanner.position();\n let posContentEnd = this.scanner.position();\n let paragraphEnd: number | undefined = undefined;\n\n let string = '';\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept('\\n')) {\n let white = \"\\n\";\n let char: string | null;\n while ((char = this.scanner.acceptWhitespaceChar()) !== null)\n white += char;\n\n if (grouped && this.scanner.accept(GROUP_END)) {\n paragraphEnd = this.scanner.position();\n if (!this.scanner.isEOF()) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n break;\n }\n if (!grouped && this.scanner.accept('\\n')) {\n paragraphEnd = this.scanner.position() - 1;\n if (!this.scanner.isEOF())\n this.WARN_IF_MORE_NEWLINES_THAN(0);\n break;\n }\n\n if (this.scanner.isEOF()) {\n if (grouped) this.emit.message(\n new ExpectedMessage(this.#loc(), GROUP_END));\n break;\n }\n string += white;\n } else {\n string += this.scanner.acceptChar();\n }\n posContentEnd = this.scanner.position();\n }\n const node: PreNode = {\n type: NodeType.Preformatted,\n location: this.#locFrom(posStart, paragraphEnd ?? posContentEnd),\n content: {\n start: posContentStart,\n end: posContentEnd,\n text: string\n }\n };\n this.emit.addBlockNode(node);\n }\n\n private MAYBE_GROUPED_PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const posStart = this.scanner.position();\n if (this.scanner.accept(GROUP_BEGIN)) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n\n const group: GroupNode = {\n location: this.#locFrom(posStart),\n type: NodeType.Group,\n content: []\n };\n this.emit.startBlock(group);\n\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept(GROUP_END)) {\n this.emit.endBlock(); // group\n\n if (!this.scanner.isEOF()) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n return;\n }\n this.BLOCK_ENTITY();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n // EOF\n this.emit.message(\n new ExpectedMessage(this.#loc(), GROUP_END));\n } else {\n this.PARAGRAPH();\n }\n }\n\n #trimNode(node: ParagraphNode | ModifierNode) {\n if (node.content.length == 0) return;\n let first = node.content[0];\n let last = node.content.at(-1)!;\n if (first.type == NodeType.Text)\n first.content = first.content.trimStart();\n if (last.type == NodeType.Text)\n last.content = last.content.trimEnd();\n }\n\n private PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const node: ParagraphNode = {\n type: NodeType.Paragraph,\n location: this.#loc(),\n content: []\n };\n // debug.trace('PARSE para');\n this.emit.startInline(node);\n while (!this.scanner.isEOF() && this.INLINE_ENTITY()) {}\n this.emit.endInline();\n const last = node.content.at(-1);\n node.location.actualEnd = last?.location.actualEnd ?? last?.location.end;\n this.#trimNode(node);\n // debug.trace('PARSE para end');\n }\n\n // returns false if breaking out of paragraph\n private SHORTHAND\n <Type extends NodeType.BlockModifier | NodeType.InlineModifier>\n (type: Type, d: _Shorthand<Type>): boolean\n {\n const posStart = this.scanner.position();\n let args: ModifierArgument[] = [];\n for (const part of d.parts) {\n let [arg, ok] = this.ARGUMENT_CONTENT(part, ['\\n\\n']);\n if (!ok) {\n this.emit.message(new ExpectedMessage(this.#loc(), part));\n return false;\n }\n args.push(arg);\n }\n\n const headEnd = this.scanner.position();\n const node: ModifierNode = {\n type, mod: d.mod as any,\n head: this.#locFrom(posStart - d.name.length, headEnd),\n location: this.#locFrom(posStart - d.name.length, headEnd),\n arguments: {\n positional: args,\n named: new Map(),\n location: this.#locFrom(posStart, headEnd),\n },\n content: [],\n expansion: undefined\n };\n\n const isMarker = node.mod.slotType == ModifierSlotType.None;\n return this.MODIFIER_BODY(type, node, d.postfix, isMarker);\n }\n\n private MODIFIER_BODY\n <Type extends NodeType.BlockModifier | NodeType.InlineModifier | NodeType.SystemModifier>\n (type: Type, node: ModifierNode, postfix: string | undefined, isMarker: boolean)\n {\n this.#expandArguments(node);\n const immediate = this.delayDepth == 0;\n if (node.mod.beforeParseContent)\n this.emit.message(...node.mod.beforeParseContent(node as any, this.cxt, immediate));\n if (node.mod.delayContentExpansion) this.delayDepth++;\n\n let ok = true;\n if (isMarker) {\n if (!this.scanner.isEOF() && type == NodeType.BlockModifier) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n if (type === NodeType.InlineModifier) this.emit.addInlineNode(node as InlineEntity);\n else this.emit.addBlockNode(node as BlockEntity);\n } else if (type == NodeType.InlineModifier) {\n node = node as InlineModifierNode<unknown>;\n this.emit.startInline(node);\n const pre = node.mod.slotType == ModifierSlotType.Preformatted;\n const entity = pre\n ? this.PREFORMATTED_INLINE_ENTITY.bind(this)\n : this.INLINE_ENTITY.bind(this);\n while (true) {\n if (postfix && this.scanner.accept(postfix)) break;\n if (this.scanner.isEOF() || !(ok = entity())) {\n // TODO: use error 3\n if (postfix) this.emit.message(\n new ExpectedMessage(this.#loc(), postfix));\n break;\n }\n }\n this.emit.endInline();\n if (!pre && node.content.length > 0) {\n this.#trimNode(node)\n }\n } else /* block or system */ {\n this.emit.startBlock(node as any);\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n if (!this.scanner.isEOF()) {\n if (node.mod.slotType == ModifierSlotType.Preformatted)\n this.PRE_PARAGRAPH();\n else\n this.BLOCK_ENTITY();\n }\n this.emit.endBlock();\n }\n\n const last = node.content.at(-1);\n node.location.actualEnd = last?.location.actualEnd ?? last?.location.end;\n if (node.mod.delayContentExpansion) this.delayDepth--;\n if (node.mod.afterParseContent)\n this.emit.message(...node.mod.afterParseContent(node as any, this.cxt, immediate));\n this.#expand(node);\n return ok;\n }\n\n // returns false if breaking out of paragraph\n private INLINE_ENTITY(): boolean {\n assert(!this.scanner.isEOF());\n if (this.scanner.peek(MODIFIER_INLINE_OPEN))\n return this.MODIFIER(NodeType.InlineModifier);\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN))\n return false;\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)) {\n this.SHOULD_BE_A_NEWLINE();\n return false;\n }\n\n const short = this.cxt.config.inlineShorthands.find((x) => this.scanner.accept(x.name));\n if (short) return this.SHORTHAND(NodeType.InlineModifier, short);\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n if (this.scanner.isEOF()) {\n this.emit.addString(ESCAPE_CHAR);\n return true;\n }\n const start = this.scanner.position();\n const node: EscapedNode = {\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(start - 1)\n };\n this.emit.addInlineNode(node);\n return true;\n }\n if (this.cxt.config.kernel.collapseWhitespaces\n && this.scanner.acceptWhitespaceChar() !== null)\n {\n this.WHITESPACES();\n this.emit.addString(' ');\n return true;\n }\n return this.PREFORMATTED_INLINE_ENTITY();\n }\n\n // returns false if breaking out of paragraph\n private PREFORMATTED_INLINE_ENTITY(): boolean {\n assert(!this.scanner.isEOF());\n if (this.scanner.accept('\\n')) {\n // these whitespaces in a blank line have no effect\n this.WHITESPACES();\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)\n || this.scanner.peek(MODIFIER_SYSTEM_OPEN)\n || this.cxt.config.blockShorthands.find((x) => this.scanner.peek(x.name))\n || this.scanner.peek(GROUP_END)\n || this.scanner.isEOF()) return false;\n\n if (this.scanner.accept('\\n')) {\n this.WARN_IF_MORE_NEWLINES_THAN(0);\n return false;\n }\n this.emit.addString('\\n');\n return true;\n }\n // simple character\n this.emit.addString(this.scanner.acceptChar());\n return true;\n }\n\n // returns argument and isOk\n private ARGUMENT_CONTENT(\n end: string | undefined = undefined,\n close: string[] = [MODIFIER_END_SIGN, MODIFIER_CLOSE_SIGN]\n ): [ModifierArgument, boolean] {\n let ok = true;\n const content: ArgumentEntity[] = [];\n const posStart = this.scanner.position();\n let posEnd = this.scanner.position();\n\n const emitString = (s: string) => {\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += s;\n last.location.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text,\n location: this.#locFrom(end - s.length),\n content: s\n });\n }\n };\n\n while (true) {\n if (end && this.scanner.accept(end))\n break;\n if (end === undefined && this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR))\n break;\n if (close.find((x) => this.scanner.peek(x))\n || this.scanner.isEOF())\n {\n ok = false;\n break;\n }\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString(ESCAPE_CHAR);\n ok = false;\n break;\n }\n content.push({\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(posEnd - 1)\n } satisfies EscapedNode);\n continue;\n }\n\n const beforeInterp = this.scanner.position();\n const result = this.cxt.config.argumentInterpolators.find(\n (x) => this.scanner.accept(x.name));\n if (result !== undefined) {\n const [inner, ok2] = this.ARGUMENT_CONTENT(result.postfix);\n posEnd = this.scanner.position();\n content.push({\n type: NodeType.Interpolation,\n definition: result, argument: inner,\n location: this.#locFrom(beforeInterp)\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(this.#loc(), result.postfix));\n ok = false;\n break;\n }\n } else {\n emitString(this.scanner.acceptChar());\n posEnd = this.scanner.position();\n }\n }\n return [{\n location: this.#locFrom(posStart, posEnd),\n content\n }, ok];\n }\n\n // returns error message and isOk\n private POSSIBLY_NAMED_ARGUMENT(\n args: ModifierArguments\n ): [Message[] | undefined, boolean] {\n let ok = true;\n const close = [MODIFIER_END_SIGN, MODIFIER_CLOSE_SIGN];\n let content: ArgumentEntity[] = [];\n\n const posStart = this.scanner.position();\n let contentStart = posStart;\n let posEnd = this.scanner.position();\n\n let name: { type: 'possible' | 'ok', value: string } | undefined = {\n type: 'possible', value: ''\n };\n\n const emitString = (s: string) => {\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += s;\n last.location.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text,\n location: this.#locFrom(end - s.length),\n content: s\n });\n }\n };\n\n while (true) {\n if (this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR))\n break;\n if (close.find((x) => this.scanner.peek(x))\n || this.scanner.isEOF())\n {\n ok = false;\n break;\n }\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n if (name?.type == 'possible') name = undefined;\n\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString(ESCAPE_CHAR);\n ok = false;\n break;\n }\n content.push({\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(posEnd - 1)\n } satisfies EscapedNode);\n continue;\n }\n\n const beforeInterp = this.scanner.position();\n const result = this.cxt.config.argumentInterpolators.find(\n (x) => this.scanner.accept(x.name));\n if (result !== undefined) {\n if (name?.type == 'possible') name = undefined;\n\n const [inner, ok2] = this.ARGUMENT_CONTENT(result.postfix);\n posEnd = this.scanner.position();\n content.push({\n type: NodeType.Interpolation,\n definition: result, argument: inner,\n location: this.#locFrom(beforeInterp)\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(this.#loc(), result.postfix));\n ok = false;\n break;\n }\n } else {\n const char = this.scanner.acceptChar();\n posEnd = this.scanner.position();\n\n if (name?.type == 'possible') {\n if (char == '=') {\n name.type = 'ok';\n content = [];\n contentStart = posEnd;\n continue; // consume '='\n }\n\n if (/[:/\\[\\s]/.test(char))\n name = undefined;\n else\n name.value += char;\n }\n emitString(char);\n }\n }\n const arg: ModifierArgument = {\n location: this.#locFrom(contentStart, posEnd),\n content\n };\n\n let msgs: Message[] | undefined;\n if (name?.type == 'ok') {\n if (args.named.has(name.value)) {\n msgs = [new DuplicateNamedArgumentMessage(\n this.#locFrom(posStart, contentStart - 1), name.value)];\n }\n args.named.set(name.value, arg);\n } else\n args.positional.push(arg);\n return [msgs, ok];\n }\n\n private ARGUMENTS(): ModifierArguments {\n // optionally accept separator before first argument\n const firstSeparator = this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR);\n // only eat whites if there isn't a first separator\n if (!firstSeparator) this.WHITESPACES_OR_NEWLINES();\n\n const args: ModifierArguments = {\n positional: [],\n named: new Map(),\n location: this.#loc()\n };\n\n if (this.scanner.peek(MODIFIER_CLOSE_SIGN)\n || this.scanner.peek(MODIFIER_END_SIGN)) return args;\n\n while (true) {\n const [msgs, ok] = this.POSSIBLY_NAMED_ARGUMENT(args);\n if (msgs) this.emit.message(...msgs);\n if (!ok) break;\n }\n\n args.location.end = this.scanner.position();\n return args;\n }\n}\n","import { debug } from \"./debug\";\nimport { BlockEntity, InlineEntity, NodeType, ParagraphNode, TextNode, PreNode, EscapedNode, BlockModifierNode, InlineModifierNode } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition } from \"./modifier\";\nimport { Document } from \"./parser-config\";\n\nexport type RendererType<TState, TReturn, TDocument, TOptions = undefined> = {\n state: TState;\n return: TReturn;\n document: TDocument;\n options: TOptions;\n};\n\ntype AnyRendererType = RendererType<any, any, any, any>;\n\ntype getState<Type> = Type extends RendererType<infer T, any, any, any> ? T : never;\ntype getReturn<Type> = Type extends RendererType<any, infer T, any, any> ? T : never;\ntype getDocument<Type> = Type extends RendererType<any, any, infer T, any> ? T : never;\ntype getOptions<Type> = Type extends RendererType<any, any, any, infer T> ? T : never;\n\nexport type NodeRenderer<Type extends AnyRendererType, TNode> =\n (node: TNode, cxt: RenderContext<Type>) => getReturn<Type>;\n\nexport type NodeRendererDefinition<Type extends AnyRendererType, TNode, TDef> =\n [def: TDef, renderer: NodeRenderer<Type, TNode>];\n\nexport class RenderContext<Type extends AnyRendererType> {\n renderEntity(node: BlockEntity | InlineEntity): getReturn<Type>[] {\n switch (node.type) {\n case NodeType.Group:\n return node.content.flatMap((x) => this.renderEntity(x));\n\n case NodeType.Paragraph:\n if (!this.config.paragraphRenderer) return [];\n return this.config.paragraphRenderer(node, this);\n\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n if (!this.config.textRenderer) return [];\n return this.config.textRenderer(node, this);\n\n case NodeType.InlineModifier:\n let ir = this.config.inlineRenderers.get(node.mod);\n if (ir) return ir(node, this);\n if (!this.config.undefinedInlineRenderer) return [];\n return this.config.undefinedInlineRenderer(node, this);\n\n case NodeType.BlockModifier:\n let br = this.config.blockRenderers.get(node.mod);\n if (br) return br(node, this);\n if (!this.config.undefinedBlockRenderer) return [];\n return this.config.undefinedBlockRenderer(node, this);\n\n case NodeType.SystemModifier:\n return [];\n\n default:\n return debug.never(node);\n }\n }\n\n constructor(\n public readonly config: RenderConfiguration<Type>,\n public readonly parsedDocument: Document,\n public state: getState<Type>) { }\n}\n\nexport interface ReadonlyRenderConfiguration<Type extends AnyRendererType> {\n readonly options: getOptions<Type>;\n\n readonly paragraphRenderer?: NodeRenderer<Type, ParagraphNode>;\n readonly textRenderer?: NodeRenderer<Type, TextNode | PreNode | EscapedNode>;\n\n readonly undefinedBlockRenderer?: NodeRenderer<Type, BlockModifierNode<any>>;\n readonly undefinedInlineRenderer?: NodeRenderer<Type, InlineModifierNode<any>>;\n\n readonly blockRenderers: ReadonlyMap<\n BlockModifierDefinition<any>, NodeRenderer<Type, BlockModifierNode<any>>>;\n readonly inlineRenderers: ReadonlyMap<\n InlineModifierDefinition<any>, NodeRenderer<Type, InlineModifierNode<any>>>;\n\n readonly postprocessor: (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>;\n\n render(doc: Document, state: getState<Type>): getDocument<Type>;\n}\n\nexport type BlockRendererDefiniton<Type extends AnyRendererType, ModState = any> = NodeRendererDefinition<Type, BlockModifierNode<ModState>, BlockModifierDefinition<ModState>>;\n\nexport type InlineRendererDefiniton<Type extends AnyRendererType, ModState = any> = NodeRendererDefinition<Type, InlineModifierNode<ModState>, InlineModifierDefinition<ModState>>;\n\nexport class RenderConfiguration<Type extends AnyRendererType>\n implements ReadonlyRenderConfiguration<Type>\n{\n paragraphRenderer?: NodeRenderer<Type, ParagraphNode>;\n textRenderer?: NodeRenderer<Type, TextNode | PreNode | EscapedNode>;\n\n undefinedBlockRenderer?: NodeRenderer<Type, BlockModifierNode<any>>;\n undefinedInlineRenderer?: NodeRenderer<Type, InlineModifierNode<any>>;\n\n blockRenderers = new Map<\n BlockModifierDefinition<any>,\n NodeRenderer<Type, BlockModifierNode<any>>>;\n inlineRenderers = new Map<\n InlineModifierDefinition<any>,\n NodeRenderer<Type, InlineModifierNode<any>>>;\n\n constructor(\n public options: getOptions<Type>,\n public postprocessor:\n (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>\n ) { }\n\n render(doc: Document, state: getState<Type>): getDocument<Type> {\n let cxt = new RenderContext(this, doc, state);\n let results = doc.toStripped()\n .root.content\n .flatMap((x) => cxt.renderEntity(x));\n return this.postprocessor(results, cxt);\n }\n\n addBlockRenderer(...rs: BlockRendererDefiniton<Type>[]) {\n rs.forEach(([x, y]) => this.blockRenderers.set(x, y));\n }\n\n addInlineRenderer(...rs: InlineRendererDefiniton<Type>[]) {\n rs.forEach(([x, y]) => this.inlineRenderers.set(x, y));\n }\n\n static from<Type extends AnyRendererType>(from: ReadonlyRenderConfiguration<Type>) {\n let config = new RenderConfiguration(from.options, from.postprocessor);\n config.paragraphRenderer = from.paragraphRenderer;\n config.textRenderer = from.textRenderer;\n config.undefinedBlockRenderer = from.undefinedBlockRenderer;\n config.undefinedInlineRenderer = from.undefinedInlineRenderer;\n config.inlineRenderers = new Map(from.inlineRenderers);\n config.blockRenderers = new Map(from.blockRenderers);\n return config;\n }\n}\n","import { debug } from \"./debug\";\nimport { debugPrint } from \"./debug-print\";\nimport { ModifierNode, Message, BlockModifierNode, NodeType, BlockEntity, SystemModifierNode, InlineEntity, ParagraphNode, ModifierArgument } from \"./interface\";\nimport { ModifierSlotType, SystemModifierDefinition } from \"./modifier\";\nimport { ArgumentCountMismatchMessage, CannotExpandArgumentMessage, ContentExpectedMessage, EntityNotAllowedMessage, InvalidArgumentMessage, MultipleBlocksNotPermittedMessage, OnlySimpleParagraphsPermittedMessage, OverwriteSpecialVariableMessage } from \"./messages\";\nimport { ParseContext } from \"./parser-config\";\nimport { cloneNode, stripNode } from \"./node-util\";\n\ntype BindResult<P extends string[], Opt extends string[], N extends Record<string, string>> = {\n msgs: Message[],\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n} | {\n msgs: null,\n args: {[key in P[number]]: string} & {[key in Opt[number]]?: string | undefined} & {[key in keyof N]: string},\n nodes: {[key in P[number]]: ModifierArgument} & {[key in Opt[number]]: ModifierArgument | undefined} & {[key in keyof N]: ModifierArgument | undefined},\n rest: string[],\n restNodes: ModifierArgument[]\n};\n\nexport function bindArgs<P extends string[], Opt extends string[] = [], N extends Record<string, string> = {}>(\n node: ModifierNode, p: readonly [...P],\n opts?: {\n named?: N,\n optional?: readonly [...Opt],\n rest?: boolean,\n restNamed?: boolean,\n trim?: boolean\n }\n): BindResult<P, Opt, N> {\n const badpos = node.arguments.positional.filter((x) => x.expansion === undefined);\n const badnamed = [...node.arguments.named].filter((x) => x[1].expansion === undefined);\n const bad = [...badpos, ...badnamed.map((x) => x[1])];\n if (bad.length > 0) return {\n msgs: bad.map((x) => new CannotExpandArgumentMessage(x.location)),\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n };\n\n const maxLength =\n opts?.rest ? Infinity : p.length + (opts?.optional?.length ?? 0);\n if (node.arguments.positional.length < p.length\n || node.arguments.positional.length > maxLength\n ) return {\n msgs: [new ArgumentCountMismatchMessage({\n source: node.location.source,\n start: node.head.start,\n end: node.head.end\n }, p.length, maxLength)],\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n };\n\n const args: any = {};\n const nodes: any = {};\n const msgs: Message[] = [];\n\n p.forEach((name, i) => {\n nodes[name] = node.arguments.positional[i];\n args[name] = nodes[name].expansion!;\n if (opts?.trim) args[name] = args[name].trim();\n });\n\n if (opts?.optional) opts.optional.forEach((name, i) => {\n nodes[name] = node.arguments.positional[p.length + i];\n args[name] = nodes[name]?.expansion!;\n if (opts?.trim && args[name]) args[name] = args[name].trim();\n });\n\n if (opts?.named) Object.entries(opts.named).forEach(([name, def]) => {\n nodes[name] = node.arguments.named.get(name);\n args[name] = node.arguments.named.get(name)?.expansion! ?? def;\n if (opts?.trim && args[name]) args[name] = args[name].trim();\n });\n if (!opts?.restNamed) node.arguments.named.forEach((v, k) => {\n if (!opts?.named || !Object.hasOwn(opts.named, k))\n msgs.push(new InvalidArgumentMessage(v.location, `no such named argument: \"${k}\"`));\n });\n if (msgs.length) return {\n msgs,\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n }\n\n const restNodes = node.arguments.positional\n .slice(p.length + (opts?.optional?.length ?? 0));\n\n const rest = restNodes\n .map((x) => opts?.trim ? x.expansion!.trim() : x.expansion!);\n\n return { msgs: null, args, nodes, rest, restNodes };\n}\n\n/**\n * Helper function to ensure that a modifier only accepts plaintext paragraphs as content.\n * @returns The content as a string if OK, otherwise an array of error messages.\n */\nexport function onlyPermitPlaintextParagraph(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | string\n{\n function checkInline(ents: InlineEntity[]): Message[] | string {\n let result = '';\n for (const ent of ents) {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n result += ent.content;\n break;\n case NodeType.SystemModifier:\n break;\n case NodeType.InlineModifier:\n if (!ent.expansion) return [new EntityNotAllowedMessage(\n ent.location, 'it does not expand to plain text')];\n let checkInner = checkInline(ent.expansion);\n if (Array.isArray(checkInner)) return checkInner;\n result += checkInner;\n break;\n default:\n return debug.never(ent);\n }\n }\n return result;\n }\n\n function checkContent(ents: BlockEntity[]) {\n if (ents.length == 0) return '';\n else if (ents.length > 1) {\n let last = ents.at(-1)!.location;\n return [new MultipleBlocksNotPermittedMessage({\n source: last.source,\n start: ents[1].location.start,\n end: last.actualEnd ?? last.end\n })];\n }\n return check(ents[0]);\n }\n\n function check(ent: BlockEntity): Message[] | string {\n if (ent.type == NodeType.BlockModifier) {\n if (!ent.expansion) return [new EntityNotAllowedMessage(\n ent.location, 'it does not expand to plain text')];\n return checkContent(ent.expansion);\n } else if (ent.type == NodeType.Preformatted) {\n return ent.content.text;\n } else if (ent.type !== NodeType.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n return checkInline(ent.content);\n }\n\n return checkContent(node.content);\n}\n\n/**\n * Helper function to ensure that a modifier does not accept any block modifiers inside its content.\n * @returns `null` if OK, otherwise an array of error messages.\n */\nexport function onlyPermitSimpleParagraphs(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null\n{\n function check(nodes: BlockEntity[]): Message[] | null {\n for (const ent of nodes) {\n if (ent.type == NodeType.BlockModifier && ent.expansion !== undefined) {\n const cs = check(ent.expansion);\n if (cs) return cs;\n } else if (ent.type == NodeType.Group) {\n const cs = check(ent.content);\n if (cs) return cs;\n } else if (ent.type !== NodeType.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n }\n return null;\n }\n return check(node.expansion ?? node.content);\n}\n\n/**\n * Helper function to ensure that a modifier only accepts one block as its content.\n * @returns `null` if OK, otherwise an array of error messages.\n */\nexport function onlyPermitSingleBlock(\n node: BlockModifierNode<any> | SystemModifierNode<any>,\n opt?: { optional?: boolean }\n): Message[] | null {\n function check(nodes: BlockEntity[]): Message[] | null {\n if (nodes.length > 1) {\n const last = nodes.at(-1)!.location;\n return [new MultipleBlocksNotPermittedMessage({\n source: last.source,\n start: nodes[1].location.start,\n end: last.actualEnd ?? last.end\n })];\n } else if (nodes.length == 1\n && nodes[0].type === NodeType.BlockModifier\n && nodes[0].expansion !== undefined)\n {\n return check(nodes[0].expansion);\n } else if (nodes.length == 0 && !opt?.optional) {\n return [new ContentExpectedMessage(node.location)];\n }\n return null;\n }\n return check(node.expansion ?? node.content);\n}\n\nexport function createPlaintextWrapper(name: string,\n get: (cxt: ParseContext) => string | undefined,\n set: (cxt: ParseContext, value: string) => string,\n slotType = ModifierSlotType.Normal) {\n return new SystemModifierDefinition<void>(name, slotType, {\n delayContentExpansion: true,\n beforeProcessExpansion(node, cxt) {\n let { msgs } = bindArgs(node, []);\n if (msgs) return msgs;\n const result = onlyPermitPlaintextParagraph(node);\n if (typeof result !== 'string') return result;\n\n const previous = get(cxt);\n if (previous !== undefined)\n msgs = [new OverwriteSpecialVariableMessage(node.head, name, previous)];\n set(cxt, result);\n return msgs ?? [];\n },\n });\n}\n\nexport function createParagraphWrapper(name: string,\n get: (cxt: ParseContext) => ParagraphNode | undefined,\n set: (cxt: ParseContext, value: ParagraphNode) => void,\n slotType = ModifierSlotType.Normal) {\n return new SystemModifierDefinition<void>(name, slotType, {\n beforeProcessExpansion(node, cxt) {\n let { msgs } = bindArgs(node, []);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n const previous = get(cxt);\n if (previous !== undefined)\n msgs = [new OverwriteSpecialVariableMessage(node.head, name, \"<block>\")];\n const content = cloneNode(node.content[0]);\n const stripped = stripNode(content)[0] as ParagraphNode;\n set(cxt, stripped);\n debug.info(name, '->', debugPrint.node(stripped));\n return msgs ?? [];\n },\n });\n}\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, Message, SystemModifierNode, ModifierNode, NodeType } from \"../interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { cloneNodes } from \"../node-util\";\n\nexport type CustomModifierSignature = {\n readonly slotName: string | undefined;\n readonly args: readonly string[];\n readonly namedArgs: Record<string, string>;\n preformatted: boolean | undefined;\n}\n\nexport type BlockInstantiationData = {\n readonly slotName: string | undefined;\n readonly mod: BlockModifierDefinition<any>;\n readonly slotContent: readonly BlockEntity[];\n readonly args: ReadonlyMap<string, string>;\n}\n\nexport type InlineInstantiationData = {\n readonly slotName: string | undefined;\n readonly mod: InlineModifierDefinition<any>;\n readonly slotContent: readonly InlineEntity[];\n readonly args: ReadonlyMap<string, string>;\n}\n\nexport const builtins = Symbol();\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [builtins]?: {\n blockSlotDelayedStack: CustomModifierSignature[];\n inlineSlotDelayedStack: CustomModifierSignature[];\n blockInstantiationData: BlockInstantiationData[];\n inlineInstantiationData: InlineInstantiationData[];\n insideModule: string | undefined;\n };\n }\n}\n\nexport function initParseContext(cxt: ParseContext) {\n cxt.init(builtins, {\n blockSlotDelayedStack: [],\n inlineSlotDelayedStack: [],\n blockInstantiationData: [],\n inlineInstantiationData: [],\n insideModule: undefined\n });\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, signature: CustomModifierSignature, content: _Ent<T>[])\n{\n debug.info(`created custom ${NodeType[type]}:`, name);\n debug.info('args:', signature.args, 'named:', signature.namedArgs, `with ${signature.slotName === undefined ? 'no slot' : signature.slotName == '' ? 'empty slot name' : 'slot name: ' + signature.slotName}`);\n debug.trace(() => 'content is\\n' + debugPrint.node(...content));\n\n type State = {\n ok: boolean,\n args: Map<string, string>\n };\n\n const flag =\n signature.slotName === undefined ? ModifierSlotType.None :\n signature.preformatted ? ModifierSlotType.Preformatted\n : ModifierSlotType.Normal;\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<State>(name, flag)\n : new InlineModifierDefinition<State>(name, flag)\n ) as _Def<T, State>;\n const isInline = type == NodeType.InlineModifier;\n\n if (content.length == 1 && (\n content[0].type == NodeType.BlockModifier\n || content[0].type == NodeType.InlineModifier))\n mod.roleHint = content[0].mod.roleHint;\n\n mod.delayContentExpansion = true;\n mod.prepareExpand = (node: ModifierNode<State>) => {\n let { msgs, args } = bindArgs(node, signature.args, { named: signature.namedArgs });\n if (msgs) return msgs;\n node.state = {\n ok: true,\n args: new Map(Object.entries(args!))\n } satisfies State;\n return [];\n };\n mod.expand = (node: ModifierNode<State>) => {\n if (!node.state?.ok) return [];\n const contentClone = cloneNodes(content, {newLocation: node.location}) as any[];\n return contentClone;\n };\n mod.beforeProcessExpansion = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.push({\n slotName: signature.slotName,\n mod: mod as any, args: node.state.args,\n slotContent: node.content as any\n });\n debug.trace(`pushed ${NodeType[type]} slot data for`, name);\n debug.trace(`... slotName:`,\n signature.slotName === '' ? '<unnamed>'\n : signature.slotName === undefined ? '<no slot>'\n : `'${signature.slotName}'`);\n debug.trace(`... args:`, '{' + [...node.state.args].map(([a, b]) => `${a} => ${b}`).join(', ') + '}');\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.pop();\n debug.trace(`popped ${NodeType[type]} slot data for`, name);\n return [];\n };\n return mod;\n}\n\nexport function makeInlineDefinition(content: BlockEntity[], msgs: Message[]) {\n let lastIsParagraph = false;\n let concat: InlineEntity[] = [];\n for (const n of content) {\n switch (n.type) {\n case NodeType.Group:\n concat.push(...makeInlineDefinition(n.content, msgs));\n break;\n case NodeType.Paragraph:\n if (!lastIsParagraph) {\n lastIsParagraph = true;\n concat.push(...n.content);\n continue;\n }\n // else: fallthrough to error\n case NodeType.Preformatted:\n case NodeType.BlockModifier:\n msgs.push(new EntityNotAllowedMessage(n.location));\n break;\n case NodeType.SystemModifier:\n lastIsParagraph = false;\n concat.push(n);\n break;\n default:\n debug.never(n);\n }\n }\n return concat;\n}\n","import { debug } from \"../debug\";\nimport { Message, NodeType, SystemModifierNode, InlineEntity, ModifierArgument } from \"../interface\";\nimport { SystemModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, CustomModifierSignature } from \"./internal\";\n\ntype ModifierState = {\n name: string;\n nameNode: ModifierArgument;\n signature: CustomModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n node: SystemModifierNode<ModifierState>,\n stack: CustomModifierSignature[]\n) {\n let { msgs, args, nodes, rest } = bindArgs(node, ['name'], { rest: true, restNamed: true });\n if (msgs) return msgs;\n\n msgs = [];\n const nameNode = nodes!.name;\n const name = args!.name;\n if (name === '' || name?.includes('\\n')) return [\n new InvalidArgumentMessage(nameNode.location, name)];\n\n let slotName = '';\n if (rest!.length > 0) {\n const last = rest!.at(-1)!;\n const match = /^\\((.*)\\)$/.exec(last);\n if (match) {\n slotName = match[1];\n rest!.pop();\n } else\n slotName = '';\n }\n\n let namedArgs = Object.fromEntries([...node.arguments.named]\n .map((x) => [x[0], x[1].expansion!]));\n\n let signature: CustomModifierSignature = {\n slotName, args: rest!, namedArgs, preformatted: undefined\n };\n node.state = { name, nameNode, signature, msgs };\n stack.push(signature);\n return undefined;\n}\n\nexport const DefineBlockMod = new SystemModifierDefinition\n <ModifierState>('define-block', ModifierSlotType.Normal,\n{\n // .define-block:name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.blockSlotDelayedStack);\n if (check) {\n if (immediate) return check;\n else {\n debug.trace('skipping incomplete definition');\n return [];\n }\n }\n debug.trace('entering block definition:', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.blockSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving block definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n const msgs = node.state.msgs;\n if (!node.state.name)\n msgs.push(new InvalidArgumentMessage(node.state.nameNode.location));\n else if (cxt.config.blockModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state?.name) {\n if (cxt.config.blockModifiers.has(node.state.name))\n cxt.config.blockModifiers.remove(node.state.name);\n cxt.config.blockModifiers.add(customModifier(NodeType.BlockModifier,\n node.state.name, node.state.signature, node.content));\n }\n return [];\n }\n});\n\nexport const DefineInlineMod = new SystemModifierDefinition\n <ModifierState & { definition?: InlineEntity[]; }>(\n 'define-inline', ModifierSlotType.Normal,\n{\n // .define-inline name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.inlineSlotDelayedStack);\n if (check) {\n if (immediate) return check;\n else {\n debug.trace('skipping incomplete definition');\n return [];\n }\n }\n debug.trace('entering inline definition:', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.inlineSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n\n node.state.definition = makeInlineDefinition(node.content, msgs);\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state?.name) {\n if (cxt.config.inlineModifiers.has(node.state.name))\n cxt.config.inlineModifiers.remove(node.state.name);\n cxt.config.inlineModifiers.add(\n customModifier(NodeType.InlineModifier,\n node.state.name, node.state.signature, node.state.definition!));\n }\n return [];\n },\n});\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { InlineEntity, Message, NodeType, SystemModifierNode, ModifierArgument } from \"../interface\";\nimport { InlineShorthand, BlockShorthand } from \"../parser-config\";\nimport { SystemModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { NameAlreadyDefinedMessage, InvalidArgumentMessage, ArgumentCountMismatchMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, CustomModifierSignature } from \"./internal\";\n\ntype ShorthandState = {\n name: string;\n nameNode: ModifierArgument;\n parts: [string, string][];\n postfix: string | undefined;\n signature: CustomModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n type: NodeType.BlockModifier | NodeType.InlineModifier,\n node: SystemModifierNode<ShorthandState>,\n stack: CustomModifierSignature[]\n) {\n let { msgs, args, nodes, rest, restNodes } = bindArgs(node, ['name'], { rest: true });\n if (msgs) return msgs;\n\n msgs = [];\n const nameNode = nodes!.name;\n const name = args!.name;\n if (name === '' || name?.includes('\\n')) return [\n new InvalidArgumentMessage(nameNode.location, name)];\n\n let slotName: string | undefined = undefined;\n let parts: [string, string][] = [];\n let postfix: string | undefined = undefined;\n let i = 0;\n while (i < rest!.length) {\n const arg = restNodes![i];\n const match = /^\\((.*)\\)$/.exec(arg.expansion!);\n if (match) {\n slotName = match[1];\n i++;\n if (type == NodeType.InlineModifier) {\n if (i < rest!.length) {\n if (rest![i] === '') {\n msgs.push(new InvalidArgumentMessage(\n restNodes![i].location, 'postfix'));\n } else {\n postfix = rest![i];\n i++;\n }\n } else msgs.push(\n new ArgumentCountMismatchMessage(node.head));\n }\n break;\n }\n\n i++;\n if (i < rest!.length) {\n const id = arg.expansion!;\n if (id === '')\n return [new InvalidArgumentMessage(arg.location, 'id')];\n const part = rest![i];\n if (part === '')\n return [new InvalidArgumentMessage(restNodes![i].location, 'part')];\n parts.push([id, part]);\n i++;\n } else {\n msgs.push(new ArgumentCountMismatchMessage(node.head));\n break;\n }\n }\n\n if (i == rest!.length - 1) {\n if (rest![i] !== '') msgs.push(\n new InvalidArgumentMessage(restNodes![i].location, '(must be empty)'));\n } else if (i < rest!.length - 1)\n msgs.push(new ArgumentCountMismatchMessage(node.head));\n\n let signature: CustomModifierSignature =\n { slotName, args: parts.map((x) => x[0]), namedArgs: {}, preformatted: undefined };\n node.state = { name, nameNode, signature, parts, postfix, msgs };\n stack.push(signature);\n return [];\n}\n\nexport const DefineBlockShorthandMod = new SystemModifierDefinition\n <ShorthandState>\n ('block-shorthand', ModifierSlotType.Normal,\n{\n // -inline-shorthand prefix:arg1:part1:arg2:part2...:(slot):postfix:\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n if (!immediate) return [];\n\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(NodeType.BlockModifier,\n node, store.blockSlotDelayedStack);\n if (check) return check;\n debug.trace('entering block shorthand definition', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.blockSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline shorthand definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.blockShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate || !node.state) return undefined;\n const name = '<block shorthand>';\n const parts = node.state.parts.map((x) => x[1]);\n const mod = customModifier(NodeType.BlockModifier,\n name, node.state.signature, node.content);\n const shorthand: BlockShorthand<any> = {\n name: node.state.name,\n postfix: node.state.postfix,\n mod, parts\n };\n if (cxt.config.blockShorthands.has(node.state.name))\n cxt.config.blockShorthands.remove(node.state.name);\n cxt.config.blockShorthands.add(shorthand);\n debug.info(() => 'created block shorthand: ' + debugPrint.blockShorthand(shorthand));\n return [];\n },\n});\n\nexport const DefineInlineShorthandMod = new SystemModifierDefinition\n <ShorthandState & { definition?: InlineEntity[]; }>\n ('inline-shorthand', ModifierSlotType.Normal,\n{\n // -inline-shorthand prefix:arg1:part1:arg2:part2...:(slot):postfix:\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n if (!immediate) return [];\n\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(NodeType.InlineModifier,\n node, store.inlineSlotDelayedStack);\n if (check) return check;\n debug.trace('entering inline shorthand definition', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.inlineSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline shorthand definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n node.state.definition = makeInlineDefinition(node.content, msgs);\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate || !node.state) return undefined;\n const name = '<inline shorthand>';\n const parts = node.state.parts.map((x) => x[1]);\n const mod = customModifier(NodeType.InlineModifier,\n name, node.state.signature, node.state.definition!);\n const shorthand: InlineShorthand<any> = {\n name: node.state.name,\n postfix: node.state.postfix,\n mod, parts\n };\n if (cxt.config.inlineShorthands.has(node.state.name))\n cxt.config.inlineShorthands.remove(node.state.name);\n cxt.config.inlineShorthands.add(shorthand);\n debug.info(() => 'created inline shorthand: ' + debugPrint.inlineShorthand(shorthand));\n return [];\n },\n});\n","import { debug } from \"../debug\";\nimport { BlockEntity, InlineEntity, ModifierArgument, NodeType, ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { bindArgs, onlyPermitSimpleParagraphs } from \"../modifier-helper\";\n\nexport const RawBlockMod = new BlockModifierDefinition\n ('raw', ModifierSlotType.Preformatted,\n{\n expand(node) {\n return node.content;\n },\n});\n\nexport const ConcatBlockMod = new BlockModifierDefinition<ModifierArgument>\n ('concat', ModifierSlotType.Normal,\n{\n prepareExpand(node) {\n let { msgs, nodes } = bindArgs(node, [], { named: { sep: '' } });\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = nodes?.sep;\n return [];\n },\n expand(node) {\n const result: ParagraphNode = {\n location: node.location,\n type: NodeType.Paragraph,\n content: []\n };\n function separator() {\n if (node.state?.expansion)\n result.content.push({\n type: NodeType.Text,\n location: node.state.location,\n content: node.state.expansion!\n });\n }\n function work(nodes: BlockEntity[]) {\n for (const n of nodes) switch (n.type) {\n case NodeType.Paragraph:\n result.content.push(...n.content);\n separator();\n break;\n case NodeType.Group:\n work(n.content);\n break;\n case NodeType.BlockModifier:\n if (n.expansion) work(n.expansion);\n break;\n case NodeType.Preformatted:\n case NodeType.SystemModifier:\n break;\n default:\n debug.never(n);\n }\n }\n work(node.content);\n\n if (node.state?.expansion && result.content.length > 0)\n result.content.pop();\n return [result];\n },\n});\n","import { debugPrint } from \"./debug-print\";\nimport { InlineShorthand, BlockShorthand } from \"./parser-config\";\nimport { BlockModifierDefinition, InlineModifierDefinition } from \"./modifier\";\nimport { ParseContext } from \"./parser-config\";\nimport { NameManager } from \"./util\";\n\nexport type ModuleDefinition = {\n usedModules: Set<string>;\n blocks: Set<BlockModifierDefinition<unknown>>;\n inlines: Set<InlineModifierDefinition<unknown>>;\n inlineShorthands: Set<InlineShorthand<unknown>>;\n blockShorthands: Set<BlockShorthand<unknown>>;\n};\n\nexport namespace ModuleDefinition {\n export function from(cxt: ParseContext): ModuleDefinition {\n return {\n usedModules: new Set(cxt.usedModules),\n blocks: cxt.config.blockModifiers.toSet(),\n inlines: cxt.config.inlineModifiers.toSet(),\n inlineShorthands: cxt.config.inlineShorthands.toSet(),\n blockShorthands: cxt.config.blockShorthands.toSet()\n };\n }\n\n export function apply(defs: ModuleDefinition, cxt: ParseContext) {\n cxt.usedModules = new Set(defs.usedModules);\n cxt.config.blockModifiers = new NameManager(defs.blocks);\n cxt.config.inlineModifiers = new NameManager(defs.inlines);\n cxt.config.inlineShorthands = new NameManager(defs.inlineShorthands);\n cxt.config.blockShorthands = new NameManager(defs.blockShorthands);\n }\n\n export function diff(cnew: ModuleDefinition, cold: ModuleDefinition): ModuleDefinition {\n return {\n usedModules: cnew.usedModules.difference(cold.usedModules),\n blocks: cnew.blocks.difference(cold.blocks),\n inlines: cnew.inlines.difference(cold.inlines),\n inlineShorthands: cnew.inlineShorthands.difference(cold.inlineShorthands),\n blockShorthands: cnew.blockShorthands.difference(cold.blockShorthands)\n };\n }\n\n function add<T extends {name: string}>(\n snew: ReadonlySet<T>, sold: ReadonlySet<T>, transform: (x: T) => string\n ): [Set<T>, string] {\n let newNames = new Set<string>([...snew].map((x) => x.name));\n let out = new Set<T>(snew);\n let overlap: T[] = [];\n for (const x of sold) {\n if (newNames.has(x.name))\n overlap.push(x);\n else\n out.add(x);\n }\n return [out, overlap.map(transform).join(', ')];\n }\n\n export function combine(\n cnew: ModuleDefinition, cold: ModuleDefinition\n ): [ModuleDefinition, string] {\n let [blocks, s1] =\n add(cnew.blocks, cold.blocks, debugPrint.blockModifier);\n let [inlines, s2] =\n add(cnew.inlines, cold.inlines, debugPrint.inlineModifier);\n let [inlineShorthands, s3] =\n add(cnew.inlineShorthands, cold.inlineShorthands, debugPrint.inlineShorthand);\n let [blockShorthands, s4] =\n add(cnew.blockShorthands, cold.blockShorthands, debugPrint.blockShorthand);\n return [\n {\n usedModules: cnew.usedModules.union(cold.usedModules),\n blocks, inlines, inlineShorthands, blockShorthands\n },\n (s1 ? s1 + '; ' : '')\n + (s2 ? s2 + '; ' : '')\n + (s3 ? 'inline shorthand ' + s3 + '; ' : '')\n + (s4 ? 'block shorthand ' + s4 : '')\n ];\n }\n}\n","import { debug } from \"../debug\";\nimport { ModifierNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType, SystemModifierDefinition } from \"../modifier\";\nimport { CannotUseModuleInSelfMessage, InvalidArgumentMessage, NoNestedModuleMessage, OverwriteDefinitionsMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ModuleDefinition } from \"../module\";\nimport { ParseContext } from \"../parser-config\";\nimport { builtins } from \"./internal\";\n\nexport const ModuleMod =\n new BlockModifierDefinition<{\n name: string,\n defs: ModuleDefinition\n }>('module', ModifierSlotType.Normal,\n{\n expand() {\n // no need to clone?\n return []; // node.content;\n },\n beforeParseContent(node, cxt) {\n let { msgs, args } = bindArgs(node, ['name']);\n if (msgs) return msgs;\n\n const data = cxt.get(builtins)!;\n const name = args!.name;\n const defs = ModuleDefinition.from(cxt);\n\n if (data.insideModule !== undefined)\n return [new NoNestedModuleMessage(node.head)];\n\n msgs = [];\n node.state = { name, defs };\n data.insideModule = name;\n if (cxt.config.modules.has(name)) {\n const [combined, msg] = ModuleDefinition.combine(defs, cxt.config.modules.get(name)!);\n if (msg) msgs.push(\n new OverwriteDefinitionsMessage(node.head, msg));\n ModuleDefinition.apply(combined, cxt);\n debug.trace('entering defs for module', name, '(earlier data loaded)');\n } else {\n debug.trace('entering defs for module', name);\n }\n return msgs;\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const data = cxt.get(builtins)!;\n data.insideModule = undefined;\n\n const old = ModuleDefinition.from(cxt);\n cxt.config.modules.set(node.state.name,\n ModuleDefinition.diff(old, node.state.defs));\n ModuleDefinition.apply(node.state.defs, cxt);\n debug.trace('exiting defs for module', node.state.name);\n return [];\n },\n});\n\nfunction use(node: ModifierNode<ModuleDefinition>, cxt: ParseContext) {\n let { msgs, args, nodes } = bindArgs(node, ['name']);\n if (msgs) return msgs;\n\n const data = cxt.get(builtins)!;\n if (!cxt.config.modules.has(args!.name))\n return [new InvalidArgumentMessage(nodes!.name.location)];\n if (data.insideModule === args!.name)\n return [new CannotUseModuleInSelfMessage(nodes!.name.location)];\n\n const old = ModuleDefinition.from(cxt);\n const [combined, msg] = ModuleDefinition.combine(cxt.config.modules.get(args!.name)!, old);\n ModuleDefinition.apply(combined, cxt)\n node.state = old;\n\n if (msg)\n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n}\n\nexport const UseSystemMod =\n new SystemModifierDefinition<ModuleDefinition>('use', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n return use(node, cxt);\n },\n});\n\nexport const UseBlockMod =\n new BlockModifierDefinition<ModuleDefinition>('use', ModifierSlotType.Normal,\n{\n beforeParseContent(node, cxt) {\n return use(node, cxt);\n },\n afterParseContent(node, cxt) {\n if (node.state)\n ModuleDefinition.apply(node.state, cxt);\n return [];\n },\n expand(node) {\n return node.content;\n },\n});\n","import { debug } from \"../debug\";\nimport { ModifierNode, NodeType } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../modifier\";\nimport { SlotUsedOutsideDefinitionMessage, InvalidArgumentMessage, EitherNormalOrPreMessage, UnknownModifierMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Def, _Ent, _InstData, _Node } from \"../typing-helper\";\nimport { assert, NameManager } from \"../util\";\nimport { cloneNodes } from \"../node-util\";\nimport { builtins, CustomModifierSignature } from \"./internal\";\n\nfunction slotModifier\n <T extends NodeType.InlineModifier | NodeType.BlockModifier>\n (name: string, type: T, preformatted: boolean, inject: boolean): _Def<T, any>\n{\n type TState = {\n ok: true;\n data: _InstData<T>;\n index: number;\n injectMod?: _Def<T>\n } | { ok: false; };\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<TState>(name, ModifierSlotType.None)\n : new InlineModifierDefinition<TState>(name, ModifierSlotType.None)\n ) as _Def<T, TState>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.alwaysTryExpand = true;\n mod.prepareExpand = (node: ModifierNode<TState>, cxt: ParseContext, immediate: boolean) => {\n if (node.state) return [];\n\n function processSignature(s: CustomModifierSignature) {\n if (s.preformatted === undefined) {\n s.preformatted = preformatted;\n debug.trace('set preformatted to ', preformatted);\n } else if (s.preformatted !== preformatted) {\n return [new EitherNormalOrPreMessage(node.location)];\n }\n return [];\n }\n\n // check args\n const check = inject\n ? bindArgs(node, ['modname'], { optional: ['id'] })\n : bindArgs(node, [], { optional: ['id'] });\n if (check.msgs) {\n node.state = { ok: false };\n return check.msgs;\n }\n\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n\n let msgs = (() => {\n // check inside definition\n if (data.length == 0 && stack.length == 0) {\n node.state = { ok: false };\n return [new SlotUsedOutsideDefinitionMessage(node.location)];\n }\n\n // find default\n const id = check.args.id;\n if (!id) {\n let signature = stack.at(-1);\n if (signature) return processSignature(signature); // delay\n node.state = { ok: true, data: data.at(-1) as any, index: data.length - 1 };\n return;\n }\n\n // find id\n let signature = stack.find((x) => x.slotName == id);\n if (signature) return processSignature(signature); // delay\n for (let i = data.length - 1; i >= 0; i--) if (data[i].slotName === id) {\n node.state = { ok: true, data: data[i] as any, index: i };\n return;\n }\n\n // not found\n if (immediate) {\n node.state = { ok: false };\n return [new InvalidArgumentMessage(check.nodes.id!.location, id)];\n }\n return [];\n })();\n\n if (inject) {\n // @ts-expect-error\n const modname = check.args.modname;\n // @ts-expect-error\n const modnameNode = check.nodes.modname;\n const mod = ((isInline\n ? cxt.config.inlineModifiers\n : cxt.config.blockModifiers) as NameManager<_Def<T>>).get(modname);\n if (!mod) {\n node.state = { ok: false };\n return [new UnknownModifierMessage(modnameNode.location, modname)];\n }\n\n if (node.state?.ok)\n node.state.injectMod = mod;\n }\n\n if (msgs !== undefined) return msgs;\n return [];\n };\n mod.expand = (node: ModifierNode<TState>, cxt: ParseContext) => {\n if (!node.state) return undefined;\n if (!node.state.ok) return [];\n let cloned = cloneNodes(node.state.data.slotContent) as _Ent<T>[];\n if (inject) {\n assert(node.state.injectMod !== undefined);\n const mod = node.state.injectMod as any;\n const modNode: ModifierNode = {\n type, mod,\n location: node.location,\n head: node.head,\n arguments: {\n positional: [],\n named: new Map(),\n location: node.location\n }, // TODO: enable injecting args\n content: cloned as any\n };\n return [modNode];\n } else return cloned as any;\n };\n mod.beforeProcessExpansion = (node: ModifierNode<TState>, cxt: ParseContext) => {\n // TODO: not sure if this works\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n debug.trace('temporarily removed slot data for', node.state.data.mod.name);\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.splice(node.state.index, 1);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode<TState>, cxt: ParseContext) => {\n // TODO: not sure if this works\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n debug.trace('reinstated slot data for', node.state.data.mod.name);\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.splice(node.state.index, 0, node.state.data as any);\n return [];\n };\n return mod;\n}\n\nexport const SlotBlockMod = slotModifier('slot', NodeType.BlockModifier, false, false);\nexport const SlotInlineMod = slotModifier('slot', NodeType.InlineModifier, false, false);\n\nexport const PreSlotBlockMod = slotModifier('pre-slot', NodeType.BlockModifier, true, false);\nexport const PreSlotInlineMod = slotModifier('pre-slot', NodeType.InlineModifier, true, false);\n\nexport const InjectPreSlotBlockMod = slotModifier(\n 'inject-pre-slot', NodeType.BlockModifier, true, true);\nexport const InjectPreSlotInlineMod = slotModifier(\n 'inject-pre-slot', NodeType.InlineModifier, true, true);\n","import { debug } from \"../debug\";\nimport { NodeType, ModifierNode } from \"../interface\";\nimport { InlineModifierDefinition, ModifierSlotType, ArgumentInterpolatorDefinition, SystemModifierDefinition, BlockModifierDefinition } from \"../modifier\";\nimport { CannotExpandArgumentMessage, InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins } from \"./internal\";\nimport { ParseContext } from \"../parser-config\";\nimport { bindArgs } from \"../modifier-helper\";\n\nfunction resolveId(id: string, cxt: ParseContext): string | undefined {\n const store = cxt.get(builtins)!;\n // delay if it is a yet unknown argument\n if (store.inlineSlotDelayedStack.find((x) => x.args.includes(id))\n || store.blockSlotDelayedStack.find((x) => x.args.includes(id)))\n {\n debug.trace('delaying the yet unknown argument', id);\n return undefined;\n }\n\n let value: string | undefined = undefined;\n for (let i = store.inlineInstantiationData.length - 1; i >= 0; i--) {\n const data = store.inlineInstantiationData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n for (let i = store.blockInstantiationData.length - 1; i >= 0; i--) {\n const data = store.blockInstantiationData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n if (value === undefined)\n value = cxt.variables.get(id);\n return value;\n}\n\nlet ifdefBody = (x: boolean) => ({\n prepareExpand(node: ModifierNode, cxt: ParseContext) {\n let { msgs, args, nodes } = bindArgs(node, ['id']);\n if (msgs) return msgs;\n if (args!.id == '') return [new InvalidArgumentMessage(nodes!.id.location)];\n const value = resolveId(args!.id, cxt);\n node.state = value !== undefined;\n return [];\n },\n expand(node: any) {\n return (node.state == x) ? node.content : [];\n }\n});\n\nlet ifdefBlock = (name: string, x: boolean) =>\n new BlockModifierDefinition<boolean>\n (name, ModifierSlotType.Normal, ifdefBody(x));\n\nlet ifdefInline = (name: string, x: boolean) =>\n new InlineModifierDefinition<boolean>\n (name, ModifierSlotType.Normal, ifdefBody(x));\n\nexport const IfdefBlockMod = ifdefBlock('ifdef', true);\nexport const IfndefBlockMod = ifdefBlock('ifndef', false);\nexport const IfdefInlineMod = ifdefInline('ifdef', true);\nexport const IfndefInlineMod = ifdefInline('ifndef', false);\n\nexport const GetVarInlineMod =\n new InlineModifierDefinition<{ value: string; }>('$', ModifierSlotType.None,\n{\n alwaysTryExpand: true,\n // .$:id\n prepareExpand(node, cxt, immediate) {\n let { msgs, args, nodes } = bindArgs(node, ['id']);\n if (msgs) return immediate ? msgs : [];\n\n const id = args!.id;\n if (id == '')\n return immediate ? [new InvalidArgumentMessage(nodes!.id.location)] : [];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return immediate ? [new UndefinedVariableMessage(nodes!.id.location, id)] : [];\n node.state = { value };\n return [];\n },\n expand(node, _, immediate) {\n if (!node.state) return immediate ? [] : undefined;\n return [{ type: NodeType.Text, content: node.state.value, location: node.location }];\n },\n});\n\nexport const PrintInlineMod =\n new InlineModifierDefinition<{ value: string; }>('print', ModifierSlotType.None,\n{\n // .print:args...\n prepareExpand(node) {\n let { msgs, rest } = bindArgs(node, [], { rest: true });\n if (msgs) return msgs;\n node.state = { value: rest!.join('') };\n return [];\n },\n expand(node) {\n if (!node.state) return [];\n return [{ type: NodeType.Text, content: node.state.value, location: node.location }];\n },\n});\n\nexport const GetVarInterpolator =\n new ArgumentInterpolatorDefinition('$(', ')',\n{\n alwaysTryExpand: true,\n expand(content, cxt) {\n const result = resolveId(content, cxt);\n if (result !== undefined) debug.trace(`$(${content}) --> ${result}`);\n return result;\n },\n});\n\nexport const VarMod = new SystemModifierDefinition<{\n id: string; value: string;\n}>('var', ModifierSlotType.None, {\n // .var id:value\n prepareExpand(node) {\n if (node.arguments.named.size == 1 && node.arguments.positional.length == 0) {\n const [id, arg] = [...node.arguments.named][0];\n if (arg.expansion === undefined)\n return [new CannotExpandArgumentMessage(arg.location)];\n\n node.state = { id, value: arg.expansion };\n return [];\n }\n\n let { msgs, args, nodes } = bindArgs(node, ['id', 'value']);\n if (msgs) return msgs;\n\n if (!args!.id)\n return [new InvalidArgumentMessage(nodes!.id.location)];\n\n node.state = {\n id: args!.id,\n value: args!.value\n };\n return [];\n },\n expand(node, cxt) {\n if (node.state) {\n cxt.variables.set(node.state.id, node.state.value);\n debug.trace('set variable', node.state.id, '=', node.state.value);\n }\n return [];\n },\n});\n","import { Configuration, ReadonlyConfiguration } from \"../parser-config\";\nimport { DefineBlockMod, DefineInlineMod } from \"./define-modifier\";\nimport { DefineBlockShorthandMod, DefineInlineShorthandMod } from \"./define-shorthand\";\nimport { initParseContext } from \"./internal\";\nimport { ConcatBlockMod, RawBlockMod } from \"./misc\";\nimport { ModuleMod, UseBlockMod, UseSystemMod } from \"./module\";\nimport { InjectPreSlotBlockMod, InjectPreSlotInlineMod, PreSlotBlockMod, PreSlotInlineMod, SlotBlockMod, SlotInlineMod } from \"./slot\";\nimport { VarMod, GetVarInlineMod, GetVarInterpolator, PrintInlineMod, IfdefBlockMod, IfdefInlineMod, IfndefBlockMod, IfndefInlineMod } from \"./var\";\n\nlet builtin = new Configuration();\nbuiltin.initializers = [initParseContext];\nbuiltin.systemModifiers.add(\n DefineBlockMod, DefineInlineMod,\n DefineBlockShorthandMod, DefineInlineShorthandMod,\n VarMod,\n UseSystemMod,\n);\nbuiltin.blockModifiers.add(\n SlotBlockMod, PreSlotBlockMod, InjectPreSlotBlockMod,\n ModuleMod, UseBlockMod,\n IfdefBlockMod, IfndefBlockMod,\n RawBlockMod, ConcatBlockMod\n);\nbuiltin.inlineModifiers.add(\n SlotInlineMod, PreSlotInlineMod, InjectPreSlotInlineMod,\n GetVarInlineMod, PrintInlineMod,\n IfdefInlineMod, IfndefInlineMod,\n);\nbuiltin.argumentInterpolators.add(\n GetVarInterpolator,\n);\n\nexport const BuiltinConfiguration: ReadonlyConfiguration = Object.freeze(builtin);\n","import { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst bulletItemBlock = new BlockModifierDefinition(\n 'bullet-item', ModifierSlotType.Normal,\n { roleHint: undefined });\n\nconst orderedListItemBlock = new BlockModifierDefinition<number>(\n 'ordered-item', ModifierSlotType.Normal,\n {\n roleHint: undefined,\n prepareExpand(node) {\n let { msgs, args, nodes } = bindArgs(node, ['number']);\n if (msgs) return msgs;\n let num = Number.parseInt(args!.number);\n if (isNaN(num)) return [\n new InvalidArgumentMessage(nodes!.number.location, 'should be a number')];\n node.state = num;\n return [];\n },\n });\n\nconst subItemBlock = new BlockModifierDefinition(\n 'subitem', ModifierSlotType.Normal,\n { roleHint: undefined });\n\nexport const BulletBlocks = [bulletItemBlock, orderedListItemBlock, subItemBlock];\n\nexport const BulletBlockRenderersHTML = [\n [bulletItemBlock, (node, cxt) =>\n <li class='bullet'>{cxt.state.render(node.content, cxt)}</li>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [subItemBlock, (node, cxt) =>\n <div class='subitem'>{cxt.state.render(node.content, cxt)}</div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [orderedListItemBlock, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidBlock(node, 'bad format')\n : <li class='ordered' value={node.state}>{cxt.state.render(node.content, cxt)}</li>\n ] satisfies BlockRendererDefiniton<HTMLRenderType, number>\n];\n","import { ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs, onlyPermitSimpleParagraphs, onlyPermitSingleBlock } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const headings = Symbol();\n\ntype HeadingData = {\n name: string | undefined,\n implicit?: boolean,\n level: number\n}\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [headings]?: {\n path: HeadingData[]\n };\n }\n}\n\nexport function initHeadings(cxt: ParseContext) {\n cxt.init(headings, {\n path: []\n });\n}\n\nfunction setHeading(cxt: ParseContext, data: HeadingData) {\n const path = cxt.get(headings)!.path;\n while (path.length > 0 && path.at(-1)!.level >= data.level)\n path.pop();\n path.push(data);\n return [];\n}\n\nfunction currentHeadingLevel(cxt: ParseContext) {\n return cxt.get(headings)!.path.at(-1)?.level;\n}\n\nfunction currentExplicitHeadingLevel(cxt: ParseContext) {\n return cxt.get(headings)!.path.findLast((x) => !x.implicit)?.level;\n}\n\nconst headingBlock = new BlockModifierDefinition<HeadingData>(\n 'heading', ModifierSlotType.Normal,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, [], { optional: ['n'] });\n if (msgs) return msgs;\n\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = {\n name: undefined,\n level: currentHeadingLevel(cxt) ?? 1\n };\n if (args!.n !== undefined) {\n const level = Number.parseInt(args!.n);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.n!.location, 'should be a number between 1 and 6')];\n else node.state.level = level;\n }\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nconst implicitHeadingBlock = new BlockModifierDefinition<HeadingData>(\n 'implicit-heading', ModifierSlotType.None,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, [], { optional: ['n'] });\n if (msgs) return msgs;\n\n node.state = {\n name: undefined, implicit: true,\n level: (currentExplicitHeadingLevel(cxt) ?? 0) + 1\n };\n if (args!.n !== undefined) {\n const level = Number.parseInt(args!.n);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.n!.location, 'should be a number between 1 and 6')];\n else node.state.level = level;\n }\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nconst numberedHeadingBlock = new BlockModifierDefinition<HeadingData>(\n 'numbered-heading', ModifierSlotType.Normal,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['number']);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node, {optional: true});\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n const split = args!.number.trim().split('.').filter((x) => x.length > 0);\n if (split.length == 0 || split.length > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.number.location, 'heading level should be between 1 and 6')];\n else node.state = { name: split.join('.'), level: split.length };\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nexport const HeadingBlocks = [headingBlock, implicitHeadingBlock, numberedHeadingBlock];\n\nexport const HeadingBlockRenderersHTML = [\n [headingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const para = node.content[0] as ParagraphNode;\n const element = document.createElement(tag);\n element.appendChild(cxt.state.render(para.content, cxt));\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n [implicitHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const element = document.createElement(tag);\n element.className = 'implicit';\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n\n [numberedHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const element = document.createElement(tag);\n element.className = 'numbered-heading';\n element.appendChild(<span class='heading-number'>{node.state.name}</span>);\n if (node.content.length > 0) {\n const para = node.content[0] as ParagraphNode;\n element.appendChild(<span class='heading-content'>{cxt.state.render(para.content, cxt)}</span>);\n }\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n];\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, NodeType, LocationRange } from \"../interface\";\nimport { InlineModifierDefinition, ModifierSlotType, BlockModifierDefinition, SystemModifierDefinition } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton, RenderContext } from \"../renderer\";\nimport { stripNode } from \"../node-util\";\nimport { HTMLComponentPlugin, HTMLRenderType } from \"./html-renderer\";\n\nconst notes = Symbol();\n\ntype NoteSystem = {\n position: 'preserve' | 'global',\n autonumber: boolean\n}\n\ntype NoteDefinition = {\n id: number;\n system: string;\n name: string;\n location: LocationRange;\n content: BlockEntity[]\n}\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [notes]?: {\n systems: Map<string, NoteSystem>,\n defaultSystem: NoteSystem,\n definitions: NoteDefinition[],\n currentId: number\n };\n }\n}\n\nexport function initNotes(cxt: ParseContext) {\n cxt.init(notes, {\n systems: new Map(),\n defaultSystem: {\n position: 'preserve',\n autonumber: false\n },\n definitions: [],\n currentId: 0\n });\n}\n\nfunction getSystem(cxt: ParseContext, name?: string) {\n const defs = cxt.get(notes)!;\n let system: NoteSystem;\n if (name) {\n if (!defs.systems.has(name)) {\n system = { ...defs.defaultSystem };\n defs.systems.set(name, system);\n } else {\n system = defs.systems.get(name)!;\n }\n } else {\n system = defs.defaultSystem;\n }\n return system;\n}\n\nconst notePositionSystem = new SystemModifierDefinition(\n 'note-position', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['type'], { optional: ['name'], trim: true });\n if (msgs) return msgs;\n if (args!.type != 'global' && args!.type != 'preserve')\n return [new InvalidArgumentMessage(nodes!.type.location,\n \"should be `preserve` or `global`\")];\n getSystem(cxt, args!.name).position = args!.type;\n return [];\n },\n});\n\nconst noteRenumberingSystem = new SystemModifierDefinition(\n 'note-renumbering', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['type'], { optional: ['name'], trim: true });\n if (msgs) return msgs;\n if (args!.type != 'on' && args!.type != 'off')\n return [new InvalidArgumentMessage(nodes!.type.location,\n \"should be `preserve` or `global`\")];\n getSystem(cxt, args!.name).autonumber = args!.type == 'on';\n return [];\n },\n});\n\nconst noteMarkerInline = new InlineModifierDefinition<string>(\n 'note', ModifierSlotType.None,\n{\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['index']);\n if (msgs) return msgs;\n node.state = args?.index;\n return [];\n },\n});\n\nconst noteInline = new InlineModifierDefinition<string>(\n 'note-inline', ModifierSlotType.Normal,\n{\n roleHint: 'quote',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, [], { optional: ['index'] });\n if (msgs) return msgs;\n node.state = args?.index ?? '';\n return [];\n },\n beforeProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n const defs = cxt.get(notes)!;\n defs.definitions.push({\n system: '',\n id: defs.currentId,\n name: node.state,\n location: node.location,\n content: [{\n type: NodeType.Paragraph,\n location: {\n source: node.location.source,\n start: node.head.end,\n end: node.location.actualEnd ?? node.location.end\n },\n content: node.content\n }],\n });\n defs.currentId++;\n }\n return [];\n },\n});\n\nconst noteBlock = new BlockModifierDefinition<NoteDefinition>(\n 'note', ModifierSlotType.Normal,\n{\n roleHint: 'quote',\n prepareExpand(node, cxt) {\n let { msgs, args } = bindArgs(node, ['name'], { optional: ['system'], trim: true });\n if (msgs) return msgs;\n\n // TODO: check if this is sound in typing\n const content = stripNode(...node.content) as BlockEntity[];\n debug.trace(`add note: system=<${''}> name=${args!.name} @${node.location.start}`);\n debug.trace(`-->\\n`, debugPrint.node(...content));\n\n const defs = cxt.get(notes)!;\n const entry: NoteDefinition = {\n id: defs.currentId,\n system: args!.system ?? '',\n name: args!.name,\n location: node.location,\n content: content\n };\n defs.currentId++;\n defs.definitions.push(entry);\n node.state = entry;\n return [];\n },\n});\n\nexport const NoteBlocks = [noteBlock];\nexport const NoteInlines = [noteInline, noteMarkerInline];\nexport const NoteSystems = [notePositionSystem, noteRenumberingSystem];\n\nfunction makeNoteHTML(def: NoteDefinition, cxt: RenderContext<HTMLRenderType>) {\n return <section class='note' id={`note-id-${def.id}`}>\n <div class='note-name'>\n <p><a href={`#notemarker-id-${def.id}`}>{def.name}</a></p>\n </div>\n <div class='note-content'>\n {cxt.state.render(def.content, cxt)}\n </div>\n </section>\n}\n\nexport const NoteInlineRenderersHTML = [\n [noteMarkerInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n // find node definition\n const defs = cxt.parsedDocument.context.get(notes)!.definitions;\n const note = defs.findIndex((x) => /*x.position >= node.start &&*/ x.name == node.state);\n return <sup class='note' id={`notemarker-id-${note}`}>\n {note < 0\n ? `Not found: ${node.state}`\n : <a href={`#note-id-${note}`}>{node.state}</a>}\n </sup>;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n];\n\nexport const NoteBlockRenderersHTML = [\n [noteBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n const defs = cxt.parsedDocument.context.get(notes)!;\n const system = defs.systems.get(node.state.system) ?? defs.defaultSystem;\n if (system.position != 'preserve') return [];\n return makeNoteHTML(node.state, cxt);\n }] satisfies BlockRendererDefiniton<HTMLRenderType, NoteDefinition>,\n];\n\nexport const NotesFooterPlugin: HTMLComponentPlugin = (cxt) => {\n const defs = cxt.parsedDocument.context.get(notes)!;\n const items = cxt.parsedDocument.context.get(notes)!\n .definitions\n .filter((x) => (defs.systems.get(x.system) ?? defs.defaultSystem).position == 'global');\n if (items.length == 0) return undefined;\n return [\n <hr/>,\n <section class='notes-global'>\n {items.map((x) => makeNoteHTML(x, cxt))}\n </section>\n ];\n}\n","import { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../modifier\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const CodeBlock = new BlockModifierDefinition(\n 'code', ModifierSlotType.Preformatted,\n { roleHint: 'code' });\n\nexport const CodeInline = new InlineModifierDefinition(\n 'code', ModifierSlotType.Preformatted,\n { roleHint: 'code' });\n\nexport const CodeBlockRendererHTML =\n [CodeBlock, (node, cxt) =>\n <pre><code>{cxt.state.render(node.content, cxt)}</code></pre>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>;\n\nexport const CodeInlineRendererHTML =\n [CodeInline, (node, cxt) =>\n <span><code>{cxt.state.render(node.content, cxt)}</code></span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>;\n","import { ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { onlyPermitSingleBlock, onlyPermitSimpleParagraphs } from \"../modifier-helper\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst quoteBlock = new BlockModifierDefinition(\n 'quote', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst epitaphBlock = new BlockModifierDefinition(\n 'epitaph', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst calloutBlock = new BlockModifierDefinition(\n 'callout', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst detailBlock = new BlockModifierDefinition(\n 'detail', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst attributionBlock = new BlockModifierDefinition<boolean>(\n 'by', ModifierSlotType.Normal,\n {\n roleHint: 'quote',\n prepareExpand(node) {\n let msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n node.state = true;\n return [];\n },\n });\n\nexport const QuoteBlocks = [quoteBlock, epitaphBlock, calloutBlock, detailBlock, attributionBlock];\n\nexport const QuoteBlockRenderersHTML = [\n [quoteBlock, (node, cxt) =>\n <blockquote>{cxt.state.render(node.content, cxt)}</blockquote>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [epitaphBlock, (node, cxt) =>\n <blockquote class='epitaph'>{cxt.state.render(node.content, cxt)}</blockquote>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [detailBlock, (node, cxt) =>\n <div class='detail'>{cxt.state.render(node.content, cxt)}</div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [calloutBlock, (node, cxt) =>\n <aside>{cxt.state.render(node.content, cxt)}</aside>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [attributionBlock, (node, cxt) => {\n if (!node.state)\n return cxt.state.invalidBlock(node, 'bad format');\n let para = node.content[0] as ParagraphNode;\n return <p class='attribution'>{cxt.state.render(para.content, cxt)}</p>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, boolean>\n];\n","import { InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst emphasisInline = new InlineModifierDefinition(\n 'emphasis', ModifierSlotType.Normal,\n { roleHint: 'emphasis' });\n\nconst keywordInline = new InlineModifierDefinition(\n 'keyword', ModifierSlotType.Normal,\n { roleHint: 'keyword' });\n\nconst highlightInline = new InlineModifierDefinition(\n 'highlight', ModifierSlotType.Normal,\n { roleHint: 'highlight' });\n\nconst commentaryInline = new InlineModifierDefinition(\n 'commentary', ModifierSlotType.Normal,\n { roleHint: 'commentary' });\n\nconst sequenceInline = new InlineModifierDefinition(\n 'seq', ModifierSlotType.Normal,\n { roleHint: 'pre' });\n\nexport const InlineStyles = [emphasisInline, keywordInline, highlightInline, commentaryInline, sequenceInline];\n\nexport const InlineStyleRenderersHTML = [\n [emphasisInline, (node, cxt) =>\n <em>{cxt.state.render(node.content, cxt)}</em>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [keywordInline, (node, cxt) =>\n <b>{cxt.state.render(node.content, cxt)}</b>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [highlightInline, (node, cxt) =>\n <mark>{cxt.state.render(node.content, cxt)}</mark>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [commentaryInline, (node, cxt) =>\n <span class='commentary'>{cxt.state.render(node.content, cxt)}</span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [sequenceInline, (node, cxt) =>\n <span class='seq'>{cxt.state.render(node.content, cxt)}</span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>\n];\n","import { ParagraphNode } from \"../interface\";\nimport { ModifierSlotType, InlineModifierDefinition, BlockModifierDefinition } from \"../modifier\";\nimport { bindArgs, onlyPermitSimpleParagraphs, onlyPermitSingleBlock } from \"../modifier-helper\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst rubyInline = new InlineModifierDefinition<string>(\n 'ruby', ModifierSlotType.Normal,\n {\n roleHint: undefined,\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['text']);\n if (msgs) return msgs;\n node.state = args!.text;\n return [];\n },\n });\n\nconst linkInline = new InlineModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nconst tabInline = new InlineModifierDefinition<string>(\n 'tab', ModifierSlotType.None);\n\nconst styleBlock = new BlockModifierDefinition<string>(\n 'style', ModifierSlotType.Normal,\n {\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['style']);\n if (msgs) return msgs;\n node.state = args!.style;\n return [];\n },\n });\n\nconst breakBlock = new BlockModifierDefinition<string>(\n 'break', ModifierSlotType.None);\n\nconst linkBlock = new BlockModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nconst imageBlock = new BlockModifierDefinition<string>(\n 'image', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node, {optional: true});\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nexport const MiscInlines = [rubyInline, linkInline, tabInline];\n\nexport const MiscBlocks = [styleBlock, breakBlock, linkBlock, imageBlock];\n\nexport const MiscInlineRenderersHTML = [\n [rubyInline, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidInline(node, 'bad format')\n : <ruby>\n {cxt.state.render(node.content, cxt)}\n <rt>{node.state}</rt>\n </ruby>\n ] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [linkInline, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidInline(node, 'bad format')\n : <a href={encodeURI(node.state)}>\n {cxt.state.render(node.content, cxt)}\n </a>\n ] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [tabInline, () => new Text('\\t')] satisfies InlineRendererDefiniton<HTMLRenderType>,\n];\n\nexport const MiscBlockRenderersHTML = [\n [styleBlock, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidBlock(node, 'bad format')\n : <div class={`emmmstyle-${node.state}`} style=\"display:contents\">\n {cxt.state.render(node.content, cxt)}\n </div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [breakBlock, () => <hr/>] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [linkBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n const content = cxt.state.render(node.content, cxt);\n return <a href={encodeURI(node.state)}>\n {content.childElementCount > 0 ? content : node.state}\n </a>;\n }\n ] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [imageBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n let transformed: string | undefined;\n try {\n transformed = cxt.config.options.transformAsset(node.state);\n } catch {\n return cxt.state.invalidBlock(node, 'unable to transform asset');\n }\n return <figure>\n {transformed\n ? <img src={transformed} data-original-src={node.state} />\n : <img src={node.state} />}\n {node.content.length > 0\n ? <figcaption>\n {cxt.state.render((node.content[0] as ParagraphNode).content, cxt)}\n </figcaption>\n : []}\n </figure>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>\n];\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity } from \"../interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { cloneNode, stripNode } from \"../node-util\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst table = Symbol();\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [table]?: {\n current?: TableDefiniton\n }\n }\n}\n\ntype TableDefiniton = {\n status: 'header' | 'body' | 'footer',\n header: BlockEntity[],\n body: BlockEntity[],\n footer: BlockEntity[]\n};\n\n\nexport function initTable(cxt: ParseContext) {\n cxt.init(table, {\n current: undefined\n });\n}\n\nconst tableBlock = new BlockModifierDefinition<TableDefiniton>(\n 'table', ModifierSlotType.Normal,\n{\n beforeParseContent(node, cxt, immediate) {\n if (!immediate || node.state) return [];\n const t = cxt.get(table)!;\n if (t.current) return [\n new EntityNotAllowedMessage(node.location, 'tables cannot be nested')];\n\n node.state = {\n status: 'header',\n header: [], body: [], footer: []\n };\n t.current = node.state;\n debug.trace('entering table');\n return [];\n },\n afterParseContent(_node, cxt) {\n cxt.get(table)!.current = undefined;\n debug.trace('leaving table');\n return []\n },\n});\n\nconst tableRowBlock = new BlockModifierDefinition(\n 'table-row', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'rows can only appear in tables')];\n\n const newNode = stripNode(cloneNode(node)) as BlockEntity[];\n debug.info('pushing table row\\n', debugPrint.node(...newNode));\n if (t.status == 'header') t.header.push(...newNode);\n if (t.status == 'body') t.body.push(...newNode);\n if (t.status == 'footer') t.footer.push(...newNode);\n return [];\n },\n});\n\nconst tableSeparatorBlock = new BlockModifierDefinition(\n 'table-separator', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'separators can only appear in tables')];\n\n if (t.status == 'header') t.status = 'body';\n else if (t.status == 'body') t.status = 'footer';\n else if (t.status == 'footer') {}; // do nothing\n\n debug.trace('table status ->', t.status);\n return [];\n },\n expand() {\n return [];\n },\n})\n\nconst tableCellBlock = new BlockModifierDefinition(\n 'table-cell', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'cells can only appear in tables')];\n return [];\n }\n});\n\nconst tableCellInline = new InlineModifierDefinition(\n 'table-cell', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'cells can only appear in tables')];\n return [];\n }\n});\n\nexport const TableBlocks = [tableBlock, tableRowBlock, tableCellBlock, tableSeparatorBlock];\nexport const TableInlines = [tableCellInline];\n\nexport const TableBlockRenderers = [\n [tableBlock, (node, cxt) => {\n const t = node.state;\n if (!t) return cxt.state.invalidBlock(node, 'bad format');\n return <table>\n <thead>{cxt.state.render(t.header, cxt)}</thead>\n <tbody>{cxt.state.render(t.body, cxt)}</tbody>\n <tfoot>{cxt.state.render(t.footer, cxt)}</tfoot>\n </table>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, TableDefiniton>,\n\n [tableRowBlock, (node, cxt) => {\n return <tr>{cxt.state.render(node.content, cxt)}</tr>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n\n [tableCellBlock, (node, cxt) => {\n return <td>{cxt.state.render(node.content, cxt)}</td>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n];\n\nexport const TableInlineRenderers = [\n [tableCellInline, (node, cxt) => {\n return <td>{cxt.state.render(node.content, cxt)}</td>;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n];\n","import { NodeType } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const GalleryBlock = new BlockModifierDefinition(\n 'gallery', ModifierSlotType.Normal,\n{});\n\nexport const GalleryBlockRendererHTML = [GalleryBlock,\n (node, cxt) => {\n const content = (node.content[0].type == NodeType.Group && node.content.length == 1)\n ? node.content[0].content\n : node.content;\n\n return <ul class='gallery'>\n {content.map((x) => <li>\n {cxt.state.render([x], cxt)}\n </li>)}\n </ul>;\n }\n] satisfies BlockRendererDefiniton<HTMLRenderType>;\n","import { BuiltinConfiguration } from \"../builtin/builtin\";\nimport { BulletBlocks } from \"./bullets\";\nimport { HeadingBlocks, initHeadings } from \"./headings\";\nimport { initNotes, NoteBlocks, NoteInlines, NoteSystems } from \"./notes\";\nimport { CodeBlock, CodeInline } from \"./code\";\nimport { QuoteBlocks } from \"./quotes\";\nimport { InlineStyles } from \"./inline-styles\";\nimport { MiscBlocks, MiscInlines } from \"./misc\";\nimport { Configuration, ReadonlyConfiguration } from \"../parser-config\";\nimport { initTable, TableBlocks, TableInlines } from \"./table\";\nimport { GalleryBlock } from \"./gallery\";\n\nlet config = Configuration.from(BuiltinConfiguration);\nconfig.initializers.push(initNotes, initHeadings, initTable);\nconfig.blockModifiers.add(\n ...HeadingBlocks,\n ...BulletBlocks,\n CodeBlock,\n ...QuoteBlocks,\n ...MiscBlocks,\n ...NoteBlocks,\n ...TableBlocks,\n GalleryBlock\n);\nconfig.inlineModifiers.add(\n CodeInline,\n ...InlineStyles,\n ...MiscInlines,\n ...NoteInlines,\n ...TableInlines,\n);\nconfig.systemModifiers.add(\n ...NoteSystems,\n);\n\nexport const DefaultConfiguration: ReadonlyConfiguration = Object.freeze(config);\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, NodeType } from \"../interface\";\nimport { RenderContext, RenderConfiguration, ReadonlyRenderConfiguration } from \"../renderer\";\nimport { BulletBlockRenderersHTML } from \"./bullets\";\nimport { CodeBlockRendererHTML, CodeInlineRendererHTML } from \"./code\";\nimport { HeadingBlockRenderersHTML } from \"./headings\";\nimport { InlineStyleRenderersHTML } from \"./inline-styles\";\nimport { MiscBlockRenderersHTML, MiscInlineRenderersHTML } from \"./misc\";\nimport { NoteBlockRenderersHTML, NoteInlineRenderersHTML, NotesFooterPlugin } from \"./notes\";\nimport { QuoteBlockRenderersHTML } from \"./quotes\";\nimport { TableBlockRenderers, TableInlineRenderers } from \"./table\";\nimport { GalleryBlockRendererHTML } from \"./gallery\";\nimport { useDocument } from \"minimal-jsx-runtime/jsx-runtime\";\n\nexport type HTMLRendererOptions = {\n document: Document,\n headPlugins: HTMLComponentPlugin[];\n headerPlugins: HTMLComponentPlugin[];\n footerPlugins: HTMLComponentPlugin[];\n postprocessPlugins: HTMLPostprocessPlugin[];\n transformAsset: (id: string) => string | undefined;\n}\n\nexport type HTMLRenderType = {\n state: HTMLRenderState,\n options: HTMLRendererOptions,\n document: Document,\n return: Node | Node[],\n};\n\nexport type HTMLRenderPlugin =\n (elem: BlockEntity | InlineEntity, cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLComponentPlugin =\n (cxt: RenderContext<HTMLRenderType>) => Node | Node[] | undefined;\n\nexport type HTMLPostprocessPlugin =\n (cxt: RenderContext<HTMLRenderType>, output: Document) => void;\n\nexport class HTMLRenderState {\n title: string = '';\n stylesheet = ''; // FIXME: very unsafe!\n cssVariables = new Map<string, string>;\n\n invalidBlock(node: BlockEntity, msg: string) {\n let name = NodeType[node.type];\n if (node.type === NodeType.BlockModifier)\n name += ` (${node.mod.name})`;\n // TODO: include details\n return <details class='invalid'>\n <summary>Invalid {name}</summary>\n <i>{msg}</i>\n <pre>{debugPrint.node(node)}</pre>\n </details>;\n }\n\n invalidInline(node: InlineEntity, msg: string) {\n let name = NodeType[node.type];\n if (node.type === NodeType.InlineModifier)\n name += ` (${node.mod.name})`;\n // TODO: include details\n return <details class='invalid'>\n <summary>Invalid {name}</summary>\n <i>{msg}</i>\n <pre>{debugPrint.node(node)}</pre>\n </details>;\n }\n\n render(elems: (BlockEntity | InlineEntity)[], cxt: RenderContext<HTMLRenderType>) {\n const document = cxt.config.options.document;\n useDocument(document);\n\n let fragment = document.createDocumentFragment();\n elems\n .flatMap((x) => cxt.renderEntity(x))\n .flat()\n .forEach((x) => fragment.appendChild(x));\n return fragment;\n }\n}\n\nconst htmlConfig =\n new RenderConfiguration<HTMLRenderType>(\n{\n document: globalThis.window.document,\n headPlugins: [],\n headerPlugins: [],\n footerPlugins: [NotesFooterPlugin],\n postprocessPlugins: [],\n transformAsset: () => undefined,\n // postprocessPlugins: [],\n},\n(results, cxt) => {\n // TODO: seriously...\n let styles = cxt.state.stylesheet.replaceAll(/var\\(--(.*?)\\)/g,\n (m, c) => cxt.state.cssVariables.get(c) ?? m);\n let doc = document.implementation.createHTMLDocument(cxt.state.title);\n doc.head.append(\n <meta charset=\"UTF-8\" />,\n <style>{styles}</style>,\n ...cxt.config.options.headPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .flat()\n );\n doc.body.append(\n <section class=\"article-container\">\n <section class=\"article-body\">\n {cxt.config.options.headerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)}\n {results}\n {cxt.config.options.footerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)}\n </section>\n </section>\n );\n for (const p of cxt.config.options.postprocessPlugins) {\n p(cxt, doc);\n }\n return doc;\n});\n\nhtmlConfig.paragraphRenderer = (node, cxt) =>\n <p>{node.content.flatMap((x) => cxt.renderEntity(x))}</p>;\n\nhtmlConfig.textRenderer = (node, cxt) => {\n switch (node.type) {\n case NodeType.Preformatted:\n return new Text(node.content.text);\n case NodeType.Text:\n case NodeType.Escaped:\n const split = node.content.split('\\n');\n const result = [];\n for (let i = 0; i < split.length; i++) {\n result.push(new Text(split[i]));\n if (i < split.length - 1)\n result.push(<br/>);\n }\n return result;\n default:\n return debug.never(node);\n }\n}\n\nhtmlConfig.undefinedBlockRenderer = (node, cxt) => {\n return cxt.state.invalidBlock(node, `No renderer defined! for ${node.mod.name}`);\n}\n\nhtmlConfig.undefinedInlineRenderer = (node, cxt) => {\n return cxt.state.invalidInline(node, `No renderer defined! for ${node.mod.name}`);\n}\n\nhtmlConfig.addBlockRenderer(\n ...HeadingBlockRenderersHTML,\n ...BulletBlockRenderersHTML,\n CodeBlockRendererHTML,\n ...QuoteBlockRenderersHTML,\n ...MiscBlockRenderersHTML,\n ...NoteBlockRenderersHTML,\n ...TableBlockRenderers,\n GalleryBlockRendererHTML\n);\n\nhtmlConfig.addInlineRenderer(\n CodeInlineRendererHTML,\n ...InlineStyleRenderersHTML,\n ...MiscInlineRenderersHTML,\n ...NoteInlineRenderersHTML,\n ...TableInlineRenderers,\n)\n\nexport const HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType> = htmlConfig;\n","import { debug, DebugLevel } from './debug';\n\nexport * from './source';\nexport * from './interface';\nexport * from './modifier';\nexport * from './scanner';\n// export * from './module';\n\nexport * from './parser';\nexport * from './parser-config';\nexport * from './renderer';\nexport * as messages from './messages';\nexport * as helper from './modifier-helper';\nexport * from './node-util';\n\nexport * from './builtin/builtin';\nexport * from './default/default';\nexport * from './default/html-renderer';\nexport { DebugLevel } from './debug';\nexport { debugPrint } from './debug-print';\n\nexport const emmmVersion = '0.0.6';\n\nexport function setDebugLevel(level: DebugLevel) {\n debug.level = level;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAa,cAAb,MAAa,YAAsC;CAC/C,AAAQ,QAA6B,EAAE;CACvC,AAAQ,uBAAO,IAAI,KAAgB;CAEnC,YAAY,MAA+D;AACvE,MAAI,SAAS,OAAW;AACxB,MAAI,gBAAgB,aAAa;AAC7B,QAAK,QAAQ,CAAC,GAAG,KAAK,MAAM;AAC5B,QAAK,OAAO,IAAI,IAAI,KAAK,KAAK;SAC3B;GACH,MAAM,QAAQ,CAAC,GAAG,KAAwC;AAC1D,WAAQ,gBAAgB,MAAM,OAAO,IAAI,IAAI,MAAM,EAAE,QAAQ,MAAM,OAAO;AAC1E,QAAK,QAAQ,MAAM,KAAK,OAAO;IAAC,GAAG,EAAE;IAAM,GAAG;IAAE,EAAE;AAClD,QAAK,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO;AAClD,QAAK,OAAO,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;;;CAI1D,UAAe;AACX,SAAO,KAAK,MAAM,KAAK,EAAC,QAAO,EAAE;;CAGrC,QAAgB;AACZ,SAAO,IAAI,IAAI,KAAK,SAAS,CAAC;;CAGlC,IAAI,MAAc;AACd,SAAO,KAAK,KAAK,IAAI,KAAK;;CAG9B,IAAI,MAAc;AACd,SAAO,KAAK,KAAK,IAAI,KAAK;;CAG9B,OAAO,MAAc;AAEjB,SADQ,KAAK,KAAK,IAAI,KAAK,KACd,OAAU;AACvB,OAAK,KAAK,OAAO,KAAK;AACtB,OAAK,MAAM,OAAO,KAAK,MAAM,WAAW,MAAM,EAAE,KAAK,KAAK,EAAE,EAAE;;CAGlE,IAAI,GAAG,OAAY;AACf,OAAK,MAAM,QAAQ,OAAO;AACtB,UAAO,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC;AAC5B,QAAK,KAAK,IAAI,KAAK,MAAM,KAAK;GAC9B,MAAM,MAAM,KAAK,KAAK;GACtB,IAAI,IAAI;AACR,UAAO,IAAI,KAAK,MAAM,UAAU,KAAK,MAAM,GAAG,EAAE,SAAS,IAAK;AAC9D,QAAK,MAAM,OAAO,GAAG,GAAG;IAAC,GAAG,KAAK;IAAM,GAAG;IAAK,CAAC;;;CAIxD,KAAK,WAA6C;EAC9C,MAAM,SAAS,KAAK,MAAM,MAAM,MAAM,UAAU,EAAE,EAAE,CAAC;AACrD,SAAO,SAAS,OAAO,IAAI;;;AAMnC,SAAgB,OAAO,GAAuB;AAC1C,KAAI,CAAC,CAAC,CAAC,GAAG;EACN,IAAI,wBAAQ,IAAI,MAAM,mBAAmB;AACzC,UAAQ,IAAI,MAAM,MAAM;AACxB,QAAM;;;;;;AChEd,IAAY,oDAAL;AACH;AACA;AACA;AACA;AACA;;;AAGJ,MAAa,QAAQ;CACjB,OAAO,WAAW;CAClB,MAAM,MAAW,GAAG,MAAW;AAC3B,MAAI,KAAK,QAAQ,WAAW,MAAO;AACnC,MAAI,OAAO,QAAQ,WAAY,QAAO,MAAM;AAC5C,UAAQ,KAAK,SAAS,MAAM,GAAG,KAAK;;CAExC,KAAK,MAAW,GAAG,MAAW;AAC1B,MAAI,KAAK,QAAQ,WAAW,KAAM;AAClC,MAAI,OAAO,QAAQ,WAAY,QAAO,MAAM;AAC5C,UAAQ,KAAK,SAAS,MAAM,GAAG,KAAK;;CAExC,QAAQ,MAAW,GAAG,MAAW;AAC7B,MAAI,KAAK,QAAQ,WAAW,QAAS;AACrC,MAAI,OAAO,QAAQ,WAAY,QAAO,MAAM;AAC5C,UAAQ,KAAK,SAAS,MAAM,GAAG,KAAK;;CAExC,MAAM,MAAW,GAAG,MAAW;AAC3B,MAAI,KAAK,QAAQ,WAAW,MAAO;AACnC,MAAI,OAAO,QAAQ,WAAY,QAAO,MAAM;AAC5C,UAAQ,MAAM,SAAS,MAAM,GAAG,KAAK;;CAEzC,MAAM,GAAU;AACZ,SAAO,MAAM;;CAEpB;;;;ACbD,IAAa,eAAb,MAA4C;CACxC,AAAS;CACT,AAAS;CACT,AAAiB;CAEjB,YAAY,GAAqB,AAAiBA,KAAa;EAAb;AAC9C,OAAK,OAAO,EAAE;AACd,OAAK,UAAU,CAAC,EAAE;AAClB,GAAC,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,OAAI,KAAK,KAAM,MAAK,QAAQ,KAAK,IAAE,EAAE;IACvC;AACF,OAAK,SAAS,KAAK,QAAQ;AAC3B,OAAK,QAAQ,KAAK,SAAS;;CAG/B,UAAU,KAAyC;EAC/C,IAAI,OAAO,IAAI,UAAU;AACzB,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,IACrC,KAAI,KAAK,QAAQ,KAAK,KAAK;AACvB,UAAO,IAAI;AACX,aAAU,KAAK,QAAQ,IAAI;AAC3B;;AAGR,SAAO,CAAC,MAAM,MAAM,QAAQ;;CAGhC,YAAY,GAAmB;AAC3B,SAAO,KAAK,EAAE;AACd,MAAI,KAAK,KAAK,QAAQ,OAAQ,QAAO;AACrC,SAAO,KAAK,QAAQ;;CAGxB,OAAO,GAA+B;EAClC,MAAM,QAAQ,KAAK,YAAY,EAAE;EACjC,MAAM,MAAM,KAAK,YAAY,IAAI,EAAE;AACnC,MAAI,UAAU,SAAU,QAAO;AAC/B,SAAO,KAAK,IAAI,UAAU,OAAO,MAAM,EAAE;;;;;;ACxDjD,IAAY,8DAAL;AACH;AACA;AACA;;;AAoBJ,IAAY,gDAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjCJ,IAAY,gEAAL;AACH;;AAEA;;AAEA;;;AAOJ,IAAM,eAAN,MAAmC;CAC/B,YACI,AAAgBC,MAChB,AAAgB,WAAW,iBAAiB,QAC5C,MAA8C;EAF9B;EACA;AAEhB,MAAI,KAAM,QAAO,OAAO,MAAM,KAAK;;CAGvC,WAA6B,EAAE;;;;CAK/B;;;;;;CAMA,wBAAwB;;;;;;CAMxB,kBAAkB;;;;CAKlB;;;;CAIA;;;CAIA;;;CAGA;;;;CAKA;;;;CAIA;;AAGJ,IAAa,0BAAb,cACY,aAAqD;AAGjE,IAAa,2BAAb,cACY,aAAuD;AAGnE,IAAa,2BAAb,cACY,aAAgD;AAG5D,IAAa,iCAAb,MAA4C;CACxC,YACI,AAAgBA,MAChB,AAAgBC,SAChB,MAAgD;EAFhC;EACA;AAEhB,MAAI,KAAM,QAAO,OAAO,MAAM,KAAK;;CAGvC,kBAAkB;CAClB;;;;;AChFJ,IAAa,gBAAb,MAA8C;CAC1C,AAAgB;CAChB,OAAO;CACP;CAEA,YACI,AAAQC,KACR,aAA+B,EAAC,MAAM,WAAU,EAChD,aAA0B,EAAE,EAC9B;EAHU;AAIR,OAAK,SAAS,IAAI,aAAa,YAAY,IAAI;AAC/C,QAAKC,aAAc,WAAW,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,SAAS;;CAG7E,WAAmB;AACf,SAAO,MAAKC;;CAGhB,QAAiB;AACb,SAAO,MAAKA,OAAQ,KAAK,IAAI;;CAGjC,aAA0B;EACtB,IAAIC,SAAsB,EAAE;AAC5B,SAAO,MAAKF,WAAY,SAAS,KAAK,MAAKA,WAAY,GAAG,YAAY,MAAKC,IACvE,QAAO,KAAK,MAAKD,WAAY,OAAO,CAAE;AAC1C,SAAO;;CAGX,KAAK,KAAsB;AACvB,SAAO,QAAQ,GAAG;AAElB,MADW,MAAKC,MAAO,IAAI,SAChB,KAAK,IAAI,OAAQ,QAAO;AACnC,SAAO,KAAK,IAAI,MAAM,MAAKA,KAAM,MAAKA,MAAO,IAAI,OAAO,IAAI;;CAGhE,aAAqB;AACjB,MAAI,KAAK,OAAO,CAAE,OAAM,IAAI,WAAW,MAAM;EAC7C,IAAI,OAAO,KAAK,IAAI,MAAKA;AACzB,QAAKA;AACL,SAAO;;CAGX,OAAO,KAAsB;AACzB,MAAI,CAAC,KAAK,KAAK,IAAI,CAAE,QAAO;AAC5B,QAAKA,OAAQ,IAAI;AACjB,SAAO;;CAGX,uBAAsC;AAClC,MAAI,KAAK,OAAO,CAAE,QAAO;EACzB,IAAI,OAAO,KAAK,IAAI,MAAKA;AACzB,MAAI,CAAC,KAAM,SAAS,KAAK,CAAE,QAAO;AAClC,QAAKA;AACL,SAAO;;;;;;ACzDf,MAAa,aAAa;CACtB,gBAAgB,MACZ,KAAK,EAAE,KAAK,KAAK,iBAAiB,EAAE,UAAU;CAElD,iBAAiB,MACb,KAAK,EAAE,KAAK,KAAK,iBAAiB,EAAE,UAAU;CAElD,kBAAkB,MACd,EAAE,OAAO,EAAE,MAAM,KAAK,KAAG,MAAM,WAAW,EAAE,OAAOE,MAAI,CAAC,KAAK,GAAG,IACtD,EAAE,IAAI,YAAY,iBAAiB,OAC/B,KAAK,iBAAiB,EAAE,WAAW;CAErD,iBAAiB,MACb,EAAE,OAAO,EAAE,MAAM,KAAK,KAAG,MAAM,WAAW,EAAE,OAAOA,MAAI,CAAC,KAAK,GAAG,IACtD,EAAE,IAAI,YAAY,iBAAiB,OAC/B,KAAK,iBAAiB,EAAE,WAAW;CAErD,WAAW,QACP,IAAI,QAAQ,IAAI,oBAAoB,CAAC,KAAK,GAAG;CAEjD,OAAO,GAAG,UACN,MAAM,KAAK,MAAM,eAAe,EAAE,CAAC,CAAC,KAAK,KAAK;CAElD,SAAS;CACT,OAAO;CACP,UAAU;CACb;AAED,SAAS,oBAAoB,MAA8B;AACvD,SAAQ,KAAK,MAAb;EACI,KAAK,SAAS,KACV,QAAO,KAAK;EAChB,KAAK,SAAS,QACV,QAAO,YAAY,KAAK,QAAQ;EACpC,KAAK,SAAS,cACV,QAAO,WAAW,KAAK,WAAW,KAAK,GAAG,KAAK,WAAW,QAAQ,GAAG,WAAW,SAAS,KAAK,SAAS,GAAG,KAAK,YAAY,IAAI,KAAK,cAAc,GAAG;EACzJ,QACI,QAAO,MAAM,MAAM,KAAK;;;AAIpC,SAAS,eAAe,MAAkC,SAAS,IAAI;CACnE,SAAS,gBAAgB,SAAyC,WAAiB,IAAI;EACnF,IAAI,QAAQ,QAAQ,KAAK,MAAM,eAAe,GAAGC,WAAS,KAAK,CAAC,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;AAC5F,MAAI,MAAM,UAAU,EAAG,QAAO;AAC9B,SAAO,MAAM,KAAK,MAAM,GAAGA,SAAO,IAAI,IAAI,CAAC,KAAK,KAAK;;CAEzD,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS;AACtD,SAAQ,KAAK,MAAb;EACI,KAAK,SAAS;EACd,KAAK,SAAS;GACV,MAAM,UAAU,gBAAgB,KAAK,SAAS,OAAO;AACrD,OAAI,QAAQ,SAAS,EACjB,WAAU,MAAM,QAAQ,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI;OAC/E,WAAU,IAAI,KAAK,SAAS,IAAI;AACrC;EACJ,KAAK,SAAS;AACV,aAAU,MAAM,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI;AAChG;EACJ,KAAK,SAAS;AACV,aAAU,MAAM,OAAO,IAAI,KAAK,QAAQ,KAAK,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI;AACrG;EACJ,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,SAAS;GACV,MAAM,UAAU,KAAK,UAAU,WAAW,KAAK,GAAG,MAC9C,KAAK,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,GAAG,EAAE,SAAS,IAAI,GAAG,WAAW,SAAS,EAAE,GAAG,CAAC,KAAK,GAAG;GACrG,MAAM,YAAY,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MACxD,KAAK,OAAO,OAAO,KAAK,IAAI,EAAE,SAAS,MAAM,GAAG,EAAE,SAAS,IAAI,GAAG,WAAW,SAAS,EAAE,GAAG,CAAC,KAAK,GAAG;AACxG,OAAI,KAAK,QAAQ,SAAS,EACtB,WAAU,OAAO,KAAK,IAAI,OAAO,UAAU,UAAU,OAAO,gBAAgB,KAAK,SAAS,OAAO,GAAG,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI;OAC1J,WAAU,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,OAAO,UAAU,UAAU;AACjF,OAAI,KAAK,WAAW;IAChB,MAAMC,YAAU,gBAAgB,KAAK,WAAW,OAAO;AACvD,QAAIA,UAAQ,SAAS,EACjB,WAAU,KAAK,OAAO,eAAeA,UAAQ,IAAI,OAAO;aACnD,KAAK,QAAQ,SAAS,eAC3B,WAAU,KAAK,OAAO;;AAE9B;EACJ,KAAK,SAAS,KACV,QAAO,KAAK;EAChB,QACI,QAAO,MAAM,MAAM,KAAK;;AAEhC,QAAO;;AAGX,SAAS,gBAAgB,KAAoB,UAAU,GAAG;CACtD,MAAM,oBAAoB,IAAI,SAAS,IAAI;CAC3C,IAAI,CAAC,IAAI,MAAM,IAAI,OAAO,UAAU,IAAI,MAAM;CAC9C,IAAI,CAAC,IAAI,MAAM,IAAI,OAAO,UAAU,IAAI,aAAa,IAAI,IAAI;CAC7D,MAAM,WAAW,KAAK,KAAK,KAAG,GAAG,UAAU,CAAC,SAAS,KAAG,GAAG,UAAU,CAAC,OAAO;CAE7E,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,QAAQ;CAC3C,MAAM,UAAU,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,QAAQ;CAC7D,IAAIC,QAAkB,EAAE;AACxB,MAAK,IAAI,IAAI,WAAW,KAAK,SAAS,KAAK;EACvC,MAAM,OAAO,IAAI,OAAO,OAAO,EAAE;AACjC,QAAM,MAAM,IAAE,GAAG,UAAU,CAAC,SAAS,SAAS,GAAG,QAAQ,KAAK;AAC9D,MAAI,KAAK,MAAM,KAAK,IAAI;GACpB,MAAM,WAAW,KAAK,KAAK,KAAK;GAChC,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AACnC,SAAM,KACA,IAAI,OAAO,SAAS,GAAG,QACvB,IAAI,OAAO,SAAS,IACnB,oBAAoB,MAAM,IAAI,OAAO,SAAS,WAAW,EAAE,EAAE;;;AAG5E,QAAO,MAAM,KAAK,KAAK;;AAG3B,SAAS,cAAc,GAAY;CAC/B,MAAM,QAAQ,UAAuB;EACjC,MAAM,CAAC,IAAI,MAAMC,MAAI,OAAO,UAAUA,MAAI,MAAM;AAChD,MAAIA,MAAI,SAASA,MAAI,IAAK,QAAO,IAAI,KAAG,EAAE,GAAG,KAAG;EAChD,MAAM,CAAC,IAAI,MAAMA,MAAI,OAAO,UAAUA,MAAI,IAAI;AAC9C,SAAO,IAAI,KAAG,EAAE,GAAG,KAAG,EAAE,IAAI,KAAG,EAAE,GAAG,KAAG;;CAE3C,IAAIC,MAAiC,EAAE;CACvC,IAAI,SAAS,MAAM,KAAK,IAAI,CAAC,IAAI,gBAAgB,EAAE,UAAU,GAAG,EAAE,KAAK,KAAK,EAAE;AAC9E,QAAO,MAAM,IAAI,UAAU;EACvB,IAAI,IAAI,IAAI,WAAW,EAAE,SAAS,SAAS,OAAO,IAAI,OAAO,KAAK,MAAM;AACxE,YAAU,uBAAuB,IAAI,KAAK,IAAI;;AAElD,QAAO;;AAGX,SAAS,kBAAkB,KAAuB;CAC9C,IAAI,OAAO,WAAW,KAAK,GAAG,IAAI,KAAK,QAAQ;CAC/C,IAAI,OAAO,IAAI,SAAS,KAAK,MACzB,gBAAgB,EAAE,SAAS,GAAG,OAAO,cAAc,EAAE,CAAC,CAAC,KAAK,KAAK;AACrE,KAAI,KAAK,SAAS,EAAG,SAAQ;AAC7B,QAAO,aAAa,IAAI,KAAK,OAAO,KAAK,IAAI,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxIxD,IAAM,kBAAN,MAAyC;CACrC,YACI,AAAgBC,MAChB,AAAgBC,UAChB,AAAgBC,UAChB,AAAgBC,MAAa;EAHb;EACA;EACA;EACA;;;AAexB,IAAM,qBAAN,MAA4C;CACxC,YACI,AAAgBH,MAChB,AAAgBC,UAChB,AAAgBC,UAEhB,AAAgBC,MAAa;EAJb;EACA;EACA;EAEA;;;AAexB,IAAa,kBAAb,MAAgD;CAC5C,YACI,AAAgBD,UAChB,AAAQE,MACZ;EAFoB;EACR;AAER,SAAO,SAAS,OAAO,SAAS,MAAM;;CAE1C,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,aAAa,KAAK,KAAK;;;AAGvD,IAAa,yBAAb,MAAuD;CACnD,YACI,AAAgBF,UAChB,AAAQE,MAAc;EADN;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAY,gBAAgB;CACrC,IAAI,OAAO;AAAE,SAAO,qBAAqB,KAAK,KAAK;;;AAevD,IAAa,gCAAb,MAA8D;CAC1D,YACI,AAAgBF,UAChB,AAAQE,MACZ;EAFoB;EACR;AAER,SAAO,SAAS,OAAO,SAAS,MAAM;;CAE1C,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,4BAA4B,KAAK,KAAK;;;AAGtE,IAAa,+BAAb,MAA6D;CACzD,YACI,AAAgBF,UAChB,KAAc,KAClB;EAFoB;AAGhB,MAAI,QAAQ,OACR,KAAI,OAAO,IAAK,MAAK,MAAM,KAAK,IAAI;WAC3B,QAAQ,OAAW,MAAK,MAAM,KAAK,IAAI,MAAM,IAAI;MACrD,MAAK,MAAM,cAAc,IAAI;WAE9B,QAAQ,OAAW,MAAK,MAAM,aAAa,IAAI;;CAG3D,AAAQ,MAAM;CACd,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,4BAA4B,KAAK;;;AAGjE,IAAa,8BAAb,MAA4D;CACxD,YACI,AAAgBA,UAChB,AAAQG,MAAe;EADP;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,+BAA+B,KAAK,SAAS,SAAY,KAAK,KAAK,KAAK;;;AAGxG,IAAa,yBAAb,MAAuD;CACnD,YACI,AAAgBH,UAChB,AAAQG,MAAe;EADP;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,sBAAsB,KAAK,SAAS,SAAY,KAAK,KAAK,KAAK;;;AAG/F,IAAa,0BAAb,MAAwD;CACpD,YACI,AAAgBH,UAChB,AAAQG,MAAe;EADP;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,qCACvB,KAAK,OAAO,KAAK,KAAK,SAAS;;;AAGxC,IAAa,+BAAb,MAA6D;CACzD,YACI,AAAgBH,UAChB,AAAQI,OACR,AAAQF,MAAc;EAFN;EACR;EACA;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AACf,SAAO,2BAA2B,KAAK,MAAM,kBAAkB,KAAK;;;AAI5E,IAAa,mCAAb,MAAiE;CAC7D,YACI,AAAgBF,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,wBAAb,MAAsD;CAClD,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,+BAAb,MAA6D;CACzD,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,2BAAb,MAAyD;CACrD,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,oCAAb,MAAkE;CAC9D,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,uCAAb,MAAqE;CACjE,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,yBAAb,MAAuD;CACnD,YACI,AAAgBA,UAAyB;EAAzB;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO;;;AAGhC,IAAa,uBAAb,MAAqD;CACjD,YACI,AAAgBA,UAChB,AAAgBK,OAAY;EADZ;EACA;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,4CAA4C,KAAK;;;AAGjF,IAAa,gCAAb,MAA8D;CAC1D,YACI,AAAgBL,UAChB,AAAgBM,MAAc;EADd;EACA;;CACpB,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,4DAA4D,KAAK,KAAK;;;AAKtG,IAAa,4BAAb,cAA+C,mBAAmB;CAC9D,YAAY,UAAyB;AACjC,QAAM,GAAG,gBAAgB,SAAS,UAC9B,qDAAqD;;;AAIjE,IAAa,mCAAb,cAAsD,gBAAgB;CAClE,YAAY,UAAyB;AACjC,QAAM,GAAG,gBAAgB,SAAS,UAC9B,4DAA4D;;;AAIxE,IAAa,2BAAb,cAA8C,gBAAgB;CAC1D,YAAY,UAAyB;AACjC,QAAM,GAAG,gBAAgB,SAAS,UAC9B,8DAA8D;;;AAI1E,IAAa,4BAAb,MAA0D;CACtD,YACI,AAAgBN,UAChB,AAAQE,MAAc;EADN;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,4CAA4C,KAAK;;;AAGjF,IAAa,2BAAb,MAAyD;CACrD,YACI,AAAgBF,UAChB,AAAQE,MAAc;EADN;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,uDAAuD,KAAK;;;AAG5F,IAAa,8BAAb,MAA4D;CACxD,YACI,AAAgBF,UAChB,AAAQE,MAAc;EADN;EACR;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,qCAAqC,KAAK;;;AAG1E,IAAa,kCAAb,MAAgE;CAC5D,YACI,AAAgBF,UAChB,AAAQO,SACR,AAAQC,UAAkB;EAFV;EACR;EACA;;CACZ,AAAS,OAAO;CAChB,AAAS,WAAW,gBAAgB;CACpC,IAAI,OAAe;AAAE,SAAO,GAAG,KAAK,QAAQ,2BAA2B,KAAK,SAAS;;;;;;AC/QzF,MAAM,iBAAiB,KAAuB,aAAiD;CAC3F,UAAU,cAAc,IAAI,UAAU,QAAQ;CAC9C,SAAS,IAAI,QAAQ,KAAK,QAAQ;AAC9B,UAAQ,IAAI,MAAZ;GACI,KAAK,SAAS;GACd,KAAK,SAAS,QACV,QAAO,UAAU,KAAK,QAAQ;GAClC,KAAK,SAAS,cACV,QAAO;IACH,MAAM,IAAI;IACV,UAAU,cAAc,IAAI,UAAU,QAAQ;IAC9C,YAAY,IAAI;IAChB,UAAU,cAAc,IAAI,UAAU,QAAQ;IAC9C,WAAW,IAAI;IAClB;GACL,QACI,QAAO,MAAM,MAAM,IAAI;;GAEjC;CACL;AACD,SAAS,cAAc,KAAoB,SAA0C;CACjF,IAAI,OAAO,QAAQ,eAAe;AAClC,QAAO;EACH,OAAO,KAAK;EACZ,KAAK,KAAK;EACV,WAAW,KAAK;EAChB,UAAU,QAAQ,cAAc,MAAM,IAAI;EAC1C,QAAQ,KAAK;EAChB;;AAGL,SAAgB,UACZ,MAAS,UAA4B,EAAE,EACtC;AACD,SAAQ,KAAK,MAAb;EACI,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,SAAS,eACV,QAAO;GACH,UAAU,cAAc,KAAK,UAAU,QAAQ;GAC/C,MAAM,KAAK;GACX,KAAK,KAAK;GACV,OAAO,QAAQ,YAAY,KAAK,QAAQ;GACxC,MAAM,cAAc,KAAK,MAAM,QAAQ;GACvC,WAAW;IACP,YAAY,KAAK,UAAU,WAAW,KAAK,MAAM,cAAc,GAAG,QAAQ,CAAC;IAC3E,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,KACpC,CAAC,GAAG,OAAO,CAAC,GAAG,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC;IACnD;GACD,SAAS,KAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,QAAQ,CAAC;GACvD,WAAW,KAAK,YAAY,WAAW,KAAK,WAAW,QAAQ,GAAG;GACrE;EACL,KAAK,SAAS,KACV,QAAO;GACH,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,SAAS,KAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,QAAQ,CAAC;GAC1D;EACL,KAAK,SAAS,MACV,QAAO;GACH,MAAM,KAAK;GACX,UAAU,cAAc,KAAK,UAAU,QAAQ;GAC/C,SAAS,KAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,QAAQ,CAAC;GAC1D;EACL,KAAK,SAAS,UACV,QAAO;GACH,MAAM,KAAK;GACX,UAAU,cAAc,KAAK,UAAU,QAAQ;GAC/C,SAAS,KAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,QAAQ,CAAC;GAC1D;EACL,KAAK,SAAS,aACV,QAAO;GACH,MAAM,KAAK;GACX,UAAU,cAAc,KAAK,UAAU,QAAQ;GAC/C,SAAS,EAAE,GAAG,KAAK,SAAS;GAC/B;EACL,KAAK,SAAS;EACd,KAAK,SAAS,QACV,QAAO;GACH,MAAM,KAAK;GACX,UAAU,cAAc,KAAK,UAAU,QAAQ;GAC/C,SAAS,KAAK;GACjB;EACL,QACI,QAAO,MAAM,MAAM,KAAK;;;AAIpC,SAAgB,WACZ,OAAU,UAA4B,EAAE,EACvC;AACD,QAAO,MAAM,KAAK,MAAM,UAAU,GAAG,QAAQ,CAAC;;;AAIlD,SAAgB,UAAU,GAAG,OAAuC;AAChE,QAAO,MAAM,SAAS,SAAS;AAC3B,UAAQ,KAAK,MAAb;GACI,KAAK,SAAS;GACd,KAAK,SAAS;GACd,KAAK,SAAS,QACV,QAAO,CAAC,KAAK;GACjB,KAAK,SAAS;GACd,KAAK,SAAS,eACV,KAAI,KAAK,cAAc,OACnB,QAAO,KAAK,UAAU,SAAS,MAAM,UAAU,EAAE,CAAC;GAE1D,KAAK,SAAS;GACd,KAAK,SAAS;GACd,KAAK,SAAS;AACV,SAAK,UAAU,KAAK,QAAQ,SAAS,MAAM,UAAU,EAAE,CAAC;AACxD,WAAO,CAAC,KAAK;GACjB,KAAK,SAAS,eACV,QAAO,EAAE;GACb,QACI,QAAO,MAAM,MAAM,KAAK;;GAElC;;;;;ACjHN,IAAa,eAAb,MAA0B;CACtB,AAAQ,OAAqC,EAAE;CAC/C,AAAO,8BAAc,IAAI,KAAa;CAEtC,YACI,AAAgBC,UAChB,AAAO,4BAAY,IAAI,KAAqB,EAC9C;EAFkB;EACT;AAEP,WAAO,aAAa,SAAS,MAAM,EAAE,KAAK,CAAC;;CAG/C,KAAqC,KAAQ,KAAgC;AACzE,SAAO,EAAE,OAAO,KAAK,MAAM;AAC3B,OAAK,KAAK,OAAO;;CAGrB,IAAoC,KAAQ,KAAgC;AACxE,SAAO,OAAO,KAAK,KAAK;AACxB,OAAK,KAAK,OAAO;;CAGrB,IAAoC,KAAmC;AACnE,SAAO,OAAO,KAAK,KAAK;AACxB,SAAO,KAAK,KAAK;;CAGrB,MAAM,SAAkB;AACpB,SAAO,IAAI,OAAO,SAAS,KAAK,CAAC,OAAO;;;AAIhD,IAAa,WAAb,MAAa,SAAS;CAClB,YACI,AAAgBC,MAChB,AAAgBC,SAChB,AAAgBC,UAA8B;EAF9B;EACA;EACA;;CAEpB,aAAa;AAIT,SAHU,IAAI,SACV,UAAU,UAAU,KAAK,MAAM,EAAC,WAAW,MAAK,CAAC,CAAC,CAAC,IACnD,KAAK,SAAS,KAAK,SAAS;;;;;CAOpC,KACI,UAEF;EACE,IAAIC,QAAyD,KAAK,KAAK;EACvE,IAAI;AACJ,SAAO,OAAO,MAAM,OAAO,EAAE;GACzB,MAAM,SAAS,SAAS,KAAK;AAC7B,OAAI,UAAU,QAAS;AACvB,OAAI,UAAU,OAAQ;AAEtB,OAAI,eAAe,MAAM;AACrB,UAAM,KAAK,GAAG,KAAK,UAAU,WAAW,SAAS,MAAM,EAAE,QAAQ,CAAC;AAClE,UAAM,KAAK,GAAG,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,SAAS,CAAC,OAAO,OAAO,EAAE,QAAQ,CAAC;;AAE/E,OAAI,aAAa,QAAQ,MAAM,QAAQ,KAAK,QAAQ,CAChD,OAAM,KAAK,GAAG,KAAK,QAAQ;;;;;;CAOvC,gBAAgB,KAA8D;EAC1E,MAAMC,SAA0D,EAAE;AAClE,OAAK,MAAM,SAAS;AAChB,OAAI,KAAK,SAAS,SAAS,QACvB,KAAK,SAAS,aAAa,KAAK,SAAS,QAAQ,KACrD;AACI,WAAO,KAAK,KAAK;AACjB,WAAO;;AAEX,UAAO;IACT;AACF,SAAO;;;AA+Bf,IAAa,gBAAb,MAAa,cAA+C;CACxD,eAAgD,EAAE;CAClD,0BAAU,IAAI,KAA6B;CAE3C,iBAAiB,IAAI,aAAyC;CAC9D,kBAAkB,IAAI,aAA0C;CAChE,kBAAkB,IAAI,aAA0C;CAChE,wBAAwB,IAAI,aAA2C;CAEvE,kBAAkB,IAAI,aAAgC;CACtD,mBAAmB,IAAI,aAAiC;CAExD,SAA8B;EAC1B,qBAAqB;EACrB,mBAAmB;EACtB;CAED,OAAO,KAAK,MAA6B;EACrC,IAAIC,WAAS,IAAI,eAAe;AAChC,WAAO,eAAe,CAAC,GAAG,KAAK,aAAa;AAC5C,WAAO,SAAS,gBAAgB,KAAK,OAAO;AAE5C,WAAO,iBAAiB,IAAI,YAAY,KAAK,eAAe;AAC5D,WAAO,kBAAkB,IAAI,YAAY,KAAK,gBAAgB;AAC9D,WAAO,kBAAkB,IAAI,YAAY,KAAK,gBAAgB;AAC9D,WAAO,wBAAwB,IAAI,YAAY,KAAK,sBAAsB;AAC1E,WAAO,kBAAkB,IAAI,YAAY,KAAK,gBAAgB;AAC9D,WAAO,mBAAmB,IAAI,YAAY,KAAK,iBAAiB;AAChE,SAAOA;;;;;;AC9If,MAAM,cAAc;AAEpB,MAAM,cAAc;AACpB,MAAM,YAAY;AAElB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,oBAAoB;AAC1B,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AAEpC,MAAM,kBAAkB;EACnB,SAAS,gBAAgB,IAAI,wBAAwB,WAAW,iBAAiB,OAAO;EACxF,SAAS,iBAAiB,IAAI,yBAAyB,WAAW,iBAAiB,OAAO;EAC1F,SAAS,iBAAiB,IAAI,yBAAyB,WAAW,iBAAiB,OAAO;CAC9F;AAOD,IAAM,kBAAN,MAAsB;CAClB,AAAO;CACP,AAAO,WAAsB,EAAE;CAC/B,AAAQ,aAAqC,EAAE;CAC/C,AAAQ,cAAuC,EAAE;CAEjD,YAAY,AAAQC,SAAkB;EAAlB;AAChB,OAAK,OAAO;GAAC,MAAM,SAAS;GAAM,QAAQ,QAAQ;GAAQ,SAAS,EAAE;GAAC;;CAG1E,QAAQ,GAAG,GAAc;AACrB,OAAK,IAAI,OAAO,GAAG;AACf,QAAK,SAAS,KAAK,IAAI;AACvB,SAAM,MAAM,cAAc,IAAI,MAAM,IAAI,KAAK;;;CAIrD,aAAa,GAAgB;AACzB,GAAC,KAAK,WAAW,GAAG,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK,EAAE;AACrD,SAAO;;CAGX,cAAc,GAAiB;AAC3B,SAAO,KAAK,YAAY,SAAS,EAAE;AACnC,OAAK,YAAY,GAAG,GAAG,CAAE,QAAQ,KAAK,EAAE;AACxC,SAAO;;CAGX,UAAU,KAAa;AACnB,SAAO,KAAK,YAAY,SAAS,EAAE;EACnC,MAAM,UAAU,KAAK,YAAY,GAAG,GAAG,CAAE;EACzC,MAAM,OAAO,QAAQ,GAAG,GAAG;AAC3B,MAAI,MAAM,QAAQ,SAAS,MAAM;AAC7B,QAAK,WAAW;AAChB,QAAK,SAAS,MAAM,KAAK,QAAQ,UAAU;QACxC,SAAQ,KAAK;GAChB,MAAM,SAAS;GACf,UAAU;IACN,QAAQ,KAAK,QAAQ;IACrB,OAAO,KAAK,QAAQ,UAAU,GAAG,IAAI;IACrC,KAAK,KAAK,QAAQ,UAAU;IAC/B;GACD,SAAS;GACZ,CAAC;;CAGN,WAAW,OAA6B;AACpC,OAAK,aAAa,MAAM;AACxB,OAAK,WAAW,KAAK,MAAM;;CAG/B,WAAW;AACP,SAAO,KAAK,WAAW,SAAS,EAAE;EAClC,MAAM,OAAO,KAAK,WAAW,KAAK;AAClC,OAAK,SAAS,MAAM,KAAK,QAAQ,UAAU;;CAG/C,YAAY,GAAgD;AACxD,MAAI,EAAE,QAAQ,SAAS,UAAW,MAAK,aAAa,EAAE;MACjD,MAAK,cAAc,EAAE;AAC1B,OAAK,YAAY,KAAK,EAAE;;CAG5B,YAAY;AACR,SAAO,KAAK,YAAY,SAAS,EAAE;EACnC,MAAM,OAAO,KAAK,YAAY,KAAK;AACnC,OAAK,SAAS,MAAM,KAAK,QAAQ,UAAU;;;AAInD,IAAa,SAAb,MAAoB;CAChB,AAAQ;CACR,AAAQ,aAAa;CAErB,YACI,AAAQA,SACR,AAAQC,KACV;EAFU;EACA;AAER,OAAK,OAAO,IAAI,gBAAgB,QAAQ;;CAG5C,KAAK,IAA4B;AAC7B,SAAO;GACH,QAAQ,KAAK,QAAQ;GACrB,OAAO,KAAK,QAAQ,UAAU;GAC9B,KAAK,MAAM,KAAK,QAAQ,UAAU;GACrC;;CAGL,SAAS,MAAc,IAA4B;AAC/C,SAAO;GACH,QAAQ,KAAK,QAAQ;GACrB,OAAO;GACP,KAAK,MAAM,KAAK,QAAQ,UAAU;GACrC;;;CAIL,MAEE,MAA0C;AACxC,UAAQ,MAAR;GACI,KAAK,SAAS,eAAgB,QAAO,KAAK,IAAI,OAAO;GACrD,KAAK,SAAS,eAAgB,QAAO,KAAK,IAAI,OAAO;GACrD,KAAK,SAAS,cAAe,QAAO,KAAK,IAAI,OAAO;GACpD,QAAS,QAAO,MAAM,MAAM,KAAK;;;CAIzC,SAAS,OAAuC,OAAwB;AACpE,MAAI,QAAQ,KAAK,IAAI,OAAO,OAAO,kBAC/B,QAAO;EACX,IAAI,KAAK;AACT,OAAK,MAAM,QAAQ,MACf,SAAQ,KAAK,MAAb;GACI,KAAK,SAAS;GACd,KAAK,SAAS;GACd,KAAK,SAAS,QACV;GACJ,KAAK,SAAS;GACd,KAAK,SAAS;AACV,SAAK,MAAKC,QAAS,KAAK,SAAS,QAAQ,EAAE,IAAI;AAC/C;GACJ,KAAK,SAAS;GACd,KAAK,SAAS;GACd,KAAK,SAAS;AACV,SAAK,MAAKC,OAAQ,MAAM,QAAQ,EAAE,IAAI;AACtC;GACJ,QACI,OAAM,MAAM,KAAK;;AAG7B,SAAO;;CAGX,gBAAgB,KAAuB;AACnC,MAAI,IAAI,cAAc,OAClB,QAAO,IAAI;EACf,IAAI,SAAS;EACb,MAAM,YAAY,KAAK,cAAc;AACrC,OAAK,MAAM,KAAK,IAAI,QAChB,SAAQ,EAAE,MAAV;GACI,KAAK,SAAS;GACd,KAAK,SAAS;AACV,cAAU,EAAE;AACZ;GACJ,KAAK,SAAS;AACV,QAAI,EAAE,cAAc,QAAW;KAC3B,MAAM,QAAQ,MAAKC,eAAgB,EAAE,SAAS;AAC9C,SAAI,UAAU,UACV,EAAE,WAAW,WAAW,UACvB,CAAC,aAAa,CAAC,EAAE,WAAW,gBAC7B,QAAO;AACX,OAAE,YAAY,EAAE,WAAW,OAAO,OAAO,KAAK,KAAK,UAAU;AAC7D,SAAI,EAAE,cAAc,OAChB,QAAO;;AAEf,cAAU,EAAE;AACZ;GACJ,QACI,OAAM,MAAM,EAAE;;AAI1B,MAAI,YAAY;AAChB,SAAO;;CAGX,iBAAiB,MAAoB;AACjC,OAAK,MAAM,OAAO,KAAK,UAAU,WAC7B,OAAKA,eAAgB,IAAI;AAE7B,OAAK,MAAM,CAAC,OAAO,QAAQ,KAAK,UAAU,MACtC,OAAKA,eAAgB,IAAI;;CAGjC,eACI,MACA,IAA+C,GAAG,GACpD;AACE,MAAI,CAAC,GAAI;AAET,MAAI;AACA,QAAK,KAAK,QAAQ,GAAG,GAAG,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;WACxC,GAAG;AACR,QAAK,KAAK,QAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,CAAC;;;CAIrE,KACI,MACA,IAAuC,GAAG,GAC5C;AACE,MAAI,CAAC,GAAI;AAET,MAAI;AACA,UAAO,GAAG,KAAK,KAAK,KAAK,GAAG,EAAE;WACzB,GAAG;AACR,QAAK,KAAK,QAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,CAAC;AAC7D;;;CAIR,QAAQ,MAAoB,QAAQ,GAAG;AACnC,MAAI,KAAK,cAAc,QAAW;AAC9B,SAAM,MAAM,+BAA+B,KAAK,IAAI,KAAK;AACzD,UAAO;;AAGX,MAAI,QAAQ,EACR,OAAKC,gBAAiB,KAAK;AAG/B,MAAI,KAAK,aAAa,KAAK,CAAC,KAAK,IAAI,iBAAiB;AAClD,SAAM,MAAM,yBAAyB,KAAK,IAAI,KAAK;AACnD,UAAO;;EAGX,MAAM,YAAY,KAAK,cAAc;AACrC,MAAI,QAAQ,GAAG;AAEX,SAAKC,cAAe,MAAM,KAAK,IAAI,oBAAoB,MAAe,KAAK,KAAK,UAAU;AAE1F,OAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,QAAI,KAAK,IAAI,sBAAuB,MAAK;AACzC,UAAKJ,QAAS,KAAK,SAAS,MAAM;AAClC,QAAI,KAAK,IAAI,sBAAuB,MAAK;;AAG7C,SAAKI,cAAe,MAAM,KAAK,IAAI,mBAAmB,MAAe,KAAK,KAAK,UAAU;;AAG7F,QAAKA,cAAe,MAAM,KAAK,IAAI,eAAe,MAAe,KAAK,KAAK,UAAU;AACrF,MAAI,KAAK,IAAI,QAAQ;AACjB,QAAK,YAAY,MAAKC,IAAK,MACvB,KAAK,IAAI,QAAiB,MAAe,KAAK,KAAK,UAAU;AAEjE,OAAI,CAAC,KAAK,UACN,QAAO;AAEX,SAAM,MAAM,GAAG,KAAK,aAAa,IAAI,WAAW,GAAG,aAAa,KAAK,IAAI,KAAK;AAC9E,OAAI,KAAK,UAAU,SAAS,EACxB,OAAM,YAAY,UAAU,WAAW,KAAK,GAAG,KAAK,UAAW,CAAC;;AAGxE,QAAKD,cAAe,MAAM,KAAK,IAAI,wBAAwB,MAAe,KAAK,KAAK,UAAU;EAE9F,MAAM,YAAY,KAAK;AACvB,MAAI,CAAC,aAAa,UAAU,UAAU,EAAG,QAAO;AAChD,QAAM,MAAM,2BAA2B,KAAK,IAAI,KAAK;EACrD,IAAI,KAAK,MAAKJ,QAAS,WAAW,MAAM;AACxC,QAAM,MAAM,gCAAgC,KAAK,IAAI,KAAK;AAE1D,QAAKI,cAAe,MAAM,KAAK,IAAI,uBAAuB,MAAe,KAAK,KAAK,UAAU;AAE7F,MAAI,CAAC,MAAM,SAAS,GAAG;GACnB,MAAM,QAAQ,KAAK,IAAI,OAAO,OAAO;AACrC,QAAK,KAAK,QACN,IAAI,6BAA6B,KAAK,UAAU,OAAO,KAAK,IAAI,KAAK,CAAC;;AAE9E,SAAO;;CAGX,QAAQ;AACJ,OAAK,UAAU;AACf,SAAO,IAAI,SAAS,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS;;CAGrE,AAAQ,cAAc;AAClB,SAAO,KAAK,QAAQ,sBAAsB,KAAK;;CAGnD,AAAQ,0BAA0B;AAC9B,SAAO,KAAK,QAAQ,sBAAsB,KAAK,QACxC,KAAK,QAAQ,OAAO,KAAK;;CAGpC,AAAQ,sBAAsB;AAC1B,OAAK,aAAa;AAClB,MAAI,CAAC,KAAK,QAAQ,OAAO,KAAK,CAAE,MAAK,KAAK,QACtC,IAAI,yBAAyB,MAAKE,KAAM,CAAC,CAAC;;CAIlD,AAAQ,2BAA2B,GAAW;EAC1C,IAAI,SAAS;EACb,MAAM,QAAQ,KAAK,QAAQ,UAAU;AACrC,SAAO,MAAM;AACT,OAAI,KAAK,QAAQ,OAAO,KAAK,EAAE;AAC3B;AACA;;AAEJ,OAAI,KAAK,QAAQ,sBAAsB,IAAI,KAAM;;EAErD,MAAM,MAAM,KAAK,QAAQ,UAAU;AACnC,MAAI,SAAS,EAAG,MAAK,KAAK,QACtB,IAAI,0BAA0B,MAAKC,QAAS,OAAO,IAAI,CAAC,CAAC;;CAGjE,AAAQ,WAAW;AACf,OAAK,yBAAyB;AAC9B,SAAO,CAAC,KAAK,QAAQ,OAAO,EAAE;AAC1B,QAAK,cAAc;AACnB,QAAK,yBAAyB;;AAGlC,OAAK,QAAQ,YAAY,CAAC,SACrB,MAAM,EAAE,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,CAAC,CAAC;;CAG7D,AAAQ,eAAe;AACnB,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;AAE7B,OAAK,QAAQ,YAAY,CAAC,SACrB,MAAM,EAAE,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,CAAC,CAAC;AAEzD,MAAI,KAAK,QAAQ,KAAK,oBAAoB,EAAE;AACxC,QAAK,SAAS,SAAS,cAAc;AACrC;;AAEJ,MAAI,KAAK,QAAQ,KAAK,qBAAqB,EAAE;AACzC,QAAK,SAAS,SAAS,eAAe;AACtC;;EAGJ,MAAM,QAAQ,KAAK,IAAI,OAAO,gBAAgB,MAAM,MAAM,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AACtF,MAAI,MAAO,QAAO,KAAK,UAAU,SAAS,eAAe,MAAM;AAG/D,OAAK,yBAAyB;AAE9B,OAAK,QAAQ,YAAY,CAAC,SACrB,MAAM,EAAE,SAAS,KAAK,KAAK,KAAK,QAAQ,UAAU,CAAC,CAAC;;CAG7D,AAAQ,SAEH,MACL;EACI,MAAM,WAAW,KAAK,QAAQ,UAAU;AACxC,SAAO,KAAK,QAAQ,OAAO;IACtB,SAAS,gBAAgB;IACzB,SAAS,iBAAiB;IAC1B,SAAS,iBAAiB;GAC9B,CAAC,MAAM,CAAC;EAET,MAAM,SAAS,MAAKC,KAAM,KAAK,CAAC,MAAM,MAAM,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;EACxE,MAAM,MAAM,UAAU,gBAAgB;AACtC,MAAI,WAAW,QAAW;GACtB,IAAI,OAAO;AACX,UAAO,CAAC,KAAK,QAAQ,OAAO,IACrB,CAAC,KAAK,QAAQ,sBAAsB,IACpC,CAAC,KAAK,QAAQ,KAAK,oBAAoB,IACvC,CAAC,KAAK,QAAQ,KAAK,kBAAkB,EAC5C;AACI,QAAI,KAAK,QAAQ,OAAO,YAAY,EAChC;SAAI,KAAK,QAAQ,OAAO,CAAE;;AAC9B,YAAQ,KAAK,QAAQ,YAAY;;AAErC,QAAK,KAAK,QACN,IAAI,uBAAuB,MAAKD,QAAS,SAAS,EAAE,KAAK,CAAC;;EAElE,MAAM,OAAO,KAAK,WAAW;AAC7B,QAAM,MAAM,SAAS,SAAS,MAAM,IAAI,IAAI,KAAK;EAEjD,MAAM,UAAU,KAAK,QAAQ,OAAO,kBAAkB;EACtD,MAAM,aAAa,IAAI,YAAY,iBAAiB;AACpD,MAAI,CAAC,KAAK,QAAQ,OAAO,oBAAoB,CACzC,MAAK,KAAK,QACN,IAAI,gBAAgB,MAAKD,KAAM,EAAE,oBAAoB,CAAC;EAE9D,MAAM,UAAU,KAAK,QAAQ,UAAU;EACvC,MAAMG,OAAqB;GACvB;GAAW;GACX,MAAM,MAAKF,QAAS,UAAU,QAAQ;GACtC,UAAU,MAAKA,QAAS,UAAU,QAAQ;GAC1C,WAAW;GACX,SAAS,EAAE;GACX,WAAW;GACd;EAED,MAAM,WAAW,cAAc;AAC/B,SAAO,KAAK,cAAc,MAAM,MAAM,yBAAyB,SAAS;;CAI5E,AAAQ,gBAAgB;AACpB,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;EAC7B,MAAM,WAAW,KAAK,QAAQ,UAAU;EACxC,MAAM,UAAU,KAAK,QAAQ,OAAO,YAAY;AAChD,MAAI,QAAS,MAAK,qBAAqB;EACvC,MAAM,kBAAkB,KAAK,QAAQ,UAAU;EAC/C,IAAI,gBAAgB,KAAK,QAAQ,UAAU;EAC3C,IAAIG,eAAmC;EAEvC,IAAI,SAAS;AACb,SAAO,CAAC,KAAK,QAAQ,OAAO,EAAE;AAC1B,OAAI,KAAK,QAAQ,OAAO,KAAK,EAAE;IAC3B,IAAI,QAAQ;IACZ,IAAIC;AACJ,YAAQ,OAAO,KAAK,QAAQ,sBAAsB,MAAM,KACpD,UAAS;AAEb,QAAI,WAAW,KAAK,QAAQ,OAAO,UAAU,EAAE;AAC3C,oBAAe,KAAK,QAAQ,UAAU;AACtC,SAAI,CAAC,KAAK,QAAQ,OAAO,EAAE;AACvB,WAAK,qBAAqB;AAC1B,WAAK,2BAA2B,EAAE;;AAEtC;;AAEJ,QAAK,CAAC,WAAW,KAAK,QAAQ,OAAO,KAAK,EAAE;AACxC,oBAAe,KAAK,QAAQ,UAAU,GAAG;AACzC,SAAI,CAAC,KAAK,QAAQ,OAAO,CACrB,MAAK,2BAA2B,EAAE;AACtC;;AAGJ,QAAI,KAAK,QAAQ,OAAO,EAAE;AACtB,SAAI,QAAS,MAAK,KAAK,QACnB,IAAI,gBAAgB,MAAKL,KAAM,EAAE,UAAU,CAAC;AAChD;;AAEJ,cAAU;SAEV,WAAU,KAAK,QAAQ,YAAY;AAEvC,mBAAgB,KAAK,QAAQ,UAAU;;EAE3C,MAAMM,OAAgB;GAClB,MAAM,SAAS;GACf,UAAU,MAAKL,QAAS,UAAU,gBAAgB,cAAc;GAChE,SAAS;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACT;GACJ;AACD,OAAK,KAAK,aAAa,KAAK;;CAGhC,AAAQ,0BAA0B;AAC9B,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;EAC7B,MAAM,WAAW,KAAK,QAAQ,UAAU;AACxC,MAAI,KAAK,QAAQ,OAAO,YAAY,EAAE;AAClC,QAAK,qBAAqB;AAC1B,QAAK,2BAA2B,EAAE;GAElC,MAAMM,QAAmB;IACrB,UAAU,MAAKN,QAAS,SAAS;IACjC,MAAM,SAAS;IACf,SAAS,EAAE;IACd;AACD,QAAK,KAAK,WAAW,MAAM;AAE3B,UAAO,CAAC,KAAK,QAAQ,OAAO,EAAE;AAC1B,QAAI,KAAK,QAAQ,OAAO,UAAU,EAAE;AAChC,UAAK,KAAK,UAAU;AAEpB,SAAI,CAAC,KAAK,QAAQ,OAAO,EAAE;AACvB,WAAK,qBAAqB;AAC1B,WAAK,2BAA2B,EAAE;;AAEtC;;AAEJ,SAAK,cAAc;AACnB,SAAK,2BAA2B,EAAE;;AAGtC,QAAK,KAAK,QACN,IAAI,gBAAgB,MAAKD,KAAM,EAAE,UAAU,CAAC;QAEhD,MAAK,WAAW;;CAIxB,UAAU,MAAoC;AAC1C,MAAI,KAAK,QAAQ,UAAU,EAAG;EAC9B,IAAI,QAAQ,KAAK,QAAQ;EACzB,IAAI,OAAO,KAAK,QAAQ,GAAG,GAAG;AAC9B,MAAI,MAAM,QAAQ,SAAS,KACvB,OAAM,UAAU,MAAM,QAAQ,WAAW;AAC7C,MAAI,KAAK,QAAQ,SAAS,KACtB,MAAK,UAAU,KAAK,QAAQ,SAAS;;CAG7C,AAAQ,YAAY;AAChB,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;EAC7B,MAAMQ,OAAsB;GACxB,MAAM,SAAS;GACf,UAAU,MAAKR,KAAM;GACrB,SAAS,EAAE;GACd;AAED,OAAK,KAAK,YAAY,KAAK;AAC3B,SAAO,CAAC,KAAK,QAAQ,OAAO,IAAI,KAAK,eAAe;AACpD,OAAK,KAAK,WAAW;EACrB,MAAM,OAAO,KAAK,QAAQ,GAAG,GAAG;AAChC,OAAK,SAAS,YAAY,MAAM,SAAS,aAAa,MAAM,SAAS;AACrE,QAAKS,SAAU,KAAK;;CAKxB,AAAQ,UAEH,MAAY,GACjB;EACI,MAAM,WAAW,KAAK,QAAQ,UAAU;EACxC,IAAIC,OAA2B,EAAE;AACjC,OAAK,MAAM,QAAQ,EAAE,OAAO;GACxB,IAAI,CAAC,KAAK,MAAM,KAAK,iBAAiB,MAAM,CAAC,OAAO,CAAC;AACrD,OAAI,CAAC,IAAI;AACL,SAAK,KAAK,QAAQ,IAAI,gBAAgB,MAAKV,KAAM,EAAE,KAAK,CAAC;AACzD,WAAO;;AAEX,QAAK,KAAK,IAAI;;EAGlB,MAAM,UAAU,KAAK,QAAQ,UAAU;EACvC,MAAMG,OAAqB;GACvB;GAAM,KAAK,EAAE;GACb,MAAM,MAAKF,QAAS,WAAW,EAAE,KAAK,QAAQ,QAAQ;GACtD,UAAU,MAAKA,QAAS,WAAW,EAAE,KAAK,QAAQ,QAAQ;GAC1D,WAAW;IACP,YAAY;IACZ,uBAAO,IAAI,KAAK;IAChB,UAAU,MAAKA,QAAS,UAAU,QAAQ;IAC7C;GACD,SAAS,EAAE;GACX,WAAW;GACd;EAED,MAAM,WAAW,KAAK,IAAI,YAAY,iBAAiB;AACvD,SAAO,KAAK,cAAc,MAAM,MAAM,EAAE,SAAS,SAAS;;CAG9D,AAAQ,cAEH,MAAY,MAAoB,SAA6B,UAClE;AACI,QAAKJ,gBAAiB,KAAK;EAC3B,MAAM,YAAY,KAAK,cAAc;AACrC,MAAI,KAAK,IAAI,mBACT,MAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,mBAAmB,MAAa,KAAK,KAAK,UAAU,CAAC;AACvF,MAAI,KAAK,IAAI,sBAAuB,MAAK;EAEzC,IAAI,KAAK;AACT,MAAI,UAAU;AACV,OAAI,CAAC,KAAK,QAAQ,OAAO,IAAI,QAAQ,SAAS,eAAe;AACzD,SAAK,qBAAqB;AAC1B,SAAK,2BAA2B,EAAE;;AAEtC,OAAI,SAAS,SAAS,eAAgB,MAAK,KAAK,cAAc,KAAqB;OAC9E,MAAK,KAAK,aAAa,KAAoB;aACzC,QAAQ,SAAS,gBAAgB;AACxC,UAAO;AACP,QAAK,KAAK,YAAY,KAAK;GAC3B,MAAM,MAAM,KAAK,IAAI,YAAY,iBAAiB;GAClD,MAAM,SAAS,MACT,KAAK,2BAA2B,KAAK,KAAK,GAC1C,KAAK,cAAc,KAAK,KAAK;AACnC,UAAO,MAAM;AACT,QAAI,WAAW,KAAK,QAAQ,OAAO,QAAQ,CAAE;AAC7C,QAAI,KAAK,QAAQ,OAAO,IAAI,EAAE,KAAK,QAAQ,GAAG;AAE1C,SAAI,QAAS,MAAK,KAAK,QACnB,IAAI,gBAAgB,MAAKG,KAAM,EAAE,QAAQ,CAAC;AAC9C;;;AAGR,QAAK,KAAK,WAAW;AACrB,OAAI,CAAC,OAAO,KAAK,QAAQ,SAAS,EAC9B,OAAKS,SAAU,KAAK;SAEC;AACzB,QAAK,KAAK,WAAW,KAAY;AACjC,QAAK,2BAA2B,EAAE;AAClC,OAAI,CAAC,KAAK,QAAQ,OAAO,CACrB,KAAI,KAAK,IAAI,YAAY,iBAAiB,aACtC,MAAK,eAAe;OAEpB,MAAK,cAAc;AAE3B,QAAK,KAAK,UAAU;;EAGxB,MAAM,OAAO,KAAK,QAAQ,GAAG,GAAG;AAChC,OAAK,SAAS,YAAY,MAAM,SAAS,aAAa,MAAM,SAAS;AACrE,MAAI,KAAK,IAAI,sBAAuB,MAAK;AACzC,MAAI,KAAK,IAAI,kBACT,MAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,kBAAkB,MAAa,KAAK,KAAK,UAAU,CAAC;AACtF,QAAKd,OAAQ,KAAK;AAClB,SAAO;;CAIX,AAAQ,gBAAyB;AAC7B,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;AAC7B,MAAI,KAAK,QAAQ,KAAK,qBAAqB,CACvC,QAAO,KAAK,SAAS,SAAS,eAAe;AACjD,MAAI,KAAK,QAAQ,KAAK,qBAAqB,CACvC,QAAO;AACX,MAAI,KAAK,QAAQ,KAAK,oBAAoB,EAAE;AACxC,QAAK,qBAAqB;AAC1B,UAAO;;EAGX,MAAM,QAAQ,KAAK,IAAI,OAAO,iBAAiB,MAAM,MAAM,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AACvF,MAAI,MAAO,QAAO,KAAK,UAAU,SAAS,gBAAgB,MAAM;AAEhE,MAAI,KAAK,QAAQ,OAAO,YAAY,EAAE;AAClC,OAAI,KAAK,QAAQ,OAAO,EAAE;AACtB,SAAK,KAAK,UAAU,YAAY;AAChC,WAAO;;GAEX,MAAM,QAAQ,KAAK,QAAQ,UAAU;GACrC,MAAMgB,OAAoB;IACtB,MAAM,SAAS;IACf,SAAS,KAAK,QAAQ,YAAY;IAClC,UAAU,MAAKV,QAAS,QAAQ,EAAE;IACrC;AACD,QAAK,KAAK,cAAc,KAAK;AAC7B,UAAO;;AAEX,MAAI,KAAK,IAAI,OAAO,OAAO,uBACvB,KAAK,QAAQ,sBAAsB,KAAK,MAC5C;AACI,QAAK,aAAa;AAClB,QAAK,KAAK,UAAU,IAAI;AACxB,UAAO;;AAEX,SAAO,KAAK,4BAA4B;;CAI5C,AAAQ,6BAAsC;AAC1C,SAAO,CAAC,KAAK,QAAQ,OAAO,CAAC;AAC7B,MAAI,KAAK,QAAQ,OAAO,KAAK,EAAE;AAE3B,QAAK,aAAa;AAClB,OAAK,KAAK,QAAQ,KAAK,oBAAoB,IACtC,KAAK,QAAQ,KAAK,qBAAqB,IACvC,KAAK,IAAI,OAAO,gBAAgB,MAAM,MAAM,KAAK,QAAQ,KAAK,EAAE,KAAK,CAAC,IACtE,KAAK,QAAQ,KAAK,UAAU,IAC5B,KAAK,QAAQ,OAAO,CAAE,QAAO;AAElC,OAAI,KAAK,QAAQ,OAAO,KAAK,EAAE;AAC3B,SAAK,2BAA2B,EAAE;AAClC,WAAO;;AAEX,QAAK,KAAK,UAAU,KAAK;AACzB,UAAO;;AAGX,OAAK,KAAK,UAAU,KAAK,QAAQ,YAAY,CAAC;AAC9C,SAAO;;CAIX,AAAQ,iBACJ,MAA0B,QAC1B,QAAkB,CAAC,mBAAmB,oBAAoB,EAC/B;EAC3B,IAAI,KAAK;EACT,MAAMW,UAA4B,EAAE;EACpC,MAAM,WAAW,KAAK,QAAQ,UAAU;EACxC,IAAI,SAAS,KAAK,QAAQ,UAAU;EAEpC,MAAM,cAAc,MAAc;GAC9B,MAAM,OAAO,QAAQ,GAAG,GAAG;AAC3B,OAAI,MAAM,QAAQ,SAAS,MAAM;AAC7B,SAAK,WAAW;AAChB,SAAK,SAAS,OAAO,EAAE;UACpB;IACH,MAAMC,QAAM,KAAK,QAAQ,UAAU;AACnC,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,UAAU,MAAKZ,QAASY,QAAM,EAAE,OAAO;KACvC,SAAS;KACZ,CAAC;;;AAIV,SAAO,MAAM;AACT,OAAI,OAAO,KAAK,QAAQ,OAAO,IAAI,CAC/B;AACJ,OAAI,QAAQ,UAAa,KAAK,QAAQ,OAAO,4BAA4B,CACrE;AACJ,OAAI,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,EAAE,CAAC,IACvC,KAAK,QAAQ,OAAO,EACxB;AACI,SAAK;AACL;;AAGJ,OAAI,KAAK,QAAQ,OAAO,YAAY,EAAE;AAElC,aAAS,KAAK,QAAQ,UAAU;AAChC,QAAI,KAAK,QAAQ,OAAO,EAAE;AACtB,gBAAW,YAAY;AACvB,UAAK;AACL;;AAEJ,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,SAAS,KAAK,QAAQ,YAAY;KAClC,UAAU,MAAKZ,QAAS,SAAS,EAAE;KACtC,CAAuB;AACxB;;GAGJ,MAAM,eAAe,KAAK,QAAQ,UAAU;GAC5C,MAAM,SAAS,KAAK,IAAI,OAAO,sBAAsB,MAChD,MAAM,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AACvC,OAAI,WAAW,QAAW;IACtB,MAAM,CAAC,OAAO,OAAO,KAAK,iBAAiB,OAAO,QAAQ;AAC1D,aAAS,KAAK,QAAQ,UAAU;AAChC,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,YAAY;KAAQ,UAAU;KAC9B,UAAU,MAAKA,QAAS,aAAa;KACxC,CAAC;AACF,QAAI,CAAC,KAAK;AACN,UAAK,KAAK,QAAQ,IAAI,gBAAgB,MAAKD,KAAM,EAAE,OAAO,QAAQ,CAAC;AACnE,UAAK;AACL;;UAED;AACH,eAAW,KAAK,QAAQ,YAAY,CAAC;AACrC,aAAS,KAAK,QAAQ,UAAU;;;AAGxC,SAAO,CAAC;GACJ,UAAU,MAAKC,QAAS,UAAU,OAAO;GACzC;GACH,EAAE,GAAG;;CAIV,AAAQ,wBACJ,MACgC;EAChC,IAAI,KAAK;EACT,MAAM,QAAQ,CAAC,mBAAmB,oBAAoB;EACtD,IAAIW,UAA4B,EAAE;EAElC,MAAM,WAAW,KAAK,QAAQ,UAAU;EACxC,IAAI,eAAe;EACnB,IAAI,SAAS,KAAK,QAAQ,UAAU;EAEpC,IAAIE,OAA+D;GAC/D,MAAM;GAAY,OAAO;GAC5B;EAED,MAAM,cAAc,MAAc;GAC9B,MAAM,OAAO,QAAQ,GAAG,GAAG;AAC3B,OAAI,MAAM,QAAQ,SAAS,MAAM;AAC7B,SAAK,WAAW;AAChB,SAAK,SAAS,OAAO,EAAE;UACpB;IACH,MAAM,MAAM,KAAK,QAAQ,UAAU;AACnC,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,UAAU,MAAKb,QAAS,MAAM,EAAE,OAAO;KACvC,SAAS;KACZ,CAAC;;;AAIV,SAAO,MAAM;AACT,OAAI,KAAK,QAAQ,OAAO,4BAA4B,CAChD;AACJ,OAAI,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,EAAE,CAAC,IACvC,KAAK,QAAQ,OAAO,EACxB;AACI,SAAK;AACL;;AAGJ,OAAI,KAAK,QAAQ,OAAO,YAAY,EAAE;AAClC,QAAI,MAAM,QAAQ,WAAY,QAAO;AAGrC,aAAS,KAAK,QAAQ,UAAU;AAChC,QAAI,KAAK,QAAQ,OAAO,EAAE;AACtB,gBAAW,YAAY;AACvB,UAAK;AACL;;AAEJ,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,SAAS,KAAK,QAAQ,YAAY;KAClC,UAAU,MAAKA,QAAS,SAAS,EAAE;KACtC,CAAuB;AACxB;;GAGJ,MAAM,eAAe,KAAK,QAAQ,UAAU;GAC5C,MAAM,SAAS,KAAK,IAAI,OAAO,sBAAsB,MAChD,MAAM,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AACvC,OAAI,WAAW,QAAW;AACtB,QAAI,MAAM,QAAQ,WAAY,QAAO;IAErC,MAAM,CAAC,OAAO,OAAO,KAAK,iBAAiB,OAAO,QAAQ;AAC1D,aAAS,KAAK,QAAQ,UAAU;AAChC,YAAQ,KAAK;KACT,MAAM,SAAS;KACf,YAAY;KAAQ,UAAU;KAC9B,UAAU,MAAKA,QAAS,aAAa;KACxC,CAAC;AACF,QAAI,CAAC,KAAK;AACN,UAAK,KAAK,QAAQ,IAAI,gBAAgB,MAAKD,KAAM,EAAE,OAAO,QAAQ,CAAC;AACnE,UAAK;AACL;;UAED;IACH,MAAM,OAAO,KAAK,QAAQ,YAAY;AACtC,aAAS,KAAK,QAAQ,UAAU;AAEhC,QAAI,MAAM,QAAQ,YAAY;AAC1B,SAAI,QAAQ,KAAK;AACb,WAAK,OAAO;AACZ,gBAAU,EAAE;AACZ,qBAAe;AACf;;AAGJ,SAAI,WAAW,KAAK,KAAK,CACrB,QAAO;SAEP,MAAK,SAAS;;AAEtB,eAAW,KAAK;;;EAGxB,MAAMe,MAAwB;GAC1B,UAAU,MAAKd,QAAS,cAAc,OAAO;GAC7C;GACH;EAED,IAAIe;AACJ,MAAI,MAAM,QAAQ,MAAM;AACpB,OAAI,KAAK,MAAM,IAAI,KAAK,MAAM,CAC1B,QAAO,CAAC,IAAI,8BACR,MAAKf,QAAS,UAAU,eAAe,EAAE,EAAE,KAAK,MAAM,CAAC;AAE/D,QAAK,MAAM,IAAI,KAAK,OAAO,IAAI;QAE/B,MAAK,WAAW,KAAK,IAAI;AAC7B,SAAO,CAAC,MAAM,GAAG;;CAGrB,AAAQ,YAA+B;AAInC,MAAI,CAFmB,KAAK,QAAQ,OAAO,4BAA4B,CAElD,MAAK,yBAAyB;EAEnD,MAAMgB,OAA0B;GAC5B,YAAY,EAAE;GACd,uBAAO,IAAI,KAAK;GAChB,UAAU,MAAKjB,KAAM;GACxB;AAED,MAAI,KAAK,QAAQ,KAAK,oBAAoB,IACtC,KAAK,QAAQ,KAAK,kBAAkB,CAAE,QAAO;AAEjD,SAAO,MAAM;GACT,MAAM,CAAC,MAAM,MAAM,KAAK,wBAAwB,KAAK;AACrD,OAAI,KAAM,MAAK,KAAK,QAAQ,GAAG,KAAK;AACpC,OAAI,CAAC,GAAI;;AAGb,OAAK,SAAS,MAAM,KAAK,QAAQ,UAAU;AAC3C,SAAO;;;;;;ACp3Bf,IAAa,gBAAb,MAAyD;CACrD,aAAa,MAAqD;AAC9D,UAAQ,KAAK,MAAb;GACI,KAAK,SAAS,MACV,QAAO,KAAK,QAAQ,SAAS,MAAM,KAAK,aAAa,EAAE,CAAC;GAE5D,KAAK,SAAS;AACV,QAAI,CAAC,KAAK,OAAO,kBAAmB,QAAO,EAAE;AAC7C,WAAO,KAAK,OAAO,kBAAkB,MAAM,KAAK;GAEpD,KAAK,SAAS;GACd,KAAK,SAAS;GACd,KAAK,SAAS;AACV,QAAI,CAAC,KAAK,OAAO,aAAc,QAAO,EAAE;AACxC,WAAO,KAAK,OAAO,aAAa,MAAM,KAAK;GAE/C,KAAK,SAAS;IACV,IAAI,KAAK,KAAK,OAAO,gBAAgB,IAAI,KAAK,IAAI;AAClD,QAAI,GAAI,QAAO,GAAG,MAAM,KAAK;AAC7B,QAAI,CAAC,KAAK,OAAO,wBAAyB,QAAO,EAAE;AACnD,WAAO,KAAK,OAAO,wBAAwB,MAAM,KAAK;GAE1D,KAAK,SAAS;IACV,IAAI,KAAK,KAAK,OAAO,eAAe,IAAI,KAAK,IAAI;AACjD,QAAI,GAAI,QAAO,GAAG,MAAM,KAAK;AAC7B,QAAI,CAAC,KAAK,OAAO,uBAAwB,QAAO,EAAE;AAClD,WAAO,KAAK,OAAO,uBAAuB,MAAM,KAAK;GAEzD,KAAK,SAAS,eACV,QAAO,EAAE;GAEb,QACI,QAAO,MAAM,MAAM,KAAK;;;CAIpC,YACI,AAAgBkB,UAChB,AAAgBC,gBAChB,AAAOC,OAAuB;EAFd;EACA;EACT;;;AA0Bf,IAAa,sBAAb,MAAa,oBAEb;CACI;CACA;CAEA;CACA;CAEA,iCAAiB,IAAI,KAE0B;CAC/C,kCAAkB,IAAI,KAE0B;CAEhD,YACI,AAAOC,SACP,AAAOC,eAET;EAHS;EACA;;CAIX,OAAO,KAAe,OAA0C;EAC5D,IAAI,MAAM,IAAI,cAAc,MAAM,KAAK,MAAM;EAC7C,IAAI,UAAU,IAAI,YAAY,CACzB,KAAK,QACL,SAAS,MAAM,IAAI,aAAa,EAAE,CAAC;AACxC,SAAO,KAAK,cAAc,SAAS,IAAI;;CAG3C,iBAAiB,GAAG,IAAoC;AACpD,KAAG,SAAS,CAAC,GAAG,OAAO,KAAK,eAAe,IAAI,GAAG,EAAE,CAAC;;CAGzD,kBAAkB,GAAG,IAAqC;AACtD,KAAG,SAAS,CAAC,GAAG,OAAO,KAAK,gBAAgB,IAAI,GAAG,EAAE,CAAC;;CAG1D,OAAO,KAAmC,MAAyC;EAC/E,IAAIC,WAAS,IAAI,oBAAoB,KAAK,SAAS,KAAK,cAAc;AACtE,WAAO,oBAAoB,KAAK;AAChC,WAAO,eAAe,KAAK;AAC3B,WAAO,yBAAyB,KAAK;AACrC,WAAO,0BAA0B,KAAK;AACtC,WAAO,kBAAkB,IAAI,IAAI,KAAK,gBAAgB;AACtD,WAAO,iBAAiB,IAAI,IAAI,KAAK,eAAe;AACpD,SAAOA;;;;;;;;;;;;;;AClHf,SAAgB,SACZ,MAAoB,GACpB,MAOqB;CACrB,MAAM,SAAS,KAAK,UAAU,WAAW,QAAQ,MAAM,EAAE,cAAc,OAAU;CACjF,MAAM,WAAW,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC,QAAQ,MAAM,EAAE,GAAG,cAAc,OAAU;CACtF,MAAM,MAAM,CAAC,GAAG,QAAQ,GAAG,SAAS,KAAK,MAAM,EAAE,GAAG,CAAC;AACrD,KAAI,IAAI,SAAS,EAAG,QAAO;EACvB,MAAM,IAAI,KAAK,MAAM,IAAI,4BAA4B,EAAE,SAAS,CAAC;EACjE,MAAM;EACN,OAAO;EACP,MAAM;EACN,WAAW;EACd;CAED,MAAM,YACF,MAAM,OAAO,WAAW,EAAE,UAAU,MAAM,UAAU,UAAU;AAClE,KAAI,KAAK,UAAU,WAAW,SAAS,EAAE,UACrC,KAAK,UAAU,WAAW,SAAS,UACrC,QAAO;EACL,MAAM,CAAC,IAAI,6BAA6B;GACpC,QAAQ,KAAK,SAAS;GACtB,OAAO,KAAK,KAAK;GACjB,KAAK,KAAK,KAAK;GAClB,EAAE,EAAE,QAAQ,UAAU,CAAC;EACxB,MAAM;EACN,OAAO;EACP,MAAM;EACN,WAAW;EACd;CAED,MAAMC,OAAY,EAAE;CACpB,MAAMC,QAAa,EAAE;CACrB,MAAMC,OAAkB,EAAE;AAE1B,GAAE,SAAS,MAAM,MAAM;AACnB,QAAM,QAAQ,KAAK,UAAU,WAAW;AACxC,OAAK,QAAQ,MAAM,MAAM;AACzB,MAAI,MAAM,KAAM,MAAK,QAAQ,KAAK,MAAM,MAAM;GAChD;AAEF,KAAI,MAAM,SAAU,MAAK,SAAS,SAAS,MAAM,MAAM;AACnD,QAAM,QAAQ,KAAK,UAAU,WAAW,EAAE,SAAS;AACnD,OAAK,QAAQ,MAAM,OAAO;AAC1B,MAAI,MAAM,QAAQ,KAAK,MAAO,MAAK,QAAQ,KAAK,MAAM,MAAM;GAC9D;AAEF,KAAI,MAAM,MAAO,QAAO,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,SAAS;AACjE,QAAM,QAAQ,KAAK,UAAU,MAAM,IAAI,KAAK;AAC5C,OAAK,QAAQ,KAAK,UAAU,MAAM,IAAI,KAAK,EAAE,aAAc;AAC3D,MAAI,MAAM,QAAQ,KAAK,MAAO,MAAK,QAAQ,KAAK,MAAM,MAAM;GAC9D;AACF,KAAI,CAAC,MAAM,UAAW,MAAK,UAAU,MAAM,SAAS,GAAG,MAAM;AACzD,MAAI,CAAC,MAAM,SAAS,CAAC,OAAO,OAAO,KAAK,OAAO,EAAE,CAC7C,MAAK,KAAK,IAAI,uBAAuB,EAAE,UAAU,4BAA4B,EAAE,GAAG,CAAC;GACzF;AACF,KAAI,KAAK,OAAQ,QAAO;EACpB;EACA,MAAM;EACN,OAAO;EACP,MAAM;EACN,WAAW;EACd;CAED,MAAM,YAAY,KAAK,UAAU,WAC5B,MAAM,EAAE,UAAU,MAAM,UAAU,UAAU,GAAG;AAKpD,QAAO;EAAE,MAAM;EAAM;EAAM;EAAO,MAHrB,UACR,KAAK,MAAM,MAAM,OAAO,EAAE,UAAW,MAAM,GAAG,EAAE,UAAW;EAExB;EAAW;;;;;;AAOvD,SAAgB,6BACZ,MACJ;CACI,SAAS,YAAY,MAA0C;EAC3D,IAAI,SAAS;AACb,OAAK,MAAM,OAAO,KACd,SAAQ,IAAI,MAAZ;GACI,KAAK,SAAS;GACd,KAAK,SAAS;AACV,cAAU,IAAI;AACd;GACJ,KAAK,SAAS,eACV;GACJ,KAAK,SAAS;AACV,QAAI,CAAC,IAAI,UAAW,QAAO,CAAC,IAAI,wBAC5B,IAAI,UAAU,mCAAmC,CAAC;IACtD,IAAI,aAAa,YAAY,IAAI,UAAU;AAC3C,QAAI,MAAM,QAAQ,WAAW,CAAE,QAAO;AACtC,cAAU;AACV;GACJ,QACI,QAAO,MAAM,MAAM,IAAI;;AAGnC,SAAO;;CAGX,SAAS,aAAa,MAAqB;AACvC,MAAI,KAAK,UAAU,EAAG,QAAO;WACpB,KAAK,SAAS,GAAG;GACtB,IAAI,OAAO,KAAK,GAAG,GAAG,CAAE;AACxB,UAAO,CAAC,IAAI,kCAAkC;IAC1C,QAAQ,KAAK;IACb,OAAO,KAAK,GAAG,SAAS;IACxB,KAAK,KAAK,aAAa,KAAK;IAC/B,CAAC,CAAC;;AAEP,SAAO,MAAM,KAAK,GAAG;;CAGzB,SAAS,MAAM,KAAsC;AACjD,MAAI,IAAI,QAAQ,SAAS,eAAe;AACpC,OAAI,CAAC,IAAI,UAAW,QAAO,CAAC,IAAI,wBAC5B,IAAI,UAAU,mCAAmC,CAAC;AACtD,UAAO,aAAa,IAAI,UAAU;aAC3B,IAAI,QAAQ,SAAS,aAC5B,QAAO,IAAI,QAAQ;WACZ,IAAI,SAAS,SAAS,UAC7B,QAAO,CAAC,IAAI,qCAAqC,IAAI,SAAS,CAAC;AAEnE,SAAO,YAAY,IAAI,QAAQ;;AAGnC,QAAO,aAAa,KAAK,QAAQ;;;;;;AAOrC,SAAgB,2BACZ,MACJ;CACI,SAAS,MAAM,OAAwC;AACnD,OAAK,MAAM,OAAO,MACd,KAAI,IAAI,QAAQ,SAAS,iBAAiB,IAAI,cAAc,QAAW;GACnE,MAAM,KAAK,MAAM,IAAI,UAAU;AAC/B,OAAI,GAAI,QAAO;aACR,IAAI,QAAQ,SAAS,OAAO;GACnC,MAAM,KAAK,MAAM,IAAI,QAAQ;AAC7B,OAAI,GAAI,QAAO;aACR,IAAI,SAAS,SAAS,UAC7B,QAAO,CAAC,IAAI,qCAAqC,IAAI,SAAS,CAAC;AAGvE,SAAO;;AAEX,QAAO,MAAM,KAAK,aAAa,KAAK,QAAQ;;;;;;AAOhD,SAAgB,sBACZ,MACA,KACgB;CAChB,SAAS,MAAM,OAAwC;AACnD,MAAI,MAAM,SAAS,GAAG;GAClB,MAAM,OAAO,MAAM,GAAG,GAAG,CAAE;AAC3B,UAAO,CAAC,IAAI,kCAAkC;IAC1C,QAAQ,KAAK;IACb,OAAO,MAAM,GAAG,SAAS;IACzB,KAAK,KAAK,aAAa,KAAK;IAC/B,CAAC,CAAC;aACI,MAAM,UAAU,KAChB,MAAM,GAAG,SAAS,SAAS,iBAC3B,MAAM,GAAG,cAAc,OAE9B,QAAO,MAAM,MAAM,GAAG,UAAU;WACzB,MAAM,UAAU,KAAK,CAAC,KAAK,SAClC,QAAO,CAAC,IAAI,uBAAuB,KAAK,SAAS,CAAC;AAEtD,SAAO;;AAEX,QAAO,MAAM,KAAK,aAAa,KAAK,QAAQ;;AAGhD,SAAgB,uBAAuB,MAC/B,KACA,KACA,WAAW,iBAAiB,QAAQ;AACxC,QAAO,IAAI,yBAA+B,MAAM,UAAU;EACtD,uBAAuB;EACvB,uBAAuB,MAAM,KAAK;GAC9B,IAAI,EAAE,SAAS,SAAS,MAAM,EAAE,CAAC;AACjC,OAAI,KAAM,QAAO;GACjB,MAAM,SAAS,6BAA6B,KAAK;AACjD,OAAI,OAAO,WAAW,SAAU,QAAO;GAEvC,MAAM,WAAW,IAAI,IAAI;AACzB,OAAI,aAAa,OACb,QAAO,CAAC,IAAI,gCAAgC,KAAK,MAAM,MAAM,SAAS,CAAC;AAC3E,OAAI,KAAK,OAAO;AAChB,UAAO,QAAQ,EAAE;;EAExB,CAAC;;AAGN,SAAgB,uBAAuB,MAC/B,KACA,KACA,WAAW,iBAAiB,QAAQ;AACxC,QAAO,IAAI,yBAA+B,MAAM,UAAU,EACtD,uBAAuB,MAAM,KAAK;EAC9B,IAAI,EAAE,SAAS,SAAS,MAAM,EAAE,CAAC;AACjC,MAAI,KAAM,QAAO;AACjB,SAAO,sBAAsB,KAAK;AAClC,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AAGjB,MADiB,IAAI,IAAI,KACR,OACb,QAAO,CAAC,IAAI,gCAAgC,KAAK,MAAM,MAAM,UAAU,CAAC;EAE5E,MAAM,WAAW,UADD,UAAU,KAAK,QAAQ,GAAG,CACP,CAAC;AACpC,MAAI,KAAK,SAAS;AAClB,QAAM,KAAK,MAAM,MAAM,WAAW,KAAK,SAAS,CAAC;AACjD,SAAO,QAAQ,EAAE;IAExB,CAAC;;;;;AClON,MAAa,WAAW,QAAQ;AAchC,SAAgB,iBAAiB,KAAmB;AAChD,KAAI,KAAK,UAAU;EACf,uBAAuB,EAAE;EACzB,wBAAwB,EAAE;EAC1B,wBAAwB,EAAE;EAC1B,yBAAyB,EAAE;EAC3B,cAAc;EACjB,CAAC;;AAGN,SAAgB,eACZ,MAAS,MAAc,WAAoC,SAC/D;AACI,OAAM,KAAK,kBAAkB,SAAS,MAAM,IAAI,KAAK;AACrD,OAAM,KAAK,SAAS,UAAU,MAAM,UAAU,UAAU,WAAW,QAAQ,UAAU,aAAa,SAAY,YAAY,UAAU,YAAY,KAAK,oBAAoB,gBAAgB,UAAU,WAAW;AAC9M,OAAM,YAAY,iBAAiB,WAAW,KAAK,GAAG,QAAQ,CAAC;CAO/D,MAAM,OACF,UAAU,aAAa,SAAY,iBAAiB,OACpD,UAAU,eAAe,iBAAiB,eACxC,iBAAiB;CACvB,MAAM,MAAO,QAAQ,SAAS,gBACxB,IAAI,wBAA+B,MAAM,KAAK,GAC9C,IAAI,yBAAgC,MAAM,KAAK;CAErD,MAAM,WAAW,QAAQ,SAAS;AAElC,KAAI,QAAQ,UAAU,MACf,QAAQ,GAAG,QAAQ,SAAS,iBAC5B,QAAQ,GAAG,QAAQ,SAAS,gBAC/B,KAAI,WAAW,QAAQ,GAAG,IAAI;AAElC,KAAI,wBAAwB;AAC5B,KAAI,iBAAiB,SAA8B;EAC/C,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,UAAU,MAAM,EAAE,OAAO,UAAU,WAAW,CAAC;AACnF,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ;GACT,IAAI;GACJ,MAAM,IAAI,IAAI,OAAO,QAAQ,KAAM,CAAC;GACvC;AACD,SAAO,EAAE;;AAEb,KAAI,UAAU,SAA8B;AACxC,MAAI,CAAC,KAAK,OAAO,GAAI,QAAO,EAAE;AAE9B,SADqB,WAAW,SAAS,EAAC,aAAa,KAAK,UAAS,CAAC;;AAG1E,KAAI,0BAA0B,MAA2B,QAAsB;AAC3E,MAAI,CAAC,KAAK,OAAO,GAAI,QAAO,EAAE;EAC9B,MAAM,QAAQ,IAAI,IAAI,SAAS;AAE/B,GADa,WAAW,MAAM,0BAA0B,MAAM,wBACzD,KAAK;GACN,UAAU,UAAU;GACf;GAAY,MAAM,KAAK,MAAM;GAClC,aAAa,KAAK;GACrB,CAAC;AACF,QAAM,MAAM,UAAU,SAAS,MAAM,iBAAiB,KAAK;AAC3D,QAAM,MAAM,iBACR,UAAU,aAAa,KAAK,cAC1B,UAAU,aAAa,SAAY,cACnC,IAAI,UAAU,SAAS,GAAG;AAChC,QAAM,MAAM,aAAa,MAAM,CAAC,GAAG,KAAK,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI;AACrG,SAAO,EAAE;;AAEb,KAAI,yBAAyB,MAA2B,QAAsB;AAC1E,MAAI,CAAC,KAAK,OAAO,GAAI,QAAO,EAAE;EAC9B,MAAM,QAAQ,IAAI,IAAI,SAAS;AAE/B,GADa,WAAW,MAAM,0BAA0B,MAAM,wBACzD,KAAK;AACV,QAAM,MAAM,UAAU,SAAS,MAAM,iBAAiB,KAAK;AAC3D,SAAO,EAAE;;AAEb,QAAO;;AAGX,SAAgB,qBAAqB,SAAwB,MAAiB;CAC1E,IAAI,kBAAkB;CACtB,IAAIC,SAAyB,EAAE;AAC/B,MAAK,MAAM,KAAK,QACZ,SAAQ,EAAE,MAAV;EACI,KAAK,SAAS;AACV,UAAO,KAAK,GAAG,qBAAqB,EAAE,SAAS,KAAK,CAAC;AACrD;EACJ,KAAK,SAAS,UACV,KAAI,CAAC,iBAAiB;AAClB,qBAAkB;AAClB,UAAO,KAAK,GAAG,EAAE,QAAQ;AACzB;;EAGR,KAAK,SAAS;EACd,KAAK,SAAS;AACV,QAAK,KAAK,IAAI,wBAAwB,EAAE,SAAS,CAAC;AAClD;EACJ,KAAK,SAAS;AACV,qBAAkB;AAClB,UAAO,KAAK,EAAE;AACd;EACJ,QACI,OAAM,MAAM,EAAE;;AAG1B,QAAO;;;;;ACzIX,SAASC,uBACL,MACA,OACF;CACE,IAAI,EAAE,MAAM,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC,OAAO,EAAE;EAAE,MAAM;EAAM,WAAW;EAAM,CAAC;AAC3F,KAAI,KAAM,QAAO;AAEjB,QAAO,EAAE;CACT,MAAM,WAAW,MAAO;CACxB,MAAM,OAAO,KAAM;AACnB,KAAI,SAAS,MAAM,MAAM,SAAS,KAAK,CAAE,QAAO,CAC5C,IAAI,uBAAuB,SAAS,UAAU,KAAK,CAAC;CAExD,IAAI,WAAW;AACf,KAAI,KAAM,SAAS,GAAG;EAClB,MAAM,OAAO,KAAM,GAAG,GAAG;EACzB,MAAM,QAAQ,aAAa,KAAK,KAAK;AACrC,MAAI,OAAO;AACP,cAAW,MAAM;AACjB,QAAM,KAAK;QAEX,YAAW;;CAGnB,IAAI,YAAY,OAAO,YAAY,CAAC,GAAG,KAAK,UAAU,MAAM,CACvD,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,UAAW,CAAC,CAAC;CAEzC,IAAIC,YAAqC;EACrC;EAAU,MAAM;EAAO;EAAW,cAAc;EACnD;AACD,MAAK,QAAQ;EAAE;EAAM;EAAU;EAAW;EAAM;AAChD,OAAM,KAAK,UAAU;;AAIzB,MAAa,iBAAiB,IAAI,yBACd,gBAAgB,iBAAiB,QACrD;CAEI,uBAAuB;CACvB,iBAAiB;CACjB,mBAAmB,MAAM,KAAK,WAAW;EAErC,MAAM,QAAQD,uBAAqB,MADrB,IAAI,IAAI,SAAS,CACgB,sBAAsB;AACrE,MAAI,MACA,KAAI,UAAW,QAAO;OACjB;AACD,SAAM,MAAM,iCAAiC;AAC7C,UAAO,EAAE;;AAGjB,QAAM,MAAM,8BAA8B,KAAK,MAAO,KAAK;AAC3D,SAAO,EAAE;;CAEb,kBAAkB,MAAM,KAAK;AACzB,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;AAG1B,SAFc,IAAI,IAAI,SAAS,CACb,sBAAsB,KAAK,KAC9B,KAAK,MAAM,UAAU;AACpC,QAAM,MAAM,4BAA4B,KAAK,MAAM,KAAK;AACxD,SAAO,EAAE;;CAEb,cAAc,MAAM,KAAK,WAAW;AAChC,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,EAAE;EACxC,MAAM,OAAO,KAAK,MAAM;AACxB,MAAI,CAAC,KAAK,MAAM,KACZ,MAAK,KAAK,IAAI,uBAAuB,KAAK,MAAM,SAAS,SAAS,CAAC;WAC9D,IAAI,OAAO,eAAe,IAAI,KAAK,MAAM,KAAK,CACnD,MAAK,KAAK,IAAI,0BAA0B,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,KAAK,CAAC;AAC3F,SAAO;;CAEX,OAAO,MAAM,KAAK,WAAW;AACzB,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI,KAAK,OAAO,MAAM;AAClB,OAAI,IAAI,OAAO,eAAe,IAAI,KAAK,MAAM,KAAK,CAC9C,KAAI,OAAO,eAAe,OAAO,KAAK,MAAM,KAAK;AACrD,OAAI,OAAO,eAAe,IAAI,eAAe,SAAS,eAClD,KAAK,MAAM,MAAM,KAAK,MAAM,WAAW,KAAK,QAAQ,CAAC;;AAE7D,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAa,kBAAkB,IAAI,yBAE/B,iBAAiB,iBAAiB,QACtC;CAEI,uBAAuB;CACvB,iBAAiB;CACjB,mBAAmB,MAAM,KAAK,WAAW;EAErC,MAAM,QAAQA,uBAAqB,MADrB,IAAI,IAAI,SAAS,CACgB,uBAAuB;AACtE,MAAI,MACA,KAAI,UAAW,QAAO;OACjB;AACD,SAAM,MAAM,iCAAiC;AAC7C,UAAO,EAAE;;AAGjB,QAAM,MAAM,+BAA+B,KAAK,MAAO,KAAK;AAC5D,SAAO,EAAE;;CAEb,kBAAkB,MAAM,KAAK;AACzB,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;AAG1B,SAFc,IAAI,IAAI,SAAS,CACb,uBAAuB,KAAK,KAC/B,KAAK,MAAM,UAAU;AACpC,QAAM,MAAM,6BAA6B,KAAK,MAAM,KAAK;AACzD,SAAO,EAAE;;CAEb,cAAc,MAAM,KAAK,WAAW;AAChC,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,EAAE;AAExC,MAAI,CAAC,KAAK,MAAM,KACZ,QAAO,CAAC,IAAI,uBAAuB,KAAK,MAAM,SAAS,SAAS,CAAC;EAErE,MAAM,OAAO,KAAK,MAAM;AACxB,MAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,KAAK,CAC/C,MAAK,KAAK,IAAI,0BAA0B,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,KAAK,CAAC;AAE3F,OAAK,MAAM,aAAa,qBAAqB,KAAK,SAAS,KAAK;AAChE,SAAO;;CAEX,OAAO,MAAM,KAAK,WAAW;AACzB,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI,KAAK,OAAO,MAAM;AAClB,OAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,KAAK,CAC/C,KAAI,OAAO,gBAAgB,OAAO,KAAK,MAAM,KAAK;AACtD,OAAI,OAAO,gBAAgB,IACvB,eAAe,SAAS,gBACpB,KAAK,MAAM,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM,WAAY,CAAC;;AAE3E,SAAO,EAAE;;CAEhB,CAAC;;;;ACnIF,SAAS,qBACL,MACA,MACA,OACF;CACE,IAAI,EAAE,MAAM,MAAM,OAAO,MAAM,cAAc,SAAS,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,MAAM,CAAC;AACrF,KAAI,KAAM,QAAO;AAEjB,QAAO,EAAE;CACT,MAAM,WAAW,MAAO;CACxB,MAAM,OAAO,KAAM;AACnB,KAAI,SAAS,MAAM,MAAM,SAAS,KAAK,CAAE,QAAO,CAC5C,IAAI,uBAAuB,SAAS,UAAU,KAAK,CAAC;CAExD,IAAIE,WAA+B;CACnC,IAAIC,QAA4B,EAAE;CAClC,IAAIC,UAA8B;CAClC,IAAI,IAAI;AACR,QAAO,IAAI,KAAM,QAAQ;EACrB,MAAM,MAAM,UAAW;EACvB,MAAM,QAAQ,aAAa,KAAK,IAAI,UAAW;AAC/C,MAAI,OAAO;AACP,cAAW,MAAM;AACjB;AACA,OAAI,QAAQ,SAAS,eACjB,KAAI,IAAI,KAAM,OACV,KAAI,KAAM,OAAO,GACb,MAAK,KAAK,IAAI,uBACV,UAAW,GAAG,UAAU,UAAU,CAAC;QACpC;AACH,cAAU,KAAM;AAChB;;OAED,MAAK,KACR,IAAI,6BAA6B,KAAK,KAAK,CAAC;AAEpD;;AAGJ;AACA,MAAI,IAAI,KAAM,QAAQ;GAClB,MAAM,KAAK,IAAI;AACf,OAAI,OAAO,GACP,QAAO,CAAC,IAAI,uBAAuB,IAAI,UAAU,KAAK,CAAC;GAC3D,MAAM,OAAO,KAAM;AACnB,OAAI,SAAS,GACT,QAAO,CAAC,IAAI,uBAAuB,UAAW,GAAG,UAAU,OAAO,CAAC;AACvE,SAAM,KAAK,CAAC,IAAI,KAAK,CAAC;AACtB;SACG;AACH,QAAK,KAAK,IAAI,6BAA6B,KAAK,KAAK,CAAC;AACtD;;;AAIR,KAAI,KAAK,KAAM,SAAS,GACpB;MAAI,KAAM,OAAO,GAAI,MAAK,KACtB,IAAI,uBAAuB,UAAW,GAAG,UAAU,kBAAkB,CAAC;YACnE,IAAI,KAAM,SAAS,EAC1B,MAAK,KAAK,IAAI,6BAA6B,KAAK,KAAK,CAAC;CAE1D,IAAIC,YACA;EAAE;EAAU,MAAM,MAAM,KAAK,MAAM,EAAE,GAAG;EAAE,WAAW,EAAE;EAAE,cAAc;EAAW;AACtF,MAAK,QAAQ;EAAE;EAAM;EAAU;EAAW;EAAO;EAAS;EAAM;AAChE,OAAM,KAAK,UAAU;AACrB,QAAO,EAAE;;AAGb,MAAa,0BAA0B,IAAI,yBAEtC,mBAAmB,iBAAiB,QACzC;CAEI,uBAAuB;CACvB,iBAAiB;CACjB,mBAAmB,MAAM,KAAK,WAAW;AACrC,MAAI,CAAC,UAAW,QAAO,EAAE;EAEzB,MAAM,QAAQ,IAAI,IAAI,SAAS;EAC/B,MAAM,QAAQ,qBAAqB,SAAS,eACxC,MAAM,MAAM,sBAAsB;AACtC,MAAI,MAAO,QAAO;AAClB,QAAM,MAAM,uCAAuC,KAAK,MAAO,KAAK;AACpE,SAAO,EAAE;;CAEb,kBAAkB,MAAM,KAAK;AACzB,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;AAG1B,SAFc,IAAI,IAAI,SAAS,CACb,sBAAsB,KAAK,KAC9B,KAAK,MAAM,UAAU;AACpC,QAAM,MAAM,uCAAuC,KAAK,MAAM,KAAK;AACnE,SAAO,EAAE;;CAEb,cAAc,MAAM,KAAK,WAAW;AAChC,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,EAAE;AACxC,MAAI,CAAC,KAAK,MAAM,KACZ,QAAO,CAAC,IAAI,uBAAuB,KAAK,MAAM,SAAS,SAAS,CAAC;EAErE,MAAM,OAAO,KAAK,MAAM;AACxB,MAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,KAAK,CAC/C,MAAK,KAAK,IAAI,0BAA0B,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,KAAK,CAAC;AAC3F,SAAO;;CAEX,OAAO,MAAM,KAAK,WAAW;AACzB,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO;EACtC,MAAM,OAAO;EACb,MAAM,QAAQ,KAAK,MAAM,MAAM,KAAK,MAAM,EAAE,GAAG;EAC/C,MAAM,MAAM,eAAe,SAAS,eAChC,MAAM,KAAK,MAAM,WAAW,KAAK,QAAQ;EAC7C,MAAMC,YAAiC;GACnC,MAAM,KAAK,MAAM;GACjB,SAAS,KAAK,MAAM;GACpB;GAAK;GACR;AACD,MAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,KAAK,CAC/C,KAAI,OAAO,gBAAgB,OAAO,KAAK,MAAM,KAAK;AACtD,MAAI,OAAO,gBAAgB,IAAI,UAAU;AACzC,QAAM,WAAW,8BAA8B,WAAW,eAAe,UAAU,CAAC;AACpF,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAa,2BAA2B,IAAI,yBAEvC,oBAAoB,iBAAiB,QAC1C;CAEI,uBAAuB;CACvB,iBAAiB;CACjB,mBAAmB,MAAM,KAAK,WAAW;AACrC,MAAI,CAAC,UAAW,QAAO,EAAE;EAEzB,MAAM,QAAQ,IAAI,IAAI,SAAS;EAC/B,MAAM,QAAQ,qBAAqB,SAAS,gBACxC,MAAM,MAAM,uBAAuB;AACvC,MAAI,MAAO,QAAO;AAClB,QAAM,MAAM,wCAAwC,KAAK,MAAO,KAAK;AACrE,SAAO,EAAE;;CAEb,kBAAkB,MAAM,KAAK;AACzB,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;AAG1B,SAFc,IAAI,IAAI,SAAS,CACb,uBAAuB,KAAK,KAC/B,KAAK,MAAM,UAAU;AACpC,QAAM,MAAM,uCAAuC,KAAK,MAAM,KAAK;AACnE,SAAO,EAAE;;CAEb,cAAc,MAAM,KAAK,WAAW;AAChC,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,EAAE;AACxC,MAAI,CAAC,KAAK,MAAM,KACZ,QAAO,CAAC,IAAI,uBAAuB,KAAK,MAAM,SAAS,SAAS,CAAC;EAErE,MAAM,OAAO,KAAK,MAAM;AACxB,MAAI,IAAI,OAAO,iBAAiB,IAAI,KAAK,MAAM,KAAK,CAChD,MAAK,KAAK,IAAI,0BAA0B,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,KAAK,CAAC;AAC3F,OAAK,MAAM,aAAa,qBAAqB,KAAK,SAAS,KAAK;AAChE,SAAO;;CAEX,OAAO,MAAM,KAAK,WAAW;AACzB,MAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO;EACtC,MAAM,OAAO;EACb,MAAM,QAAQ,KAAK,MAAM,MAAM,KAAK,MAAM,EAAE,GAAG;EAC/C,MAAM,MAAM,eAAe,SAAS,gBAChC,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM,WAAY;EACvD,MAAMC,YAAkC;GACpC,MAAM,KAAK,MAAM;GACjB,SAAS,KAAK,MAAM;GACpB;GAAK;GACR;AACD,MAAI,IAAI,OAAO,iBAAiB,IAAI,KAAK,MAAM,KAAK,CAChD,KAAI,OAAO,iBAAiB,OAAO,KAAK,MAAM,KAAK;AACvD,MAAI,OAAO,iBAAiB,IAAI,UAAU;AAC1C,QAAM,WAAW,+BAA+B,WAAW,gBAAgB,UAAU,CAAC;AACtF,SAAO,EAAE;;CAEhB,CAAC;;;;AC7LF,MAAa,cAAc,IAAI,wBAC1B,OAAO,iBAAiB,cAC7B,EACI,OAAO,MAAM;AACT,QAAO,KAAK;GAEnB,CAAC;AAEF,MAAa,iBAAiB,IAAI,wBAC7B,UAAU,iBAAiB,QAChC;CACI,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,UAAU,SAAS,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;AAChE,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AAEjB,OAAK,QAAQ,OAAO;AACpB,SAAO,EAAE;;CAEb,OAAO,MAAM;EACT,MAAMC,SAAwB;GAC1B,UAAU,KAAK;GACf,MAAM,SAAS;GACf,SAAS,EAAE;GACd;EACD,SAAS,YAAY;AACjB,OAAI,KAAK,OAAO,UACZ,QAAO,QAAQ,KAAK;IAChB,MAAM,SAAS;IACf,UAAU,KAAK,MAAM;IACrB,SAAS,KAAK,MAAM;IACvB,CAAC;;EAEV,SAAS,KAAK,OAAsB;AAChC,QAAK,MAAM,KAAK,MAAO,SAAQ,EAAE,MAAV;IACnB,KAAK,SAAS;AACV,YAAO,QAAQ,KAAK,GAAG,EAAE,QAAQ;AACjC,gBAAW;AACX;IACJ,KAAK,SAAS;AACV,UAAK,EAAE,QAAQ;AACf;IACJ,KAAK,SAAS;AACV,SAAI,EAAE,UAAW,MAAK,EAAE,UAAU;AAClC;IACJ,KAAK,SAAS;IACd,KAAK,SAAS,eACV;IACJ,QACI,OAAM,MAAM,EAAE;;;AAG1B,OAAK,KAAK,QAAQ;AAElB,MAAI,KAAK,OAAO,aAAa,OAAO,QAAQ,SAAS,EACjD,QAAO,QAAQ,KAAK;AACxB,SAAO,CAAC,OAAO;;CAEtB,CAAC;;;;;;CCjDS,SAAS,KAAK,KAAqC;AACtD,SAAO;GACH,aAAa,IAAI,IAAI,IAAI,YAAY;GACrC,QAAQ,IAAI,OAAO,eAAe,OAAO;GACzC,SAAS,IAAI,OAAO,gBAAgB,OAAO;GAC3C,kBAAkB,IAAI,OAAO,iBAAiB,OAAO;GACrD,iBAAiB,IAAI,OAAO,gBAAgB,OAAO;GACtD;;;CAGE,SAAS,MAAM,MAAwB,KAAmB;AAC7D,MAAI,cAAc,IAAI,IAAI,KAAK,YAAY;AAC3C,MAAI,OAAO,iBAAiB,IAAI,YAAY,KAAK,OAAO;AACxD,MAAI,OAAO,kBAAkB,IAAI,YAAY,KAAK,QAAQ;AAC1D,MAAI,OAAO,mBAAmB,IAAI,YAAY,KAAK,iBAAiB;AACpE,MAAI,OAAO,kBAAkB,IAAI,YAAY,KAAK,gBAAgB;;;CAG/D,SAAS,KAAK,MAAwB,MAA0C;AACnF,SAAO;GACH,aAAa,KAAK,YAAY,WAAW,KAAK,YAAY;GAC1D,QAAQ,KAAK,OAAO,WAAW,KAAK,OAAO;GAC3C,SAAS,KAAK,QAAQ,WAAW,KAAK,QAAQ;GAC9C,kBAAkB,KAAK,iBAAiB,WAAW,KAAK,iBAAiB;GACzE,iBAAiB,KAAK,gBAAgB,WAAW,KAAK,gBAAgB;GACzE;;;CAGL,SAAS,IACL,MAAsB,MAAsB,WAC5B;EAChB,IAAI,WAAW,IAAI,IAAY,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC;EAC5D,IAAI,MAAM,IAAI,IAAO,KAAK;EAC1B,IAAIC,UAAe,EAAE;AACrB,OAAK,MAAM,KAAK,KACZ,KAAI,SAAS,IAAI,EAAE,KAAK,CACpB,SAAQ,KAAK,EAAE;MAEf,KAAI,IAAI,EAAE;AAElB,SAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC;;CAG5C,SAAS,QACZ,MAAwB,MACE;EAC1B,IAAI,CAAC,QAAQ,MACT,IAAI,KAAK,QAAQ,KAAK,QAAQ,WAAW,cAAc;EAC3D,IAAI,CAAC,SAAS,MACV,IAAI,KAAK,SAAS,KAAK,SAAS,WAAW,eAAe;EAC9D,IAAI,CAAC,kBAAkB,MACnB,IAAI,KAAK,kBAAkB,KAAK,kBAAkB,WAAW,gBAAgB;EACjF,IAAI,CAAC,iBAAiB,MAClB,IAAI,KAAK,iBAAiB,KAAK,iBAAiB,WAAW,eAAe;AAC9E,SAAO,CACH;GACI,aAAa,KAAK,YAAY,MAAM,KAAK,YAAY;GACrD;GAAQ;GAAS;GAAkB;GACtC,GACA,KAAK,KAAK,OAAO,OACnB,KAAK,KAAK,OAAO,OACjB,KAAK,sBAAsB,KAAK,OAAO,OACvC,KAAK,qBAAqB,KAAK,IACjC;;;;;;;ACrET,MAAa,YACT,IAAI,wBAGD,UAAU,iBAAiB,QAClC;CACI,SAAS;AAEL,SAAO,EAAE;;CAEb,mBAAmB,MAAM,KAAK;EAC1B,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC;AAC7C,MAAI,KAAM,QAAO;EAEjB,MAAM,OAAO,IAAI,IAAI,SAAS;EAC9B,MAAM,OAAO,KAAM;EACnB,MAAM,OAAO,iBAAiB,KAAK,IAAI;AAEvC,MAAI,KAAK,iBAAiB,OACtB,QAAO,CAAC,IAAI,sBAAsB,KAAK,KAAK,CAAC;AAEjD,SAAO,EAAE;AACT,OAAK,QAAQ;GAAE;GAAM;GAAM;AAC3B,OAAK,eAAe;AACpB,MAAI,IAAI,OAAO,QAAQ,IAAI,KAAK,EAAE;GAC9B,MAAM,CAAC,UAAU,OAAO,iBAAiB,QAAQ,MAAM,IAAI,OAAO,QAAQ,IAAI,KAAK,CAAE;AACrF,OAAI,IAAK,MAAK,KACV,IAAI,4BAA4B,KAAK,MAAM,IAAI,CAAC;AACpD,oBAAiB,MAAM,UAAU,IAAI;AACrC,SAAM,MAAM,4BAA4B,MAAM,wBAAwB;QAEtE,OAAM,MAAM,4BAA4B,KAAK;AAEjD,SAAO;;CAEX,kBAAkB,MAAM,KAAK;AACzB,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;EAC1B,MAAM,OAAO,IAAI,IAAI,SAAS;AAC9B,OAAK,eAAe;EAEpB,MAAM,MAAM,iBAAiB,KAAK,IAAI;AACtC,MAAI,OAAO,QAAQ,IAAI,KAAK,MAAM,MAC9B,iBAAiB,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC;AAChD,mBAAiB,MAAM,KAAK,MAAM,MAAM,IAAI;AAC5C,QAAM,MAAM,2BAA2B,KAAK,MAAM,KAAK;AACvD,SAAO,EAAE;;CAEhB,CAAC;AAEF,SAAS,IAAI,MAAsC,KAAmB;CAClE,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,OAAO,CAAC;AACpD,KAAI,KAAM,QAAO;CAEjB,MAAM,OAAO,IAAI,IAAI,SAAS;AAC9B,KAAI,CAAC,IAAI,OAAO,QAAQ,IAAI,KAAM,KAAK,CACnC,QAAO,CAAC,IAAI,uBAAuB,MAAO,KAAK,SAAS,CAAC;AAC7D,KAAI,KAAK,iBAAiB,KAAM,KAC5B,QAAO,CAAC,IAAI,6BAA6B,MAAO,KAAK,SAAS,CAAC;CAEnE,MAAM,MAAM,iBAAiB,KAAK,IAAI;CACtC,MAAM,CAAC,UAAU,OAAO,iBAAiB,QAAQ,IAAI,OAAO,QAAQ,IAAI,KAAM,KAAK,EAAG,IAAI;AAC1F,kBAAiB,MAAM,UAAU,IAAI;AACrC,MAAK,QAAQ;AAEb,KAAI,IACA,QAAO,CAAC,IAAI,4BAA4B,KAAK,MAAM,IAAI,CAAC;AAC5D,QAAO,EAAE;;AAGb,MAAa,eACT,IAAI,yBAA2C,OAAO,iBAAiB,MAC3E,EACI,cAAc,MAAM,KAAK;AACrB,QAAO,IAAI,MAAM,IAAI;GAE5B,CAAC;AAEF,MAAa,cACT,IAAI,wBAA0C,OAAO,iBAAiB,QAC1E;CACI,mBAAmB,MAAM,KAAK;AAC1B,SAAO,IAAI,MAAM,IAAI;;CAEzB,kBAAkB,MAAM,KAAK;AACzB,MAAI,KAAK,MACL,kBAAiB,MAAM,KAAK,OAAO,IAAI;AAC3C,SAAO,EAAE;;CAEb,OAAO,MAAM;AACT,SAAO,KAAK;;CAEnB,CAAC;;;;ACzFF,SAAS,aAEJ,MAAc,MAAS,cAAuB,QACnD;CAQI,MAAM,MAAO,QAAQ,SAAS,gBACxB,IAAI,wBAAgC,MAAM,iBAAiB,KAAK,GAChE,IAAI,yBAAiC,MAAM,iBAAiB,KAAK;CAEvE,MAAM,WAAW,QAAQ,SAAS;AAElC,KAAI,kBAAkB;AACtB,KAAI,iBAAiB,MAA4B,KAAmB,cAAuB;AACvF,MAAI,KAAK,MAAO,QAAO,EAAE;EAEzB,SAAS,iBAAiB,GAA4B;AAClD,OAAI,EAAE,iBAAiB,QAAW;AAC9B,MAAE,eAAe;AACjB,UAAM,MAAM,wBAAwB,aAAa;cAC1C,EAAE,iBAAiB,aAC1B,QAAO,CAAC,IAAI,yBAAyB,KAAK,SAAS,CAAC;AAExD,UAAO,EAAE;;EAIb,MAAM,QAAQ,SACR,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,GACjD,SAAS,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AAC9C,MAAI,MAAM,MAAM;AACZ,QAAK,QAAQ,EAAE,IAAI,OAAO;AAC1B,UAAO,MAAM;;EAGjB,MAAM,QAAQ,IAAI,IAAI,SAAS;EAC/B,MAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;EAC9D,MAAM,QAAQ,WAAW,MAAM,yBAAyB,MAAM;EAE9D,IAAI,cAAc;AAEd,OAAI,KAAK,UAAU,KAAK,MAAM,UAAU,GAAG;AACvC,SAAK,QAAQ,EAAE,IAAI,OAAO;AAC1B,WAAO,CAAC,IAAI,iCAAiC,KAAK,SAAS,CAAC;;GAIhE,MAAM,KAAK,MAAM,KAAK;AACtB,OAAI,CAAC,IAAI;IACL,IAAIC,cAAY,MAAM,GAAG,GAAG;AAC5B,QAAIA,YAAW,QAAO,iBAAiBA,YAAU;AACjD,SAAK,QAAQ;KAAE,IAAI;KAAM,MAAM,KAAK,GAAG,GAAG;KAAS,OAAO,KAAK,SAAS;KAAG;AAC3E;;GAIJ,IAAI,YAAY,MAAM,MAAM,MAAM,EAAE,YAAY,GAAG;AACnD,OAAI,UAAW,QAAO,iBAAiB,UAAU;AACjD,QAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,KAAK,GAAG,aAAa,IAAI;AACpE,SAAK,QAAQ;KAAE,IAAI;KAAM,MAAM,KAAK;KAAW,OAAO;KAAG;AACzD;;AAIJ,OAAI,WAAW;AACX,SAAK,QAAQ,EAAE,IAAI,OAAO;AAC1B,WAAO,CAAC,IAAI,uBAAuB,MAAM,MAAM,GAAI,UAAU,GAAG,CAAC;;AAErE,UAAO,EAAE;MACT;AAEJ,MAAI,QAAQ;GAER,MAAM,UAAU,MAAM,KAAK;GAE3B,MAAM,cAAc,MAAM,MAAM;GAChC,MAAMC,SAAQ,WACR,IAAI,OAAO,kBACX,IAAI,OAAO,gBAAyC,IAAI,QAAQ;AACtE,OAAI,CAACA,OAAK;AACN,SAAK,QAAQ,EAAE,IAAI,OAAO;AAC1B,WAAO,CAAC,IAAI,uBAAuB,YAAY,UAAU,QAAQ,CAAC;;AAGtE,OAAI,KAAK,OAAO,GACZ,MAAK,MAAM,YAAYA;;AAG/B,MAAI,SAAS,OAAW,QAAO;AAC/B,SAAO,EAAE;;AAEb,KAAI,UAAU,MAA4B,QAAsB;AAC5D,MAAI,CAAC,KAAK,MAAO,QAAO;AACxB,MAAI,CAAC,KAAK,MAAM,GAAI,QAAO,EAAE;EAC7B,IAAI,SAAS,WAAW,KAAK,MAAM,KAAK,YAAY;AACpD,MAAI,QAAQ;AACR,UAAO,KAAK,MAAM,cAAc,OAAU;AAa1C,UAAO,CAXuB;IAC1B;IAAM,KAFE,KAAK,MAAM;IAGnB,UAAU,KAAK;IACf,MAAM,KAAK;IACX,WAAW;KACP,YAAY,EAAE;KACd,uBAAO,IAAI,KAAK;KAChB,UAAU,KAAK;KAClB;IACD,SAAS;IACZ,CACe;QACb,QAAO;;AAElB,KAAI,0BAA0B,MAA4B,QAAsB;AAE5E,MAAI,CAAC,KAAK,OAAO,GAAI,QAAO,EAAE;EAC9B,MAAM,QAAQ,IAAI,IAAI,SAAS;AAC/B,QAAM,MAAM,qCAAqC,KAAK,MAAM,KAAK,IAAI,KAAK;AAE1E,GADa,WAAW,MAAM,0BAA0B,MAAM,wBACzD,OAAO,KAAK,MAAM,OAAO,EAAE;AAChC,SAAO,EAAE;;AAEb,KAAI,yBAAyB,MAA4B,QAAsB;AAE3E,MAAI,CAAC,KAAK,OAAO,GAAI,QAAO,EAAE;EAC9B,MAAM,QAAQ,IAAI,IAAI,SAAS;AAC/B,QAAM,MAAM,4BAA4B,KAAK,MAAM,KAAK,IAAI,KAAK;AAEjE,GADa,WAAW,MAAM,0BAA0B,MAAM,wBACzD,OAAO,KAAK,MAAM,OAAO,GAAG,KAAK,MAAM,KAAY;AACxD,SAAO,EAAE;;AAEb,QAAO;;AAGX,MAAa,eAAe,aAAa,QAAQ,SAAS,eAAe,OAAO,MAAM;AACtF,MAAa,gBAAgB,aAAa,QAAQ,SAAS,gBAAgB,OAAO,MAAM;AAExF,MAAa,kBAAkB,aAAa,YAAY,SAAS,eAAe,MAAM,MAAM;AAC5F,MAAa,mBAAmB,aAAa,YAAY,SAAS,gBAAgB,MAAM,MAAM;AAE9F,MAAa,wBAAwB,aACjC,mBAAmB,SAAS,eAAe,MAAM,KAAK;AAC1D,MAAa,yBAAyB,aAClC,mBAAmB,SAAS,gBAAgB,MAAM,KAAK;;;;ACtJ3D,SAAS,UAAU,IAAY,KAAuC;CAClE,MAAM,QAAQ,IAAI,IAAI,SAAS;AAE/B,KAAI,MAAM,uBAAuB,MAAM,MAAM,EAAE,KAAK,SAAS,GAAG,CAAC,IAC7D,MAAM,sBAAsB,MAAM,MAAM,EAAE,KAAK,SAAS,GAAG,CAAC,EAChE;AACI,QAAM,MAAM,qCAAqC,GAAG;AACpD;;CAGJ,IAAIC,QAA4B;AAChC,MAAK,IAAI,IAAI,MAAM,wBAAwB,SAAS,GAAG,KAAK,GAAG,IAE3D,MAAK,QADQ,MAAM,wBAAwB,GACzB,KAAK,IAAI,GAAG,MAAM,OAChC;AAER,MAAK,IAAI,IAAI,MAAM,uBAAuB,SAAS,GAAG,KAAK,GAAG,IAE1D,MAAK,QADQ,MAAM,uBAAuB,GACxB,KAAK,IAAI,GAAG,MAAM,OAChC;AAER,KAAI,UAAU,OACV,SAAQ,IAAI,UAAU,IAAI,GAAG;AACjC,QAAO;;AAGX,IAAI,aAAa,OAAgB;CAC7B,cAAc,MAAoB,KAAmB;EACjD,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,KAAK,CAAC;AAClD,MAAI,KAAM,QAAO;AACjB,MAAI,KAAM,MAAM,GAAI,QAAO,CAAC,IAAI,uBAAuB,MAAO,GAAG,SAAS,CAAC;AAE3E,OAAK,QADS,UAAU,KAAM,IAAI,IAAI,KACf;AACvB,SAAO,EAAE;;CAEb,OAAO,MAAW;AACd,SAAQ,KAAK,SAAS,IAAK,KAAK,UAAU,EAAE;;CAEnD;AAED,IAAI,cAAc,MAAc,MAC5B,IAAI,wBACH,MAAM,iBAAiB,QAAQ,UAAU,EAAE,CAAC;AAEjD,IAAI,eAAe,MAAc,MAC7B,IAAI,yBACH,MAAM,iBAAiB,QAAQ,UAAU,EAAE,CAAC;AAEjD,MAAa,gBAAgB,WAAW,SAAS,KAAK;AACtD,MAAa,iBAAiB,WAAW,UAAU,MAAM;AACzD,MAAa,iBAAiB,YAAY,SAAS,KAAK;AACxD,MAAa,kBAAkB,YAAY,UAAU,MAAM;AAE3D,MAAa,kBACT,IAAI,yBAA6C,KAAK,iBAAiB,MAC3E;CACI,iBAAiB;CAEjB,cAAc,MAAM,KAAK,WAAW;EAChC,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,KAAK,CAAC;AAClD,MAAI,KAAM,QAAO,YAAY,OAAO,EAAE;EAEtC,MAAM,KAAK,KAAM;AACjB,MAAI,MAAM,GACN,QAAO,YAAY,CAAC,IAAI,uBAAuB,MAAO,GAAG,SAAS,CAAC,GAAG,EAAE;EAE5E,MAAM,QAAQ,UAAU,IAAI,IAAI;AAChC,MAAI,UAAU,OACV,QAAO,YAAY,CAAC,IAAI,yBAAyB,MAAO,GAAG,UAAU,GAAG,CAAC,GAAG,EAAE;AAClF,OAAK,QAAQ,EAAE,OAAO;AACtB,SAAO,EAAE;;CAEb,OAAO,MAAM,GAAG,WAAW;AACvB,MAAI,CAAC,KAAK,MAAO,QAAO,YAAY,EAAE,GAAG;AACzC,SAAO,CAAC;GAAE,MAAM,SAAS;GAAM,SAAS,KAAK,MAAM;GAAO,UAAU,KAAK;GAAU,CAAC;;CAE3F,CAAC;AAEF,MAAa,iBACT,IAAI,yBAA6C,SAAS,iBAAiB,MAC/E;CAEI,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AACvD,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,EAAE,OAAO,KAAM,KAAK,GAAG,EAAE;AACtC,SAAO,EAAE;;CAEb,OAAO,MAAM;AACT,MAAI,CAAC,KAAK,MAAO,QAAO,EAAE;AAC1B,SAAO,CAAC;GAAE,MAAM,SAAS;GAAM,SAAS,KAAK,MAAM;GAAO,UAAU,KAAK;GAAU,CAAC;;CAE3F,CAAC;AAEF,MAAa,qBACT,IAAI,+BAA+B,MAAM,KAC7C;CACI,iBAAiB;CACjB,OAAO,SAAS,KAAK;EACjB,MAAM,SAAS,UAAU,SAAS,IAAI;AACtC,MAAI,WAAW,OAAW,OAAM,MAAM,KAAK,QAAQ,QAAQ,SAAS;AACpE,SAAO;;CAEd,CAAC;AAEF,MAAa,SAAS,IAAI,yBAEvB,OAAO,iBAAiB,MAAM;CAE7B,cAAc,MAAM;AAChB,MAAI,KAAK,UAAU,MAAM,QAAQ,KAAK,KAAK,UAAU,WAAW,UAAU,GAAG;GACzE,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,UAAU,MAAM,CAAC;AAC5C,OAAI,IAAI,cAAc,OAClB,QAAO,CAAC,IAAI,4BAA4B,IAAI,SAAS,CAAC;AAE1D,QAAK,QAAQ;IAAE;IAAI,OAAO,IAAI;IAAW;AACzC,UAAO,EAAE;;EAGb,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,MAAM,QAAQ,CAAC;AAC3D,MAAI,KAAM,QAAO;AAEjB,MAAI,CAAC,KAAM,GACP,QAAO,CAAC,IAAI,uBAAuB,MAAO,GAAG,SAAS,CAAC;AAE3D,OAAK,QAAQ;GACT,IAAI,KAAM;GACV,OAAO,KAAM;GAChB;AACD,SAAO,EAAE;;CAEb,OAAO,MAAM,KAAK;AACd,MAAI,KAAK,OAAO;AACZ,OAAI,UAAU,IAAI,KAAK,MAAM,IAAI,KAAK,MAAM,MAAM;AAClD,SAAM,MAAM,gBAAgB,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,MAAM;;AAErE,SAAO,EAAE;;CAEhB,CAAC;;;;ACzIF,IAAI,UAAU,IAAI,eAAe;AACjC,QAAQ,eAAe,CAAC,iBAAiB;AACzC,QAAQ,gBAAgB,IACpB,gBAAgB,iBAChB,yBAAyB,0BACzB,QACA,aACH;AACD,QAAQ,eAAe,IACnB,cAAc,iBAAiB,uBAC/B,WAAW,aACX,eAAe,gBACf,aAAa,eAChB;AACD,QAAQ,gBAAgB,IACpB,eAAe,kBAAkB,wBACjC,iBAAiB,gBACjB,gBAAgB,gBACnB;AACD,QAAQ,sBAAsB,IAC1B,mBACH;AAED,MAAaC,uBAA8C,OAAO,OAAO,QAAQ;;;;AC1BjF,MAAM,kBAAkB,IAAI,wBACxB,eAAe,iBAAiB,QAChC,EAAE,UAAU,QAAW,CAAC;AAE5B,MAAM,uBAAuB,IAAI,wBAC7B,gBAAgB,iBAAiB,QACjC;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,SAAS,CAAC;AACtD,MAAI,KAAM,QAAO;EACjB,IAAI,MAAM,OAAO,SAAS,KAAM,OAAO;AACvC,MAAI,MAAM,IAAI,CAAE,QAAO,CACnB,IAAI,uBAAuB,MAAO,OAAO,UAAU,qBAAqB,CAAC;AAC7E,OAAK,QAAQ;AACb,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAM,eAAe,IAAI,wBACrB,WAAW,iBAAiB,QAC5B,EAAE,UAAU,QAAW,CAAC;AAE5B,MAAa,eAAe;CAAC;CAAiB;CAAsB;CAAa;AAEjF,MAAa,2BAA2B;CACpC,CAAC,kBAAkB,MAAM,QACrB,yDAAC;EAAG,OAAM;YAAU,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAM,CAChE;CACD,CAAC,eAAe,MAAM,QAClB,yDAAC;EAAI,OAAM;YAAW,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAO,CACnE;CACD,CAAC,uBAAuB,MAAM,QAC1B,KAAK,UAAU,SACT,IAAI,MAAM,aAAa,MAAM,aAAa,GAC1C,yDAAC;EAAG,OAAM;EAAU,OAAO,KAAK;YAAQ,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAM,CAC1F;CACJ;;;;ACnCD,MAAa,WAAW,QAAQ;AAgBhC,SAAgB,aAAa,KAAmB;AAC5C,KAAI,KAAK,UAAU,EACf,MAAM,EAAE,EACX,CAAC;;AAGN,SAAS,WAAW,KAAmB,MAAmB;CACtD,MAAM,OAAO,IAAI,IAAI,SAAS,CAAE;AAChC,QAAO,KAAK,SAAS,KAAK,KAAK,GAAG,GAAG,CAAE,SAAS,KAAK,MACjD,MAAK,KAAK;AACd,MAAK,KAAK,KAAK;AACf,QAAO,EAAE;;AAGb,SAAS,oBAAoB,KAAmB;AAC5C,QAAO,IAAI,IAAI,SAAS,CAAE,KAAK,GAAG,GAAG,EAAE;;AAG3C,SAAS,4BAA4B,KAAmB;AACpD,QAAO,IAAI,IAAI,SAAS,CAAE,KAAK,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE;;AAGjE,MAAM,eAAe,IAAI,wBACrB,WAAW,iBAAiB,QAC5B;CACI,UAAU;CACV,cAAc,MAAM,KAAK;EACrB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;AACnE,MAAI,KAAM,QAAO;AAEjB,SAAO,sBAAsB,KAAK;AAClC,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AAEjB,OAAK,QAAQ;GACT,MAAM;GACN,OAAO,oBAAoB,IAAI,IAAI;GACtC;AACD,MAAI,KAAM,MAAM,QAAW;GACvB,MAAM,QAAQ,OAAO,SAAS,KAAM,EAAE;AACtC,OAAI,MAAM,MAAM,IAAI,QAAQ,KAAK,QAAQ,EACrC,QAAO,CAAC,IAAI,uBACR,MAAO,EAAG,UAAU,qCAAqC,CAAC;OAC7D,MAAK,MAAM,QAAQ;;AAE5B,aAAW,KAAK,KAAK,MAAM;AAC3B,SAAO,QAAQ,EAAE;;CAExB,CAAC;AAEN,MAAM,uBAAuB,IAAI,wBAC7B,oBAAoB,iBAAiB,MACrC;CACI,UAAU;CACV,cAAc,MAAM,KAAK;EACrB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;AACnE,MAAI,KAAM,QAAO;AAEjB,OAAK,QAAQ;GACT,MAAM;GAAW,UAAU;GAC3B,QAAQ,4BAA4B,IAAI,IAAI,KAAK;GACpD;AACD,MAAI,KAAM,MAAM,QAAW;GACvB,MAAM,QAAQ,OAAO,SAAS,KAAM,EAAE;AACtC,OAAI,MAAM,MAAM,IAAI,QAAQ,KAAK,QAAQ,EACrC,QAAO,CAAC,IAAI,uBACR,MAAO,EAAG,UAAU,qCAAqC,CAAC;OAC7D,MAAK,MAAM,QAAQ;;AAE5B,aAAW,KAAK,KAAK,MAAM;AAC3B,SAAO,QAAQ,EAAE;;CAExB,CAAC;AAEN,MAAM,uBAAuB,IAAI,wBAC7B,oBAAoB,iBAAiB,QACrC;CACI,UAAU;CACV,cAAc,MAAM,KAAK;EACrB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,SAAS,CAAC;AACtD,MAAI,KAAM,QAAO;AACjB,SAAO,sBAAsB,MAAM,EAAC,UAAU,MAAK,CAAC;AACpD,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AAEjB,OAAK,QAAQ;GAAE,MAAM;GAAW,OAAO,oBAAoB,IAAI,IAAI;GAAG;EACtE,MAAM,QAAQ,KAAM,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;AACxE,MAAI,MAAM,UAAU,KAAK,MAAM,SAAS,EACpC,QAAO,CAAC,IAAI,uBACR,MAAO,OAAO,UAAU,0CAA0C,CAAC;MACtE,MAAK,QAAQ;GAAE,MAAM,MAAM,KAAK,IAAI;GAAE,OAAO,MAAM;GAAQ;AAChE,aAAW,KAAK,KAAK,MAAM;AAC3B,SAAO,QAAQ,EAAE;;CAExB,CAAC;AAEN,MAAa,gBAAgB;CAAC;CAAc;CAAsB;CAAqB;AAEvF,MAAa,4BAA4B;CACrC,CAAC,eAAe,MAAM,QAAQ;AAC1B,MAAI,KAAK,UAAU,QAAW;GAC1B,MAAM,MAAM,MAAM,KAAK,MAAM;GAC7B,MAAM,OAAO,KAAK,QAAQ;GAC1B,MAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,WAAQ,YAAY,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,CAAC;AACxD,UAAO;;AAEX,SAAO,IAAI,MAAM,aAAa,MAAM,aAAa;GACnD;CACF,CAAC,uBAAuB,MAAM,QAAQ;AAClC,MAAI,KAAK,UAAU,QAAW;GAC1B,MAAM,MAAM,MAAM,KAAK,MAAM;GAC7B,MAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,WAAQ,YAAY;AACpB,UAAO;;AAEX,SAAO,IAAI,MAAM,aAAa,MAAM,aAAa;GACnD;CAEF,CAAC,uBAAuB,MAAM,QAAQ;AAClC,MAAI,KAAK,UAAU,QAAW;GAC1B,MAAM,MAAM,MAAM,KAAK,MAAM;GAC7B,MAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,WAAQ,YAAY;AACpB,WAAQ,YAAY,yDAAC;IAAK,OAAM;cAAkB,KAAK,MAAM;KAAY,CAAC;AAC1E,OAAI,KAAK,QAAQ,SAAS,GAAG;IACzB,MAAM,OAAO,KAAK,QAAQ;AAC1B,YAAQ,YAAY,yDAAC;KAAK,OAAM;eAAmB,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;MAAQ,CAAC;;AAEnG,UAAO;;AAEX,SAAO,IAAI,MAAM,aAAa,MAAM,aAAa;GACnD;CACL;;;;ACpJD,MAAM,QAAQ,QAAQ;AA0BtB,SAAgB,UAAU,KAAmB;AACzC,KAAI,KAAK,OAAO;EACZ,yBAAS,IAAI,KAAK;EAClB,eAAe;GACX,UAAU;GACV,YAAY;GACf;EACD,aAAa,EAAE;EACf,WAAW;EACd,CAAC;;AAGN,SAAS,UAAU,KAAmB,MAAe;CACjD,MAAM,OAAO,IAAI,IAAI,MAAM;CAC3B,IAAIC;AACJ,KAAI,KACA,KAAI,CAAC,KAAK,QAAQ,IAAI,KAAK,EAAE;AACzB,WAAS,EAAE,GAAG,KAAK,eAAe;AAClC,OAAK,QAAQ,IAAI,MAAM,OAAO;OAE9B,UAAS,KAAK,QAAQ,IAAI,KAAK;KAGnC,UAAS,KAAK;AAElB,QAAO;;AAGX,MAAM,qBAAqB,IAAI,yBAC3B,iBAAiB,iBAAiB,MACtC,EACI,cAAc,MAAM,KAAK;CACrB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,OAAO,EAAE;EAAE,UAAU,CAAC,OAAO;EAAE,MAAM;EAAM,CAAC;AACxF,KAAI,KAAM,QAAO;AACjB,KAAI,KAAM,QAAQ,YAAY,KAAM,QAAQ,WACxC,QAAO,CAAC,IAAI,uBAAuB,MAAO,KAAK,UAC3C,mCAAmC,CAAC;AAC5C,WAAU,KAAK,KAAM,KAAK,CAAC,WAAW,KAAM;AAC5C,QAAO,EAAE;GAEhB,CAAC;AAEF,MAAM,wBAAwB,IAAI,yBAC9B,oBAAoB,iBAAiB,MACzC,EACI,cAAc,MAAM,KAAK;CACrB,IAAI,EAAE,MAAM,MAAM,UAAU,SAAS,MAAM,CAAC,OAAO,EAAE;EAAE,UAAU,CAAC,OAAO;EAAE,MAAM;EAAM,CAAC;AACxF,KAAI,KAAM,QAAO;AACjB,KAAI,KAAM,QAAQ,QAAQ,KAAM,QAAQ,MACpC,QAAO,CAAC,IAAI,uBAAuB,MAAO,KAAK,UAC3C,mCAAmC,CAAC;AAC5C,WAAU,KAAK,KAAM,KAAK,CAAC,aAAa,KAAM,QAAQ;AACtD,QAAO,EAAE;GAEhB,CAAC;AAEF,MAAM,mBAAmB,IAAI,yBACzB,QAAQ,iBAAiB,MAC7B;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,QAAQ,CAAC;AAC9C,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,MAAM;AACnB,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAM,aAAa,IAAI,yBACnB,eAAe,iBAAiB,QACpC;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAChE,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,MAAM,SAAS;AAC5B,SAAO,EAAE;;CAEb,uBAAuB,MAAM,KAAK;AAC9B,MAAI,KAAK,UAAU,QAAW;GAC1B,MAAM,OAAO,IAAI,IAAI,MAAM;AAC3B,QAAK,YAAY,KAAK;IAClB,QAAQ;IACR,IAAI,KAAK;IACT,MAAM,KAAK;IACX,UAAU,KAAK;IACf,SAAS,CAAC;KACN,MAAM,SAAS;KACf,UAAU;MACN,QAAQ,KAAK,SAAS;MACtB,OAAO,KAAK,KAAK;MACjB,KAAK,KAAK,SAAS,aAAa,KAAK,SAAS;MACjD;KACD,SAAS,KAAK;KACjB,CAAC;IACL,CAAC;AACF,QAAK;;AAET,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAM,YAAY,IAAI,wBAClB,QAAQ,iBAAiB,QAC7B;CACI,UAAU;CACV,cAAc,MAAM,KAAK;EACrB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,OAAO,EAAE;GAAE,UAAU,CAAC,SAAS;GAAE,MAAM;GAAM,CAAC;AACnF,MAAI,KAAM,QAAO;EAGjB,MAAM,UAAU,UAAU,GAAG,KAAK,QAAQ;AAC1C,QAAM,MAAM,4BAAiC,KAAM,KAAK,IAAI,KAAK,SAAS,QAAQ;AAClF,QAAM,MAAM,SAAS,WAAW,KAAK,GAAG,QAAQ,CAAC;EAEjD,MAAM,OAAO,IAAI,IAAI,MAAM;EAC3B,MAAMC,QAAwB;GAC1B,IAAI,KAAK;GACT,QAAQ,KAAM,UAAU;GACxB,MAAM,KAAM;GACZ,UAAU,KAAK;GACN;GACZ;AACD,OAAK;AACL,OAAK,YAAY,KAAK,MAAM;AAC5B,OAAK,QAAQ;AACb,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAa,aAAa,CAAC,UAAU;AACrC,MAAa,cAAc,CAAC,YAAY,iBAAiB;AACzD,MAAa,cAAc,CAAC,oBAAoB,sBAAsB;AAEtE,SAAS,aAAa,KAAqB,KAAoC;AAC3E,QAAO,0DAAC;EAAQ,OAAM;EAAO,IAAI,WAAW,IAAI;aAC5C,yDAAC;GAAI,OAAM;aACP,yDAAC,iBAAE,yDAAC;IAAE,MAAM,kBAAkB,IAAI;cAAO,IAAI;KAAS,GAAI;IACxD,EACN,yDAAC;GAAI,OAAM;aACN,IAAI,MAAM,OAAO,IAAI,SAAS,IAAI;IACjC;GACA;;AAGd,MAAa,0BAA0B,CACnC,CAAC,mBAAmB,MAAM,QAAQ;AAC9B,KAAI,KAAK,UAAU,OACf,QAAO,IAAI,MAAM,cAAc,MAAM,aAAa;CAGtD,MAAM,OADO,IAAI,eAAe,QAAQ,IAAI,MAAM,CAAE,YAClC,WAAW,MAAsC,EAAE,QAAQ,KAAK,MAAM;AACxF,QAAO,yDAAC;EAAI,OAAM;EAAO,IAAI,iBAAiB;YACpC,OAAO,IACH,cAAc,KAAK,UACnB,yDAAC;GAAE,MAAM,YAAY;aAAS,KAAK;IAAU;GAC9C;EACf,CACL;AAED,MAAa,yBAAyB,CAClC,CAAC,YAAY,MAAM,QAAQ;AACvB,KAAI,KAAK,UAAU,OACf,QAAO,IAAI,MAAM,aAAa,MAAM,aAAa;CACrD,MAAM,OAAO,IAAI,eAAe,QAAQ,IAAI,MAAM;AAElD,MADe,KAAK,QAAQ,IAAI,KAAK,MAAM,OAAO,IAAI,KAAK,eAChD,YAAY,WAAY,QAAO,EAAE;AAC5C,QAAO,aAAa,KAAK,OAAO,IAAI;EACtC,CACL;AAED,MAAaC,qBAA0C,QAAQ;CAC3D,MAAM,OAAO,IAAI,eAAe,QAAQ,IAAI,MAAM;CAClD,MAAM,QAAQ,IAAI,eAAe,QAAQ,IAAI,MAAM,CAC9C,YACA,QAAQ,OAAO,KAAK,QAAQ,IAAI,EAAE,OAAO,IAAI,KAAK,eAAe,YAAY,SAAS;AAC3F,KAAI,MAAM,UAAU,EAAG,QAAO;AAC9B,QAAO,CACH,yDAAC,SAAI,EACL,yDAAC;EAAQ,OAAM;YACV,MAAM,KAAK,MAAM,aAAa,GAAG,IAAI,CAAC;GACjC,CACb;;;;;ACvNL,MAAa,YAAY,IAAI,wBACzB,QAAQ,iBAAiB,cACzB,EAAE,UAAU,QAAQ,CAAC;AAEzB,MAAa,aAAa,IAAI,yBAC1B,QAAQ,iBAAiB,cACzB,EAAE,UAAU,QAAQ,CAAC;AAEzB,MAAa,wBACT,CAAC,YAAY,MAAM,QACf,yDAAC,mBAAI,yDAAC,oBAAM,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAQ,GAAM,CAChE;AAEL,MAAa,yBACT,CAAC,aAAa,MAAM,QAChB,yDAAC,oBAAK,yDAAC,oBAAM,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAQ,GAAO,CAClE;;;;ACdL,MAAM,aAAa,IAAI,wBACnB,SAAS,iBAAiB,QAC1B,EAAE,UAAU,SAAS,CAAC;AAE1B,MAAM,eAAe,IAAI,wBACrB,WAAW,iBAAiB,QAC5B,EAAE,UAAU,SAAS,CAAC;AAE1B,MAAM,eAAe,IAAI,wBACrB,WAAW,iBAAiB,QAC5B,EAAE,UAAU,SAAS,CAAC;AAE1B,MAAM,cAAc,IAAI,wBACpB,UAAU,iBAAiB,QAC3B,EAAE,UAAU,SAAS,CAAC;AAE1B,MAAM,mBAAmB,IAAI,wBACzB,MAAM,iBAAiB,QACvB;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,OAAO,sBAAsB,KAAK;AACtC,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ;AACb,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAa,cAAc;CAAC;CAAY;CAAc;CAAc;CAAa;CAAiB;AAElG,MAAa,0BAA0B;CACnC,CAAC,aAAa,MAAM,QAChB,yDAAC,0BAAY,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAc,CACjE;CACD,CAAC,eAAe,MAAM,QAClB,yDAAC;EAAW,OAAM;YAAW,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAc,CACjF;CACD,CAAC,cAAc,MAAM,QACjB,yDAAC;EAAI,OAAM;YAAU,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAO,CAClE;CACD,CAAC,eAAe,MAAM,QAClB,yDAAC,qBAAO,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAS,CACvD;CACD,CAAC,mBAAmB,MAAM,QAAQ;AAC9B,MAAI,CAAC,KAAK,MACN,QAAO,IAAI,MAAM,aAAa,MAAM,aAAa;EACrD,IAAI,OAAO,KAAK,QAAQ;AACxB,SAAO,yDAAC;GAAE,OAAM;aAAe,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;IAAK;GACzE;CACL;;;;ACrDD,MAAM,iBAAiB,IAAI,yBACvB,YAAY,iBAAiB,QAC7B,EAAE,UAAU,YAAY,CAAC;AAE7B,MAAM,gBAAgB,IAAI,yBACtB,WAAW,iBAAiB,QAC5B,EAAE,UAAU,WAAW,CAAC;AAE5B,MAAM,kBAAkB,IAAI,yBACxB,aAAa,iBAAiB,QAC9B,EAAE,UAAU,aAAa,CAAC;AAE9B,MAAM,mBAAmB,IAAI,yBACzB,cAAc,iBAAiB,QAC/B,EAAE,UAAU,cAAc,CAAC;AAE/B,MAAM,iBAAiB,IAAI,yBACvB,OAAO,iBAAiB,QACxB,EAAE,UAAU,OAAO,CAAC;AAExB,MAAa,eAAe;CAAC;CAAgB;CAAe;CAAiB;CAAkB;CAAe;AAE9G,MAAa,2BAA2B;CACpC,CAAC,iBAAiB,MAAM,QACpB,yDAAC,kBAAI,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAM,CACjD;CACD,CAAC,gBAAgB,MAAM,QACnB,yDAAC,iBAAG,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAK,CAC/C;CACD,CAAC,kBAAkB,MAAM,QACrB,yDAAC,oBAAM,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAQ,CACrD;CACD,CAAC,mBAAmB,MAAM,QACtB,yDAAC;EAAK,OAAM;YAAc,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAQ,CACxE;CACD,CAAC,iBAAiB,MAAM,QACpB,yDAAC;EAAK,OAAM;YAAO,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAAQ,CACjE;CACJ;;;;ACpCD,MAAM,aAAa,IAAI,yBACnB,QAAQ,iBAAiB,QACzB;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC;AAC7C,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,KAAM;AACnB,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAM,aAAa,IAAI,yBACnB,QAAQ,iBAAiB,QACzB;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,MAAM,CAAC;AAC5C,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,KAAM;AACnB,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAM,YAAY,IAAI,yBAClB,OAAO,iBAAiB,KAAK;AAEjC,MAAM,aAAa,IAAI,wBACnB,SAAS,iBAAiB,QAC1B,EACI,cAAc,MAAM;CAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,QAAQ,CAAC;AAC9C,KAAI,KAAM,QAAO;AACjB,MAAK,QAAQ,KAAM;AACnB,QAAO,EAAE;GAEhB,CAAC;AAEN,MAAM,aAAa,IAAI,wBACnB,SAAS,iBAAiB,KAAK;AAEnC,MAAM,YAAY,IAAI,wBAClB,QAAQ,iBAAiB,QACzB;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,MAAM,CAAC;AAC5C,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,KAAM;AACnB,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAM,aAAa,IAAI,wBACnB,SAAS,iBAAiB,QAC1B;CACI,UAAU;CACV,cAAc,MAAM;EAChB,IAAI,EAAE,MAAM,SAAS,SAAS,MAAM,CAAC,MAAM,CAAC;AAC5C,MAAI,KAAM,QAAO;AACjB,SAAO,sBAAsB,MAAM,EAAC,UAAU,MAAK,CAAC;AACpD,MAAI,KAAM,QAAO;AACjB,SAAO,2BAA2B,KAAK;AACvC,MAAI,KAAM,QAAO;AACjB,OAAK,QAAQ,KAAM;AACnB,SAAO,EAAE;;CAEhB,CAAC;AAEN,MAAa,cAAc;CAAC;CAAY;CAAY;CAAU;AAE9D,MAAa,aAAa;CAAC;CAAY;CAAY;CAAW;CAAW;AAEzE,MAAa,0BAA0B;CACnC,CAAC,aAAa,MAAM,QAChB,KAAK,UAAU,SACT,IAAI,MAAM,cAAc,MAAM,aAAa,GAC3C,0DAAC,qBACE,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,EACpC,yDAAC,kBAAI,KAAK,QAAW,IAChB,CAChB;CACD,CAAC,aAAa,MAAM,QAChB,KAAK,UAAU,SACT,IAAI,MAAM,cAAc,MAAM,aAAa,GAC3C,yDAAC;EAAE,MAAM,UAAU,KAAK,MAAM;YAC3B,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAClC,CACb;CACD,CAAC,iBAAiB,IAAI,KAAK,IAAK,CAAC;CACpC;AAED,MAAa,yBAAyB;CAClC,CAAC,aAAa,MAAM,QAChB,KAAK,UAAU,SACT,IAAI,MAAM,aAAa,MAAM,aAAa,GAC1C,yDAAC;EAAI,OAAO,aAAa,KAAK;EAAS,OAAM;YAC1C,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;GAChC,CACf;CACD,CAAC,kBAAkB,yDAAC,SAAI,CAAC;CACzB,CAAC,YAAY,MAAM,QAAQ;AACvB,MAAI,KAAK,UAAU,OACf,QAAO,IAAI,MAAM,aAAa,MAAM,aAAa;EACrD,MAAM,UAAU,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI;AACnD,SAAO,yDAAC;GAAE,MAAM,UAAU,KAAK,MAAM;aAChC,QAAQ,oBAAoB,IAAI,UAAU,KAAK;IAChD;GAEP;CACD,CAAC,aAAa,MAAM,QAAQ;AACxB,MAAI,KAAK,UAAU,OACf,QAAO,IAAI,MAAM,aAAa,MAAM,aAAa;EACrD,IAAIC;AACJ,MAAI;AACA,iBAAc,IAAI,OAAO,QAAQ,eAAe,KAAK,MAAM;UACvD;AACJ,UAAO,IAAI,MAAM,aAAa,MAAM,4BAA4B;;AAEpE,SAAO,0DAAC,uBACE,cACI,yDAAC;GAAI,KAAK;GAAa,qBAAmB,KAAK;IAAS,GACxD,yDAAC,SAAI,KAAK,KAAK,QAAS,EAC5B,KAAK,QAAQ,SAAS,IAClB,yDAAC,0BACE,IAAI,MAAM,OAAQ,KAAK,QAAQ,GAAqB,SAAS,IAAI,GACvD,GACb,EAAE,IACA;GAClB;CACL;;;;AC9HD,MAAM,QAAQ,QAAQ;AAkBtB,SAAgB,UAAU,KAAmB;AACzC,KAAI,KAAK,OAAO,EACZ,SAAS,QACZ,CAAC;;AAGN,MAAM,aAAa,IAAI,wBACnB,SAAS,iBAAiB,QAC9B;CACI,mBAAmB,MAAM,KAAK,WAAW;AACrC,MAAI,CAAC,aAAa,KAAK,MAAO,QAAO,EAAE;EACvC,MAAM,IAAI,IAAI,IAAI,MAAM;AACxB,MAAI,EAAE,QAAS,QAAO,CAClB,IAAI,wBAAwB,KAAK,UAAU,0BAA0B,CAAC;AAE1E,OAAK,QAAQ;GACT,QAAQ;GACR,QAAQ,EAAE;GAAE,MAAM,EAAE;GAAE,QAAQ,EAAE;GACnC;AACD,IAAE,UAAU,KAAK;AACjB,QAAM,MAAM,iBAAiB;AAC7B,SAAO,EAAE;;CAEb,kBAAkB,OAAO,KAAK;AAC1B,MAAI,IAAI,MAAM,CAAE,UAAU;AAC1B,QAAM,MAAM,gBAAgB;AAC5B,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAM,gBAAgB,IAAI,wBACtB,aAAa,iBAAiB,QAClC,EACI,uBAAuB,MAAM,KAAK,WAAW;AACzC,KAAI,CAAC,UAAW,QAAO,EAAE;CACzB,MAAM,IAAI,IAAI,IAAI,MAAM,CAAE;AAC1B,KAAI,CAAC,EAAG,QAAO,CACX,IAAI,wBAAwB,KAAK,UAAU,iCAAiC,CAAC;CAEjF,MAAM,UAAU,UAAU,UAAU,KAAK,CAAC;AAC1C,OAAM,KAAK,uBAAuB,WAAW,KAAK,GAAG,QAAQ,CAAC;AAC9D,KAAI,EAAE,UAAU,SAAU,GAAE,OAAO,KAAK,GAAG,QAAQ;AACnD,KAAI,EAAE,UAAU,OAAU,GAAE,KAAK,KAAK,GAAG,QAAQ;AACjD,KAAI,EAAE,UAAU,SAAU,GAAE,OAAO,KAAK,GAAG,QAAQ;AACnD,QAAO,EAAE;GAEhB,CAAC;AAEF,MAAM,sBAAsB,IAAI,wBAC5B,mBAAmB,iBAAiB,MACxC;CACI,cAAc,MAAM,KAAK;EACrB,MAAM,IAAI,IAAI,IAAI,MAAM,CAAE;AAC1B,MAAI,CAAC,EAAG,QAAO,CACX,IAAI,wBAAwB,KAAK,UAAU,uCAAuC,CAAC;AAEvF,MAAS,EAAE,UAAU,SAAU,GAAE,SAAS;WACjC,EAAE,UAAU,OAAU,GAAE,SAAS;WACjC,EAAE,UAAU,UAAU;AAE/B,QAAM,MAAM,mBAAmB,EAAE,OAAO;AACxC,SAAO,EAAE;;CAEb,SAAS;AACL,SAAO,EAAE;;CAEhB,CAAC;AAEF,MAAM,iBAAiB,IAAI,wBACvB,cAAc,iBAAiB,QACnC,EACI,uBAAuB,MAAM,KAAK,WAAW;AACzC,KAAI,CAAC,UAAW,QAAO,EAAE;AAEzB,KAAI,CADM,IAAI,IAAI,MAAM,CAAE,QAClB,QAAO,CACX,IAAI,wBAAwB,KAAK,UAAU,kCAAkC,CAAC;AAClF,QAAO,EAAE;GAEhB,CAAC;AAEF,MAAM,kBAAkB,IAAI,yBACxB,cAAc,iBAAiB,QACnC,EACI,uBAAuB,MAAM,KAAK,WAAW;AACzC,KAAI,CAAC,UAAW,QAAO,EAAE;AAEzB,KAAI,CADM,IAAI,IAAI,MAAM,CAAE,QAClB,QAAO,CACX,IAAI,wBAAwB,KAAK,UAAU,kCAAkC,CAAC;AAClF,QAAO,EAAE;GAEhB,CAAC;AAEF,MAAa,cAAc;CAAC;CAAY;CAAe;CAAgB;CAAoB;AAC3F,MAAa,eAAe,CAAC,gBAAgB;AAE7C,MAAa,sBAAsB;CAC/B,CAAC,aAAa,MAAM,QAAQ;EACxB,MAAM,IAAI,KAAK;AACf,MAAI,CAAC,EAAG,QAAO,IAAI,MAAM,aAAa,MAAM,aAAa;AACzD,SAAO,0DAAC;GACJ,yDAAC,qBAAO,IAAI,MAAM,OAAO,EAAE,QAAQ,IAAI,GAAS;GAChD,yDAAC,qBAAO,IAAI,MAAM,OAAO,EAAE,MAAM,IAAI,GAAS;GAC9C,yDAAC,qBAAO,IAAI,MAAM,OAAO,EAAE,QAAQ,IAAI,GAAS;MAC5C;GACV;CAEF,CAAC,gBAAgB,MAAM,QAAQ;AAC3B,SAAO,yDAAC,kBAAI,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAM;GACvD;CAEF,CAAC,iBAAiB,MAAM,QAAQ;AAC5B,SAAO,yDAAC,kBAAI,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAM;GACvD;CACL;AAED,MAAa,uBAAuB,CAChC,CAAC,kBAAkB,MAAM,QAAQ;AAC7B,QAAO,yDAAC,kBAAI,IAAI,MAAM,OAAO,KAAK,SAAS,IAAI,GAAM;EACvD,CACL;;;;AC9ID,MAAa,eAAe,IAAI,wBAC5B,WAAW,iBAAiB,QAChC,EAAE,CAAC;AAEH,MAAa,2BAA2B,CAAC,eACpC,MAAM,QAAQ;AAKX,QAAO,yDAAC;EAAG,OAAM;aAJA,KAAK,QAAQ,GAAG,QAAQ,SAAS,SAAS,KAAK,QAAQ,UAAU,IAC5E,KAAK,QAAQ,GAAG,UAChB,KAAK,SAGE,KAAK,MAAM,yDAAC,kBAChB,IAAI,MAAM,OAAO,CAAC,EAAE,EAAE,IAAI,GAC1B,CAAC;GACL;EAEZ;;;;ACTD,IAAI,SAAS,cAAc,KAAK,qBAAqB;AACrD,OAAO,aAAa,KAAK,WAAW,cAAc,UAAU;AAC5D,OAAO,eAAe,IAClB,GAAG,eACH,GAAG,cACH,WACA,GAAG,aACH,GAAG,YACH,GAAG,YACH,GAAG,aACH,aACH;AACD,OAAO,gBAAgB,IACnB,YACA,GAAG,cACH,GAAG,aACH,GAAG,aACH,GAAG,aACN;AACD,OAAO,gBAAgB,IACnB,GAAG,YACN;AAED,MAAaC,uBAA8C,OAAO,OAAO,OAAO;;;;ACKhF,IAAa,kBAAb,MAA6B;CACzB,QAAgB;CAChB,aAAa;CACb,+BAAe,IAAI,KAAmB;CAEtC,aAAa,MAAmB,KAAa;EACzC,IAAI,OAAO,SAAS,KAAK;AACzB,MAAI,KAAK,SAAS,SAAS,cACvB,SAAQ,KAAK,KAAK,IAAI,KAAK;AAE/B,SAAO,0DAAC;GAAQ,OAAM;;IACd,0DAAC,wBAAQ,YAAS,QAAe;IACjC,yDAAC,iBAAG,MAAQ;IACZ,yDAAC,mBAAK,WAAW,KAAK,KAAK,GAAO;;IACzB;;CAGrB,cAAc,MAAoB,KAAa;EAC3C,IAAI,OAAO,SAAS,KAAK;AACzB,MAAI,KAAK,SAAS,SAAS,eACvB,SAAQ,KAAK,KAAK,IAAI,KAAK;AAE/B,SAAO,0DAAC;GAAQ,OAAM;;IACd,0DAAC,wBAAQ,YAAS,QAAe;IACjC,yDAAC,iBAAG,MAAQ;IACZ,yDAAC,mBAAK,WAAW,KAAK,KAAK,GAAO;;IACzB;;CAGrB,OAAO,OAAuC,KAAoC;EAC9E,MAAMC,aAAW,IAAI,OAAO,QAAQ;AACpC,mDAAYA,WAAS;EAErB,IAAI,WAAWA,WAAS,wBAAwB;AAChD,QACK,SAAS,MAAM,IAAI,aAAa,EAAE,CAAC,CACnC,MAAM,CACN,SAAS,MAAM,SAAS,YAAY,EAAE,CAAC;AAC5C,SAAO;;;AAIf,MAAM,aACF,IAAI,oBACR;CACI,UAAU,WAAW,OAAO;CAC5B,aAAa,EAAE;CACf,eAAe,EAAE;CACjB,eAAe,CAAC,kBAAkB;CAClC,oBAAoB,EAAE;CACtB,sBAAsB;CAEzB,GACA,SAAS,QAAQ;CAEd,IAAI,SAAS,IAAI,MAAM,WAAW,WAAW,oBACxC,GAAG,MAAM,IAAI,MAAM,aAAa,IAAI,EAAE,IAAI,EAAE;CACjD,IAAI,MAAM,SAAS,eAAe,mBAAmB,IAAI,MAAM,MAAM;AACrE,KAAI,KAAK,OACL,yDAAC,UAAK,SAAQ,UAAU,EACxB,yDAAC,qBAAO,SAAe,EACvB,GAAG,IAAI,OAAO,QAAQ,YACjB,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,QAAQ,MAAM,MAAM,OAAU,CAC9B,MAAM,CACd;AACD,KAAI,KAAK,OACL,yDAAC;EAAQ,OAAM;YACf,0DAAC;GAAQ,OAAM;;IACd,IAAI,OAAO,QAAQ,cACf,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,QAAQ,MAAM,MAAM,OAAU;IAClC;IACA,IAAI,OAAO,QAAQ,cACf,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,QAAQ,MAAM,MAAM,OAAU;;IACzB;GACA,CACb;AACD,MAAK,MAAM,KAAK,IAAI,OAAO,QAAQ,mBAC/B,GAAE,KAAK,IAAI;AAEf,QAAO;EACT;AAEF,WAAW,qBAAqB,MAAM,QAClC,yDAAC,iBAAG,KAAK,QAAQ,SAAS,MAAM,IAAI,aAAa,EAAE,CAAC,GAAK;AAE7D,WAAW,gBAAgB,MAAM,QAAQ;AACrC,SAAQ,KAAK,MAAb;EACI,KAAK,SAAS,aACV,QAAO,IAAI,KAAK,KAAK,QAAQ,KAAK;EACtC,KAAK,SAAS;EACd,KAAK,SAAS;GACV,MAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK;GACtC,MAAM,SAAS,EAAE;AACjB,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,WAAO,KAAK,IAAI,KAAK,MAAM,GAAG,CAAC;AAC/B,QAAI,IAAI,MAAM,SAAS,EACnB,QAAO,KAAK,yDAAC,SAAI,CAAC;;AAE1B,UAAO;EACX,QACI,QAAO,MAAM,MAAM,KAAK;;;AAIpC,WAAW,0BAA0B,MAAM,QAAQ;AAC/C,QAAO,IAAI,MAAM,aAAa,MAAM,4BAA4B,KAAK,IAAI,OAAO;;AAGpF,WAAW,2BAA2B,MAAM,QAAQ;AAChD,QAAO,IAAI,MAAM,cAAc,MAAM,4BAA4B,KAAK,IAAI,OAAO;;AAGrF,WAAW,iBACP,GAAG,2BACH,GAAG,0BACH,uBACA,GAAG,yBACH,GAAG,wBACH,GAAG,wBACH,GAAG,qBACH,yBACH;AAED,WAAW,kBACP,wBACA,GAAG,0BACH,GAAG,yBACH,GAAG,yBACH,GAAG,qBACN;AAED,MAAaC,0BACuC;;;;AC1JpD,MAAa,cAAc;AAE3B,SAAgB,cAAc,OAAmB;AAC7C,OAAM,QAAQ"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["src: string","name: string","postfix: string","src: string","#inspectors","#pos","result: Inspector[]","x","prefix","content","lines: string[]","loc","loc: LocationRange | undefined","code: number","severity: MessageSeverity","location: LocationRange","info: string","what: string","what?: string","limit: number","error: any","name: string","varname: string","previous: string","config: Configuration","root: RootNode","context: ParseContext","messages: readonly Message[]","nodes: (BlockEntity | InlineEntity | ArgumentEntity)[]","result: (BlockEntity | InlineEntity | ArgumentEntity)[]","config","scanner: Scanner","cxt: ParseContext","#reparse","#expand","#expandArgument","#expandArguments","#tryAndMessage","#try","#loc","#locFrom","#defs","node: ModifierNode","paragraphEnd: number | undefined","char: string | null","node: PreNode","group: GroupNode","node: ParagraphNode","#trimNode","args: ModifierArgument[]","node: EscapedNode","content: ArgumentEntity[]","end","name: { type: 'possible' | 'ok', value: string } | undefined","arg: ModifierArgument","msgs: Message[] | undefined","args: ModifierArguments","config: RenderConfiguration<Type>","parsedDocument: Document","state: getState<Type>","options: getOptions<Type>","postprocessor:\n (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>","config","args: any","nodes: any","msgs: Message[]","concat: InlineEntity[]","parseDefineArguments","signature: CustomModifierSignature","slotName: string | undefined","parts: [string, string][]","postfix: string | undefined","signature: CustomModifierSignature","shorthand: BlockShorthand<any>","shorthand: InlineShorthand<any>","result: ParagraphNode","overlap: T[]","signature","mod","value: string | undefined","BuiltinConfiguration: ReadonlyConfiguration","system: NoteSystem","entry: NoteDefinition","NotesFooterPlugin: HTMLComponentPlugin","transformed: string | undefined","DefaultConfiguration: ReadonlyConfiguration","document","HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType>"],"sources":["../src/util.ts","../src/debug.ts","../src/source.ts","../src/interface.ts","../src/modifier.ts","../src/scanner.ts","../src/debug-print.ts","../src/messages.ts","../src/node-util.ts","../src/parser-config.ts","../src/parser.ts","../src/renderer.ts","../src/modifier-helper.ts","../src/builtin/internal.ts","../src/builtin/define-modifier.ts","../src/builtin/define-shorthand.ts","../src/builtin/misc.ts","../src/module.ts","../src/builtin/module.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts","../src/default/bullets.tsx","../src/default/headings.tsx","../src/default/notes.tsx","../src/default/code.tsx","../src/default/quotes.tsx","../src/default/inline-styles.tsx","../src/default/misc.tsx","../src/default/table.tsx","../src/default/gallery.tsx","../src/default/default.ts","../src/default/html-renderer.tsx","../src/index.ts"],"sourcesContent":["\n// TODO: use a prefix tree to find names?\nexport class NameManager<T extends {name: string}> {\n private array: {k: string, v: T}[] = [];\n private data = new Map<string, T>();\n\n constructor(from?: ReadonlyNameManager<T> | readonly T[] | ReadonlySet<T>) {\n if (from === undefined) return;\n if (from instanceof NameManager) {\n this.array = [...from.array];\n this.data = new Map(from.data);\n } else {\n const array = [...from as (readonly T[] | ReadonlySet<T>)];\n assert((from instanceof Set ? from : new Set(array)).size == array.length);\n this.array = array.map((x) => ({k: x.name, v: x}));\n this.array.sort((a, b) => b.k.length - a.k.length);\n this.data = new Map(array.map((x) => [x.name, x]));\n }\n }\n\n toArray(): T[] {\n return this.array.map(({v}) => v);\n }\n\n toSet(): Set<T> {\n return new Set(this.toArray());\n }\n\n get(name: string) {\n return this.data.get(name);\n }\n\n has(name: string) {\n return this.data.has(name);\n }\n\n remove(name: string) {\n let i = this.data.get(name);\n assert(i !== undefined);\n this.data.delete(name);\n this.array.splice(this.array.findIndex((x) => x.k == name), 1);\n }\n\n add(...elems: T[]) {\n for (const elem of elems) {\n assert(!this.has(elem.name));\n this.data.set(elem.name, elem);\n const len = elem.name.length;\n let i = 0;\n while (i < this.array.length && this.array[i].k.length > len) i++;\n this.array.splice(i, 0, {k: elem.name, v: elem});\n }\n }\n\n find(predicate: (x: T) => boolean): T | undefined {\n const result = this.array.find((x) => predicate(x.v));\n return result ? result.v : undefined;\n }\n}\n\nexport type ReadonlyNameManager<T extends {name: string}> = Omit<NameManager<T>, 'add' | 'remove'>;\n\nexport function assert(x: boolean): asserts x {\n if (!!!x) {\n let error = new Error('assertion failed');\n console.log(error.stack);\n throw error;\n }\n}\n\nexport function has(v: number, f: number): boolean {\n return (v & f) === f;\n}\n","import { assert } from \"./util\";\n\nexport enum DebugLevel {\n Trace,\n Info,\n Warning,\n Error,\n None\n}\n\nexport const debug = {\n level: DebugLevel.Info,\n trace(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Trace) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.info('TRACE', arg0, ...args);\n },\n info(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Info) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.info(' INFO', arg0, ...args);\n },\n warning(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Warning) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.warn(' WARN', arg0, ...args);\n },\n error(arg0: any, ...args: any) {\n if (this.level > DebugLevel.Error) return;\n if (typeof arg0 == 'function') arg0 = arg0();\n console.error('ERROR', arg0, ...args);\n },\n never(_: never) {\n assert(false);\n }\n}","import { assert } from \"./util\";\n\nexport type SourceDescriptor = {\n readonly name: string\n};\n\nexport interface Source extends SourceDescriptor {\n readonly nLines: number;\n /**\n * Return the row- and column-index corresponding to a given location. The indices are zero-based.\n */\n getRowCol(loc: number): [row: number, col: number];\n /**\n * Returns the position of the start of row `n` (zero-based). If `n` is zero, returns zero. If the source contains less than `n` rows, returns `Infinity`.\n */\n getRowStart(n: number): number;\n /**\n * Returns the content of the row `n` (zero-based). If the source contains less than `n` rows, returns `undefined`.\n */\n getRow(n: number): string | undefined;\n}\n\nexport class StringSource implements Source {\n readonly name: string;\n readonly nLines: number;\n private readonly lineMap: number[];\n\n constructor(d: SourceDescriptor, private readonly src: string) {\n this.name = d.name;\n this.lineMap = [0];\n [...src].forEach((x, i) => {\n if (x == '\\n') this.lineMap.push(i+1);\n });\n this.nLines = this.lineMap.length;\n this.lineMap.push(Infinity);\n }\n\n getRowCol(pos: number): [row: number, col: number] {\n let line = -1, linepos = 0;\n for (let i = 1; i < this.lineMap.length; i++) {\n if (this.lineMap[i] > pos) {\n line = i - 1;\n linepos = this.lineMap[i - 1];\n break;\n }\n }\n return [line, pos - linepos];\n }\n\n getRowStart(n: number): number {\n assert(n >= 0);\n if (n >= this.lineMap.length) return Infinity;\n return this.lineMap[n];\n }\n\n getRow(n: number): string | undefined {\n const start = this.getRowStart(n);\n const end = this.getRowStart(n + 1);\n if (start === Infinity) return undefined;\n return this.src.substring(start, end - 1);\n } \n}","import { Source } from \"./source\";\nimport { SystemModifierDefinition, BlockModifierDefinition, InlineModifierDefinition, ArgumentInterpolatorDefinition } from \"./modifier\";\n\nexport enum MessageSeverity {\n Info,\n Warning,\n Error\n}\n\nexport type Message = {\n readonly severity: MessageSeverity,\n readonly location: LocationRange,\n readonly info: string,\n readonly code: number\n};\n\nexport type LocationRange = {\n original?: LocationRange\n source: Source,\n start: number,\n end: number,\n\n // FIXME: eh...\n actualEnd?: number\n};\n\nexport enum NodeType {\n Root,\n Group,\n Paragraph,\n Preformatted,\n Text,\n Escaped,\n SystemModifier,\n InlineModifier,\n BlockModifier,\n Interpolation\n}\n\nexport type RootNode = {\n type: NodeType.Root\n content: BlockEntity[],\n source: Source\n};\n\nexport type GroupNode = {\n location: LocationRange,\n type: NodeType.Group,\n content: BlockEntity[]\n};\n\nexport type ParagraphNode = {\n location: LocationRange,\n type: NodeType.Paragraph,\n content: InlineEntity[]\n};\n\nexport type PreNode = {\n location: LocationRange,\n type: NodeType.Preformatted,\n content: {\n start: number,\n end: number,\n text: string\n }\n};\n\nexport type TextNode = {\n location: LocationRange,\n type: NodeType.Text,\n content: string\n};\n\nexport type EscapedNode = {\n location: LocationRange,\n type: NodeType.Escaped,\n content: string\n}\n\nexport type ModifierArguments = {\n positional: ModifierArgument[],\n named: Map<string, ModifierArgument>,\n location: LocationRange,\n}\n\ntype ModifierNodeBase<TState> = {\n location: LocationRange,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArguments\n}\n\nexport type SystemModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n content: BlockEntity[],\n expansion?: never[],\n};\n\nexport type BlockModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = ModifierNodeBase<TState> & {\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type ModifierNode<T = any> =\n BlockModifierNode<T> | InlineModifierNode<T> | SystemModifierNode<T>;\nexport type BlockEntity =\n GroupNode | ParagraphNode | PreNode | BlockModifierNode<any> | SystemModifierNode<any>;\nexport type InlineEntity =\n TextNode | EscapedNode | InlineModifierNode<any> | SystemModifierNode<any>;\nexport type DocumentNode =\n BlockEntity | InlineEntity | RootNode;\n\n// used in arguments only\nexport type InterpolationNode = {\n location: LocationRange,\n type: NodeType.Interpolation,\n definition: ArgumentInterpolatorDefinition,\n argument: ModifierArgument,\n expansion?: string\n};\n\nexport type ModifierArgument = {\n location: LocationRange,\n content: ArgumentEntity[]\n expansion?: string\n};\n\nexport type ArgumentEntity = TextNode | EscapedNode | InterpolationNode;\n","import { Message, BlockModifierNode, BlockEntity, InlineModifierNode, InlineEntity, SystemModifierNode } from \"./interface\";\nimport { ParseContext } from \"./parser-config\";\n\nexport enum ModifierSlotType {\n Normal,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted,\n /** No content slot */\n None\n}\n\nexport type ModifierMetadata = {\n // TODO\n};\n\nclass ModifierBase<TNode, TEntity> {\n constructor(\n public readonly name: string,\n public readonly slotType = ModifierSlotType.Normal,\n args?: Partial<ModifierBase<TNode, TEntity>>) {\n if (args) Object.assign(this, args);\n }\n\n metadata: ModifierMetadata = {};\n\n /**\n * Common values: heading, emphasis, keyword, highlight, commentary, comment, link, quote, pre\n */\n roleHint?: string;\n /**\n * If true, any modifier encountered inside it will *not* be expanded *during parse-content*,\n * *unless* that modifier is `alwaysTryExpand`. In the vast majority of cases, you shouldn't\n * be using this.\n */\n delayContentExpansion = false;\n /**\n * If true, such a modifier will always be expanded whenever it is encountered, *even if*\n * it is contained in a modifier with `delayContentExpansion`. In the vast majority of cases,\n * you shouldn't be using this.\n */\n alwaysTryExpand = false;\n\n /** Called before the modifier's content is parsed.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n beforeParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called after the modifier's content is parsed.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n afterParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n /** Called before reparsing of the expansion.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.*/\n beforeProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called before reparsing of the expansion.\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.*/\n afterProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n /**\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n prepareExpand?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /**\n * @param immediate False when the node is inside a `delayContentExpansion` modifier, but it is `alwaysTryExpand`; otherwise true.\n */\n expand?: (node: TNode, cxt: ParseContext, immediate: boolean) => TEntity[] | undefined;\n}\n\nexport class BlockModifierDefinition<TState>\n extends ModifierBase<BlockModifierNode<TState>, BlockEntity> {\n}\n\nexport class InlineModifierDefinition<TState>\n extends ModifierBase<InlineModifierNode<TState>, InlineEntity> {\n}\n\nexport class SystemModifierDefinition<TState>\n extends ModifierBase<SystemModifierNode<TState>, never> {\n}\n\nexport class ArgumentInterpolatorDefinition {\n constructor(\n public readonly name: string,\n public readonly postfix: string,\n args?: Partial<ArgumentInterpolatorDefinition>) {\n if (args) Object.assign(this, args);\n }\n\n alwaysTryExpand = false;\n expand?: (content: string, cxt: ParseContext, immediate: boolean) => string | undefined;\n}\n","import { ParseContext } from \"./parser-config\";\nimport { Source, SourceDescriptor, StringSource } from \"./source\";\nimport { assert } from \"./util\";\n\nexport type Inspector = {\n position: number,\n callback: (cxt: ParseContext, pos: number) => void\n};\n\nexport class SimpleScanner implements Scanner {\n public readonly source: Source;\n #pos = 0;\n #inspectors: Inspector[];\n\n constructor(\n private src: string,\n sourceDesc: SourceDescriptor = {name: '<input>'},\n inspectors: Inspector[] = []\n ) {\n this.source = new StringSource(sourceDesc, src);\n this.#inspectors = inspectors.toSorted((a, b) => a.position - b.position);\n }\n\n position(): number {\n return this.#pos;\n }\n\n isEOF(): boolean {\n return this.#pos >= this.src.length;\n }\n\n inspectors(): Inspector[] {\n let result: Inspector[] = [];\n while (this.#inspectors.length > 0 && this.#inspectors[0].position <= this.#pos)\n result.push(this.#inspectors.shift()!);\n return result;\n }\n\n peek(str: string): boolean {\n assert(str !== '');\n let next = this.#pos + str.length;\n if (next > this.src.length) return false;\n return this.src.slice(this.#pos, this.#pos + str.length) == str;\n }\n\n acceptChar(): string {\n if (this.isEOF()) throw new RangeError('EOF');\n let char = this.src[this.#pos];\n this.#pos++;\n return char;\n }\n\n accept(str: string): boolean {\n if (!this.peek(str)) return false;\n this.#pos += str.length;\n return true;\n }\n\n acceptWhitespaceChar(): string | null {\n if (this.isEOF()) return null;\n let char = this.src[this.#pos];\n if (!' \\t'.includes(char)) return null;\n this.#pos++;\n return char;\n }\n}\n\n// The scanner of any implementation should be capable of handling UTF-8 \n// strings at least as well as Typescript.\nexport interface Scanner {\n readonly source: Source;\n\n position(): number;\n isEOF(): boolean;\n\n /** Sources can have inspectors in them, which are positions that trigger a callback when encounterede. This function returns the inspectors that lie between the current position and where this function was previously called (or the beginning for the first call). */\n inspectors(): Inspector[];\n\n /** return true if sees str immediately */\n peek(str: string): boolean;\n\n /** if sees str immediately, consumes it and returns true */\n accept(str: string): boolean;\n\n /** consumes a character and returns it; throws at EOF */\n acceptChar(): string;\n\n /** newlines are NOT whitespaces */\n acceptWhitespaceChar(): string | null;\n}\n","import { debug } from \"./debug\";\nimport { ArgumentEntity, NodeType, ModifierArgument, Message, MessageSeverity, BlockEntity, InlineEntity, LocationRange } from \"./interface\";\nimport { BlockShorthand, InlineShorthand } from \"./parser-config\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"./modifier\";\nimport { Document } from \"./parser-config\";\n\nexport const debugPrint = {\n blockModifier: (x: BlockModifierDefinition<any>) =>\n `[.${x.name}] (${ModifierSlotType[x.slotType]})`,\n\n inlineModifier: (x: InlineModifierDefinition<any>) =>\n `[/${x.name}] (${ModifierSlotType[x.slotType]})`,\n\n inlineShorthand: (x: InlineShorthand<any>) =>\n x.name + x.parts.map((x, i) => ` .. <arg${i}> .. ${x}`).join('')\n + (x.mod.slotType == ModifierSlotType.None\n ? '' : ` .. <slot> .. ${x.postfix ?? '<no postfix>'}`),\n\n blockShorthand: (x: BlockShorthand<any>) =>\n x.name + x.parts.map((x, i) => ` .. <arg${i}> .. ${x}`).join('')\n + (x.mod.slotType == ModifierSlotType.None\n ? '' : ` .. <slot> .. ${x.postfix ?? '<no postfix>'}`),\n\n argument: (arg: ModifierArgument) =>\n arg.content.map(debugPrintArgEntity).join(''),\n\n node: (...nodes: (BlockEntity | InlineEntity)[]) =>\n nodes.map((x) => debugPrintNode(x)).join('\\n'),\n\n message: debugPrintMsg,\n range: debugPrintRange,\n document: debugDumpDocument\n}\n\nfunction debugPrintArgEntity(node: ArgumentEntity): string {\n switch (node.type) {\n case NodeType.Text:\n return node.content;\n case NodeType.Escaped:\n return `<Escaped:${node.content}>`;\n case NodeType.Interpolation:\n return `<Interp:${node.definition.name}-${node.definition.postfix}:${debugPrint.argument(node.argument)}${node.expansion ? `=${node.expansion}` : ''}>`;\n default:\n return debug.never(node);\n }\n}\n\nfunction debugPrintNode(node: BlockEntity | InlineEntity, prefix = '') {\n function debugPrintNodes(content: (BlockEntity | InlineEntity)[], prefix: string = '') {\n let dumps = content.map((x) => debugPrintNode(x, prefix + ' ')).filter((x) => x.length > 0);\n if (dumps.length == 0) return '';\n return dumps.map((x) => `${prefix} ${x}`).join('\\n');\n }\n let result = `<${NodeType[node.type]}@${node.location.start}`;\n switch (node.type) {\n case NodeType.Group:\n case NodeType.Paragraph:\n const content = debugPrintNodes(node.content, prefix);\n if (content.length > 0)\n result += `>\\n${content}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n else result += `-${node.location.end} />`;\n break;\n case NodeType.Escaped:\n result += `>\\n${prefix} ${node.content}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n break;\n case NodeType.Preformatted:\n result += `>\\n${prefix} ${node.content.text}\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n break;\n case NodeType.InlineModifier:\n case NodeType.BlockModifier:\n case NodeType.SystemModifier:\n const posargs = node.arguments.positional.map((x, i) =>\n `\\n${prefix} (${i})@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n const namedargs = [...node.arguments.named].map(([name, x], i) =>\n `\\n${prefix} <${name}>@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n if (node.content.length > 0) {\n result += ` id=${node.mod.name}${posargs}${namedargs}>\\n` + debugPrintNodes(node.content, prefix) + `\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n } else result += `-${node.location.end} id=${node.mod.name}${posargs}${namedargs} />`;\n if (node.expansion) {\n const content = debugPrintNodes(node.expansion, prefix);\n if (content.length > 0)\n result += `\\n${prefix}<expansion>\\n${content}\\n${prefix}</expansion>`;\n else if (node.type != NodeType.SystemModifier)\n result += `\\n${prefix}<expansion />`;\n }\n break;\n case NodeType.Text:\n return node.content;\n default:\n return debug.never(node);\n }\n return result;\n}\n\nfunction debugPrintRange(loc: LocationRange, context = 1) {\n const isSingleCharacter = loc.start == loc.end;\n let [sr, sc] = loc.source.getRowCol(loc.start);\n let [er, ec] = loc.source.getRowCol(loc.actualEnd ?? loc.end);\n const rowWidth = Math.max((sr+1).toString().length, (er+1).toString().length);\n\n const startLine = Math.max(0, sr - context);\n const endLine = Math.min(loc.source.nLines - 1, er + context);\n let lines: string[] = [];\n for (let i = startLine; i <= endLine; i++) {\n const line = loc.source.getRow(i)!;\n lines.push((i+1).toString().padStart(rowWidth) + ' | ' + line);\n if (i >= sr && i <= er) {\n const startPos = i == sr ? sc : 0;\n const endPos = i == er ? ec : line.length;\n lines.push(\n ' '.repeat(rowWidth) + ' | '\n + ' '.repeat(startPos)\n + (isSingleCharacter ? '^' : '~'.repeat(endPos - startPos + 1)));\n }\n }\n return lines.join('\\n');\n}\n\nfunction debugPrintMsg(m: Message) {\n const poss = (loc: LocationRange) => {\n const [r1, c1] = loc.source.getRowCol(loc.start);\n if (loc.start == loc.end) return `l${r1+1}c${c1+1}`;\n const [r2, c2] = loc.source.getRowCol(loc.end);\n return `l${r1+1}c${c1+1}-l${r2+1}c${c2+1}`;\n }\n let loc: LocationRange | undefined = m.location;\n let result = `at ${poss(loc)}: ${MessageSeverity[m.severity]}[${m.code}]: ${m.info}`;\n while (loc = loc.original) {\n let d = loc.source !== m.location.source ? `(in ${loc.source.name}) ` : '';\n result += `\\n---> original at: ${d}${poss(loc)}`;\n }\n return result;\n}\n\nfunction debugDumpDocument(doc: Document): string {\n let root = debugPrint.node(...doc.root.content);\n let msgs = doc.messages.map((x) =>\n debugPrintRange(x.location) + '\\n' + debugPrintMsg(x)).join('\\n');\n if (msgs.length > 0) msgs += '\\n';\n return `Document: ${doc.root.source.name}\\n${msgs}${root}`;\n}\n","import { Message, MessageSeverity, LocationRange } from \"./interface\";\nimport { assert } from \"./util\";\n\nclass AddThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly location: LocationRange, \n public readonly info: string){}\n // get fixes(): readonly FixSuggestion[] {\n // let [start, what, fixstr] = [this.location.start, this.what, this.fixstr];\n // return [{\n // get info() { return fixstr; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < start) \n // ? cursor \n // : cursor + what.length;\n // return [src.substring(0, start) + what + src.substring(start), newCursor];\n // }\n // }];\n // }\n}\n\nclass RemoveThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly location: LocationRange, \n // private fixstr: string,\n public readonly info: string){}\n // get fixes(): readonly FixSuggestion[] {\n // let [start, end, fixstr] = [this.start, this.end, this.fixstr];\n // return [{\n // get info() { return fixstr; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < end && cursor >= start) \n // ? start \n // : cursor; // Removing text, cursor shouldn't shift if it's outside the removed range\n // return [src.substring(0, start) + src.substring(end), newCursor];\n // }\n // }];\n // }\n}\n\nexport class ExpectedMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string)\n {\n assert(location.end == location.start);\n }\n readonly code = 1;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `expected '${this.what}'` }\n}\n\nexport class UnknownModifierMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string) {}\n readonly code = 2;\n readonly severity = MessageSeverity.Error;\n get info() { return `unknown modifier '${this.what}'`; };\n // get fixes(): readonly FixSuggestion[] {\n // let [start, end] = [this.start, this.end];\n // return [{\n // get info() { return 'this is not a modifier -- escape it'; },\n // apply(src: string, cursor: number) {\n // let newCursor = (cursor < start) \n // ? cursor \n // : cursor + 1;\n // return [src.substring(0, start) + '\\\\' + src.substring(start), newCursor];\n // }\n // }];\n // }\n}\n\nexport class UnclosedInlineModifierMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what: string)\n {\n assert(location.end == location.start);\n }\n readonly code = 3;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `unclosed inline modifier ${this.what}'` }\n}\n\nexport class ArgumentCountMismatchMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n min?: number, max?: number)\n {\n if (min !== undefined) {\n if (max == min) this.msg = `: ${min} expected`;\n else if (max !== undefined) this.msg = `: ${min} to ${max} expected`;\n else this.msg = `: at least ${min} expected`;\n } else {\n if (max !== undefined) this.msg = `: at most ${max} expected`;\n }\n }\n private msg = '';\n readonly code = 4;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `argument count mismatch` + this.msg; }\n}\n\nexport class CannotExpandArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what?: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `failed to expand argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class InvalidArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private what?: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `invalid argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class EntityNotAllowedMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what?: string) {}\n readonly code = 7;\n readonly severity = MessageSeverity.Error;\n get info(): string { return 'This entity is not allowed here' + \n (this.what ? `: ${this.what}` : '') }\n}\n\nexport class ReachedRecursionLimitMessage implements Message {\n constructor(\n public readonly location: LocationRange, \n private limit: number,\n private what: string) {}\n readonly code = 8;\n readonly severity = MessageSeverity.Error;\n get info(): string { \n return `Reached recursion limit ${this.limit} when expanding ${this.what}`\n };\n}\n\nexport class SlotUsedOutsideDefinitionMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 9;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `slot used outside a definition` }\n}\n\nexport class NoNestedModuleMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 10;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `nested module definitions not allowed` }\n}\n\nexport class CannotUseModuleInSelfMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 11;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `cannot use the same module inside its definition` }\n}\n\nexport class EitherNormalOrPreMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 12;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `a definition cannot be at once normal and preformatted` }\n}\n\nexport class MultipleBlocksNotPermittedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 13;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `multiple blocks are not permitted here` }\n}\n\nexport class OnlySimpleParagraphsPermittedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 14;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `only simple paragraphs are permitted here` }\n}\n\nexport class ContentExpectedMessage implements Message {\n constructor(\n public readonly location: LocationRange) {}\n readonly code = 15;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `content expected` }\n}\n\nexport class InternalErrorMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n public readonly error: any) {}\n readonly code = 16;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `an internal error occurred when parsing: ${this.error}` }\n}\n\nexport class DuplicateNamedArgumentMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n public readonly name: string) {}\n readonly code = 17;\n readonly severity = MessageSeverity.Error;\n get info(): string { return `an argument has already been defined with the same name \"${this.name}\"` }\n}\n\n// warnings\n\nexport class UnnecessaryNewlineMessage extends RemoveThingMessage {\n constructor(location: LocationRange) {\n super(1, MessageSeverity.Warning, location, \n 'more than one newlines have the same effect as one');\n }\n}\n\nexport class NewBlockShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(location: LocationRange) {\n super(2, MessageSeverity.Warning, location, \n 'a new block should begin in a new line to avoid confusion');\n }\n}\n\nexport class ShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(location: LocationRange) {\n super(3, MessageSeverity.Warning, location, \n 'the following should begin in a new line to avoid confusion');\n }\n}\n\nexport class NameAlreadyDefinedMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 4;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `name is already defined, will overwrite: ${this.what}` }\n}\n\nexport class UndefinedVariableMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `variable is undefined, will expand to empty string: ${this.what}` }\n}\n\nexport class OverwriteDefinitionsMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private what: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `using this module will overwrite: ${this.what}` }\n}\n\nexport class OverwriteSpecialVariableMessage implements Message {\n constructor(\n public readonly location: LocationRange,\n private varname: string,\n private previous: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Warning;\n get info(): string { return `${this.varname} is already defined (as \"${this.previous}\"), will be overwritten` }\n}","import { debug } from \"./debug\";\nimport { LocationRange, ModifierArgument, NodeType, DocumentNode } from \"./interface\";\n\n\nexport type CloneNodeOptions = {\n newLocation?: LocationRange;\n withState?: boolean;\n};\nconst cloneArgument = (arg: ModifierArgument, options: CloneNodeOptions): ModifierArgument => ({\n location: cloneLocation(arg.location, options),\n content: arg.content.map((ent) => {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n return cloneNode(ent, options);\n case NodeType.Interpolation:\n return {\n type: ent.type,\n location: cloneLocation(arg.location, options),\n definition: ent.definition,\n argument: cloneArgument(ent.argument, options),\n expansion: ent.expansion\n };\n default:\n return debug.never(ent);\n }\n })\n});\nfunction cloneLocation(pos: LocationRange, options: CloneNodeOptions): LocationRange {\n let base = options.newLocation ?? pos;\n return {\n start: base.start,\n end: base.end,\n actualEnd: base.actualEnd,\n original: options.newLocation ? pos : pos.original,\n source: base.source\n };\n}\n\nexport function cloneNode<T extends DocumentNode>(\n node: T, options: CloneNodeOptions = {}\n): T {\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n location: cloneLocation(node.location, options),\n type: node.type,\n mod: node.mod,\n state: options.withState ? node.state : undefined,\n head: cloneLocation(node.head, options), // TODO: options or {}?\n arguments: {\n positional: node.arguments.positional.map((x) => cloneArgument(x, options)),\n named: new Map([...node.arguments.named].map(\n ([x, y]) => [x, cloneArgument(y, options)])),\n },\n content: node.content.map((x) => cloneNode(x, options)),\n expansion: node.expansion ? cloneNodes(node.expansion, options) : undefined\n } as T;\n case NodeType.Root:\n return {\n type: node.type,\n source: node.source,\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Group:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Paragraph:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content.map((x) => cloneNode(x, options))\n } as T;\n case NodeType.Preformatted:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: { ...node.content }\n } as T;\n case NodeType.Text:\n case NodeType.Escaped:\n return {\n type: node.type,\n location: cloneLocation(node.location, options),\n content: node.content\n } as T;\n default:\n return debug.never(node);\n }\n}\n\nexport function cloneNodes<T extends readonly DocumentNode[]>(\n nodes: T, options: CloneNodeOptions = {}\n): T {\n return nodes.map((x) => cloneNode(x, options)) as unknown as T;\n}\n/** Warning: modifies the original nodes */\n\nexport function stripNode(...nodes: DocumentNode[]): DocumentNode[] {\n return nodes.flatMap((node) => {\n switch (node.type) {\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return [node];\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n if (node.expansion !== undefined)\n return node.expansion.flatMap((x) => stripNode(x));\n // else fallthrough!\n case NodeType.Root:\n case NodeType.Group:\n case NodeType.Paragraph:\n node.content = node.content.flatMap((x) => stripNode(x)) as any;\n return [node];\n case NodeType.SystemModifier:\n return [];\n default:\n return debug.never(node);\n }\n });\n}\n","import { RootNode, Message, BlockEntity, InlineEntity, ArgumentEntity } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, SystemModifierDefinition, ArgumentInterpolatorDefinition } from \"./modifier\";\nimport { ModuleDefinition } from \"./module\";\nimport { Parser } from \"./parser\";\nimport { Scanner } from \"./scanner\";\nimport { assert, ReadonlyNameManager, NameManager } from \"./util\";\nimport { cloneNode, stripNode } from \"./node-util\";\n\nexport interface ParseContextStoreDefinitions { }\nexport type ParseContextStoreKey = keyof ParseContextStoreDefinitions;\ntype ParseContextStoreEntry<S extends ParseContextStoreKey> = ParseContextStoreDefinitions[S];\n\nexport class ParseContext {\n private data: ParseContextStoreDefinitions = {};\n public usedModules = new Set<string>();\n\n constructor(\n public readonly config: Configuration,\n public variables = new Map<string, string>()\n ) {\n config.initializers.forEach((x) => x(this));\n }\n\n init<S extends ParseContextStoreKey>(key: S, obj: ParseContextStoreEntry<S>) {\n assert(!(key in this.data));\n this.data[key] = obj;\n }\n\n set<S extends ParseContextStoreKey>(key: S, obj: ParseContextStoreEntry<S>) {\n assert(key in this.data);\n this.data[key] = obj;\n }\n\n get<S extends ParseContextStoreKey>(key: S): ParseContextStoreEntry<S> {\n assert(key in this.data);\n return this.data[key];\n }\n\n parse(scanner: Scanner) {\n return new Parser(scanner, this).parse();\n }\n}\n\nexport class Document {\n constructor(\n public readonly root: RootNode,\n public readonly context: ParseContext,\n public readonly messages: readonly Message[]) { };\n\n toStripped() {\n let doc = new Document(\n stripNode(cloneNode(this.root, {withState: true}))[0] as RootNode,\n this.context, this.messages);\n return doc;\n }\n\n /**\n * Performs a depth-first walk of the node tree.\n */\n walk(\n callback: (node: BlockEntity | InlineEntity | ArgumentEntity) =>\n 'skip' | 'break' | 'continue'\n ) {\n let nodes: (BlockEntity | InlineEntity | ArgumentEntity)[] = this.root.content;\n let node;\n while (node = nodes.shift()) {\n const result = callback(node);\n if (result == 'break') break;\n if (result == 'skip') continue;\n\n if ('arguments' in node) {\n nodes.push(...node.arguments.positional.flatMap((x) => x.content));\n nodes.push(...[...node.arguments.named].flatMap(([_name, x]) => x.content));\n }\n if ('content' in node && Array.isArray(node.content))\n nodes.push(...node.content);\n }\n }\n\n /**\n * Gets all nodes that covers the given position, from outermost to innermost (essentially a path).\n */\n resolvePosition(pos: number): (BlockEntity | InlineEntity | ArgumentEntity)[] {\n const result: (BlockEntity | InlineEntity | ArgumentEntity)[] = [];\n this.walk((node) => {\n if (node.location.start <= pos\n && (node.location.actualEnd ?? node.location.end) >= pos)\n {\n result.push(node);\n return 'continue';\n }\n return 'skip';\n });\n return result;\n }\n}\n\ntype Shorthand<TMod> = {\n name: string;\n parts: readonly string[];\n postfix: string | undefined;\n mod: TMod;\n};\n\nexport type BlockShorthand<TState> = Shorthand<BlockModifierDefinition<TState>>;\nexport type InlineShorthand<TState> = Shorthand<InlineModifierDefinition<TState>>;\n\nexport type KernelConfiguration = {\n collapseWhitespaces: boolean;\n reparseDepthLimit: number;\n};\n\nexport interface ReadonlyConfiguration {\n readonly initializers: readonly ((cxt: ParseContext) => void)[];\n readonly modules: ReadonlyMap<string, ModuleDefinition>;\n readonly blockModifiers: ReadonlyNameManager<BlockModifierDefinition<any>>;\n readonly inlineModifiers: ReadonlyNameManager<InlineModifierDefinition<any>>;\n readonly systemModifiers: ReadonlyNameManager<SystemModifierDefinition<any>>;\n readonly argumentInterpolators: ReadonlyNameManager<ArgumentInterpolatorDefinition>;\n\n readonly blockShorthands: ReadonlyNameManager<BlockShorthand<any>>;\n readonly inlineShorthands: ReadonlyNameManager<InlineShorthand<any>>;\n readonly kernel: Readonly<KernelConfiguration>;\n}\n\nexport class Configuration implements ReadonlyConfiguration {\n initializers: ((cxt: ParseContext) => void)[] = [];\n modules = new Map<string, ModuleDefinition>();\n\n blockModifiers = new NameManager<BlockModifierDefinition<any>>;\n inlineModifiers = new NameManager<InlineModifierDefinition<any>>;\n systemModifiers = new NameManager<SystemModifierDefinition<any>>;\n argumentInterpolators = new NameManager<ArgumentInterpolatorDefinition>;\n\n blockShorthands = new NameManager<BlockShorthand<any>>;\n inlineShorthands = new NameManager<InlineShorthand<any>>;\n\n kernel: KernelConfiguration = {\n collapseWhitespaces: false,\n reparseDepthLimit: 10\n };\n\n static from(from: ReadonlyConfiguration) {\n let config = new Configuration();\n config.initializers = [...from.initializers];\n config.kernel = structuredClone(from.kernel);\n\n config.blockModifiers = new NameManager(from.blockModifiers);\n config.inlineModifiers = new NameManager(from.inlineModifiers);\n config.systemModifiers = new NameManager(from.systemModifiers);\n config.argumentInterpolators = new NameManager(from.argumentInterpolators);\n config.blockShorthands = new NameManager(from.blockShorthands);\n config.inlineShorthands = new NameManager(from.inlineShorthands);\n return config;\n }\n}\n","import { debug } from \"./debug\";\nimport { debugPrint } from \"./debug-print\";\nimport { BlockEntity, BlockModifierNode, EscapedNode, InlineEntity, InlineModifierNode, Message, ModifierArgument, ParagraphNode, LocationRange, PreNode, RootNode, ArgumentEntity, ModifierNode, SystemModifierNode, NodeType, ModifierArguments, GroupNode } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType, SystemModifierDefinition } from \"./modifier\";\nimport { ShouldBeOnNewlineMessage, ExpectedMessage, ReachedRecursionLimitMessage, UnknownModifierMessage, UnnecessaryNewlineMessage, InternalErrorMessage, DuplicateNamedArgumentMessage } from \"./messages\";\nimport { ParseContext, Document } from \"./parser-config\";\nimport { Scanner } from \"./scanner\";\nimport { _Def, _Node, _Shorthand } from \"./typing-helper\";\nimport { assert, NameManager } from \"./util\";\n\nconst ESCAPE_CHAR = '\\\\';\n\nconst GROUP_BEGIN = '<<<';\nconst GROUP_END = '>>>';\n\nconst MODIFIER_BLOCK_OPEN = '[.';\nconst MODIFIER_INLINE_OPEN = '[/';\nconst MODIFIER_SYSTEM_OPEN = '[-';\nconst MODIFIER_CLOSE_SIGN = ']';\nconst MODIFIER_END_SIGN = ';';\nconst MODIFIER_INLINE_END_TAG = '[;]';\nconst MODIFIER_ARGUMENT_SEPARATOR = '|';\n\nconst UnknownModifier = {\n [NodeType.BlockModifier]: new BlockModifierDefinition('UNKNOWN', ModifierSlotType.Normal),\n [NodeType.InlineModifier]: new InlineModifierDefinition('UNKNOWN', ModifierSlotType.Normal),\n [NodeType.SystemModifier]: new SystemModifierDefinition('UNKNOWN', ModifierSlotType.Normal)\n};\n\ntype NodeWithBlockContent =\n GroupNode | BlockModifierNode<unknown> | SystemModifierNode<unknown>;\ntype NodeWithInlineContent =\n InlineModifierNode<unknown> | ParagraphNode;\n\nclass EmitEnvironment {\n public root: RootNode;\n public messages: Message[] = [];\n private blockStack: NodeWithBlockContent[] = [];\n private inlineStack: NodeWithInlineContent[] = [];\n\n constructor(private scanner: Scanner) {\n this.root = {type: NodeType.Root, source: scanner.source, content: []};\n }\n\n message(...m: Message[]) {\n for (let msg of m) {\n this.messages.push(msg);\n debug.trace('issued msg', msg.code, msg.info);\n }\n }\n\n addBlockNode(n: BlockEntity) {\n (this.blockStack.at(-1) ?? this.root).content.push(n);\n return n;\n }\n\n addInlineNode(n: InlineEntity) {\n assert(this.inlineStack.length > 0);\n this.inlineStack.at(-1)!.content.push(n);\n return n;\n }\n\n addString(str: string) {\n assert(this.inlineStack.length > 0);\n const content = this.inlineStack.at(-1)!.content;\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += str;\n last.location.end = this.scanner.position();\n } else content.push({\n type: NodeType.Text,\n location: {\n source: this.scanner.source,\n start: this.scanner.position() - str.length,\n end: this.scanner.position(),\n },\n content: str\n });\n }\n\n startBlock(block: NodeWithBlockContent) {\n this.addBlockNode(block);\n this.blockStack.push(block);\n }\n\n endBlock() {\n assert(this.blockStack.length > 0);\n const node = this.blockStack.pop()!;\n node.location.end = this.scanner.position();\n }\n\n startInline(n: InlineModifierNode<unknown> | ParagraphNode) {\n if (n.type == NodeType.Paragraph) this.addBlockNode(n);\n else this.addInlineNode(n);\n this.inlineStack.push(n);\n }\n\n endInline() {\n assert(this.inlineStack.length > 0);\n const node = this.inlineStack.pop()!;\n node.location.end = this.scanner.position();\n }\n}\n\nexport class Parser {\n private emit: EmitEnvironment;\n private delayDepth = 0;\n\n constructor(\n private scanner: Scanner,\n private cxt: ParseContext\n ) {\n this.emit = new EmitEnvironment(scanner);\n }\n\n #loc(to?: number): LocationRange {\n return {\n source: this.scanner.source,\n start: this.scanner.position(),\n end: to ?? this.scanner.position()\n };\n }\n\n #locFrom(from: number, to?: number): LocationRange {\n return {\n source: this.scanner.source,\n start: from,\n end: to ?? this.scanner.position()\n };\n }\n\n /* istanbul ignore next -- @preserve */\n #defs<\n Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier\n >(type: Type): NameManager<_Def<Type, any>> {\n switch (type) {\n case NodeType.SystemModifier: return this.cxt.config.systemModifiers as any;\n case NodeType.InlineModifier: return this.cxt.config.inlineModifiers as any;\n case NodeType.BlockModifier: return this.cxt.config.blockModifiers as any;\n default: return debug.never(type);\n }\n }\n\n #reparse(nodes: (BlockEntity | InlineEntity)[], depth: number): boolean {\n if (depth > this.cxt.config.kernel.reparseDepthLimit)\n return false;\n let ok = true;\n for (const node of nodes) {\n switch (node.type) {\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n continue;\n case NodeType.Group:\n case NodeType.Paragraph:\n ok = this.#reparse(node.content, depth + 1) && ok;\n continue;\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n ok = this.#expand(node, depth + 1) && ok;\n continue;\n default:\n debug.never(node);\n }\n }\n return ok;\n }\n\n #expandArgument(arg: ModifierArgument) {\n if (arg.expansion !== undefined)\n return arg.expansion;\n let result = '';\n const immediate = this.delayDepth == 0;\n for (const e of arg.content) {\n switch (e.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n result += e.content;\n break;\n case NodeType.Interpolation:\n if (e.expansion === undefined) {\n const inner = this.#expandArgument(e.argument);\n if (inner === undefined\n || e.definition.expand === undefined\n || (!immediate && !e.definition.alwaysTryExpand))\n return undefined;\n e.expansion = e.definition.expand(inner, this.cxt, immediate);\n if (e.expansion === undefined)\n return undefined;\n }\n result += e.expansion;\n break;\n default:\n debug.never(e);\n }\n }\n // debug.trace('expanded arg:', result);\n arg.expansion = result;\n return result;\n }\n\n #expandArguments(node: ModifierNode) {\n for (const arg of node.arguments.positional)\n this.#expandArgument(arg);\n\n for (const [_name, arg] of node.arguments.named)\n this.#expandArgument(arg);\n }\n\n #tryAndMessage<Params extends any[]>(\n node: ModifierNode,\n fn: ((...p: Params) => Message[]) | undefined, ...p: Params\n ) {\n if (!fn) return;\n\n try {\n this.emit.message(...fn.call(node.mod, ...p));\n } catch (e) {\n this.emit.message(new InternalErrorMessage(node.location, e));\n }\n }\n\n #try<Params extends any[], R>(\n node: ModifierNode,\n fn: ((...p: Params) => R) | undefined, ...p: Params\n ) {\n if (!fn) return;\n\n try {\n return fn.call(node.mod, ...p);\n } catch (e) {\n this.emit.message(new InternalErrorMessage(node.location, e));\n return undefined;\n }\n }\n\n #expand(node: ModifierNode, depth = 0) {\n if (node.expansion !== undefined) {\n debug.trace('already expanded, skipping:', node.mod.name);\n return true;\n }\n\n if (depth > 0) {\n this.#expandArguments(node);\n }\n\n if (this.delayDepth > 0 && !node.mod.alwaysTryExpand) {\n debug.trace('delaying expansion of', node.mod.name);\n return true;\n }\n\n const immediate = this.delayDepth == 0;\n if (depth > 0) {\n // simulate initial parse for generated content\n this.#tryAndMessage(node, node.mod.beforeParseContent, node as never, this.cxt, immediate);\n\n if (node.content.length > 0) {\n if (node.mod.delayContentExpansion) this.delayDepth++;\n this.#reparse(node.content, depth);\n if (node.mod.delayContentExpansion) this.delayDepth--;\n }\n\n this.#tryAndMessage(node, node.mod.afterParseContent, node as never, this.cxt, immediate);\n }\n\n this.#tryAndMessage(node, node.mod.prepareExpand, node as never, this.cxt, immediate);\n if (node.mod.expand) {\n node.expansion = this.#try(node,\n node.mod.expand as never, node as never, this.cxt, immediate);\n\n if (!node.expansion)\n return true;\n\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n if (node.expansion.length > 0)\n debug.trace(() => '-->\\n' + debugPrint.node(...node.expansion!));\n }\n\n this.#tryAndMessage(node, node.mod.beforeProcessExpansion, node as never, this.cxt, immediate);\n\n const expansion = node.expansion;\n if (!expansion || expansion.length == 0) return true;\n debug.trace('reparsing expansion of:', node.mod.name);\n let ok = this.#reparse(expansion, depth);\n debug.trace('done reparsing expansion of:', node.mod.name);\n\n this.#tryAndMessage(node, node.mod.afterProcessExpansion, node as never, this.cxt, immediate);\n\n if (!ok && depth == 0) {\n const limit = this.cxt.config.kernel.reparseDepthLimit;\n this.emit.message(\n new ReachedRecursionLimitMessage(node.location, limit, node.mod.name));\n }\n return ok;\n }\n\n parse() {\n this.DOCUMENT();\n return new Document(this.emit.root, this.cxt, this.emit.messages);\n }\n\n private WHITESPACES() {\n while (this.scanner.acceptWhitespaceChar() !== null) {}\n }\n\n private WHITESPACES_OR_NEWLINES() {\n while (this.scanner.acceptWhitespaceChar() !== null\n || this.scanner.accept('\\n')) {}\n }\n\n private SHOULD_BE_A_NEWLINE() {\n this.WHITESPACES();\n if (!this.scanner.accept('\\n')) this.emit.message(\n new ShouldBeOnNewlineMessage(this.#loc()));\n }\n\n // TODO: this is awkward and doesn't emit messages in the most appropriate way\n private WARN_IF_MORE_NEWLINES_THAN(n: number) {\n let nlines = 0;\n const start = this.scanner.position();\n while (true) {\n if (this.scanner.accept('\\n')) {\n nlines++;\n continue;\n }\n if (this.scanner.acceptWhitespaceChar() == null) break;\n }\n const end = this.scanner.position();\n if (nlines > n) this.emit.message(\n new UnnecessaryNewlineMessage(this.#locFrom(start, end)));\n }\n\n private DOCUMENT() {\n this.WHITESPACES_OR_NEWLINES();\n while (!this.scanner.isEOF()) {\n this.BLOCK_ENTITY();\n this.WHITESPACES_OR_NEWLINES();\n }\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n }\n\n private BLOCK_ENTITY() {\n assert(!this.scanner.isEOF());\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)) {\n this.MODIFIER(NodeType.BlockModifier);\n return;\n }\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN)) {\n this.MODIFIER(NodeType.SystemModifier);\n return;\n }\n\n const short = this.cxt.config.blockShorthands.find((x) => this.scanner.accept(x.name));\n if (short) return this.SHORTHAND(NodeType.BlockModifier, short);\n\n // simple paragraph(s)\n this.MAYBE_GROUPED_PARAGRAPH();\n\n this.scanner.inspectors().forEach(\n (x) => x.callback(this.cxt, this.scanner.position()));\n }\n\n private MODIFIER\n <Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>\n (type: Type): boolean\n {\n const posStart = this.scanner.position();\n assert(this.scanner.accept({\n [NodeType.BlockModifier]: MODIFIER_BLOCK_OPEN,\n [NodeType.SystemModifier]: MODIFIER_SYSTEM_OPEN,\n [NodeType.InlineModifier]: MODIFIER_INLINE_OPEN\n }[type]));\n\n const result = this.#defs(type).find((x) => this.scanner.accept(x.name));\n const mod = result ?? UnknownModifier[type];\n if (result === undefined) {\n let name = '';\n while (!this.scanner.isEOF()\n && !this.scanner.acceptWhitespaceChar()\n && !this.scanner.peek(MODIFIER_CLOSE_SIGN)\n && !this.scanner.peek(MODIFIER_END_SIGN))\n {\n if (this.scanner.accept(ESCAPE_CHAR))\n if (this.scanner.isEOF()) break;\n name += this.scanner.acceptChar();\n }\n this.emit.message(\n new UnknownModifierMessage(this.#locFrom(posStart), name));\n }\n const args = this.ARGUMENTS();\n debug.trace(`PARSE ${NodeType[type]}:`, mod.name);\n\n const endsign = this.scanner.accept(MODIFIER_END_SIGN);\n const flagMarker = mod.slotType == ModifierSlotType.None;\n if (!this.scanner.accept(MODIFIER_CLOSE_SIGN))\n this.emit.message(\n new ExpectedMessage(this.#loc(), MODIFIER_CLOSE_SIGN));\n\n const headEnd = this.scanner.position();\n const node: ModifierNode = {\n type, mod: mod as any,\n head: this.#locFrom(posStart, headEnd),\n location: this.#locFrom(posStart, headEnd),\n arguments: args,\n content: [],\n expansion: undefined\n };\n\n const isMarker = flagMarker || endsign;\n return this.MODIFIER_BODY(type, node, MODIFIER_INLINE_END_TAG, isMarker);\n }\n\n // also handles \"grouped\" (delimited) pre-paragraphs\n private PRE_PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const posStart = this.scanner.position();\n const grouped = this.scanner.accept(GROUP_BEGIN);\n if (grouped) this.SHOULD_BE_A_NEWLINE();\n const posContentStart = this.scanner.position();\n let posContentEnd = this.scanner.position();\n let paragraphEnd: number | undefined = undefined;\n\n let string = '';\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept('\\n')) {\n let white = \"\\n\";\n let char: string | null;\n while ((char = this.scanner.acceptWhitespaceChar()) !== null)\n white += char;\n\n if (grouped && this.scanner.accept(GROUP_END)) {\n paragraphEnd = this.scanner.position();\n if (!this.scanner.isEOF()) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n break;\n }\n if (!grouped && this.scanner.accept('\\n')) {\n paragraphEnd = this.scanner.position() - 1;\n if (!this.scanner.isEOF())\n this.WARN_IF_MORE_NEWLINES_THAN(0);\n break;\n }\n\n if (this.scanner.isEOF()) {\n if (grouped) this.emit.message(\n new ExpectedMessage(this.#loc(), GROUP_END));\n break;\n }\n string += white;\n } else {\n string += this.scanner.acceptChar();\n }\n posContentEnd = this.scanner.position();\n }\n const node: PreNode = {\n type: NodeType.Preformatted,\n location: this.#locFrom(posStart, paragraphEnd ?? posContentEnd),\n content: {\n start: posContentStart,\n end: posContentEnd,\n text: string\n }\n };\n this.emit.addBlockNode(node);\n }\n\n private MAYBE_GROUPED_PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const posStart = this.scanner.position();\n if (this.scanner.accept(GROUP_BEGIN)) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n\n const group: GroupNode = {\n location: this.#locFrom(posStart),\n type: NodeType.Group,\n content: []\n };\n this.emit.startBlock(group);\n\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept(GROUP_END)) {\n this.emit.endBlock(); // group\n\n if (!this.scanner.isEOF()) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n return;\n }\n this.BLOCK_ENTITY();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n // EOF\n this.emit.message(\n new ExpectedMessage(this.#loc(), GROUP_END));\n } else {\n this.PARAGRAPH();\n }\n }\n\n #trimNode(node: ParagraphNode | ModifierNode) {\n if (node.content.length == 0) return;\n let first = node.content[0];\n let last = node.content.at(-1)!;\n if (first.type == NodeType.Text)\n first.content = first.content.trimStart();\n if (last.type == NodeType.Text)\n last.content = last.content.trimEnd();\n }\n\n private PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const node: ParagraphNode = {\n type: NodeType.Paragraph,\n location: this.#loc(),\n content: []\n };\n // debug.trace('PARSE para');\n this.emit.startInline(node);\n while (!this.scanner.isEOF() && this.INLINE_ENTITY()) {}\n this.emit.endInline();\n const last = node.content.at(-1);\n node.location.actualEnd = last?.location.actualEnd ?? last?.location.end;\n this.#trimNode(node);\n // debug.trace('PARSE para end');\n }\n\n // returns false if breaking out of paragraph\n private SHORTHAND\n <Type extends NodeType.BlockModifier | NodeType.InlineModifier>\n (type: Type, d: _Shorthand<Type>): boolean\n {\n const posStart = this.scanner.position();\n let args: ModifierArgument[] = [];\n for (const part of d.parts) {\n let [arg, ok] = this.ARGUMENT_CONTENT(part, ['\\n\\n']);\n if (!ok) {\n this.emit.message(new ExpectedMessage(this.#loc(), part));\n return false;\n }\n args.push(arg);\n }\n\n const headEnd = this.scanner.position();\n const node: ModifierNode = {\n type, mod: d.mod as any,\n head: this.#locFrom(posStart - d.name.length, headEnd),\n location: this.#locFrom(posStart - d.name.length, headEnd),\n arguments: {\n positional: args,\n named: new Map(),\n location: this.#locFrom(posStart, headEnd),\n },\n content: [],\n expansion: undefined\n };\n\n const isMarker = node.mod.slotType == ModifierSlotType.None;\n return this.MODIFIER_BODY(type, node, d.postfix, isMarker);\n }\n\n private MODIFIER_BODY\n <Type extends NodeType.BlockModifier | NodeType.InlineModifier | NodeType.SystemModifier>\n (type: Type, node: ModifierNode, postfix: string | undefined, isMarker: boolean)\n {\n this.#expandArguments(node);\n const immediate = this.delayDepth == 0;\n if (node.mod.beforeParseContent)\n this.emit.message(...node.mod.beforeParseContent(node as any, this.cxt, immediate));\n if (node.mod.delayContentExpansion) this.delayDepth++;\n\n let ok = true;\n if (isMarker) {\n if (!this.scanner.isEOF() && type == NodeType.BlockModifier) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n if (type === NodeType.InlineModifier) this.emit.addInlineNode(node as InlineEntity);\n else this.emit.addBlockNode(node as BlockEntity);\n } else if (type == NodeType.InlineModifier) {\n node = node as InlineModifierNode<unknown>;\n this.emit.startInline(node);\n const pre = node.mod.slotType == ModifierSlotType.Preformatted;\n const entity = pre\n ? this.PREFORMATTED_INLINE_ENTITY.bind(this)\n : this.INLINE_ENTITY.bind(this);\n while (true) {\n if (postfix && this.scanner.accept(postfix)) break;\n if (this.scanner.isEOF() || !(ok = entity())) {\n // TODO: use error 3\n if (postfix) this.emit.message(\n new ExpectedMessage(this.#loc(), postfix));\n break;\n }\n }\n this.emit.endInline();\n if (!pre && node.content.length > 0) {\n this.#trimNode(node)\n }\n } else /* block or system */ {\n this.emit.startBlock(node as any);\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n if (!this.scanner.isEOF()) {\n if (node.mod.slotType == ModifierSlotType.Preformatted)\n this.PRE_PARAGRAPH();\n else\n this.BLOCK_ENTITY();\n }\n this.emit.endBlock();\n }\n\n const last = node.content.at(-1);\n node.location.actualEnd = last?.location.actualEnd ?? last?.location.end;\n if (node.mod.delayContentExpansion) this.delayDepth--;\n if (node.mod.afterParseContent)\n this.emit.message(...node.mod.afterParseContent(node as any, this.cxt, immediate));\n this.#expand(node);\n return ok;\n }\n\n // returns false if breaking out of paragraph\n private INLINE_ENTITY(): boolean {\n assert(!this.scanner.isEOF());\n if (this.scanner.peek(MODIFIER_INLINE_OPEN))\n return this.MODIFIER(NodeType.InlineModifier);\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN))\n return false;\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)) {\n this.SHOULD_BE_A_NEWLINE();\n return false;\n }\n\n const short = this.cxt.config.inlineShorthands.find((x) => this.scanner.accept(x.name));\n if (short) return this.SHORTHAND(NodeType.InlineModifier, short);\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n if (this.scanner.isEOF()) {\n this.emit.addString(ESCAPE_CHAR);\n return true;\n }\n const start = this.scanner.position();\n const node: EscapedNode = {\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(start - 1)\n };\n this.emit.addInlineNode(node);\n return true;\n }\n if (this.cxt.config.kernel.collapseWhitespaces\n && this.scanner.acceptWhitespaceChar() !== null)\n {\n this.WHITESPACES();\n this.emit.addString(' ');\n return true;\n }\n return this.PREFORMATTED_INLINE_ENTITY();\n }\n\n // returns false if breaking out of paragraph\n private PREFORMATTED_INLINE_ENTITY(): boolean {\n assert(!this.scanner.isEOF());\n if (this.scanner.accept('\\n')) {\n // these whitespaces in a blank line have no effect\n this.WHITESPACES();\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)\n || this.scanner.peek(MODIFIER_SYSTEM_OPEN)\n || this.cxt.config.blockShorthands.find((x) => this.scanner.peek(x.name))\n || this.scanner.peek(GROUP_END)\n || this.scanner.isEOF()) return false;\n\n if (this.scanner.accept('\\n')) {\n this.WARN_IF_MORE_NEWLINES_THAN(0);\n return false;\n }\n this.emit.addString('\\n');\n return true;\n }\n // simple character\n this.emit.addString(this.scanner.acceptChar());\n return true;\n }\n\n // returns argument and isOk\n private ARGUMENT_CONTENT(\n end: string | undefined = undefined,\n close: string[] = [MODIFIER_END_SIGN, MODIFIER_CLOSE_SIGN]\n ): [ModifierArgument, boolean] {\n let ok = true;\n const content: ArgumentEntity[] = [];\n const posStart = this.scanner.position();\n let posEnd = this.scanner.position();\n\n const emitString = (s: string) => {\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += s;\n last.location.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text,\n location: this.#locFrom(end - s.length),\n content: s\n });\n }\n };\n\n while (true) {\n if (end && this.scanner.accept(end))\n break;\n if (end === undefined && this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR))\n break;\n if (close.find((x) => this.scanner.peek(x))\n || this.scanner.isEOF())\n {\n ok = false;\n break;\n }\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString(ESCAPE_CHAR);\n ok = false;\n break;\n }\n content.push({\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(posEnd - 1)\n } satisfies EscapedNode);\n continue;\n }\n\n const beforeInterp = this.scanner.position();\n const result = this.cxt.config.argumentInterpolators.find(\n (x) => this.scanner.accept(x.name));\n if (result !== undefined) {\n const [inner, ok2] = this.ARGUMENT_CONTENT(result.postfix);\n posEnd = this.scanner.position();\n content.push({\n type: NodeType.Interpolation,\n definition: result, argument: inner,\n location: this.#locFrom(beforeInterp)\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(this.#loc(), result.postfix));\n ok = false;\n break;\n }\n } else {\n emitString(this.scanner.acceptChar());\n posEnd = this.scanner.position();\n }\n }\n return [{\n location: this.#locFrom(posStart, posEnd),\n content\n }, ok];\n }\n\n // returns error message and isOk\n private POSSIBLY_NAMED_ARGUMENT(\n args: ModifierArguments\n ): [Message[] | undefined, boolean] {\n let ok = true;\n const close = [MODIFIER_END_SIGN, MODIFIER_CLOSE_SIGN];\n let content: ArgumentEntity[] = [];\n\n const posStart = this.scanner.position();\n let contentStart = posStart;\n let posEnd = this.scanner.position();\n\n let name: { type: 'possible' | 'ok', value: string } | undefined = {\n type: 'possible', value: ''\n };\n\n const emitString = (s: string) => {\n const last = content.at(-1);\n if (last?.type == NodeType.Text) {\n last.content += s;\n last.location.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text,\n location: this.#locFrom(end - s.length),\n content: s\n });\n }\n };\n\n while (true) {\n if (this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR))\n break;\n if (close.find((x) => this.scanner.peek(x))\n || this.scanner.isEOF())\n {\n ok = false;\n break;\n }\n\n if (this.scanner.accept(ESCAPE_CHAR)) {\n if (name?.type == 'possible') name = undefined;\n\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString(ESCAPE_CHAR);\n ok = false;\n break;\n }\n content.push({\n type: NodeType.Escaped,\n content: this.scanner.acceptChar(),\n location: this.#locFrom(posEnd - 1)\n } satisfies EscapedNode);\n continue;\n }\n\n const beforeInterp = this.scanner.position();\n const result = this.cxt.config.argumentInterpolators.find(\n (x) => this.scanner.accept(x.name));\n if (result !== undefined) {\n if (name?.type == 'possible') name = undefined;\n\n const [inner, ok2] = this.ARGUMENT_CONTENT(result.postfix);\n posEnd = this.scanner.position();\n content.push({\n type: NodeType.Interpolation,\n definition: result, argument: inner,\n location: this.#locFrom(beforeInterp)\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(this.#loc(), result.postfix));\n ok = false;\n break;\n }\n } else {\n const char = this.scanner.acceptChar();\n posEnd = this.scanner.position();\n\n if (name?.type == 'possible') {\n if (char == '=') {\n name.type = 'ok';\n content = [];\n contentStart = posEnd;\n continue; // consume '='\n }\n\n if (/[:/\\[\\s]/.test(char))\n name = undefined;\n else\n name.value += char;\n }\n emitString(char);\n }\n }\n const arg: ModifierArgument = {\n location: this.#locFrom(contentStart, posEnd),\n content\n };\n\n let msgs: Message[] | undefined;\n if (name?.type == 'ok') {\n if (args.named.has(name.value)) {\n msgs = [new DuplicateNamedArgumentMessage(\n this.#locFrom(posStart, contentStart - 1), name.value)];\n }\n args.named.set(name.value, arg);\n } else\n args.positional.push(arg);\n return [msgs, ok];\n }\n\n private ARGUMENTS(): ModifierArguments {\n // optionally accept separator before first argument\n const firstSeparator = this.scanner.accept(MODIFIER_ARGUMENT_SEPARATOR);\n // only eat whites if there isn't a first separator\n if (!firstSeparator) this.WHITESPACES_OR_NEWLINES();\n\n const args: ModifierArguments = {\n positional: [],\n named: new Map(),\n location: this.#loc()\n };\n\n if (this.scanner.peek(MODIFIER_CLOSE_SIGN)\n || this.scanner.peek(MODIFIER_END_SIGN)) return args;\n\n while (true) {\n const [msgs, ok] = this.POSSIBLY_NAMED_ARGUMENT(args);\n if (msgs) this.emit.message(...msgs);\n if (!ok) break;\n }\n\n args.location.end = this.scanner.position();\n return args;\n }\n}\n","import { debug } from \"./debug\";\nimport { BlockEntity, InlineEntity, NodeType, ParagraphNode, TextNode, PreNode, EscapedNode, BlockModifierNode, InlineModifierNode } from \"./interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition } from \"./modifier\";\nimport { Document } from \"./parser-config\";\n\nexport type RendererType<TState, TReturn, TDocument, TOptions = undefined> = {\n state: TState;\n return: TReturn;\n document: TDocument;\n options: TOptions;\n};\n\ntype AnyRendererType = RendererType<any, any, any, any>;\n\ntype getState<Type> = Type extends RendererType<infer T, any, any, any> ? T : never;\ntype getReturn<Type> = Type extends RendererType<any, infer T, any, any> ? T : never;\ntype getDocument<Type> = Type extends RendererType<any, any, infer T, any> ? T : never;\ntype getOptions<Type> = Type extends RendererType<any, any, any, infer T> ? T : never;\n\nexport type NodeRenderer<Type extends AnyRendererType, TNode> =\n (node: TNode, cxt: RenderContext<Type>) => getReturn<Type>;\n\nexport type NodeRendererDefinition<Type extends AnyRendererType, TNode, TDef> =\n [def: TDef, renderer: NodeRenderer<Type, TNode>];\n\nexport class RenderContext<Type extends AnyRendererType> {\n renderEntity(node: BlockEntity | InlineEntity): getReturn<Type>[] {\n switch (node.type) {\n case NodeType.Group:\n return node.content.flatMap((x) => this.renderEntity(x));\n\n case NodeType.Paragraph:\n if (!this.config.paragraphRenderer) return [];\n return this.config.paragraphRenderer(node, this);\n\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n if (!this.config.textRenderer) return [];\n return this.config.textRenderer(node, this);\n\n case NodeType.InlineModifier:\n let ir = this.config.inlineRenderers.get(node.mod);\n if (ir) return ir(node, this);\n if (!this.config.undefinedInlineRenderer) return [];\n return this.config.undefinedInlineRenderer(node, this);\n\n case NodeType.BlockModifier:\n let br = this.config.blockRenderers.get(node.mod);\n if (br) return br(node, this);\n if (!this.config.undefinedBlockRenderer) return [];\n return this.config.undefinedBlockRenderer(node, this);\n\n case NodeType.SystemModifier:\n return [];\n\n default:\n return debug.never(node);\n }\n }\n\n constructor(\n public readonly config: RenderConfiguration<Type>,\n public readonly parsedDocument: Document,\n public state: getState<Type>) { }\n}\n\nexport interface ReadonlyRenderConfiguration<Type extends AnyRendererType> {\n readonly options: getOptions<Type>;\n\n readonly paragraphRenderer?: NodeRenderer<Type, ParagraphNode>;\n readonly textRenderer?: NodeRenderer<Type, TextNode | PreNode | EscapedNode>;\n\n readonly undefinedBlockRenderer?: NodeRenderer<Type, BlockModifierNode<any>>;\n readonly undefinedInlineRenderer?: NodeRenderer<Type, InlineModifierNode<any>>;\n\n readonly blockRenderers: ReadonlyMap<\n BlockModifierDefinition<any>, NodeRenderer<Type, BlockModifierNode<any>>>;\n readonly inlineRenderers: ReadonlyMap<\n InlineModifierDefinition<any>, NodeRenderer<Type, InlineModifierNode<any>>>;\n\n readonly postprocessor: (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>;\n\n render(doc: Document, state: getState<Type>): getDocument<Type>;\n}\n\nexport type BlockRendererDefiniton<Type extends AnyRendererType, ModState = any> = NodeRendererDefinition<Type, BlockModifierNode<ModState>, BlockModifierDefinition<ModState>>;\n\nexport type InlineRendererDefiniton<Type extends AnyRendererType, ModState = any> = NodeRendererDefinition<Type, InlineModifierNode<ModState>, InlineModifierDefinition<ModState>>;\n\nexport class RenderConfiguration<Type extends AnyRendererType>\n implements ReadonlyRenderConfiguration<Type>\n{\n paragraphRenderer?: NodeRenderer<Type, ParagraphNode>;\n textRenderer?: NodeRenderer<Type, TextNode | PreNode | EscapedNode>;\n\n undefinedBlockRenderer?: NodeRenderer<Type, BlockModifierNode<any>>;\n undefinedInlineRenderer?: NodeRenderer<Type, InlineModifierNode<any>>;\n\n blockRenderers = new Map<\n BlockModifierDefinition<any>,\n NodeRenderer<Type, BlockModifierNode<any>>>;\n inlineRenderers = new Map<\n InlineModifierDefinition<any>,\n NodeRenderer<Type, InlineModifierNode<any>>>;\n\n constructor(\n public options: getOptions<Type>,\n public postprocessor:\n (results: getReturn<Type>[], cxt: RenderContext<Type>) => getDocument<Type>\n ) { }\n\n render(doc: Document, state: getState<Type>): getDocument<Type> {\n let cxt = new RenderContext(this, doc, state);\n let results = doc.toStripped()\n .root.content\n .flatMap((x) => cxt.renderEntity(x));\n return this.postprocessor(results, cxt);\n }\n\n addBlockRenderer(...rs: BlockRendererDefiniton<Type>[]) {\n rs.forEach(([x, y]) => this.blockRenderers.set(x, y));\n }\n\n addInlineRenderer(...rs: InlineRendererDefiniton<Type>[]) {\n rs.forEach(([x, y]) => this.inlineRenderers.set(x, y));\n }\n\n static from<Type extends AnyRendererType>(from: ReadonlyRenderConfiguration<Type>) {\n let config = new RenderConfiguration(from.options, from.postprocessor);\n config.paragraphRenderer = from.paragraphRenderer;\n config.textRenderer = from.textRenderer;\n config.undefinedBlockRenderer = from.undefinedBlockRenderer;\n config.undefinedInlineRenderer = from.undefinedInlineRenderer;\n config.inlineRenderers = new Map(from.inlineRenderers);\n config.blockRenderers = new Map(from.blockRenderers);\n return config;\n }\n}\n","import { debug } from \"./debug\";\nimport { debugPrint } from \"./debug-print\";\nimport { ModifierNode, Message, BlockModifierNode, NodeType, BlockEntity, SystemModifierNode, InlineEntity, ParagraphNode, ModifierArgument } from \"./interface\";\nimport { ModifierSlotType, SystemModifierDefinition } from \"./modifier\";\nimport { ArgumentCountMismatchMessage, CannotExpandArgumentMessage, ContentExpectedMessage, EntityNotAllowedMessage, InvalidArgumentMessage, MultipleBlocksNotPermittedMessage, OnlySimpleParagraphsPermittedMessage, OverwriteSpecialVariableMessage } from \"./messages\";\nimport { ParseContext } from \"./parser-config\";\nimport { cloneNode, stripNode } from \"./node-util\";\n\ntype BindResult<P extends string[], Opt extends string[], N extends Record<string, string>> = {\n msgs: Message[],\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n} | {\n msgs: null,\n args: {[key in P[number]]: string} & {[key in Opt[number]]?: string | undefined} & {[key in keyof N]: string},\n nodes: {[key in P[number]]: ModifierArgument} & {[key in Opt[number]]: ModifierArgument | undefined} & {[key in keyof N]: ModifierArgument | undefined},\n rest: string[],\n restNodes: ModifierArgument[]\n};\n\nexport function bindArgs<P extends string[], Opt extends string[] = [], N extends Record<string, string> = {}>(\n node: ModifierNode, p: readonly [...P],\n opts?: {\n named?: N,\n optional?: readonly [...Opt],\n rest?: boolean,\n restNamed?: boolean,\n trim?: boolean\n }\n): BindResult<P, Opt, N> {\n const badpos = node.arguments.positional.filter((x) => x.expansion === undefined);\n const badnamed = [...node.arguments.named].filter((x) => x[1].expansion === undefined);\n const bad = [...badpos, ...badnamed.map((x) => x[1])];\n if (bad.length > 0) return {\n msgs: bad.map((x) => new CannotExpandArgumentMessage(x.location)),\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n };\n\n const maxLength =\n opts?.rest ? Infinity : p.length + (opts?.optional?.length ?? 0);\n if (node.arguments.positional.length < p.length\n || node.arguments.positional.length > maxLength\n ) return {\n msgs: [new ArgumentCountMismatchMessage({\n source: node.location.source,\n start: node.head.start,\n end: node.head.end\n }, p.length, maxLength)],\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n };\n\n const args: any = {};\n const nodes: any = {};\n const msgs: Message[] = [];\n\n p.forEach((name, i) => {\n nodes[name] = node.arguments.positional[i];\n args[name] = nodes[name].expansion!;\n if (opts?.trim) args[name] = args[name].trim();\n });\n\n if (opts?.optional) opts.optional.forEach((name, i) => {\n nodes[name] = node.arguments.positional[p.length + i];\n args[name] = nodes[name]?.expansion!;\n if (opts?.trim && args[name]) args[name] = args[name].trim();\n });\n\n if (opts?.named) Object.entries(opts.named).forEach(([name, def]) => {\n nodes[name] = node.arguments.named.get(name);\n args[name] = node.arguments.named.get(name)?.expansion! ?? def;\n if (opts?.trim && args[name]) args[name] = args[name].trim();\n });\n if (!opts?.restNamed) node.arguments.named.forEach((v, k) => {\n if (!opts?.named || !Object.hasOwn(opts.named, k))\n msgs.push(new InvalidArgumentMessage(v.location, `no such named argument: \"${k}\"`));\n });\n if (msgs.length) return {\n msgs,\n args: undefined,\n nodes: undefined,\n rest: undefined,\n restNodes: undefined\n }\n\n const restNodes = node.arguments.positional\n .slice(p.length + (opts?.optional?.length ?? 0));\n\n const rest = restNodes\n .map((x) => opts?.trim ? x.expansion!.trim() : x.expansion!);\n\n return { msgs: null, args, nodes, rest, restNodes };\n}\n\n/**\n * Helper function to ensure that a modifier only accepts plaintext paragraphs as content.\n * @returns The content as a string if OK, otherwise an array of error messages.\n */\nexport function onlyPermitPlaintextParagraph(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | string\n{\n function checkInline(ents: InlineEntity[]): Message[] | string {\n let result = '';\n for (const ent of ents) {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n result += ent.content;\n break;\n case NodeType.SystemModifier:\n break;\n case NodeType.InlineModifier:\n if (!ent.expansion) return [new EntityNotAllowedMessage(\n ent.location, 'it does not expand to plain text')];\n let checkInner = checkInline(ent.expansion);\n if (Array.isArray(checkInner)) return checkInner;\n result += checkInner;\n break;\n default:\n return debug.never(ent);\n }\n }\n return result;\n }\n\n function checkContent(ents: BlockEntity[]) {\n if (ents.length == 0) return '';\n else if (ents.length > 1) {\n let last = ents.at(-1)!.location;\n return [new MultipleBlocksNotPermittedMessage({\n source: last.source,\n start: ents[1].location.start,\n end: last.actualEnd ?? last.end\n })];\n }\n return check(ents[0]);\n }\n\n function check(ent: BlockEntity): Message[] | string {\n if (ent.type == NodeType.BlockModifier) {\n if (!ent.expansion) return [new EntityNotAllowedMessage(\n ent.location, 'it does not expand to plain text')];\n return checkContent(ent.expansion);\n } else if (ent.type == NodeType.Preformatted) {\n return ent.content.text;\n } else if (ent.type !== NodeType.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n return checkInline(ent.content);\n }\n\n return checkContent(node.content);\n}\n\n/**\n * Helper function to ensure that a modifier does not accept any block modifiers inside its content.\n * @returns `null` if OK, otherwise an array of error messages.\n */\nexport function onlyPermitSimpleParagraphs(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null\n{\n function check(nodes: BlockEntity[]): Message[] | null {\n for (const ent of nodes) {\n if (ent.type == NodeType.BlockModifier && ent.expansion !== undefined) {\n const cs = check(ent.expansion);\n if (cs) return cs;\n } else if (ent.type == NodeType.Group) {\n const cs = check(ent.content);\n if (cs) return cs;\n } else if (ent.type !== NodeType.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n }\n return null;\n }\n return check(node.expansion ?? node.content);\n}\n\n/**\n * Helper function to ensure that a modifier only accepts one block as its content.\n * @returns `null` if OK, otherwise an array of error messages.\n */\nexport function onlyPermitSingleBlock(\n node: BlockModifierNode<any> | SystemModifierNode<any>,\n opt?: { optional?: boolean }\n): Message[] | null {\n function check(nodes: BlockEntity[]): Message[] | null {\n if (nodes.length > 1) {\n const last = nodes.at(-1)!.location;\n return [new MultipleBlocksNotPermittedMessage({\n source: last.source,\n start: nodes[1].location.start,\n end: last.actualEnd ?? last.end\n })];\n } else if (nodes.length == 1\n && nodes[0].type === NodeType.BlockModifier\n && nodes[0].expansion !== undefined)\n {\n return check(nodes[0].expansion);\n } else if (nodes.length == 0 && !opt?.optional) {\n return [new ContentExpectedMessage(node.location)];\n }\n return null;\n }\n return check(node.expansion ?? node.content);\n}\n\nexport function createPlaintextWrapper(name: string,\n get: (cxt: ParseContext) => string | undefined,\n set: (cxt: ParseContext, value: string) => string,\n slotType = ModifierSlotType.Normal) {\n return new SystemModifierDefinition<void>(name, slotType, {\n delayContentExpansion: true,\n beforeProcessExpansion(node, cxt) {\n let { msgs } = bindArgs(node, []);\n if (msgs) return msgs;\n const result = onlyPermitPlaintextParagraph(node);\n if (typeof result !== 'string') return result;\n\n const previous = get(cxt);\n if (previous !== undefined)\n msgs = [new OverwriteSpecialVariableMessage(node.head, name, previous)];\n set(cxt, result);\n return msgs ?? [];\n },\n });\n}\n\nexport function createParagraphWrapper(name: string,\n get: (cxt: ParseContext) => ParagraphNode | undefined,\n set: (cxt: ParseContext, value: ParagraphNode) => void,\n slotType = ModifierSlotType.Normal) {\n return new SystemModifierDefinition<void>(name, slotType, {\n beforeProcessExpansion(node, cxt) {\n let { msgs } = bindArgs(node, []);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n const previous = get(cxt);\n if (previous !== undefined)\n msgs = [new OverwriteSpecialVariableMessage(node.head, name, \"<block>\")];\n const content = cloneNode(node.content[0]);\n const stripped = stripNode(content)[0] as ParagraphNode;\n set(cxt, stripped);\n debug.info(name, '->', debugPrint.node(stripped));\n return msgs ?? [];\n },\n });\n}\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, Message, SystemModifierNode, ModifierNode, NodeType } from \"../interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { cloneNodes } from \"../node-util\";\n\nexport type CustomModifierSignature = {\n readonly slotName: string | undefined;\n readonly args: readonly string[];\n readonly namedArgs: Record<string, string>;\n preformatted: boolean | undefined;\n}\n\nexport type BlockInstantiationData = {\n readonly slotName: string | undefined;\n readonly mod: BlockModifierDefinition<any>;\n readonly slotContent: readonly BlockEntity[];\n readonly args: ReadonlyMap<string, string>;\n}\n\nexport type InlineInstantiationData = {\n readonly slotName: string | undefined;\n readonly mod: InlineModifierDefinition<any>;\n readonly slotContent: readonly InlineEntity[];\n readonly args: ReadonlyMap<string, string>;\n}\n\nexport const builtins = Symbol();\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [builtins]?: {\n blockSlotDelayedStack: CustomModifierSignature[];\n inlineSlotDelayedStack: CustomModifierSignature[];\n blockInstantiationData: BlockInstantiationData[];\n inlineInstantiationData: InlineInstantiationData[];\n insideModule: string | undefined;\n };\n }\n}\n\nexport function initParseContext(cxt: ParseContext) {\n cxt.init(builtins, {\n blockSlotDelayedStack: [],\n inlineSlotDelayedStack: [],\n blockInstantiationData: [],\n inlineInstantiationData: [],\n insideModule: undefined\n });\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, signature: CustomModifierSignature, content: _Ent<T>[])\n{\n debug.info(`created custom ${NodeType[type]}:`, name);\n debug.info('args:', signature.args, 'named:', signature.namedArgs, `with ${signature.slotName === undefined ? 'no slot' : signature.slotName == '' ? 'empty slot name' : 'slot name: ' + signature.slotName}`);\n debug.trace(() => 'content is\\n' + debugPrint.node(...content));\n\n type State = {\n ok: boolean,\n args: Map<string, string>\n };\n\n const flag =\n signature.slotName === undefined ? ModifierSlotType.None :\n signature.preformatted ? ModifierSlotType.Preformatted\n : ModifierSlotType.Normal;\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<State>(name, flag)\n : new InlineModifierDefinition<State>(name, flag)\n ) as _Def<T, State>;\n const isInline = type == NodeType.InlineModifier;\n\n if (content.length == 1 && (\n content[0].type == NodeType.BlockModifier\n || content[0].type == NodeType.InlineModifier))\n mod.roleHint = content[0].mod.roleHint;\n\n mod.delayContentExpansion = true;\n mod.prepareExpand = (node: ModifierNode<State>) => {\n let { msgs, args } = bindArgs(node, signature.args, { named: signature.namedArgs });\n if (msgs) return msgs;\n node.state = {\n ok: true,\n args: new Map(Object.entries(args!))\n } satisfies State;\n return [];\n };\n mod.expand = (node: ModifierNode<State>) => {\n if (!node.state?.ok) return [];\n const contentClone = cloneNodes(content, {newLocation: node.location}) as any[];\n return contentClone;\n };\n mod.beforeProcessExpansion = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.push({\n slotName: signature.slotName,\n mod: mod as any, args: node.state.args,\n slotContent: node.content as any\n });\n debug.trace(`pushed ${NodeType[type]} slot data for`, name);\n debug.trace(`... slotName:`,\n signature.slotName === '' ? '<unnamed>'\n : signature.slotName === undefined ? '<no slot>'\n : `'${signature.slotName}'`);\n debug.trace(`... args:`, '{' + [...node.state.args].map(([a, b]) => `${a} => ${b}`).join(', ') + '}');\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.pop();\n debug.trace(`popped ${NodeType[type]} slot data for`, name);\n return [];\n };\n return mod;\n}\n\nexport function makeInlineDefinition(content: BlockEntity[], msgs: Message[]) {\n let lastIsParagraph = false;\n let concat: InlineEntity[] = [];\n for (const n of content) {\n switch (n.type) {\n case NodeType.Group:\n concat.push(...makeInlineDefinition(n.content, msgs));\n break;\n case NodeType.Paragraph:\n if (!lastIsParagraph) {\n lastIsParagraph = true;\n concat.push(...n.content);\n continue;\n }\n // else: fallthrough to error\n case NodeType.Preformatted:\n case NodeType.BlockModifier:\n msgs.push(new EntityNotAllowedMessage(n.location));\n break;\n case NodeType.SystemModifier:\n lastIsParagraph = false;\n concat.push(n);\n break;\n default:\n debug.never(n);\n }\n }\n return concat;\n}\n","import { debug } from \"../debug\";\nimport { Message, NodeType, SystemModifierNode, InlineEntity, ModifierArgument } from \"../interface\";\nimport { SystemModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, CustomModifierSignature } from \"./internal\";\n\ntype ModifierState = {\n name: string;\n nameNode: ModifierArgument;\n signature: CustomModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n node: SystemModifierNode<ModifierState>,\n stack: CustomModifierSignature[]\n) {\n let { msgs, args, nodes, rest } = bindArgs(node, ['name'], { rest: true, restNamed: true });\n if (msgs) return msgs;\n\n msgs = [];\n const nameNode = nodes!.name;\n const name = args!.name;\n if (name === '' || name?.includes('\\n')) return [\n new InvalidArgumentMessage(nameNode.location, name)];\n\n let slotName = '';\n if (rest!.length > 0) {\n const last = rest!.at(-1)!;\n const match = /^\\((.*)\\)$/.exec(last);\n if (match) {\n slotName = match[1];\n rest!.pop();\n } else\n slotName = '';\n }\n\n let namedArgs = Object.fromEntries([...node.arguments.named]\n .map((x) => [x[0], x[1].expansion!]));\n\n let signature: CustomModifierSignature = {\n slotName, args: rest!, namedArgs, preformatted: undefined\n };\n node.state = { name, nameNode, signature, msgs };\n stack.push(signature);\n return undefined;\n}\n\nexport const DefineBlockMod = new SystemModifierDefinition\n <ModifierState>('define-block', ModifierSlotType.Normal,\n{\n // .define-block:name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.blockSlotDelayedStack);\n if (check) {\n if (immediate) return check;\n else {\n debug.trace('skipping incomplete definition');\n return [];\n }\n }\n debug.trace('entering block definition:', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.blockSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving block definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n const msgs = node.state.msgs;\n if (!node.state.name)\n msgs.push(new InvalidArgumentMessage(node.state.nameNode.location));\n else if (cxt.config.blockModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state?.name) {\n if (cxt.config.blockModifiers.has(node.state.name))\n cxt.config.blockModifiers.remove(node.state.name);\n cxt.config.blockModifiers.add(customModifier(NodeType.BlockModifier,\n node.state.name, node.state.signature, node.content));\n }\n return [];\n }\n});\n\nexport const DefineInlineMod = new SystemModifierDefinition\n <ModifierState & { definition?: InlineEntity[]; }>(\n 'define-inline', ModifierSlotType.Normal,\n{\n // .define-inline name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.inlineSlotDelayedStack);\n if (check) {\n if (immediate) return check;\n else {\n debug.trace('skipping incomplete definition');\n return [];\n }\n }\n debug.trace('entering inline definition:', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.inlineSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n\n node.state.definition = makeInlineDefinition(node.content, msgs);\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state?.name) {\n if (cxt.config.inlineModifiers.has(node.state.name))\n cxt.config.inlineModifiers.remove(node.state.name);\n cxt.config.inlineModifiers.add(\n customModifier(NodeType.InlineModifier,\n node.state.name, node.state.signature, node.state.definition!));\n }\n return [];\n },\n});\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { InlineEntity, Message, NodeType, SystemModifierNode, ModifierArgument } from \"../interface\";\nimport { InlineShorthand, BlockShorthand } from \"../parser-config\";\nimport { SystemModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { NameAlreadyDefinedMessage, InvalidArgumentMessage, ArgumentCountMismatchMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, CustomModifierSignature } from \"./internal\";\n\ntype ShorthandState = {\n name: string;\n nameNode: ModifierArgument;\n parts: [string, string][];\n postfix: string | undefined;\n signature: CustomModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n type: NodeType.BlockModifier | NodeType.InlineModifier,\n node: SystemModifierNode<ShorthandState>,\n stack: CustomModifierSignature[]\n) {\n let { msgs, args, nodes, rest, restNodes } = bindArgs(node, ['name'], { rest: true });\n if (msgs) return msgs;\n\n msgs = [];\n const nameNode = nodes!.name;\n const name = args!.name;\n if (name === '' || name?.includes('\\n')) return [\n new InvalidArgumentMessage(nameNode.location, name)];\n\n let slotName: string | undefined = undefined;\n let parts: [string, string][] = [];\n let postfix: string | undefined = undefined;\n let i = 0;\n while (i < rest!.length) {\n const arg = restNodes![i];\n const match = /^\\((.*)\\)$/.exec(arg.expansion!);\n if (match) {\n slotName = match[1];\n i++;\n if (type == NodeType.InlineModifier) {\n if (i < rest!.length) {\n if (rest![i] === '') {\n msgs.push(new InvalidArgumentMessage(\n restNodes![i].location, 'postfix'));\n } else {\n postfix = rest![i];\n i++;\n }\n } else msgs.push(\n new ArgumentCountMismatchMessage(node.head));\n }\n break;\n }\n\n i++;\n if (i < rest!.length) {\n const id = arg.expansion!;\n if (id === '')\n return [new InvalidArgumentMessage(arg.location, 'id')];\n const part = rest![i];\n if (part === '')\n return [new InvalidArgumentMessage(restNodes![i].location, 'part')];\n parts.push([id, part]);\n i++;\n } else {\n msgs.push(new ArgumentCountMismatchMessage(node.head));\n break;\n }\n }\n\n if (i == rest!.length - 1) {\n if (rest![i] !== '') msgs.push(\n new InvalidArgumentMessage(restNodes![i].location, '(must be empty)'));\n } else if (i < rest!.length - 1)\n msgs.push(new ArgumentCountMismatchMessage(node.head));\n\n let signature: CustomModifierSignature =\n { slotName, args: parts.map((x) => x[0]), namedArgs: {}, preformatted: undefined };\n node.state = { name, nameNode, signature, parts, postfix, msgs };\n stack.push(signature);\n return [];\n}\n\nexport const DefineBlockShorthandMod = new SystemModifierDefinition\n <ShorthandState>\n ('block-shorthand', ModifierSlotType.Normal,\n{\n // -inline-shorthand prefix:arg1:part1:arg2:part2...:(slot):postfix:\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n if (!immediate) return [];\n\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(NodeType.BlockModifier,\n node, store.blockSlotDelayedStack);\n if (check) return check;\n debug.trace('entering block shorthand definition', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.blockSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline shorthand definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.blockShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate || !node.state) return undefined;\n const name = '<block shorthand>';\n const parts = node.state.parts.map((x) => x[1]);\n const mod = customModifier(NodeType.BlockModifier,\n name, node.state.signature, node.content);\n const shorthand: BlockShorthand<any> = {\n name: node.state.name,\n postfix: node.state.postfix,\n mod, parts\n };\n if (cxt.config.blockShorthands.has(node.state.name))\n cxt.config.blockShorthands.remove(node.state.name);\n cxt.config.blockShorthands.add(shorthand);\n debug.info(() => 'created block shorthand: ' + debugPrint.blockShorthand(shorthand));\n return [];\n },\n});\n\nexport const DefineInlineShorthandMod = new SystemModifierDefinition\n <ShorthandState & { definition?: InlineEntity[]; }>\n ('inline-shorthand', ModifierSlotType.Normal,\n{\n // -inline-shorthand prefix:arg1:part1:arg2:part2...:(slot):postfix:\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt, immediate) {\n if (!immediate) return [];\n\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(NodeType.InlineModifier,\n node, store.inlineSlotDelayedStack);\n if (check) return check;\n debug.trace('entering inline shorthand definition', node.state!.name);\n return [];\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n const pop = store.inlineSlotDelayedStack.pop();\n assert(pop === node.state.signature);\n debug.trace('leaving inline shorthand definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt, immediate) {\n if (!immediate || !node.state) return [];\n if (!node.state.name)\n return [new InvalidArgumentMessage(node.state.nameNode.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(node.state.nameNode.location, node.state.name));\n node.state.definition = makeInlineDefinition(node.content, msgs);\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate || !node.state) return undefined;\n const name = '<inline shorthand>';\n const parts = node.state.parts.map((x) => x[1]);\n const mod = customModifier(NodeType.InlineModifier,\n name, node.state.signature, node.state.definition!);\n const shorthand: InlineShorthand<any> = {\n name: node.state.name,\n postfix: node.state.postfix,\n mod, parts\n };\n if (cxt.config.inlineShorthands.has(node.state.name))\n cxt.config.inlineShorthands.remove(node.state.name);\n cxt.config.inlineShorthands.add(shorthand);\n debug.info(() => 'created inline shorthand: ' + debugPrint.inlineShorthand(shorthand));\n return [];\n },\n});\n","import { debug } from \"../debug\";\nimport { BlockEntity, InlineEntity, ModifierArgument, NodeType, ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { bindArgs, onlyPermitSimpleParagraphs } from \"../modifier-helper\";\n\nexport const RawBlockMod = new BlockModifierDefinition\n ('raw', ModifierSlotType.Preformatted,\n{\n expand(node) {\n return node.content;\n },\n});\n\nexport const ConcatBlockMod = new BlockModifierDefinition<ModifierArgument>\n ('concat', ModifierSlotType.Normal,\n{\n prepareExpand(node) {\n let { msgs, nodes } = bindArgs(node, [], { named: { sep: '' } });\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = nodes?.sep;\n return [];\n },\n expand(node) {\n const result: ParagraphNode = {\n location: node.location,\n type: NodeType.Paragraph,\n content: []\n };\n function separator() {\n if (node.state?.expansion)\n result.content.push({\n type: NodeType.Text,\n location: node.state.location,\n content: node.state.expansion!\n });\n }\n function work(nodes: BlockEntity[]) {\n for (const n of nodes) switch (n.type) {\n case NodeType.Paragraph:\n result.content.push(...n.content);\n separator();\n break;\n case NodeType.Group:\n work(n.content);\n break;\n case NodeType.BlockModifier:\n if (n.expansion) work(n.expansion);\n break;\n case NodeType.Preformatted:\n case NodeType.SystemModifier:\n break;\n default:\n debug.never(n);\n }\n }\n work(node.content);\n\n if (node.state?.expansion && result.content.length > 0)\n result.content.pop();\n return [result];\n },\n});\n","import { debugPrint } from \"./debug-print\";\nimport { InlineShorthand, BlockShorthand } from \"./parser-config\";\nimport { BlockModifierDefinition, InlineModifierDefinition } from \"./modifier\";\nimport { ParseContext } from \"./parser-config\";\nimport { NameManager } from \"./util\";\n\nexport type ModuleDefinition = {\n usedModules: Set<string>;\n blocks: Set<BlockModifierDefinition<unknown>>;\n inlines: Set<InlineModifierDefinition<unknown>>;\n inlineShorthands: Set<InlineShorthand<unknown>>;\n blockShorthands: Set<BlockShorthand<unknown>>;\n};\n\nexport namespace ModuleDefinition {\n export function from(cxt: ParseContext): ModuleDefinition {\n return {\n usedModules: new Set(cxt.usedModules),\n blocks: cxt.config.blockModifiers.toSet(),\n inlines: cxt.config.inlineModifiers.toSet(),\n inlineShorthands: cxt.config.inlineShorthands.toSet(),\n blockShorthands: cxt.config.blockShorthands.toSet()\n };\n }\n\n export function apply(defs: ModuleDefinition, cxt: ParseContext) {\n cxt.usedModules = new Set(defs.usedModules);\n cxt.config.blockModifiers = new NameManager(defs.blocks);\n cxt.config.inlineModifiers = new NameManager(defs.inlines);\n cxt.config.inlineShorthands = new NameManager(defs.inlineShorthands);\n cxt.config.blockShorthands = new NameManager(defs.blockShorthands);\n }\n\n export function diff(cnew: ModuleDefinition, cold: ModuleDefinition): ModuleDefinition {\n return {\n usedModules: cnew.usedModules.difference(cold.usedModules),\n blocks: cnew.blocks.difference(cold.blocks),\n inlines: cnew.inlines.difference(cold.inlines),\n inlineShorthands: cnew.inlineShorthands.difference(cold.inlineShorthands),\n blockShorthands: cnew.blockShorthands.difference(cold.blockShorthands)\n };\n }\n\n function add<T extends {name: string}>(\n snew: ReadonlySet<T>, sold: ReadonlySet<T>, transform: (x: T) => string\n ): [Set<T>, string] {\n let newNames = new Set<string>([...snew].map((x) => x.name));\n let out = new Set<T>(snew);\n let overlap: T[] = [];\n for (const x of sold) {\n if (newNames.has(x.name))\n overlap.push(x);\n else\n out.add(x);\n }\n return [out, overlap.map(transform).join(', ')];\n }\n\n export function combine(\n cnew: ModuleDefinition, cold: ModuleDefinition\n ): [ModuleDefinition, string] {\n let [blocks, s1] =\n add(cnew.blocks, cold.blocks, debugPrint.blockModifier);\n let [inlines, s2] =\n add(cnew.inlines, cold.inlines, debugPrint.inlineModifier);\n let [inlineShorthands, s3] =\n add(cnew.inlineShorthands, cold.inlineShorthands, debugPrint.inlineShorthand);\n let [blockShorthands, s4] =\n add(cnew.blockShorthands, cold.blockShorthands, debugPrint.blockShorthand);\n return [\n {\n usedModules: cnew.usedModules.union(cold.usedModules),\n blocks, inlines, inlineShorthands, blockShorthands\n },\n (s1 ? s1 + '; ' : '')\n + (s2 ? s2 + '; ' : '')\n + (s3 ? 'inline shorthand ' + s3 + '; ' : '')\n + (s4 ? 'block shorthand ' + s4 : '')\n ];\n }\n}\n","import { debug } from \"../debug\";\nimport { ModifierNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType, SystemModifierDefinition } from \"../modifier\";\nimport { CannotUseModuleInSelfMessage, InvalidArgumentMessage, NoNestedModuleMessage, OverwriteDefinitionsMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ModuleDefinition } from \"../module\";\nimport { ParseContext } from \"../parser-config\";\nimport { builtins } from \"./internal\";\n\nexport const ModuleMod =\n new BlockModifierDefinition<{\n name: string,\n defs: ModuleDefinition\n }>('module', ModifierSlotType.Normal,\n{\n expand() {\n // no need to clone?\n return []; // node.content;\n },\n beforeParseContent(node, cxt) {\n let { msgs, args } = bindArgs(node, ['name']);\n if (msgs) return msgs;\n\n const data = cxt.get(builtins)!;\n const name = args!.name;\n const defs = ModuleDefinition.from(cxt);\n\n if (data.insideModule !== undefined)\n return [new NoNestedModuleMessage(node.head)];\n\n msgs = [];\n node.state = { name, defs };\n data.insideModule = name;\n if (cxt.config.modules.has(name)) {\n const [combined, msg] = ModuleDefinition.combine(defs, cxt.config.modules.get(name)!);\n if (msg) msgs.push(\n new OverwriteDefinitionsMessage(node.head, msg));\n ModuleDefinition.apply(combined, cxt);\n debug.trace('entering defs for module', name, '(earlier data loaded)');\n } else {\n debug.trace('entering defs for module', name);\n }\n return msgs;\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const data = cxt.get(builtins)!;\n data.insideModule = undefined;\n\n const old = ModuleDefinition.from(cxt);\n cxt.config.modules.set(node.state.name,\n ModuleDefinition.diff(old, node.state.defs));\n ModuleDefinition.apply(node.state.defs, cxt);\n debug.trace('exiting defs for module', node.state.name);\n return [];\n },\n});\n\nfunction use(node: ModifierNode<ModuleDefinition>, cxt: ParseContext) {\n let { msgs, args, nodes } = bindArgs(node, ['name']);\n if (msgs) return msgs;\n\n const data = cxt.get(builtins)!;\n if (!cxt.config.modules.has(args!.name))\n return [new InvalidArgumentMessage(nodes!.name.location)];\n if (data.insideModule === args!.name)\n return [new CannotUseModuleInSelfMessage(nodes!.name.location)];\n\n const old = ModuleDefinition.from(cxt);\n const [combined, msg] = ModuleDefinition.combine(cxt.config.modules.get(args!.name)!, old);\n ModuleDefinition.apply(combined, cxt)\n node.state = old;\n\n if (msg)\n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n}\n\nexport const UseSystemMod =\n new SystemModifierDefinition<ModuleDefinition>('use', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n return use(node, cxt);\n },\n});\n\nexport const UseBlockMod =\n new BlockModifierDefinition<ModuleDefinition>('use', ModifierSlotType.Normal,\n{\n beforeParseContent(node, cxt) {\n return use(node, cxt);\n },\n afterParseContent(node, cxt) {\n if (node.state)\n ModuleDefinition.apply(node.state, cxt);\n return [];\n },\n expand(node) {\n return node.content;\n },\n});\n","import { debug } from \"../debug\";\nimport { ModifierNode, NodeType } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../modifier\";\nimport { SlotUsedOutsideDefinitionMessage, InvalidArgumentMessage, EitherNormalOrPreMessage, UnknownModifierMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Def, _Ent, _InstData, _Node } from \"../typing-helper\";\nimport { assert, NameManager } from \"../util\";\nimport { cloneNodes } from \"../node-util\";\nimport { builtins, CustomModifierSignature } from \"./internal\";\n\nfunction slotModifier\n <T extends NodeType.InlineModifier | NodeType.BlockModifier>\n (name: string, type: T, preformatted: boolean, inject: boolean): _Def<T, any>\n{\n type TState = {\n ok: true;\n data: _InstData<T>;\n index: number;\n injectMod?: _Def<T>\n } | { ok: false; };\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<TState>(name, ModifierSlotType.None)\n : new InlineModifierDefinition<TState>(name, ModifierSlotType.None)\n ) as _Def<T, TState>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.alwaysTryExpand = true;\n mod.prepareExpand = (node: ModifierNode<TState>, cxt: ParseContext, immediate: boolean) => {\n if (node.state) return [];\n\n function processSignature(s: CustomModifierSignature) {\n if (s.preformatted === undefined) {\n s.preformatted = preformatted;\n debug.trace('set preformatted to ', preformatted);\n } else if (s.preformatted !== preformatted) {\n return [new EitherNormalOrPreMessage(node.location)];\n }\n return [];\n }\n\n // check args\n const check = inject\n ? bindArgs(node, ['modname'], { optional: ['id'] })\n : bindArgs(node, [], { optional: ['id'] });\n if (check.msgs) {\n node.state = { ok: false };\n return check.msgs;\n }\n\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n\n let msgs = (() => {\n // check inside definition\n if (data.length == 0 && stack.length == 0) {\n node.state = { ok: false };\n return [new SlotUsedOutsideDefinitionMessage(node.location)];\n }\n\n // find default\n const id = check.args.id;\n if (!id) {\n let signature = stack.at(-1);\n if (signature) return processSignature(signature); // delay\n node.state = { ok: true, data: data.at(-1) as any, index: data.length - 1 };\n return;\n }\n\n // find id\n let signature = stack.find((x) => x.slotName == id);\n if (signature) return processSignature(signature); // delay\n for (let i = data.length - 1; i >= 0; i--) if (data[i].slotName === id) {\n node.state = { ok: true, data: data[i] as any, index: i };\n return;\n }\n\n // not found\n if (immediate) {\n node.state = { ok: false };\n return [new InvalidArgumentMessage(check.nodes.id!.location, id)];\n }\n return [];\n })();\n\n if (inject) {\n // @ts-expect-error\n const modname = check.args.modname;\n // @ts-expect-error\n const modnameNode = check.nodes.modname;\n const mod = ((isInline\n ? cxt.config.inlineModifiers\n : cxt.config.blockModifiers) as NameManager<_Def<T>>).get(modname);\n if (!mod) {\n node.state = { ok: false };\n return [new UnknownModifierMessage(modnameNode.location, modname)];\n }\n\n if (node.state?.ok)\n node.state.injectMod = mod;\n }\n\n if (msgs !== undefined) return msgs;\n return [];\n };\n mod.expand = (node: ModifierNode<TState>, cxt: ParseContext) => {\n if (!node.state) return undefined;\n if (!node.state.ok) return [];\n let cloned = cloneNodes(node.state.data.slotContent) as _Ent<T>[];\n if (inject) {\n assert(node.state.injectMod !== undefined);\n const mod = node.state.injectMod as any;\n const modNode: ModifierNode = {\n type, mod,\n location: node.location,\n head: node.head,\n arguments: {\n positional: [],\n named: new Map(),\n location: node.location\n }, // TODO: enable injecting args\n content: cloned as any\n };\n return [modNode];\n } else return cloned as any;\n };\n mod.beforeProcessExpansion = (node: ModifierNode<TState>, cxt: ParseContext) => {\n // TODO: not sure if this works\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n debug.trace('temporarily removed slot data for', node.state.data.mod.name);\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.splice(node.state.index, 1);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode<TState>, cxt: ParseContext) => {\n // TODO: not sure if this works\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n debug.trace('reinstated slot data for', node.state.data.mod.name);\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n data.splice(node.state.index, 0, node.state.data as any);\n return [];\n };\n return mod;\n}\n\nexport const SlotBlockMod = slotModifier('slot', NodeType.BlockModifier, false, false);\nexport const SlotInlineMod = slotModifier('slot', NodeType.InlineModifier, false, false);\n\nexport const PreSlotBlockMod = slotModifier('pre-slot', NodeType.BlockModifier, true, false);\nexport const PreSlotInlineMod = slotModifier('pre-slot', NodeType.InlineModifier, true, false);\n\nexport const InjectPreSlotBlockMod = slotModifier(\n 'inject-pre-slot', NodeType.BlockModifier, true, true);\nexport const InjectPreSlotInlineMod = slotModifier(\n 'inject-pre-slot', NodeType.InlineModifier, true, true);\n","import { debug } from \"../debug\";\nimport { NodeType, ModifierNode } from \"../interface\";\nimport { InlineModifierDefinition, ModifierSlotType, ArgumentInterpolatorDefinition, SystemModifierDefinition, BlockModifierDefinition } from \"../modifier\";\nimport { CannotExpandArgumentMessage, InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins } from \"./internal\";\nimport { ParseContext } from \"../parser-config\";\nimport { bindArgs } from \"../modifier-helper\";\n\nfunction resolveId(id: string, cxt: ParseContext): string | undefined {\n const store = cxt.get(builtins)!;\n // delay if it is a yet unknown argument\n if (store.inlineSlotDelayedStack.find((x) => x.args.includes(id))\n || store.blockSlotDelayedStack.find((x) => x.args.includes(id)))\n {\n debug.trace('delaying the yet unknown argument', id);\n return undefined;\n }\n\n let value: string | undefined = undefined;\n for (let i = store.inlineInstantiationData.length - 1; i >= 0; i--) {\n const data = store.inlineInstantiationData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n for (let i = store.blockInstantiationData.length - 1; i >= 0; i--) {\n const data = store.blockInstantiationData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n if (value === undefined)\n value = cxt.variables.get(id);\n return value;\n}\n\nlet ifdefBody = (x: boolean) => ({\n prepareExpand(node: ModifierNode, cxt: ParseContext) {\n let { msgs, args, nodes } = bindArgs(node, ['id']);\n if (msgs) return msgs;\n if (args!.id == '') return [new InvalidArgumentMessage(nodes!.id.location)];\n const value = resolveId(args!.id, cxt);\n node.state = value !== undefined;\n return [];\n },\n expand(node: any) {\n return (node.state == x) ? node.content : [];\n }\n});\n\nlet ifdefBlock = (name: string, x: boolean) =>\n new BlockModifierDefinition<boolean>\n (name, ModifierSlotType.Normal, ifdefBody(x));\n\nlet ifdefInline = (name: string, x: boolean) =>\n new InlineModifierDefinition<boolean>\n (name, ModifierSlotType.Normal, ifdefBody(x));\n\nexport const IfdefBlockMod = ifdefBlock('ifdef', true);\nexport const IfndefBlockMod = ifdefBlock('ifndef', false);\nexport const IfdefInlineMod = ifdefInline('ifdef', true);\nexport const IfndefInlineMod = ifdefInline('ifndef', false);\n\nexport const GetVarInlineMod =\n new InlineModifierDefinition<{ value: string; }>('$', ModifierSlotType.None,\n{\n alwaysTryExpand: true,\n // .$:id\n prepareExpand(node, cxt, immediate) {\n let { msgs, args, nodes } = bindArgs(node, ['id']);\n if (msgs) return immediate ? msgs : [];\n\n const id = args!.id;\n if (id == '')\n return immediate ? [new InvalidArgumentMessage(nodes!.id.location)] : [];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return immediate ? [new UndefinedVariableMessage(nodes!.id.location, id)] : [];\n node.state = { value };\n return [];\n },\n expand(node, _, immediate) {\n if (!node.state) return immediate ? [] : undefined;\n return [{ type: NodeType.Text, content: node.state.value, location: node.location }];\n },\n});\n\nexport const PrintInlineMod =\n new InlineModifierDefinition<{ value: string; }>('print', ModifierSlotType.None,\n{\n // .print:args...\n prepareExpand(node) {\n let { msgs, rest } = bindArgs(node, [], { rest: true });\n if (msgs) return msgs;\n node.state = { value: rest!.join('') };\n return [];\n },\n expand(node) {\n if (!node.state) return [];\n return [{ type: NodeType.Text, content: node.state.value, location: node.location }];\n },\n});\n\nexport const GetVarInterpolator =\n new ArgumentInterpolatorDefinition('$(', ')',\n{\n alwaysTryExpand: true,\n expand(content, cxt) {\n const result = resolveId(content, cxt);\n if (result !== undefined) debug.trace(`$(${content}) --> ${result}`);\n return result;\n },\n});\n\nexport const VarMod = new SystemModifierDefinition<{\n id: string; value: string;\n}>('var', ModifierSlotType.None, {\n // .var id:value\n prepareExpand(node) {\n if (node.arguments.named.size == 1 && node.arguments.positional.length == 0) {\n const [id, arg] = [...node.arguments.named][0];\n if (arg.expansion === undefined)\n return [new CannotExpandArgumentMessage(arg.location)];\n\n node.state = { id, value: arg.expansion };\n return [];\n }\n\n let { msgs, args, nodes } = bindArgs(node, ['id', 'value']);\n if (msgs) return msgs;\n\n if (!args!.id)\n return [new InvalidArgumentMessage(nodes!.id.location)];\n\n node.state = {\n id: args!.id,\n value: args!.value\n };\n return [];\n },\n expand(node, cxt) {\n if (node.state) {\n cxt.variables.set(node.state.id, node.state.value);\n debug.trace('set variable', node.state.id, '=', node.state.value);\n }\n return [];\n },\n});\n","import { Configuration, ReadonlyConfiguration } from \"../parser-config\";\nimport { DefineBlockMod, DefineInlineMod } from \"./define-modifier\";\nimport { DefineBlockShorthandMod, DefineInlineShorthandMod } from \"./define-shorthand\";\nimport { initParseContext } from \"./internal\";\nimport { ConcatBlockMod, RawBlockMod } from \"./misc\";\nimport { ModuleMod, UseBlockMod, UseSystemMod } from \"./module\";\nimport { InjectPreSlotBlockMod, InjectPreSlotInlineMod, PreSlotBlockMod, PreSlotInlineMod, SlotBlockMod, SlotInlineMod } from \"./slot\";\nimport { VarMod, GetVarInlineMod, GetVarInterpolator, PrintInlineMod, IfdefBlockMod, IfdefInlineMod, IfndefBlockMod, IfndefInlineMod } from \"./var\";\n\nlet builtin = new Configuration();\nbuiltin.initializers = [initParseContext];\nbuiltin.systemModifiers.add(\n DefineBlockMod, DefineInlineMod,\n DefineBlockShorthandMod, DefineInlineShorthandMod,\n VarMod,\n UseSystemMod,\n);\nbuiltin.blockModifiers.add(\n SlotBlockMod, PreSlotBlockMod, InjectPreSlotBlockMod,\n ModuleMod, UseBlockMod,\n IfdefBlockMod, IfndefBlockMod,\n RawBlockMod, ConcatBlockMod\n);\nbuiltin.inlineModifiers.add(\n SlotInlineMod, PreSlotInlineMod, InjectPreSlotInlineMod,\n GetVarInlineMod, PrintInlineMod,\n IfdefInlineMod, IfndefInlineMod,\n);\nbuiltin.argumentInterpolators.add(\n GetVarInterpolator,\n);\n\nexport const BuiltinConfiguration: ReadonlyConfiguration = Object.freeze(builtin);\n","import { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst bulletItemBlock = new BlockModifierDefinition(\n 'bullet-item', ModifierSlotType.Normal,\n { roleHint: undefined });\n\nconst orderedListItemBlock = new BlockModifierDefinition<number>(\n 'ordered-item', ModifierSlotType.Normal,\n {\n roleHint: undefined,\n prepareExpand(node) {\n let { msgs, args, nodes } = bindArgs(node, ['number']);\n if (msgs) return msgs;\n let num = Number.parseInt(args!.number);\n if (isNaN(num)) return [\n new InvalidArgumentMessage(nodes!.number.location, 'should be a number')];\n node.state = num;\n return [];\n },\n });\n\nconst subItemBlock = new BlockModifierDefinition(\n 'subitem', ModifierSlotType.Normal,\n { roleHint: undefined });\n\nexport const BulletBlocks = [bulletItemBlock, orderedListItemBlock, subItemBlock];\n\nexport const BulletBlockRenderersHTML = [\n [bulletItemBlock, (node, cxt) =>\n <li class='bullet'>{cxt.state.render(node.content, cxt)}</li>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [subItemBlock, (node, cxt) =>\n <div class='subitem'>{cxt.state.render(node.content, cxt)}</div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [orderedListItemBlock, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidBlock(node, 'bad format')\n : <li class='ordered' value={node.state}>{cxt.state.render(node.content, cxt)}</li>\n ] satisfies BlockRendererDefiniton<HTMLRenderType, number>\n];\n","import { ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs, onlyPermitSimpleParagraphs, onlyPermitSingleBlock } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const headings = Symbol();\n\ntype HeadingData = {\n name: string | undefined,\n implicit?: boolean,\n level: number\n}\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [headings]?: {\n path: HeadingData[]\n };\n }\n}\n\nexport function initHeadings(cxt: ParseContext) {\n cxt.init(headings, {\n path: []\n });\n}\n\nfunction setHeading(cxt: ParseContext, data: HeadingData) {\n const path = cxt.get(headings)!.path;\n while (path.length > 0 && path.at(-1)!.level >= data.level)\n path.pop();\n path.push(data);\n return [];\n}\n\nfunction currentHeadingLevel(cxt: ParseContext) {\n return cxt.get(headings)!.path.at(-1)?.level;\n}\n\nfunction currentExplicitHeadingLevel(cxt: ParseContext) {\n return cxt.get(headings)!.path.findLast((x) => !x.implicit)?.level;\n}\n\nconst headingBlock = new BlockModifierDefinition<HeadingData>(\n 'heading', ModifierSlotType.Normal,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, [], { optional: ['n'] });\n if (msgs) return msgs;\n\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = {\n name: undefined,\n level: currentHeadingLevel(cxt) ?? 1\n };\n if (args!.n !== undefined) {\n const level = Number.parseInt(args!.n);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.n!.location, 'should be a number between 1 and 6')];\n else node.state.level = level;\n }\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nconst implicitHeadingBlock = new BlockModifierDefinition<HeadingData>(\n 'implicit-heading', ModifierSlotType.None,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, [], { optional: ['n'] });\n if (msgs) return msgs;\n\n node.state = {\n name: undefined, implicit: true,\n level: (currentExplicitHeadingLevel(cxt) ?? 0) + 1\n };\n if (args!.n !== undefined) {\n const level = Number.parseInt(args!.n);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.n!.location, 'should be a number between 1 and 6')];\n else node.state.level = level;\n }\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nconst numberedHeadingBlock = new BlockModifierDefinition<HeadingData>(\n 'numbered-heading', ModifierSlotType.Normal,\n {\n roleHint: 'heading',\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['number']);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node, {optional: true});\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n\n node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n const split = args!.number.trim().split('.').filter((x) => x.length > 0);\n if (split.length == 0 || split.length > 6)\n msgs = [new InvalidArgumentMessage(\n nodes!.number.location, 'heading level should be between 1 and 6')];\n else node.state = { name: split.join('.'), level: split.length };\n setHeading(cxt, node.state);\n return msgs ?? [];\n },\n });\n\nexport const HeadingBlocks = [headingBlock, implicitHeadingBlock, numberedHeadingBlock];\n\nexport const HeadingBlockRenderersHTML = [\n [headingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const para = node.content[0] as ParagraphNode;\n const element = document.createElement(tag);\n element.appendChild(cxt.state.render(para.content, cxt));\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n [implicitHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const element = document.createElement(tag);\n element.className = 'implicit';\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n\n [numberedHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n const tag = 'h' + node.state.level;\n const element = document.createElement(tag);\n element.className = 'numbered-heading';\n element.appendChild(<span class='heading-number'>{node.state.name}</span>);\n if (node.content.length > 0) {\n const para = node.content[0] as ParagraphNode;\n element.appendChild(<span class='heading-content'>{cxt.state.render(para.content, cxt)}</span>);\n }\n return element;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n];\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, NodeType, LocationRange } from \"../interface\";\nimport { InlineModifierDefinition, ModifierSlotType, BlockModifierDefinition, SystemModifierDefinition } from \"../modifier\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { bindArgs } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton, RenderContext } from \"../renderer\";\nimport { stripNode } from \"../node-util\";\nimport { HTMLComponentPlugin, HTMLRenderType } from \"./html-renderer\";\n\nconst notes = Symbol();\n\ntype NoteSystem = {\n position: 'preserve' | 'global',\n autonumber: boolean\n}\n\ntype NoteDefinition = {\n id: number;\n system: string;\n name: string;\n location: LocationRange;\n content: BlockEntity[]\n}\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [notes]?: {\n systems: Map<string, NoteSystem>,\n defaultSystem: NoteSystem,\n definitions: NoteDefinition[],\n currentId: number\n };\n }\n}\n\nexport function initNotes(cxt: ParseContext) {\n cxt.init(notes, {\n systems: new Map(),\n defaultSystem: {\n position: 'preserve',\n autonumber: false\n },\n definitions: [],\n currentId: 0\n });\n}\n\nfunction getSystem(cxt: ParseContext, name?: string) {\n const defs = cxt.get(notes)!;\n let system: NoteSystem;\n if (name) {\n if (!defs.systems.has(name)) {\n system = { ...defs.defaultSystem };\n defs.systems.set(name, system);\n } else {\n system = defs.systems.get(name)!;\n }\n } else {\n system = defs.defaultSystem;\n }\n return system;\n}\n\nconst notePositionSystem = new SystemModifierDefinition(\n 'note-position', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['type'], { optional: ['name'], trim: true });\n if (msgs) return msgs;\n if (args!.type != 'global' && args!.type != 'preserve')\n return [new InvalidArgumentMessage(nodes!.type.location,\n \"should be `preserve` or `global`\")];\n getSystem(cxt, args!.name).position = args!.type;\n return [];\n },\n});\n\nconst noteRenumberingSystem = new SystemModifierDefinition(\n 'note-renumbering', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n let { msgs, args, nodes } = bindArgs(node, ['type'], { optional: ['name'], trim: true });\n if (msgs) return msgs;\n if (args!.type != 'on' && args!.type != 'off')\n return [new InvalidArgumentMessage(nodes!.type.location,\n \"should be `preserve` or `global`\")];\n getSystem(cxt, args!.name).autonumber = args!.type == 'on';\n return [];\n },\n});\n\nconst noteMarkerInline = new InlineModifierDefinition<string>(\n 'note', ModifierSlotType.None,\n{\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['index']);\n if (msgs) return msgs;\n node.state = args?.index;\n return [];\n },\n});\n\nconst noteInline = new InlineModifierDefinition<string>(\n 'note-inline', ModifierSlotType.Normal,\n{\n roleHint: 'quote',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, [], { optional: ['index'] });\n if (msgs) return msgs;\n node.state = args?.index ?? '';\n return [];\n },\n beforeProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n const defs = cxt.get(notes)!;\n defs.definitions.push({\n system: '',\n id: defs.currentId,\n name: node.state,\n location: node.location,\n content: [{\n type: NodeType.Paragraph,\n location: {\n source: node.location.source,\n start: node.head.end,\n end: node.location.actualEnd ?? node.location.end\n },\n content: node.content\n }],\n });\n defs.currentId++;\n }\n return [];\n },\n});\n\nconst noteBlock = new BlockModifierDefinition<NoteDefinition>(\n 'note', ModifierSlotType.Normal,\n{\n roleHint: 'quote',\n prepareExpand(node, cxt) {\n let { msgs, args } = bindArgs(node, ['name'], { optional: ['system'], trim: true });\n if (msgs) return msgs;\n\n // TODO: check if this is sound in typing\n const content = stripNode(...node.content) as BlockEntity[];\n debug.trace(`add note: system=<${''}> name=${args!.name} @${node.location.start}`);\n debug.trace(`-->\\n`, debugPrint.node(...content));\n\n const defs = cxt.get(notes)!;\n const entry: NoteDefinition = {\n id: defs.currentId,\n system: args!.system ?? '',\n name: args!.name,\n location: node.location,\n content: content\n };\n defs.currentId++;\n defs.definitions.push(entry);\n node.state = entry;\n return [];\n },\n});\n\nexport const NoteBlocks = [noteBlock];\nexport const NoteInlines = [noteInline, noteMarkerInline];\nexport const NoteSystems = [notePositionSystem, noteRenumberingSystem];\n\nfunction makeNoteHTML(def: NoteDefinition, cxt: RenderContext<HTMLRenderType>) {\n return <section class='note' id={`note-id-${def.id}`}>\n <div class='note-name'>\n <p><a href={`#notemarker-id-${def.id}`}>{def.name}</a></p>\n </div>\n <div class='note-content'>\n {cxt.state.render(def.content, cxt)}\n </div>\n </section>\n}\n\nexport const NoteInlineRenderersHTML = [\n [noteMarkerInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n // find node definition\n const defs = cxt.parsedDocument.context.get(notes)!.definitions;\n const note = defs.findIndex((x) => /*x.position >= node.start &&*/ x.name == node.state);\n return <sup class='note' id={`notemarker-id-${note}`}>\n {note < 0\n ? `Not found: ${node.state}`\n : <a href={`#note-id-${note}`}>{node.state}</a>}\n </sup>;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n];\n\nexport const NoteBlockRenderersHTML = [\n [noteBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n const defs = cxt.parsedDocument.context.get(notes)!;\n const system = defs.systems.get(node.state.system) ?? defs.defaultSystem;\n if (system.position != 'preserve') return [];\n return makeNoteHTML(node.state, cxt);\n }] satisfies BlockRendererDefiniton<HTMLRenderType, NoteDefinition>,\n];\n\nexport const NotesFooterPlugin: HTMLComponentPlugin = (cxt) => {\n const defs = cxt.parsedDocument.context.get(notes)!;\n const items = cxt.parsedDocument.context.get(notes)!\n .definitions\n .filter((x) => (defs.systems.get(x.system) ?? defs.defaultSystem).position == 'global');\n if (items.length == 0) return undefined;\n return [\n <hr/>,\n <section class='notes-global'>\n {items.map((x) => makeNoteHTML(x, cxt))}\n </section>\n ];\n}\n","import { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../modifier\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const CodeBlock = new BlockModifierDefinition(\n 'code', ModifierSlotType.Preformatted,\n { roleHint: 'code' });\n\nexport const CodeInline = new InlineModifierDefinition(\n 'code', ModifierSlotType.Preformatted,\n { roleHint: 'code' });\n\nexport const CodeBlockRendererHTML =\n [CodeBlock, (node, cxt) =>\n <pre><code>{cxt.state.render(node.content, cxt)}</code></pre>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>;\n\nexport const CodeInlineRendererHTML =\n [CodeInline, (node, cxt) =>\n <span><code>{cxt.state.render(node.content, cxt)}</code></span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>;\n","import { ParagraphNode } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { onlyPermitSingleBlock, onlyPermitSimpleParagraphs } from \"../modifier-helper\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst quoteBlock = new BlockModifierDefinition(\n 'quote', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst epitaphBlock = new BlockModifierDefinition(\n 'epitaph', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst calloutBlock = new BlockModifierDefinition(\n 'callout', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst detailBlock = new BlockModifierDefinition(\n 'detail', ModifierSlotType.Normal,\n { roleHint: 'quote' });\n\nconst attributionBlock = new BlockModifierDefinition<boolean>(\n 'by', ModifierSlotType.Normal,\n {\n roleHint: 'quote',\n prepareExpand(node) {\n let msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n node.state = true;\n return [];\n },\n });\n\nexport const QuoteBlocks = [quoteBlock, epitaphBlock, calloutBlock, detailBlock, attributionBlock];\n\nexport const QuoteBlockRenderersHTML = [\n [quoteBlock, (node, cxt) =>\n <blockquote>{cxt.state.render(node.content, cxt)}</blockquote>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [epitaphBlock, (node, cxt) =>\n <blockquote class='epitaph'>{cxt.state.render(node.content, cxt)}</blockquote>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [detailBlock, (node, cxt) =>\n <div class='detail'>{cxt.state.render(node.content, cxt)}</div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [calloutBlock, (node, cxt) =>\n <aside>{cxt.state.render(node.content, cxt)}</aside>\n ] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [attributionBlock, (node, cxt) => {\n if (!node.state)\n return cxt.state.invalidBlock(node, 'bad format');\n let para = node.content[0] as ParagraphNode;\n return <p class='attribution'>{cxt.state.render(para.content, cxt)}</p>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, boolean>\n];\n","import { InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst emphasisInline = new InlineModifierDefinition(\n 'emphasis', ModifierSlotType.Normal,\n { roleHint: 'emphasis' });\n\nconst keywordInline = new InlineModifierDefinition(\n 'keyword', ModifierSlotType.Normal,\n { roleHint: 'keyword' });\n\nconst highlightInline = new InlineModifierDefinition(\n 'highlight', ModifierSlotType.Normal,\n { roleHint: 'highlight' });\n\nconst commentaryInline = new InlineModifierDefinition(\n 'commentary', ModifierSlotType.Normal,\n { roleHint: 'commentary' });\n\nconst sequenceInline = new InlineModifierDefinition(\n 'seq', ModifierSlotType.Normal,\n { roleHint: 'pre' });\n\nexport const InlineStyles = [emphasisInline, keywordInline, highlightInline, commentaryInline, sequenceInline];\n\nexport const InlineStyleRenderersHTML = [\n [emphasisInline, (node, cxt) =>\n <em>{cxt.state.render(node.content, cxt)}</em>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [keywordInline, (node, cxt) =>\n <b>{cxt.state.render(node.content, cxt)}</b>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [highlightInline, (node, cxt) =>\n <mark>{cxt.state.render(node.content, cxt)}</mark>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [commentaryInline, (node, cxt) =>\n <span class='commentary'>{cxt.state.render(node.content, cxt)}</span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [sequenceInline, (node, cxt) =>\n <span class='seq'>{cxt.state.render(node.content, cxt)}</span>\n ] satisfies InlineRendererDefiniton<HTMLRenderType>\n];\n","import { ParagraphNode } from \"../interface\";\nimport { ModifierSlotType, InlineModifierDefinition, BlockModifierDefinition } from \"../modifier\";\nimport { bindArgs, onlyPermitSimpleParagraphs, onlyPermitSingleBlock } from \"../modifier-helper\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst rubyInline = new InlineModifierDefinition<string>(\n 'ruby', ModifierSlotType.Normal,\n {\n roleHint: undefined,\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['text']);\n if (msgs) return msgs;\n node.state = args!.text;\n return [];\n },\n });\n\nconst linkInline = new InlineModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nconst tabInline = new InlineModifierDefinition<string>(\n 'tab', ModifierSlotType.None);\n\nconst styleBlock = new BlockModifierDefinition<string>(\n 'style', ModifierSlotType.Normal,\n {\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['style']);\n if (msgs) return msgs;\n node.state = args!.style;\n return [];\n },\n });\n\nconst breakBlock = new BlockModifierDefinition<string>(\n 'break', ModifierSlotType.None);\n\nconst linkBlock = new BlockModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nconst imageBlock = new BlockModifierDefinition<string>(\n 'image', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let { msgs, args } = bindArgs(node, ['url']);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node, {optional: true});\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n node.state = args!.url;\n return [];\n },\n });\n\nexport const MiscInlines = [rubyInline, linkInline, tabInline];\n\nexport const MiscBlocks = [styleBlock, breakBlock, linkBlock, imageBlock];\n\nexport const MiscInlineRenderersHTML = [\n [rubyInline, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidInline(node, 'bad format')\n : <ruby>\n {cxt.state.render(node.content, cxt)}\n <rt>{node.state}</rt>\n </ruby>\n ] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [linkInline, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidInline(node, 'bad format')\n : <a href={encodeURI(node.state)}>\n {cxt.state.render(node.content, cxt)}\n </a>\n ] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [tabInline, () => new Text('\\t')] satisfies InlineRendererDefiniton<HTMLRenderType>,\n];\n\nexport const MiscBlockRenderersHTML = [\n [styleBlock, (node, cxt) =>\n node.state === undefined\n ? cxt.state.invalidBlock(node, 'bad format')\n : <div class={`emmmstyle-${node.state}`} style=\"display:contents\">\n {cxt.state.render(node.content, cxt)}\n </div>\n ] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [breakBlock, () => <hr/>] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [linkBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n const content = cxt.state.render(node.content, cxt);\n return <a href={encodeURI(node.state)}>\n {content.childElementCount > 0 ? content : node.state}\n </a>;\n }\n ] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [imageBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n let transformed: string | undefined;\n try {\n transformed = cxt.config.options.transformAsset(node.state);\n } catch {\n return cxt.state.invalidBlock(node, 'unable to transform asset');\n }\n return <figure>\n {transformed\n ? <img src={transformed} data-original-src={node.state} />\n : <img src={node.state} />}\n {node.content.length > 0\n ? <figcaption>\n {cxt.state.render((node.content[0] as ParagraphNode).content, cxt)}\n </figcaption>\n : []}\n </figure>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>\n];\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity } from \"../interface\";\nimport { BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { ParseContext } from \"../parser-config\";\nimport { BlockRendererDefiniton, InlineRendererDefiniton } from \"../renderer\";\nimport { cloneNode, stripNode } from \"../node-util\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nconst table = Symbol();\n\ndeclare module '../parser-config' {\n export interface ParseContextStoreDefinitions {\n [table]?: {\n current?: TableDefiniton\n }\n }\n}\n\ntype TableDefiniton = {\n status: 'header' | 'body' | 'footer',\n header: BlockEntity[],\n body: BlockEntity[],\n footer: BlockEntity[]\n};\n\n\nexport function initTable(cxt: ParseContext) {\n cxt.init(table, {\n current: undefined\n });\n}\n\nconst tableBlock = new BlockModifierDefinition<TableDefiniton>(\n 'table', ModifierSlotType.Normal,\n{\n beforeParseContent(node, cxt, immediate) {\n if (!immediate || node.state) return [];\n const t = cxt.get(table)!;\n if (t.current) return [\n new EntityNotAllowedMessage(node.location, 'tables cannot be nested')];\n\n node.state = {\n status: 'header',\n header: [], body: [], footer: []\n };\n t.current = node.state;\n debug.trace('entering table');\n return [];\n },\n afterParseContent(_node, cxt) {\n cxt.get(table)!.current = undefined;\n debug.trace('leaving table');\n return []\n },\n});\n\nconst tableRowBlock = new BlockModifierDefinition(\n 'table-row', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'rows can only appear in tables')];\n\n const newNode = stripNode(cloneNode(node)) as BlockEntity[];\n debug.info('pushing table row\\n', debugPrint.node(...newNode));\n if (t.status == 'header') t.header.push(...newNode);\n if (t.status == 'body') t.body.push(...newNode);\n if (t.status == 'footer') t.footer.push(...newNode);\n return [];\n },\n});\n\nconst tableSeparatorBlock = new BlockModifierDefinition(\n 'table-separator', ModifierSlotType.None,\n{\n prepareExpand(node, cxt) {\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'separators can only appear in tables')];\n\n if (t.status == 'header') t.status = 'body';\n else if (t.status == 'body') t.status = 'footer';\n else if (t.status == 'footer') {}; // do nothing\n\n debug.trace('table status ->', t.status);\n return [];\n },\n expand() {\n return [];\n },\n})\n\nconst tableCellBlock = new BlockModifierDefinition(\n 'table-cell', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'cells can only appear in tables')];\n return [];\n }\n});\n\nconst tableCellInline = new InlineModifierDefinition(\n 'table-cell', ModifierSlotType.Normal,\n{\n beforeProcessExpansion(node, cxt, immediate) {\n if (!immediate) return [];\n const t = cxt.get(table)!.current;\n if (!t) return [\n new EntityNotAllowedMessage(node.location, 'cells can only appear in tables')];\n return [];\n }\n});\n\nexport const TableBlocks = [tableBlock, tableRowBlock, tableCellBlock, tableSeparatorBlock];\nexport const TableInlines = [tableCellInline];\n\nexport const TableBlockRenderers = [\n [tableBlock, (node, cxt) => {\n const t = node.state;\n if (!t) return cxt.state.invalidBlock(node, 'bad format');\n return <table>\n <thead>{cxt.state.render(t.header, cxt)}</thead>\n <tbody>{cxt.state.render(t.body, cxt)}</tbody>\n <tfoot>{cxt.state.render(t.footer, cxt)}</tfoot>\n </table>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, TableDefiniton>,\n\n [tableRowBlock, (node, cxt) => {\n return <tr>{cxt.state.render(node.content, cxt)}</tr>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n\n [tableCellBlock, (node, cxt) => {\n return <td>{cxt.state.render(node.content, cxt)}</td>;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n];\n\nexport const TableInlineRenderers = [\n [tableCellInline, (node, cxt) => {\n return <td>{cxt.state.render(node.content, cxt)}</td>;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n];\n","import { NodeType } from \"../interface\";\nimport { BlockModifierDefinition, ModifierSlotType } from \"../modifier\";\nimport { BlockRendererDefiniton } from \"../renderer\";\nimport { HTMLRenderType } from \"./html-renderer\";\n\nexport const GalleryBlock = new BlockModifierDefinition(\n 'gallery', ModifierSlotType.Normal,\n{});\n\nexport const GalleryBlockRendererHTML = [GalleryBlock,\n (node, cxt) => {\n const content = (node.content[0].type == NodeType.Group && node.content.length == 1)\n ? node.content[0].content\n : node.content;\n\n return <ul class='gallery'>\n {content.map((x) => <li>\n {cxt.state.render([x], cxt)}\n </li>)}\n </ul>;\n }\n] satisfies BlockRendererDefiniton<HTMLRenderType>;\n","import { BuiltinConfiguration } from \"../builtin/builtin\";\nimport { BulletBlocks } from \"./bullets\";\nimport { HeadingBlocks, initHeadings } from \"./headings\";\nimport { initNotes, NoteBlocks, NoteInlines, NoteSystems } from \"./notes\";\nimport { CodeBlock, CodeInline } from \"./code\";\nimport { QuoteBlocks } from \"./quotes\";\nimport { InlineStyles } from \"./inline-styles\";\nimport { MiscBlocks, MiscInlines } from \"./misc\";\nimport { Configuration, ReadonlyConfiguration } from \"../parser-config\";\nimport { initTable, TableBlocks, TableInlines } from \"./table\";\nimport { GalleryBlock } from \"./gallery\";\n\nlet config = Configuration.from(BuiltinConfiguration);\nconfig.initializers.push(initNotes, initHeadings, initTable);\nconfig.blockModifiers.add(\n ...HeadingBlocks,\n ...BulletBlocks,\n CodeBlock,\n ...QuoteBlocks,\n ...MiscBlocks,\n ...NoteBlocks,\n ...TableBlocks,\n GalleryBlock\n);\nconfig.inlineModifiers.add(\n CodeInline,\n ...InlineStyles,\n ...MiscInlines,\n ...NoteInlines,\n ...TableInlines,\n);\nconfig.systemModifiers.add(\n ...NoteSystems,\n);\n\nexport const DefaultConfiguration: ReadonlyConfiguration = Object.freeze(config);\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, NodeType } from \"../interface\";\nimport { RenderContext, RenderConfiguration, ReadonlyRenderConfiguration } from \"../renderer\";\nimport { BulletBlockRenderersHTML } from \"./bullets\";\nimport { CodeBlockRendererHTML, CodeInlineRendererHTML } from \"./code\";\nimport { HeadingBlockRenderersHTML } from \"./headings\";\nimport { InlineStyleRenderersHTML } from \"./inline-styles\";\nimport { MiscBlockRenderersHTML, MiscInlineRenderersHTML } from \"./misc\";\nimport { NoteBlockRenderersHTML, NoteInlineRenderersHTML, NotesFooterPlugin } from \"./notes\";\nimport { QuoteBlockRenderersHTML } from \"./quotes\";\nimport { TableBlockRenderers, TableInlineRenderers } from \"./table\";\nimport { GalleryBlockRendererHTML } from \"./gallery\";\nimport { useDocument } from \"minimal-jsx-runtime/jsx-runtime\";\n\nexport type HTMLRendererOptions = {\n document: Document,\n headPlugins: HTMLComponentPlugin[];\n headerPlugins: HTMLComponentPlugin[];\n footerPlugins: HTMLComponentPlugin[];\n postprocessPlugins: HTMLPostprocessPlugin[];\n transformAsset: (id: string) => string | undefined;\n}\n\nexport type HTMLRenderType = {\n state: HTMLRenderState,\n options: HTMLRendererOptions,\n document: Document,\n return: Node | Node[],\n};\n\nexport type HTMLRenderPlugin =\n (elem: BlockEntity | InlineEntity, cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLComponentPlugin =\n (cxt: RenderContext<HTMLRenderType>) => Node | Node[] | undefined;\n\nexport type HTMLPostprocessPlugin =\n (cxt: RenderContext<HTMLRenderType>, output: Document) => void;\n\nexport class HTMLRenderState {\n title: string = '';\n stylesheet = ''; // FIXME: very unsafe!\n cssVariables = new Map<string, string>;\n\n invalidBlock(node: BlockEntity, msg: string) {\n let name = NodeType[node.type];\n if (node.type === NodeType.BlockModifier)\n name += ` (${node.mod.name})`;\n // TODO: include details\n return <details class='invalid'>\n <summary>Invalid {name}</summary>\n <i>{msg}</i>\n <pre>{debugPrint.node(node)}</pre>\n </details>;\n }\n\n invalidInline(node: InlineEntity, msg: string) {\n let name = NodeType[node.type];\n if (node.type === NodeType.InlineModifier)\n name += ` (${node.mod.name})`;\n // TODO: include details\n return <details class='invalid'>\n <summary>Invalid {name}</summary>\n <i>{msg}</i>\n <pre>{debugPrint.node(node)}</pre>\n </details>;\n }\n\n render(elems: (BlockEntity | InlineEntity)[], cxt: RenderContext<HTMLRenderType>) {\n const document = cxt.config.options.document;\n useDocument(document);\n\n let fragment = document.createDocumentFragment();\n elems\n .flatMap((x) => cxt.renderEntity(x))\n .flat()\n .forEach((x) => fragment.appendChild(x));\n return fragment;\n }\n}\n\nconst htmlConfig =\n new RenderConfiguration<HTMLRenderType>(\n{\n document: globalThis.window.document,\n headPlugins: [],\n headerPlugins: [],\n footerPlugins: [NotesFooterPlugin],\n postprocessPlugins: [],\n transformAsset: () => undefined,\n // postprocessPlugins: [],\n},\n(results, cxt) => {\n // TODO: seriously...\n let styles = cxt.state.stylesheet.replaceAll(/var\\(--(.*?)\\)/g,\n (m, c) => cxt.state.cssVariables.get(c) ?? m);\n let doc = document.implementation.createHTMLDocument(cxt.state.title);\n doc.head.append(\n <meta charset=\"UTF-8\" />,\n <style>{styles}</style>,\n ...cxt.config.options.headPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .flat()\n );\n doc.body.append(\n <section class=\"article-container\">\n <section class=\"article-body\">\n {cxt.config.options.headerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)}\n {results}\n {cxt.config.options.footerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)}\n </section>\n </section>\n );\n for (const p of cxt.config.options.postprocessPlugins) {\n p(cxt, doc);\n }\n return doc;\n});\n\nhtmlConfig.paragraphRenderer = (node, cxt) =>\n <p>{node.content.flatMap((x) => cxt.renderEntity(x))}</p>;\n\nhtmlConfig.textRenderer = (node, cxt) => {\n switch (node.type) {\n case NodeType.Preformatted:\n return new Text(node.content.text);\n case NodeType.Text:\n case NodeType.Escaped:\n const split = node.content.split('\\n');\n const result = [];\n for (let i = 0; i < split.length; i++) {\n result.push(new Text(split[i]));\n if (i < split.length - 1)\n result.push(<br/>);\n }\n return result;\n default:\n return debug.never(node);\n }\n}\n\nhtmlConfig.undefinedBlockRenderer = (node, cxt) => {\n return cxt.state.invalidBlock(node, `No renderer defined! for ${node.mod.name}`);\n}\n\nhtmlConfig.undefinedInlineRenderer = (node, cxt) => {\n return cxt.state.invalidInline(node, `No renderer defined! for ${node.mod.name}`);\n}\n\nhtmlConfig.addBlockRenderer(\n ...HeadingBlockRenderersHTML,\n ...BulletBlockRenderersHTML,\n CodeBlockRendererHTML,\n ...QuoteBlockRenderersHTML,\n ...MiscBlockRenderersHTML,\n ...NoteBlockRenderersHTML,\n ...TableBlockRenderers,\n GalleryBlockRendererHTML\n);\n\nhtmlConfig.addInlineRenderer(\n CodeInlineRendererHTML,\n ...InlineStyleRenderersHTML,\n ...MiscInlineRenderersHTML,\n ...NoteInlineRenderersHTML,\n ...TableInlineRenderers,\n)\n\nexport const HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType> = htmlConfig;\n","import { debug, DebugLevel } from './debug';\n\nexport * from './source';\nexport * from './interface';\nexport * from './modifier';\nexport * from './scanner';\n// export * from './module';\n\nexport * from './parser';\nexport * from './parser-config';\nexport * from './renderer';\nexport * as messages from './messages';\nexport * as helper from './modifier-helper';\nexport * from './node-util';\n\nexport * from './builtin/builtin';\nexport * from './default/default';\nexport * from './default/html-renderer';\nexport { DebugLevel } from './debug';\nexport { debugPrint } from './debug-print';\n\nexport const emmmVersion = '0.0.6';\n\nexport function setDebugLevel(level: DebugLevel) {\n debug.level = level;\n}\n"],"mappings":"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"}
|