forked from jon85p/pyENL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexpimp.py
145 lines (135 loc) · 5.39 KB
/
expimp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env python3
'''Funciones para exportar e importar datos'''
def sols2odt(variables, file_name, user_input):
'''
Soluciones a documento Open Document Text
'''
from odf.opendocument import OpenDocumentText
from odf.style import Style, TextProperties
from odf.text import H, P, Span
# Comienza la salida:
textdoc = OpenDocumentText()
# Styles
s = textdoc.styles
h1style = Style(name="Heading 1", family="paragraph")
h1style.addElement(TextProperties(attributes={'fontsize': "24pt",
'fontweight': "bold"}))
s.addElement(h1style)
h2style = Style(name="Heading 2", family="paragraph")
h2style.addElement(TextProperties(attributes={'fontsize': "18pt",
'fontweight': "bold"}))
s.addElement(h2style)
# An automatic style Bold
boldstyle = Style(name="Bold", family="text")
boldprop = TextProperties(fontweight="bold")
boldstyle.addElement(boldprop)
textdoc.automaticstyles.addElement(boldstyle)
# Italic
italicstyle = Style(name="Italic", family="text")
italicprop = TextProperties(fontstyle="italic")
italicstyle.addElement(italicprop)
textdoc.automaticstyles.addElement(italicstyle)
# Text
h = H(outlinelevel=1, stylename=h1style, text="Reporte pyENL")
textdoc.text.addElement(h)
p = P(text='')
textdoc.text.addElement(p)
h = H(outlinelevel=1, stylename=h2style, text="Ecuaciones")
textdoc.text.addElement(h)
p = P(text='')
textdoc.text.addElement(p)
# Añadimos las ecuaciones:
for eqn in user_input:
p = P(text='')
if '<<' in eqn:
comentario = eqn
comentario = comentario.replace('<<', '')
comentario = comentario.replace('>>', '')
boldpart = Span(stylename=boldstyle, text=comentario)
p.addElement(boldpart)
else:
italicpart = Span(stylename=italicstyle, text=eqn)
p.addElement(italicpart)
textdoc.text.addElement(p)
# Ahora añadir las soluciones:
p = P(text='')
textdoc.text.addElement(p)
h = H(outlinelevel=1, stylename=h2style, text="Soluciones")
textdoc.text.addElement(h)
p = P(text='')
textdoc.text.addElement(p)
for variable in variables:
# Primero insertar el nombre de la variable con su valor y finalmente
# El comentario de la misma:
p = P(text=variable.name + ' = ' + str(variable.guess) + ' ' +
str(variable.units))
textdoc.text.addElement(p)
p = P(text=variable.comment)
textdoc.text.addElement(p)
p = P(text='')
textdoc.text.addElement(p)
# Guardar...
textdoc.save(file_name)
def sols2tex(variables, file_name, user_input, autor):
'''
Soluciones a documento TeX
'''
from pylatex import Document, Section, Subsection, Command, Math, Tabular
from pylatex.utils import italic, NoEscape
doc = Document()
doc.preamble.append(Command('title', 'Reporte pyENL'))
doc.preamble.append(Command('author', autor))
doc.preamble.append(Command('date', NoEscape(r'\today')))
doc.append(NoEscape(r'\maketitle'))
with doc.create(Section('Ecuaciones:')):
# Por cada línea de user_input añadir un append y salto de línea
#(si es comentario de usuario)
comentario_user = False
for eqn in user_input:
if '<<' in eqn:
# Entonces es un comentario de usuario
comentario = eqn
comentario = comentario.replace('<<', '')
comentario = comentario.replace('>>', '')
if comentario_user == True:
doc.append('\n' + comentario)
else:
# Esto porque no hay necesidad de salto.
doc.append(comentario)
comentario_user = True
else:
# Entonces no es un comentario sino una ecuación, entonces
# insertar con símbolos matemáticos.
doc.append(Math(data=[eqn]))
comentario_user = False
# Ahora insertar los resultados
with doc.create(Section('Resultados:')):
# Acá viene una tabla con los resultados.
with doc.create(Tabular('rc|cl')) as table:
table.add_hline()
table.add_row(('Variable', 'Valor', 'Descripción', 'Unidades'))
table.add_hline(1, 4)
table.add_empty_row()
# Ahora por cada variable añadir la información requerida:
for variable in variables:
t_var = variable.name # Nombre variable
t_val = variable.guess # Valor de la variable
t_desc = variable.comment # Descripción de la variable
t_unit = variable.units # Unidades de la variable
table.add_row((t_var, t_val, t_desc, t_unit))
#table.add_row(('x', 5, 'Hola', 'm'))
if file_name[-4::] == '.pdf':
doc.generate_pdf(file_name[0:-4])
else:
doc.generate_tex(file_name[0:-4])
def import_ees(ees_file):
'''
Importar texto de documentos EES y convertirlos a formato pyENL
'''
f = open(ees_file, mode='r', encoding='iso8859-1')
salida = f.read()
end = '{$ID$'
texto = salida[20:salida.index(end)]
lista = texto.split('\n')
# TODO Tratar texto EES para compatibilidad con pyENL
return lista