Bläddra i källkod

Add Output Filter option to Magic operation

j433866 6 år sedan
förälder
incheckning
283d7f2159
2 ändrade filer med 13 tillägg och 5 borttagningar
  1. 6 3
      src/core/lib/Magic.mjs
  2. 7 2
      src/core/operations/Magic.mjs

+ 6 - 3
src/core/lib/Magic.mjs

@@ -267,7 +267,7 @@ class Magic {
      * @param {boolean} [useful=false] - Whether the current recipe should be scored highly
      * @param {boolean} [useful=false] - Whether the current recipe should be scored highly
      * @returns {Object[]} - A sorted list of the recipes most likely to result in correct decoding
      * @returns {Object[]} - A sorted list of the recipes most likely to result in correct decoding
      */
      */
-    async speculativeExecution(depth=0, extLang=false, intensive=false, recipeConfig=[], useful=false) {
+    async speculativeExecution(depth=0, extLang=false, intensive=false, recipeConfig=[], useful=false, filter=null) {
         if (depth < 0) return [];
         if (depth < 0) return [];
 
 
         // Find any operations that can be run on this data
         // Find any operations that can be run on this data
@@ -305,7 +305,7 @@ class Magic {
 
 
             const magic = new Magic(output, this.opPatterns),
             const magic = new Magic(output, this.opPatterns),
                 speculativeResults = await magic.speculativeExecution(
                 speculativeResults = await magic.speculativeExecution(
-                    depth-1, extLang, intensive, [...recipeConfig, opConfig], op.useful);
+                    depth-1, extLang, intensive, [...recipeConfig, opConfig], op.useful, filter);
 
 
             results = results.concat(speculativeResults);
             results = results.concat(speculativeResults);
         }));
         }));
@@ -331,7 +331,10 @@ class Magic {
                 r.fileType ||                             // A file was found
                 r.fileType ||                             // A file was found
                 r.isUTF8 ||                               // UTF-8 was found
                 r.isUTF8 ||                               // UTF-8 was found
                 r.matchingOps.length                      // A matching op was found
                 r.matchingOps.length                      // A matching op was found
-            )
+            ) &&
+            (
+                filter == null ||                       // Either no filter was passed, or
+                new RegExp(filter).test(r.data))        // the filter matches the result data
         );
         );
 
 
         // Return a sorted list of possible recipes along with their properties
         // Return a sorted list of possible recipes along with their properties

+ 7 - 2
src/core/operations/Magic.mjs

@@ -43,6 +43,11 @@ class Magic extends Operation {
                 "name": "Extensive language support",
                 "name": "Extensive language support",
                 "type": "boolean",
                 "type": "boolean",
                 "value": false
                 "value": false
+            },
+            {
+                "name": "Output Filter (Regex)",
+                "type": "string",
+                "value": ""
             }
             }
         ];
         ];
     }
     }
@@ -56,10 +61,10 @@ class Magic extends Operation {
      */
      */
     async run(state) {
     async run(state) {
         const ings = state.opList[state.progress].ingValues,
         const ings = state.opList[state.progress].ingValues,
-            [depth, intensive, extLang] = ings,
+            [depth, intensive, extLang, filter] = ings,
             dish = state.dish,
             dish = state.dish,
             magic = new MagicLib(await dish.get(Dish.ARRAY_BUFFER)),
             magic = new MagicLib(await dish.get(Dish.ARRAY_BUFFER)),
-            options = await magic.speculativeExecution(depth, extLang, intensive);
+            options = await magic.speculativeExecution(depth, extLang, intensive, [], false, filter);
 
 
         // Record the current state for use when presenting
         // Record the current state for use when presenting
         this.state = state;
         this.state = state;