diff --git a/src/core/lib/Base45.mjs b/src/core/lib/Base45.mjs index d3e279fa..67fee471 100644 --- a/src/core/lib/Base45.mjs +++ b/src/core/lib/Base45.mjs @@ -24,4 +24,4 @@ export function highlightFromBase45(pos, args) { return pos; } -export const ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; +export const ALPHABET = "0-9A-Z $%*+\\-./:"; diff --git a/src/core/operations/FromBase45.mjs b/src/core/operations/FromBase45.mjs index 890d35d6..2625d782 100644 --- a/src/core/operations/FromBase45.mjs +++ b/src/core/operations/FromBase45.mjs @@ -27,6 +27,13 @@ class FromBase45 extends Operation { this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems"; this.inputType = "string"; this.outputType = "byteArray"; + this.args = [ + { + name: "Alphabet", + type: "string", + value: ALPHABET + } + ]; this.highlight = highlightFromBase45; this.highlightReverse = highlightToBase45; @@ -39,6 +46,7 @@ class FromBase45 extends Operation { */ run(input, args) { if (!input) return []; + const alphabet = Utils.expandAlphRange(args[0]); const res = []; @@ -46,7 +54,7 @@ class FromBase45 extends Operation { triple.reverse(); let b = 0; for (const c of triple) { - const idx = ALPHABET.indexOf(c); + const idx = alphabet.indexOf(c); if (idx === -1) { throw new OperationError(`Character not in alphabet: '${c}'`); } diff --git a/src/core/operations/ToBase45.mjs b/src/core/operations/ToBase45.mjs index d7455dca..40dd96de 100644 --- a/src/core/operations/ToBase45.mjs +++ b/src/core/operations/ToBase45.mjs @@ -29,7 +29,7 @@ class ToBase45 extends Operation { { name: "Alphabet", type: "string", - value: "0-9A-Za-z" + value: ALPHABET } ]; @@ -44,6 +44,7 @@ class ToBase45 extends Operation { */ run(input, args) { input = new Uint8Array(input); + const alphabet = Utils.expandAlphRange(args[0]); if (!input) return ""; const res = []; @@ -57,7 +58,7 @@ class ToBase45 extends Operation { let chars = 0; do { - res.push(ALPHABET[b % 45]); + res.push(alphabet[b % 45]); chars++; b = Math.floor(b / 45); } while (b > 0); diff --git a/tests/operations/tests/Base45.mjs b/tests/operations/tests/Base45.mjs index 1e821c6d..d1c17ea3 100644 --- a/tests/operations/tests/Base45.mjs +++ b/tests/operations/tests/Base45.mjs @@ -9,6 +9,8 @@ import TestRegister from "../../lib/TestRegister.mjs"; +const defaultB45Alph = "0-9A-Z $%*+\\-./:"; + TestRegister.addTests([ { name: "To Base45: nothing", @@ -17,7 +19,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -28,7 +30,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -39,7 +41,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -50,7 +52,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -61,7 +63,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -72,7 +74,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -83,7 +85,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base45", - args: [], + args: [defaultB45Alph], }, ], }, @@ -94,7 +96,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base45", - args: [], + args: [defaultB45Alph], }, ], },