Source code for scratchattach.utils.encoder

from __future__ import annotations
import math
from . import exceptions

letters = [
    None,
    None,
    None,
    None,
    None,
    None,
    None,
    None,
    None,
    None,
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "0",
    " ",
    "a",
    "A",
    "b",
    "B",
    "c",
    "C",
    "d",
    "D",
    "e",
    "E",
    "f",
    "F",
    "g",
    "G",
    "h",
    "H",
    "i",
    "I",
    "j",
    "J",
    "k",
    "K",
    "l",
    "L",
    "m",
    "M",
    "n",
    "N",
    "o",
    "O",
    "p",
    "P",
    "q",
    "Q",
    "r",
    "R",
    "s",
    "S",
    "t",
    "T",
    "u",
    "U",
    "v",
    "V",
    "w",
    "W",
    "x",
    "X",
    "y",
    "Y",
    "z",
    "Z",
    "*",
    "/",
    ".",
    ",",
    "!",
    '"',
    "§",
    "$",
    "%",
    "_",
    "-",
    "(",
    "´",
    ")",
    "`",
    "?",
    "new line",
    "@",
    "#",
    "~",
    ";",
    ":",
    "+",
    "&",
    "|",
    "^",
    "'"
]


[docs] class Encoding: """ Class that contains tools for encoding / decoding strings. The strings encoded / decoded with these functions can be decoded / encoded with Scratch using this sprite: https://scratch3-assets.1tim.repl.co/Encoder.sprite3 """
[docs] @staticmethod def decode(inp): """ Args: inp (str): The encoded input. Returns: str: The decoded output. """ try: inp = str(inp) except Exception: raise(exceptions.InvalidDecodeInput) outp = "" for i in range(0, math.floor(len(inp) / 2)): letter = letters[int(f"{inp[i*2]}{inp[(i*2)+1]}")] outp = f"{outp}{letter}" return outp
[docs] @staticmethod def encode(inp): """ Args: inp (str): The decoded input. Returns: str: The encoded output. """ inp = str(inp) outp = "" for i in inp: if i in letters: outp = f"{outp}{letters.index(i)}" else: outp += str(letters.index(" ")) return outp
[docs] @staticmethod def replace_char(old_char, new_char): """ Replaces a character in the list that the encoder uses to encode / decode values. You can access this list using `scratchattach.encoder.letters` """ i = letters.index(old_char) letters[i] = new_char