renders for packaging
This commit is contained in:
@@ -395,10 +395,10 @@ if __name__ == '__main__':
|
||||
#exp="-2*4(12 + 1)(3-12)"
|
||||
#test(exp)
|
||||
|
||||
#exp="-2+a+(12 + 1)(3-12) : 34a"
|
||||
##test(exp)
|
||||
#e = Expression(exp)
|
||||
#print(e.render(render = tex_render))
|
||||
exp="-2+a+(12 + 1)(3-12) / 34a"
|
||||
#test(exp)
|
||||
e = Expression(exp)
|
||||
print(e.render(render = tex_render))
|
||||
|
||||
#exp="-2*b+a(12 + 1)(3-12)"
|
||||
#test(exp)
|
||||
|
73
pymath/renders.py
Normal file
73
pymath/renders.py
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
|
||||
from .render import Render
|
||||
from .fraction import Fraction
|
||||
from .formal import FormalExp
|
||||
from .generic import first_elem
|
||||
|
||||
# ------------------------
|
||||
# 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) , "}"]
|
||||
|
||||
def texMult(op1,op2):
|
||||
fe = first_elem(op2)
|
||||
if type(fe) == FormalExp or fe.isalpha():
|
||||
if type(op1) == list and op1[0] == "(":
|
||||
return ["(", op1[1:-1], op2, ")"]
|
||||
else:
|
||||
return [op1, op2]
|
||||
else:
|
||||
return [op1, "\\times", op2]
|
||||
|
||||
tex_infix = {"+": " + ", "-": " - ", "*": texMult , ":": ":", "^":"^"}
|
||||
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'
|
||||
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
||||
# cursor: 16 del
|
Reference in New Issue
Block a user