Explorar o código

Added Head and Tail to Utils category and replaced 'AllBut' argument functionality with support for negative values of n.

n1474335 %!s(int64=8) %!d(string=hai) anos
pai
achega
d081ff745d

+ 2 - 0
src/core/config/Categories.js

@@ -162,6 +162,8 @@ const Categories = [
             "Unique",
             "Split",
             "Filter",
+            "Head",
+            "Tail",
             "Count occurrences",
             "Expand alphabet range",
             "Parse escaped string",

+ 4 - 14
src/core/config/OperationConfig.js

@@ -3201,9 +3201,9 @@ const OperationConfig = {
         description: [
             "Like the UNIX head utility.",
             "<br>",
-            "Gets the first $Number of lines.",
+            "Gets the first n lines.",
             "<br>",
-            "Optionally you can select all but the last $Number of lines.",
+            "You can select all but the last n lines by entering a negative value for n.",
             "<br>",
             "The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
         ].join("\n"),
@@ -3221,20 +3221,15 @@ const OperationConfig = {
                 type: "number",
                 value: 10,
             },
-            {
-                name: "All but last $Number of lines",
-                type: "boolean",
-                value: false,
-            },
         ]
     },
     "Tail": {
         description: [
             "Like the UNIX tail utility.",
             "<br>",
-            "Gets the last $Number of lines.",
+            "Gets the last n lines.",
             "<br>",
-            "Optionally you can select all lines after line $Number.",
+            "Optionally you can select all lines after line n by entering a negative value for n.",
             "<br>",
             "The delimiter can be changed so that instead of lines, fields (i.e. commas) are selected instead.",
         ].join("\n"),
@@ -3252,11 +3247,6 @@ const OperationConfig = {
                 type: "number",
                 value: 10,
             },
-            {
-                name: "Start from line $Number",
-                type: "boolean",
-                value: false,
-            },
         ]
     },
 };

+ 56 - 55
src/core/operations/StrUtils.js

@@ -460,6 +460,62 @@ const StrUtils = {
     },
 
 
+    /**
+     * Head lines operation.
+     *
+     * @param {string} input
+     * @param {Object[]} args
+     * @returns {string}
+     */
+    runHead: function(input, args) {
+        let delimiter = args[0],
+            number = args[1];
+
+        delimiter = Utils.charRep[delimiter];
+        let splitInput = input.split(delimiter);
+
+        return splitInput
+        .filter((line, lineIndex) => {
+            lineIndex += 1;
+
+            if (number < 0) {
+                return lineIndex <= splitInput.length + number;
+            } else {
+                return lineIndex <= number;
+            }
+        })
+        .join(delimiter);
+    },
+
+
+    /**
+     * Tail lines operation.
+     *
+     * @param {string} input
+     * @param {Object[]} args
+     * @returns {string}
+     */
+    runTail: function(input, args) {
+        let delimiter = args[0],
+            number = args[1];
+
+        delimiter = Utils.charRep[delimiter];
+        let splitInput = input.split(delimiter);
+
+        return splitInput
+        .filter((line, lineIndex) => {
+            lineIndex += 1;
+
+            if (number < 0) {
+                return lineIndex > -number;
+            } else {
+                return lineIndex > splitInput.length - number;
+            }
+        })
+        .join(delimiter);
+    },
+
+
     /**
      * Adds HTML highlights to matches within a string.
      *
@@ -537,61 +593,6 @@ const StrUtils = {
         return output;
     },
 
-    /**
-     * Head lines operation.
-     *
-     * @param {string} input
-     * @param {Object[]} args
-     * @returns {string}
-     */
-    runHead: function(input, args) {
-        let delimiter = args[0],
-            number = args[1],
-            allBut = args[2];
-
-        delimiter = Utils.charRep[delimiter];
-        let splitInput = input.split(delimiter);
-
-        return splitInput
-        .filter((line, lineIndex) => {
-            lineIndex += 1;
-
-            if (allBut) {
-                return lineIndex <= splitInput.length - number;
-            } else {
-                return lineIndex <= number;
-            }
-        })
-        .join(delimiter);
-    },
-
-    /**
-     * Tail lines operation.
-     *
-     * @param {string} input
-     * @param {Object[]} args
-     * @returns {string}
-     */
-    runTail: function(input, args) {
-        let delimiter = args[0],
-            number = args[1],
-            allBut = args[2];
-
-        delimiter = Utils.charRep[delimiter];
-        let splitInput = input.split(delimiter);
-
-        return splitInput
-        .filter((line, lineIndex) => {
-            lineIndex += 1;
-
-            if (allBut) {
-                return lineIndex >= number;
-            } else {
-                return lineIndex > splitInput.length - number;
-            }
-        })
-        .join(delimiter);
-    },
 };
 
 export default StrUtils;