# HG changeset patch # User HackBot # Date 1500684056 0 # Node ID ea74d235ff72990523a2493c7deb1e827ba9816c # Parent a40e8e968f756262501d4726391fab329fb80441 ` mv bin/rot13{_stdin,} diff -r a40e8e968f75 -r ea74d235ff72 bin/rot13 --- a/bin/rot13 Fri Jul 21 12:48:55 2017 +0000 +++ b/bin/rot13 Sat Jul 22 00:40:56 2017 +0000 @@ -1,1 +1,29 @@ -print_args_or_input "$@" | rot13_stdin +#!/usr/bin/env python + +import re, sys, unicodedata as U +def tr(c): + m = re.match(r'(.*\bLATIN\b.*\bLETTER )([A-Z])\b(.*)', U.name(c, '')) + if m: + p, q, r = m.groups() + n = ord(q) - ord('A') + try: + return U.lookup(p + chr(ord('A') + (n + 13) % 26) + r) + except KeyError: + return c + return c + +def tr2(c): + d = tr(c) + if d != c: + return d + else: + cs = [unichr(int(x, 16)) for x in U.decomposition(c).split()] + ds = [tr(x) for x in cs] + if cs != ds: + return u''.join(ds) + else: + return c + +for c in unicode(sys.stdin.read(), 'utf8'): + sys.stdout.write(tr2(c).encode('utf8')) + diff -r a40e8e968f75 -r ea74d235ff72 bin/rot13_stdin --- a/bin/rot13_stdin Fri Jul 21 12:48:55 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -import re, sys, unicodedata as U -def tr(c): - m = re.match(r'(.*\bLATIN\b.*\bLETTER )([A-Z])\b(.*)', U.name(c, '')) - if m: - p, q, r = m.groups() - n = ord(q) - ord('A') - try: - return U.lookup(p + chr(ord('A') + (n + 13) % 26) + r) - except KeyError: - return c - return c - -def tr2(c): - d = tr(c) - if d != c: - return d - else: - cs = [unichr(int(x, 16)) for x in U.decomposition(c).split()] - ds = [tr(x) for x in cs] - if cs != ds: - return u''.join(ds) - else: - return c - -for c in unicode(sys.stdin.read(), 'utf8'): - sys.stdout.write(tr2(c).encode('utf8')) -