diff options
Diffstat (limited to 'codespeak')
-rwxr-xr-x | codespeak | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/codespeak b/codespeak new file mode 100755 index 0000000..5d5c6c7 --- /dev/null +++ b/codespeak @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 + +import argparse +import subprocess +import sys + +old_names = { + "ace": " ", + "gal": "<", + "pel": "(", + "bar": "|", + "gap": "\n", + "gap": "\t", + "gap": " ", + "per": ")", + "bas": "\\", + "gar": ">", + "sel": "[", + "buc": "$", + "hax": "#", + "sem": ";", + "cab": "_", + "hep": "-", + "ser": "]", + "cen": "%", + "kel": "{", + "soq": "'", + "col": ":", + "ker": "}", + "tar": "*", + "com": ",", + "ket": "^", + "tec": "`", + "doq": "\"", + "lus": "+", + "tis": "=", + "dot": ".", + "pam": "&", + "wut": "?", + "fas": "/", + "pat": "@", + "sig": "~", + "zap": "!", +} + +old_syms = {v: k for k, v in old_names.items()} + +new_names = { + 'ace': ' ', + 'ban': '>', + 'bar': '|', + 'bat': '\\', + 'bus': '$', + 'cab': '_', + 'cen': '%', + 'col': ':', + 'com': ',', + 'dot': '.', + 'gap': '\n', + 'gap': ' ', + 'gap': '\t', + 'hax': '#', + 'hep': '-', + 'ket': '^', + 'lac': '[', + 'led': '<', + 'lit': '(', + 'lob': '{', + 'lus': '+', + 'mic': ';', + 'net': '/', + 'pad': '&', + 'pat': '@', + 'rac': ']', + 'rit': ')', + 'rob': '}', + 'say': '\'', + 'sig': '~', + 'tar': '*', + 'tec': '\`', + 'tis': '=', + 'wut': '?', + 'yel': '"', + 'zap': '!', + } + +# reverse the above key/vals +new_syms = {v: k for k, v in new_names.items()} + +if sys.platform != 'darwin': + print("sorry, only works on mac") + sys.exit(1) + +def translate(table, string): + words = [] + for i, c in enumerate(string): + if c == ' ' and string[i+1] == ' ': + # we're looking at two spaces, a gap + words.append('gap') + continue + elif c == ' ' and string[i-1] == ' ': + # we just saw a gap, keep going + pass + elif c in table: + words.append(table[c]) + else: + words.append(c) + return ' '.join(words) + + + +parser = argparse.ArgumentParser() +parser.add_argument('-t', '--table', default='new', + help="table of symbols to use, either 'old' or 'new'") +parser.add_argument('-f', '--file', help="file to read", default=None) +parser.add_argument('-c', '--code', default=None, + help='string of hoon code in lieu of --file') + +args = parser.parse_args() + +if args.table == 'old': + selected_table = old_syms +else: + selected_table = new_syms + +if args.code is None: + with open(args.file) as f: + content = f.read() + words = translate(selected_table, content) + subprocess.run(["say", words]) +else: + words = translate(selected_table, args.code) + subprocess.run(["say", words]) |