site/node_modules/speech-rule-engine/js/walker/syntax_walker.js
2024-10-14 08:09:33 +02:00

103 lines
3.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SyntaxWalker = void 0;
const base_util_1 = require("../common/base_util");
const abstract_walker_1 = require("./abstract_walker");
const levels_1 = require("./levels");
class SyntaxWalker extends abstract_walker_1.AbstractWalker {
constructor(node, generator, highlighter, xml) {
super(node, generator, highlighter, xml);
this.node = node;
this.generator = generator;
this.highlighter = highlighter;
this.levels = null;
this.restoreState();
}
initLevels() {
const levels = new levels_1.Levels();
levels.push([this.primaryId()]);
return levels;
}
up() {
super.up();
const parent = this.previousLevel();
if (!parent) {
return null;
}
this.levels.pop();
return this.singletonFocus(parent);
}
down() {
super.down();
const children = this.nextLevel();
if (children.length === 0) {
return null;
}
const focus = this.singletonFocus(children[0]);
if (focus) {
this.levels.push(children);
}
return focus;
}
combineContentChildren(type, role, content, children) {
switch (type) {
case "relseq":
case "infixop":
case "multirel":
return (0, base_util_1.interleaveLists)(children, content);
case "prefixop":
return content.concat(children);
case "postfixop":
return children.concat(content);
case "matrix":
case "vector":
case "fenced":
children.unshift(content[0]);
children.push(content[1]);
return children;
case "cases":
children.unshift(content[0]);
return children;
case "punctuated":
if (role === "text") {
return (0, base_util_1.interleaveLists)(children, content);
}
return children;
case "appl":
return [children[0], content[0], children[1]];
case "root":
return [children[1], children[0]];
default:
return children;
}
}
left() {
super.left();
const index = this.levels.indexOf(this.primaryId());
if (index === null) {
return null;
}
const id = this.levels.get(index - 1);
return id ? this.singletonFocus(id) : null;
}
right() {
super.right();
const index = this.levels.indexOf(this.primaryId());
if (index === null) {
return null;
}
const id = this.levels.get(index + 1);
return id ? this.singletonFocus(id) : null;
}
findFocusOnLevel(id) {
return this.singletonFocus(id.toString());
}
focusDomNodes() {
return [this.getFocus().getDomPrimary()];
}
focusSemanticNodes() {
return [this.getFocus().getSemanticPrimary()];
}
}
exports.SyntaxWalker = SyntaxWalker;