diff options
author | Reinier Heeres <reinier@heeres.eu> | 2007-11-18 19:34:59 (GMT) |
---|---|---|
committer | Reinier Heeres <reinier@heeres.eu> | 2007-11-18 19:34:59 (GMT) |
commit | f8a8343c92f8ab54614660c235c6e6c18e5464db (patch) | |
tree | c61d024118ce3dc7ca3da8b9e210a65601b9f6e6 /calculate.py | |
parent | 29e05573dd8f69fe474433dac8873fab7aeda6f0 (diff) |
Included support for rational numbers
Diffstat (limited to 'calculate.py')
-rw-r--r-- | calculate.py | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/calculate.py b/calculate.py index 2e98d52..240e1c3 100644 --- a/calculate.py +++ b/calculate.py @@ -48,6 +48,7 @@ from eqnparser import EqnParser from svgimage import SVGImage from decimal import Decimal +from rational import Rational class Equation: def __init__(self, label=None, eqn=None, res=None, col=None, owner=None, str=None): @@ -328,14 +329,14 @@ class Calculate(activity.Activity): _logger.debug('process(): parsing %r, label: %r', s, label) res = self.parser.parse(s) - ansvar = self.parser.get_var('Ans') if type(res) == types.StringType and res.find('</svg>') > -1: res = SVGImage(data=res) # If parsing went ok, see if we have to replace the previous answer # to get a (more) exact result - elif res is not None and ansvar is not None and self.ans_inserted: + elif self.ans_inserted and res is not None: + ansvar = self.format_insert_ans() pos = s.find(ansvar) if len(ansvar) > 6 and pos != -1: s2 = s.replace(ansvar, 'LastEqn') @@ -347,8 +348,7 @@ class Calculate(activity.Activity): # Result ok if res is not None: self.add_equation(eqn) - self.parser.set_var('Ans', self.ml.format_number(eqn.result)) - self.parser.set_var('AnsExact', eqn.result) + self.parser.set_var('Ans', eqn.result) self.parser.set_var('LastEqn', eqn.equation) self.helper.send_message("add_eq", str(eqn)) self.showing_error = False @@ -403,7 +403,7 @@ class Calculate(activity.Activity): def refresh_vars(self): """Create list of TextViews with variables and display""" - reserved = ["Ans", "AnsExact", "LastEqn", "help"] + reserved = ["Ans", "LastEqn", "help"] list = [] for name, value in self.parser.get_vars(): if name in reserved: @@ -758,7 +758,7 @@ class Calculate(activity.Activity): if len(sel) is 2: pos = end elif pos == 0: - ans = self.parser.ml.format_number(self.parser.get_var('Ans')) + ans = self.format_insert_ans() str = ans + str self.ans_inserted = True self.text_entry.insert_text(str, pos) @@ -773,7 +773,7 @@ class Calculate(activity.Activity): or str in self.parser.get_post_operators()) and \ self.parser.get_var('Ans') is not None: # and \ # logic better? (str not in self.parser.get_pre_operators() or str == '+'): - ans = self.parser.ml.format_number(self.parser.get_var('Ans')) + ans = self.format_insert_ans() self.text_entry.set_text(ans + str) self.text_entry.set_position(len(ans) + len(str)) self.ans_inserted = True @@ -805,6 +805,14 @@ class Calculate(activity.Activity): self.add_equation(Equation(str=str(eq_str))) self.refresh_bar() + def format_insert_ans(self): + ans = self.parser.get_var('Ans') + if isinstance(ans, Rational): + ansstr = str(ans) + else: + ansstr = self.ml.format_number(ans) + return ansstr + def main(): win = gtk.Window(gtk.WINDOW_TOPLEVEL) t = Calculate(win) |