speech-rule-engine
Version:
A standalone speech rule engine for XML structures, based on the original engine from ChromeVox.
73 lines • 1.96 kB
JavaScript
import { Debugger } from '../common/debugger.js';
import { TrieNodeKind } from './trie_node.js';
export class AbstractTrieNode {
constructor(constraint, test) {
this.constraint = constraint;
this.test = test;
this.children_ = {};
this.kind = TrieNodeKind.ROOT;
}
getConstraint() {
return this.constraint;
}
getKind() {
return this.kind;
}
applyTest(object) {
return this.test(object);
}
addChild(node) {
const constraint = node.getConstraint();
const child = this.children_[constraint];
this.children_[constraint] = node;
return child;
}
getChild(constraint) {
return this.children_[constraint];
}
getChildren() {
const children = [];
for (const val of Object.values(this.children_)) {
children.push(val);
}
return children;
}
findChildren(object) {
const children = [];
for (const val of Object.values(this.children_)) {
if (val.applyTest(object)) {
children.push(val);
}
}
return children;
}
removeChild(constraint) {
delete this.children_[constraint];
}
toString() {
return this.constraint;
}
}
export class StaticTrieNode extends AbstractTrieNode {
constructor(constraint, test) {
super(constraint, test);
this.rule_ = null;
this.kind = TrieNodeKind.STATIC;
}
getRule() {
return this.rule_;
}
setRule(rule) {
if (this.rule_) {
Debugger.getInstance().output('Replacing rule ' + this.rule_ + ' with ' + rule);
}
this.rule_ = rule;
}
toString() {
const rule = this.getRule();
return rule
? this.constraint + '\n' + '==> ' + this.getRule().action
: this.constraint;
}
}
//# sourceMappingURL=abstract_trie_node.js.map