Browse Source

Added Negative Matching to conditional jumps so negative lookahead is not required.

bwhitn 7 years ago
parent
commit
7abda44fd6
2 changed files with 13 additions and 5 deletions
  1. 8 5
      src/core/FlowControl.js
  2. 5 0
      src/core/config/OperationConfig.js

+ 8 - 5
src/core/FlowControl.js

@@ -201,8 +201,9 @@ const FlowControl = {
         let ings     = state.opList[state.progress].getIngValues(),
             dish     = state.dish,
             regexStr = ings[0],
-            jumpNum  = ings[1],
-            maxJumps = ings[2];
+            invert   = ings[1],
+            jumpNum  = ings[2],
+            maxJumps = ings[3];
 
         if (jumpNum < 0) {
             jumpNum--;
@@ -212,9 +213,11 @@ const FlowControl = {
             return state;
         }
 
-        if (regexStr !== "" && dish.get(Dish.STRING).search(regexStr) > -1) {
-            state.progress += jumpNum;
-            state.numJumps++;
+        if (regexStr !== "") {
+            let strMatch = dish.get(Dish.STRING).search(regexStr) > -1;
+            if (!invert && strMatch || invert && !strMatch) {
+                state.progress += jumpNum;
+                state.numJumps++;
         }
 
         return state;

+ 5 - 0
src/core/config/OperationConfig.js

@@ -165,6 +165,11 @@ const OperationConfig = {
                 type: "string",
                 value: ""
             },
+            {
+                name: "Negative match (logical NOT)",
+                type: "boolean",
+                value: false
+            },
             {
                 name: "Number of operations to jump over if match found",
                 type: "number",