diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/bjc/everge/ReplPair.java | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/src/main/java/bjc/everge/ReplPair.java b/src/main/java/bjc/everge/ReplPair.java index 11ca3ef..4425da9 100644 --- a/src/main/java/bjc/everge/ReplPair.java +++ b/src/main/java/bjc/everge/ReplPair.java @@ -1,13 +1,10 @@ package bjc.everge; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; +import java.util.*; +import java.util.function.*; +import java.util.regex.*; -import java.util.function.UnaryOperator; - -import bjc.everge.ControlledString.Control; -import bjc.everge.ControlledString.ParseStrings; +import bjc.everge.ControlledString.*; /** * String pairs for replacements. @@ -37,6 +34,14 @@ public class ReplPair implements Comparable<ReplPair>, UnaryOperator<String> { public String name; /** + * The guard for this replacement. + * + * The guard of the replacement is a regex that has to match before the pair will be considered. + * Defaults to being blank. + */ + public String guard; + + /** * The string to look for. */ public String find; @@ -448,6 +453,10 @@ public class ReplPair implements Comparable<ReplPair>, UnaryOperator<String> { @Override public String apply(String inp) { + if (guard != null) { + if (!inp.matches(guard)) return inp; + } + return inp.replaceAll(find, replace); } @@ -521,6 +530,28 @@ public class ReplPair implements Comparable<ReplPair>, UnaryOperator<String> { rp.name = cont.get(0); } break; + case "GUARD": + case "G": + if (cont.count() != 1) { + String errMsg = String.format("One guard argument was expected (got %d)", + cont.count()); + + errs.add(new ReplError(lno, pno, errMsg, nam)); + } else { + String pat = cont.get(0); + + try { + Pattern.compile(pat); + } catch (PatternSyntaxException psex) { + String errMsg = String.format("Guard argument '%s' is not a valid regex (%s)", + pat, psex.getMessage()); + + errs.add(new ReplError(lno, pno, errMsg, nam)); + } + + rp.guard = cont.get(0); + } + break; case "PRIORITY": case "PRIOR": case "P": @@ -796,8 +827,7 @@ public class ReplPair implements Comparable<ReplPair>, UnaryOperator<String> { } private static ControlledString getControls(String lne, List<ReplError> errs, - ReplOpts ropts, IntHolder lno, IntHolder pno, String type) - { + ReplOpts ropts, IntHolder lno, IntHolder pno, String type) { try { return ControlledString.parse(lne, new ParseStrings("//", ";", "/", "|")); } catch (IllegalArgumentException iaex) { |
