add table to output
This commit is contained in:
parent
46e07d3988
commit
bae25e220a
@ -28,7 +28,7 @@ def main():
|
||||
tm.step()
|
||||
data.append(tm.info())
|
||||
|
||||
to_docx(args.output_file, data)
|
||||
to_docx(args.output_file, program, data)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -59,16 +59,19 @@ def from_file(filename: str):
|
||||
if symbol == " ":
|
||||
symbol = "λ"
|
||||
|
||||
program[symbol] = []
|
||||
program[symbol] = dict()
|
||||
|
||||
for i, action in enumerate(actions):
|
||||
if not action:
|
||||
continue
|
||||
|
||||
for action in actions:
|
||||
new_symbol, direction, new_state = list(action)
|
||||
|
||||
if new_symbol == "_":
|
||||
new_symbol = 'λ'
|
||||
new_state = int(new_state) - 1
|
||||
|
||||
program[symbol].append([new_symbol, direction, new_state])
|
||||
program[symbol][i] = ([new_symbol, direction, new_state])
|
||||
|
||||
f.close()
|
||||
|
||||
|
@ -3,21 +3,66 @@ from docx.oxml import OxmlElement
|
||||
from docx.oxml.ns import qn
|
||||
from docx.shared import Pt
|
||||
from docx.enum.text import WD_LINE_SPACING
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
|
||||
def to_docx(filename, data):
|
||||
def add_state(p, state):
|
||||
p.add_run('q')
|
||||
index_text = p.add_run(str('z' if state == -1 else state))
|
||||
index_text.font.subscript = True
|
||||
|
||||
def to_docx(filename, program, data):
|
||||
document = Document()
|
||||
section = document.sections[0]
|
||||
|
||||
sectPr = section._sectPr
|
||||
cols = sectPr.xpath('./w:cols')[0]
|
||||
cols.set(qn('w:num'),'2')
|
||||
|
||||
style = document.styles['Normal']
|
||||
|
||||
font = style.font
|
||||
font.name = 'Times New Roman'
|
||||
font.size = Pt(14)
|
||||
|
||||
rows = 0
|
||||
cols = len(program.keys())
|
||||
|
||||
for x in program.keys():
|
||||
rows = max(list(program[x].keys())[-1] + 1, rows)
|
||||
|
||||
table = document.add_table(rows + 1, cols + 1)
|
||||
table.style = 'Table Grid'
|
||||
table.autofit = True
|
||||
table.allow_autofit = True
|
||||
|
||||
for i in range(1, rows + 1):
|
||||
p = table.rows[i].cells[0].paragraphs[0]
|
||||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.DOUBLE
|
||||
add_state(p, i)
|
||||
|
||||
for i, x in enumerate(program.keys()):
|
||||
p = table.rows[0].cells[i + 1].paragraphs[0]
|
||||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.DOUBLE
|
||||
p.add_run(x)
|
||||
|
||||
for j, (value) in enumerate(program.values()):
|
||||
for i, (state, action) in enumerate(value.items()):
|
||||
p = table.rows[state + 1].cells[j + 1].paragraphs[0]
|
||||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.DOUBLE
|
||||
|
||||
symbol, direction, state = action
|
||||
add_state(p, state)
|
||||
p.add_run(symbol)
|
||||
p.add_run('R' if direction == '>' else 'L')
|
||||
|
||||
p = document.add_paragraph()
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.DOUBLE
|
||||
|
||||
for i in range(len(data)):
|
||||
p = document.add_paragraph('K')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user