summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/bjc/everge/ReplPair.java48
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) {