#!/usr/bin/env python # coding=utf-8 """ calc.py - Phenny Calculator Module Copyright 2008, Sean B. Palmer, inamidst.com Licensed under the Eiffel Forum License 2. http://inamidst.com/phenny/ """ import re import web r_result = re.compile(r'(?i)(.*?)') r_tag = re.compile(r'<\S+.*?>') subs = [ (' in ', ' -> '), (' over ', ' / '), (u'£', 'GBP '), (u'€', 'EUR '), ('\$', 'USD '), (r'\bKB\b', 'kilobytes'), (r'\bMB\b', 'megabytes'), (r'\bGB\b', 'kilobytes'), ('kbps', '(kilobits / second)'), ('mbps', '(megabits / second)') ] def calc(phenny, input): """Use the Frink online calculator.""" q = input.group(2) if not q: return phenny.say('0?') query = q[:] for a, b in subs: query = re.sub(a, b, query) query = query.rstrip(' \t') precision = 5 if query[-3:] in ('GBP', 'USD', 'EUR', 'NOK'): precision = 2 query = web.urllib.quote(query.encode('utf-8')) uri = 'http://futureboy.homeip.net/fsp/frink.fsp?fromVal=' bytes = web.get(uri + query) m = r_result.search(bytes) if m: result = m.group(1) result = r_tag.sub('', result) # strip span.warning tags result = result.replace('>', '>') result = result.replace('(undefined symbol)', '(?) ') if '.' in result: try: result = str(round(float(result), precision)) except ValueError: pass if not result.strip(): result = '?' elif ' in ' in q: result += ' ' + q.split(' in ', 1)[1] phenny.say(q + ' = ' + result[:350]) else: phenny.reply("Sorry, can't calculate that.") calc.commands = ['calc'] calc.example = '.calc 5 + 3' if __name__ == '__main__': print __doc__.strip()