Add glossary hover presentation

This commit is contained in:
2026-05-19 07:34:52 +02:00
parent 751ac5f62b
commit 121b174f2c
19 changed files with 2356 additions and 1912 deletions
+2
View File
@@ -22,5 +22,7 @@ export declare class InkEngine {
private getChoiceTags;
private extractChoicePreviewTags;
private resolveInkPath;
private findNamedInkChild;
private getInkContainerMap;
private isNamedContainerMap;
}
+31 -4
View File
@@ -236,12 +236,12 @@ class InkEngine {
for (const part of parts) {
if (!node)
return null;
if (Array.isArray(node) && node.length > 0 && this.isNamedContainerMap(node[node.length - 1]) && part in node[node.length - 1]) {
node = node[node.length - 1][part];
}
else if (Array.isArray(node) && /^\d+$/.test(part)) {
if (Array.isArray(node) && /^\d+$/.test(part)) {
node = node[Number(part)];
}
else if (Array.isArray(node)) {
node = this.findNamedInkChild(node, part);
}
else if (this.isNamedContainerMap(node) && part in node) {
node = node[part];
}
@@ -251,6 +251,33 @@ class InkEngine {
}
return node;
}
findNamedInkChild(container, part) {
for (let index = container.length - 1; index >= 0; index -= 1) {
const item = container[index];
if (this.isNamedContainerMap(item) && part in item) {
return item[part];
}
if (!Array.isArray(item))
continue;
const namedMap = this.getInkContainerMap(item);
if (namedMap?.['#n'] === part) {
return item;
}
if (namedMap && part in namedMap) {
return namedMap[part];
}
}
return null;
}
getInkContainerMap(container) {
for (let index = container.length - 1; index >= 0; index -= 1) {
const item = container[index];
if (this.isNamedContainerMap(item)) {
return item;
}
}
return null;
}
isNamedContainerMap(value) {
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
}
+1 -1
View File
File diff suppressed because one or more lines are too long