ifc-expressions
Version:
Parsing and evaluation of IFC expressions
63 lines (62 loc) • 2.82 kB
JavaScript
import { ApplyRegex } from "./ApplyRegex.js";
import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
import { StringValue } from "../../../value/StringValue.js";
import { Type } from "../../../type/Types.js";
import { FuncArgString } from "../arg/FuncArgString.js";
import { FuncArgRegex } from "../arg/FuncArgRegex.js";
import { MatchesPattern } from "./MatchesPattern.js";
export class ReplacePattern extends ApplyRegex {
constructor(name, simplePattern) {
super(name, simplePattern, false);
this.formalArguments[0].withDocumentation({ key: `function.${name}.arg.input.label`, fallback: "input" }, {
key: `function.${name}.arg.input.summary`,
fallback: "The source string",
});
this.formalArguments[1].withDocumentation({ key: `function.${name}.arg.pattern.label`, fallback: "pattern" }, {
key: `function.${name}.arg.pattern.summary`,
fallback: "The pattern to replace",
});
this.formalArguments.splice(2, 0, (simplePattern
? new FuncArgString(true, ReplacePattern.KEY_REPLACE)
: new FuncArgRegex(true, ReplacePattern.KEY_REPLACE)).withDocumentation({
key: `function.${name}.arg.replacement.label`,
fallback: "replacement",
}, {
key: `function.${name}.arg.replacement.summary`,
fallback: "The replacement string",
}));
this.withDocumentation({
key: `function.${name}.summary`,
fallback: "replace pattern occurrences in input with replacement",
});
}
getReturnType(argumentTypes) {
return Type.STRING;
}
calculateResult(callingExpr, evaluatedArguments) {
const inputValue = evaluatedArguments.get(MatchesPattern.KEY_INPUT);
const patternValue = evaluatedArguments.get(MatchesPattern.KEY_PATTERN);
const replaceValue = evaluatedArguments.get(ReplacePattern.KEY_REPLACE);
const pattern = patternValue.getValue();
if (pattern.length === 0) {
return new ExprEvalSuccessObj(inputValue);
}
let flags = "mg";
if (this.simplePattern) {
const caseSensitive = evaluatedArguments.get(MatchesPattern.KEY_CASE_INSENSITIVE);
if (caseSensitive.getValue()) {
flags = "img";
}
}
else {
flags = evaluatedArguments.get(ReplacePattern.KEY_FLAGS).getValue();
}
const regex = new RegExp(pattern, flags);
const input = inputValue.getValue();
const replace = replaceValue.getValue();
const result = input.replace(regex, replace);
return new ExprEvalSuccessObj(StringValue.of(result));
}
}
ReplacePattern.KEY_REPLACE = "replaceValue";
//# sourceMappingURL=ReplacePattern.js.map