331
|
1
|
|
2 import logging
|
|
3 import io
|
|
4
|
342
|
5 from . import outstream
|
331
|
6 from .c3 import AstPrinter
|
|
7 from . import logformat
|
|
8 from .irutils import Writer
|
|
9
|
|
10 class RstFormatter(logging.Formatter):
|
|
11 """ Formatter that tries to create an rst document """
|
|
12 def __init__(self):
|
|
13 super().__init__(fmt=logformat)
|
|
14
|
|
15 def format(self, record):
|
|
16 s = super().format(record)
|
|
17 s += '\n'
|
|
18 if hasattr(record, 'c3_ast'):
|
|
19 f = io.StringIO()
|
|
20 print('', file=f)
|
|
21 print('', file=f)
|
|
22 print('.. code::', file=f)
|
|
23 print('', file=f)
|
|
24 AstPrinter().printAst(record.c3_ast, f)
|
|
25 print('', file=f)
|
|
26 s += '\n' + f.getvalue()
|
|
27 if hasattr(record, 'ircode'):
|
|
28 f = io.StringIO()
|
|
29 print('', file=f)
|
|
30 print('', file=f)
|
|
31 print('.. code::', file=f)
|
|
32 print('', file=f)
|
|
33 Writer(' ').write(record.ircode, f)
|
|
34 print('', file=f)
|
|
35 s += '\n' + f.getvalue()
|
|
36 if hasattr(record, 'irfunc'):
|
|
37 f = io.StringIO()
|
|
38 print('', file=f)
|
|
39 print('', file=f)
|
|
40 print('.. code::', file=f)
|
|
41 print('', file=f)
|
|
42 Writer(' ').write_function(record.irfunc, f)
|
|
43 print('', file=f)
|
|
44 s += '\n' + f.getvalue()
|
|
45 if hasattr(record, 'ppci_frame'):
|
|
46 f = io.StringIO()
|
|
47 frame = record.ppci_frame
|
|
48 print('', file=f)
|
|
49 print('.. code::', file=f)
|
|
50 print('', file=f)
|
|
51 print(' {}'.format(frame.name), file=f)
|
|
52 for i in frame.instructions:
|
|
53 print(' {}'.format(i),file=f)
|
|
54 print('', file=f)
|
|
55 s += '\n' + f.getvalue()
|
|
56 if hasattr(record, 'ra_cfg'):
|
|
57 f = io.StringIO()
|
|
58 print('', file=f)
|
|
59 print('', file=f)
|
|
60 print('.. graphviz::', file=f)
|
|
61 print('', file=f)
|
|
62 print(' digraph G {', file=f)
|
|
63 print(' size="8,80";', file=f)
|
|
64 cfg = record.ra_cfg
|
|
65 cfg.to_dot(f)
|
|
66 print(' }', file=f)
|
|
67 print('', file=f)
|
|
68 s += '\n' + f.getvalue()
|
|
69 if hasattr(record, 'ra_ig'):
|
|
70 f = io.StringIO()
|
|
71 print('', file=f)
|
|
72 print('', file=f)
|
|
73 print('.. graphviz::', file=f)
|
|
74 print('', file=f)
|
|
75 print(' digraph G {', file=f)
|
|
76 print(' ratio="compress";', file=f)
|
|
77 print(' size="8,80";', file=f)
|
|
78 ig = record.ra_ig
|
|
79 ig.to_dot(f)
|
|
80 print(' }', file=f)
|
|
81 print('', file=f)
|
|
82 s += '\n' + f.getvalue()
|
|
83 if hasattr(record, 'zcc_outs'):
|
|
84 f = io.StringIO()
|
|
85 print('', file=f)
|
|
86 print('', file=f)
|
|
87 print('.. code::', file=f)
|
|
88 print('', file=f)
|
|
89 outstream.OutputStreamWriter(' ').dump(record.zcc_outs, f)
|
|
90 print('', file=f)
|
|
91 s += '\n' + f.getvalue()
|
|
92 return s
|
|
93
|