Merge branch 'qistoph-FromNegs'

feature-extract-files
n1474335 2018-11-07 14:39:51 +00:00
commit ab3a73fe58
4 changed files with 61 additions and 9 deletions

View File

@ -29,38 +29,43 @@ class FromDecimal extends Operation {
"name": "Delimiter", "name": "Delimiter",
"type": "option", "type": "option",
"value": DELIM_OPTIONS "value": DELIM_OPTIONS
},
{
"name": "Support signed values",
"type": "boolean",
"value": false
} }
]; ];
this.patterns = [ this.patterns = [
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?: (?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?: (?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["Space"] args: ["Space", false]
}, },
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:,(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:,(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["Comma"] args: ["Comma", false]
}, },
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:;(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:;(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["Semi-colon"] args: ["Semi-colon", false]
}, },
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?::(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?::(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["Colon"] args: ["Colon", false]
}, },
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:\\n(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:\\n(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["Line feed"] args: ["Line feed", false]
}, },
{ {
match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:\\r\\n(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$", match: "^(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])(?:\\r\\n(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5]))*$",
flags: "", flags: "",
args: ["CRLF"] args: ["CRLF", false]
}, },
]; ];
} }
@ -71,7 +76,11 @@ class FromDecimal extends Operation {
* @returns {byteArray} * @returns {byteArray}
*/ */
run(input, args) { run(input, args) {
return fromDecimal(input, args[0]); let data = fromDecimal(input, args[0]);
if (args[1]) { // Convert negatives
data = data.map(v => v < 0 ? 0xFF + v + 1 : v);
}
return data;
} }
} }

View File

@ -30,6 +30,11 @@ class ToDecimal extends Operation {
"name": "Delimiter", "name": "Delimiter",
"type": "option", "type": "option",
"value": DELIM_OPTIONS "value": DELIM_OPTIONS
},
{
"name": "Support signed values",
"type": "boolean",
"value": false
} }
]; ];
} }
@ -40,7 +45,11 @@ class ToDecimal extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const delim = Utils.charRep(args[0]); const delim = Utils.charRep(args[0]),
signed = args[1];
if (signed) {
input = input.map(v => v > 0x7F ? v - 0xFF - 1 : v);
}
return input.join(delim); return input.join(delim);
} }

View File

@ -42,7 +42,8 @@ import "./tests/operations/Crypt";
import "./tests/operations/DateTime"; import "./tests/operations/DateTime";
import "./tests/operations/ExtractEmailAddresses"; import "./tests/operations/ExtractEmailAddresses";
import "./tests/operations/Fork"; import "./tests/operations/Fork";
import "./tests/operations/FromGeohash.mjs"; import "./tests/operations/FromDecimal";
import "./tests/operations/FromGeohash";
import "./tests/operations/Hash"; import "./tests/operations/Hash";
import "./tests/operations/HaversineDistance"; import "./tests/operations/HaversineDistance";
import "./tests/operations/Hexdump"; import "./tests/operations/Hexdump";

View File

@ -0,0 +1,33 @@
/**
* From Decimal tests
*
* @author qistoph
* @copyright Crown Copyright 2018
* @licence Apache-2.0
*/
import TestRegister from "../../TestRegister";
TestRegister.addTests([
{
name: "From Decimal",
input: "83 97 109 112 108 101 32 84 101 120 116",
expectedOutput: "Sample Text",
recipeConfig: [
{
op: "From Decimal",
args: ["Space", false]
},
],
},
{
name: "From Decimal with negatives",
input: "-130,-140,-152,-151,115,33,0,-1",
expectedOutput: "~this!\u0000\u00ff",
recipeConfig: [
{
op: "From Decimal",
args: ["Comma", true]
},
],
},
]);