diff --git a/Text to Morse Code Converter/app.py b/Text to Morse Code Converter/app.py new file mode 100644 index 0000000..687ae41 --- /dev/null +++ b/Text to Morse Code Converter/app.py @@ -0,0 +1,78 @@ +""" +Text-to-Morse Code Converter + +To Run: + python app.py --text "Hello World" + python3 app.py --text "Hello World" +""" + +import argparse +import sys + +MORSE_CODE = { + 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', + 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', + 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', + 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', + 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', + 'Z': '--..', + '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', + '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', + '.': '.-.-.-', ',': '--..--', '?': '..--..', "'": '.----.', '!': '-.-.--', + '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...', ':': '---...', + ';': '-.-.-.', '=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-', + '"': '.-..-.', '$': '...-..-', '@': '.--.-.', +} + + +def text_to_morse(text, unknown_char='?'): + words = [] + for word in text.strip().split(): + morse_letters = [] + for ch in word: + chu = ch.upper() + if chu in MORSE_CODE: + morse_letters.append(MORSE_CODE[chu]) + else: + morse_letters.append(unknown_char) + words.append(morse_letters) + return words + + +def morse_to_string(morse_words, word_sep=' / ', letter_sep=' '): + out_words = [] + for w in morse_words: + out_words.append(letter_sep.join(w)) + return word_sep.join(out_words) + + +def main(argv=None): + p = argparse.ArgumentParser(description='Text → Morse code converter (prints to terminal)') + group = p.add_mutually_exclusive_group(required=True) + group.add_argument('--text', '-t', help='Text to convert (wrap in quotes)') + group.add_argument('--file', '-f', help='Path to a text file to convert') + + p.add_argument('--no-space', action='store_true', help="Don't insert '/' between words in printed output") + p.add_argument('--unknown', default='?', help='Character to use for unsupported characters (default: ? )') + + args = p.parse_args(argv) + + if args.file: + try: + with open(args.file, 'r', encoding='utf-8') as fh: + text = fh.read() + except Exception as e: + print(f"Error reading file: {e}", file=sys.stderr) + sys.exit(2) + else: + text = args.text or '' + + morse = text_to_morse(text, unknown_char=args.unknown) + sep = ' / ' if not args.no_space else ' ' + out = morse_to_string(morse, word_sep=sep) + + print(out) + + +if __name__ == '__main__': + main() \ No newline at end of file