#!/usr/bin/env python3 import argparse # TODO: add rest + check if all are there # dict of codes # ingored: #- unnecessary?: 128-255 and 0202-0255 #- duplicates: 0160, 0173, 0130 code_table = { '☺' : '1', '☻' : '2', '♥' : '3', '♦' : '4', '♣' : '5', '♠' : '6', '•' : '7' , '◘' : '8' , '○' : '9' , '◙' : '10', '♂' : '11', '♀' : '12', '♪' : '13', '♫' : '14', '☼' : '15', '►' : '16', '◄' : '17', '↕' : '18', '‼' : '19', '¶' : '20', '§' : '21', '▬' : '22', '↨' : '23', '↑' : '24', '↓' : '25', '→' : '26', '←' : '27', '∟' : '28', '↔' : '29', '▲' : '30', '▼' : '31', ' ' : '32', '!' : '33', '"' : '34', '#' : '35', '$' : '36', '%' : '37', '&' : '38', '\'' : '39', '(' : '40', ')' : '41', '*' : '42', '+' : '43', ',' : '44', '-' : '45', '.' : '46', '/' : '47', '0' : '48', '1' : '49', '2' : '50', '3' : '51', '4' : '52', '5' : '53', '6' : '54', '7' : '55', '8' : '56', '9' : '57', ':' : '58', ';' : '59', '<' : '60', '=' : '61', '>' : '62', '?' : '63', '@' : '64', 'A' : '65', 'B' : '66', 'C' : '67', 'D' : '68', 'E' : '69', 'F' : '70', 'G' : '71', 'H' : '72', 'I' : '73', 'J' : '74', 'K' : '75', 'L' : '76', 'M' : '77', 'N' : '78', 'O' : '79', 'P' : '80', 'Q' : '81', 'R' : '82', 'S' : '83', 'T' : '84', 'U' : '85', 'V' : '86', 'W' : '87', 'X' : '88', 'Y' : '89', 'Z' : '90', '[' : '91', '\\': '92', ']' : '93', '^' : '94', '_' : '95', '`' : '96', 'a' : '97', 'b' : '98', 'c' : '99', 'd' : '100', 'e' : '101', 'f' : '102', 'g' : '103', 'h' : '104', 'i' : '105', 'j' : '106', 'k' : '107', 'l' : '108', 'm' : '109', 'n' : '110', 'o' : '111', 'p' : '112', 'q' : '113', 'r' : '114', 's' : '115', 't' : '116', 'u' : '117', 'v' : '118', 'w' : '119', 'x' : '120', 'y' : '121', 'z' : '122', '{' : '123', '|' : '124', '}' : '125', '~' : '126', 'Δ' : '127', '€' : '0128', 'ƒ' : '0131', '„' : '0132', '…' : '0133', '†' : '0134', '‡' : '0135', 'ˆ' : '0136', '‰' : '0137', 'Š' : '0138', '‹' : '0139', 'Œ' : '0140', 'Ž' : '0142', '‘' : '0145', '’' : '0146', '“' : '0147', '”' : '0148', '•' : '0149', '–' : '0150', '—' : '0151', '˜' : '0152', '™' : '0153', 'š' : '0154', '›' : '0155', 'œ' : '0156', 'ž' : '0158', 'Ÿ' : '0159', '¡' : '0161', '¢' : '0162', '£' : '0163', '¤' : '0164', '¥' : '0165', '¦' : '0166', '§' : '0167', '¨' : '0168', '©' : '0169', 'ª' : '0170', '«' : '0171', '¬' : '0172', '®' : '0174', '¯' : '0175', '°' : '0176', '±' : '0177', '²' : '0178', '³' : '0179', '´' : '0180', 'µ' : '0181', '¶' : '0182', '·' : '0183', '¸' : '0184', '¹' : '0185', 'º' : '0186', '»' : '0187', '¼' : '0188', '½' : '0189', '¾' : '0190', '¿' : '0191', 'À' : '0192', 'Á' : '0193', 'Â' : '0194', 'Ã' : '0195', 'Ä' : '0196', 'Å' : '0197', 'Æ' : '0198', 'Ç' : '0199', 'È' : '0200', 'É' : '0201', 'Ê' : '0202', } parser = argparse.ArgumentParser(prog='altcon', description='Convert a string to a sequence of altcodes') parser.add_argument("string", help="convert the string to alt codes and return codes as list") parser.add_argument("-d", "--ducky", help="export alt codes to Ducky Script 2.0 compatible commands", action="store_true") args = parser.parse_args() print("Input:", args.string) codes = [code_table[char] for char in args.string] print("Alt codes:", codes) if args.ducky: print("\n** Copy from here for Ducky Script **") for code in codes: print("QUACK ALTCODE", code)