@the_dissidents/libemmm 0.0.5 → 0.0.7
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/README.md +28 -15
- package/dist/index.d.mts +75 -21
- package/dist/index.d.ts +75 -21
- package/dist/index.js +259 -78
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +257 -78
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/src/builtin/builtin.d.ts +0 -2
- package/dist/src/builtin/builtin.js +0 -18
- package/dist/src/builtin/builtin.js.map +0 -1
- package/dist/src/builtin/define-modifier.d.ts +0 -12
- package/dist/src/builtin/define-modifier.js +0 -129
- package/dist/src/builtin/define-modifier.js.map +0 -1
- package/dist/src/builtin/define-shorthand.d.ts +0 -14
- package/dist/src/builtin/define-shorthand.js +0 -178
- package/dist/src/builtin/define-shorthand.js.map +0 -1
- package/dist/src/builtin/internal.d.ts +0 -41
- package/dist/src/builtin/internal.js +0 -106
- package/dist/src/builtin/internal.js.map +0 -1
- package/dist/src/builtin/module.d.ts +0 -16
- package/dist/src/builtin/module.js +0 -156
- package/dist/src/builtin/module.js.map +0 -1
- package/dist/src/builtin/slot.d.ts +0 -7
- package/dist/src/builtin/slot.js +0 -136
- package/dist/src/builtin/slot.js.map +0 -1
- package/dist/src/builtin/var.d.ts +0 -12
- package/dist/src/builtin/var.js +0 -103
- package/dist/src/builtin/var.js.map +0 -1
- package/dist/src/debug-print.d.ts +0 -14
- package/dist/src/debug-print.js +0 -113
- package/dist/src/debug-print.js.map +0 -1
- package/dist/src/debug.d.ts +0 -15
- package/dist/src/debug.js +0 -47
- package/dist/src/debug.js.map +0 -1
- package/dist/src/default/bullets.d.ts +0 -4
- package/dist/src/default/bullets.js +0 -39
- package/dist/src/default/bullets.js.map +0 -1
- package/dist/src/default/code.d.ts +0 -6
- package/dist/src/default/code.js +0 -13
- package/dist/src/default/code.js.map +0 -1
- package/dist/src/default/default.d.ts +0 -2
- package/dist/src/default/default.js +0 -20
- package/dist/src/default/default.js.map +0 -1
- package/dist/src/default/headings.d.ts +0 -20
- package/dist/src/default/headings.js +0 -125
- package/dist/src/default/headings.js.map +0 -1
- package/dist/src/default/html-renderer.d.ts +0 -26
- package/dist/src/default/html-renderer.js +0 -108
- package/dist/src/default/html-renderer.js.map +0 -1
- package/dist/src/default/inline-styles.d.ts +0 -4
- package/dist/src/default/inline-styles.js +0 -24
- package/dist/src/default/inline-styles.js.map +0 -1
- package/dist/src/default/misc.d.ts +0 -6
- package/dist/src/default/misc.js +0 -112
- package/dist/src/default/misc.js.map +0 -1
- package/dist/src/default/notes.d.ts +0 -28
- package/dist/src/default/notes.js +0 -109
- package/dist/src/default/notes.js.map +0 -1
- package/dist/src/default/quotes.d.ts +0 -4
- package/dist/src/default/quotes.js +0 -36
- package/dist/src/default/quotes.js.map +0 -1
- package/dist/src/default/vars.d.ts +0 -2
- package/dist/src/default/vars.js +0 -39
- package/dist/src/default/vars.js.map +0 -1
- package/dist/src/index.d.ts +0 -13
- package/dist/src/index.js +0 -58
- package/dist/src/index.js.map +0 -1
- package/dist/src/interface.d.ts +0 -174
- package/dist/src/interface.js +0 -93
- package/dist/src/interface.js.map +0 -1
- package/dist/src/messages.d.ts +0 -165
- package/dist/src/messages.js +0 -279
- package/dist/src/messages.js.map +0 -1
- package/dist/src/modifier-helper.d.ts +0 -6
- package/dist/src/modifier-helper.js +0 -113
- package/dist/src/modifier-helper.js.map +0 -1
- package/dist/src/parser-config.d.ts +0 -44
- package/dist/src/parser-config.js +0 -67
- package/dist/src/parser-config.js.map +0 -1
- package/dist/src/parser.d.ts +0 -3
- package/dist/src/parser.js +0 -652
- package/dist/src/parser.js.map +0 -1
- package/dist/src/renderer.d.ts +0 -49
- package/dist/src/renderer.js +0 -81
- package/dist/src/renderer.js.map +0 -1
- package/dist/src/scanner.d.ts +0 -22
- package/dist/src/scanner.js +0 -50
- package/dist/src/scanner.js.map +0 -1
- package/dist/src/temp.d.ts +0 -1
- package/dist/src/temp.js +0 -108
- package/dist/src/temp.js.map +0 -1
- package/dist/src/typing-helper.d.ts +0 -7
- package/dist/src/typing-helper.js +0 -3
- package/dist/src/typing-helper.js.map +0 -1
- package/dist/src/util.d.ts +0 -29
- package/dist/src/util.js +0 -177
- package/dist/src/util.js.map +0 -1
- package/dist/tests/advanced_syntax.test.d.ts +0 -1
- package/dist/tests/advanced_syntax.test.js +0 -180
- package/dist/tests/advanced_syntax.test.js.map +0 -1
- package/dist/tests/basic_syntax.test.d.ts +0 -1
- package/dist/tests/basic_syntax.test.js +0 -431
- package/dist/tests/basic_syntax.test.js.map +0 -1
- package/dist/tests/default/headings.test.d.ts +0 -1
- package/dist/tests/default/headings.test.js +0 -90
- package/dist/tests/default/headings.test.js.map +0 -1
- package/dist/tests/define_block.test.d.ts +0 -1
- package/dist/tests/define_block.test.js +0 -209
- package/dist/tests/define_block.test.js.map +0 -1
- package/dist/tests/define_inline.test.d.ts +0 -1
- package/dist/tests/define_inline.test.js +0 -289
- package/dist/tests/define_inline.test.js.map +0 -1
- package/dist/tests/modules.test.d.ts +0 -1
- package/dist/tests/modules.test.js +0 -137
- package/dist/tests/modules.test.js.map +0 -1
- package/dist/tests/shorthands.test.d.ts +0 -1
- package/dist/tests/shorthands.test.js +0 -79
- package/dist/tests/shorthands.test.js.map +0 -1
- package/dist/tsup.config.d.ts +0 -2
- package/dist/tsup.config.js +0 -12
- package/dist/tsup.config.js.map +0 -1
- package/dist/vitest.config.d.ts +0 -2
- package/dist/vitest.config.js +0 -17
- package/dist/vitest.config.js.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interface.ts","../src/util.ts","../src/debug.ts","../src/scanner.ts","../src/debug-print.ts","../src/messages.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/module.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts","../src/default/bullets.ts","../src/default/headings.ts","../src/default/notes.ts","../src/default/code.ts","../src/default/quotes.ts","../src/default/inline-styles.ts","../src/default/misc.ts","../src/default/vars.ts","../src/default/default.ts","../src/default/html-renderer.ts","../src/index.ts"],"sourcesContent":["import { ParseContext } from \"./parser-config\";\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 SourceDescriptor = {\n // FIXME: include source information so that messages can be printed correctly!\n name: string\n}\n\nexport type LocationRange = {\n original?: LocationRange\n source: SourceDescriptor,\n start: number,\n end: number,\n\n // FIXME: eh...\n actualEnd?: number\n};\n\nexport enum NodeType {\n Root,\n Paragraph,\n Preformatted,\n Text,\n Escaped,\n SystemModifier,\n InlineModifier,\n BlockModifier,\n Interpolation\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 SystemModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: never[]\n};\n\nexport type BlockModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type RootNode = {\n type: NodeType.Root\n content: BlockEntity[],\n source: SourceDescriptor\n}\n\nexport type ModifierNode<T = any> = \n BlockModifierNode<T> | InlineModifierNode<T> | SystemModifierNode<T>;\nexport type BlockEntity = \n 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\nexport enum ModifierSlotType {\n Normal,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted,\n /** No content slot */\n None\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 {\n if (args) Object.assign(this, args);\n }\n\n roleHint?: string;\n /**\n * If true, any modifier encountered in the content of it will *not* be expanded, *unless* that modifier is `alwaysTryExpand`.\n */\n delayContentExpansion = false;\n /**\n * If true, such a modifier will always be expanded whenever it is encountered, *even if* contained in a modifier with `delayContentExpansion`.\n */\n alwaysTryExpand = false;\n\n /** Called before the modifier's content is parsed. */\n beforeParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called after the modifier's content is parsed. */\n afterParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n \n /** Called before reparsing of the expansion. */\n beforeProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n /** Called before reparsing of the expansion. */\n afterProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n prepareExpand?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n expand?: (node: TNode, cxt: ParseContext, immediate: boolean) => TEntity[] | undefined;\n}\n\nexport class BlockModifierDefinition<TState> \n extends ModifierBase<BlockModifierNode<TState>, BlockEntity> {}\n\nexport class InlineModifierDefinition<TState> \n extends ModifierBase<InlineModifierNode<TState>, InlineEntity> {}\n\nexport class SystemModifierDefinition<TState> \n extends ModifierBase<SystemModifierNode<TState>, never> {}\n\nexport class ArgumentInterpolatorDefinition {\n constructor(\n public readonly name: string,\n public readonly postfix: string,\n args?: Partial<ArgumentInterpolatorDefinition>) \n {\n if (args) Object.assign(this, args);\n }\n\n alwaysTryExpand = false;\n expand?: (content: string, cxt: ParseContext, immediate: boolean) => string | undefined;\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>>;","import { debug } from \"./debug\";\nimport { DocumentNode, LocationRange, ModifierArgument, NodeType } from \"./interface\";\n\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\nexport function linePositions(src: string): number[] {\n let result = [0];\n [...src].forEach((x, i) => {\n if (x == '\\n') result.push(i+1);\n });\n result.push(Infinity);\n return result;\n}\n\nexport type CloneNodeOptions = {\n newLocation?: LocationRange,\n withState?: boolean\n}\n\nconst cloneArgument = (arg: ModifierArgument, options: CloneNodeOptions): ModifierArgument => ({\n location: clonePosition(arg.location, options),\n content: arg.content.map((ent) => {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n return structuredClone(ent);\n case NodeType.Interpolation:\n return {\n type: ent.type,\n location: clonePosition(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});\n\nfunction clonePosition(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(node: DocumentNode, options: CloneNodeOptions = {}): DocumentNode \n{\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n location: clonePosition(node.location, options),\n type: node.type as any,\n mod: node.mod,\n state: options.withState ? node.state : undefined,\n head: structuredClone(node.head),\n arguments: node.arguments.map((x) => cloneArgument(x, options)),\n content: node.content.map((x) => cloneNode(x, options) as any),\n expansion: node.expansion ? cloneNodes(node.expansion, options) as any : undefined\n };\n case NodeType.Root:\n return {\n type: node.type as any,\n source: node.source,\n content: node.content.map((x) => cloneNode(x, options) as any)\n }\n case NodeType.Paragraph:\n return {\n type: node.type as any,\n location: clonePosition(node.location, options),\n content: node.content.map((x) => cloneNode(x, options) as any)\n }\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return structuredClone(node);\n default:\n return debug.never(node);\n }\n}\n\nexport function cloneNodes(\n nodes: readonly DocumentNode[], options: CloneNodeOptions = {}\n): DocumentNode[] {\n return nodes.map((x) => cloneNode(x, options));\n}\n\n/** Warning: modifies the original nodes */\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.Paragraph:\n case NodeType.Root:\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 { 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 { SourceDescriptor } from \"./interface\";\nimport { assert } from \"./util\";\n\nexport class SimpleScanner implements Scanner {\n private pos = 0;\n constructor(\n private src: string,\n public readonly source: SourceDescriptor = {name: '<input>'}) {}\n\n position(): number {\n return this.pos;\n }\n\n isEOF(): boolean {\n return this.pos >= this.src.length;\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: SourceDescriptor;\n\n position(): number;\n isEOF(): boolean;\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, DocumentNode, Message, MessageSeverity, BlockModifierDefinition, BlockShorthand, InlineModifierDefinition, InlineShorthand, ModifierSlotType, BlockEntity, InlineEntity, LocationRange, SourceDescriptor } from \"./interface\";\nimport { Document } from \"./parser-config\";\nimport { linePositions } from \"./util\";\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: (m: Message, source?: string, descriptor?: SourceDescriptor) => \n debugPrintMsg(m, descriptor, source),\n\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.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 args = node.arguments.map((x, i) => `\\n${prefix} (${i})@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n if (node.content.length > 0) {\n result += ` id=${node.mod.name}${args}>\\n` + debugPrintNodes(node.content, prefix) + `\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n } else result += `-${node.location.end} id=${node.mod.name}${args} />`;\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 debugPrintMsg(m: Message, descriptor?: SourceDescriptor, source?: string) {\n let pos = (pos: number) => `@${pos}`;\n if (source) {\n const lines = linePositions(source);\n pos = (pos: number) => {\n let line = -1, linepos = 0;\n for (let i = 1; i < lines.length; i++) {\n if (lines[i] > pos) {\n line = i;\n linepos = lines[i - 1];\n break;\n }\n }\n return `l${line}c${pos - linepos + 1}`;\n }\n }\n\n let loc: LocationRange | undefined = m.location;\n let result = `at ${pos(loc.start)}-${pos(loc.end)}: ${MessageSeverity[m.severity]}[${m.code}]: ${m.info}`;\n if (descriptor && m.location.source !== descriptor) {\n result += `\\nwarning: source descriptor mismatch: ${m.location.source.name}`\n }\n while (loc = loc.original) {\n let d = loc.source !== m.location.source ? `(in ${loc.source.name}) ` : '';\n result += `\\n---> original at: ${d}${pos(loc.start)}-${pos(loc.end)}`;\n }\n return result;\n}\n\nfunction debugDumpDocument(doc: Document, source: string): string {\n let root = debugPrint.node(...doc.root.content);\n let msgs = doc.messages.map((x) => debugPrintMsg(x, doc.root.source, source)).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}'; did you forget to escape it?`; };\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\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 ContentShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(location: LocationRange) {\n super(3, MessageSeverity.Warning, location, \n 'the content 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 { RootNode, Message, BlockModifierDefinition, InlineModifierDefinition, SystemModifierDefinition, ArgumentInterpolatorDefinition, BlockShorthand, InlineShorthand } from \"./interface\";\nimport { assert, cloneNode, ReadonlyNameManager, NameManager, stripNode } from \"./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\n constructor(\n public config: Configuration,\n public variables = new Map<string, string>) {\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\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\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 reparseDepthLimit: number;\n}\n\nexport class Configuration implements ReadonlyConfiguration {\n initializers: ((cxt: ParseContext) => void)[] = [];\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 reparseDepthLimit = 10;\n\n static from(from: ReadonlyConfiguration) {\n let config = new Configuration();\n config.initializers = [...from.initializers];\n config.reparseDepthLimit = from.reparseDepthLimit;\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, BlockModifierDefinition, BlockModifierNode, EscapedNode, InlineEntity, InlineModifierDefinition, InlineModifierNode, Message, ModifierArgument, ModifierSlotType, ParagraphNode, LocationRange, PreNode, RootNode, ArgumentEntity, ModifierNode, SystemModifierDefinition, SystemModifierNode, NodeType } from \"./interface\";\nimport { ContentShouldBeOnNewlineMessage, ExpectedMessage, ReachedRecursionLimitMessage, UnknownModifierMessage, UnnecessaryNewlineMessage } 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 GROUP_BEGIN = ':--';\nconst GROUP_END = '--:';\n\nconst MODIFIER_BLOCK_OPEN = '[.';\nconst MODIFIER_CLOSE_SIGN = ']';\nconst MODIFIER_END_SIGN = ';';\n\nconst MODIFIER_INLINE_OPEN = '[/';\nconst MODIFIER_INLINE_END_TAG = '[;]';\n\nconst MODIFIER_SYSTEM_OPEN = '[-';\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 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: BlockModifierNode<unknown> | SystemModifierNode<unknown>) {\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\nclass Parser {\n private emit: EmitEnvironment;\n private delayDepth = 0;\n private groupDepth = 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 #defs<Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>(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.reparseDepthLimit) 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.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) {\n this.#expandArgument(arg);\n // if (!arg.expansion) debug.trace('expand arg failed');\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 if (node.mod.beforeParseContent)\n this.emit.message(...node.mod.beforeParseContent(node as any, this.cxt, immediate));\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 if (node.mod.afterParseContent)\n this.emit.message(...node.mod.afterParseContent(node as any, this.cxt, immediate));\n }\n\n if (node.mod.prepareExpand)\n this.emit.message(...node.mod.prepareExpand(node as any, this.cxt, immediate));\n if (node.mod.expand) {\n node.expansion = node.mod.expand(node as any, this.cxt, immediate);\n if (!node.expansion) {\n // debug.trace('manually delaying expansion of', node.mod.name);\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 const expansion = node.expansion ?? node.content;\n if (expansion.length == 0) return true;\n if (node.mod.beforeProcessExpansion)\n this.emit.message(...node.mod.beforeProcessExpansion(node as any, this.cxt, immediate));\n\n let ok = this.#reparse(expansion, depth);\n\n if (node.mod.afterProcessExpansion)\n this.emit.message(...node.mod.afterProcessExpansion(node as any, this.cxt, immediate));\n if (!ok && depth == 0) {\n const limit = this.cxt.config.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 ContentShouldBeOnNewlineMessage(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\n private BLOCK_ENTITY() {\n assert(!this.scanner.isEOF());\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\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('\\\\'))\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\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 || (!grouped && this.scanner.accept('\\n'))) break;\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),\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 if (this.scanner.accept(GROUP_BEGIN)) {\n this.groupDepth++;\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept(GROUP_END)) {\n this.groupDepth--;\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() - d.name.length;\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, headEnd),\n location: this.#locFrom(posStart, headEnd),\n arguments: args,\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 (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 {\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\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('\\\\')) {\n if (this.scanner.isEOF()) {\n this.emit.addString('\\\\');\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 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) && this.groupDepth > 0)\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(':'))\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('\\\\')) {\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString('\\\\');\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 private ARGUMENTS(): ModifierArgument[] {\n // optionally accept semicolon before first argument\n const firstSemicolon = this.scanner.accept(':');\n // don't eat whites if there is a first semicolon\n if (!firstSemicolon) this.WHITESPACES_OR_NEWLINES();\n\n const list: ModifierArgument[] = [];\n let end = false;\n while (!end) {\n const [arg, ok] = this.ARGUMENT_CONTENT();\n if (!ok) {\n end = true;\n // if we haven't parsed anything so far: if there is no first semicolon, there's no arguments; otherwise, there is a single empty argument\n if (list.length == 0 && arg.content.length == 0 && !firstSemicolon)\n break;\n }\n list.push(arg);\n }\n return list;\n }\n}\n\nexport function parse(scanner: Scanner, cxt: ParseContext) {\n return new Parser(scanner, cxt).parse();\n}\n","import { debug } from \"./debug\";\nimport { BlockEntity, InlineEntity, NodeType, ParagraphNode, TextNode, PreNode, EscapedNode, BlockModifierNode, InlineModifierNode, BlockModifierDefinition, InlineModifierDefinition } from \"./interface\";\nimport { Document, ParseContext } from \"./parser-config\";\n\nexport type RendererType<TState, TReturn, TOptions = undefined> = {\n state: TState;\n return: TReturn;\n options: TOptions;\n};\n\ntype AnyRendererType = RendererType<any, any, any>;\n\ntype getState<Type> = Type extends RendererType<infer T, any, any> ? T : never;\ntype getReturn<Type> = Type extends RendererType<any, infer T, any> ? T : never;\ntype getOptions<Type> = Type extends RendererType<any, any, infer T> ? T : never;\n\nexport type NodeRenderer<Type extends AnyRendererType, TNode> = (node: TNode, cxt: RenderContext<Type>) => getReturn<Type>;\n\nexport type NodeRendererDefinition<Type extends AnyRendererType, TNode, TDef> = [def: TDef, renderer: NodeRenderer<Type, TNode>];\n\nexport class RenderContext<Type extends AnyRendererType> {\n renderEntity(node: BlockEntity | InlineEntity): getReturn<Type> | undefined {\n switch (node.type) {\n case NodeType.Paragraph:\n return this.config.paragraphRenderer?.(node, this);\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return this.config.textRenderer?.(node, this);\n case NodeType.InlineModifier:\n let ir = this.config.inlineRenderers.get(node.mod);\n if (ir) return ir(node, this);\n return this.config.undefinedInlineRenderer?.(node, this);\n case NodeType.BlockModifier:\n let br = this.config.blockRenderers.get(node.mod);\n if (br) return br(node, this);\n return this.config.undefinedBlockRenderer?.(node, this);\n case NodeType.SystemModifier:\n return undefined;\n default:\n return debug.never(node);\n }\n }\n\n constructor(\n public readonly config: RenderConfiguration<Type>,\n public readonly parseContext: ParseContext,\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>) => getReturn<Type>;\n\n render(doc: Document, state: getState<Type>): getReturn<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: (results: getReturn<Type>[], cxt: RenderContext<Type>) => getReturn<Type>) { }\n\n render(doc: Document, state: getState<Type>): getReturn<Type> {\n let cxt = new RenderContext(this, doc.context, state);\n let results = doc.toStripped()\n .root.content\n .map((x) => cxt.renderEntity(x))\n // not exactly sure why 'as' is needed here\n .filter((x) => (x !== undefined)) as getReturn<Type>[];\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 { ModifierNode, Message, BlockModifierNode, NodeType, BlockEntity, SystemModifierNode, InlineEntity } from \"./interface\";\nimport { ArgumentCountMismatchMessage, CannotExpandArgumentMessage, EntityNotAllowedMessage, MultipleBlocksNotPermittedMessage, OnlySimpleParagraphsPermittedMessage } from \"./messages\";\n\nexport function checkArgumentLength(node: ModifierNode, min?: number, max = min): Message[] | null {\n if ((min !== undefined && node.arguments.length < min)\n || (max !== undefined && node.arguments.length > max)) \n {\n return [new ArgumentCountMismatchMessage({\n source: node.location.source,\n start: node.head.start, \n end: node.head.end\n }, min, max)];\n }\n return null;\n}\n\nexport function checkArguments(node: ModifierNode, min?: number, max = min): Message[] | null {\n const arg = node.arguments.find((x) => x.expansion === undefined);\n if (arg !== undefined) {\n // debugger;\n return [new CannotExpandArgumentMessage(arg.location)];\n }\n return checkArgumentLength(node, min, max);\n}\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 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 if (ent.expansion.length == 0) return '';\n else if (ent.expansion.length > 1) {\n let last = ent.expansion.at(-1)!.location;\n return [new MultipleBlocksNotPermittedMessage({\n source: last.source, \n start: ent.expansion[1].location.start, \n end: last.actualEnd ?? last.end\n })];\n } \n return check(ent.expansion[0]);\n } else if (ent.type !== NodeType.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n return checkInline(ent.content);\n }\n \n return check(node);\n}\n\nexport function onlyPermitSimpleParagraphs(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null \n{\n function check(nodes: BlockEntity[]): Message[] | null {\n for (let 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.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n }\n return null;\n }\n return check(node.content);\n}\n\nexport function onlyPermitSingleBlock(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null \n{\n function check(nodes: BlockEntity[]): Message[] | null {\n if (nodes.length > 1) {\n let 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 }\n return null;\n }\n return check(node.content);\n}\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, Message, SystemModifierNode, ModifierNode, BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType, NodeType } from \"../interface\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { cloneNodes, assert } from \"../util\";\nimport { ConfigDefinitions } from \"./module\";\n\nexport type ModifierSignature = {\n readonly slotName: string | undefined;\n readonly args: readonly 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: ModifierSignature[];\n inlineSlotDelayedStack: ModifierSignature[];\n blockInstantiationData: BlockInstantiationData[];\n inlineInstantiationData: InlineInstantiationData[];\n modules: Map<string, ConfigDefinitions>;\n usedModules: Set<string>;\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 modules: new Map(),\n usedModules: new Set(),\n insideModule: undefined\n });\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, signature: ModifierSignature, content: _Ent<T>[])\n{\n debug.info(`created custom ${NodeType[type]}:`, name);\n debug.info('args:', signature.args, `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>, cxt: ParseContext) => {\n let check = checkArguments(node, signature.args.length);\n if (check) return check;\n node.state = { \n ok: true,\n args: new Map(node.arguments.map((x, i) => [signature.args[i], x.expansion!]))\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 signature.slotName == '' ? '(unnamed)' : `= ${signature.slotName}`);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok || signature.slotName === undefined) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n const pop = data.pop();\n assert(pop !== undefined);\n debug.trace(`popped ${NodeType[type]} slot data for`, name,\n signature.slotName == '' ? '(unnamed)' : `= ${signature.slotName}`);\n return [];\n };\n return mod;\n}\n\nexport function makeInlineDefinition(node: SystemModifierNode<any>, msgs: Message[]) {\n let lastIsParagraph = false;\n let concat: InlineEntity[] = [];\n for (const n of node.content) {\n switch (n.type) {\n case NodeType.Paragraph:\n if (!lastIsParagraph) {\n lastIsParagraph = true;\n concat.push(...n.content);\n continue;\n }\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 { SystemModifierDefinition, ModifierSlotType, Message, NodeType, SystemModifierNode, InlineEntity } from \"../interface\";\nimport { InvalidArgumentMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { checkArgumentLength } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, ModifierSignature } from \"./internal\";\n\ntype ModifierState = {\n name?: string;\n signature: ModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n node: SystemModifierNode<ModifierState>,\n stack: ModifierSignature[]\n) {\n const check = checkArgumentLength(node, 1, Infinity);\n if (check) return check;\n\n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = name.expansion;\n if (nameValue === '' || nameValue?.includes('\\n')) return [\n new InvalidArgumentMessage(name.location, nameValue)];\n\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = node.arguments.at(-1)!;\n if (last.expansion) {\n const match = /^\\((.*)\\)$/.exec(last.expansion);\n slotName = match ? match[1] : '';\n } else msgs.push(\n new InvalidArgumentMessage(last.location));\n }\n\n const args = node.arguments.slice(1, (slotName !== '')\n ? node.arguments.length - 1 : undefined).map((x) => \n {\n if (!x.expansion) msgs.push(\n new InvalidArgumentMessage(x.location));\n return x.expansion ?? '';\n });\n\n let signature: ModifierSignature = { slotName, args, preformatted: undefined };\n node.state = { name: nameValue, 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) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.blockSlotDelayedStack);\n if (check) return check;\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 arg = node.arguments[0];\n const msgs = node.state.msgs;\n if (!node.state.name) \n msgs.push(new InvalidArgumentMessage(arg.location));\n else if (cxt.config.blockModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.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) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.inlineSlotDelayedStack);\n if (check) return check;\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 const arg = node.arguments[0];\n if (!node.state.name) \n return [new InvalidArgumentMessage(arg.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.location, node.state.name));\n \n node.state.definition = makeInlineDefinition(node, 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});","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { SystemModifierDefinition, InlineEntity, ModifierSlotType, Message, NodeType, SystemModifierNode, InlineShorthand, BlockShorthand } from \"../interface\";\nimport { NameAlreadyDefinedMessage, InvalidArgumentMessage, ArgumentCountMismatchMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, ModifierSignature } from \"./internal\";\n\ntype ShorthandState = {\n name: string;\n parts: [string, string][];\n postfix: string | undefined;\n signature: ModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n type: NodeType.BlockModifier | NodeType.InlineModifier,\n node: SystemModifierNode<ShorthandState>,\n stack: ModifierSignature[]\n) {\n const check = checkArguments(node, 1, Infinity);\n if (check) return check;\n \n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = name.expansion!;\n if (nameValue === '' || nameValue?.includes('\\n')) return [\n new InvalidArgumentMessage(name.location, nameValue)];\n\n let slotName: string | undefined = undefined;\n let parts: [string, string][] = [];\n let postfix: string | undefined = undefined;\n let i = 1;\n while (i < node.arguments.length) {\n const arg = node.arguments[i];\n const match = /^\\((.*)\\)$/.exec(arg.expansion!);\n if (match) {\n slotName = match[1];\n i++;\n if (type == NodeType.InlineModifier) {\n if (i < node.arguments.length) {\n if (node.arguments[i].expansion === '') {\n msgs.push(new InvalidArgumentMessage(\n node.arguments[i].location, 'postfix'));\n } else {\n postfix = node.arguments[i].expansion!;\n i++;\n }\n } else msgs.push(\n new ArgumentCountMismatchMessage(node.location));\n }\n break;\n }\n \n i++;\n if (i < node.arguments.length) {\n const id = arg.expansion!;\n if (id === '') {\n return [new InvalidArgumentMessage(arg.location, 'id')];\n }\n const part = node.arguments[i].expansion!;\n if (part === '') {\n return [new InvalidArgumentMessage(\n node.arguments[i].location, 'part')];\n }\n parts.push([id, part]);\n i++;\n } else {\n msgs.push(new ArgumentCountMismatchMessage(node.location));\n break;\n }\n }\n \n if (i == node.arguments.length - 1) {\n const last = node.arguments[i];\n if (last.expansion !== '') msgs.push(\n new InvalidArgumentMessage(last.location, '(must be empty)'));\n } else if (i < node.arguments.length - 1)\n msgs.push(new ArgumentCountMismatchMessage(node.location));\n\n let signature: ModifierSignature = \n { slotName, args: parts.map((x) => x[0]), preformatted: undefined };\n node.state = { name: nameValue, 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) {\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 const arg = node.arguments[0];\n if (!node.state) \n return [new InvalidArgumentMessage(arg.location)];\n const msgs = node.state.msgs;\n if (cxt.config.blockShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.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) {\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 const arg = node.arguments[0];\n if (!node.state) \n return [new InvalidArgumentMessage(arg.location)];\n const msgs = node.state.msgs;\n if (cxt.config.inlineShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.location, node.state.name));\n node.state.definition = makeInlineDefinition(node, 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});","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockModifierDefinition, BlockShorthand, InlineModifierDefinition, InlineShorthand, Message, ModifierSlotType, SystemModifierDefinition } from \"../interface\";\nimport { CannotUseModuleInSelfMessage, InvalidArgumentMessage, NoNestedModuleMessage, OverwriteDefinitionsMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { NameManager } from \"../util\";\nimport { builtins } from \"./internal\";\n\nexport type ConfigDefinitions = {\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\nfunction getDefs(cxt: ParseContext): ConfigDefinitions {\n const data = cxt.get(builtins)!;\n return {\n usedModules: new Set(data.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\nfunction applyDefs(cxt: ParseContext, defs: ConfigDefinitions) {\n const data = cxt.get(builtins)!;\n data.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\nfunction 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\nfunction diffDef(cnew: ConfigDefinitions, cold: ConfigDefinitions): ConfigDefinitions {\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\nfunction addDef(cnew: ConfigDefinitions, cold: ConfigDefinitions): [ConfigDefinitions, 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 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\nexport const ModuleMod = \n new BlockModifierDefinition<{\n name: string,\n defs: ConfigDefinitions\n }>('module', ModifierSlotType.Normal, \n{\n expand(node) {\n // no need to clone?\n return []; // node.content;\n },\n beforeParseContent(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0].expansion!;\n const defs = getDefs(cxt);\n\n if (data.insideModule !== undefined) {\n return [new NoNestedModuleMessage(node.head)];\n }\n\n let msgs: Message[] = [];\n node.state = { name, defs };\n data.insideModule = name;\n if (data.modules.has(name)) {\n const [added, msg] = addDef(defs, data.modules.get(name)!);\n if (msg) msgs.push(\n new OverwriteDefinitionsMessage(node.head, msg));\n applyDefs(cxt, added);\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 data.modules.set(node.state.name, \n diffDef(getDefs(cxt), node.state.defs));\n applyDefs(cxt, node.state.defs);\n debug.trace('exiting defs for module', node.state.name);\n return [];\n },\n});\n\nexport const UseSystemMod = \n new SystemModifierDefinition<ConfigDefinitions>('use', ModifierSlotType.None, \n{\n prepareExpand(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0];\n if (!data.modules.has(name.expansion!))\n return [new InvalidArgumentMessage(name.location)];\n if (data.insideModule === name.expansion!)\n return [new CannotUseModuleInSelfMessage(name.location)];\n\n const [added, msg] = addDef(data.modules.get(name.expansion!)!, getDefs(cxt));\n node.state = added;\n\n if (msg) \n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n },\n expand(node, cxt) {\n if (node.state)\n applyDefs(cxt, node.state);\n return [];\n },\n});\n\nexport const UseBlockMod = \n new BlockModifierDefinition<{\n old: ConfigDefinitions\n }>('use', ModifierSlotType.Normal, \n{\n beforeParseContent(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0];\n if (!data.modules.has(name.expansion!))\n return [new InvalidArgumentMessage(name.location)];\n if (data.insideModule === name.expansion!)\n return [new CannotUseModuleInSelfMessage(name.location)];\n\n const old = getDefs(cxt);\n const [added, msg] = addDef(data.modules.get(name.expansion!)!, old);\n applyDefs(cxt, added);\n node.state = { old };\n\n if (msg) \n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n },\n afterParseContent(node, cxt) {\n if (node.state)\n applyDefs(cxt, node.state.old);\n return [];\n },\n expand(node) {\n return node.content;\n },\n});","import { debug } from \"../debug\";\nimport { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition, ModifierNode, NodeType } from \"../interface\";\nimport { SlotUsedOutsideDefinitionMessage, InvalidArgumentMessage, EitherNormalOrPreMessage, UnknownModifierMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Def, _Ent, _InstData, _Node } from \"../typing-helper\";\nimport { cloneNodes, NameManager } from \"../util\";\nimport { builtins, ModifierSignature } 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: ModifierSignature) {\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 ? checkArguments(node, 1, 2)\n : checkArguments(node, 0, 1);\n if (check) {\n node.state = { ok: false };\n return check;\n }\n\n const msgs = (() => {\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n \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 if (node.arguments.length == (inject ? 1 : 0)) {\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 const id = node.arguments[0].expansion!;\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 const arg = node.arguments[0];\n return [new InvalidArgumentMessage(arg.location, id)];\n }\n })();\n\n if (inject) {\n const arg = node.arguments.at(-1)!;\n const modName = arg.expansion!;\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(arg.location, modName)];\n }\n if (node.state?.ok)\n node.state.injectMod = mod;\n }\n\n if (msgs) 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 const mod = node.state.injectMod! as any;\n const modNode: ModifierNode = {\n type, mod,\n location: node.location,\n head: node.head,\n arguments: [], // 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);","import { debug } from \"../debug\";\nimport { InlineModifierDefinition, ModifierSlotType, ArgumentInterpolatorDefinition, SystemModifierDefinition, NodeType } from \"../interface\";\nimport { InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins } from \"./internal\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\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\nexport const GetVarInlineMod = \n new InlineModifierDefinition<{ value: string; }>('$', ModifierSlotType.None, \n{\n alwaysTryExpand: true,\n // .$:id\n prepareExpand(node, cxt, immediate) {\n const check = checkArguments(node, 1);\n if (check)\n return immediate ? check : [];\n\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '')\n return immediate ? [new InvalidArgumentMessage(arg.location)] : [];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return immediate ? [new UndefinedVariableMessage(arg.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 const check = checkArguments(node);\n if (check) return check;\n node.state = {value: node.arguments.map((x) => x.expansion!).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, cxt) {\n const check = checkArguments(node, 2);\n if (check) return check;\n\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '')\n return [new InvalidArgumentMessage(arg.location)];\n node.state = {\n id,\n value: node.arguments[1].expansion!\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 { ModuleMod, UseBlockMod, UseSystemMod } from \"./module\";\nimport { InjectPreSlotBlockMod, InjectPreSlotInlineMod, PreSlotBlockMod, PreSlotInlineMod, SlotBlockMod, SlotInlineMod } from \"./slot\";\nimport { VarMod, GetVarInlineMod, GetVarInterpolator, PrintInlineMod } from \"./var\";\n\nlet builtin = new Configuration();\nbuiltin.initializers = [initParseContext];\nbuiltin.systemModifiers.add(\n DefineBlockMod, DefineInlineMod, \n DefineBlockShorthandMod, DefineInlineShorthandMod, \n VarMod, \n UseSystemMod);\nbuiltin.blockModifiers.add(\n SlotBlockMod, PreSlotBlockMod, InjectPreSlotBlockMod,\n ModuleMod, UseBlockMod);\nbuiltin.inlineModifiers.add(\n SlotInlineMod, PreSlotInlineMod, InjectPreSlotInlineMod,\n GetVarInlineMod, PrintInlineMod);\nbuiltin.argumentInterpolators.add(GetVarInterpolator);\n\nexport const BuiltinConfiguration: ReadonlyConfiguration = Object.freeze(builtin);\n","import { BlockModifierDefinition, ModifierSlotType } from \"../interface\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { checkArguments } 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 = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n let arg = node.arguments[0];\n let num = Number.parseInt(arg.expansion!);\n if (isNaN(num)) return [\n new InvalidArgumentMessage(arg.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 return `<li>${cxt.state.render(node.content, cxt)}</li>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [subItemBlock, (node, cxt) => {\n return `<div class='subitem'>${cxt.state.render(node.content, cxt)}</div>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [orderedListItemBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<li value='${node.state}'>${cxt.state.render(node.content, cxt)}</li>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, number>\n];","import { BlockModifierDefinition, ModifierSlotType, ParagraphNode } from \"../interface\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { checkArguments, 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 delayContentExpansion: true,\n roleHint: 'heading',\n beforeParseContent(node, cxt) {\n let msgs = checkArguments(node, 0, 1);\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 node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n if (node.arguments.length == 1) {\n const arg = node.arguments[0];\n const level = Number.parseInt(arg.expansion!);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n arg.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 beforeParseContent(node, cxt) {\n let msgs = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n\n node.state = { \n name: undefined, implicit: true, \n level: (currentExplicitHeadingLevel(cxt) ?? 0 ) + 1\n };\n if (node.arguments.length == 1) {\n const arg = node.arguments[0];\n const level = Number.parseInt(arg.expansion!);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n arg.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 delayContentExpansion: true,\n roleHint: 'heading',\n beforeParseContent(node, cxt) {\n let msgs = checkArguments(node, 1);\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 node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n const arg = node.arguments[0];\n const split = arg.expansion!.trim().split('.').filter((x) => x.length > 0);\n if (split.length == 0 || split.length > 6)\n msgs = [new InvalidArgumentMessage(\n arg.location, 'should be a number 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 let tag = 'h' + node.state.level;\n let para = node.content[0] as ParagraphNode;\n return `<${tag}>${cxt.state.render(para.content, cxt)}</${tag}>`;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n [implicitHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n let tag = 'h' + node.state.level;\n return `<${tag} class='implicit'></${tag}>`;\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 let tag = 'h' + node.state.level;\n let para = node.content[0] as ParagraphNode;\n return `<${tag}><span class='heading-number'>${node.state.name}</span>${cxt.state.render(para.content, cxt)}</${tag}>`;\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 { InlineModifierDefinition, ModifierSlotType, BlockModifierDefinition, BlockEntity, NodeType, LocationRange } from \"../interface\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { InlineRendererDefiniton } from \"../renderer\";\nimport { stripNode } from \"../util\";\nimport { HTMLComponentPlugin, HTMLRenderType } from \"./html-renderer\";\n\nexport const notes = Symbol();\n\ntype NoteSystem = {\n position: 'block' | 'section' | 'global',\n autonumber: boolean\n}\n\ntype NoteDefinition = {\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 definitions: NoteDefinition[]\n };\n }\n}\n\nexport function initNotes(cxt: ParseContext) {\n cxt.init(notes, {\n systems: new Map(),\n definitions: []\n });\n}\n\nconst noteMarkerInline = new InlineModifierDefinition<string>(\n 'note', ModifierSlotType.None,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\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 = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n node.state = node.arguments.at(0)?.expansion ?? '';\n return [];\n },\n afterProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n cxt.get(notes)!.definitions.push({\n system: '',\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 }\n return [];\n },\n });\n\nconst noteBlock = new BlockModifierDefinition<string>(\n 'note', ModifierSlotType.Normal,\n {\n roleHint: 'quote',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n afterProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n // TODO: check if this is sound in typing\n let content = stripNode(...node.content) as BlockEntity[];\n debug.trace(`add note: system=<${''}> name=${node.state} @${node.location.start}`);\n debug.trace(`-->\\n`, debugPrint.node(...content));\n cxt.get(notes)!.definitions.push({\n system: '',\n name: node.state,\n location: node.location,\n content: content\n });\n }\n // manually set expansion to nothing\n node.expansion = [];\n return [];\n },\n });\n\nexport const NoteBlocks = [noteBlock];\nexport const NoteInlines = [noteInline, noteMarkerInline];\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.parseContext.get(notes)!.definitions;\n const note = defs.findIndex((x) => /*x.position >= node.start &&*/ x.name == node.state);\n if (note < 0)\n return `<sup class='note invalid'>Not found: ${node.state}</sup>`;\n return `<sup class='note' id='notemarker-id-${note}'><a href='#note-id-${note}'>${node.state}</a></sup>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>\n];\n\nexport const NotesFooterPlugin: HTMLComponentPlugin = (cxt) => {\n let defs = cxt.parseContext.get(notes)!.definitions;\n if (defs.length == 0) return undefined;\n return `<hr/>\n<section class='notes'>\n${defs.map((x, i) => \n`<section class='note' id='note-id-${i}'>\n<div class='note-name'><p><a href='#notemarker-id-${i}'>${x.name}</a></p></div>\n<div class='note-content'>${\n cxt.state.render(x.content, cxt)\n}</div></section>`).join('\\n')}\n</section>`;\n}","import { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../interface\";\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 return `<pre><code>${cxt.state.render(node.content, cxt)}</code></pre>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>;\n\nexport const CodeInlineRendererHTML = \n [CodeInline, (node, cxt) => {\n return `<span><code>${cxt.state.render(node.content, cxt)}</code></span>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType>;","import { BlockModifierDefinition, ModifierSlotType, ParagraphNode } from \"../interface\";\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 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, attributionBlock];\n\nexport const QuoteBlockRenderersHTML = [\n [quoteBlock, (node, cxt) => {\n return `<blockquote>${cxt.state.render(node.content, cxt)}</blockquote>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [epitaphBlock, (node, cxt) => {\n return `<blockquote class='epitaph'>${cxt.state.render(node.content, cxt)}</blockquote>`;\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];","import { InlineModifierDefinition, ModifierSlotType } from \"../interface\";\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\nexport const InlineStyles = [emphasisInline, keywordInline, highlightInline, commentaryInline];\n\nexport const InlineStyleRenderersHTML = [\n [emphasisInline, (node, cxt) => {\n return `<em>${cxt.state.render(node.content, cxt)}</em>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [keywordInline, (node, cxt) => {\n return `<b>${cxt.state.render(node.content, cxt)}</b>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [highlightInline, (node, cxt) => {\n return `<mark>${cxt.state.render(node.content, cxt)}</mark>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [commentaryInline, (node, cxt) => {\n return `<span class='commentary'>${cxt.state.render(node.content, cxt)}</span>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>\n];","import { ModifierSlotType, InlineModifierDefinition, BlockModifierDefinition, ParagraphNode } from \"../interface\";\nimport { checkArguments, 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 = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst linkInline = new InlineModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst styleBlock = new BlockModifierDefinition<string>(\n 'style', ModifierSlotType.Normal,\n {\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\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 = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst imageBlock = new BlockModifierDefinition<string>(\n 'image', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1, 2);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n // TODO: not very good!\n node.state = node.arguments.map((x) => x.expansion!).join(':');\n return [];\n },\n });\n\nexport const MiscInlines = [rubyInline, linkInline];\n\nexport const MiscBlocks = [styleBlock, breakBlock, linkBlock, imageBlock];\n\nexport const MiscInlineRenderersHTML = [\n [rubyInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n return `<ruby>${cxt.state.render(node.content, cxt)}<rt>${node.state}</rt></ruby>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [linkInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n return `<a href=\"${encodeURI(node.state)}\">${cxt.state.render(node.content, cxt)}</a>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n];\n\nexport const MiscBlockRenderersHTML = [\n [styleBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<div class=\"${node.state}\" style=\"display:contents\">${cxt.state.render(node.content, cxt)}</div>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [breakBlock, () => {\n return `<hr>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [linkBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<a href=\"${encodeURI(node.state)}\">${cxt.state.render(node.content, cxt)}</a>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [imageBlock, (node, cxt) => {\n let transformed: string | undefined;\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n try {\n transformed = cxt.config.options.transformAsset(node.state);\n } catch {\n return cxt.state.invalidBlock(node, 'unable to transform asset');\n }\n const img = transformed \n ? `<img src=\"${transformed}\" data-original-src=\"${node.state}\"/>`\n : `<img src=\"${node.state}\"/>`;\n const para = node.content.length == 0 \n ? '' \n : '\\n<figcaption>'\n + cxt.state.render((node.content[0] as ParagraphNode).content, cxt)\n + '</figcaption>';\n return `<figure>${img}${para}</figure>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>\n];","import { ModifierSlotType, SystemModifierDefinition } from \"../interface\";\nimport { OverwriteSpecialVariableMessage } from \"../messages\";\nimport { checkArguments, onlyPermitPlaintextParagraph } from \"../modifier-helper\";\n\nfunction createWrapper(name: string, varname?: string) {\n varname = varname ?? name.toUpperCase();\n return new SystemModifierDefinition<void>(name, ModifierSlotType.Normal, {\n delayContentExpansion: true,\n afterProcessExpansion(node, cxt) {\n let msgs = checkArguments(node, 0);\n if (msgs) return msgs;\n const result = onlyPermitPlaintextParagraph(node);\n if (typeof result !== 'string') return result;\n\n const previous = cxt.variables.get(varname);\n if (previous)\n msgs = [new OverwriteSpecialVariableMessage(node.head, varname, previous)];\n cxt.variables.set(varname, result);\n return msgs ?? [];\n },\n });\n}\n\nexport const VarWrappers = [\n createWrapper('title'),\n createWrapper('subtitle'),\n createWrapper('author'),\n createWrapper('translator'),\n createWrapper('proofreader'),\n createWrapper('typeset-by'),\n createWrapper('cover-by'),\n createWrapper('cover-img'),\n createWrapper('orig-title'),\n createWrapper('orig-link'),\n createWrapper('theme-color'),\n];","import { BuiltinConfiguration } from \"../builtin/builtin\";\nimport { BulletBlocks } from \"./bullets\";\nimport { HeadingBlocks, initHeadings } from \"./headings\";\nimport { initNotes, NoteBlocks, NoteInlines } 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 { VarWrappers } from \"./vars\";\n\nlet config = Configuration.from(BuiltinConfiguration);\nconfig.initializers.push(initNotes, initHeadings);\nconfig.blockModifiers.add(\n ...HeadingBlocks,\n ...BulletBlocks,\n CodeBlock,\n ...QuoteBlocks,\n ...MiscBlocks,\n ...NoteBlocks\n);\nconfig.inlineModifiers.add(\n CodeInline,\n ...InlineStyles,\n ...MiscInlines,\n ...NoteInlines\n);\nconfig.systemModifiers.add(\n ...VarWrappers\n)\n\nexport const DefaultConfiguration: ReadonlyConfiguration = Object.freeze(config);","import { debug } from \"../debug\";\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 { NoteInlineRenderersHTML, NotesFooterPlugin } from \"./notes\";\nimport { QuoteBlockRenderersHTML } from \"./quotes\";\n\nexport type HTMLRendererOptions = {\n headPlugins: HTMLComponentPlugin[];\n headerPlugins: HTMLComponentPlugin[];\n footerPlugins: HTMLComponentPlugin[];\n // postprocessPlugins: HTMLPostprocessPlugin[];\n transformAsset: (id: string) => string | undefined;\n // transformLink?: (url: URL) => string;\n}\n\nexport type HTMLRenderType = {\n state: HTMLRenderState,\n options: HTMLRendererOptions,\n return: string,\n};\n\nexport type HTMLRenderPlugin = \n (elem: BlockEntity | InlineEntity, cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLComponentPlugin = \n (cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLPostprocessPlugin = \n (cxt: RenderContext<HTMLRenderType>, output: string) => string;\n\nexport class HTMLRenderState {\n title: string = '';\n stylesheet = ''; // FIXME: very unsafe!\n cssVariables = new Map<string, string>;\n\n // https://stackoverflow.com/questions/7381974\n escape(content: string) {\n return content\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n .replaceAll('\\n', '<br/>');\n }\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'><summary>Invalid ${this.escape(name)}</summary><i>${this.escape(msg)}</i></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 `<span class='invalid'>Invalid ${this.escape(name)} – <i>${this.escape(msg)}</i></span>`\n }\n\n render(elems: (BlockEntity | InlineEntity)[], cxt: RenderContext<HTMLRenderType>) {\n return elems.map((x) => cxt.renderEntity(x)).filter((x) => x !== undefined).join('');\n }\n}\n\nconst htmlConfig = new RenderConfiguration<HTMLRenderType>(\n {\n headPlugins: [],\n headerPlugins: [],\n footerPlugins: [NotesFooterPlugin],\n transformAsset: (x) => 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 return `\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n${cxt.config.options.headPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .join('\\n')}\n<title>${cxt.state.escape(cxt.state.title)}</title>\n<style>${styles}</style>\n</head>\n<body>\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 .join('\\n')}\n${results.join('\\n')}\n${cxt.config.options.footerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .join('\\n')}\n</section>\n</section>\n</body>\n</html>`\n});\n\nhtmlConfig.paragraphRenderer = (node, cxt) => \n `<p>${node.content\n .map((x) => cxt.renderEntity(x))\n .filter((x) => x !== undefined).join('')}</p>`;\n\nhtmlConfig.textRenderer = (node, cxt) => {\n switch (node.type) {\n case NodeType.Preformatted:\n return cxt.state.escape(node.content.text);\n case NodeType.Text:\n case NodeType.Escaped:\n return cxt.state.escape(node.content);\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 // TODO: notes\n);\n\nhtmlConfig.addInlineRenderer(\n CodeInlineRendererHTML,\n ...InlineStyleRenderersHTML,\n ...MiscInlineRenderersHTML,\n ...NoteInlineRenderersHTML\n)\n\nexport const HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType> = htmlConfig;","import { debug, DebugLevel } from './debug';\n\nexport * from './interface';\nexport * from './scanner';\nexport * from './parser';\nexport * from './parser-config';\nexport * from './renderer';\nexport * as messages from './messages';\nexport * from './builtin/builtin';\nexport * from './default/default';\nexport * from './default/html-renderer';\nexport { DebugLevel } from './debug';\nexport { debugPrint } from './debug-print';\n\nexport function setDebugLevel(level: DebugLevel) {\n debug.level = level;\n}"],"mappings":"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","names":["MessageSeverity","NodeType","ModifierSlotType","DebugLevel","x","prefix","content","pos","config","end","config","parseDefineArguments","signature","mod"]}
|
|
1
|
+
{"version":3,"sources":["../src/interface.ts","../src/util.ts","../src/debug.ts","../src/source.ts","../src/scanner.ts","../src/debug-print.ts","../src/messages.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/builtin/module.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts","../src/default/bullets.ts","../src/default/headings.ts","../src/default/notes.ts","../src/default/code.ts","../src/default/quotes.ts","../src/default/inline-styles.ts","../src/default/misc.ts","../src/default/vars.ts","../src/default/default.ts","../src/default/html-renderer.ts","../src/index.ts"],"sourcesContent":["import { ParseContext } from \"./parser-config\";\nimport { Source } from \"./source\";\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 Paragraph,\n Preformatted,\n Text,\n Escaped,\n SystemModifier,\n InlineModifier,\n BlockModifier,\n Interpolation\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 SystemModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: never[]\n};\n\nexport type BlockModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = {\n location: LocationRange,\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n state?: TState,\n head: LocationRange,\n arguments: ModifierArgument[],\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type RootNode = {\n type: NodeType.Root\n content: BlockEntity[],\n source: Source\n}\n\nexport type ModifierNode<T = any> = \n BlockModifierNode<T> | InlineModifierNode<T> | SystemModifierNode<T>;\nexport type BlockEntity = \n 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\nexport enum ModifierSlotType {\n Normal,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted,\n /** No content slot */\n None\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 {\n if (args) Object.assign(this, args);\n }\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 * 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\nexport class InlineModifierDefinition<TState> \n extends ModifierBase<InlineModifierNode<TState>, InlineEntity> {}\n\nexport class SystemModifierDefinition<TState> \n extends ModifierBase<SystemModifierNode<TState>, never> {}\n\nexport class ArgumentInterpolatorDefinition {\n constructor(\n public readonly name: string,\n public readonly postfix: string,\n args?: Partial<ArgumentInterpolatorDefinition>) \n {\n if (args) Object.assign(this, args);\n }\n\n alwaysTryExpand = false;\n expand?: (content: string, cxt: ParseContext, immediate: boolean) => string | undefined;\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>>;","import { debug } from \"./debug\";\nimport { DocumentNode, LocationRange, ModifierArgument, NodeType } from \"./interface\";\n\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\nexport type CloneNodeOptions = {\n newLocation?: LocationRange,\n withState?: boolean\n};\n\nconst cloneArgument = (arg: ModifierArgument, options: CloneNodeOptions): ModifierArgument => ({\n location: clonePosition(arg.location, options),\n content: arg.content.map((ent) => {\n switch (ent.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n return structuredClone(ent);\n case NodeType.Interpolation:\n return {\n type: ent.type,\n location: clonePosition(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});\n\nfunction clonePosition(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(node: DocumentNode, options: CloneNodeOptions = {}): DocumentNode \n{\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n location: clonePosition(node.location, options),\n type: node.type as any,\n mod: node.mod,\n state: options.withState ? node.state : undefined,\n head: structuredClone(node.head),\n arguments: node.arguments.map((x) => cloneArgument(x, options)),\n content: node.content.map((x) => cloneNode(x, options) as any),\n expansion: node.expansion ? cloneNodes(node.expansion, options) as any : undefined\n };\n case NodeType.Root:\n return {\n type: node.type as any,\n source: node.source,\n content: node.content.map((x) => cloneNode(x, options) as any)\n }\n case NodeType.Paragraph:\n return {\n type: node.type as any,\n location: clonePosition(node.location, options),\n content: node.content.map((x) => cloneNode(x, options) as any)\n }\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return structuredClone(node);\n default:\n return debug.never(node);\n }\n}\n\nexport function cloneNodes(\n nodes: readonly DocumentNode[], options: CloneNodeOptions = {}\n): DocumentNode[] {\n return nodes.map((x) => cloneNode(x, options));\n}\n\n/** Warning: modifies the original nodes */\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.Paragraph:\n case NodeType.Root:\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 { 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 line `n` (zero-based). If `n` is zero, returns zero. If the source contains less than `n` lines, returns `Infinity`.\n */\n getLineStart(n: number): number;\n /**\n * Returns the content line `n`. If the source contains less than `n` lines, returns `Infinity`.\n */\n getLine(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 getLineStart(n: number): number {\n assert(n >= 0);\n if (n >= this.lineMap.length) return Infinity;\n return this.lineMap[n];\n }\n\n getLine(n: number): string | undefined {\n const start = this.getLineStart(n);\n const end = this.getLineStart(n + 1);\n if (start === Infinity) return undefined;\n return this.src.substring(start, end - 1);\n }\n\n \n}","import { Source, SourceDescriptor, StringSource } from \"./source\";\nimport { assert } from \"./util\";\n\nexport class SimpleScanner implements Scanner {\n public readonly source: Source;\n private pos = 0;\n constructor(\n private src: string,\n sourceDesc: SourceDescriptor = {name: '<input>'})\n {\n this.source = new StringSource(sourceDesc, src);\n }\n\n position(): number {\n return this.pos;\n }\n\n isEOF(): boolean {\n return this.pos >= this.src.length;\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 // 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, BlockModifierDefinition, BlockShorthand, InlineModifierDefinition, InlineShorthand, ModifierSlotType, BlockEntity, InlineEntity, LocationRange } from \"./interface\";\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.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 args = node.arguments.map((x, i) => `\\n${prefix} (${i})@${x.location.start}-${x.location.end}=${debugPrint.argument(x)}`).join('');\n if (node.content.length > 0) {\n result += ` id=${node.mod.name}${args}>\\n` + debugPrintNodes(node.content, prefix) + `\\n${prefix}</${NodeType[node.type]}@${node.location.end}>`;\n } else result += `-${node.location.end} id=${node.mod.name}${args} />`;\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.getLine(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\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 { RootNode, Message, BlockModifierDefinition, InlineModifierDefinition, SystemModifierDefinition, ArgumentInterpolatorDefinition, BlockShorthand, InlineShorthand, BlockEntity, InlineEntity, ArgumentEntity } from \"./interface\";\nimport { assert, cloneNode, ReadonlyNameManager, NameManager, stripNode } from \"./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\n constructor(\n public config: Configuration,\n public variables = new Map<string, string>()) {\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\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(callback: (node: BlockEntity | InlineEntity | ArgumentEntity) => 'skip' | 'break' | 'continue') {\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.flatMap((x) => x.content));\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 let nodes: (BlockEntity | InlineEntity | ArgumentEntity)[] = this.root.content;\n let node;\n while (node = nodes.shift()) {\n if (node.location.start <= pos \n && (node.location.actualEnd ?? node.location.end) >= pos)\n {\n result.push(node);\n nodes = [];\n if ('arguments' in node)\n nodes.push(...node.arguments.flatMap((x) => x.content));\n if ('content' in node && Array.isArray(node.content))\n nodes.push(...node.content);\n }\n }\n return result;\n }\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 reparseDepthLimit: number;\n}\n\nexport class Configuration implements ReadonlyConfiguration {\n initializers: ((cxt: ParseContext) => void)[] = [];\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 reparseDepthLimit = 10;\n\n static from(from: ReadonlyConfiguration) {\n let config = new Configuration();\n config.initializers = [...from.initializers];\n config.reparseDepthLimit = from.reparseDepthLimit;\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, BlockModifierDefinition, BlockModifierNode, EscapedNode, InlineEntity, InlineModifierDefinition, InlineModifierNode, Message, ModifierArgument, ModifierSlotType, ParagraphNode, LocationRange, PreNode, RootNode, ArgumentEntity, ModifierNode, SystemModifierDefinition, SystemModifierNode, NodeType } from \"./interface\";\nimport { ShouldBeOnNewlineMessage, ExpectedMessage, ReachedRecursionLimitMessage, UnknownModifierMessage, UnnecessaryNewlineMessage } 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 GROUP_BEGIN = ':--';\nconst GROUP_END = '--:';\n\nconst MODIFIER_BLOCK_OPEN = '[.';\nconst MODIFIER_CLOSE_SIGN = ']';\nconst MODIFIER_END_SIGN = ';';\n\nconst MODIFIER_INLINE_OPEN = '[/';\nconst MODIFIER_INLINE_END_TAG = '[;]';\n\nconst MODIFIER_SYSTEM_OPEN = '[-';\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 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: BlockModifierNode<unknown> | SystemModifierNode<unknown>) {\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\nclass Parser {\n private emit: EmitEnvironment;\n private delayDepth = 0;\n private groupDepth = 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 #defs<Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>(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.reparseDepthLimit) 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.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) {\n this.#expandArgument(arg);\n // if (!arg.expansion) debug.trace('expand arg failed');\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 if (node.mod.beforeParseContent)\n this.emit.message(...node.mod.beforeParseContent(node as any, this.cxt, immediate));\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 if (node.mod.afterParseContent)\n this.emit.message(...node.mod.afterParseContent(node as any, this.cxt, immediate));\n }\n\n if (node.mod.prepareExpand)\n this.emit.message(...node.mod.prepareExpand(node as any, this.cxt, immediate));\n if (node.mod.expand) {\n node.expansion = node.mod.expand(node as any, this.cxt, immediate);\n if (!node.expansion) {\n // debug.trace('manually delaying expansion of', node.mod.name);\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 const expansion = node.expansion ?? node.content;\n if (expansion.length == 0) return true;\n if (node.mod.beforeProcessExpansion)\n this.emit.message(...node.mod.beforeProcessExpansion(node as any, this.cxt, immediate));\n\n let ok = this.#reparse(expansion, depth);\n\n if (node.mod.afterProcessExpansion)\n this.emit.message(...node.mod.afterProcessExpansion(node as any, this.cxt, immediate));\n if (!ok && depth == 0) {\n const limit = this.cxt.config.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\n private BLOCK_ENTITY() {\n assert(!this.scanner.isEOF());\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\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('\\\\'))\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 if (this.scanner.accept(GROUP_BEGIN)) {\n this.groupDepth++;\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n while (!this.scanner.isEOF()) {\n if (this.scanner.accept(GROUP_END)) {\n if (!this.scanner.isEOF()) {\n this.SHOULD_BE_A_NEWLINE();\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n }\n this.groupDepth--;\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() - d.name.length;\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, headEnd),\n location: this.#locFrom(posStart, headEnd),\n arguments: args,\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('\\\\')) {\n if (this.scanner.isEOF()) {\n this.emit.addString('\\\\');\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 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) && this.groupDepth > 0)\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(':'))\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('\\\\')) {\n // handle escaping\n posEnd = this.scanner.position();\n if (this.scanner.isEOF()) {\n emitString('\\\\');\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 private ARGUMENTS(): ModifierArgument[] {\n // optionally accept semicolon before first argument\n const firstSemicolon = this.scanner.accept(':');\n // don't eat whites if there is a first semicolon\n if (!firstSemicolon) this.WHITESPACES_OR_NEWLINES();\n\n const list: ModifierArgument[] = [];\n let end = false;\n while (!end) {\n const [arg, ok] = this.ARGUMENT_CONTENT();\n if (!ok) {\n end = true;\n // if we haven't parsed anything so far: if there is no first semicolon, there's no arguments; otherwise, there is a single empty argument\n if (list.length == 0 && arg.content.length == 0 && !firstSemicolon)\n break;\n }\n list.push(arg);\n }\n return list;\n }\n}\n\nexport function parse(scanner: Scanner, cxt: ParseContext) {\n return new Parser(scanner, cxt).parse();\n}\n","import { debug } from \"./debug\";\nimport { BlockEntity, InlineEntity, NodeType, ParagraphNode, TextNode, PreNode, EscapedNode, BlockModifierNode, InlineModifierNode, BlockModifierDefinition, InlineModifierDefinition } from \"./interface\";\nimport { Document, ParseContext } from \"./parser-config\";\n\nexport type RendererType<TState, TReturn, TOptions = undefined> = {\n state: TState;\n return: TReturn;\n options: TOptions;\n};\n\ntype AnyRendererType = RendererType<any, any, any>;\n\ntype getState<Type> = Type extends RendererType<infer T, any, any> ? T : never;\ntype getReturn<Type> = Type extends RendererType<any, infer T, any> ? T : never;\ntype getOptions<Type> = Type extends RendererType<any, any, infer T> ? T : never;\n\nexport type NodeRenderer<Type extends AnyRendererType, TNode> = (node: TNode, cxt: RenderContext<Type>) => getReturn<Type>;\n\nexport type NodeRendererDefinition<Type extends AnyRendererType, TNode, TDef> = [def: TDef, renderer: NodeRenderer<Type, TNode>];\n\nexport class RenderContext<Type extends AnyRendererType> {\n renderEntity(node: BlockEntity | InlineEntity): getReturn<Type> | undefined {\n switch (node.type) {\n case NodeType.Paragraph:\n return this.config.paragraphRenderer?.(node, this);\n case NodeType.Preformatted:\n case NodeType.Text:\n case NodeType.Escaped:\n return this.config.textRenderer?.(node, this);\n case NodeType.InlineModifier:\n let ir = this.config.inlineRenderers.get(node.mod);\n if (ir) return ir(node, this);\n return this.config.undefinedInlineRenderer?.(node, this);\n case NodeType.BlockModifier:\n let br = this.config.blockRenderers.get(node.mod);\n if (br) return br(node, this);\n return this.config.undefinedBlockRenderer?.(node, this);\n case NodeType.SystemModifier:\n return undefined;\n default:\n return debug.never(node);\n }\n }\n\n constructor(\n public readonly config: RenderConfiguration<Type>,\n public readonly parseContext: ParseContext,\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>) => getReturn<Type>;\n\n render(doc: Document, state: getState<Type>): getReturn<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: (results: getReturn<Type>[], cxt: RenderContext<Type>) => getReturn<Type>) { }\n\n render(doc: Document, state: getState<Type>): getReturn<Type> {\n let cxt = new RenderContext(this, doc.context, state);\n let results = doc.toStripped()\n .root.content\n .map((x) => cxt.renderEntity(x))\n // not exactly sure why 'as' is needed here\n .filter((x) => (x !== undefined)) as getReturn<Type>[];\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 { ModifierNode, Message, BlockModifierNode, NodeType, BlockEntity, SystemModifierNode, InlineEntity } from \"./interface\";\nimport { ArgumentCountMismatchMessage, CannotExpandArgumentMessage, EntityNotAllowedMessage, MultipleBlocksNotPermittedMessage, OnlySimpleParagraphsPermittedMessage } from \"./messages\";\n\nexport function checkArgumentLength(node: ModifierNode, min?: number, max = min): Message[] | null {\n if ((min !== undefined && node.arguments.length < min)\n || (max !== undefined && node.arguments.length > max)) \n {\n return [new ArgumentCountMismatchMessage({\n source: node.location.source,\n start: node.head.start, \n end: node.head.end\n }, min, max)];\n }\n return null;\n}\n\nexport function checkArguments(node: ModifierNode, min?: number, max = min): Message[] | null {\n const arg = node.arguments.find((x) => x.expansion === undefined);\n if (arg !== undefined) {\n // debugger;\n return [new CannotExpandArgumentMessage(arg.location)];\n }\n return checkArgumentLength(node, min, max);\n}\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\nexport function onlyPermitSimpleParagraphs(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null \n{\n function check(nodes: BlockEntity[]): Message[] | null {\n for (let 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.Paragraph) {\n return [new OnlySimpleParagraphsPermittedMessage(ent.location)];\n }\n }\n return null;\n }\n return check(node.content);\n}\n\nexport function onlyPermitSingleBlock(\n node: BlockModifierNode<any> | SystemModifierNode<any>): Message[] | null \n{\n function check(nodes: BlockEntity[]): Message[] | null {\n if (nodes.length > 1) {\n let 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 }\n return null;\n }\n return check(node.content);\n}\n","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockEntity, InlineEntity, Message, SystemModifierNode, ModifierNode, BlockModifierDefinition, InlineModifierDefinition, ModifierSlotType, NodeType } from \"../interface\";\nimport { EntityNotAllowedMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { cloneNodes, assert } from \"../util\";\nimport { ConfigDefinitions } from \"./module\";\n\nexport type ModifierSignature = {\n readonly slotName: string | undefined;\n readonly args: readonly 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: ModifierSignature[];\n inlineSlotDelayedStack: ModifierSignature[];\n blockInstantiationData: BlockInstantiationData[];\n inlineInstantiationData: InlineInstantiationData[];\n modules: Map<string, ConfigDefinitions>;\n usedModules: Set<string>;\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 modules: new Map(),\n usedModules: new Set(),\n insideModule: undefined\n });\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, signature: ModifierSignature, content: _Ent<T>[])\n{\n debug.info(`created custom ${NodeType[type]}:`, name);\n debug.info('args:', signature.args, `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>, cxt: ParseContext) => {\n let check = checkArguments(node, signature.args.length);\n if (check) return check;\n node.state = { \n ok: true,\n args: new Map(node.arguments.map((x, i) => [signature.args[i], x.expansion!]))\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(node: SystemModifierNode<any>, msgs: Message[]) {\n let lastIsParagraph = false;\n let concat: InlineEntity[] = [];\n for (const n of node.content) {\n switch (n.type) {\n case NodeType.Paragraph:\n if (!lastIsParagraph) {\n lastIsParagraph = true;\n concat.push(...n.content);\n continue;\n }\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 { SystemModifierDefinition, ModifierSlotType, Message, NodeType, SystemModifierNode, InlineEntity } from \"../interface\";\nimport { InvalidArgumentMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { checkArgumentLength } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, ModifierSignature } from \"./internal\";\n\ntype ModifierState = {\n name?: string;\n signature: ModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n node: SystemModifierNode<ModifierState>,\n stack: ModifierSignature[]\n) {\n const check = checkArgumentLength(node, 1, Infinity);\n if (check) return check;\n\n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = name.expansion;\n if (nameValue === '' || nameValue?.includes('\\n')) return [\n new InvalidArgumentMessage(name.location, nameValue)];\n\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = node.arguments.at(-1)!;\n if (last.expansion) {\n const match = /^\\((.*)\\)$/.exec(last.expansion);\n slotName = match ? match[1] : '';\n } else msgs.push(\n new InvalidArgumentMessage(last.location));\n }\n\n const args = node.arguments.slice(1, (slotName !== '')\n ? node.arguments.length - 1 : undefined).map((x) => \n {\n if (!x.expansion) msgs.push(\n new InvalidArgumentMessage(x.location));\n return x.expansion ?? '';\n });\n\n let signature: ModifierSignature = { slotName, args, preformatted: undefined };\n node.state = { name: nameValue, 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) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.blockSlotDelayedStack);\n if (check) return check;\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 arg = node.arguments[0];\n const msgs = node.state.msgs;\n if (!node.state.name) \n msgs.push(new InvalidArgumentMessage(arg.location));\n else if (cxt.config.blockModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.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) {\n const store = cxt.get(builtins)!;\n const check = parseDefineArguments(node, store.inlineSlotDelayedStack);\n if (check) return check;\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 const arg = node.arguments[0];\n if (!node.state.name) \n return [new InvalidArgumentMessage(arg.location)];\n\n const msgs = node.state.msgs;\n if (cxt.config.inlineModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.location, node.state.name));\n \n node.state.definition = makeInlineDefinition(node, 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});","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { SystemModifierDefinition, InlineEntity, ModifierSlotType, Message, NodeType, SystemModifierNode, InlineShorthand, BlockShorthand } from \"../interface\";\nimport { NameAlreadyDefinedMessage, InvalidArgumentMessage, ArgumentCountMismatchMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier, makeInlineDefinition, ModifierSignature } from \"./internal\";\n\ntype ShorthandState = {\n name: string;\n parts: [string, string][];\n postfix: string | undefined;\n signature: ModifierSignature;\n msgs: Message[];\n};\n\nfunction parseDefineArguments(\n type: NodeType.BlockModifier | NodeType.InlineModifier,\n node: SystemModifierNode<ShorthandState>,\n stack: ModifierSignature[]\n) {\n const check = checkArguments(node, 1, Infinity);\n if (check) return check;\n \n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = name.expansion!;\n if (nameValue === '' || nameValue?.includes('\\n')) return [\n new InvalidArgumentMessage(name.location, nameValue)];\n\n let slotName: string | undefined = undefined;\n let parts: [string, string][] = [];\n let postfix: string | undefined = undefined;\n let i = 1;\n while (i < node.arguments.length) {\n const arg = node.arguments[i];\n const match = /^\\((.*)\\)$/.exec(arg.expansion!);\n if (match) {\n slotName = match[1];\n i++;\n if (type == NodeType.InlineModifier) {\n if (i < node.arguments.length) {\n if (node.arguments[i].expansion === '') {\n msgs.push(new InvalidArgumentMessage(\n node.arguments[i].location, 'postfix'));\n } else {\n postfix = node.arguments[i].expansion!;\n i++;\n }\n } else msgs.push(\n new ArgumentCountMismatchMessage(node.location));\n }\n break;\n }\n \n i++;\n if (i < node.arguments.length) {\n const id = arg.expansion!;\n if (id === '') {\n return [new InvalidArgumentMessage(arg.location, 'id')];\n }\n const part = node.arguments[i].expansion!;\n if (part === '') {\n return [new InvalidArgumentMessage(\n node.arguments[i].location, 'part')];\n }\n parts.push([id, part]);\n i++;\n } else {\n msgs.push(new ArgumentCountMismatchMessage(node.location));\n break;\n }\n }\n \n if (i == node.arguments.length - 1) {\n const last = node.arguments[i];\n if (last.expansion !== '') msgs.push(\n new InvalidArgumentMessage(last.location, '(must be empty)'));\n } else if (i < node.arguments.length - 1)\n msgs.push(new ArgumentCountMismatchMessage(node.location));\n\n let signature: ModifierSignature = \n { slotName, args: parts.map((x) => x[0]), preformatted: undefined };\n node.state = { name: nameValue, 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) {\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 const arg = node.arguments[0];\n if (!node.state) \n return [new InvalidArgumentMessage(arg.location)];\n const msgs = node.state.msgs;\n if (cxt.config.blockShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.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) {\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 const arg = node.arguments[0];\n if (!node.state) \n return [new InvalidArgumentMessage(arg.location)];\n const msgs = node.state.msgs;\n if (cxt.config.inlineShorthands.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(arg.location, node.state.name));\n node.state.definition = makeInlineDefinition(node, 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});","import { BlockModifierDefinition, ModifierSlotType } from \"../interface\";\n\nexport const RawBlockMod = new BlockModifierDefinition\n ('raw', ModifierSlotType.Preformatted,\n{\n expand(node) {\n return node.content;\n },\n});","import { debug } from \"../debug\";\nimport { debugPrint } from \"../debug-print\";\nimport { BlockModifierDefinition, BlockShorthand, InlineModifierDefinition, InlineShorthand, Message, ModifierSlotType, SystemModifierDefinition } from \"../interface\";\nimport { CannotUseModuleInSelfMessage, InvalidArgumentMessage, NoNestedModuleMessage, OverwriteDefinitionsMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { NameManager } from \"../util\";\nimport { builtins } from \"./internal\";\n\nexport type ConfigDefinitions = {\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\nfunction getDefs(cxt: ParseContext): ConfigDefinitions {\n const data = cxt.get(builtins)!;\n return {\n usedModules: new Set(data.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\nfunction applyDefs(cxt: ParseContext, defs: ConfigDefinitions) {\n const data = cxt.get(builtins)!;\n data.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\nfunction 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\nfunction diffDef(cnew: ConfigDefinitions, cold: ConfigDefinitions): ConfigDefinitions {\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\nfunction addDef(cnew: ConfigDefinitions, cold: ConfigDefinitions): [ConfigDefinitions, 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 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\nexport const ModuleMod = \n new BlockModifierDefinition<{\n name: string,\n defs: ConfigDefinitions\n }>('module', ModifierSlotType.Normal, \n{\n expand(node) {\n // no need to clone?\n return []; // node.content;\n },\n beforeParseContent(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0].expansion!;\n const defs = getDefs(cxt);\n\n if (data.insideModule !== undefined) {\n return [new NoNestedModuleMessage(node.head)];\n }\n\n let msgs: Message[] = [];\n node.state = { name, defs };\n data.insideModule = name;\n if (data.modules.has(name)) {\n const [added, msg] = addDef(defs, data.modules.get(name)!);\n if (msg) msgs.push(\n new OverwriteDefinitionsMessage(node.head, msg));\n applyDefs(cxt, added);\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 data.modules.set(node.state.name, \n diffDef(getDefs(cxt), node.state.defs));\n applyDefs(cxt, node.state.defs);\n debug.trace('exiting defs for module', node.state.name);\n return [];\n },\n});\n\nexport const UseSystemMod = \n new SystemModifierDefinition<ConfigDefinitions>('use', ModifierSlotType.None, \n{\n prepareExpand(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0];\n if (!data.modules.has(name.expansion!))\n return [new InvalidArgumentMessage(name.location)];\n if (data.insideModule === name.expansion!)\n return [new CannotUseModuleInSelfMessage(name.location)];\n\n const [added, msg] = addDef(data.modules.get(name.expansion!)!, getDefs(cxt));\n node.state = added;\n\n if (msg) \n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n },\n expand(node, cxt) {\n if (node.state)\n applyDefs(cxt, node.state);\n return [];\n },\n});\n\nexport const UseBlockMod = \n new BlockModifierDefinition<{\n old: ConfigDefinitions\n }>('use', ModifierSlotType.Normal, \n{\n beforeParseContent(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const data = cxt.get(builtins)!;\n const name = node.arguments[0];\n if (!data.modules.has(name.expansion!))\n return [new InvalidArgumentMessage(name.location)];\n if (data.insideModule === name.expansion!)\n return [new CannotUseModuleInSelfMessage(name.location)];\n\n const old = getDefs(cxt);\n const [added, msg] = addDef(data.modules.get(name.expansion!)!, old);\n applyDefs(cxt, added);\n node.state = { old };\n\n if (msg) \n return [new OverwriteDefinitionsMessage(node.head, msg)];\n return [];\n },\n afterParseContent(node, cxt) {\n if (node.state)\n applyDefs(cxt, node.state.old);\n return [];\n },\n expand(node) {\n return node.content;\n },\n});","import { debug } from \"../debug\";\nimport { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition, ModifierNode, NodeType } from \"../interface\";\nimport { SlotUsedOutsideDefinitionMessage, InvalidArgumentMessage, EitherNormalOrPreMessage, UnknownModifierMessage } from \"../messages\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { _Def, _Ent, _InstData, _Node } from \"../typing-helper\";\nimport { cloneNodes, NameManager } from \"../util\";\nimport { builtins, ModifierSignature } 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: ModifierSignature) {\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 ? checkArguments(node, 1, 2)\n : checkArguments(node, 0, 1);\n if (check) {\n node.state = { ok: false };\n return check;\n }\n\n const msgs = (() => {\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineInstantiationData : store.blockInstantiationData;\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n \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 if (node.arguments.length == (inject ? 1 : 0)) {\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 const id = node.arguments[0].expansion!;\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 const arg = node.arguments[0];\n return [new InvalidArgumentMessage(arg.location, id)];\n }\n })();\n\n if (inject) {\n const arg = node.arguments.at(-1)!;\n const modName = arg.expansion!;\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(arg.location, modName)];\n }\n if (node.state?.ok)\n node.state.injectMod = mod;\n }\n\n if (msgs) 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 const mod = node.state.injectMod! as any;\n const modNode: ModifierNode = {\n type, mod,\n location: node.location,\n head: node.head,\n arguments: [], // 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);","import { debug } from \"../debug\";\nimport { InlineModifierDefinition, ModifierSlotType, ArgumentInterpolatorDefinition, SystemModifierDefinition, NodeType, BlockModifierDefinition } from \"../interface\";\nimport { InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins } from \"./internal\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\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 ifdefBlock = (name: string, x: boolean) =>\n new BlockModifierDefinition<boolean>\n (name, ModifierSlotType.Normal,\n{\n prepareExpand(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '') return [new InvalidArgumentMessage(arg.location)];\n const value = resolveId(id, cxt);\n node.state = value !== undefined;\n return [];\n },\n expand(node) {\n return (node.state == x) ? node.content : [];\n }\n});\n\nlet ifdefInline = (name: string, x: boolean) =>\n new InlineModifierDefinition<boolean>\n (name, ModifierSlotType.Normal,\n{\n prepareExpand(node, cxt) {\n const check = checkArguments(node, 1);\n if (check) return check;\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '') return [new InvalidArgumentMessage(arg.location)];\n const value = resolveId(id, cxt);\n node.state = value !== undefined;\n return [];\n },\n expand(node) {\n return (node.state == x) ? node.content : [];\n }\n});\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 const check = checkArguments(node, 1);\n if (check)\n return immediate ? check : [];\n\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '')\n return immediate ? [new InvalidArgumentMessage(arg.location)] : [];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return immediate ? [new UndefinedVariableMessage(arg.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 const check = checkArguments(node);\n if (check) return check;\n node.state = {value: node.arguments.map((x) => x.expansion!).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, cxt) {\n const check = checkArguments(node, 2);\n if (check) return check;\n\n const arg = node.arguments[0];\n const id = arg.expansion!;\n if (id == '')\n return [new InvalidArgumentMessage(arg.location)];\n node.state = {\n id,\n value: node.arguments[1].expansion!\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 { 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);\nbuiltin.blockModifiers.add(\n SlotBlockMod, PreSlotBlockMod, InjectPreSlotBlockMod,\n ModuleMod, UseBlockMod,\n IfdefBlockMod, IfndefBlockMod,\n RawBlockMod);\nbuiltin.inlineModifiers.add(\n SlotInlineMod, PreSlotInlineMod, InjectPreSlotInlineMod,\n GetVarInlineMod, PrintInlineMod,\n IfdefInlineMod, IfndefInlineMod);\nbuiltin.argumentInterpolators.add(GetVarInterpolator);\n\nexport const BuiltinConfiguration: ReadonlyConfiguration = Object.freeze(builtin);\n","import { BlockModifierDefinition, ModifierSlotType } from \"../interface\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { checkArguments } 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 = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n let arg = node.arguments[0];\n let num = Number.parseInt(arg.expansion!);\n if (isNaN(num)) return [\n new InvalidArgumentMessage(arg.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 return `<li>${cxt.state.render(node.content, cxt)}</li>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [subItemBlock, (node, cxt) => {\n return `<div class='subitem'>${cxt.state.render(node.content, cxt)}</div>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [orderedListItemBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<li value='${node.state}'>${cxt.state.render(node.content, cxt)}</li>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, number>\n];","import { BlockModifierDefinition, ModifierSlotType, ParagraphNode } from \"../interface\";\nimport { InvalidArgumentMessage } from \"../messages\";\nimport { checkArguments, 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 = checkArguments(node, 0, 1);\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 node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n if (node.arguments.length == 1) {\n const arg = node.arguments[0];\n const level = Number.parseInt(arg.expansion!);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n arg.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 = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n\n node.state = { \n name: undefined, implicit: true, \n level: (currentExplicitHeadingLevel(cxt) ?? 0 ) + 1\n };\n if (node.arguments.length == 1) {\n const arg = node.arguments[0];\n const level = Number.parseInt(arg.expansion!);\n if (isNaN(level) || level < 1 || level > 6)\n msgs = [new InvalidArgumentMessage(\n arg.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 = checkArguments(node, 1);\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 node.state = { name: undefined, level: currentHeadingLevel(cxt) ?? 1 };\n const arg = node.arguments[0];\n const split = arg.expansion!.trim().split('.').filter((x) => x.length > 0);\n if (split.length == 0 || split.length > 6)\n msgs = [new InvalidArgumentMessage(\n arg.location, 'should be a number 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 let tag = 'h' + node.state.level;\n let para = node.content[0] as ParagraphNode;\n return `<${tag}>${cxt.state.render(para.content, cxt)}</${tag}>`;\n }\n return cxt.state.invalidBlock(node, 'Bad format');\n }] satisfies BlockRendererDefiniton<HTMLRenderType, HeadingData>,\n [implicitHeadingBlock, (node, cxt) => {\n if (node.state !== undefined) {\n let tag = 'h' + node.state.level;\n return `<${tag} class='implicit'></${tag}>`;\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 let tag = 'h' + node.state.level;\n let para = node.content[0] as ParagraphNode;\n return `<${tag}><span class='heading-number'>${node.state.name}</span>${cxt.state.render(para.content, cxt)}</${tag}>`;\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 { InlineModifierDefinition, ModifierSlotType, BlockModifierDefinition, BlockEntity, NodeType, LocationRange } from \"../interface\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { ParseContext } from \"../parser-config\";\nimport { InlineRendererDefiniton } from \"../renderer\";\nimport { stripNode } from \"../util\";\nimport { HTMLComponentPlugin, HTMLRenderType } from \"./html-renderer\";\n\nexport const notes = Symbol();\n\ntype NoteSystem = {\n position: 'block' | 'section' | 'global',\n autonumber: boolean\n}\n\ntype NoteDefinition = {\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 definitions: NoteDefinition[]\n };\n }\n}\n\nexport function initNotes(cxt: ParseContext) {\n cxt.init(notes, {\n systems: new Map(),\n definitions: []\n });\n}\n\nconst noteMarkerInline = new InlineModifierDefinition<string>(\n 'note', ModifierSlotType.None,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\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 = checkArguments(node, 0, 1);\n if (msgs) return msgs;\n node.state = node.arguments.at(0)?.expansion ?? '';\n return [];\n },\n afterProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n cxt.get(notes)!.definitions.push({\n system: '',\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 }\n return [];\n },\n });\n\nconst noteBlock = new BlockModifierDefinition<string>(\n 'note', ModifierSlotType.Normal,\n {\n roleHint: 'quote',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n afterProcessExpansion(node, cxt) {\n if (node.state !== undefined) {\n // TODO: check if this is sound in typing\n let content = stripNode(...node.content) as BlockEntity[];\n debug.trace(`add note: system=<${''}> name=${node.state} @${node.location.start}`);\n debug.trace(`-->\\n`, debugPrint.node(...content));\n cxt.get(notes)!.definitions.push({\n system: '',\n name: node.state,\n location: node.location,\n content: content\n });\n }\n // manually set expansion to nothing\n node.expansion = [];\n return [];\n },\n });\n\nexport const NoteBlocks = [noteBlock];\nexport const NoteInlines = [noteInline, noteMarkerInline];\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.parseContext.get(notes)!.definitions;\n const note = defs.findIndex((x) => /*x.position >= node.start &&*/ x.name == node.state);\n if (note < 0)\n return `<sup class='note invalid'>Not found: ${node.state}</sup>`;\n return `<sup class='note' id='notemarker-id-${note}'><a href='#note-id-${note}'>${node.state}</a></sup>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>\n];\n\nexport const NotesFooterPlugin: HTMLComponentPlugin = (cxt) => {\n let defs = cxt.parseContext.get(notes)!.definitions;\n if (defs.length == 0) return undefined;\n return `<hr/>\n<section class='notes'>\n${defs.map((x, i) => \n`<section class='note' id='note-id-${i}'>\n<div class='note-name'><p><a href='#notemarker-id-${i}'>${x.name}</a></p></div>\n<div class='note-content'>${\n cxt.state.render(x.content, cxt)\n}</div></section>`).join('\\n')}\n</section>`;\n}","import { BlockModifierDefinition, ModifierSlotType, InlineModifierDefinition } from \"../interface\";\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 return `<pre><code>${cxt.state.render(node.content, cxt)}</code></pre>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>;\n\nexport const CodeInlineRendererHTML = \n [CodeInline, (node, cxt) => {\n return `<span><code>${cxt.state.render(node.content, cxt)}</code></span>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType>;","import { BlockModifierDefinition, ModifierSlotType, ParagraphNode } from \"../interface\";\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 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, attributionBlock];\n\nexport const QuoteBlockRenderersHTML = [\n [quoteBlock, (node, cxt) => {\n return `<blockquote>${cxt.state.render(node.content, cxt)}</blockquote>`\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [epitaphBlock, (node, cxt) => {\n return `<blockquote class='epitaph'>${cxt.state.render(node.content, cxt)}</blockquote>`;\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];","import { InlineModifierDefinition, ModifierSlotType } from \"../interface\";\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\nexport const InlineStyles = [emphasisInline, keywordInline, highlightInline, commentaryInline];\n\nexport const InlineStyleRenderersHTML = [\n [emphasisInline, (node, cxt) => {\n return `<em>${cxt.state.render(node.content, cxt)}</em>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [keywordInline, (node, cxt) => {\n return `<b>${cxt.state.render(node.content, cxt)}</b>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [highlightInline, (node, cxt) => {\n return `<mark>${cxt.state.render(node.content, cxt)}</mark>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>,\n [commentaryInline, (node, cxt) => {\n return `<span class='commentary'>${cxt.state.render(node.content, cxt)}</span>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType>\n];","import { ModifierSlotType, InlineModifierDefinition, BlockModifierDefinition, ParagraphNode } from \"../interface\";\nimport { checkArguments, 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 = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst linkInline = new InlineModifierDefinition<string>(\n 'link', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst styleBlock = new BlockModifierDefinition<string>(\n 'style', ModifierSlotType.Normal,\n {\n prepareExpand(node) {\n let msgs = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\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 = checkArguments(node, 1);\n if (msgs) return msgs;\n node.state = node.arguments[0].expansion!;\n return [];\n },\n });\n\nconst imageBlock = new BlockModifierDefinition<string>(\n 'image', ModifierSlotType.Normal,\n {\n roleHint: 'link',\n prepareExpand(node) {\n let msgs = checkArguments(node, 1, 2);\n if (msgs) return msgs;\n msgs = onlyPermitSingleBlock(node);\n if (msgs) return msgs;\n msgs = onlyPermitSimpleParagraphs(node);\n if (msgs) return msgs;\n // TODO: not very good!\n node.state = node.arguments.map((x) => x.expansion!).join(':');\n return [];\n },\n });\n\nexport const MiscInlines = [rubyInline, linkInline];\n\nexport const MiscBlocks = [styleBlock, breakBlock, linkBlock, imageBlock];\n\nexport const MiscInlineRenderersHTML = [\n [rubyInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n return `<ruby>${cxt.state.render(node.content, cxt)}<rt>${node.state}</rt></ruby>`\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n [linkInline, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidInline(node, 'bad format');\n return `<a href=\"${encodeURI(node.state)}\">${cxt.state.render(node.content, cxt)}</a>`;\n }] satisfies InlineRendererDefiniton<HTMLRenderType, string>,\n];\n\nexport const MiscBlockRenderersHTML = [\n [styleBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<div class=\"emmmstyle-${node.state}\" style=\"display:contents\">${cxt.state.render(node.content, cxt)}</div>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [breakBlock, () => {\n return `<hr>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType>,\n [linkBlock, (node, cxt) => {\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n return `<a href=\"${encodeURI(node.state)}\">${cxt.state.render(node.content, cxt)}</a>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>,\n [imageBlock, (node, cxt) => {\n let transformed: string | undefined;\n if (node.state === undefined)\n return cxt.state.invalidBlock(node, 'bad format');\n try {\n transformed = cxt.config.options.transformAsset(node.state);\n } catch {\n return cxt.state.invalidBlock(node, 'unable to transform asset');\n }\n const img = transformed \n ? `<img src=\"${transformed}\" data-original-src=\"${node.state}\"/>`\n : `<img src=\"${node.state}\"/>`;\n const para = node.content.length == 0 \n ? '' \n : '\\n<figcaption>'\n + cxt.state.render((node.content[0] as ParagraphNode).content, cxt)\n + '</figcaption>';\n return `<figure>${img}${para}</figure>`;\n }] satisfies BlockRendererDefiniton<HTMLRenderType, string>\n];","import { debug } from \"../debug\";\nimport { ModifierSlotType, SystemModifierDefinition } from \"../interface\";\nimport { OverwriteSpecialVariableMessage } from \"../messages\";\nimport { checkArguments, onlyPermitPlaintextParagraph } from \"../modifier-helper\";\n\nfunction createWrapper(name: string, varname?: string) {\n varname = varname ?? name.toUpperCase();\n return new SystemModifierDefinition<void>(name, ModifierSlotType.Normal, {\n delayContentExpansion: true,\n afterProcessExpansion(node, cxt) {\n let msgs = checkArguments(node, 0);\n if (msgs) return msgs;\n const result = onlyPermitPlaintextParagraph(node);\n if (typeof result !== 'string') return result;\n\n const previous = cxt.variables.get(varname);\n if (previous)\n msgs = [new OverwriteSpecialVariableMessage(node.head, varname, previous)];\n cxt.variables.set(varname, result);\n debug.trace(varname, '->', result);\n return msgs ?? [];\n },\n });\n}\n\nexport const VarWrappers = [\n createWrapper('title'),\n createWrapper('subtitle'),\n createWrapper('author'),\n createWrapper('translator'),\n createWrapper('proofreader'),\n createWrapper('typeset-by'),\n createWrapper('cover-by'),\n createWrapper('cover-img'),\n createWrapper('orig-title'),\n createWrapper('orig-link'),\n createWrapper('theme-color'),\n];","import { BuiltinConfiguration } from \"../builtin/builtin\";\nimport { BulletBlocks } from \"./bullets\";\nimport { HeadingBlocks, initHeadings } from \"./headings\";\nimport { initNotes, NoteBlocks, NoteInlines } 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 { VarWrappers } from \"./vars\";\n\nlet config = Configuration.from(BuiltinConfiguration);\nconfig.initializers.push(initNotes, initHeadings);\nconfig.blockModifiers.add(\n ...HeadingBlocks,\n ...BulletBlocks,\n CodeBlock,\n ...QuoteBlocks,\n ...MiscBlocks,\n ...NoteBlocks\n);\nconfig.inlineModifiers.add(\n CodeInline,\n ...InlineStyles,\n ...MiscInlines,\n ...NoteInlines\n);\nconfig.systemModifiers.add(\n ...VarWrappers\n)\n\nexport const DefaultConfiguration: ReadonlyConfiguration = Object.freeze(config);","import { debug } from \"../debug\";\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 { NoteInlineRenderersHTML, NotesFooterPlugin } from \"./notes\";\nimport { QuoteBlockRenderersHTML } from \"./quotes\";\n\nexport type HTMLRendererOptions = {\n headPlugins: HTMLComponentPlugin[];\n headerPlugins: HTMLComponentPlugin[];\n footerPlugins: HTMLComponentPlugin[];\n // postprocessPlugins: HTMLPostprocessPlugin[];\n transformAsset: (id: string) => string | undefined;\n // transformLink?: (url: URL) => string;\n}\n\nexport type HTMLRenderType = {\n state: HTMLRenderState,\n options: HTMLRendererOptions,\n return: string,\n};\n\nexport type HTMLRenderPlugin = \n (elem: BlockEntity | InlineEntity, cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLComponentPlugin = \n (cxt: RenderContext<HTMLRenderType>) => string | undefined;\n\nexport type HTMLPostprocessPlugin = \n (cxt: RenderContext<HTMLRenderType>, output: string) => string;\n\nexport class HTMLRenderState {\n title: string = '';\n stylesheet = ''; // FIXME: very unsafe!\n cssVariables = new Map<string, string>;\n\n // https://stackoverflow.com/questions/7381974\n escape(content: string) {\n return content\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n .replaceAll('\\n', '<br/>');\n }\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'><summary>Invalid ${this.escape(name)}</summary><i>${this.escape(msg)}</i></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 `<span class='invalid'>Invalid ${this.escape(name)} – <i>${this.escape(msg)}</i></span>`\n }\n\n render(elems: (BlockEntity | InlineEntity)[], cxt: RenderContext<HTMLRenderType>) {\n return elems.map((x) => cxt.renderEntity(x)).filter((x) => x !== undefined).join('');\n }\n}\n\nconst htmlConfig = new RenderConfiguration<HTMLRenderType>(\n {\n headPlugins: [],\n headerPlugins: [],\n footerPlugins: [NotesFooterPlugin],\n transformAsset: (x) => 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 return `\n<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n${cxt.config.options.headPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .join('\\n')}\n<title>${cxt.state.escape(cxt.state.title)}</title>\n<style>${styles}</style>\n</head>\n<body>\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 .join('\\n')}\n${results.join('\\n')}\n${cxt.config.options.footerPlugins\n .map((x) => x(cxt))\n .filter((x) => x !== undefined)\n .join('\\n')}\n</section>\n</section>\n</body>\n</html>`\n});\n\nhtmlConfig.paragraphRenderer = (node, cxt) => \n `<p>${node.content\n .map((x) => cxt.renderEntity(x))\n .filter((x) => x !== undefined).join('')}</p>`;\n\nhtmlConfig.textRenderer = (node, cxt) => {\n switch (node.type) {\n case NodeType.Preformatted:\n return cxt.state.escape(node.content.text);\n case NodeType.Text:\n case NodeType.Escaped:\n return cxt.state.escape(node.content);\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 // TODO: notes\n);\n\nhtmlConfig.addInlineRenderer(\n CodeInlineRendererHTML,\n ...InlineStyleRenderersHTML,\n ...MiscInlineRenderersHTML,\n ...NoteInlineRenderersHTML\n)\n\nexport const HTMLRenderConfiguration\n : ReadonlyRenderConfiguration<HTMLRenderType> = htmlConfig;","import { debug, DebugLevel } from './debug';\n\nexport * from './source';\nexport * from './interface';\nexport * from './scanner';\nexport * from './parser';\nexport * from './parser-config';\nexport * from './renderer';\nexport * as messages from './messages';\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}"],"mappings":";;;;;;;AAGO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,kCAAA;AACA,EAAAA,kCAAA;AACA,EAAAA,kCAAA;AAHQ,SAAAA;AAAA,GAAA;AAuBL,IAAK,WAAL,kBAAKC,cAAL;AACH,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AACA,EAAAA,oBAAA;AATQ,SAAAA;AAAA,GAAA;AAyGL,IAAK,mBAAL,kBAAKC,sBAAL;AACH,EAAAA,oCAAA;AAEA,EAAAA,oCAAA;AAEA,EAAAA,oCAAA;AALQ,SAAAA;AAAA,GAAA;AAQZ,IAAM,eAAN,MAAmC;AAAA,EAC/B,YACoB,MACA,WAAW,gBAC3B,MACJ;AAHoB;AACA;AAGhB,QAAI,KAAM,QAAO,OAAO,MAAM,IAAI;AAAA,EACtC;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxB,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAKlB;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA;AAAA;AAAA,EAIA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAIA;AACJ;AAEO,IAAM,0BAAN,cACK,aAAqD;AAAC;AAE3D,IAAM,2BAAN,cACK,aAAuD;AAAC;AAE7D,IAAM,2BAAN,cACK,aAAgD;AAAC;AAEtD,IAAM,iCAAN,MAAqC;AAAA,EACxC,YACoB,MACA,SAChB,MACJ;AAHoB;AACA;AAGhB,QAAI,KAAM,QAAO,OAAO,MAAM,IAAI;AAAA,EACtC;AAAA,EAEA,kBAAkB;AAAA,EAClB;AACJ;;;AC5MO,IAAM,cAAN,MAAM,aAAsC;AAAA,EACvC,QAA6B,CAAC;AAAA,EAC9B,OAAO,oBAAI,IAAe;AAAA,EAElC,YAAY,MAA+D;AACvE,QAAI,SAAS,OAAW;AACxB,QAAI,gBAAgB,cAAa;AAC7B,WAAK,QAAQ,CAAC,GAAG,KAAK,KAAK;AAC3B,WAAK,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,IACjC,OAAO;AACH,YAAM,QAAQ,CAAC,GAAG,IAAuC;AACzD,cAAQ,gBAAgB,MAAM,OAAO,IAAI,IAAI,KAAK,GAAG,QAAQ,MAAM,MAAM;AACzE,WAAK,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAC,GAAG,EAAE,MAAM,GAAG,EAAC,EAAE;AACjD,WAAK,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM;AACjD,WAAK,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,IACrD;AAAA,EACJ;AAAA,EAEA,UAAe;AACX,WAAO,KAAK,MAAM,IAAI,CAAC,EAAC,EAAC,MAAM,CAAC;AAAA,EACpC;AAAA,EAEA,QAAgB;AACZ,WAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AAAA,EACjC;AAAA,EAEA,IAAI,MAAc;AACd,WAAO,KAAK,KAAK,IAAI,IAAI;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAc;AACd,WAAO,KAAK,KAAK,IAAI,IAAI;AAAA,EAC7B;AAAA,EAEA,OAAO,MAAc;AACjB,QAAI,IAAI,KAAK,KAAK,IAAI,IAAI;AAC1B,WAAO,MAAM,MAAS;AACtB,SAAK,KAAK,OAAO,IAAI;AACrB,SAAK,MAAM,OAAO,KAAK,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,CAAC;AAAA,EACjE;AAAA,EAEA,OAAO,OAAY;AACf,eAAW,QAAQ,OAAO;AACtB,aAAO,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;AAC3B,WAAK,KAAK,IAAI,KAAK,MAAM,IAAI;AAC7B,YAAM,MAAM,KAAK,KAAK;AACtB,UAAI,IAAI;AACR,aAAO,IAAI,KAAK,MAAM,UAAU,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,IAAK;AAC9D,WAAK,MAAM,OAAO,GAAG,GAAG,EAAC,GAAG,KAAK,MAAM,GAAG,KAAI,CAAC;AAAA,IACnD;AAAA,EACJ;AAAA,EAEA,KAAK,WAA6C;AAC9C,UAAM,SAAS,KAAK,MAAM,KAAK,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;AACpD,WAAO,SAAS,OAAO,IAAI;AAAA,EAC/B;AACJ;AAIO,SAAS,OAAO,GAAuB;AAC1C,MAAI,CAAC,CAAC,CAAC,GAAG;AACN,QAAI,QAAQ,IAAI,MAAM,kBAAkB;AACxC,YAAQ,IAAI,MAAM,KAAK;AACvB,UAAM;AAAA,EACV;AACJ;AAWA,IAAM,gBAAgB,CAAC,KAAuB,aAAiD;AAAA,EAC3F,UAAU,cAAc,IAAI,UAAU,OAAO;AAAA,EAC7C,SAAS,IAAI,QAAQ,IAAI,CAAC,QAAQ;AAC9B,YAAQ,IAAI,MAAM;AAAA,MACd;AAAA,MACA;AACI,eAAO,gBAAgB,GAAG;AAAA,MAC9B;AACI,eAAO;AAAA,UACH,MAAM,IAAI;AAAA,UACV,UAAU,cAAc,IAAI,UAAU,OAAO;AAAA,UAC7C,YAAY,IAAI;AAAA,UAChB,UAAU,cAAc,IAAI,UAAU,OAAO;AAAA,UAC7C,WAAW,IAAI;AAAA,QACnB;AAAA,MACJ;AACI,eAAO,MAAM,MAAM,GAAG;AAAA,IAC9B;AAAA,EACJ,CAAC;AACL;AAEA,SAAS,cAAc,KAAoB,SAA0C;AACjF,MAAI,OAAO,QAAQ,eAAe;AAClC,SAAO;AAAA,IACH,OAAO,KAAK;AAAA,IACZ,KAAK,KAAK;AAAA,IACV,WAAW,KAAK;AAAA,IAChB,UAAU,QAAQ,cAAc,MAAM,IAAI;AAAA,IAC1C,QAAQ,KAAK;AAAA,EACjB;AACJ;AAEO,SAAS,UAAU,MAAoB,UAA4B,CAAC,GAC3E;AACI,UAAQ,KAAK,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AACI,aAAO;AAAA,QACH,UAAU,cAAc,KAAK,UAAU,OAAO;AAAA,QAC9C,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,OAAO,QAAQ,YAAY,KAAK,QAAQ;AAAA,QACxC,MAAM,gBAAgB,KAAK,IAAI;AAAA,QAC/B,WAAW,KAAK,UAAU,IAAI,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAAA,QAC9D,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,CAAQ;AAAA,QAC7D,WAAW,KAAK,YAAY,WAAW,KAAK,WAAW,OAAO,IAAW;AAAA,MAC7E;AAAA,IACJ;AACI,aAAO;AAAA,QACH,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,CAAQ;AAAA,MACjE;AAAA,IACJ;AACI,aAAO;AAAA,QACH,MAAM,KAAK;AAAA,QACX,UAAU,cAAc,KAAK,UAAU,OAAO;AAAA,QAC9C,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,CAAQ;AAAA,MACjE;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AACI,aAAO,gBAAgB,IAAI;AAAA,IAC/B;AACI,aAAO,MAAM,MAAM,IAAI;AAAA,EAC/B;AACJ;AAEO,SAAS,WACZ,OAAgC,UAA4B,CAAC,GAC/C;AACd,SAAO,MAAM,IAAI,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC;AACjD;AAGO,SAAS,aAAa,OAAuC;AAChE,SAAO,MAAM,QAAQ,CAAC,SAAS;AAC3B,YAAQ,KAAK,MAAM;AAAA,MACf;AAAA,MACA;AAAA,MACA;AACI,eAAO,CAAC,IAAI;AAAA,MAChB;AAAA,MACA;AACI,YAAI,KAAK,cAAc;AACnB,iBAAO,KAAK,UAAU,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC;AAAA;AAAA,MAEzD;AAAA,MACA;AACI,aAAK,UAAU,KAAK,QAAQ,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC;AACvD,eAAO,CAAC,IAAI;AAAA,MAChB;AACI,eAAO,CAAC;AAAA,MACZ;AACI,eAAO,MAAM,MAAM,IAAI;AAAA,IAC/B;AAAA,EACJ,CAAC;AACL;;;ACjLO,IAAK,aAAL,kBAAKC,gBAAL;AACH,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AACA,EAAAA,wBAAA;AALQ,SAAAA;AAAA,GAAA;AAQL,IAAM,QAAQ;AAAA,EACjB,OAAO;AAAA,EACP,MAAM,SAAc,MAAW;AAC3B,QAAI,KAAK,QAAQ,cAAkB;AACnC,QAAI,OAAO,QAAQ,WAAY,QAAO,KAAK;AAC3C,YAAQ,KAAK,SAAS,MAAM,GAAG,IAAI;AAAA,EACvC;AAAA,EACA,KAAK,SAAc,MAAW;AAC1B,QAAI,KAAK,QAAQ,aAAiB;AAClC,QAAI,OAAO,QAAQ,WAAY,QAAO,KAAK;AAC3C,YAAQ,KAAK,SAAS,MAAM,GAAG,IAAI;AAAA,EACvC;AAAA,EACA,QAAQ,SAAc,MAAW;AAC7B,QAAI,KAAK,QAAQ,gBAAoB;AACrC,QAAI,OAAO,QAAQ,WAAY,QAAO,KAAK;AAC3C,YAAQ,KAAK,SAAS,MAAM,GAAG,IAAI;AAAA,EACvC;AAAA,EACA,MAAM,SAAc,MAAW;AAC3B,QAAI,KAAK,QAAQ,cAAkB;AACnC,QAAI,OAAO,QAAQ,WAAY,QAAO,KAAK;AAC3C,YAAQ,MAAM,SAAS,MAAM,GAAG,IAAI;AAAA,EACxC;AAAA,EACA,MAAM,GAAU;AACZ,WAAO,KAAK;AAAA,EAChB;AACJ;;;ACbO,IAAM,eAAN,MAAqC;AAAA,EAKxC,YAAY,GAAsC,KAAa;AAAb;AAC9C,SAAK,OAAO,EAAE;AACd,SAAK,UAAU,CAAC,CAAC;AACjB,KAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,GAAG,MAAM;AACvB,UAAI,KAAK,KAAM,MAAK,QAAQ,KAAK,IAAE,CAAC;AAAA,IACxC,CAAC;AACD,SAAK,SAAS,KAAK,QAAQ;AAC3B,SAAK,QAAQ,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAZS;AAAA,EACA;AAAA,EACQ;AAAA,EAYjB,UAAU,KAAyC;AAC/C,QAAI,OAAO,IAAI,UAAU;AACzB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC1C,UAAI,KAAK,QAAQ,CAAC,IAAI,KAAK;AACvB,eAAO,IAAI;AACX,kBAAU,KAAK,QAAQ,IAAI,CAAC;AAC5B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,CAAC,MAAM,MAAM,OAAO;AAAA,EAC/B;AAAA,EAEA,aAAa,GAAmB;AAC5B,WAAO,KAAK,CAAC;AACb,QAAI,KAAK,KAAK,QAAQ,OAAQ,QAAO;AACrC,WAAO,KAAK,QAAQ,CAAC;AAAA,EACzB;AAAA,EAEA,QAAQ,GAA+B;AACnC,UAAM,QAAQ,KAAK,aAAa,CAAC;AACjC,UAAM,MAAM,KAAK,aAAa,IAAI,CAAC;AACnC,QAAI,UAAU,SAAU,QAAO;AAC/B,WAAO,KAAK,IAAI,UAAU,OAAO,MAAM,CAAC;AAAA,EAC5C;AAGJ;;;AC5DO,IAAM,gBAAN,MAAuC;AAAA,EAG1C,YACY,KACR,aAA+B,EAAC,MAAM,UAAS,GACnD;AAFY;AAGR,SAAK,SAAS,IAAI,aAAa,YAAY,GAAG;AAAA,EAClD;AAAA,EAPgB;AAAA,EACR,MAAM;AAAA,EAQd,WAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,QAAiB;AACb,WAAO,KAAK,OAAO,KAAK,IAAI;AAAA,EAChC;AAAA,EAEA,KAAK,KAAsB;AACvB,WAAO,QAAQ,EAAE;AACjB,QAAI,OAAO,KAAK,MAAM,IAAI;AAC1B,QAAI,OAAO,KAAK,IAAI,OAAQ,QAAO;AACnC,WAAO,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,MAAM,KAAK;AAAA,EAC9D;AAAA,EAEA,aAAqB;AACjB,QAAI,KAAK,MAAM,EAAG,OAAM,IAAI,WAAW,KAAK;AAC5C,QAAI,OAAO,KAAK,IAAI,KAAK,GAAG;AAC5B,SAAK;AACL,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,KAAsB;AACzB,QAAI,CAAC,KAAK,KAAK,GAAG,EAAG,QAAO;AAC5B,SAAK,OAAO,IAAI;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,uBAAsC;AAClC,QAAI,KAAK,MAAM,EAAG,QAAO;AACzB,QAAI,OAAO,KAAK,IAAI,KAAK,GAAG;AAC5B,QAAI,CAAC,KAAM,SAAS,IAAI,EAAG,QAAO;AAClC,SAAK;AACL,WAAO;AAAA,EACX;AACJ;;;AC5CO,IAAM,aAAa;AAAA,EACtB,eAAe,CAAC,MACZ,KAAK,EAAE,IAAI,MAAM,iBAAiB,EAAE,QAAQ,CAAC;AAAA,EAEjD,gBAAgB,CAAC,MACb,KAAK,EAAE,IAAI,MAAM,iBAAiB,EAAE,QAAQ,CAAC;AAAA,EAEjD,iBAAiB,CAAC,MACd,EAAE,OAAO,EAAE,MAAM,IAAI,CAACC,IAAG,MAAM,WAAW,CAAC,QAAQA,EAAC,EAAE,EAAE,KAAK,EAAE,KACrD,EAAE,IAAI,2BACF,KAAK,iBAAiB,EAAE,WAAW,cAAc;AAAA,EAEnE,gBAAgB,CAAC,MACb,EAAE,OAAO,EAAE,MAAM,IAAI,CAACA,IAAG,MAAM,WAAW,CAAC,QAAQA,EAAC,EAAE,EAAE,KAAK,EAAE,KACrD,EAAE,IAAI,2BACF,KAAK,iBAAiB,EAAE,WAAW,cAAc;AAAA,EAEnE,UAAU,CAAC,QACP,IAAI,QAAQ,IAAI,mBAAmB,EAAE,KAAK,EAAE;AAAA,EAEhD,MAAM,IAAI,UACN,MAAM,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAEjD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AACd;AAEA,SAAS,oBAAoB,MAA8B;AACvD,UAAQ,KAAK,MAAM;AAAA,IACf;AACI,aAAO,KAAK;AAAA,IAChB;AACI,aAAO,YAAY,KAAK,OAAO;AAAA,IACnC;AACI,aAAO,WAAW,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,OAAO,IAAI,WAAW,SAAS,KAAK,QAAQ,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,SAAS,KAAK,EAAE;AAAA,IACxJ;AACI,aAAO,MAAM,MAAM,IAAI;AAAA,EAC/B;AACJ;AAEA,SAAS,eAAe,MAAkC,SAAS,IAAI;AACnE,WAAS,gBAAgB,SAAyCC,UAAiB,IAAI;AACnF,QAAI,QAAQ,QAAQ,IAAI,CAAC,MAAM,eAAe,GAAGA,UAAS,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAC3F,QAAI,MAAM,UAAU,EAAG,QAAO;AAC9B,WAAO,MAAM,IAAI,CAAC,MAAM,GAAGA,OAAM,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,EACxD;AACA,MAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,KAAK;AAC3D,UAAQ,KAAK,MAAM;AAAA,IACf;AACI,YAAM,UAAU,gBAAgB,KAAK,SAAS,MAAM;AACpD,UAAI,QAAQ,SAAS;AACjB,kBAAU;AAAA,EAAM,OAAO;AAAA,EAAK,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG;AAAA,UAC9E,WAAU,IAAI,KAAK,SAAS,GAAG;AACpC;AAAA,IACJ;AACI,gBAAU;AAAA,EAAM,MAAM,KAAK,KAAK,OAAO;AAAA,EAAK,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG;AAC/F;AAAA,IACJ;AACI,gBAAU;AAAA,EAAM,MAAM,KAAK,KAAK,QAAQ,IAAI;AAAA,EAAK,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG;AACpG;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AACI,YAAM,OAAO,KAAK,UAAU,IAAI,CAAC,GAAG,MAAM;AAAA,EAAK,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,EAAE,SAAS,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE;AAC1I,UAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,kBAAU,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI;AAAA,IAAQ,gBAAgB,KAAK,SAAS,MAAM,IAAI;AAAA,EAAK,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG;AAAA,MACjJ,MAAO,WAAU,IAAI,KAAK,SAAS,GAAG,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI;AACjE,UAAI,KAAK,WAAW;AAChB,cAAMC,WAAU,gBAAgB,KAAK,WAAW,MAAM;AACtD,YAAIA,SAAQ,SAAS;AACjB,oBAAU;AAAA,EAAK,MAAM;AAAA,EAAgBA,QAAO;AAAA,EAAK,MAAM;AAAA,iBAClD,KAAK;AACV,oBAAU;AAAA,EAAK,MAAM;AAAA,MAC7B;AACA;AAAA,IACJ;AACI,aAAO,KAAK;AAAA,IAChB;AACI,aAAO,MAAM,MAAM,IAAI;AAAA,EAC/B;AACA,SAAO;AACX;AAEA,SAAS,gBAAgB,KAAoB,UAAU,GAAG;AACtD,QAAM,oBAAoB,IAAI,SAAS,IAAI;AAC3C,MAAI,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,UAAU,IAAI,KAAK;AAC7C,MAAI,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,UAAU,IAAI,aAAa,IAAI,GAAG;AAC5D,QAAM,WAAW,KAAK,KAAK,KAAG,GAAG,SAAS,EAAE,SAAS,KAAG,GAAG,SAAS,EAAE,MAAM;AAE5E,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,OAAO;AAC1C,QAAM,UAAU,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,OAAO;AAC5D,MAAI,QAAkB,CAAC;AACvB,WAAS,IAAI,WAAW,KAAK,SAAS,KAAK;AACvC,UAAM,OAAO,IAAI,OAAO,QAAQ,CAAC;AACjC,UAAM,MAAM,IAAE,GAAG,SAAS,EAAE,SAAS,QAAQ,IAAI,QAAQ,IAAI;AAC7D,QAAI,KAAK,MAAM,KAAK,IAAI;AACpB,YAAM,WAAW,KAAK,KAAK,KAAK;AAChC,YAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AACnC,YAAM;AAAA,QACA,IAAI,OAAO,QAAQ,IAAI,QACvB,IAAI,OAAO,QAAQ,KAClB,oBAAoB,MAAM,IAAI,OAAO,SAAS,WAAW,CAAC;AAAA,MAAE;AAAA,IACvE;AAAA,EACJ;AACA,SAAO,MAAM,KAAK,IAAI;AAC1B;AAEA,SAAS,cAAc,GAAY;AAC/B,QAAM,OAAO,CAACC,SAAuB;AACjC,UAAM,CAAC,IAAI,EAAE,IAAIA,KAAI,OAAO,UAAUA,KAAI,KAAK;AAC/C,QAAIA,KAAI,SAASA,KAAI,IAAK,QAAO,IAAI,KAAG,CAAC,IAAI,KAAG,CAAC;AACjD,UAAM,CAAC,IAAI,EAAE,IAAIA,KAAI,OAAO,UAAUA,KAAI,GAAG;AAC7C,WAAO,IAAI,KAAG,CAAC,IAAI,KAAG,CAAC,KAAK,KAAG,CAAC,IAAI,KAAG,CAAC;AAAA,EAC5C;AACA,MAAI,MAAiC,EAAE;AACvC,MAAI,SAAS,MAAM,KAAK,GAAG,CAAC,KAAK,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI;AAClF,SAAO,MAAM,IAAI,UAAU;AACvB,QAAI,IAAI,IAAI,WAAW,EAAE,SAAS,SAAS,OAAO,IAAI,OAAO,IAAI,OAAO;AACxE,cAAU;AAAA,oBAAuB,CAAC,GAAG,KAAK,GAAG,CAAC;AAAA,EAClD;AACA,SAAO;AACX;AAEA,SAAS,kBAAkB,KAAuB;AAC9C,MAAI,OAAO,WAAW,KAAK,GAAG,IAAI,KAAK,OAAO;AAC9C,MAAI,OAAO,IAAI,SAAS,IAAI,CAAC,MACzB,gBAAgB,EAAE,QAAQ,IAAI,OAAO,cAAc,CAAC,CAAC,EAAE,KAAK,IAAI;AACpE,MAAI,KAAK,SAAS,EAAG,SAAQ;AAC7B,SAAO,aAAa,IAAI,KAAK,OAAO,IAAI;AAAA,EAAK,IAAI,GAAG,IAAI;AAC5D;;;ACtIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAM,kBAAN,MAAyC;AAAA,EACrC,YACoB,MACA,UACA,UACA,MAAa;AAHb;AACA;AACA;AACA;AAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatC;AAEA,IAAM,qBAAN,MAA4C;AAAA,EACxC,YACoB,MACA,UACA,UAEA,MAAa;AAJb;AACA;AACA;AAEA;AAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatC;AAEO,IAAM,kBAAN,MAAyC;AAAA,EAC5C,YACoB,UACR,MACZ;AAFoB;AACR;AAER,WAAO,SAAS,OAAO,SAAS,KAAK;AAAA,EACzC;AAAA,EACS,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,aAAa,KAAK,IAAI;AAAA,EAAI;AAC1D;AAEO,IAAM,yBAAN,MAAgD;AAAA,EACnD,YACoB,UACR,MAAc;AADN;AACR;AAAA,EAAe;AAAA,EAClB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAO;AAAE,WAAO,qBAAqB,KAAK,IAAI;AAAA,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa3D;AAEO,IAAM,gCAAN,MAAuD;AAAA,EAC1D,YACoB,UACR,MACZ;AAFoB;AACR;AAER,WAAO,SAAS,OAAO,SAAS,KAAK;AAAA,EACzC;AAAA,EACS,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,4BAA4B,KAAK,IAAI;AAAA,EAAI;AACzE;AAEO,IAAM,+BAAN,MAAsD;AAAA,EACzD,YACoB,UAChB,KAAc,KAClB;AAFoB;AAGhB,QAAI,QAAQ,QAAW;AACnB,UAAI,OAAO,IAAK,MAAK,MAAM,KAAK,GAAG;AAAA,eAC1B,QAAQ,OAAW,MAAK,MAAM,KAAK,GAAG,OAAO,GAAG;AAAA,UACpD,MAAK,MAAM,cAAc,GAAG;AAAA,IACrC,OAAO;AACH,UAAI,QAAQ,OAAW,MAAK,MAAM,aAAa,GAAG;AAAA,IACtD;AAAA,EACJ;AAAA,EACQ,MAAM;AAAA,EACL,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,4BAA4B,KAAK;AAAA,EAAK;AACtE;AAEO,IAAM,8BAAN,MAAqD;AAAA,EACxD,YACoB,UACR,MAAe;AADP;AACR;AAAA,EAAgB;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,+BAA+B,KAAK,SAAS,SAAY,KAAK,KAAK,KAAK,IAAI;AAAA,EAAI;AAChH;AAEO,IAAM,yBAAN,MAAgD;AAAA,EACnD,YACoB,UACR,MAAe;AADP;AACR;AAAA,EAAgB;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,sBAAsB,KAAK,SAAS,SAAY,KAAK,KAAK,KAAK,IAAI;AAAA,EAAI;AACvG;AAEO,IAAM,0BAAN,MAAiD;AAAA,EACpD,YACoB,UACR,MAAe;AADP;AACR;AAAA,EAAgB;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,qCACvB,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK;AAAA,EAAI;AAC5C;AAEO,IAAM,+BAAN,MAAsD;AAAA,EACzD,YACoB,UACR,OACA,MAAc;AAFN;AACR;AACA;AAAA,EAAe;AAAA,EAClB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AACf,WAAO,2BAA2B,KAAK,KAAK,mBAAmB,KAAK,IAAI;AAAA,EAC5E;AACJ;AAEO,IAAM,mCAAN,MAA0D;AAAA,EAC7D,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAAiC;AACjE;AAEO,IAAM,wBAAN,MAA+C;AAAA,EAClD,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAAwC;AACxE;AAEO,IAAM,+BAAN,MAAsD;AAAA,EACzD,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAAmD;AACnF;AAEO,IAAM,2BAAN,MAAkD;AAAA,EACrD,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAAyD;AACzF;AAEO,IAAM,oCAAN,MAA2D;AAAA,EAC9D,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAAyC;AACzE;AAEO,IAAM,uCAAN,MAA8D;AAAA,EACjE,YACoB,UAAyB;AAAzB;AAAA,EAA0B;AAAA,EACrC,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO;AAAA,EAA4C;AAC5E;AAKO,IAAM,4BAAN,cAAwC,mBAAmB;AAAA,EAC9D,YAAY,UAAyB;AACjC;AAAA,MAAM;AAAA;AAAA,MAA4B;AAAA,MAC9B;AAAA,IAAoD;AAAA,EAC5D;AACJ;AAEO,IAAM,mCAAN,cAA+C,gBAAgB;AAAA,EAClE,YAAY,UAAyB;AACjC;AAAA,MAAM;AAAA;AAAA,MAA4B;AAAA,MAC9B;AAAA,IAA2D;AAAA,EACnE;AACJ;AAEO,IAAM,2BAAN,cAAuC,gBAAgB;AAAA,EAC1D,YAAY,UAAyB;AACjC;AAAA,MAAM;AAAA;AAAA,MAA4B;AAAA,MAC9B;AAAA,IAA6D;AAAA,EACrE;AACJ;AAEO,IAAM,4BAAN,MAAmD;AAAA,EACtD,YACoB,UACR,MAAc;AADN;AACR;AAAA,EAAe;AAAA,EAClB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,4CAA4C,KAAK,IAAI;AAAA,EAAG;AACxF;AAEO,IAAM,2BAAN,MAAkD;AAAA,EACrD,YACoB,UACR,MAAc;AADN;AACR;AAAA,EAAe;AAAA,EAClB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,uDAAuD,KAAK,IAAI;AAAA,EAAG;AACnG;AAEO,IAAM,8BAAN,MAAqD;AAAA,EACxD,YACoB,UACR,MAAc;AADN;AACR;AAAA,EAAe;AAAA,EAClB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,qCAAqC,KAAK,IAAI;AAAA,EAAG;AACjF;AAEO,IAAM,kCAAN,MAAyD;AAAA,EAC5D,YACoB,UACR,SACA,UAAkB;AAFV;AACR;AACA;AAAA,EAAmB;AAAA,EACtB,OAAO;AAAA,EACP;AAAA,EACT,IAAI,OAAe;AAAE,WAAO,GAAG,KAAK,OAAO,4BAA4B,KAAK,QAAQ;AAAA,EAA0B;AAClH;;;ACxPO,IAAM,eAAN,MAAmB;AAAA,EAGtB,YACWC,SACA,YAAY,oBAAI,IAAoB,GAAG;AADvC,kBAAAA;AACA;AACP,IAAAA,QAAO,aAAa,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,EAC9C;AAAA,EANQ,OAAqC,CAAC;AAAA,EAQ9C,KAAqC,KAAQ,KAAgC;AACzE,WAAO,EAAE,OAAO,KAAK,KAAK;AAC1B,SAAK,KAAK,GAAG,IAAI;AAAA,EACrB;AAAA,EAEA,IAAoC,KAAQ,KAAgC;AACxE,WAAO,OAAO,KAAK,IAAI;AACvB,SAAK,KAAK,GAAG,IAAI;AAAA,EACrB;AAAA,EAEA,IAAoC,KAAmC;AACnE,WAAO,OAAO,KAAK,IAAI;AACvB,WAAO,KAAK,KAAK,GAAG;AAAA,EACxB;AACJ;AAEO,IAAM,WAAN,MAAM,UAAS;AAAA,EAClB,YACoB,MACA,SACA,UAA8B;AAF9B;AACA;AACA;AAAA,EAAgC;AAAA,EAEpD,aAAa;AACT,QAAI,MAAM,IAAI;AAAA,MACV,UAAU,UAAU,KAAK,MAAM,EAAC,WAAW,KAAI,CAAC,CAAC,EAAE,CAAC;AAAA,MACpD,KAAK;AAAA,MAAS,KAAK;AAAA,IAAQ;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,UAAgG;AACjG,QAAI,QAAyD,KAAK,KAAK;AACvE,QAAI;AACJ,WAAO,OAAO,MAAM,MAAM,GAAG;AACzB,YAAM,SAAS,SAAS,IAAI;AAC5B,UAAI,UAAU,QAAS;AACvB,UAAI,UAAU,OAAQ;AAEtB,UAAI,eAAe;AACf,cAAM,KAAK,GAAG,KAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1D,UAAI,aAAa,QAAQ,MAAM,QAAQ,KAAK,OAAO;AAC/C,cAAM,KAAK,GAAG,KAAK,OAAO;AAAA,IAClC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,KAA8D;AAC1E,UAAM,SAA0D,CAAC;AACjE,QAAI,QAAyD,KAAK,KAAK;AACvE,QAAI;AACJ,WAAO,OAAO,MAAM,MAAM,GAAG;AACzB,UAAI,KAAK,SAAS,SAAS,QACvB,KAAK,SAAS,aAAa,KAAK,SAAS,QAAQ,KACrD;AACI,eAAO,KAAK,IAAI;AAChB,gBAAQ,CAAC;AACT,YAAI,eAAe;AACf,gBAAM,KAAK,GAAG,KAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1D,YAAI,aAAa,QAAQ,MAAM,QAAQ,KAAK,OAAO;AAC/C,gBAAM,KAAK,GAAG,KAAK,OAAO;AAAA,MAClC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAcO,IAAM,gBAAN,MAAM,eAA+C;AAAA,EACxD,eAAgD,CAAC;AAAA,EACjD,iBAAiB,IAAI;AAAA,EACrB,kBAAkB,IAAI;AAAA,EACtB,kBAAkB,IAAI;AAAA,EACtB,wBAAwB,IAAI;AAAA,EAE5B,kBAAkB,IAAI;AAAA,EACtB,mBAAmB,IAAI;AAAA,EACvB,oBAAoB;AAAA,EAEpB,OAAO,KAAK,MAA6B;AACrC,QAAIA,UAAS,IAAI,eAAc;AAC/B,IAAAA,QAAO,eAAe,CAAC,GAAG,KAAK,YAAY;AAC3C,IAAAA,QAAO,oBAAoB,KAAK;AAChC,IAAAA,QAAO,iBAAiB,IAAI,YAAY,KAAK,cAAc;AAC3D,IAAAA,QAAO,kBAAkB,IAAI,YAAY,KAAK,eAAe;AAC7D,IAAAA,QAAO,kBAAkB,IAAI,YAAY,KAAK,eAAe;AAC7D,IAAAA,QAAO,wBAAwB,IAAI,YAAY,KAAK,qBAAqB;AACzE,IAAAA,QAAO,kBAAkB,IAAI,YAAY,KAAK,eAAe;AAC7D,IAAAA,QAAO,mBAAmB,IAAI,YAAY,KAAK,gBAAgB;AAC/D,WAAOA;AAAA,EACX;AACJ;;;AChHA,IAAM,cAAc;AACpB,IAAM,YAAY;AAElB,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,oBAAoB;AAE1B,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAEhC,IAAM,uBAAuB;AAE7B,IAAM,kBAAkB;AAAA,EACpB,sBAAuB,GAAG,IAAI,wBAAwB,yBAAkC;AAAA,EACxF,uBAAwB,GAAG,IAAI,yBAAyB,yBAAkC;AAAA,EAC1F,uBAAwB,GAAG,IAAI,yBAAyB,yBAAkC;AAC9F;AAOA,IAAM,kBAAN,MAAsB;AAAA,EAMlB,YAAoB,SAAkB;AAAlB;AAChB,SAAK,OAAO,EAAC,oBAAqB,QAAQ,QAAQ,QAAQ,SAAS,CAAC,EAAC;AAAA,EACzE;AAAA,EAPO;AAAA,EACA,WAAsB,CAAC;AAAA,EACtB,aAAqC,CAAC;AAAA,EACtC,cAAuC,CAAC;AAAA,EAMhD,WAAW,GAAc;AACrB,aAAS,OAAO,GAAG;AACf,WAAK,SAAS,KAAK,GAAG;AACtB,YAAM,MAAM,cAAc,IAAI,MAAM,IAAI,IAAI;AAAA,IAChD;AAAA,EACJ;AAAA,EAEA,aAAa,GAAgB;AACzB,KAAC,KAAK,WAAW,GAAG,EAAE,KAAK,KAAK,MAAM,QAAQ,KAAK,CAAC;AACpD,WAAO;AAAA,EACX;AAAA,EAEA,cAAc,GAAiB;AAC3B,WAAO,KAAK,YAAY,SAAS,CAAC;AAClC,SAAK,YAAY,GAAG,EAAE,EAAG,QAAQ,KAAK,CAAC;AACvC,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,KAAa;AACnB,WAAO,KAAK,YAAY,SAAS,CAAC;AAClC,UAAM,UAAU,KAAK,YAAY,GAAG,EAAE,EAAG;AACzC,UAAM,OAAO,QAAQ,GAAG,EAAE;AAC1B,QAAI,MAAM,sBAAuB;AAC7B,WAAK,WAAW;AAChB,WAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,IAC9C,MAAO,SAAQ,KAAK;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,QACN,QAAQ,KAAK,QAAQ;AAAA,QACrB,OAAO,KAAK,QAAQ,SAAS,IAAI,IAAI;AAAA,QACrC,KAAK,KAAK,QAAQ,SAAS;AAAA,MAC/B;AAAA,MACA,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA,EAEA,WAAW,OAAiE;AACxE,SAAK,aAAa,KAAK;AACvB,SAAK,WAAW,KAAK,KAAK;AAAA,EAC9B;AAAA,EAEA,WAAW;AACP,WAAO,KAAK,WAAW,SAAS,CAAC;AACjC,UAAM,OAAO,KAAK,WAAW,IAAI;AACjC,SAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,EAC9C;AAAA,EAEA,YAAY,GAAgD;AACxD,QAAI,EAAE,0BAA4B,MAAK,aAAa,CAAC;AAAA,QAChD,MAAK,cAAc,CAAC;AACzB,SAAK,YAAY,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEA,YAAY;AACR,WAAO,KAAK,YAAY,SAAS,CAAC;AAClC,UAAM,OAAO,KAAK,YAAY,IAAI;AAClC,SAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,EAC9C;AACJ;AAEA,IAAM,SAAN,MAAa;AAAA,EAKT,YACY,SACA,KACV;AAFU;AACA;AAER,SAAK,OAAO,IAAI,gBAAgB,OAAO;AAAA,EAC3C;AAAA,EATQ;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EASrB,KAAK,IAA4B;AAC7B,WAAO;AAAA,MACH,QAAQ,KAAK,QAAQ;AAAA,MACrB,OAAO,KAAK,QAAQ,SAAS;AAAA,MAC7B,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,SAAS,MAAc,IAA4B;AAC/C,WAAO;AAAA,MACH,QAAQ,KAAK,QAAQ;AAAA,MACrB,OAAO;AAAA,MACP,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,MAA+F,MAA0C;AACrI,YAAQ,MAAM;AAAA,MACV;AAA8B,eAAO,KAAK,IAAI,OAAO;AAAA,MACrD;AAA8B,eAAO,KAAK,IAAI,OAAO;AAAA,MACrD;AAA6B,eAAO,KAAK,IAAI,OAAO;AAAA,MACpD;AAAS,eAAO,MAAM,MAAM,IAAI;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,SAAS,OAAuC,OAAwB;AACpE,QAAI,QAAQ,KAAK,IAAI,OAAO,kBAAmB,QAAO;AACtD,QAAI,KAAK;AACT,eAAW,QAAQ,OAAO;AACtB,cAAQ,KAAK,MAAM;AAAA,QACf;AAAA,QACA;AAAA,QACA;AACI;AAAA,QACJ;AACI,eAAK,KAAK,SAAS,KAAK,SAAS,QAAQ,CAAC,KAAK;AAC/C;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AACI,eAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC,KAAK;AACtC;AAAA,QACJ;AACI,gBAAM,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,gBAAgB,KAAuB;AACnC,QAAI,IAAI,cAAc;AAClB,aAAO,IAAI;AACf,QAAI,SAAS;AACb,UAAM,YAAY,KAAK,cAAc;AACrC,eAAW,KAAK,IAAI,SAAS;AACzB,cAAQ,EAAE,MAAM;AAAA,QACZ;AAAA,QACA;AACI,oBAAU,EAAE;AACZ;AAAA,QACJ;AACI,cAAI,EAAE,cAAc,QAAW;AAC3B,kBAAM,QAAQ,KAAK,gBAAgB,EAAE,QAAQ;AAC7C,gBAAI,UAAU,UACV,EAAE,WAAW,WAAW,UACvB,CAAC,aAAa,CAAC,EAAE,WAAW;AAC7B,qBAAO;AACX,cAAE,YAAY,EAAE,WAAW,OAAO,OAAO,KAAK,KAAK,SAAS;AAC5D,gBAAI,EAAE,cAAc;AAChB,qBAAO;AAAA,UACf;AACA,oBAAU,EAAE;AACZ;AAAA,QACJ;AACI,gBAAM,MAAM,CAAC;AAAA,MACrB;AAAA,IACJ;AAEA,QAAI,YAAY;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,iBAAiB,MAAoB;AACjC,eAAW,OAAO,KAAK,WAAW;AAC9B,WAAK,gBAAgB,GAAG;AAAA,IAE5B;AAAA,EACJ;AAAA,EAEA,QAAQ,MAAoB,QAAQ,GAAG;AACnC,QAAI,KAAK,cAAc,QAAW;AAC9B,YAAM,MAAM,+BAA+B,KAAK,IAAI,IAAI;AACxD,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG;AACX,WAAK,iBAAiB,IAAI;AAAA,IAC9B;AAEA,QAAI,KAAK,aAAa,KAAK,CAAC,KAAK,IAAI,iBAAiB;AAClD,YAAM,MAAM,yBAAyB,KAAK,IAAI,IAAI;AAClD,aAAO;AAAA,IACX;AAEA,UAAM,YAAY,KAAK,cAAc;AACrC,QAAI,QAAQ,GAAG;AAEX,UAAI,KAAK,IAAI;AACT,aAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,mBAAmB,MAAa,KAAK,KAAK,SAAS,CAAC;AACtF,UAAI,KAAK,QAAQ,SAAS,GAAG;AACzB,YAAI,KAAK,IAAI,sBAAuB,MAAK;AACzC,aAAK,SAAS,KAAK,SAAS,KAAK;AACjC,YAAI,KAAK,IAAI,sBAAuB,MAAK;AAAA,MAC7C;AACA,UAAI,KAAK,IAAI;AACT,aAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,kBAAkB,MAAa,KAAK,KAAK,SAAS,CAAC;AAAA,IACzF;AAEA,QAAI,KAAK,IAAI;AACT,WAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,cAAc,MAAa,KAAK,KAAK,SAAS,CAAC;AACjF,QAAI,KAAK,IAAI,QAAQ;AACjB,WAAK,YAAY,KAAK,IAAI,OAAO,MAAa,KAAK,KAAK,SAAS;AACjE,UAAI,CAAC,KAAK,WAAW;AAEjB,eAAO;AAAA,MACX;AACA,YAAM,MAAM,GAAG,KAAK,aAAa,IAAI,WAAW,EAAE,cAAc,KAAK,IAAI,IAAI;AAC7E,UAAI,KAAK,UAAU,SAAS;AACxB,cAAM,MAAM,MAAM,UAAU,WAAW,KAAK,GAAG,KAAK,SAAU,CAAC;AAAA,IACvE;AAEA,UAAM,YAAY,KAAK,aAAa,KAAK;AACzC,QAAI,UAAU,UAAU,EAAG,QAAO;AAClC,QAAI,KAAK,IAAI;AACT,WAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,uBAAuB,MAAa,KAAK,KAAK,SAAS,CAAC;AAE1F,QAAI,KAAK,KAAK,SAAS,WAAW,KAAK;AAEvC,QAAI,KAAK,IAAI;AACT,WAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,sBAAsB,MAAa,KAAK,KAAK,SAAS,CAAC;AACzF,QAAI,CAAC,MAAM,SAAS,GAAG;AACnB,YAAM,QAAQ,KAAK,IAAI,OAAO;AAC9B,WAAK,KAAK;AAAA,QACN,IAAI,6BAA6B,KAAK,UAAU,OAAO,KAAK,IAAI,IAAI;AAAA,MAAC;AAAA,IAC7E;AACA,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ;AACJ,SAAK,SAAS;AACd,WAAO,IAAI,SAAS,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,QAAQ;AAAA,EACpE;AAAA,EAEQ,cAAc;AAClB,WAAO,KAAK,QAAQ,qBAAqB,MAAM,MAAM;AAAA,IAAC;AAAA,EAC1D;AAAA,EAEQ,0BAA0B;AAC9B,WAAO,KAAK,QAAQ,qBAAqB,MAAM,QACxC,KAAK,QAAQ,OAAO,IAAI,GAAG;AAAA,IAAC;AAAA,EACvC;AAAA,EAEQ,sBAAsB;AAC1B,SAAK,YAAY;AACjB,QAAI,CAAC,KAAK,QAAQ,OAAO,IAAI,EAAG,MAAK,KAAK;AAAA,MACtC,IAAI,yBAAyB,KAAK,KAAK,CAAC;AAAA,IAAC;AAAA,EACjD;AAAA;AAAA,EAGQ,2BAA2B,GAAW;AAC1C,QAAI,SAAS;AACb,UAAM,QAAQ,KAAK,QAAQ,SAAS;AACpC,WAAO,MAAM;AACT,UAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAC3B;AACA;AAAA,MACJ;AACA,UAAI,KAAK,QAAQ,qBAAqB,KAAK,KAAM;AAAA,IACrD;AACA,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,QAAI,SAAS,EAAG,MAAK,KAAK;AAAA,MACtB,IAAI,0BAA0B,KAAK,SAAS,OAAO,GAAG,CAAC;AAAA,IAAC;AAAA,EAChE;AAAA,EAEQ,WAAW;AACf,SAAK,wBAAwB;AAC7B,WAAO,CAAC,KAAK,QAAQ,MAAM,GAAG;AAC1B,WAAK,aAAa;AAClB,WAAK,wBAAwB;AAAA,IACjC;AAAA,EACJ;AAAA,EAEQ,eAAe;AACnB,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,QAAI,KAAK,QAAQ,KAAK,mBAAmB,GAAG;AACxC,WAAK,8BAA+B;AACpC;AAAA,IACJ;AACA,QAAI,KAAK,QAAQ,KAAK,oBAAoB,GAAG;AACzC,WAAK,+BAAgC;AACrC;AAAA,IACJ;AAEA,UAAM,QAAQ,KAAK,IAAI,OAAO,gBAAgB,KAAK,CAAC,MAAM,KAAK,QAAQ,OAAO,EAAE,IAAI,CAAC;AACrF,QAAI,MAAO,QAAO,KAAK,iCAAkC,KAAK;AAG9D,SAAK,wBAAwB;AAAA,EACjC;AAAA,EAEQ,SAEH,MACL;AACI,UAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,WAAO,KAAK,QAAQ,OAAO;AAAA,MACvB,sBAAuB,GAAG;AAAA,MAC1B,uBAAwB,GAAG;AAAA,MAC3B,uBAAwB,GAAG;AAAA,IAC/B,EAAE,IAAI,CAAC,CAAC;AAER,UAAM,SAAS,KAAK,MAAM,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,QAAQ,OAAO,EAAE,IAAI,CAAC;AACvE,UAAM,MAAM,UAAU,gBAAgB,IAAI;AAC1C,QAAI,WAAW,QAAW;AACtB,UAAI,OAAO;AACX,aAAO,CAAC,KAAK,QAAQ,MAAM,KACpB,CAAC,KAAK,QAAQ,qBAAqB,KACnC,CAAC,KAAK,QAAQ,KAAK,mBAAmB,KACtC,CAAC,KAAK,QAAQ,KAAK,iBAAiB,GAC3C;AACI,YAAI,KAAK,QAAQ,OAAO,IAAI;AACxB,cAAI,KAAK,QAAQ,MAAM,EAAG;AAAA;AAC9B,gBAAQ,KAAK,QAAQ,WAAW;AAAA,MACpC;AACA,WAAK,KAAK;AAAA,QACN,IAAI,uBAAuB,KAAK,SAAS,QAAQ,GAAG,IAAI;AAAA,MAAC;AAAA,IACjE;AACA,UAAM,OAAO,KAAK,UAAU;AAC5B,UAAM,MAAM,SAAS,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI;AAEhD,UAAM,UAAU,KAAK,QAAQ,OAAO,iBAAiB;AACrD,UAAM,aAAa,IAAI;AACvB,QAAI,CAAC,KAAK,QAAQ,OAAO,mBAAmB;AACxC,WAAK,KAAK;AAAA,QACN,IAAI,gBAAgB,KAAK,KAAK,GAAG,mBAAmB;AAAA,MAAC;AAE7D,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,OAAqB;AAAA,MACvB;AAAA,MAAM;AAAA,MACN,MAAM,KAAK,SAAS,UAAU,OAAO;AAAA,MACrC,UAAU,KAAK,SAAS,UAAU,OAAO;AAAA,MACzC,WAAW;AAAA,MACX,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACf;AAEA,UAAM,WAAW,cAAc;AAC/B,WAAO,KAAK,cAAc,MAAM,MAAM,yBAAyB,QAAQ;AAAA,EAC3E;AAAA;AAAA,EAGQ,gBAAgB;AACpB,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,UAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,UAAM,UAAU,KAAK,QAAQ,OAAO,WAAW;AAC/C,QAAI,QAAS,MAAK,oBAAoB;AACtC,UAAM,kBAAkB,KAAK,QAAQ,SAAS;AAC9C,QAAI,gBAAgB,KAAK,QAAQ,SAAS;AAC1C,QAAI,eAAmC;AAEvC,QAAI,SAAS;AACb,WAAO,CAAC,KAAK,QAAQ,MAAM,GAAG;AAC1B,UAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAC3B,YAAI,QAAQ;AACZ,YAAI;AACJ,gBAAQ,OAAO,KAAK,QAAQ,qBAAqB,OAAO;AACpD,mBAAS;AAEb,YAAI,WAAW,KAAK,QAAQ,OAAO,SAAS,GAAG;AAC3C,yBAAe,KAAK,QAAQ,SAAS;AACrC,cAAI,CAAC,KAAK,QAAQ,MAAM,GAAG;AACvB,iBAAK,oBAAoB;AACzB,iBAAK,2BAA2B,CAAC;AAAA,UACrC;AACA;AAAA,QACJ;AACA,YAAK,CAAC,WAAW,KAAK,QAAQ,OAAO,IAAI,GAAG;AACxC,yBAAe,KAAK,QAAQ,SAAS,IAAI;AACzC,cAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,iBAAK,2BAA2B,CAAC;AACrC;AAAA,QACJ;AAEA,YAAI,KAAK,QAAQ,MAAM,GAAG;AACtB,cAAI,QAAS,MAAK,KAAK;AAAA,YACnB,IAAI,gBAAgB,KAAK,KAAK,GAAG,SAAS;AAAA,UAAC;AAC/C;AAAA,QACJ;AACA,kBAAU;AAAA,MACd,OAAO;AACH,kBAAU,KAAK,QAAQ,WAAW;AAAA,MACtC;AACA,sBAAgB,KAAK,QAAQ,SAAS;AAAA,IAC1C;AACA,UAAM,OAAgB;AAAA,MAClB;AAAA,MACA,UAAU,KAAK,SAAS,UAAU,gBAAgB,aAAa;AAAA,MAC/D,SAAS;AAAA,QACL,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,MACV;AAAA,IACJ;AACA,SAAK,KAAK,aAAa,IAAI;AAAA,EAC/B;AAAA,EAEQ,0BAA0B;AAC9B,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,QAAI,KAAK,QAAQ,OAAO,WAAW,GAAG;AAClC,WAAK;AACL,WAAK,oBAAoB;AACzB,WAAK,2BAA2B,CAAC;AACjC,aAAO,CAAC,KAAK,QAAQ,MAAM,GAAG;AAC1B,YAAI,KAAK,QAAQ,OAAO,SAAS,GAAG;AAChC,cAAI,CAAC,KAAK,QAAQ,MAAM,GAAG;AACvB,iBAAK,oBAAoB;AACzB,iBAAK,2BAA2B,CAAC;AAAA,UACrC;AACA,eAAK;AACL;AAAA,QACJ;AACA,aAAK,aAAa;AAClB,aAAK,2BAA2B,CAAC;AAAA,MACrC;AAEA,WAAK,KAAK;AAAA,QACN,IAAI,gBAAgB,KAAK,KAAK,GAAG,SAAS;AAAA,MAAC;AAAA,IACnD,OAAO;AACH,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AAAA,EAEA,UAAU,MAAoC;AAC1C,QAAI,KAAK,QAAQ,UAAU,EAAG;AAC9B,QAAI,QAAQ,KAAK,QAAQ,CAAC;AAC1B,QAAI,OAAO,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAI,MAAM;AACN,YAAM,UAAU,MAAM,QAAQ,UAAU;AAC5C,QAAI,KAAK;AACL,WAAK,UAAU,KAAK,QAAQ,QAAQ;AAAA,EAC5C;AAAA,EAEQ,YAAY;AAChB,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,UAAM,OAAsB;AAAA,MACxB;AAAA,MACA,UAAU,KAAK,KAAK;AAAA,MACpB,SAAS,CAAC;AAAA,IACd;AAEA,SAAK,KAAK,YAAY,IAAI;AAC1B,WAAO,CAAC,KAAK,QAAQ,MAAM,KAAK,KAAK,cAAc,GAAG;AAAA,IAAC;AACvD,SAAK,KAAK,UAAU;AACpB,UAAM,OAAO,KAAK,QAAQ,GAAG,EAAE;AAC/B,SAAK,SAAS,YAAY,MAAM,SAAS,aAAa,MAAM,SAAS;AACrE,SAAK,UAAU,IAAI;AAAA,EAEvB;AAAA;AAAA,EAGQ,UAEH,MAAY,GACjB;AACI,UAAM,WAAW,KAAK,QAAQ,SAAS,IAAI,EAAE,KAAK;AAClD,QAAI,OAA2B,CAAC;AAChC,eAAW,QAAQ,EAAE,OAAO;AACxB,UAAI,CAAC,KAAK,EAAE,IAAI,KAAK,iBAAiB,MAAM,CAAC,MAAM,CAAC;AACpD,UAAI,CAAC,IAAI;AACL,aAAK,KAAK,QAAQ,IAAI,gBAAgB,KAAK,KAAK,GAAG,IAAI,CAAC;AACxD,eAAO;AAAA,MACX;AACA,WAAK,KAAK,GAAG;AAAA,IACjB;AAEA,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,OAAqB;AAAA,MACvB;AAAA,MAAM,KAAK,EAAE;AAAA,MACb,MAAM,KAAK,SAAS,UAAU,OAAO;AAAA,MACrC,UAAU,KAAK,SAAS,UAAU,OAAO;AAAA,MACzC,WAAW;AAAA,MACX,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACf;AAEA,UAAM,WAAW,KAAK,IAAI;AAC1B,WAAO,KAAK,cAAc,MAAM,MAAM,EAAE,SAAS,QAAQ;AAAA,EAC7D;AAAA,EAEQ,cAEH,MAAY,MAAoB,SAA6B,UAClE;AACI,SAAK,iBAAiB,IAAI;AAC1B,UAAM,YAAY,KAAK,cAAc;AACrC,QAAI,KAAK,IAAI;AACT,WAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,mBAAmB,MAAa,KAAK,KAAK,SAAS,CAAC;AACtF,QAAI,KAAK,IAAI,sBAAuB,MAAK;AAEzC,QAAI,KAAK;AACT,QAAI,UAAU;AACV,UAAI,CAAC,KAAK,QAAQ,MAAM,KAAK,+BAAgC;AACzD,aAAK,oBAAoB;AACzB,aAAK,2BAA2B,CAAC;AAAA,MACrC;AACA,UAAI,gCAAkC,MAAK,KAAK,cAAc,IAAoB;AAAA,UAC7E,MAAK,KAAK,aAAa,IAAmB;AAAA,IACnD,WAAW,gCAAiC;AACxC,aAAO;AACP,WAAK,KAAK,YAAY,IAAI;AAC1B,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,SAAS,MACT,KAAK,2BAA2B,KAAK,IAAI,IACzC,KAAK,cAAc,KAAK,IAAI;AAClC,aAAO,MAAM;AACT,YAAI,WAAW,KAAK,QAAQ,OAAO,OAAO,EAAG;AAC7C,YAAI,KAAK,QAAQ,MAAM,KAAK,EAAE,KAAK,OAAO,IAAI;AAE1C,cAAI,QAAS,MAAK,KAAK;AAAA,YACnB,IAAI,gBAAgB,KAAK,KAAK,GAAG,OAAO;AAAA,UAAC;AAC7C;AAAA,QACJ;AAAA,MACJ;AACA,WAAK,KAAK,UAAU;AACpB,UAAI,CAAC,OAAO,KAAK,QAAQ,SAAS,GAAG;AACjC,aAAK,UAAU,IAAI;AAAA,MACvB;AAAA,IACJ,OAA6B;AACzB,WAAK,KAAK,WAAW,IAAW;AAChC,WAAK,2BAA2B,CAAC;AACjC,UAAI,CAAC,KAAK,QAAQ,MAAM,GAAG;AACvB,YAAI,KAAK,IAAI;AACT,eAAK,cAAc;AAAA;AAEnB,eAAK,aAAa;AAAA,MAC1B;AACA,WAAK,KAAK,SAAS;AAAA,IACvB;AAEA,UAAM,OAAO,KAAK,QAAQ,GAAG,EAAE;AAC/B,SAAK,SAAS,YAAY,MAAM,SAAS,aAAa,MAAM,SAAS;AACrE,QAAI,KAAK,IAAI,sBAAuB,MAAK;AACzC,QAAI,KAAK,IAAI;AACT,WAAK,KAAK,QAAQ,GAAG,KAAK,IAAI,kBAAkB,MAAa,KAAK,KAAK,SAAS,CAAC;AACrF,SAAK,QAAQ,IAAI;AACjB,WAAO;AAAA,EACX;AAAA;AAAA,EAGQ,gBAAyB;AAC7B,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,QAAI,KAAK,QAAQ,KAAK,oBAAoB;AACtC,aAAO,KAAK,+BAAgC;AAChD,QAAI,KAAK,QAAQ,KAAK,oBAAoB;AACtC,aAAO;AACX,QAAI,KAAK,QAAQ,KAAK,mBAAmB,GAAG;AACxC,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,KAAK,IAAI,OAAO,iBAAiB,KAAK,CAAC,MAAM,KAAK,QAAQ,OAAO,EAAE,IAAI,CAAC;AACtF,QAAI,MAAO,QAAO,KAAK,kCAAmC,KAAK;AAE/D,QAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAC3B,UAAI,KAAK,QAAQ,MAAM,GAAG;AACtB,aAAK,KAAK,UAAU,IAAI;AACxB,eAAO;AAAA,MACX;AACA,YAAM,QAAQ,KAAK,QAAQ,SAAS;AACpC,YAAM,OAAoB;AAAA,QACtB;AAAA,QACA,SAAS,KAAK,QAAQ,WAAW;AAAA,QACjC,UAAU,KAAK,SAAS,QAAQ,CAAC;AAAA,MACrC;AACA,WAAK,KAAK,cAAc,IAAI;AAC5B,aAAO;AAAA,IACX;AACA,WAAO,KAAK,2BAA2B;AAAA,EAC3C;AAAA;AAAA,EAGQ,6BAAsC;AAC1C,WAAO,CAAC,KAAK,QAAQ,MAAM,CAAC;AAC5B,QAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAE3B,WAAK,YAAY;AACjB,UAAK,KAAK,QAAQ,KAAK,mBAAmB,KACrC,KAAK,QAAQ,KAAK,oBAAoB,KACtC,KAAK,IAAI,OAAO,gBAAgB,KAAK,CAAC,MAAM,KAAK,QAAQ,KAAK,EAAE,IAAI,CAAC,KACrE,KAAK,QAAQ,KAAK,SAAS,KAAK,KAAK,aAAa,KAClD,KAAK,QAAQ,MAAM,EAAG,QAAO;AAElC,UAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAC3B,aAAK,2BAA2B,CAAC;AACjC,eAAO;AAAA,MACX;AACA,WAAK,KAAK,UAAU,IAAI;AACxB,aAAO;AAAA,IACX;AAEA,SAAK,KAAK,UAAU,KAAK,QAAQ,WAAW,CAAC;AAC7C,WAAO;AAAA,EACX;AAAA;AAAA,EAGQ,iBACJ,MAA0B,QAC1B,QAAkB,CAAC,mBAAmB,mBAAmB,GAC9B;AAC3B,QAAI,KAAK;AACT,UAAM,UAA4B,CAAC;AACnC,UAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,QAAI,SAAS,KAAK,QAAQ,SAAS;AAEnC,UAAM,aAAa,CAAC,MAAc;AAC9B,YAAM,OAAO,QAAQ,GAAG,EAAE;AAC1B,UAAI,MAAM,sBAAuB;AAC7B,aAAK,WAAW;AAChB,aAAK,SAAS,OAAO,EAAE;AAAA,MAC3B,OAAO;AACH,cAAMC,OAAM,KAAK,QAAQ,SAAS;AAClC,gBAAQ,KAAK;AAAA,UACT;AAAA,UACA,UAAU,KAAK,SAASA,OAAM,EAAE,MAAM;AAAA,UACtC,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,UAAI,OAAO,KAAK,QAAQ,OAAO,GAAG;AAC9B;AACJ,UAAI,QAAQ,UAAa,KAAK,QAAQ,OAAO,GAAG;AAC5C;AACJ,UAAI,MAAM,KAAK,CAAC,MAAM,KAAK,QAAQ,KAAK,CAAC,CAAC,KACtC,KAAK,QAAQ,MAAM,GACvB;AACI,aAAK;AACL;AAAA,MACJ;AAEA,UAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAE3B,iBAAS,KAAK,QAAQ,SAAS;AAC/B,YAAI,KAAK,QAAQ,MAAM,GAAG;AACtB,qBAAW,IAAI;AACf,eAAK;AACL;AAAA,QACJ;AACA,gBAAQ,KAAK;AAAA,UACT;AAAA,UACA,SAAS,KAAK,QAAQ,WAAW;AAAA,UACjC,UAAU,KAAK,SAAS,SAAS,CAAC;AAAA,QACtC,CAAuB;AACvB;AAAA,MACJ;AAEA,YAAM,eAAe,KAAK,QAAQ,SAAS;AAC3C,YAAM,SAAS,KAAK,IAAI,OAAO,sBAAsB;AAAA,QACjD,CAAC,MAAM,KAAK,QAAQ,OAAO,EAAE,IAAI;AAAA,MAAC;AACtC,UAAI,WAAW,QAAW;AACtB,cAAM,CAAC,OAAO,GAAG,IAAI,KAAK,iBAAiB,OAAO,OAAO;AACzD,iBAAS,KAAK,QAAQ,SAAS;AAC/B,gBAAQ,KAAK;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UAAQ,UAAU;AAAA,UAC9B,UAAU,KAAK,SAAS,YAAY;AAAA,QACxC,CAAC;AACD,YAAI,CAAC,KAAK;AACN,eAAK,KAAK,QAAQ,IAAI,gBAAgB,KAAK,KAAK,GAAG,OAAO,OAAO,CAAC;AAClE,eAAK;AACL;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,mBAAW,KAAK,QAAQ,WAAW,CAAC;AACpC,iBAAS,KAAK,QAAQ,SAAS;AAAA,MACnC;AAAA,IACJ;AACA,WAAO,CAAC;AAAA,MACJ,UAAU,KAAK,SAAS,UAAU,MAAM;AAAA,MACxC;AAAA,IACJ,GAAG,EAAE;AAAA,EACT;AAAA,EAEQ,YAAgC;AAEpC,UAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG;AAE9C,QAAI,CAAC,eAAgB,MAAK,wBAAwB;AAElD,UAAM,OAA2B,CAAC;AAClC,QAAI,MAAM;AACV,WAAO,CAAC,KAAK;AACT,YAAM,CAAC,KAAK,EAAE,IAAI,KAAK,iBAAiB;AACxC,UAAI,CAAC,IAAI;AACL,cAAM;AAEN,YAAI,KAAK,UAAU,KAAK,IAAI,QAAQ,UAAU,KAAK,CAAC;AAChD;AAAA,MACR;AACA,WAAK,KAAK,GAAG;AAAA,IACjB;AACA,WAAO;AAAA,EACX;AACJ;AAEO,SAAS,MAAM,SAAkB,KAAmB;AACvD,SAAO,IAAI,OAAO,SAAS,GAAG,EAAE,MAAM;AAC1C;;;ACxsBO,IAAM,gBAAN,MAAkD;AAAA,EAwBrD,YACoBC,SACA,cACT,OAAuB;AAFd,kBAAAA;AACA;AACT;AAAA,EAAyB;AAAA,EA1BpC,aAAa,MAA+D;AACxE,YAAQ,KAAK,MAAM;AAAA,MACf;AACI,eAAO,KAAK,OAAO,oBAAoB,MAAM,IAAI;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AACI,eAAO,KAAK,OAAO,eAAe,MAAM,IAAI;AAAA,MAChD;AACI,YAAI,KAAK,KAAK,OAAO,gBAAgB,IAAI,KAAK,GAAG;AACjD,YAAI,GAAI,QAAO,GAAG,MAAM,IAAI;AAC5B,eAAO,KAAK,OAAO,0BAA0B,MAAM,IAAI;AAAA,MAC3D;AACI,YAAI,KAAK,KAAK,OAAO,eAAe,IAAI,KAAK,GAAG;AAChD,YAAI,GAAI,QAAO,GAAG,MAAM,IAAI;AAC5B,eAAO,KAAK,OAAO,yBAAyB,MAAM,IAAI;AAAA,MAC1D;AACI,eAAO;AAAA,MACX;AACI,eAAO,MAAM,MAAM,IAAI;AAAA,IAC/B;AAAA,EACJ;AAMJ;AAyBO,IAAM,sBAAN,MAAM,qBAEb;AAAA,EAcI,YACW,SACA,eAA0F;AAD1F;AACA;AAAA,EAA4F;AAAA,EAfvG;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA,iBAAiB,oBAAI;AAAA,EAGrB,kBAAkB,oBAAI;AAAA,EAQtB,OAAO,KAAe,OAAwC;AAC1D,QAAI,MAAM,IAAI,cAAc,MAAM,IAAI,SAAS,KAAK;AACpD,QAAI,UAAU,IAAI,WAAW,EACxB,KAAK,QACL,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,EAE9B,OAAO,CAAC,MAAO,MAAM,MAAU;AACpC,WAAO,KAAK,cAAc,SAAS,GAAG;AAAA,EAC1C;AAAA,EAEA,oBAAoB,IAAoC;AACpD,OAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,eAAe,IAAI,GAAG,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,qBAAqB,IAAqC;AACtD,OAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,gBAAgB,IAAI,GAAG,CAAC,CAAC;AAAA,EACzD;AAAA,EAEA,OAAO,KAAmC,MAAyC;AAC/E,QAAIA,UAAS,IAAI,qBAAoB,KAAK,SAAS,KAAK,aAAa;AACrE,IAAAA,QAAO,oBAAoB,KAAK;AAChC,IAAAA,QAAO,eAAe,KAAK;AAC3B,IAAAA,QAAO,yBAAyB,KAAK;AACrC,IAAAA,QAAO,0BAA0B,KAAK;AACtC,IAAAA,QAAO,kBAAkB,IAAI,IAAI,KAAK,eAAe;AACrD,IAAAA,QAAO,iBAAiB,IAAI,IAAI,KAAK,cAAc;AACnD,WAAOA;AAAA,EACX;AACJ;;;ACrHO,SAAS,oBAAoB,MAAoB,KAAc,MAAM,KAAuB;AAC/F,MAAK,QAAQ,UAAa,KAAK,UAAU,SAAS,OAC7C,QAAQ,UAAa,KAAK,UAAU,SAAS,KAClD;AACI,WAAO,CAAC,IAAI,6BAA6B;AAAA,MACrC,QAAQ,KAAK,SAAS;AAAA,MACtB,OAAO,KAAK,KAAK;AAAA,MACjB,KAAK,KAAK,KAAK;AAAA,IACnB,GAAG,KAAK,GAAG,CAAC;AAAA,EAChB;AACA,SAAO;AACX;AAEO,SAAS,eAAe,MAAoB,KAAc,MAAM,KAAuB;AAC1F,QAAM,MAAM,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,cAAc,MAAS;AAChE,MAAI,QAAQ,QAAW;AAEnB,WAAO,CAAC,IAAI,4BAA4B,IAAI,QAAQ,CAAC;AAAA,EACzD;AACA,SAAO,oBAAoB,MAAM,KAAK,GAAG;AAC7C;AAEO,SAAS,6BACZ,MACJ;AACI,WAAS,YAAY,MAA0C;AAC3D,QAAI,SAAS;AACb,eAAW,OAAO,MAAM;AACpB,cAAQ,IAAI,MAAM;AAAA,QACd;AAAA,QACA;AACI,oBAAU,IAAI;AACd;AAAA,QACJ;AACI;AAAA,QACJ;AACI,cAAI,CAAC,IAAI,UAAW,QAAO,CAAC,IAAI;AAAA,YAC5B,IAAI;AAAA,YAAU;AAAA,UAAkC,CAAC;AACrD,cAAI,aAAa,YAAY,IAAI,SAAS;AAC1C,cAAI,MAAM,QAAQ,UAAU,EAAG,QAAO;AACtC,oBAAU;AACV;AAAA,QACJ;AACI,iBAAO,MAAM,MAAM,GAAG;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,WAAS,aAAa,MAAqB;AACvC,QAAI,KAAK,UAAU,EAAG,QAAO;AAAA,aACpB,KAAK,SAAS,GAAG;AACtB,UAAI,OAAO,KAAK,GAAG,EAAE,EAAG;AACxB,aAAO,CAAC,IAAI,kCAAkC;AAAA,QAC1C,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,QACxB,KAAK,KAAK,aAAa,KAAK;AAAA,MAChC,CAAC,CAAC;AAAA,IACN;AACA,WAAO,MAAM,KAAK,CAAC,CAAC;AAAA,EACxB;AAEA,WAAS,MAAM,KAAsC;AACjD,QAAI,IAAI,+BAAgC;AACpC,UAAI,CAAC,IAAI,UAAW,QAAO,CAAC,IAAI;AAAA,QAC5B,IAAI;AAAA,QAAU;AAAA,MAAkC,CAAC;AACrD,aAAO,aAAa,IAAI,SAAS;AAAA,IACrC,WAAW,IAAI,8BAA+B;AAC1C,aAAO,IAAI,QAAQ;AAAA,IACvB,WAAW,IAAI,4BAA6B;AACxC,aAAO,CAAC,IAAI,qCAAqC,IAAI,QAAQ,CAAC;AAAA,IAClE;AACA,WAAO,YAAY,IAAI,OAAO;AAAA,EAClC;AAEA,SAAO,aAAa,KAAK,OAAO;AACpC;AAEO,SAAS,2BACZ,MACJ;AACI,WAAS,MAAM,OAAwC;AACnD,aAAS,OAAO,OAAO;AACnB,UAAI,IAAI,iCAAkC,IAAI,cAAc,QAAW;AACnE,cAAM,KAAK,MAAM,IAAI,SAAS;AAC9B,YAAI,GAAI,QAAO;AAAA,MACnB,WAAW,IAAI,4BAA6B;AACxC,eAAO,CAAC,IAAI,qCAAqC,IAAI,QAAQ,CAAC;AAAA,MAClE;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACA,SAAO,MAAM,KAAK,OAAO;AAC7B;AAEO,SAAS,sBACZ,MACJ;AACI,WAAS,MAAM,OAAwC;AACnD,QAAI,MAAM,SAAS,GAAG;AAClB,UAAI,OAAO,MAAM,GAAG,EAAE,EAAG;AACzB,aAAO,CAAC,IAAI,kCAAkC;AAAA,QAC1C,QAAQ,KAAK;AAAA,QACb,OAAO,MAAM,CAAC,EAAE,SAAS;AAAA,QACzB,KAAK,KAAK,aAAa,KAAK;AAAA,MAChC,CAAC,CAAC;AAAA,IACN,WAAW,MAAM,UAAU,KAChB,MAAM,CAAC,EAAE,kCACT,MAAM,CAAC,EAAE,cAAc,QAClC;AACI,aAAO,MAAM,MAAM,CAAC,EAAE,SAAS;AAAA,IACnC;AACA,WAAO;AAAA,EACX;AACA,SAAO,MAAM,KAAK,OAAO;AAC7B;;;ACzFO,IAAM,WAAW,OAAO;AAgBxB,SAAS,iBAAiB,KAAmB;AAChD,MAAI,KAAK,UAAU;AAAA,IACf,uBAAuB,CAAC;AAAA,IACxB,wBAAwB,CAAC;AAAA,IACzB,wBAAwB,CAAC;AAAA,IACzB,yBAAyB,CAAC;AAAA,IAC1B,SAAS,oBAAI,IAAI;AAAA,IACjB,aAAa,oBAAI,IAAI;AAAA,IACrB,cAAc;AAAA,EAClB,CAAC;AACL;AAEO,SAAS,eACZ,MAAS,MAAc,WAA8B,SACzD;AACI,QAAM,KAAK,kBAAkB,SAAS,IAAI,CAAC,KAAK,IAAI;AACpD,QAAM,KAAK,SAAS,UAAU,MAAM,QAAQ,UAAU,aAAa,SAAY,YAAY,UAAU,YAAY,KAAK,oBAAoB,gBAAgB,UAAU,QAAQ,EAAE;AAC9K,QAAM,MAAM,MAAM,iBAAiB,WAAW,KAAK,GAAG,OAAO,CAAC;AAO9D,QAAM,OACF,UAAU,aAAa,wBACvB,UAAU;AAEd,QAAM,MAAO,gCACP,IAAI,wBAA+B,MAAM,IAAI,IAC7C,IAAI,yBAAgC,MAAM,IAAI;AAEpD,QAAM,WAAW;AAEjB,MAAI,QAAQ,UAAU,MACf,QAAQ,CAAC,EAAE,iCACX,QAAQ,CAAC,EAAE;AACd,QAAI,WAAW,QAAQ,CAAC,EAAE,IAAI;AAElC,MAAI,wBAAwB;AAC5B,MAAI,gBAAgB,CAAC,MAA2B,QAAsB;AAClE,QAAI,QAAQ,eAAe,MAAM,UAAU,KAAK,MAAM;AACtD,QAAI,MAAO,QAAO;AAClB,SAAK,QAAQ;AAAA,MACT,IAAI;AAAA,MACJ,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,SAAU,CAAC,CAAC;AAAA,IACjF;AACA,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,SAAS,CAAC,SAA8B;AACxC,QAAI,CAAC,KAAK,OAAO,GAAI,QAAO,CAAC;AAC7B,UAAM,eAAe,WAAW,SAAS,EAAC,aAAa,KAAK,SAAQ,CAAC;AACrE,WAAO;AAAA,EACX;AACA,MAAI,yBAAyB,CAAC,MAA2B,QAAsB;AAC3E,QAAI,CAAC,KAAK,OAAO,GAAI,QAAO,CAAC;AAC7B,UAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,UAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;AAC9D,SAAK,KAAK;AAAA,MACN,UAAU,UAAU;AAAA,MACpB;AAAA,MAAiB,MAAM,KAAK,MAAM;AAAA,MAClC,aAAa,KAAK;AAAA,IACtB,CAAC;AACD,UAAM,MAAM,UAAU,SAAS,IAAI,CAAC,kBAAkB,IAAI;AAC1D,UAAM;AAAA,MAAM;AAAA,MACR,UAAU,aAAa,KAAK,cAC1B,UAAU,aAAa,SAAY,cACnC,IAAI,UAAU,QAAQ;AAAA,IAAG;AAC/B,UAAM,MAAM,aAAa,MAAM,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI,GAAG;AACpG,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,wBAAwB,CAAC,MAA2B,QAAsB;AAC1E,QAAI,CAAC,KAAK,OAAO,GAAI,QAAO,CAAC;AAC7B,UAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,UAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;AAC9D,SAAK,IAAI;AACT,UAAM,MAAM,UAAU,SAAS,IAAI,CAAC,kBAAkB,IAAI;AAC1D,WAAO,CAAC;AAAA,EACZ;AACA,SAAO;AACX;AAEO,SAAS,qBAAqB,MAA+B,MAAiB;AACjF,MAAI,kBAAkB;AACtB,MAAI,SAAyB,CAAC;AAC9B,aAAW,KAAK,KAAK,SAAS;AAC1B,YAAQ,EAAE,MAAM;AAAA,MACZ;AACI,YAAI,CAAC,iBAAiB;AAClB,4BAAkB;AAClB,iBAAO,KAAK,GAAG,EAAE,OAAO;AACxB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AACI,aAAK,KAAK,IAAI,wBAAwB,EAAE,QAAQ,CAAC;AACjD;AAAA,MACJ;AACI,0BAAkB;AAClB,eAAO,KAAK,CAAC;AACb;AAAA,MACJ;AACI,cAAM,MAAM,CAAC;AAAA,IACrB;AAAA,EACJ;AACA,SAAO;AACX;;;AC3IA,SAAS,qBACL,MACA,OACF;AACE,QAAM,QAAQ,oBAAoB,MAAM,GAAG,QAAQ;AACnD,MAAI,MAAO,QAAO;AAElB,QAAM,OAAkB,CAAC;AACzB,QAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,QAAM,YAAY,KAAK;AACvB,MAAI,cAAc,MAAM,WAAW,SAAS,IAAI,EAAG,QAAO;AAAA,IACtD,IAAI,uBAAuB,KAAK,UAAU,SAAS;AAAA,EAAC;AAExD,MAAI,WAAW;AACf,MAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,UAAM,OAAO,KAAK,UAAU,GAAG,EAAE;AACjC,QAAI,KAAK,WAAW;AAChB,YAAM,QAAQ,aAAa,KAAK,KAAK,SAAS;AAC9C,iBAAW,QAAQ,MAAM,CAAC,IAAI;AAAA,IAClC,MAAO,MAAK;AAAA,MACR,IAAI,uBAAuB,KAAK,QAAQ;AAAA,IAAC;AAAA,EACjD;AAEA,QAAM,OAAO,KAAK,UAAU,MAAM,GAAI,aAAa,KAC7C,KAAK,UAAU,SAAS,IAAI,MAAS,EAAE,IAAI,CAAC,MAClD;AACI,QAAI,CAAC,EAAE,UAAW,MAAK;AAAA,MACnB,IAAI,uBAAuB,EAAE,QAAQ;AAAA,IAAC;AAC1C,WAAO,EAAE,aAAa;AAAA,EAC1B,CAAC;AAED,MAAI,YAA+B,EAAE,UAAU,MAAM,cAAc,OAAU;AAC7E,OAAK,QAAQ,EAAE,MAAM,WAAW,WAAW,KAAK;AAChD,QAAM,KAAK,SAAS;AACpB,SAAO;AACX;AAEO,IAAM,iBAAiB,IAAI;AAAA,EACd;AAAA;AAAA,EACpB;AAAA;AAAA,IAEI,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,QAAQ,qBAAqB,MAAM,MAAM,qBAAqB;AACpE,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,8BAA8B,KAAK,MAAO,IAAI;AAC1D,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,MAAM,MAAM,sBAAsB,IAAI;AAC5C,aAAO,QAAQ,KAAK,MAAM,SAAS;AACnC,YAAM,MAAM,4BAA4B,KAAK,MAAM,IAAI;AACvD,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,cAAc,MAAM,KAAK,WAAW;AAChC,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,CAAC;AACvC,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,YAAM,OAAO,KAAK,MAAM;AACxB,UAAI,CAAC,KAAK,MAAM;AACZ,aAAK,KAAK,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AAAA,eAC7C,IAAI,OAAO,eAAe,IAAI,KAAK,MAAM,IAAI;AAClD,aAAK,KAAK,IAAI,0BAA0B,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC;AAC1E,aAAO;AAAA,IACX;AAAA,IACA,OAAO,MAAM,KAAK,WAAW;AACzB,UAAI,CAAC,UAAW,QAAO;AACvB,UAAI,KAAK,OAAO,MAAM;AAClB,YAAI,IAAI,OAAO,eAAe,IAAI,KAAK,MAAM,IAAI;AAC7C,cAAI,OAAO,eAAe,OAAO,KAAK,MAAM,IAAI;AACpD,YAAI,OAAO,eAAe,IAAI;AAAA;AAAA,UAC1B,KAAK,MAAM;AAAA,UAAM,KAAK,MAAM;AAAA,UAAW,KAAK;AAAA,QAAO,CAAC;AAAA,MAC5D;AACA,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEM,IAAM,kBAAkB,IAAI;AAAA,EAE/B;AAAA;AAAA,EACJ;AAAA;AAAA,IAEI,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,QAAQ,qBAAqB,MAAM,MAAM,sBAAsB;AACrE,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,+BAA+B,KAAK,MAAO,IAAI;AAC3D,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,MAAM,MAAM,uBAAuB,IAAI;AAC7C,aAAO,QAAQ,KAAK,MAAM,SAAS;AACnC,YAAM,MAAM,6BAA6B,KAAK,MAAM,IAAI;AACxD,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,cAAc,MAAM,KAAK,WAAW;AAChC,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,CAAC;AACvC,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,UAAI,CAAC,KAAK,MAAM;AACZ,eAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AAEpD,YAAM,OAAO,KAAK,MAAM;AACxB,UAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,IAAI;AAC9C,aAAK,KAAK,IAAI,0BAA0B,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC;AAE1E,WAAK,MAAM,aAAa,qBAAqB,MAAM,IAAI;AACvD,aAAO;AAAA,IACX;AAAA,IACA,OAAO,MAAM,KAAK,WAAW;AACzB,UAAI,CAAC,UAAW,QAAO;AACvB,UAAI,KAAK,OAAO,MAAM;AAClB,YAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,IAAI;AAC9C,cAAI,OAAO,gBAAgB,OAAO,KAAK,MAAM,IAAI;AACrD,YAAI,OAAO,gBAAgB;AAAA,UACvB;AAAA;AAAA,YACI,KAAK,MAAM;AAAA,YAAM,KAAK,MAAM;AAAA,YAAW,KAAK,MAAM;AAAA,UAAW;AAAA,QAAC;AAAA,MAC1E;AACA,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;;;AC3HD,SAASC,sBACL,MACA,MACA,OACF;AACE,QAAM,QAAQ,eAAe,MAAM,GAAG,QAAQ;AAC9C,MAAI,MAAO,QAAO;AAElB,QAAM,OAAkB,CAAC;AACzB,QAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,QAAM,YAAY,KAAK;AACvB,MAAI,cAAc,MAAM,WAAW,SAAS,IAAI,EAAG,QAAO;AAAA,IACtD,IAAI,uBAAuB,KAAK,UAAU,SAAS;AAAA,EAAC;AAExD,MAAI,WAA+B;AACnC,MAAI,QAA4B,CAAC;AACjC,MAAI,UAA8B;AAClC,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,UAAU,QAAQ;AAC9B,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,UAAM,QAAQ,aAAa,KAAK,IAAI,SAAU;AAC9C,QAAI,OAAO;AACP,iBAAW,MAAM,CAAC;AAClB;AACA,UAAI,gCAAiC;AACjC,YAAI,IAAI,KAAK,UAAU,QAAQ;AAC3B,cAAI,KAAK,UAAU,CAAC,EAAE,cAAc,IAAI;AACpC,iBAAK,KAAK,IAAI;AAAA,cACV,KAAK,UAAU,CAAC,EAAE;AAAA,cAAU;AAAA,YAAS,CAAC;AAAA,UAC9C,OAAO;AACH,sBAAU,KAAK,UAAU,CAAC,EAAE;AAC5B;AAAA,UACJ;AAAA,QACJ,MAAO,MAAK;AAAA,UACR,IAAI,6BAA6B,KAAK,QAAQ;AAAA,QAAC;AAAA,MACvD;AACA;AAAA,IACJ;AAEA;AACA,QAAI,IAAI,KAAK,UAAU,QAAQ;AAC3B,YAAM,KAAK,IAAI;AACf,UAAI,OAAO,IAAI;AACX,eAAO,CAAC,IAAI,uBAAuB,IAAI,UAAU,IAAI,CAAC;AAAA,MAC1D;AACA,YAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAC/B,UAAI,SAAS,IAAI;AACb,eAAO,CAAC,IAAI;AAAA,UACR,KAAK,UAAU,CAAC,EAAE;AAAA,UAAU;AAAA,QAAM,CAAC;AAAA,MAC3C;AACA,YAAM,KAAK,CAAC,IAAI,IAAI,CAAC;AACrB;AAAA,IACJ,OAAO;AACH,WAAK,KAAK,IAAI,6BAA6B,KAAK,QAAQ,CAAC;AACzD;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,KAAK,KAAK,UAAU,SAAS,GAAG;AAChC,UAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,QAAI,KAAK,cAAc,GAAI,MAAK;AAAA,MAC5B,IAAI,uBAAuB,KAAK,UAAU,iBAAiB;AAAA,IAAC;AAAA,EACpE,WAAW,IAAI,KAAK,UAAU,SAAS;AACnC,SAAK,KAAK,IAAI,6BAA6B,KAAK,QAAQ,CAAC;AAE7D,MAAI,YACA,EAAE,UAAU,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,cAAc,OAAU;AACtE,OAAK,QAAQ,EAAE,MAAM,WAAW,WAAW,OAAO,SAAS,KAAK;AAChE,QAAM,KAAK,SAAS;AACpB,SAAO,CAAC;AACZ;AAEO,IAAM,0BAA0B,IAAI;AAAA,EAEtC;AAAA;AAAA,EACL;AAAA;AAAA,IAEI,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,QAAQA;AAAA;AAAA,QACV;AAAA,QAAM,MAAM;AAAA,MAAqB;AACrC,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,uCAAuC,KAAK,MAAO,IAAI;AACnE,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,MAAM,MAAM,sBAAsB,IAAI;AAC5C,aAAO,QAAQ,KAAK,MAAM,SAAS;AACnC,YAAM,MAAM,uCAAuC,KAAK,MAAM,IAAI;AAClE,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,cAAc,MAAM,KAAK,WAAW;AAChC,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,CAAC;AACvC,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,UAAI,CAAC,KAAK;AACN,eAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AACpD,YAAM,OAAO,KAAK,MAAM;AACxB,UAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,IAAI;AAC9C,aAAK,KAAK,IAAI,0BAA0B,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC;AAC1E,aAAO;AAAA,IACX;AAAA,IACA,OAAO,MAAM,KAAK,WAAW;AACzB,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO;AACtC,YAAM,OAAO;AACb,YAAM,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,YAAM,MAAM;AAAA;AAAA,QACR;AAAA,QAAM,KAAK,MAAM;AAAA,QAAW,KAAK;AAAA,MAAO;AAC5C,YAAM,YAAiC;AAAA,QACnC,MAAM,KAAK,MAAM;AAAA,QACjB,SAAS,KAAK,MAAM;AAAA,QACpB;AAAA,QAAK;AAAA,MACT;AACA,UAAI,IAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,IAAI;AAC9C,YAAI,OAAO,gBAAgB,OAAO,KAAK,MAAM,IAAI;AACrD,UAAI,OAAO,gBAAgB,IAAI,SAAS;AACxC,YAAM,KAAK,MAAM,8BAA8B,WAAW,eAAe,SAAS,CAAC;AACnF,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEM,IAAM,2BAA2B,IAAI;AAAA,EAEvC;AAAA;AAAA,EACL;AAAA;AAAA,IAEI,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,QAAQA;AAAA;AAAA,QACV;AAAA,QAAM,MAAM;AAAA,MAAsB;AACtC,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,wCAAwC,KAAK,MAAO,IAAI;AACpE,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,MAAM,MAAM,uBAAuB,IAAI;AAC7C,aAAO,QAAQ,KAAK,MAAM,SAAS;AACnC,YAAM,MAAM,uCAAuC,KAAK,MAAM,IAAI;AAClE,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,cAAc,MAAM,KAAK,WAAW;AAChC,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO,CAAC;AACvC,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,UAAI,CAAC,KAAK;AACN,eAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AACpD,YAAM,OAAO,KAAK,MAAM;AACxB,UAAI,IAAI,OAAO,iBAAiB,IAAI,KAAK,MAAM,IAAI;AAC/C,aAAK,KAAK,IAAI,0BAA0B,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC;AAC1E,WAAK,MAAM,aAAa,qBAAqB,MAAM,IAAI;AACvD,aAAO;AAAA,IACX;AAAA,IACA,OAAO,MAAM,KAAK,WAAW;AACzB,UAAI,CAAC,aAAa,CAAC,KAAK,MAAO,QAAO;AACtC,YAAM,OAAO;AACb,YAAM,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,YAAM,MAAM;AAAA;AAAA,QACR;AAAA,QAAM,KAAK,MAAM;AAAA,QAAW,KAAK,MAAM;AAAA,MAAW;AACtD,YAAM,YAAkC;AAAA,QACpC,MAAM,KAAK,MAAM;AAAA,QACjB,SAAS,KAAK,MAAM;AAAA,QACpB;AAAA,QAAK;AAAA,MACT;AACA,UAAI,IAAI,OAAO,iBAAiB,IAAI,KAAK,MAAM,IAAI;AAC/C,YAAI,OAAO,iBAAiB,OAAO,KAAK,MAAM,IAAI;AACtD,UAAI,OAAO,iBAAiB,IAAI,SAAS;AACzC,YAAM,KAAK,MAAM,+BAA+B,WAAW,gBAAgB,SAAS,CAAC;AACrF,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;;;AC7LM,IAAM,cAAc,IAAI;AAAA,EAC1B;AAAA;AAAA,EACL;AAAA,IACI,OAAO,MAAM;AACT,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAC;;;ACSD,SAAS,QAAQ,KAAsC;AACnD,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,SAAO;AAAA,IACH,aAAa,IAAI,IAAI,KAAK,WAAW;AAAA,IACrC,QAAQ,IAAI,OAAO,eAAe,MAAM;AAAA,IACxC,SAAS,IAAI,OAAO,gBAAgB,MAAM;AAAA,IAC1C,kBAAkB,IAAI,OAAO,iBAAiB,MAAM;AAAA,IACpD,iBAAiB,IAAI,OAAO,gBAAgB,MAAM;AAAA,EACtD;AACJ;AAEA,SAAS,UAAU,KAAmB,MAAyB;AAC3D,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,OAAK,cAAc,IAAI,IAAI,KAAK,WAAW;AAC3C,MAAI,OAAO,iBAAiB,IAAI,YAAY,KAAK,MAAM;AACvD,MAAI,OAAO,kBAAkB,IAAI,YAAY,KAAK,OAAO;AACzD,MAAI,OAAO,mBAAmB,IAAI,YAAY,KAAK,gBAAgB;AACnE,MAAI,OAAO,kBAAkB,IAAI,YAAY,KAAK,eAAe;AACrE;AAEA,SAAS,IACL,MAAsB,MAAsB,WAC5B;AAChB,MAAI,WAAW,IAAI,IAAY,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3D,MAAI,MAAM,IAAI,IAAO,IAAI;AACzB,MAAI,UAAe,CAAC;AACpB,aAAW,KAAK,MAAM;AAClB,QAAI,SAAS,IAAI,EAAE,IAAI;AACnB,cAAQ,KAAK,CAAC;AAAA;AAEd,UAAI,IAAI,CAAC;AAAA,EACjB;AACA,SAAO,CAAC,KAAK,QAAQ,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC;AAClD;AAEA,SAAS,QAAQ,MAAyB,MAA4C;AAClF,SAAO;AAAA,IACH,aAAa,KAAK,YAAY,WAAW,KAAK,WAAW;AAAA,IACzD,QAAQ,KAAK,OAAO,WAAW,KAAK,MAAM;AAAA,IAC1C,SAAS,KAAK,QAAQ,WAAW,KAAK,OAAO;AAAA,IAC7C,kBAAkB,KAAK,iBAAiB,WAAW,KAAK,gBAAgB;AAAA,IACxE,iBAAiB,KAAK,gBAAgB,WAAW,KAAK,eAAe;AAAA,EACzE;AACJ;AAEA,SAAS,OAAO,MAAyB,MAAsD;AAC3F,MAAI,CAAC,QAAQ,EAAE,IACX,IAAI,KAAK,QAAQ,KAAK,QAAQ,WAAW,aAAa;AAC1D,MAAI,CAAC,SAAS,EAAE,IACZ,IAAI,KAAK,SAAS,KAAK,SAAS,WAAW,cAAc;AAC7D,MAAI,CAAC,kBAAkB,EAAE,IACrB,IAAI,KAAK,kBAAkB,KAAK,kBAAkB,WAAW,eAAe;AAChF,MAAI,CAAC,iBAAiB,EAAE,IACpB,IAAI,KAAK,iBAAiB,KAAK,iBAAiB,WAAW,cAAc;AAC7E,SAAO;AAAA,IAAC;AAAA,MACJ,aAAa,KAAK,YAAY,MAAM,KAAK,WAAW;AAAA,MACpD;AAAA,MAAQ;AAAA,MAAS;AAAA,MAAkB;AAAA,IACvC;AAAA,KACK,KAAK,KAAK,OAAO,OACjB,KAAK,KAAK,OAAO,OACjB,KAAK,sBAAsB,KAAK,OAAO,OACvC,KAAK,qBAAqB,KAAK;AAAA,EAAG;AAC3C;AAEO,IAAM,YACT,IAAI;AAAA,EAGD;AAAA;AAAA,EACP;AAAA,IACI,OAAO,MAAM;AAET,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI,MAAO,QAAO;AAClB,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,YAAM,OAAO,KAAK,UAAU,CAAC,EAAE;AAC/B,YAAM,OAAO,QAAQ,GAAG;AAExB,UAAI,KAAK,iBAAiB,QAAW;AACjC,eAAO,CAAC,IAAI,sBAAsB,KAAK,IAAI,CAAC;AAAA,MAChD;AAEA,UAAI,OAAkB,CAAC;AACvB,WAAK,QAAQ,EAAE,MAAM,KAAK;AAC1B,WAAK,eAAe;AACpB,UAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AACxB,cAAM,CAAC,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAE;AACzD,YAAI,IAAK,MAAK;AAAA,UACV,IAAI,4BAA4B,KAAK,MAAM,GAAG;AAAA,QAAC;AACnD,kBAAU,KAAK,KAAK;AACpB,cAAM,MAAM,4BAA4B,MAAM,uBAAuB;AAAA,MACzE,OAAO;AACH,cAAM,MAAM,4BAA4B,IAAI;AAAA,MAChD;AACA,aAAO;AAAA,IACX;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,WAAK,eAAe;AACpB,WAAK,QAAQ;AAAA,QAAI,KAAK,MAAM;AAAA,QACxB,QAAQ,QAAQ,GAAG,GAAG,KAAK,MAAM,IAAI;AAAA,MAAC;AAC1C,gBAAU,KAAK,KAAK,MAAM,IAAI;AAC9B,YAAM,MAAM,2BAA2B,KAAK,MAAM,IAAI;AACtD,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEM,IAAM,eACT,IAAI;AAAA,EAA4C;AAAA;AAAA,EACpD;AAAA,IACI,cAAc,MAAM,KAAK;AACrB,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI,MAAO,QAAO;AAClB,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,YAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,UAAI,CAAC,KAAK,QAAQ,IAAI,KAAK,SAAU;AACjC,eAAO,CAAC,IAAI,uBAAuB,KAAK,QAAQ,CAAC;AACrD,UAAI,KAAK,iBAAiB,KAAK;AAC3B,eAAO,CAAC,IAAI,6BAA6B,KAAK,QAAQ,CAAC;AAE3D,YAAM,CAAC,OAAO,GAAG,IAAI,OAAO,KAAK,QAAQ,IAAI,KAAK,SAAU,GAAI,QAAQ,GAAG,CAAC;AAC5E,WAAK,QAAQ;AAEb,UAAI;AACA,eAAO,CAAC,IAAI,4BAA4B,KAAK,MAAM,GAAG,CAAC;AAC3D,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM,KAAK;AACd,UAAI,KAAK;AACL,kBAAU,KAAK,KAAK,KAAK;AAC7B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEM,IAAM,cACT,IAAI;AAAA,EAED;AAAA;AAAA,EACP;AAAA,IACI,mBAAmB,MAAM,KAAK;AAC1B,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI,MAAO,QAAO;AAClB,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,YAAM,OAAO,KAAK,UAAU,CAAC;AAC7B,UAAI,CAAC,KAAK,QAAQ,IAAI,KAAK,SAAU;AACjC,eAAO,CAAC,IAAI,uBAAuB,KAAK,QAAQ,CAAC;AACrD,UAAI,KAAK,iBAAiB,KAAK;AAC3B,eAAO,CAAC,IAAI,6BAA6B,KAAK,QAAQ,CAAC;AAE3D,YAAM,MAAM,QAAQ,GAAG;AACvB,YAAM,CAAC,OAAO,GAAG,IAAI,OAAO,KAAK,QAAQ,IAAI,KAAK,SAAU,GAAI,GAAG;AACnE,gBAAU,KAAK,KAAK;AACpB,WAAK,QAAQ,EAAE,IAAI;AAEnB,UAAI;AACA,eAAO,CAAC,IAAI,4BAA4B,KAAK,MAAM,GAAG,CAAC;AAC3D,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,kBAAkB,MAAM,KAAK;AACzB,UAAI,KAAK;AACL,kBAAU,KAAK,KAAK,MAAM,GAAG;AACjC,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM;AACT,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAC;;;AClLD,SAAS,aAEJ,MAAc,MAAS,cAAuB,QACnD;AAQI,QAAM,MAAO,gCACP,IAAI,wBAAgC,kBAA2B,IAC/D,IAAI,yBAAiC,kBAA2B;AAEtE,QAAM,WAAW;AAEjB,MAAI,kBAAkB;AACtB,MAAI,gBAAgB,CAAC,MAA4B,KAAmB,cAAuB;AACvF,QAAI,KAAK,MAAO,QAAO,CAAC;AAExB,aAAS,iBAAiB,GAAsB;AAC5C,UAAI,EAAE,iBAAiB,QAAW;AAC9B,UAAE,eAAe;AACjB,cAAM,MAAM,wBAAwB,YAAY;AAAA,MACpD,WAAW,EAAE,iBAAiB,cAAc;AACxC,eAAO,CAAC,IAAI,yBAAyB,KAAK,QAAQ,CAAC;AAAA,MACvD;AACA,aAAO,CAAC;AAAA,IACZ;AAGA,UAAM,QAAQ,SACR,eAAe,MAAM,GAAG,CAAC,IACzB,eAAe,MAAM,GAAG,CAAC;AAC/B,QAAI,OAAO;AACP,WAAK,QAAQ,EAAE,IAAI,MAAM;AACzB,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,MAAM;AAChB,YAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,YAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;AAC9D,YAAM,QAAQ,WAAW,MAAM,yBAAyB,MAAM;AAG9D,UAAI,KAAK,UAAU,KAAK,MAAM,UAAU,GAAG;AACvC,aAAK,QAAQ,EAAE,IAAI,MAAM;AACzB,eAAO,CAAC,IAAI,iCAAiC,KAAK,QAAQ,CAAC;AAAA,MAC/D;AAGA,UAAI,KAAK,UAAU,WAAW,SAAS,IAAI,IAAI;AAC3C,YAAIC,aAAY,MAAM,GAAG,EAAE;AAC3B,YAAIA,WAAW,QAAO,iBAAiBA,UAAS;AAChD,aAAK,QAAQ,EAAE,IAAI,MAAM,MAAM,KAAK,GAAG,EAAE,GAAU,OAAO,KAAK,SAAS,EAAE;AAC1E;AAAA,MACJ;AAGA,YAAM,KAAK,KAAK,UAAU,CAAC,EAAE;AAC7B,UAAI,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE;AAClD,UAAI,UAAW,QAAO,iBAAiB,SAAS;AAChD,eAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,KAAK,CAAC,EAAE,aAAa,IAAI;AACpE,aAAK,QAAQ,EAAE,IAAI,MAAM,MAAM,KAAK,CAAC,GAAU,OAAO,EAAE;AACxD;AAAA,MACJ;AAGA,UAAI,WAAW;AACX,aAAK,QAAQ,EAAE,IAAI,MAAM;AACzB,cAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,eAAO,CAAC,IAAI,uBAAuB,IAAI,UAAU,EAAE,CAAC;AAAA,MACxD;AAAA,IACJ,GAAG;AAEH,QAAI,QAAQ;AACR,YAAM,MAAM,KAAK,UAAU,GAAG,EAAE;AAChC,YAAM,UAAU,IAAI;AACpB,YAAMC,QAAQ,WACR,IAAI,OAAO,kBACX,IAAI,OAAO,gBAAyC,IAAI,OAAO;AACrE,UAAI,CAACA,MAAK;AACN,aAAK,QAAQ,EAAE,IAAI,MAAM;AACzB,eAAO,CAAC,IAAI,uBAAuB,IAAI,UAAU,OAAO,CAAC;AAAA,MAC7D;AACA,UAAI,KAAK,OAAO;AACZ,aAAK,MAAM,YAAYA;AAAA,IAC/B;AAEA,QAAI,KAAM,QAAO;AACjB,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,SAAS,CAAC,MAA4B,QAAsB;AAC5D,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,QAAI,CAAC,KAAK,MAAM,GAAI,QAAO,CAAC;AAC5B,QAAI,SAAS,WAAW,KAAK,MAAM,KAAK,WAAW;AACnD,QAAI,QAAQ;AACR,YAAMA,OAAM,KAAK,MAAM;AACvB,YAAM,UAAwB;AAAA,QAC1B;AAAA,QAAM,KAAAA;AAAA,QACN,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,QACX,WAAW,CAAC;AAAA;AAAA,QACZ,SAAS;AAAA,MACb;AACA,aAAO,CAAC,OAAO;AAAA,IACnB,MAAO,QAAO;AAAA,EAClB;AACA,MAAI,yBAAyB,CAAC,MAA4B,QAAsB;AAE5E,QAAI,CAAC,KAAK,OAAO,GAAI,QAAO,CAAC;AAC7B,UAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,UAAM,MAAM,qCAAqC,KAAK,MAAM,KAAK,IAAI,IAAI;AACzE,UAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;AAC9D,SAAK,OAAO,KAAK,MAAM,OAAO,CAAC;AAC/B,WAAO,CAAC;AAAA,EACZ;AACA,MAAI,wBAAwB,CAAC,MAA4B,QAAsB;AAE3E,QAAI,CAAC,KAAK,OAAO,GAAI,QAAO,CAAC;AAC7B,UAAM,QAAQ,IAAI,IAAI,QAAQ;AAC9B,UAAM,MAAM,4BAA4B,KAAK,MAAM,KAAK,IAAI,IAAI;AAChE,UAAM,OAAO,WAAW,MAAM,0BAA0B,MAAM;AAC9D,SAAK,OAAO,KAAK,MAAM,OAAO,GAAG,KAAK,MAAM,IAAW;AACvD,WAAO,CAAC;AAAA,EACZ;AACA,SAAO;AACX;AAEO,IAAM,eAAe,aAAa,+BAAgC,OAAO,KAAK;AAC9E,IAAM,gBAAgB,aAAa,gCAAiC,OAAO,KAAK;AAEhF,IAAM,kBAAkB,aAAa,mCAAoC,MAAM,KAAK;AACpF,IAAM,mBAAmB,aAAa,oCAAqC,MAAM,KAAK;AAEtF,IAAM,wBAAwB;AAAA,EACjC;AAAA;AAAA,EAA2C;AAAA,EAAM;AAAI;AAClD,IAAM,yBAAyB;AAAA,EAClC;AAAA;AAAA,EAA4C;AAAA,EAAM;AAAI;;;AC7I1D,SAAS,UAAU,IAAY,KAAuC;AAClE,QAAM,QAAQ,IAAI,IAAI,QAAQ;AAE9B,MAAI,MAAM,uBAAuB,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,EAAE,CAAC,KAC5D,MAAM,sBAAsB,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,EAAE,CAAC,GAC/D;AACI,UAAM,MAAM,qCAAqC,EAAE;AACnD,WAAO;AAAA,EACX;AAEA,MAAI,QAA4B;AAChC,WAAS,IAAI,MAAM,wBAAwB,SAAS,GAAG,KAAK,GAAG,KAAK;AAChE,UAAM,OAAO,MAAM,wBAAwB,CAAC;AAC5C,SAAK,QAAQ,KAAK,KAAK,IAAI,EAAE,OAAO;AAChC;AAAA,EACR;AACA,WAAS,IAAI,MAAM,uBAAuB,SAAS,GAAG,KAAK,GAAG,KAAK;AAC/D,UAAM,OAAO,MAAM,uBAAuB,CAAC;AAC3C,SAAK,QAAQ,KAAK,KAAK,IAAI,EAAE,OAAO;AAChC;AAAA,EACR;AACA,MAAI,UAAU;AACV,YAAQ,IAAI,UAAU,IAAI,EAAE;AAChC,SAAO;AACX;AAEA,IAAI,aAAa,CAAC,MAAc,MAC5B,IAAI;AAAA,EACH;AAAA;AAAA,EACL;AAAA,IACI,cAAc,MAAM,KAAK;AACrB,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,YAAM,KAAK,IAAI;AACf,UAAI,MAAM,GAAI,QAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AAC9D,YAAM,QAAQ,UAAU,IAAI,GAAG;AAC/B,WAAK,QAAQ,UAAU;AACvB,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM;AACT,aAAQ,KAAK,SAAS,IAAK,KAAK,UAAU,CAAC;AAAA,IAC/C;AAAA,EACJ;AAAC;AAED,IAAI,cAAc,CAAC,MAAc,MAC7B,IAAI;AAAA,EACH;AAAA;AAAA,EACL;AAAA,IACI,cAAc,MAAM,KAAK;AACrB,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI,MAAO,QAAO;AAClB,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,YAAM,KAAK,IAAI;AACf,UAAI,MAAM,GAAI,QAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AAC9D,YAAM,QAAQ,UAAU,IAAI,GAAG;AAC/B,WAAK,QAAQ,UAAU;AACvB,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM;AACT,aAAQ,KAAK,SAAS,IAAK,KAAK,UAAU,CAAC;AAAA,IAC/C;AAAA,EACJ;AAAC;AAEM,IAAM,gBAAgB,WAAW,SAAS,IAAI;AAC9C,IAAM,iBAAiB,WAAW,UAAU,KAAK;AACjD,IAAM,iBAAiB,YAAY,SAAS,IAAI;AAChD,IAAM,kBAAkB,YAAY,UAAU,KAAK;AAEnD,IAAM,kBACT,IAAI;AAAA,EAA6C;AAAA;AAAA,EACrD;AAAA,IACI,iBAAiB;AAAA;AAAA,IAEjB,cAAc,MAAM,KAAK,WAAW;AAChC,YAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,UAAI;AACA,eAAO,YAAY,QAAQ,CAAC;AAEhC,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,YAAM,KAAK,IAAI;AACf,UAAI,MAAM;AACN,eAAO,YAAY,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC,IAAI,CAAC;AAErE,YAAM,QAAQ,UAAU,IAAI,GAAG;AAC/B,UAAI,UAAU;AACV,eAAO,YAAY,CAAC,IAAI,yBAAyB,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC;AAC3E,WAAK,QAAQ,EAAE,MAAM;AACrB,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM,GAAG,WAAW;AACvB,UAAI,CAAC,KAAK,MAAO,QAAO,YAAY,CAAC,IAAI;AACzC,aAAO,CAAC,EAAE,oBAAqB,SAAS,KAAK,MAAM,OAAO,UAAU,KAAK,SAAS,CAAC;AAAA,IACvF;AAAA,EACJ;AAAC;AAEM,IAAM,iBACT,IAAI;AAAA,EAA6C;AAAA;AAAA,EACrD;AAAA;AAAA,IAEI,cAAc,MAAM;AAChB,YAAM,QAAQ,eAAe,IAAI;AACjC,UAAI,MAAO,QAAO;AAClB,WAAK,QAAQ,EAAC,OAAO,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,SAAU,EAAE,KAAK,EAAE,EAAC;AACrE,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,OAAO,MAAM;AACT,UAAI,CAAC,KAAK,MAAO,QAAO,CAAC;AACzB,aAAO,CAAC,EAAE,oBAAqB,SAAS,KAAK,MAAM,OAAO,UAAU,KAAK,SAAS,CAAC;AAAA,IACvF;AAAA,EACJ;AAAC;AAEM,IAAM,qBACT,IAAI;AAAA,EAA+B;AAAA,EAAM;AAAA,EAC7C;AAAA,IACI,iBAAiB;AAAA,IACjB,OAAO,SAAS,KAAK;AACjB,YAAM,SAAS,UAAU,SAAS,GAAG;AACrC,UAAI,WAAW,OAAW,OAAM,MAAM,KAAK,OAAO,SAAS,MAAM,EAAE;AACnE,aAAO;AAAA,IACX;AAAA,EACJ;AAAC;AAEM,IAAM,SAAS,IAAI,yBAEvB,qBAA8B;AAAA;AAAA,EAE7B,cAAc,MAAM,KAAK;AACrB,UAAM,QAAQ,eAAe,MAAM,CAAC;AACpC,QAAI,MAAO,QAAO;AAElB,UAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,UAAM,KAAK,IAAI;AACf,QAAI,MAAM;AACN,aAAO,CAAC,IAAI,uBAAuB,IAAI,QAAQ,CAAC;AACpD,SAAK,QAAQ;AAAA,MACT;AAAA,MACA,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,IAC7B;AACA,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,OAAO,MAAM,KAAK;AACd,QAAI,KAAK,OAAO;AACZ,UAAI,UAAU,IAAI,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK;AACjD,YAAM,MAAM,gBAAgB,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,KAAK;AAAA,IACpE;AACA,WAAO,CAAC;AAAA,EACZ;AACJ,CAAC;;;AClJD,IAAI,UAAU,IAAI,cAAc;AAChC,QAAQ,eAAe,CAAC,gBAAgB;AACxC,QAAQ,gBAAgB;AAAA,EACpB;AAAA,EAAgB;AAAA,EAChB;AAAA,EAAyB;AAAA,EACzB;AAAA,EACA;AAAY;AAChB,QAAQ,eAAe;AAAA,EACnB;AAAA,EAAc;AAAA,EAAiB;AAAA,EAC/B;AAAA,EAAW;AAAA,EACX;AAAA,EAAe;AAAA,EACf;AAAW;AACf,QAAQ,gBAAgB;AAAA,EACpB;AAAA,EAAe;AAAA,EAAkB;AAAA,EACjC;AAAA,EAAiB;AAAA,EACjB;AAAA,EAAgB;AAAe;AACnC,QAAQ,sBAAsB,IAAI,kBAAkB;AAE7C,IAAM,uBAA8C,OAAO,OAAO,OAAO;;;ACrBhF,IAAM,kBAAkB,IAAI;AAAA,EACxB;AAAA;AAAA,EACA,EAAE,UAAU,OAAU;AAAC;AAE3B,IAAM,uBAAuB,IAAI;AAAA,EAC7B;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,GAAG,CAAC;AACpC,UAAI,KAAM,QAAO;AACjB,UAAI,MAAM,KAAK,UAAU,CAAC;AAC1B,UAAI,MAAM,OAAO,SAAS,IAAI,SAAU;AACxC,UAAI,MAAM,GAAG,EAAG,QAAO;AAAA,QACnB,IAAI,uBAAuB,IAAI,UAAU,oBAAoB;AAAA,MAAC;AAClE,WAAK,QAAQ;AACb,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,eAAe,IAAI;AAAA,EACrB;AAAA;AAAA,EACA,EAAE,UAAU,OAAU;AAAC;AAEpB,IAAM,eAAe,CAAC,iBAAiB,sBAAsB,YAAY;AAEzE,IAAM,2BAA2B;AAAA,EACpC,CAAC,iBAAiB,CAAC,MAAM,QAAQ;AAC7B,WAAO,OAAO,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACrD,CAAC;AAAA,EACD,CAAC,cAAc,CAAC,MAAM,QAAQ;AAC1B,WAAO,wBAAwB,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACtE,CAAC;AAAA,EACD,CAAC,sBAAsB,CAAC,MAAM,QAAQ;AAClC,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AACpD,WAAO,cAAc,KAAK,KAAK,KAAK,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EAC3E,CAAC;AACL;;;ACrCO,IAAM,WAAW,OAAO;AAgBxB,SAAS,aAAa,KAAmB;AAC5C,MAAI,KAAK,UAAU;AAAA,IACf,MAAM,CAAC;AAAA,EACX,CAAC;AACL;AAEA,SAAS,WAAW,KAAmB,MAAmB;AACtD,QAAM,OAAO,IAAI,IAAI,QAAQ,EAAG;AAChC,SAAO,KAAK,SAAS,KAAK,KAAK,GAAG,EAAE,EAAG,SAAS,KAAK;AACjD,SAAK,IAAI;AACb,OAAK,KAAK,IAAI;AACd,SAAO,CAAC;AACZ;AAEA,SAAS,oBAAoB,KAAmB;AAC5C,SAAO,IAAI,IAAI,QAAQ,EAAG,KAAK,GAAG,EAAE,GAAG;AAC3C;AAEA,SAAS,4BAA4B,KAAmB;AACpD,SAAO,IAAI,IAAI,QAAQ,EAAG,KAAK,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;AACjE;AAEA,IAAM,eAAe,IAAI;AAAA,EACrB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM,KAAK;AACrB,UAAI,OAAO,eAAe,MAAM,GAAG,CAAC;AACpC,UAAI,KAAM,QAAO;AACjB,aAAO,sBAAsB,IAAI;AACjC,UAAI,KAAM,QAAO;AACjB,aAAO,2BAA2B,IAAI;AACtC,UAAI,KAAM,QAAO;AAEjB,WAAK,QAAQ,EAAE,MAAM,QAAW,OAAO,oBAAoB,GAAG,KAAK,EAAE;AACrE,UAAI,KAAK,UAAU,UAAU,GAAG;AAC5B,cAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,cAAM,QAAQ,OAAO,SAAS,IAAI,SAAU;AAC5C,YAAI,MAAM,KAAK,KAAK,QAAQ,KAAK,QAAQ;AACrC,iBAAO,CAAC,IAAI;AAAA,YACR,IAAI;AAAA,YAAU;AAAA,UAAoC,CAAC;AAAA,YACtD,MAAK,MAAM,QAAQ;AAAA,MAC5B;AACA,iBAAW,KAAK,KAAK,KAAK;AAC1B,aAAO,QAAQ,CAAC;AAAA,IACpB;AAAA,EACJ;AAAC;AAEL,IAAM,uBAAuB,IAAI;AAAA,EAC7B;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM,KAAK;AACrB,UAAI,OAAO,eAAe,MAAM,GAAG,CAAC;AACpC,UAAI,KAAM,QAAO;AAEjB,WAAK,QAAQ;AAAA,QACT,MAAM;AAAA,QAAW,UAAU;AAAA,QAC3B,QAAQ,4BAA4B,GAAG,KAAK,KAAM;AAAA,MACtD;AACA,UAAI,KAAK,UAAU,UAAU,GAAG;AAC5B,cAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,cAAM,QAAQ,OAAO,SAAS,IAAI,SAAU;AAC5C,YAAI,MAAM,KAAK,KAAK,QAAQ,KAAK,QAAQ;AACrC,iBAAO,CAAC,IAAI;AAAA,YACR,IAAI;AAAA,YAAU;AAAA,UAAoC,CAAC;AAAA,YACtD,MAAK,MAAM,QAAQ;AAAA,MAC5B;AACA,iBAAW,KAAK,KAAK,KAAK;AAC1B,aAAO,QAAQ,CAAC;AAAA,IACpB;AAAA,EACJ;AAAC;AAEL,IAAM,uBAAuB,IAAI;AAAA,EAC7B;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM,KAAK;AACrB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,aAAO,sBAAsB,IAAI;AACjC,UAAI,KAAM,QAAO;AACjB,aAAO,2BAA2B,IAAI;AACtC,UAAI,KAAM,QAAO;AAEjB,WAAK,QAAQ,EAAE,MAAM,QAAW,OAAO,oBAAoB,GAAG,KAAK,EAAE;AACrE,YAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,YAAM,QAAQ,IAAI,UAAW,KAAK,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AACzE,UAAI,MAAM,UAAU,KAAK,MAAM,SAAS;AACpC,eAAO,CAAC,IAAI;AAAA,UACR,IAAI;AAAA,UAAU;AAAA,QAAoC,CAAC;AAAA,UACtD,MAAK,QAAQ,EAAE,MAAM,MAAM,KAAK,GAAG,GAAG,OAAO,MAAM,OAAO;AAC/D,iBAAW,KAAK,KAAK,KAAK;AAC1B,aAAO,QAAQ,CAAC;AAAA,IACpB;AAAA,EACJ;AAAC;AAEE,IAAM,gBAAgB,CAAC,cAAc,sBAAsB,oBAAoB;AAE/E,IAAM,4BAA4B;AAAA,EACrC,CAAC,cAAc,CAAC,MAAM,QAAQ;AAC1B,QAAI,KAAK,UAAU,QAAW;AAC1B,UAAI,MAAM,MAAM,KAAK,MAAM;AAC3B,UAAI,OAAO,KAAK,QAAQ,CAAC;AACzB,aAAO,IAAI,GAAG,IAAI,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC,KAAK,GAAG;AAAA,IACjE;AACA,WAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AAAA,EACpD,CAAC;AAAA,EACD,CAAC,sBAAsB,CAAC,MAAM,QAAQ;AAClC,QAAI,KAAK,UAAU,QAAW;AAC1B,UAAI,MAAM,MAAM,KAAK,MAAM;AAC3B,aAAO,IAAI,GAAG,uBAAuB,GAAG;AAAA,IAC5C;AACA,WAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AAAA,EACpD,CAAC;AAAA,EAED,CAAC,sBAAsB,CAAC,MAAM,QAAQ;AAClC,QAAI,KAAK,UAAU,QAAW;AAC1B,UAAI,MAAM,MAAM,KAAK,MAAM;AAC3B,UAAI,OAAO,KAAK,QAAQ,CAAC;AACzB,aAAO,IAAI,GAAG,iCAAiC,KAAK,MAAM,IAAI,UAAU,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC,KAAK,GAAG;AAAA,IACvH;AACA,WAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AAAA,EACpD,CAAC;AACL;;;AC1IO,IAAM,QAAQ,OAAO;AAuBrB,SAAS,UAAU,KAAmB;AACzC,MAAI,KAAK,OAAO;AAAA,IACZ,SAAS,oBAAI,IAAI;AAAA,IACjB,aAAa,CAAC;AAAA,EAClB,CAAC;AACL;AAEA,IAAM,mBAAmB,IAAI;AAAA,EACzB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,GAAG,CAAC;AACpC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,GAAG,CAAC,GAAG,aAAa;AAChD,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,sBAAsB,MAAM,KAAK;AAC7B,UAAI,KAAK,UAAU,QAAW;AAC1B,YAAI,IAAI,KAAK,EAAG,YAAY,KAAK;AAAA,UAC7B,QAAQ;AAAA,UACR,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf,SAAS,CAAC;AAAA,YACN;AAAA,YACA,UAAU;AAAA,cACN,QAAQ,KAAK,SAAS;AAAA,cACtB,OAAO,KAAK,KAAK;AAAA,cACjB,KAAK,KAAK,SAAS,aAAa,KAAK,SAAS;AAAA,YAClD;AAAA,YACA,SAAS,KAAK;AAAA,UAClB,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AACA,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,YAAY,IAAI;AAAA,EAClB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,IACA,sBAAsB,MAAM,KAAK;AAC7B,UAAI,KAAK,UAAU,QAAW;AAE1B,YAAI,UAAU,UAAU,GAAG,KAAK,OAAO;AACvC,cAAM,MAAM,qBAAqB,EAAE,UAAU,KAAK,KAAK,KAAK,KAAK,SAAS,KAAK,EAAE;AACjF,cAAM,MAAM;AAAA,GAAS,WAAW,KAAK,GAAG,OAAO,CAAC;AAChD,YAAI,IAAI,KAAK,EAAG,YAAY,KAAK;AAAA,UAC7B,QAAQ;AAAA,UACR,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,WAAK,YAAY,CAAC;AAClB,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEE,IAAM,aAAa,CAAC,SAAS;AAC7B,IAAM,cAAc,CAAC,YAAY,gBAAgB;AAEjD,IAAM,0BAA0B;AAAA,EACnC,CAAC,kBAAkB,CAAC,MAAM,QAAQ;AAC9B,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,cAAc,MAAM,YAAY;AAErD,UAAM,OAAO,IAAI,aAAa,IAAI,KAAK,EAAG;AAC1C,UAAM,OAAO,KAAK,UAAU,CAAC;AAAA;AAAA,MAAsC,EAAE,QAAQ,KAAK;AAAA,KAAK;AACvF,QAAI,OAAO;AACP,aAAO,wCAAwC,KAAK,KAAK;AAC7D,WAAO,uCAAuC,IAAI,uBAAuB,IAAI,KAAK,KAAK,KAAK;AAAA,EAChG,CAAC;AACL;AAEO,IAAM,oBAAyC,CAAC,QAAQ;AAC3D,MAAI,OAAO,IAAI,aAAa,IAAI,KAAK,EAAG;AACxC,MAAI,KAAK,UAAU,EAAG,QAAO;AAC7B,SAAO;AAAA;AAAA,EAET,KAAK,IAAI,CAAC,GAAG,MACf,qCAAqC,CAAC;AAAA,oDACc,CAAC,KAAK,EAAE,IAAI;AAAA,4BAE5D,IAAI,MAAM,OAAO,EAAE,SAAS,GAAG,CACnC,kBAAkB,EAAE,KAAK,IAAI,CAAC;AAAA;AAE9B;;;ACvIO,IAAM,YAAY,IAAI;AAAA,EACzB;AAAA;AAAA,EACA,EAAE,UAAU,OAAO;AAAC;AAEjB,IAAM,aAAa,IAAI;AAAA,EAC1B;AAAA;AAAA,EACA,EAAE,UAAU,OAAO;AAAC;AAEjB,IAAM,wBACT,CAAC,WAAW,CAAC,MAAM,QAAQ;AACvB,SAAO,cAAc,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAC5D,CAAC;AAEE,IAAM,yBACT,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,SAAO,eAAe,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAC7D,CAAC;;;ACfL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA,EAAE,UAAU,QAAQ;AAAC;AAEzB,IAAM,eAAe,IAAI;AAAA,EACrB;AAAA;AAAA,EACA,EAAE,UAAU,QAAQ;AAAC;AAEzB,IAAM,mBAAmB,IAAI;AAAA,EACzB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,sBAAsB,IAAI;AACrC,UAAI,KAAM,QAAO;AACjB,aAAO,2BAA2B,IAAI;AACtC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ;AACb,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEE,IAAM,cAAc,CAAC,YAAY,cAAc,gBAAgB;AAE/D,IAAM,0BAA0B;AAAA,EACnC,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,WAAO,eAAe,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EAC7D,CAAC;AAAA,EACD,CAAC,cAAc,CAAC,MAAM,QAAQ;AAC1B,WAAO,+BAA+B,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EAC7E,CAAC;AAAA,EACD,CAAC,kBAAkB,CAAC,MAAM,QAAQ;AAC9B,QAAI,CAAC,KAAK;AACN,aAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AACpD,QAAI,OAAO,KAAK,QAAQ,CAAC;AACzB,WAAO,0BAA0B,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACxE,CAAC;AACL;;;ACtCA,IAAM,iBAAiB,IAAI;AAAA,EACvB;AAAA;AAAA,EACA,EAAE,UAAU,WAAW;AAAC;AAE5B,IAAM,gBAAgB,IAAI;AAAA,EACtB;AAAA;AAAA,EACA,EAAE,UAAU,UAAU;AAAC;AAE3B,IAAM,kBAAkB,IAAI;AAAA,EACxB;AAAA;AAAA,EACA,EAAE,UAAU,YAAY;AAAC;AAE7B,IAAM,mBAAmB,IAAI;AAAA,EACzB;AAAA;AAAA,EACA,EAAE,UAAU,aAAa;AAAC;AAEvB,IAAM,eAAe,CAAC,gBAAgB,eAAe,iBAAiB,gBAAgB;AAEtF,IAAM,2BAA2B;AAAA,EACpC,CAAC,gBAAgB,CAAC,MAAM,QAAQ;AAC5B,WAAO,OAAO,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACrD,CAAC;AAAA,EACD,CAAC,eAAe,CAAC,MAAM,QAAQ;AAC3B,WAAO,MAAM,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACpD,CAAC;AAAA,EACD,CAAC,iBAAiB,CAAC,MAAM,QAAQ;AAC7B,WAAO,SAAS,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACvD,CAAC;AAAA,EACD,CAAC,kBAAkB,CAAC,MAAM,QAAQ;AAC9B,WAAO,4BAA4B,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EAC1E,CAAC;AACL;;;AC9BA,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA;AAAA,IACI,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAA8B;AAElC,IAAM,YAAY,IAAI;AAAA,EAClB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,WAAK,QAAQ,KAAK,UAAU,CAAC,EAAE;AAC/B,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEL,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA;AAAA,EACA;AAAA,IACI,UAAU;AAAA,IACV,cAAc,MAAM;AAChB,UAAI,OAAO,eAAe,MAAM,GAAG,CAAC;AACpC,UAAI,KAAM,QAAO;AACjB,aAAO,sBAAsB,IAAI;AACjC,UAAI,KAAM,QAAO;AACjB,aAAO,2BAA2B,IAAI;AACtC,UAAI,KAAM,QAAO;AAEjB,WAAK,QAAQ,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,SAAU,EAAE,KAAK,GAAG;AAC7D,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAAC;AAEE,IAAM,cAAc,CAAC,YAAY,UAAU;AAE3C,IAAM,aAAa,CAAC,YAAY,YAAY,WAAW,UAAU;AAEjE,IAAM,0BAA0B;AAAA,EACnC,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,cAAc,MAAM,YAAY;AACrD,WAAO,SAAS,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC,OAAO,KAAK,KAAK;AAAA,EACxE,CAAC;AAAA,EACD,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,cAAc,MAAM,YAAY;AACrD,WAAO,YAAY,UAAU,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACpF,CAAC;AACL;AAEO,IAAM,yBAAyB;AAAA,EAClC,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AACpD,WAAO,yBAAyB,KAAK,KAAK,8BAA8B,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EAC/G,CAAC;AAAA,EACD,CAAC,YAAY,MAAM;AACf,WAAO;AAAA,EACX,CAAC;AAAA,EACD,CAAC,WAAW,CAAC,MAAM,QAAQ;AACvB,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AACpD,WAAO,YAAY,UAAU,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,EACpF,CAAC;AAAA,EACD,CAAC,YAAY,CAAC,MAAM,QAAQ;AACxB,QAAI;AACJ,QAAI,KAAK,UAAU;AACf,aAAO,IAAI,MAAM,aAAa,MAAM,YAAY;AACpD,QAAI;AACA,oBAAc,IAAI,OAAO,QAAQ,eAAe,KAAK,KAAK;AAAA,IAC9D,QAAQ;AACJ,aAAO,IAAI,MAAM,aAAa,MAAM,2BAA2B;AAAA,IACnE;AACA,UAAM,MAAM,cACN,aAAa,WAAW,wBAAwB,KAAK,KAAK,QAC1D,aAAa,KAAK,KAAK;AAC7B,UAAM,OAAO,KAAK,QAAQ,UAAU,IAC9B,KACA,mBACI,IAAI,MAAM,OAAQ,KAAK,QAAQ,CAAC,EAAoB,SAAS,GAAG,IAChE;AACV,WAAO,WAAW,GAAG,GAAG,IAAI;AAAA,EAChC,CAAC;AACL;;;ACrHA,SAAS,cAAc,MAAc,SAAkB;AACnD,YAAU,WAAW,KAAK,YAAY;AACtC,SAAO,IAAI,yBAA+B,sBAA+B;AAAA,IACrE,uBAAuB;AAAA,IACvB,sBAAsB,MAAM,KAAK;AAC7B,UAAI,OAAO,eAAe,MAAM,CAAC;AACjC,UAAI,KAAM,QAAO;AACjB,YAAM,SAAS,6BAA6B,IAAI;AAChD,UAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,YAAM,WAAW,IAAI,UAAU,IAAI,OAAO;AAC1C,UAAI;AACA,eAAO,CAAC,IAAI,gCAAgC,KAAK,MAAM,SAAS,QAAQ,CAAC;AAC7E,UAAI,UAAU,IAAI,SAAS,MAAM;AACjC,YAAM,MAAM,SAAS,MAAM,MAAM;AACjC,aAAO,QAAQ,CAAC;AAAA,IACpB;AAAA,EACJ,CAAC;AACL;AAEO,IAAM,cAAc;AAAA,EACvB,cAAc,OAAO;AAAA,EACrB,cAAc,UAAU;AAAA,EACxB,cAAc,QAAQ;AAAA,EACtB,cAAc,YAAY;AAAA,EAC1B,cAAc,aAAa;AAAA,EAC3B,cAAc,YAAY;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,cAAc,WAAW;AAAA,EACzB,cAAc,YAAY;AAAA,EAC1B,cAAc,WAAW;AAAA,EACzB,cAAc,aAAa;AAC/B;;;AC1BA,IAAI,SAAS,cAAc,KAAK,oBAAoB;AACpD,OAAO,aAAa,KAAK,WAAW,YAAY;AAChD,OAAO,eAAe;AAAA,EAClB,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP;AACA,OAAO,gBAAgB;AAAA,EACnB;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP;AACA,OAAO,gBAAgB;AAAA,EACnB,GAAG;AACP;AAEO,IAAM,uBAA8C,OAAO,OAAO,MAAM;;;ACIxE,IAAM,kBAAN,MAAsB;AAAA,EACzB,QAAgB;AAAA,EAChB,aAAa;AAAA;AAAA,EACb,eAAe,oBAAI;AAAA;AAAA,EAGnB,OAAO,SAAiB;AACpB,WAAO,QACF,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,OAAO,EACvB,WAAW,MAAM,OAAO;AAAA,EACjC;AAAA,EAEA,aAAa,MAAmB,KAAa;AACzC,QAAI,OAAO,SAAS,KAAK,IAAI;AAC7B,QAAI,KAAK;AACL,cAAQ,KAAK,KAAK,IAAI,IAAI;AAE9B,WAAO,6CAA6C,KAAK,OAAO,IAAI,CAAC,gBAAgB,KAAK,OAAO,GAAG,CAAC;AAAA,EACzG;AAAA,EAEA,cAAc,MAAoB,KAAa;AAC3C,QAAI,OAAO,SAAS,KAAK,IAAI;AAC7B,QAAI,KAAK;AACL,cAAQ,KAAK,KAAK,IAAI,IAAI;AAE9B,WAAO,iCAAiC,KAAK,OAAO,IAAI,CAAC,cAAS,KAAK,OAAO,GAAG,CAAC;AAAA,EACtF;AAAA,EAEA,OAAO,OAAuC,KAAoC;AAC9E,WAAO,MAAM,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,MAAS,EAAE,KAAK,EAAE;AAAA,EACvF;AACJ;AAEA,IAAM,aAAa,IAAI;AAAA,EACnB;AAAA,IACI,aAAa,CAAC;AAAA,IACd,eAAe,CAAC;AAAA,IAChB,eAAe,CAAC,iBAAiB;AAAA,IACjC,gBAAgB,CAAC,MAAM;AAAA;AAAA,EAE3B;AAAA,EACA,CAAC,SAAS,QAAQ;AAEd,QAAI,SAAS,IAAI,MAAM,WAAW;AAAA,MAAW;AAAA,MACzC,CAAC,GAAG,MAAM,IAAI,MAAM,aAAa,IAAI,CAAC,KAAK;AAAA,IAAC;AAChD,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb,IAAI,OAAO,QAAQ,YAChB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EACjB,OAAO,CAAC,MAAM,MAAM,MAAS,EAC7B,KAAK,IAAI,CAAC;AAAA,SACN,IAAI,MAAM,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,SACjC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb,IAAI,OAAO,QAAQ,cAChB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EACjB,OAAO,CAAC,MAAM,MAAM,MAAS,EAC7B,KAAK,IAAI,CAAC;AAAA,EACb,QAAQ,KAAK,IAAI,CAAC;AAAA,EAClB,IAAI,OAAO,QAAQ,cAChB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EACjB,OAAO,CAAC,MAAM,MAAM,MAAS,EAC7B,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf;AAAC;AAED,WAAW,oBAAoB,CAAC,MAAM,QAClC,MAAM,KAAK,QACN,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,EAC9B,OAAO,CAAC,MAAM,MAAM,MAAS,EAAE,KAAK,EAAE,CAAC;AAEhD,WAAW,eAAe,CAAC,MAAM,QAAQ;AACrC,UAAQ,KAAK,MAAM;AAAA,IACf;AACI,aAAO,IAAI,MAAM,OAAO,KAAK,QAAQ,IAAI;AAAA,IAC7C;AAAA,IACA;AACI,aAAO,IAAI,MAAM,OAAO,KAAK,OAAO;AAAA,IACxC;AACI,aAAO,MAAM,MAAM,IAAI;AAAA,EAC/B;AACJ;AAEA,WAAW,yBAAyB,CAAC,MAAM,QAAQ;AAC/C,SAAO,IAAI,MAAM,aAAa,MAAM,2BAA2B,KAAK,IAAI,IAAI,EAAE;AAClF;AAEA,WAAW,0BAA0B,CAAC,MAAM,QAAQ;AAChD,SAAO,IAAI,MAAM,cAAc,MAAM,2BAA2B,KAAK,IAAI,IAAI,EAAE;AACnF;AAEA,WAAW;AAAA,EACP,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AAAA;AAEP;AAEA,WAAW;AAAA,EACP;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP;AAEO,IAAM,0BACuC;;;AC7I7C,IAAM,cAAc;AAEpB,SAAS,cAAc,OAAmB;AAC7C,QAAM,QAAQ;AAClB;","names":["MessageSeverity","NodeType","ModifierSlotType","DebugLevel","x","prefix","content","loc","config","end","config","parseDefineArguments","signature","mod"]}
|