diff --git a/text_codecs/alphanumeric.py b/text_codecs/alphanumeric.py index d863468..b7bbe15 100644 --- a/text_codecs/alphanumeric.py +++ b/text_codecs/alphanumeric.py @@ -1,6 +1,5 @@ import string import codecs -from text_codecs.register import register_codec from easybits import Bits allowed_characters = string.ascii_letters + string.digits @@ -35,5 +34,21 @@ def decode(data): print("Error") breakpoint() return text - + +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) + register_codec(encode, decode, "alphanumeric") diff --git a/text_codecs/ascii7.py b/text_codecs/ascii7.py index 72dda4c..a6944f2 100644 --- a/text_codecs/ascii7.py +++ b/text_codecs/ascii7.py @@ -1,5 +1,5 @@ -from text_codecs.register import register_codec from easybits import Bits +import codecs def encode(text): """An encoder which only handles ASCII: non-ASCII characters @@ -30,4 +30,20 @@ def decode(data): text += Bits(byte).ascii return text +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) + register_codec(encode, decode, "ascii7") diff --git a/text_codecs/noVow7.py b/text_codecs/noVow7.py index 47e7381..d8f8fc5 100644 --- a/text_codecs/noVow7.py +++ b/text_codecs/noVow7.py @@ -1,31 +1,31 @@ import string import codecs -from text_codecs.register import register_codec from easybits import Bits vowels = 'aeiouyAEIOUY' allowed_chars = string.ascii_letters + string.digits def encode(text): - - ascii_chars = [] + ascii_novow_chars = [] last_character_was_space = False for char in text: - if char in allowed_chars: - ascii_chars.append(char) + if char in allowed_chars and char not in vowels: + ascii_novow_chars.append(char) last_character_was_space = False elif char in string.whitespace and not last_character_was_space: - ascii_chars.append(' ') + ascii_novow_chars.append(' ') last_character_was_space = True - ascii_text = ''.join(ascii_chars) - - no_vowels = [] - for ch in ascii_text: - if ch not in vowels: - no_vowels.append(ch) - - return Bits(no_vowels, encoding = 'ascii7') + clean_text = ''.join(ascii_novow_chars) + result = Bits() + for char in clean_text: + try: + b = Bits(char, encoding='ascii') + result = result.concat(b[1:]) + except: + b = Bits('?') + result = result.concat(b[1:]) + return result.bytes def decode(data): bits = Bits(bytes(data)) @@ -35,7 +35,23 @@ def decode(data): text += Bits(byte).ascii return text +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) -register_codec(encode, decode, "noVow7") + 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) + + +register_codec(encode, decode,"novow7") \ No newline at end of file