diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/hello.txt b/hello.txt new file mode 100644 index 0000000..05a682b --- /dev/null +++ b/hello.txt @@ -0,0 +1 @@ +Hello! \ No newline at end of file diff --git a/text_codecs/alphanumeric.py b/text_codecs/alphanumeric.py index e8cc2ea..0386c46 100644 --- a/text_codecs/alphanumeric.py +++ b/text_codecs/alphanumeric.py @@ -1,7 +1,25 @@ import string import codecs -from custom_codecs.register import register_codec + from easybits import Bits +import codecs + +def register_codec(encode, decode, name): + """Registers a codec so that it can later be used to encode + or decode strings and bytes. + """ + def encode_wrapper(text): + return encode(text), len(text) + + def decode_wrapper(data): + return decode(data), len(data) + + def search_for_codec(query): + if query == name: + return codecs.CodecInfo(encode_wrapper, decode_wrapper, name=name) + + codecs.register(search_for_codec) + allowed_characters = string.ascii_letters + string.digits diff --git a/text_codecs/ascii7.py b/text_codecs/ascii7.py index fb24cd0..4f7e83f 100644 --- a/text_codecs/ascii7.py +++ b/text_codecs/ascii7.py @@ -1,5 +1,23 @@ -from custom_codecs.register import register_codec + from easybits import Bits +import codecs + +def register_codec(encode, decode, name): + """Registers a codec so that it can later be used to encode + or decode strings and bytes. + """ + def encode_wrapper(text): + return encode(text), len(text) + + def decode_wrapper(data): + return decode(data), len(data) + + def search_for_codec(query): + if query == name: + return codecs.CodecInfo(encode_wrapper, decode_wrapper, name=name) + + codecs.register(search_for_codec) + def encode(text): """An encoder which only handles ASCII: non-ASCII characters diff --git a/text_codecs/trevcodec.py b/text_codecs/trevcodec.py new file mode 100644 index 0000000..90a678c --- /dev/null +++ b/text_codecs/trevcodec.py @@ -0,0 +1,49 @@ + + +from easybits import Bits +import codecs + +def register_codec(encode, decode, name): + """Registers a codec so that it can later be used to encode + or decode strings and bytes. + """ + def encode_wrapper(text): + return encode(text), len(text) + + def decode_wrapper(data): + return decode(data), len(data) + + def search_for_codec(query): + if query == name: + return codecs.CodecInfo(encode_wrapper, decode_wrapper, name=name) + + codecs.register(search_for_codec) + + +CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,?!'" + +def encode(text): + result = Bits() + text = text.upper() + + for char in text: + if char in CHARS: + index = CHARS.index(char) + bits = Bits(index, length=5) + result = result.concat(bits) + + return result.bytes + +def decode(data): + bits = Bits(bytes(data)) + text = "" + + for i in range(0, len(bits), 5): + chunk = bits[i:i+5] + if len(chunk) == 5: + index = chunk.int + text += CHARS[index] + + return text + +register_codec(encode, decode, "trevcodec") \ No newline at end of file