@npmstuff/argdown-core
Version:
A pluggable parser for the Argdown argumentation syntax
30 lines • 1.34 kB
JavaScript
import { EventEmitter } from "eventemitter3";
import { isRuleNode, isTokenNode } from "./model/model";
export class ArgdownTreeWalker extends EventEmitter {
constructor() {
super(...arguments);
this.visitNode = (request, response, node, parentNode, childIndex, logger) => {
if (node) {
if (isRuleNode(node)) {
this.emit(node.name + "Entry", request, response, node, parentNode, childIndex, logger);
if (node.children && node.children.length > 0) {
for (var i = 0; i < node.children.length; i++) {
let child = node.children[i];
this.visitNode(request, response, child, node, i, logger);
}
}
this.emit(node.name + "Exit", request, response, node, parentNode, childIndex, logger);
}
else if (isTokenNode(node)) {
this.emit(node.tokenType.name, request, response, node, parentNode, childIndex, logger);
}
}
};
}
walk(request, response, logger) {
if (response.ast) {
this.visitNode(request, response, response.ast, null, null, logger);
}
}
}
//# sourceMappingURL=ArgdownTreeWalker.js.map