From 5799d9a48d8ef4fa61ae62a05e02b59e1373f993 Mon Sep 17 00:00:00 2001 From: lafrite Date: Sun, 19 Jan 2014 18:32:32 +0100 Subject: [PATCH] render accept ":" --- pymath/render.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/pymath/render.py b/pymath/render.py index 9ba3d35..58a7272 100644 --- a/pymath/render.py +++ b/pymath/render.py @@ -14,7 +14,11 @@ class Render(object): Those three dictionnaries while define how a postfix expression will be transform into a string. """ +<<<<<<< HEAD PRIORITY = {"^": 4,"*" : 3, "/": 3, ":": 3, "+": 2, "-":2, "(": 1} +======= + PRIORITY = {"*" : 3, "/": 3, ":": 3, "+": 2, "-":2, "(": 1} +>>>>>>> render accept ":" def __init__(self, op_infix = {}, op_postfix = {}, other = {}, join = " ", type_render = {int: str, Fraction: str, FormalExp: str}): """Initiate the render @@ -202,6 +206,53 @@ class flist(list): pass +# ------------------------ +# A console render + +txt_infix = {"+": "+", "-": "-", "*": "*", "/" : "/", ":": ":"} +txt_postfix = {} +txt_other = {"(": "(", ")": ")"} + +txt_render = Render(txt_infix, txt_postfix, txt_other) + +# ------------------------ +# A infix to postfix list convertor + +p2i_infix = {"+": "+", "-": "-", "*": "*", "/" : "/", ":":":"} +p2i_postfix = {} +p2i_other = {"(": "(", ")": ")"} + +post2in_fix = Render(p2i_infix, p2i_postfix, p2i_other, join = False) + +# ------------------------ +# A latex render + +def texSlash(op1, op2): + if not Render.isNumerande(op1) and op1[0] == "(" and op1[-1] == ")": + op1 = op1[1:-1] + if not Render.isNumerande(op2) and op2[0] == "(" and op2[-1] == ")": + op2 = op2[1:-1] + return ["\\frac{" , op1 , "}{" , op2 , "}"] + +def texFrac(frac): + return ["\\frac{" , str(frac._num) , "}{" , str(frac._denom) , "}"] + +tex_infix = {"+": " + ", "-": " - ", "*": " \\times ", ":": ":"} +tex_postfix = {"/": texSlash} +tex_other = {"(": "(", ")": ")"} +tex_type_render = {int: str, Fraction: texFrac, FormalExp: str} + +tex_render = Render(tex_infix, tex_postfix, tex_other, type_render = tex_type_render) + + + +if __name__ == '__main__': + exp = [2, 5, '+', 1, '-', 3, 4, '*', ':'] + print(txt_render(exp)) + exp = [2, 5, '+', 1, '-', 3, 4, '*', '/', 3, 5, '/', ':'] + print(tex_render(exp)) + exp = [2, 5, '+', 1, '-', 3, 4, '*', '/', 3, '+'] + print(post2in_fix(exp)) # ----------------------------- # Reglages pour 'vim'