Tidied up Base45 ops

This commit is contained in:
n1474335 2022-03-28 16:15:37 +01:00
parent 709b8696fc
commit 4f0b160ed3
4 changed files with 23 additions and 12 deletions

View file

@ -24,4 +24,4 @@ export function highlightFromBase45(pos, args) {
return pos; return pos;
} }
export const ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; export const ALPHABET = "0-9A-Z $%*+\\-./:";

View file

@ -27,6 +27,13 @@ class FromBase45 extends Operation {
this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems"; this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems";
this.inputType = "string"; this.inputType = "string";
this.outputType = "byteArray"; this.outputType = "byteArray";
this.args = [
{
name: "Alphabet",
type: "string",
value: ALPHABET
}
];
this.highlight = highlightFromBase45; this.highlight = highlightFromBase45;
this.highlightReverse = highlightToBase45; this.highlightReverse = highlightToBase45;
@ -39,6 +46,7 @@ class FromBase45 extends Operation {
*/ */
run(input, args) { run(input, args) {
if (!input) return []; if (!input) return [];
const alphabet = Utils.expandAlphRange(args[0]);
const res = []; const res = [];
@ -46,7 +54,7 @@ class FromBase45 extends Operation {
triple.reverse(); triple.reverse();
let b = 0; let b = 0;
for (const c of triple) { for (const c of triple) {
const idx = ALPHABET.indexOf(c); const idx = alphabet.indexOf(c);
if (idx === -1) { if (idx === -1) {
throw new OperationError(`Character not in alphabet: '${c}'`); throw new OperationError(`Character not in alphabet: '${c}'`);
} }

View file

@ -29,7 +29,7 @@ class ToBase45 extends Operation {
{ {
name: "Alphabet", name: "Alphabet",
type: "string", type: "string",
value: "0-9A-Za-z" value: ALPHABET
} }
]; ];
@ -44,6 +44,7 @@ class ToBase45 extends Operation {
*/ */
run(input, args) { run(input, args) {
input = new Uint8Array(input); input = new Uint8Array(input);
const alphabet = Utils.expandAlphRange(args[0]);
if (!input) return ""; if (!input) return "";
const res = []; const res = [];
@ -57,7 +58,7 @@ class ToBase45 extends Operation {
let chars = 0; let chars = 0;
do { do {
res.push(ALPHABET[b % 45]); res.push(alphabet[b % 45]);
chars++; chars++;
b = Math.floor(b / 45); b = Math.floor(b / 45);
} while (b > 0); } while (b > 0);

View file

@ -9,6 +9,8 @@
import TestRegister from "../../lib/TestRegister.mjs"; import TestRegister from "../../lib/TestRegister.mjs";
const defaultB45Alph = "0-9A-Z $%*+\\-./:";
TestRegister.addTests([ TestRegister.addTests([
{ {
name: "To Base45: nothing", name: "To Base45: nothing",
@ -17,7 +19,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "To Base45", op: "To Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -28,7 +30,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "To Base45", op: "To Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -39,7 +41,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "To Base45", op: "To Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -50,7 +52,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "To Base45", op: "To Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -61,7 +63,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "From Base45", op: "From Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -72,7 +74,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "From Base45", op: "From Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -83,7 +85,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "From Base45", op: "From Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },
@ -94,7 +96,7 @@ TestRegister.addTests([
recipeConfig: [ recipeConfig: [
{ {
op: "From Base45", op: "From Base45",
args: [], args: [defaultB45Alph],
}, },
], ],
}, },