Skip to content

Commit

Permalink
base45: Implement highlighting
Browse files Browse the repository at this point in the history
  • Loading branch information
t-8ch committed Nov 9, 2021
1 parent 6017578 commit 7db1f39
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 4 deletions.
27 changes: 27 additions & 0 deletions src/core/lib/Base45.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Base45 resources.
*
* @author Thomas Weißschuh [thomas@t-8ch.de]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

/**
* Highlight to Base45
*/
export function highlightToBase45(pos, args) {
pos[0].start = Math.floor(pos[0].start / 2) * 3;
pos[0].end = Math.ceil(pos[0].end / 2) * 3;
return pos;
}

/**
* Highlight from Base45
*/
export function highlightFromBase45(pos, args) {
pos[0].start = Math.floor(pos[0].start / 3) * 2;
pos[0].end = Math.ceil(pos[0].end / 3) * 2;
return pos;
}

export const ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
7 changes: 5 additions & 2 deletions src/core/operations/FromBase45.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* @license Apache-2.0
*/

import {ALPHABET, highlightToBase45, highlightFromBase45} from "../lib/Base45.mjs";
import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import Utils from "../Utils.mjs";
Expand All @@ -26,6 +27,9 @@ class FromBase45 extends Operation {
this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems";
this.inputType = "string";
this.outputType = "byteArray";

this.highlight = highlightFromBase45;
this.highlightReverse = highlightToBase45;
}

/**
Expand All @@ -34,7 +38,6 @@ class FromBase45 extends Operation {
* @returns {byteArray}
*/
run(input, args) {
const alphabet = Utils.expandAlphRange("0-9A-Z $%*+-./:").join("");
if (!input) return [];

const res = [];
Expand All @@ -43,7 +46,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}'`);
}
Expand Down
7 changes: 5 additions & 2 deletions src/core/operations/ToBase45.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* @license Apache-2.0
*/

import {ALPHABET, highlightToBase45, highlightFromBase45} from "../lib/Base45.mjs";
import Operation from "../Operation.mjs";
import Utils from "../Utils.mjs";

Expand Down Expand Up @@ -31,6 +32,9 @@ class ToBase45 extends Operation {
value: "0-9A-Za-z"
}
];

this.highlight = highlightToBase45;
this.highlightReverse = highlightFromBase45;
}

/**
Expand All @@ -39,7 +43,6 @@ class ToBase45 extends Operation {
* @returns {string}
*/
run(input, args) {
const alphabet = Utils.expandAlphRange("0-9A-Z $%*+-./:").join("");
input = new Uint8Array(input);
if (!input) return "";

Expand All @@ -54,7 +57,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);
Expand Down

0 comments on commit 7db1f39

Please sign in to comment.