Merge branch 'artemisbot-feature-octal'

feature-extract-files
n1474335 2017-04-05 22:00:33 +01:00
commit 87ebe77dfb
6 changed files with 144 additions and 4 deletions

View File

@ -212,7 +212,7 @@ const Utils = {
* @returns {string} * @returns {string}
*/ */
printable: function(str, preserveWs) { printable: function(str, preserveWs) {
if (window && window.app && !window.app.options.treatAsUtf8) { if (typeof window !== "undefined" && window.app && !window.app.options.treatAsUtf8) {
str = Utils.byteArrayToChars(Utils.strToByteArray(str)); str = Utils.byteArrayToChars(Utils.strToByteArray(str));
} }
@ -388,8 +388,9 @@ const Utils = {
var wordArray = CryptoJS.enc.Utf8.parse(str), var wordArray = CryptoJS.enc.Utf8.parse(str),
byteArray = Utils.wordArrayToByteArray(wordArray); byteArray = Utils.wordArrayToByteArray(wordArray);
if (window && str.length !== wordArray.sigBytes) if (typeof window !== "undefined" && str.length !== wordArray.sigBytes) {
window.app.options.attemptHighlight = false; window.app.options.attemptHighlight = false;
}
return byteArray; return byteArray;
}, },
@ -440,7 +441,7 @@ const Utils = {
var wordArray = new CryptoJS.lib.WordArray.init(words, byteArray.length), var wordArray = new CryptoJS.lib.WordArray.init(words, byteArray.length),
str = CryptoJS.enc.Utf8.stringify(wordArray); str = CryptoJS.enc.Utf8.stringify(wordArray);
if (window && str.length !== wordArray.sigBytes) if (typeof window !== "undefined" && str.length !== wordArray.sigBytes)
window.app.options.attemptHighlight = false; window.app.options.attemptHighlight = false;
return str; return str;
} catch (err) { } catch (err) {

View File

@ -35,6 +35,8 @@ const Categories = [
"From Decimal", "From Decimal",
"To Binary", "To Binary",
"From Binary", "From Binary",
"To Octal",
"From Octal",
"To Base64", "To Base64",
"From Base64", "From Base64",
"Show Base64 offsets", "Show Base64 offsets",

View File

@ -425,7 +425,7 @@ const OperationConfig = {
] ]
}, },
"From Hex": { "From Hex": {
description: "Converts a hexadecimal byte string back into a its raw value.<br><br>e.g. <code>ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a</code> becomes the UTF-8 encoded string <code>Γειά σου</code>", description: "Converts a hexadecimal byte string back into its raw value.<br><br>e.g. <code>ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a</code> becomes the UTF-8 encoded string <code>Γειά σου</code>",
run: ByteRepr.runFromHex, run: ByteRepr.runFromHex,
highlight: ByteRepr.highlightFrom, highlight: ByteRepr.highlightFrom,
highlightReverse: ByteRepr.highlightTo, highlightReverse: ByteRepr.highlightTo,
@ -454,6 +454,36 @@ const OperationConfig = {
} }
] ]
}, },
"From Octal": {
description: "Converts an octal byte string back into its raw value.<br><br>e.g. <code>316 223 316 265 316 271 316 254 40 317 203 316 277 317 205</code> becomes the UTF-8 encoded string <code>Γειά σου</code>",
run: ByteRepr.runFromOct,
highlight: false,
highlightReverse: false,
inputType: "string",
outputType: "byteArray",
args: [
{
name: "Delimiter",
type: "option",
value: ByteRepr.DELIM_OPTIONS
}
]
},
"To Octal": {
description: "Converts the input string to octal bytes separated by the specified delimiter.<br><br>e.g. The UTF-8 encoded string <code>Γειά σου</code> becomes <code>316 223 316 265 316 271 316 254 40 317 203 316 277 317 205</code>",
run: ByteRepr.runToOct,
highlight: false,
highlightReverse: false,
inputType: "byteArray",
outputType: "string",
args: [
{
name: "Delimiter",
type: "option",
value: ByteRepr.DELIM_OPTIONS
}
]
},
"From Charcode": { "From Charcode": {
description: "Converts unicode character codes back into text.<br><br>e.g. <code>0393 03b5 03b9 03ac 20 03c3 03bf 03c5</code> becomes <code>Γειά σου</code>", description: "Converts unicode character codes back into text.<br><br>e.g. <code>0393 03b5 03b9 03ac 20 03c3 03bf 03c5</code> becomes <code>Γειά σου</code>",
run: ByteRepr.runFromCharcode, run: ByteRepr.runFromCharcode,

View File

@ -55,6 +55,35 @@ const ByteRepr = {
}, },
/**
* To Octal operation.
*
* @author Matt C [matt@artemisbot.pw]
* @param {byteArray} input
* @param {Object[]} args
* @returns {string}
*/
runToOct: function(input, args) {
var delim = Utils.charRep[args[0] || "Space"];
return input.map(val => val.toString(8)).join(delim);
},
/**
* From Octal operation.
*
* @author Matt C [matt@artemisbot.pw]
* @param {string} input
* @param {Object[]} args
* @returns {byteArray}
*/
runFromOct: function(input, args) {
var delim = Utils.charRep[args[0] || "Space"];
if (input.length === 0) return [];
return input.split(delim).map(val => parseInt(val, 8));
},
/** /**
* @constant * @constant
* @default * @default

View File

@ -12,6 +12,7 @@ import "babel-polyfill";
import TestRegister from "./TestRegister.js"; import TestRegister from "./TestRegister.js";
import "./tests/operations/Base58.js"; import "./tests/operations/Base58.js";
import "./tests/operations/ByteRepr.js";
import "./tests/operations/Compress.js"; import "./tests/operations/Compress.js";
import "./tests/operations/FlowControl.js"; import "./tests/operations/FlowControl.js";
import "./tests/operations/MorseCode.js"; import "./tests/operations/MorseCode.js";

View File

@ -0,0 +1,77 @@
/**
* ByteRepr tests.
*
* @author Matt C [matt@artemisbot.pw]
* @copyright Crown Copyright 2017
* @license Apache-2.0
*/
import TestRegister from "../../TestRegister.js";
TestRegister.addTests([
{
name: "To Octal: nothing",
input: "",
expectedOutput: "",
recipeConfig: [
{
"op": "To Octal",
"args": ["Space"]
}
]
},
{
name: "From Octal: nothing",
input: "",
expectedOutput: "",
recipeConfig: [
{
"op": "From Octal",
"args": ["Space"]
}
]
},
{
name: "To Octal: hello world",
input: "hello world", // [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100],
expectedOutput: "150 145 154 154 157 40 167 157 162 154 144",
recipeConfig: [
{
"op": "To Octal",
"args": ["Space"]
}
]
},
{
name: "From Octal: hello world",
input: "150 145 154 154 157 40 167 157 162 154 144",
expectedOutput: "hello world",
recipeConfig: [
{
"op": "From Octal",
"args": ["Space"]
}
]
},
{
name: "To Octal: Γειά σου",
input: "Γειά σου", //[206,147,206,181,206,185,206,172,32,207,131,206,191,207,133],
expectedOutput: "316 223 316 265 316 271 316 254 40 317 203 316 277 317 205",
recipeConfig: [
{
"op": "To Octal",
"args": ["Space"]
}
]
},
{
name: "From Octal: Γειά σου",
input: "316 223 316 265 316 271 316 254 40 317 203 316 277 317 205",
expectedOutput: "Γειά σου",
recipeConfig: [
{
"op": "From Octal",
"args": ["Space"]
}
]
},
]);