mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.7 KiB
116 lines
2.7 KiB
import type {
|
|
Alternative,
|
|
Assertion,
|
|
Character,
|
|
Disjunction,
|
|
Group,
|
|
GroupBackReference,
|
|
IRegExpAST,
|
|
Quantifier,
|
|
RegExpAstPart,
|
|
RegExpFlags,
|
|
RegExpPattern,
|
|
Set,
|
|
} from "../types";
|
|
|
|
export class BaseRegExpVisitor {
|
|
public visitChildren(node: IRegExpAST) {
|
|
for (const key in node) {
|
|
const child = (node as any)[key];
|
|
/* istanbul ignore else */
|
|
if (node.hasOwnProperty(key)) {
|
|
if (child.type !== undefined) {
|
|
this.visit(child);
|
|
} else if (Array.isArray(child)) {
|
|
child.forEach((subChild) => {
|
|
this.visit(subChild);
|
|
}, this);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public visit(node: RegExpAstPart): void {
|
|
switch (node.type) {
|
|
case "Pattern":
|
|
this.visitPattern(node);
|
|
break;
|
|
case "Flags":
|
|
this.visitFlags(node);
|
|
break;
|
|
case "Disjunction":
|
|
this.visitDisjunction(node);
|
|
break;
|
|
case "Alternative":
|
|
this.visitAlternative(node);
|
|
break;
|
|
case "StartAnchor":
|
|
this.visitStartAnchor(node);
|
|
break;
|
|
case "EndAnchor":
|
|
this.visitEndAnchor(node);
|
|
break;
|
|
case "WordBoundary":
|
|
this.visitWordBoundary(node);
|
|
break;
|
|
case "NonWordBoundary":
|
|
this.visitNonWordBoundary(node);
|
|
break;
|
|
case "Lookahead":
|
|
this.visitLookahead(node);
|
|
break;
|
|
case "NegativeLookahead":
|
|
this.visitNegativeLookahead(node);
|
|
break;
|
|
case "Character":
|
|
this.visitCharacter(node);
|
|
break;
|
|
case "Set":
|
|
this.visitSet(node);
|
|
break;
|
|
case "Group":
|
|
this.visitGroup(node);
|
|
break;
|
|
case "GroupBackReference":
|
|
this.visitGroupBackReference(node);
|
|
break;
|
|
case "Quantifier":
|
|
this.visitQuantifier(node);
|
|
break;
|
|
}
|
|
|
|
this.visitChildren(node);
|
|
}
|
|
|
|
public visitPattern(node: RegExpPattern): void {}
|
|
|
|
public visitFlags(node: RegExpFlags): void {}
|
|
|
|
public visitDisjunction(node: Disjunction): void {}
|
|
|
|
public visitAlternative(node: Alternative): void {}
|
|
|
|
// Assertion
|
|
public visitStartAnchor(node: Assertion): void {}
|
|
|
|
public visitEndAnchor(node: Assertion): void {}
|
|
|
|
public visitWordBoundary(node: Assertion): void {}
|
|
|
|
public visitNonWordBoundary(node: Assertion): void {}
|
|
|
|
public visitLookahead(node: Assertion): void {}
|
|
|
|
public visitNegativeLookahead(node: Assertion): void {}
|
|
|
|
// atoms
|
|
public visitCharacter(node: Character): void {}
|
|
|
|
public visitSet(node: Set): void {}
|
|
|
|
public visitGroup(node: Group): void {}
|
|
|
|
public visitGroupBackReference(node: GroupBackReference): void {}
|
|
|
|
public visitQuantifier(node: Quantifier): void {}
|
|
}
|
|
|