@the_dissidents/libemmm 0.0.0 → 0.0.2
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 +265 -4
- package/dist/index.d.mts +95 -17
- package/dist/index.d.ts +95 -17
- package/dist/index.js +523 -280
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +525 -264
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/debug.ts","../src/messages.ts","../src/util.ts","../src/interface.ts","../src/front.ts","../src/parser.ts","../src/builtin/internal.ts","../src/builtin/define-block.ts","../src/builtin/define-inline.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts"],"sourcesContent":["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 { Message, MessageSeverity, FixSuggestion } from \"./interface\";\n\nexport class ReferredMessage implements Message {\n constructor(\n public readonly original: Message,\n public readonly position: number, \n public readonly length: number) {}\n get severity() { return this.original.severity; }\n get info() { return this.original.info; }\n get code() { return this.original.code; }\n readonly fixes: readonly FixSuggestion[] = [];\n}\n\nclass AddThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly position: number, \n public readonly length: number,\n public readonly info: string, \n private fixstr: string, private what: string){}\n get fixes(): readonly FixSuggestion[] {\n let [pos, what, fixstr] = [this.position, this.what, this.fixstr];\n return [{\n get info() { return fixstr; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos) \n ? cursor \n : cursor + what.length;\n return [src.substring(0, pos) + what + src.substring(pos), 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 position: number, \n public readonly length: number,\n public readonly info: string, private fixstr: string){}\n get fixes(): readonly FixSuggestion[] {\n let [pos, len, fixstr] = [this.position, this.length, this.fixstr];\n return [{\n get info() { return fixstr; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos + len && cursor >= pos) \n ? pos \n : cursor - len;\n return [src.substring(0, pos) + src.substring(pos + len), newCursor];\n }\n }];\n }\n}\n\nexport class ExpectedMessage implements Message {\n constructor(\n public readonly position: number,\n private what: string) {}\n readonly code = 1;\n readonly severity = MessageSeverity.Error;\n get length(): number { return this.what.length; }\n get info(): string { return `expected '${this.what}'` }\n get fixes(): readonly FixSuggestion[] {\n return [];\n }\n}\n\nexport class UnknownModifierMessage implements Message {\n constructor(\n public readonly position: number, \n public readonly length: number) {}\n readonly code = 2;\n readonly severity = MessageSeverity.Error;\n readonly info = `unknown modifier; did you forget to escape it?`;\n get fixes(): readonly FixSuggestion[] {\n let [pos, len] = [this.position, this.length];\n return [{\n get info() { return 'this is not a modifier -- escape it'; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos) \n ? cursor \n : cursor + 1;\n return [src.substring(0, pos) + '\\\\' + src.substring(pos), newCursor];\n }\n }];\n }\n}\n\nexport class UnclosedInlineModifierMessage implements Message {\n constructor(\n public readonly position: number,\n private what: string) {}\n readonly code = 3;\n readonly severity = MessageSeverity.Error;\n readonly length = 0;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `unclosed inline modifier ${this.what}'` }\n}\n\nexport class ArgumentsTooFewMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private expected?: number) {}\n readonly code = 4;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `too few argument(s)` \n + (this.expected === undefined ? '' : `, ${this.expected} expected`) }\n}\n\nexport class ArgumentsTooManyMessage extends RemoveThingMessage {\n constructor(pos: number, len: number, expected?: number) {\n super(5, MessageSeverity.Warning, pos, len, \n 'too many arguments' + (expected === undefined ? '' : `, ${expected} expected`), \n 'remove them');\n }\n}\n\nexport class InvalidArgumentMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private what?: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `invalid argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class InlineDefinitonInvalidEntityMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number) {}\n readonly code = 7;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `Invalid entity in inline modifier definition` }\n}\n\nexport class ReachedRecursionLimitMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private limit: number,\n private what: string) {}\n readonly code = 8;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\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 position: number,\n public readonly length: number) {}\n readonly code = 9;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `[.slot] used outside a block definition` }\n}\n\n// warnings\n\nexport class UnnecessaryNewlineMessage extends RemoveThingMessage {\n constructor(pos: number, len: number) {\n super(1, MessageSeverity.Warning, pos, len, \n 'more than one newlines have the same effect as one', \n 'remove the redundant newlines');\n }\n}\n\nexport class NewBlockShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(pos: number) {\n super(2, MessageSeverity.Warning, pos, 0, \n 'a new block should begin in a new line to avoid confusion', \n 'add a line break', '\\n');\n }\n}\n\nexport class ContentShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(pos: number) {\n super(3, MessageSeverity.Warning, pos, 0, \n 'the content should begin in a new line to avoid confusion', \n 'add a line break', '\\n');\n }\n}\n\nexport class NameAlreadyDefinedMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private what: string) {}\n readonly code = 4;\n readonly severity = MessageSeverity.Warning;\n readonly fixes: readonly FixSuggestion[] = []\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 position: number,\n public readonly length: number,\n private what: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Warning;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `variable is undefined, will expand to empty string: ${this.what}` }\n}","import { debug } from \"./debug\";\nimport { Document, Message, MessageSeverity, DocumentNode, PositionRange, ArgumentEntity, ModifierArgument, NodeType } from \"./interface\";\nimport { ReferredMessage } from \"./messages\";\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: Map<string, T>;\n \n constructor(from: NameManager<T> | undefined) {\n this.array = [...from?.array ?? []];\n this.data = new Map(from?.data);\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 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 function cloneNode(node: DocumentNode, referring?: PositionRange): DocumentNode {\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n start: node.start,\n end: node.end,\n type: node.type as any,\n mod: node.mod,\n state: undefined,\n head: structuredClone(node.head),\n arguments: structuredClone(node.arguments),\n content: node.content.map((x) => cloneNode(x, referring) as any),\n expansion: node.expansion ? cloneNodes(node.expansion) as any : undefined\n };\n case NodeType.Root:\n case NodeType.Paragraph:\n return {\n type: node.type as any,\n start: node.start,\n end: node.end,\n content: node.content.map((x) => cloneNode(x) 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(nodes: DocumentNode[]): DocumentNode[] {\n return nodes.map((x) => cloneNode(x));\n}\n\nexport function stripDocument(doc: Document) {\n function stripNode(node: DocumentNode): DocumentNode[] {\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 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 doc.root = stripNode(doc.root)[0] as any;\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}:${debugPrintArgument(node.arg)}>`;\n default:\n return debug.never(node);\n }\n}\n\nexport function debugPrintArgument(arg: ModifierArgument): string {\n return arg.content.map(debugPrintArgEntity).join('');\n}\n\nexport function debugPrintNode(node: DocumentNode, prefix = '') {\n let result = `<${node.type}@${node.start}`;\n switch (node.type) {\n case NodeType.Root:\n case NodeType.Paragraph:\n const content = debugPrintNodes(node.content, prefix);\n if (content.length > 0)\n result += `>\\n${content}\\n${prefix}</${node.type}@${node.end}>`;\n else result += `-${node.end} />`;\n break;\n case NodeType.Escaped:\n case NodeType.Preformatted:\n result += `>\\n${prefix} ${node.content}\\n${prefix}</${node.type}@${node.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.start}-${x.end}=${debugPrintArgument(x)}`).join('')\n if (node.content.length > 0) {\n result += ` id=${node.mod.name}${args}>\\n` + debugPrintNodes(node.content, prefix) + `\\n${prefix}</${node.type}@${node.end}>`;\n } else result += `-${node.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\nexport function debugPrintNodes(content: DocumentNode[], 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\nexport function debugDumpDocument(doc: Document, source: string): string {\n const lines = linePositions(source);\n\n function pos2lc(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 function dumpMsg(m: Message) {\n let result = `at ${pos2lc(m.position)}, len ${m.length}: ${MessageSeverity[m.severity]}[${m.code}]: ${m.info}`;\n while (m instanceof ReferredMessage) {\n m = m.original;\n result += `\\n---> original at: ${pos2lc(m.position)}, len ${m.length}`\n }\n return result;\n }\n\n let root = debugPrintNode(doc.root);\n let msgs = doc.messages.map(dumpMsg).join('\\n');\n return `${msgs}\\n${root}`;\n}","\nimport { assert, NameManager } from \"./util\"\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 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 // returns null if encountered EOF before str\n acceptUntil(str: string): string | null\n}\n\nexport enum MessageSeverity {\n Info,\n Warning,\n Error\n}\n\n// Fixes are optional language-server features\nexport type FixSuggestion = {\n info: string,\n apply(src: string, cursor: number): [out_src: string, new_cursor: number]\n}\n\nexport type Message = {\n readonly severity: MessageSeverity,\n readonly position: number,\n readonly length: number,\n readonly info: string,\n readonly code: number,\n readonly fixes: readonly FixSuggestion[]\n}\n\nexport type PositionRange = {\n start: number,\n end: 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 = PositionRange & {\n type: NodeType.Paragraph,\n content: InlineEntity[]\n};\n\nexport type PreNode = PositionRange & {\n type: NodeType.Preformatted,\n content: PositionRange & {text: string}\n};\n\nexport type TextNode = PositionRange & {\n type: NodeType.Text,\n content: string\n};\n\nexport type EscapedNode = PositionRange & {\n type: NodeType.Escaped,\n content: string\n}\n\nexport type SystemModifierNode<TState> = PositionRange & {\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: never[]\n};\n\nexport type BlockModifierNode<TState> = PositionRange & {\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = PositionRange & {\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type RootNode = PositionRange & {\n type: NodeType.Root\n content: BlockEntity[]\n}\n\nexport type ModifierNode = \n BlockModifierNode<any> | InlineModifierNode<any> | SystemModifierNode<any>;\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 = PositionRange & {\n type: NodeType.Interpolation,\n definition: ArgumentInterpolatorDefinition,\n arg: ModifierArgument\n}\n\nexport type ModifierArgument = PositionRange & {\n content: ArgumentEntity[]\n}\n\nexport type ArgumentEntity = TextNode | EscapedNode | InterpolationNode;\n\nexport enum ModifierFlags {\n Normal = 0,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted = 1,\n /** No content slot */\n Marker = 2\n}\n\nclass ModifierBase<TNode, TEntity> {\n constructor(\n public readonly name: string, \n public readonly flags: ModifierFlags = ModifierFlags.Normal,\n args?: Partial<ModifierBase<TNode, TEntity>>) \n {\n if (args) Object.assign(this, args);\n }\n\n delayContentExpansion = false;\n alwaysTryExpand = false;\n\n beforeParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n afterParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n beforeProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\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 public expand: (content: string, cxt: ParseContext) => string) \n {}\n}\n\nexport type BlockInstantiationData = {\n mod: BlockModifierDefinition<any>,\n slotContent: BlockEntity[],\n args: Map<string, string>\n}\n\nexport type InlineInstantiationData = {\n mod: InlineModifierDefinition<any>,\n slotContent: InlineEntity[],\n args: Map<string, string>\n}\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 {\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 #evalEntity(e: ArgumentEntity): string {\n switch (e.type) {\n case NodeType.Text:\n case NodeType.Escaped:\n return e.content;\n case NodeType.Interpolation:\n const inner = this.evaluateArgument(e.arg);\n return e.definition.expand(inner, this);\n default:\n assert(false);\n }\n }\n\n evaluateArgument(arg: ModifierArgument): string {\n return arg.content.map((x) => this.#evalEntity(x)).join('');\n }\n}\n\nexport class Document {\n constructor(\n public root: RootNode,\n public context: ParseContext,\n public messages: Message[]) {};\n}\nexport class Configuration {\n initializers: ((cxt: ParseContext) => void)[] = [];\n blockModifiers: NameManager<BlockModifierDefinition<any>>;\n inlineModifiers: NameManager<InlineModifierDefinition<any>>;\n systemModifiers: NameManager<SystemModifierDefinition<any>>;\n argumentInterpolators: NameManager<ArgumentInterpolatorDefinition>;\n reparseDepthLimit = 10;\n \n constructor(from?: Configuration) {\n this.blockModifiers = new NameManager(from?.blockModifiers);\n this.inlineModifiers = new NameManager(from?.inlineModifiers);\n this.systemModifiers = new NameManager(from?.systemModifiers);\n this.argumentInterpolators = new NameManager(from?.argumentInterpolators);\n if (from) {\n this.initializers = [...from.initializers];\n this.reparseDepthLimit = from.reparseDepthLimit;\n }\n }\n}","import { Scanner } from \"./interface\";\n\nexport class SimpleScanner implements Scanner {\n private pos = 0;\n constructor(private src: string) {}\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 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 acceptUntil(str: string): string | null {\n let start = this.pos;\n while (!this.isEOF()) {\n if (this.peek(str)) {\n let result = this.src.slice(start, this.pos);\n return result;\n }\n this.pos++;\n }\n return null;\n }\n}","import { debug } from \"./debug\";\nimport { BlockEntity, BlockModifierDefinition, BlockModifierNode, Configuration, Document, EscapedNode, InlineEntity, InlineModifierDefinition, InlineModifierNode, Message, ModifierArgument, ModifierFlags, ParagraphNode, ParseContext, PositionRange, PreNode, RootNode, Scanner, ArgumentEntity, ArgumentInterpolatorDefinition, ModifierNode, SystemModifierDefinition, SystemModifierNode, NodeType } from \"./interface\";\nimport { ContentShouldBeOnNewlineMessage, ExpectedMessage, NewBlockShouldBeOnNewlineMessage, ReachedRecursionLimitMessage as ReachedReparseLimitMessage, ReferredMessage, UnclosedInlineModifierMessage, UnknownModifierMessage, UnnecessaryNewlineMessage } from \"./messages\";\nimport { _Def } from \"./typing-helper\";\nimport { assert, debugPrintNodes, has, 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', ModifierFlags.Normal),\n [NodeType.InlineModifier]: new InlineModifierDefinition('UNKNOWN', ModifierFlags.Normal),\n [NodeType.SystemModifier]: new SystemModifierDefinition('UNKNOWN', ModifierFlags.Normal)\n};\n\ntype NodeWithBlockContent = \n RootNode | BlockModifierNode<unknown> | SystemModifierNode<unknown>;\ntype NodeWithInlineContent = \n InlineModifierNode<unknown> | ParagraphNode;\n\nclass EmitEnvironment {\n public root: RootNode = {type: NodeType.Root, start: 0, end: -1, content: []};\n public messages: Message[] = [];\n private blockStack: NodeWithBlockContent[] = [this.root];\n private inlineStack: NodeWithInlineContent[] = [];\n private referringStack: PositionRange[] = [];\n\n constructor(private scanner: Scanner) {}\n\n message(...m: Message[]) {\n const referringReverse = [...this.referringStack].reverse();\n for (let msg of m) {\n for (const range of referringReverse)\n msg = new ReferredMessage(msg, range.start, range.end - range.start);\n this.messages.push(msg);\n debug.trace('issued msg', msg.code, msg.info);\n }\n }\n\n pushReferring(start: number, end: number) {\n this.referringStack.push({start, end});\n }\n\n popReferring() {\n assert(this.referringStack.length > 0);\n this.referringStack.pop();\n }\n\n addBlockNode(n: BlockEntity) {\n assert(this.blockStack.length > 0);\n this.blockStack.at(-1)!.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.end = this.scanner.position();\n } else content.push({\n type: NodeType.Text,\n start: this.scanner.position() - str.length,\n end: this.scanner.position(),\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 >= 2);\n const node = this.blockStack.pop()!;\n node.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.end = this.scanner.position();\n }\n}\n\nclass Parser {\n private emit: EmitEnvironment;\n private cxt: ParseContext;\n private delayDepth = 0;\n private groupDepth = 0;\n\n constructor(private scanner: Scanner, config: Configuration) {\n this.emit = new EmitEnvironment(scanner);\n this.cxt = new ParseContext(config);\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 #expand(node: ModifierNode, depth = 0) {\n if (node.expansion !== undefined) {\n debug.trace('already expanded, skipping:', node.mod.name);\n return true;\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 (node.content.length > 0 && 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.mod.delayContentExpansion) this.delayDepth++;\n this.#reparse(node.content, depth);\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 }\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 return true;\n } else if (node.expansion.length > 0) {\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n debug.trace(() => '-->\\n' + debugPrintNodes(node.expansion!, ' '));\n } else {\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n }\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 this.emit.pushReferring(node.start, node.end);\n let ok = this.#reparse(expansion, depth);\n this.emit.popReferring();\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(new ReachedReparseLimitMessage(\n node.start, node.end - node.start, 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_OR_NEWLINES() {\n while (this.scanner.acceptWhitespaceChar() !== null\n || this.scanner.accept('\\n')) {}\n }\n\n private SHOULD_BE_A_NEWLINE() {\n while (this.scanner.acceptWhitespaceChar() !== null) { }\n if (!this.scanner.accept('\\n')) this.emit.message(\n new ContentShouldBeOnNewlineMessage(this.scanner.position()));\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(start, end - start));\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 // simple paragraph(s)\n this.MAYBE_GROUPED_PARAGRAPH();\n }\n\n private MODIFIER<Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>(type: Type) {\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 const args = this.scanner.acceptUntil(MODIFIER_CLOSE_SIGN);\n if (args === null) this.emit.message(\n new ExpectedMessage(this.scanner.position(), MODIFIER_CLOSE_SIGN));\n this.emit.message(\n new UnknownModifierMessage(posStart, this.scanner.position() - posStart));\n }\n const args = this.ARGUMENTS();\n debug.trace(`PARSE ${type} modifier:`, mod.name);\n\n const endsign = this.scanner.accept(MODIFIER_END_SIGN);\n const flagMarker = has(mod.flags, ModifierFlags.Marker);\n const isMarker = flagMarker || endsign;\n if (!this.scanner.accept(MODIFIER_CLOSE_SIGN))\n this.emit.message(new ExpectedMessage(\n this.scanner.position(), MODIFIER_CLOSE_SIGN));\n\n const node: ModifierNode = {\n type: type as any, \n mod: mod as any,\n head: {start: posStart, end: this.scanner.position()},\n arguments: args,\n start: posStart,\n end: -1,\n content: [],\n expansion: undefined\n };\n\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 this.emit.startInline(node as any);\n const entity = has(mod.flags, ModifierFlags.Preformatted)\n ? this.PREFORMATTED_INLINE_ENTITY.bind(this)\n : this.INLINE_ENTITY.bind(this);\n while (true) {\n if (this.scanner.accept(MODIFIER_INLINE_END_TAG)) break;\n if (this.scanner.isEOF() || !(ok = entity())) {\n this.emit.message(new UnclosedInlineModifierMessage(\n this.scanner.position(), mod.name));\n break;\n }\n }\n this.emit.endInline();\n } else {\n this.emit.startBlock(node as any);\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n if (!this.scanner.isEOF()) {\n if (has(mod.flags, ModifierFlags.Preformatted))\n this.PRE_PARAGRAPH();\n else\n this.BLOCK_ENTITY();\n }\n this.emit.endBlock();\n }\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 // 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(new ExpectedMessage(\n this.scanner.position(), 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 start: posStart,\n end: this.scanner.position(),\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(new ExpectedMessage(\n this.scanner.position(), GROUP_END))\n } else {\n this.PARAGRAPH();\n }\n }\n\n private PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const node: ParagraphNode = {\n type: NodeType.Paragraph,\n start: this.scanner.position(),\n end: -1,\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 debug.trace('PARSE para end');\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_BLOCK_OPEN)) \n {\n this.emit.message(new NewBlockShouldBeOnNewlineMessage(this.scanner.position()))\n return false;\n }\n if (this.scanner.peek(MODIFIER_INLINE_OPEN)) {\n return this.MODIFIER(NodeType.InlineModifier);\n }\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN)) {\n return false;\n }\n\n // TODO: don't know if this is enough\n if (this.scanner.accept('\\\\')) {\n if (this.scanner.isEOF()) {\n this.emit.addString('\\\\');\n return true;\n }\n const node: EscapedNode = {\n type: NodeType.Escaped,\n start: this.scanner.position() - 1,\n content: this.scanner.acceptChar(),\n end: this.scanner.position()\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 while (this.scanner.acceptWhitespaceChar() !== null) {}\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)\n || this.scanner.peek(MODIFIER_SYSTEM_OPEN)\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 private ARGUMENT_CONTENT(end?: string): [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.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text, \n end, start: end - s.length,\n content: s\n });\n }\n };\n\n while (true) {\n if (end !== undefined && this.scanner.accept(end)) {\n debug.trace('found end', end);\n break;\n }\n if (this.scanner.accept(':')) {\n ok = (end === undefined);\n break;\n }\n if (this.scanner.peek(MODIFIER_END_SIGN)\n || this.scanner.peek(MODIFIER_CLOSE_SIGN)\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 start: posEnd - 2, end: posEnd\n });\n continue;\n }\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, arg: inner,\n start: posEnd - 2, end: posEnd\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(posEnd, 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 start: posStart, end: 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, config: Configuration) {\n return new Parser(scanner, config).parse();\n}","import { debug } from \"../debug\";\nimport { ParseContext, ModifierNode, BlockModifierDefinition, InlineModifierDefinition, ModifierFlags, NodeType } from \"../interface\";\nimport { ArgumentsTooFewMessage, ArgumentsTooManyMessage } from \"../messages\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { debugPrintNodes, cloneNodes, assert } from \"../util\";\n\nexport const builtins = Symbol();\ndeclare module '../interface' {\n export interface ParseContextStoreDefinitions {\n [builtins]?: {\n blockSlotDelayedStack: string[];\n inlineSlotDelayedStack: string[];\n blockSlotData: [string, BlockInstantiationData][];\n inlineSlotData: [string, InlineInstantiationData][];\n };\n }\n}\n\nexport function initParseContext(cxt: ParseContext) {\n cxt.init(builtins, {\n blockSlotDelayedStack: [],\n inlineSlotDelayedStack: [],\n blockSlotData: [],\n inlineSlotData: []\n });\n}\n\nexport function checkArgumentLength(node: ModifierNode, n: number) {\n if (node.arguments.length < n)\n return new ArgumentsTooFewMessage(node.head.end - 1, 0, n);\n if (node.arguments.length > n) {\n const start = node.arguments[n].start - 1;\n return new ArgumentsTooManyMessage(start, node.head.end - start, n);\n }\n return null;\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, argNames: string[], slotName: string, content: _Ent<T>[])\n{\n debug.info(`registered custom ${type} modifier:`, name);\n debug.info('args:', argNames, `with ${slotName == '' ? 'no slot name' : 'slot name: ' + slotName}`);\n debug.trace(() => 'content is\\n' + debugPrintNodes(content));\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<{ ok: boolean; }>(name, ModifierFlags.Normal)\n : new InlineModifierDefinition<{ ok: boolean; }>(name, ModifierFlags.Normal)\n ) as _Def<T, { ok: boolean; }>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.delayContentExpansion = true;\n mod.prepareExpand = (node: ModifierNode, cxt: ParseContext) => {\n const check = checkArgumentLength(node, argNames.length);\n if (check) return [check];\n node.state = { ok: true };\n return [];\n };\n mod.expand = (node: ModifierNode, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const contentClone = cloneNodes(content) as any[];\n return contentClone;\n };\n mod.beforeProcessExpansion = (node: ModifierNode, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const args = new Map(\n node.arguments.map((x, i) => [argNames[i], cxt.evaluateArgument(x)]));\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n data.push([slotName, { mod: mod as any, args, slotContent: node.content as any }]);\n debug.trace(`pushed ${type} slot data for`, name,\n slotName == '' ? '(unnamed)' : `= ${slotName}`);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n const pop = data.pop();\n assert(pop !== undefined && pop[0] == slotName);\n debug.trace(`popped ${type} slot data for`, name,\n slotName == '' ? '(unnamed)' : `= ${slotName}`);\n return [];\n };\n return mod;\n}\n","import { debug } from \"../debug\";\nimport { SystemModifierDefinition, ModifierFlags, Message, NodeType } from \"../interface\";\nimport { ArgumentsTooFewMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier } from \"./internal\";\n\nexport const DefineBlockMod = new SystemModifierDefinition<{\n name: string;\n slotName: string;\n args: string[];\n}>('define-block', ModifierFlags.Normal, {\n // .define-block:name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt) {\n if (node.arguments.length == 0)\n return [new ArgumentsTooFewMessage(node.head.end - 1, 0)];\n\n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = cxt.evaluateArgument(name);\n if (cxt.config.blockModifiers.has(nameValue))\n msgs.push(new NameAlreadyDefinedMessage(\n node.start, name.end - name.start, nameValue));\n\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = cxt.evaluateArgument(node.arguments.at(-1)!);\n slotName = /^\\(.+\\)$/.test(last) ? last.substring(1, last.length - 1) : '';\n }\n const args = node.arguments.slice(1, (slotName !== '')\n ? node.arguments.length - 1 : undefined).map((x) => cxt.evaluateArgument(x));\n node.state = { name: nameValue, slotName, args };\n\n const store = cxt.get(builtins)!;\n store.blockSlotDelayedStack.push(node.state.slotName);\n debug.trace('entering block definition:', node.state.name);\n return msgs;\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n assert(store.blockSlotDelayedStack.pop() == node.state.slotName);\n debug.trace('leaving block definition', node.state.name);\n return [];\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state) {\n if (cxt.config.blockModifiers.has(node.state.name))\n cxt.config.blockModifiers.remove(node.state.name);\n cxt.config.blockModifiers.add(\n customModifier(NodeType.BlockModifier, node.state.name, node.state.args,\n node.state.slotName, node.content));\n }\n return [];\n }\n});\n","import { debug } from \"../debug\";\nimport { SystemModifierDefinition, InlineEntity, ModifierFlags, Message, NodeType } from \"../interface\";\nimport { ArgumentsTooFewMessage, NameAlreadyDefinedMessage, InlineDefinitonInvalidEntityMessage } from \"../messages\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier } from \"./internal\";\n\nexport const DefineInlineMod = new SystemModifierDefinition<{\n name: string;\n slotName: string;\n args: string[];\n definition?: InlineEntity[];\n}>('define-inline', ModifierFlags.Normal, {\n // .define-inline name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt) {\n if (node.arguments.length == 0)\n return [new ArgumentsTooFewMessage(node.head.end - 1, 0)];\n const msgs: Message[] = [];\n const name = node.arguments[0];\n const nameValue = cxt.evaluateArgument(name);\n if (cxt.config.inlineModifiers.has(nameValue))\n msgs.push(new NameAlreadyDefinedMessage(\n node.start, name.end - name.start, nameValue));\n\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = cxt.evaluateArgument(node.arguments.at(-1)!);\n slotName = /^\\(.+\\)$/.test(last) ? last.substring(1, last.length - 1) : '';\n }\n const args = node.arguments.slice(1, (slotName !== '')\n ? node.arguments.length - 1 : undefined).map((x) => cxt.evaluateArgument(x));\n node.state = { name: nameValue, slotName, args };\n\n const store = cxt.get(builtins)!;\n store.inlineSlotDelayedStack.push(node.state.slotName);\n debug.trace('entering inline definition:', node.state.name);\n return msgs;\n },\n afterParseContent(node, cxt) {\n if (!node.state) return [];\n const store = cxt.get(builtins)!;\n assert(store.inlineSlotDelayedStack.pop() == node.state.slotName);\n debug.trace('leaving inline definition', node.state.name);\n return [];\n },\n prepareExpand(node, cxt) {\n if (!node.state) return [];\n const 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 InlineDefinitonInvalidEntityMessage(n.start, n.end - n.start));\n break;\n case NodeType.SystemModifier:\n lastIsParagraph = false;\n concat.push(n);\n break;\n default:\n debug.never(n);\n }\n }\n node.state.definition = concat;\n return msgs;\n },\n expand(node, cxt, immediate) {\n if (!immediate) return undefined;\n if (node.state) {\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, node.state.name, node.state.args,\n node.state.slotName, node.state.definition!));\n }\n return [];\n },\n});\n","import { debug } from \"../debug\";\nimport { BlockModifierDefinition, ModifierFlags, InlineModifierDefinition, ModifierNode, ParseContext, NodeType } from \"../interface\";\nimport { SlotUsedOutsideDefinitionMessage, ArgumentsTooManyMessage, InvalidArgumentMessage } from \"../messages\";\nimport { _Def, _InstData } from \"../typing-helper\";\nimport { cloneNodes } from \"../util\";\nimport { builtins } from \"./internal\";\n\nfunction slotModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(type: T): _Def<T, any> {\n type TState = {\n ok: true;\n data: [string, _InstData<T>];\n index: number;\n } | { ok: false; };\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<TState>('slot', ModifierFlags.Marker)\n : new InlineModifierDefinition<TState>('slot', ModifierFlags.Marker)\n ) as _Def<T, TState>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.alwaysTryExpand = true;\n mod.prepareExpand = (node: ModifierNode, cxt: ParseContext, immediate: boolean) => {\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n const id = node.arguments.length == 1 ? cxt.evaluateArgument(node.arguments[0]) : '';\n if (data.length == 0) {\n if (immediate) {\n node.state = { ok: false };\n return [new SlotUsedOutsideDefinitionMessage(node.start, node.head.end - node.start)];\n }\n return [];\n }\n if (node.arguments.length > 1) {\n if (immediate) {\n node.state = { ok: false };\n const start = node.arguments[1].start - 1;\n return [new ArgumentsTooManyMessage(start, node.head.end - start)];\n }\n return [];\n }\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n if (stack.includes(id)) {\n debug.trace('delaying', id == '' ? 'unnamed slot' : 'slot: ' + id);\n return [];\n }\n if (node.arguments.length == 0) {\n node.state = { ok: true, data: data.at(-1)!, index: data.length - 1 };\n return [];\n }\n for (let i = data.length - 1; i >= 0; i--) if (data[i][0] == id) {\n node.state = { ok: true, data: data[i], index: i };\n return [];\n }\n if (immediate) {\n node.state = { ok: false };\n const arg = node.arguments[0];\n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start, id)];\n }\n return [];\n };\n mod.expand = (node: ModifierNode, cxt: ParseContext) => {\n if (!node.state) return undefined;\n if (!node.state.ok) return [];\n return cloneNodes(node.state.data[1].slotContent) as any[];\n };\n mod.beforeProcessExpansion = (node: ModifierNode, 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[1].mod.name);\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n data.splice(node.state.index, 1);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode, 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[1].mod.name);\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n data.splice(node.state.index, 0, node.state.data);\n return [];\n };\n return mod;\n}\n\nexport const SlotBlockMod = slotModifier(NodeType.BlockModifier);\nexport const SlotInlineMod = slotModifier(NodeType.InlineModifier);","import { debug } from \"../debug\";\nimport { ParseContext, InlineModifierDefinition, ModifierFlags, ArgumentInterpolatorDefinition, SystemModifierDefinition, NodeType } from \"../interface\";\nimport { InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins, checkArgumentLength } from \"./internal\";\n\nfunction resolveId(id: string, cxt: ParseContext): string | undefined {\n const store = cxt.get(builtins)!;\n let value: string | undefined = undefined;\n for (let i = store.inlineSlotData.length - 1; i >= 0; i--) {\n const [_, data] = store.inlineSlotData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n for (let i = store.blockSlotData.length - 1; i >= 0; i--) {\n const [_, data] = store.blockSlotData[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 = new InlineModifierDefinition<{ value: string; }>('$', ModifierFlags.Marker, {\n // .$:id\n prepareExpand(node, cxt) {\n const check = checkArgumentLength(node, 1);\n if (check) return [check];\n const arg = node.arguments[0];\n const id = cxt.evaluateArgument(arg);\n if (id == '')\n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start)];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return [new UndefinedVariableMessage(arg.start, arg.end - arg.start, id)];\n node.state = { value };\n return [];\n },\n expand(node, cxt) {\n if (!node.state) return [];\n return [{ type: NodeType.Text, content: node.state.value, start: -1, end: -1 }];\n },\n});\n\nexport const GetVarInterpolator = new ArgumentInterpolatorDefinition('$(', ')',\n (content, cxt) => resolveId(content, cxt) ?? ''\n);\n\nexport const VarMod = new SystemModifierDefinition<{\n id: string; value: string;\n}>('var', ModifierFlags.Marker, {\n // .var id:value\n prepareExpand(node, cxt) {\n const check = checkArgumentLength(node, 2);\n if (check) return [check];\n const arg = node.arguments[0];\n const argValue = cxt.evaluateArgument(arg);\n if (argValue == '')\n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start)];\n node.state = {\n id: argValue,\n value: cxt.evaluateArgument(node.arguments[1])\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});","import { Configuration } from \"../interface\";\nimport { DefineBlockMod } from \"./define-block\";\nimport { DefineInlineMod } from \"./define-inline\";\nimport { initParseContext } from \"./internal\";\nimport { SlotBlockMod, SlotInlineMod } from \"./slot\";\nimport { VarMod, GetVarInlineMod, GetVarInterpolator } from \"./var\";\n\nlet basic = new Configuration();\nbasic.initializers = [initParseContext];\nbasic.systemModifiers.add(DefineBlockMod, DefineInlineMod, VarMod);\nbasic.blockModifiers.add(SlotBlockMod);\nbasic.inlineModifiers.add(SlotInlineMod, GetVarInlineMod);\nbasic.argumentInterpolators.add(GetVarInterpolator);\n\nexport const BuiltinConfiguration: Configuration = Object.freeze(basic);\n"],"mappings":"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","names":["content","MessageSeverity","NodeType","ModifierFlags","Document","Document","args","end"]}
|
|
1
|
+
{"version":3,"sources":["../src/interface.ts","../src/messages.ts","../src/util.ts","../src/debug.ts","../src/front.ts","../src/parser.ts","../src/modifier-helper.ts","../src/builtin/internal.ts","../src/builtin/define-block.ts","../src/builtin/define-inline.ts","../src/builtin/pushpop.ts","../src/builtin/slot.ts","../src/builtin/var.ts","../src/builtin/builtin.ts","../src/index.ts"],"sourcesContent":["\nimport { assert, debugDumpDocument, NameManager, ReadonlyNameManager } from \"./util\"\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 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 // returns null if encountered EOF before str\n acceptUntil(str: string): string | null\n}\n\nexport enum MessageSeverity {\n Info,\n Warning,\n Error\n}\n\n// Fixes are optional language-server features\nexport type FixSuggestion = {\n info: string,\n apply(src: string, cursor: number): [out_src: string, new_cursor: number]\n}\n\nexport type Message = {\n readonly severity: MessageSeverity,\n readonly position: number,\n readonly length: number,\n readonly info: string,\n readonly code: number,\n readonly fixes: readonly FixSuggestion[]\n}\n\nexport type PositionRange = {\n start: number,\n end: number,\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 = PositionRange & {\n type: NodeType.Paragraph,\n content: InlineEntity[]\n};\n\nexport type PreNode = PositionRange & {\n type: NodeType.Preformatted,\n content: PositionRange & {text: string}\n};\n\nexport type TextNode = PositionRange & {\n type: NodeType.Text,\n content: string\n};\n\nexport type EscapedNode = PositionRange & {\n type: NodeType.Escaped,\n content: string\n}\n\nexport type SystemModifierNode<TState> = PositionRange & {\n type: NodeType.SystemModifier,\n mod: SystemModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: never[]\n};\n\nexport type BlockModifierNode<TState> = PositionRange & {\n type: NodeType.BlockModifier,\n mod: BlockModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: BlockEntity[],\n expansion?: BlockEntity[]\n};\n\nexport type InlineModifierNode<TState> = PositionRange & {\n type: NodeType.InlineModifier,\n mod: InlineModifierDefinition<TState>,\n state?: TState,\n head: PositionRange,\n arguments: ModifierArgument[],\n content: InlineEntity[],\n expansion?: InlineEntity[]\n};\n\nexport type RootNode = PositionRange & {\n type: NodeType.Root\n content: BlockEntity[]\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 = PositionRange & {\n type: NodeType.Interpolation,\n definition: ArgumentInterpolatorDefinition,\n argument: ModifierArgument,\n expansion?: string\n}\n\nexport type ModifierArgument = PositionRange & {\n content: ArgumentEntity[]\n expansion?: string\n}\n\nexport type ArgumentEntity = TextNode | EscapedNode | InterpolationNode;\n\nexport enum ModifierFlags {\n Normal = 0,\n /** Content is preformatted: no escaping, no inner tags */\n Preformatted = 1,\n /** No content slot */\n Marker = 2\n}\n\nclass ModifierBase<TNode, TEntity> {\n constructor(\n public readonly name: string, \n public readonly flags: ModifierFlags = ModifierFlags.Normal,\n args?: Partial<ModifierBase<TNode, TEntity>>) \n {\n if (args) Object.assign(this, args);\n }\n\n delayContentExpansion = false;\n alwaysTryExpand = false;\n\n beforeParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n afterParseContent?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\n\n beforeProcessExpansion?: (node: TNode, cxt: ParseContext, immediate: boolean) => Message[];\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\nexport type BlockInstantiationData = {\n mod: BlockModifierDefinition<any>,\n slotContent: BlockEntity[],\n args: Map<string, string>\n}\n\nexport type InlineInstantiationData = {\n mod: InlineModifierDefinition<any>,\n slotContent: InlineEntity[],\n args: Map<string, string>\n}\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 {\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 root: RootNode,\n public context: ParseContext,\n public messages: Message[]) {};\n \n debugPrint(source: string) {\n return debugDumpDocument(this, source)\n }\n}\n\nexport interface ReadonlyConfiguration {\n initializers: readonly ((cxt: ParseContext) => void)[];\n blockModifiers: ReadonlyNameManager<BlockModifierDefinition<any>>;\n inlineModifiers: ReadonlyNameManager<InlineModifierDefinition<any>>;\n systemModifiers: ReadonlyNameManager<SystemModifierDefinition<any>>;\n argumentInterpolators: ReadonlyNameManager<ArgumentInterpolatorDefinition>;\n reparseDepthLimit: number;\n}\n\nexport class Configuration {\n initializers: ((cxt: ParseContext) => void)[] = [];\n blockModifiers: NameManager<BlockModifierDefinition<any>>;\n inlineModifiers: NameManager<InlineModifierDefinition<any>>;\n systemModifiers: NameManager<SystemModifierDefinition<any>>;\n argumentInterpolators: NameManager<ArgumentInterpolatorDefinition>;\n reparseDepthLimit = 10;\n \n constructor(from?: ReadonlyConfiguration) {\n this.blockModifiers = new NameManager(from?.blockModifiers);\n this.inlineModifiers = new NameManager(from?.inlineModifiers);\n this.systemModifiers = new NameManager(from?.systemModifiers);\n this.argumentInterpolators = new NameManager(from?.argumentInterpolators);\n if (from) {\n this.initializers = [...from.initializers];\n this.reparseDepthLimit = from.reparseDepthLimit;\n }\n }\n}","import { Message, MessageSeverity, FixSuggestion } from \"./interface\";\n\nexport class ReferredMessage implements Message {\n constructor(\n public readonly original: Message,\n public readonly position: number, \n public readonly length: number) {}\n get severity() { return this.original.severity; }\n get info() { return this.original.info; }\n get code() { return this.original.code; }\n readonly fixes: readonly FixSuggestion[] = [];\n}\n\nclass AddThingMessage implements Message {\n constructor(\n public readonly code: number,\n public readonly severity: MessageSeverity, \n public readonly position: number, \n public readonly length: number,\n public readonly info: string, \n private fixstr: string, private what: string){}\n get fixes(): readonly FixSuggestion[] {\n let [pos, what, fixstr] = [this.position, this.what, this.fixstr];\n return [{\n get info() { return fixstr; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos) \n ? cursor \n : cursor + what.length;\n return [src.substring(0, pos) + what + src.substring(pos), 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 position: number, \n public readonly length: number,\n public readonly info: string, private fixstr: string){}\n get fixes(): readonly FixSuggestion[] {\n let [pos, len, fixstr] = [this.position, this.length, this.fixstr];\n return [{\n get info() { return fixstr; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos + len && cursor >= pos) \n ? pos \n : cursor - len;\n return [src.substring(0, pos) + src.substring(pos + len), newCursor];\n }\n }];\n }\n}\n\nexport class ExpectedMessage implements Message {\n constructor(\n public readonly position: number,\n private what: string) {}\n readonly code = 1;\n readonly severity = MessageSeverity.Error;\n get length(): number { return 0; }\n get info(): string { return `expected '${this.what}'` }\n get fixes(): readonly FixSuggestion[] {\n return [];\n }\n}\n\nexport class UnknownModifierMessage implements Message {\n constructor(\n public readonly position: number, \n public readonly length: number,\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 [pos, len] = [this.position, this.length];\n return [{\n get info() { return 'this is not a modifier -- escape it'; },\n apply(src: string, cursor: number) {\n let newCursor = (cursor < pos) \n ? cursor \n : cursor + 1;\n return [src.substring(0, pos) + '\\\\' + src.substring(pos), newCursor];\n }\n }];\n }\n}\n\nexport class UnclosedInlineModifierMessage implements Message {\n constructor(\n public readonly position: number,\n private what: string) {}\n readonly code = 3;\n readonly severity = MessageSeverity.Error;\n readonly length = 0;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `unclosed inline modifier ${this.what}'` }\n}\n\nexport class ArgumentCountMismatchMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\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 readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `argument count mismatch` + this.msg; }\n}\n\nexport class CannotExpandArgumentMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private what?: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\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 position: number,\n public readonly length: number,\n private what?: string) {}\n readonly code = 6;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `invalid argument` + (this.what === undefined ? '' : `: ${this.what}`) }\n}\n\nexport class InlineDefinitonInvalidEntityMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number) {}\n readonly code = 7;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `Invalid entity in inline modifier definition` }\n}\n\nexport class ReachedRecursionLimitMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private limit: number,\n private what: string) {}\n readonly code = 8;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\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 position: number,\n public readonly length: number) {}\n readonly code = 9;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `slot used outside a definition` }\n}\n\nexport class CannotPopNotationMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number) {}\n readonly code = 10;\n readonly severity = MessageSeverity.Error;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `cannot pop notation` }\n}\n\n// warnings\n\nexport class UnnecessaryNewlineMessage extends RemoveThingMessage {\n constructor(pos: number, len: number) {\n super(1, MessageSeverity.Warning, pos, len, \n 'more than one newlines have the same effect as one', \n 'remove the redundant newlines');\n }\n}\n\nexport class NewBlockShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(pos: number) {\n super(2, MessageSeverity.Warning, pos, 0, \n 'a new block should begin in a new line to avoid confusion', \n 'add a line break', '\\n');\n }\n}\n\nexport class ContentShouldBeOnNewlineMessage extends AddThingMessage {\n constructor(pos: number) {\n super(3, MessageSeverity.Warning, pos, 0, \n 'the content should begin in a new line to avoid confusion', \n 'add a line break', '\\n');\n }\n}\n\nexport class NameAlreadyDefinedMessage implements Message {\n constructor(\n public readonly position: number,\n public readonly length: number,\n private what: string) {}\n readonly code = 4;\n readonly severity = MessageSeverity.Warning;\n readonly fixes: readonly FixSuggestion[] = []\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 position: number,\n public readonly length: number,\n private what: string) {}\n readonly code = 5;\n readonly severity = MessageSeverity.Warning;\n readonly fixes: readonly FixSuggestion[] = []\n get info(): string { return `variable is undefined, will expand to empty string: ${this.what}` }\n}","import { debug } from \"./debug\";\nimport { Document, Message, MessageSeverity, DocumentNode, PositionRange, ArgumentEntity, ModifierArgument, NodeType } from \"./interface\";\nimport { ReferredMessage } from \"./messages\";\n\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[]) {\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 assert(Array.isArray(from));\n this.array = from.map((x) => ({k: x.name, v: x}));\n this.array.sort((a, b) => b.k.length - a.k.length);\n this.data = new Map(from.map((x) => [x.name, x]));\n }\n }\n\n toArray(): readonly T[] {\n return this.array.map(({v}) => v);\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\nconst cloneArgument = (arg: ModifierArgument): ModifierArgument => ({\n start: arg.start, end: arg.end,\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 start: ent.start,\n end: ent.end,\n definition: ent.definition,\n argument: cloneArgument(ent.argument),\n expansion: ent.expansion\n };\n default:\n return debug.never(ent);\n }\n })\n});\n\n\nexport function cloneNode(node: DocumentNode, referring?: PositionRange): DocumentNode {\n switch (node.type) {\n case NodeType.BlockModifier:\n case NodeType.InlineModifier:\n case NodeType.SystemModifier:\n return {\n start: node.start,\n end: node.end,\n type: node.type as any,\n mod: node.mod,\n state: undefined,\n head: structuredClone(node.head),\n arguments: node.arguments.map(cloneArgument),\n content: node.content.map((x) => cloneNode(x, referring) as any),\n expansion: node.expansion ? cloneNodes(node.expansion) as any : undefined\n };\n case NodeType.Root:\n case NodeType.Paragraph:\n return {\n type: node.type as any,\n start: node.start,\n end: node.end,\n content: node.content.map((x) => cloneNode(x) 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(nodes: DocumentNode[]): DocumentNode[] {\n return nodes.map((x) => cloneNode(x));\n}\n\nexport function stripDocument(doc: Document) {\n function stripNode(node: DocumentNode): DocumentNode[] {\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 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 doc.root = stripNode(doc.root)[0] as any;\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}:${debugPrintArgument(node.argument)}${node.expansion ? `=${node.expansion}` : ''}>`;\n default:\n return debug.never(node);\n }\n}\n\nexport function debugPrintArgument(arg: ModifierArgument): string {\n return arg.content.map(debugPrintArgEntity).join('');\n}\n\nexport function debugPrintNode(node: DocumentNode, prefix = '') {\n let result = `<${NodeType[node.type]}@${node.start}`;\n switch (node.type) {\n case NodeType.Root:\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.end}>`;\n else result += `-${node.end} />`;\n break;\n case NodeType.Escaped:\n case NodeType.Preformatted:\n result += `>\\n${prefix} ${node.content}\\n${prefix}</${NodeType[node.type]}@${node.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.start}-${x.end}=${debugPrintArgument(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.end}>`;\n } else result += `-${node.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\nexport function debugPrintNodes(content: DocumentNode[], 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\nexport function debugDumpDocument(doc: Document, source: string): string {\n const lines = linePositions(source);\n\n function pos2lc(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 function dumpMsg(m: Message) {\n let result = `at ${pos2lc(m.position)}, len ${m.length}: ${MessageSeverity[m.severity]}[${m.code}]: ${m.info}`;\n while (m instanceof ReferredMessage) {\n m = m.original;\n result += `\\n---> original at: ${pos2lc(m.position)}, len ${m.length}`\n }\n return result;\n }\n\n let root = debugPrintNode(doc.root);\n let msgs = doc.messages.map(dumpMsg).join('\\n');\n if (msgs.length > 0) msgs += '\\n';\n return `${msgs}${root}`;\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 { Scanner } from \"./interface\";\n\nexport class SimpleScanner implements Scanner {\n private pos = 0;\n constructor(private src: string) {}\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 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 acceptUntil(str: string): string | null {\n let start = this.pos;\n while (!this.isEOF()) {\n if (this.peek(str)) {\n let result = this.src.slice(start, this.pos);\n return result;\n }\n this.pos++;\n }\n return null;\n }\n}","import { debug } from \"./debug\";\nimport { BlockEntity, BlockModifierDefinition, BlockModifierNode, Configuration, Document, EscapedNode, InlineEntity, InlineModifierDefinition, InlineModifierNode, Message, ModifierArgument, ModifierFlags, ParagraphNode, ParseContext, PositionRange, PreNode, RootNode, Scanner, ArgumentEntity, ArgumentInterpolatorDefinition, ModifierNode, SystemModifierDefinition, SystemModifierNode, NodeType } from \"./interface\";\nimport { ContentShouldBeOnNewlineMessage, ExpectedMessage, NewBlockShouldBeOnNewlineMessage, ReachedRecursionLimitMessage as ReachedReparseLimitMessage, ReferredMessage, UnclosedInlineModifierMessage, UnknownModifierMessage, UnnecessaryNewlineMessage } from \"./messages\";\nimport { _Def } from \"./typing-helper\";\nimport { assert, debugPrintNodes, has, 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', ModifierFlags.Normal),\n [NodeType.InlineModifier]: new InlineModifierDefinition('UNKNOWN', ModifierFlags.Normal),\n [NodeType.SystemModifier]: new SystemModifierDefinition('UNKNOWN', ModifierFlags.Normal)\n};\n\ntype NodeWithBlockContent = \n RootNode | BlockModifierNode<unknown> | SystemModifierNode<unknown>;\ntype NodeWithInlineContent = \n InlineModifierNode<unknown> | ParagraphNode;\n\nclass EmitEnvironment {\n public root: RootNode = {type: NodeType.Root, start: 0, end: -1, content: []};\n public messages: Message[] = [];\n private blockStack: NodeWithBlockContent[] = [this.root];\n private inlineStack: NodeWithInlineContent[] = [];\n private referringStack: PositionRange[] = [];\n\n constructor(private scanner: Scanner) {}\n\n message(...m: Message[]) {\n const referringReverse = [...this.referringStack].reverse();\n for (let msg of m) {\n for (const range of referringReverse)\n msg = new ReferredMessage(msg, range.start, range.end - range.start);\n this.messages.push(msg);\n debug.trace('issued msg', msg.code, msg.info);\n }\n }\n\n pushReferring(start: number, end: number) {\n this.referringStack.push({start, end});\n }\n\n popReferring() {\n assert(this.referringStack.length > 0);\n this.referringStack.pop();\n }\n\n addBlockNode(n: BlockEntity) {\n assert(this.blockStack.length > 0);\n this.blockStack.at(-1)!.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.end = this.scanner.position();\n } else content.push({\n type: NodeType.Text,\n start: this.scanner.position() - str.length,\n end: this.scanner.position(),\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 >= 2);\n const node = this.blockStack.pop()!;\n node.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.end = this.scanner.position();\n }\n}\n\nclass Parser {\n private emit: EmitEnvironment;\n private cxt: ParseContext;\n private delayDepth = 0;\n private groupDepth = 0;\n\n constructor(private scanner: Scanner, config: Configuration) {\n this.emit = new EmitEnvironment(scanner);\n this.cxt = new ParseContext(config);\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 return true;\n } else if (node.expansion.length > 0) {\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n debug.trace(() => '-->\\n' + debugPrintNodes(node.expansion!, ' '));\n } else {\n debug.trace(`${this.delayDepth > 0 ? 'early ' : ''}expanding:`, node.mod.name);\n }\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 this.emit.pushReferring(node.start, node.end);\n let ok = this.#reparse(expansion, depth);\n this.emit.popReferring();\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(new ReachedReparseLimitMessage(\n node.start, node.end - node.start, 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_OR_NEWLINES() {\n while (this.scanner.acceptWhitespaceChar() !== null\n || this.scanner.accept('\\n')) {}\n }\n\n private SHOULD_BE_A_NEWLINE() {\n while (this.scanner.acceptWhitespaceChar() !== null) { }\n if (!this.scanner.accept('\\n')) this.emit.message(\n new ContentShouldBeOnNewlineMessage(this.scanner.position()));\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(start, end - start));\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 // simple paragraph(s)\n this.MAYBE_GROUPED_PARAGRAPH();\n }\n\n private MODIFIER<Type extends NodeType.BlockModifier | NodeType.SystemModifier | NodeType.InlineModifier>(type: Type) {\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(posStart, this.scanner.position() - 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 = has(mod.flags, ModifierFlags.Marker);\n const isMarker = flagMarker || endsign;\n if (!this.scanner.accept(MODIFIER_CLOSE_SIGN))\n this.emit.message(new ExpectedMessage(\n this.scanner.position(), MODIFIER_CLOSE_SIGN));\n\n const headEnd = this.scanner.position();\n const node: ModifierNode = {\n type: type as any, \n mod: mod as any,\n head: {start: posStart, end: headEnd},\n arguments: args,\n start: posStart, end: headEnd,\n content: [],\n expansion: undefined\n };\n\n this.#expandArguments(node);\n\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 this.emit.startInline(node as any);\n const entity = has(mod.flags, ModifierFlags.Preformatted)\n ? this.PREFORMATTED_INLINE_ENTITY.bind(this)\n : this.INLINE_ENTITY.bind(this);\n while (true) {\n if (this.scanner.accept(MODIFIER_INLINE_END_TAG)) break;\n if (this.scanner.isEOF() || !(ok = entity())) {\n this.emit.message(new UnclosedInlineModifierMessage(\n this.scanner.position(), mod.name));\n break;\n }\n }\n this.emit.endInline();\n } else {\n this.emit.startBlock(node as any);\n this.WARN_IF_MORE_NEWLINES_THAN(1);\n if (!this.scanner.isEOF()) {\n if (has(mod.flags, ModifierFlags.Preformatted))\n this.PRE_PARAGRAPH();\n else\n this.BLOCK_ENTITY();\n }\n this.emit.endBlock();\n }\n const last = node.content.at(-1);\n node.actualEnd = last?.actualEnd ?? last?.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 // 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(new ExpectedMessage(\n this.scanner.position(), 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 start: posStart,\n end: this.scanner.position(),\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(new ExpectedMessage(\n this.scanner.position(), GROUP_END))\n } else {\n this.PARAGRAPH();\n }\n }\n\n private PARAGRAPH() {\n assert(!this.scanner.isEOF());\n const node: ParagraphNode = {\n type: NodeType.Paragraph,\n start: this.scanner.position(),\n end: -1,\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.actualEnd = last?.actualEnd ?? last?.end;\n debug.trace('PARSE para end');\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_BLOCK_OPEN)) \n {\n this.emit.message(new NewBlockShouldBeOnNewlineMessage(this.scanner.position()))\n return false;\n }\n if (this.scanner.peek(MODIFIER_INLINE_OPEN)) {\n return this.MODIFIER(NodeType.InlineModifier);\n }\n if (this.scanner.peek(MODIFIER_SYSTEM_OPEN)) {\n return false;\n }\n\n // TODO: don't know if this is enough\n if (this.scanner.accept('\\\\')) {\n if (this.scanner.isEOF()) {\n this.emit.addString('\\\\');\n return true;\n }\n const node: EscapedNode = {\n type: NodeType.Escaped,\n start: this.scanner.position() - 1,\n content: this.scanner.acceptChar(),\n end: this.scanner.position()\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 while (this.scanner.acceptWhitespaceChar() !== null) {}\n if (this.scanner.peek(MODIFIER_BLOCK_OPEN)\n || this.scanner.peek(MODIFIER_SYSTEM_OPEN)\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 private ARGUMENT_CONTENT(end?: string): [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.end += s.length;\n } else {\n const end = this.scanner.position();\n content.push({\n type: NodeType.Text, \n end, start: end - s.length,\n content: s\n });\n }\n };\n\n while (true) {\n if (end !== undefined && this.scanner.accept(end))\n break;\n if (this.scanner.accept(':')) {\n ok = (end === undefined);\n break;\n }\n if (this.scanner.peek(MODIFIER_END_SIGN)\n || this.scanner.peek(MODIFIER_CLOSE_SIGN)\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 start: posEnd - 1, end: posEnd + 1\n });\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 start: beforeInterp, end: posEnd\n });\n if (!ok2) {\n this.emit.message(new ExpectedMessage(posEnd, 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 start: posStart, end: 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, config: Configuration) {\n return new Parser(scanner, config).parse();\n}","import { ModifierNode, Message } from \"./interface\";\nimport { ArgumentCountMismatchMessage, CannotExpandArgumentMessage } 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(node.head.start, node.head.end - node.head.start, 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.start, arg.end - arg.start)];\n }\n return checkArgumentLength(node, min, max);\n}\n","import { debug } from \"../debug\";\nimport { ParseContext, ModifierNode, BlockModifierDefinition, InlineModifierDefinition, ModifierFlags, NodeType } from \"../interface\";\nimport { checkArguments } from \"../modifier-helper\";\nimport { _Ent, _Def } from \"../typing-helper\";\nimport { debugPrintNodes, cloneNodes, assert } from \"../util\";\n\nexport const builtins = Symbol();\ndeclare module '../interface' {\n export interface ParseContextStoreDefinitions {\n [builtins]?: {\n blockSlotDelayedStack: string[];\n inlineSlotDelayedStack: string[];\n blockSlotData: [string, BlockInstantiationData][];\n inlineSlotData: [string, InlineInstantiationData][];\n notationStack: {\n blocks: readonly BlockModifierDefinition<unknown>[],\n inlines: readonly InlineModifierDefinition<unknown>[],\n // shorthands...\n }[];\n };\n }\n}\n\nexport function initParseContext(cxt: ParseContext) {\n cxt.init(builtins, {\n blockSlotDelayedStack: [],\n inlineSlotDelayedStack: [],\n blockSlotData: [],\n inlineSlotData: [],\n notationStack: []\n });\n}\n\nexport function customModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(\n type: T, name: string, argNames: string[], slotName: string, content: _Ent<T>[])\n{\n debug.info(`registered custom ${type} modifier:`, name);\n debug.info('args:', argNames, `with ${slotName == '' ? 'no slot name' : 'slot name: ' + slotName}`);\n debug.trace(() => 'content is\\n' + debugPrintNodes(content));\n\n type State = {\n ok: boolean,\n args: Map<string, string>\n }\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<State>(name, ModifierFlags.Normal)\n : new InlineModifierDefinition<State>(name, ModifierFlags.Normal)\n ) as _Def<T, State>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.delayContentExpansion = true;\n mod.prepareExpand = (node: ModifierNode<State>, cxt: ParseContext) => {\n let check = checkArguments(node, argNames.length);\n if (check) return check;\n node.state = { \n ok: true,\n args: new Map(node.arguments.map((x, i) => [argNames[i], x.expansion!]))\n } satisfies State;\n return [];\n };\n mod.expand = (node: ModifierNode<State>, cxt: ParseContext) => {\n if (!node.state?.ok) return [];\n const contentClone = cloneNodes(content) 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.inlineSlotData : store.blockSlotData;\n data.push([slotName, { \n mod: mod as any, args: node.state.args, \n slotContent: node.content as any \n }]);\n debug.trace(`pushed ${type} slot data for`, name,\n slotName == '' ? '(unnamed)' : `= ${slotName}`);\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.inlineSlotData : store.blockSlotData;\n const pop = data.pop();\n assert(pop !== undefined && pop[0] == slotName);\n debug.trace(`popped ${type} slot data for`, name,\n slotName == '' ? '(unnamed)' : `= ${slotName}`);\n return [];\n };\n return mod;\n}\n","import { debug } from \"../debug\";\nimport { SystemModifierDefinition, ModifierFlags, Message, NodeType } from \"../interface\";\nimport { InvalidArgumentMessage, NameAlreadyDefinedMessage } from \"../messages\";\nimport { checkArgumentLength } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier } from \"./internal\";\n\nexport const DefineBlockMod = new SystemModifierDefinition<{\n name?: string;\n slotName: string;\n args: string[];\n msgs: Message[];\n}>('define-block', ModifierFlags.Normal, {\n // .define-block:name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt) {\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\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = node.arguments.at(-1)!;\n if (last.expansion) \n slotName = /^\\(.+\\)$/.test(last.expansion) \n ? last.expansion.substring(1, last.expansion.length - 1) : '';\n else msgs.push(\n new InvalidArgumentMessage(last.start, last.end - last.start));\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.start, x.end - x.start));\n return x.expansion ?? '';\n });\n node.state = { name: nameValue, slotName, args, msgs };\n\n const store = cxt.get(builtins)!;\n store.blockSlotDelayedStack.push(node.state.slotName);\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 assert(store.blockSlotDelayedStack.pop() == node.state.slotName);\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 if (!node.state.name) \n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start)];\n if (cxt.config.blockModifiers.has(node.state.name))\n return [new NameAlreadyDefinedMessage(\n arg.start, arg.end - arg.start, node.state.name)];\n return [];\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(\n customModifier(NodeType.BlockModifier, node.state.name, node.state.args,\n node.state.slotName, node.content));\n }\n return [];\n }\n});\n","import { debug } from \"../debug\";\nimport { SystemModifierDefinition, InlineEntity, ModifierFlags, Message, NodeType } from \"../interface\";\nimport { NameAlreadyDefinedMessage, InlineDefinitonInvalidEntityMessage, InvalidArgumentMessage } from \"../messages\";\nimport { checkArgumentLength } from \"../modifier-helper\";\nimport { assert } from \"../util\";\nimport { builtins, customModifier } from \"./internal\";\n\nexport const DefineInlineMod = new SystemModifierDefinition<{\n name?: string;\n slotName: string;\n args: string[];\n msgs: Message[];\n definition?: InlineEntity[];\n}>('define-inline', ModifierFlags.Normal, {\n // .define-inline name:args...[:(slot-id)]\n delayContentExpansion: true,\n alwaysTryExpand: true,\n beforeParseContent(node, cxt) {\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 && cxt.config.inlineModifiers.has(nameValue))\n msgs.push(new NameAlreadyDefinedMessage(\n node.start, name.end - name.start, nameValue));\n\n let slotName = '';\n if (node.arguments.length > 1) {\n const last = node.arguments.at(-1)!;\n if (last.expansion)\n slotName = /^\\(.+\\)$/.test(last.expansion) \n ? last.expansion.substring(1, last.expansion.length - 1) : '';\n else msgs.push(\n new InvalidArgumentMessage(last.start, last.end - last.start));\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.start, x.end - x.start));\n return x.expansion ?? '';\n });\n node.state = { name: nameValue, slotName, args, msgs };\n\n const store = cxt.get(builtins)!;\n store.inlineSlotDelayedStack.push(node.state.slotName);\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 assert(store.inlineSlotDelayedStack.pop() == node.state.slotName);\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.start, arg.end - arg.start)];\n\n const msgs: Message[] = [];\n if (cxt.config.inlineModifiers.has(node.state.name))\n msgs.push(new NameAlreadyDefinedMessage(\n arg.start, arg.end - arg.start, node.state.name));\n \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 InlineDefinitonInvalidEntityMessage(n.start, n.end - n.start));\n break;\n case NodeType.SystemModifier:\n lastIsParagraph = false;\n concat.push(n);\n break;\n default:\n debug.never(n);\n }\n }\n node.state.definition = concat;\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, node.state.name, node.state.args,\n node.state.slotName, node.state.definition!));\n }\n return [];\n },\n});\n","import { ModifierFlags, SystemModifierDefinition } from \"../interface\";\nimport { CannotPopNotationMessage } from \"../messages\";\nimport { NameManager } from \"../util\";\nimport { builtins } from \"./internal\";\n\nexport const PushNotationMod = \n new SystemModifierDefinition('push-notation', ModifierFlags.Marker, \n{\n expand(_, cxt) {\n const data = cxt.get(builtins)!;\n data.notationStack.push({\n blocks: cxt.config.blockModifiers.toArray(),\n inlines: cxt.config.inlineModifiers.toArray()\n })\n return [];\n },\n});\n\nexport const PopNotationMod = \n new SystemModifierDefinition('pop-notation', ModifierFlags.Marker, \n{\n prepareExpand(node, cxt) {\n const data = cxt.get(builtins)!;\n const result = data.notationStack.pop();\n if (!result) return [\n new CannotPopNotationMessage(node.start, node.end - node.start)];\n cxt.config.blockModifiers = new NameManager(result.blocks);\n cxt.config.inlineModifiers = new NameManager(result.inlines);\n return [];\n },\n expand() {\n return [];\n },\n});","import { debug } from \"../debug\";\nimport { BlockModifierDefinition, ModifierFlags, InlineModifierDefinition, ModifierNode, ParseContext, NodeType } from \"../interface\";\nimport { SlotUsedOutsideDefinitionMessage, InvalidArgumentMessage } from \"../messages\";\nimport { checkArgumentLength } from \"../modifier-helper\";\nimport { _Def, _InstData } from \"../typing-helper\";\nimport { cloneNodes } from \"../util\";\nimport { builtins } from \"./internal\";\n\nfunction slotModifier<T extends NodeType.InlineModifier | NodeType.BlockModifier>(type: T): _Def<T, any> {\n type TState = {\n ok: true;\n data: [string, _InstData<T>];\n index: number;\n } | { ok: false; };\n\n const mod = (type == NodeType.BlockModifier\n ? new BlockModifierDefinition<TState>('slot', ModifierFlags.Marker)\n : new InlineModifierDefinition<TState>('slot', ModifierFlags.Marker)\n ) as _Def<T, TState>;\n const isInline = type == NodeType.InlineModifier;\n\n mod.alwaysTryExpand = true;\n mod.prepareExpand = (node: ModifierNode, cxt: ParseContext, immediate: boolean) => {\n if (node.state) return [];\n\n const check = checkArgumentLength(node, 0, 1);\n if (check && immediate) {\n node.state = { ok: false };\n return check;\n }\n\n const store = cxt.get(builtins)!;\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n let id = '';\n if (node.arguments.length == 1) {\n const arg = node.arguments[0];\n if (!arg.expansion) {\n node.state = { ok: false };\n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start)];\n }\n id = arg.expansion;\n }\n if (data.length == 0) {\n if (immediate) {\n node.state = { ok: false };\n return [new SlotUsedOutsideDefinitionMessage(node.start, node.head.end - node.start)];\n }\n return [];\n }\n const stack = isInline ? store.inlineSlotDelayedStack : store.blockSlotDelayedStack;\n if (stack.includes(id)) {\n debug.trace('delaying', id == '' ? 'unnamed slot' : 'slot: ' + id);\n return [];\n }\n if (node.arguments.length == 0) {\n node.state = { ok: true, data: data.at(-1)!, index: data.length - 1 };\n return [];\n }\n for (let i = data.length - 1; i >= 0; i--) if (data[i][0] == id) {\n node.state = { ok: true, data: data[i], index: i };\n return [];\n }\n if (immediate) {\n node.state = { ok: false };\n const arg = node.arguments[0];\n return [new InvalidArgumentMessage(arg.start, arg.end - arg.start, id)];\n }\n return [];\n };\n mod.expand = (node: ModifierNode, cxt: ParseContext) => {\n if (!node.state) return undefined;\n if (!node.state.ok) return [];\n return cloneNodes(node.state.data[1].slotContent) as any[];\n };\n mod.beforeProcessExpansion = (node: ModifierNode, 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[1].mod.name);\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n data.splice(node.state.index, 1);\n return [];\n };\n mod.afterProcessExpansion = (node: ModifierNode, 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[1].mod.name);\n const data = isInline ? store.inlineSlotData : store.blockSlotData;\n data.splice(node.state.index, 0, node.state.data);\n return [];\n };\n return mod;\n}\n\nexport const SlotBlockMod = slotModifier(NodeType.BlockModifier);\nexport const SlotInlineMod = slotModifier(NodeType.InlineModifier);","import { debug } from \"../debug\";\nimport { ParseContext, InlineModifierDefinition, ModifierFlags, ArgumentInterpolatorDefinition, SystemModifierDefinition, NodeType } from \"../interface\";\nimport { InvalidArgumentMessage, UndefinedVariableMessage } from \"../messages\";\nimport { builtins } from \"./internal\";\nimport { checkArgumentLength, checkArguments } from \"../modifier-helper\";\n\nfunction resolveId(id: string, cxt: ParseContext): string | undefined {\n const store = cxt.get(builtins)!;\n let value: string | undefined = undefined;\n for (let i = store.inlineSlotData.length - 1; i >= 0; i--) {\n const [_, data] = store.inlineSlotData[i];\n if ((value = data.args.get(id)) !== undefined)\n break;\n }\n for (let i = store.blockSlotData.length - 1; i >= 0; i--) {\n const [_, data] = store.blockSlotData[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 = new InlineModifierDefinition<{ value: string; }>('$', ModifierFlags.Marker, {\n // .$:id\n prepareExpand(node, cxt) {\n const check = checkArguments(node, 1);\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.start, arg.end - arg.start)];\n\n const value = resolveId(id, cxt);\n if (value === undefined)\n return [new UndefinedVariableMessage(arg.start, arg.end - arg.start, id)];\n node.state = { value };\n return [];\n },\n expand(node, cxt) {\n if (!node.state) return [];\n return [{ type: NodeType.Text, content: node.state.value, start: -1, end: -1 }];\n },\n});\n\nexport const PrintInlineMod = new InlineModifierDefinition<{ value: string; }>('print', ModifierFlags.Marker, {\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, start: -1, end: -1 }];\n },\n});\n\nexport const GetVarInterpolator = new ArgumentInterpolatorDefinition('$(', ')',\n {\n alwaysTryExpand: true,\n expand(content, cxt, immediate) {\n const result = resolveId(content, cxt);\n if (result === undefined) debug.trace('var interp failed:', content);\n else debug.trace(`$(${content}) --> ${result}`);\n return result;\n },\n }\n);\n\nexport const VarMod = new SystemModifierDefinition<{\n id: string; value: string;\n}>('var', ModifierFlags.Marker, {\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.start, arg.end - arg.start)];\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});","import { Configuration, ReadonlyConfiguration } from \"../interface\";\nimport { DefineBlockMod } from \"./define-block\";\nimport { DefineInlineMod } from \"./define-inline\";\nimport { initParseContext } from \"./internal\";\nimport { PopNotationMod, PushNotationMod } from \"./pushpop\";\nimport { SlotBlockMod, SlotInlineMod } from \"./slot\";\nimport { VarMod, GetVarInlineMod, GetVarInterpolator, PrintInlineMod } from \"./var\";\n\nlet basic = new Configuration();\nbasic.initializers = [initParseContext];\nbasic.systemModifiers.add(DefineBlockMod, DefineInlineMod, VarMod, PushNotationMod, PopNotationMod);\nbasic.blockModifiers.add(SlotBlockMod);\nbasic.inlineModifiers.add(SlotInlineMod, GetVarInlineMod, PrintInlineMod);\nbasic.argumentInterpolators.add(GetVarInterpolator);\n\nexport const BuiltinConfiguration: ReadonlyConfiguration = Object.freeze(basic);\n","import { debug, DebugLevel } from './debug';\n\nexport * from './interface';\nexport * from './front';\nexport * from './parser';\nexport * as messages from './messages';\nexport * from './builtin/builtin';\nexport { DebugLevel } from './debug';\n\nexport function setDebugLevel(level: DebugLevel) {\n debug.level = level;\n}"],"mappings":"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","names":["MessageSeverity","NodeType","ModifierFlags","content","DebugLevel","end"]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the_dissidents/libemmm",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "parser and language server for the emmm markup language",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
6
7
|
"types": "./dist/index.d.ts",
|
|
7
8
|
"scripts": {
|
|
8
9
|
"test": "vitest",
|
|
@@ -12,7 +13,7 @@
|
|
|
12
13
|
"dist"
|
|
13
14
|
],
|
|
14
15
|
"author": "the_dissidents",
|
|
15
|
-
"license": "
|
|
16
|
+
"license": "GPL-2.0-only",
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@vitest/coverage-istanbul": "^2.1.8",
|
|
18
19
|
"tsup": "^8.3.5",
|