diff python/ppci/report.py @ 331:a78b41ff6ad2

Added better recipe files
author Windel Bouwman
date Fri, 07 Feb 2014 12:39:59 +0100
parents
children 86b02c98a717
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/ppci/report.py	Fri Feb 07 12:39:59 2014 +0100
@@ -0,0 +1,93 @@
+
+import logging
+import io
+
+import outstream
+from .c3 import AstPrinter
+from . import logformat
+from .irutils import Writer
+
+class RstFormatter(logging.Formatter):
+    """ Formatter that tries to create an rst document """
+    def __init__(self):
+        super().__init__(fmt=logformat)
+
+    def format(self, record):
+        s = super().format(record)
+        s += '\n'
+        if hasattr(record, 'c3_ast'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. code::', file=f)
+            print('', file=f)
+            AstPrinter().printAst(record.c3_ast, f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'ircode'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. code::', file=f)
+            print('', file=f)
+            Writer('  ').write(record.ircode, f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'irfunc'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. code::', file=f)
+            print('', file=f)
+            Writer('  ').write_function(record.irfunc, f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'ppci_frame'):
+            f = io.StringIO()
+            frame = record.ppci_frame
+            print('', file=f)
+            print('.. code::', file=f)
+            print('', file=f)
+            print('  {}'.format(frame.name), file=f)
+            for i in frame.instructions:
+                print('   {}'.format(i),file=f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'ra_cfg'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. graphviz::', file=f)
+            print('', file=f)
+            print('  digraph G {', file=f)
+            print('    size="8,80";', file=f)
+            cfg = record.ra_cfg
+            cfg.to_dot(f)
+            print('  }', file=f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'ra_ig'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. graphviz::', file=f)
+            print('', file=f)
+            print('  digraph G {', file=f)
+            print('    ratio="compress";', file=f)
+            print('    size="8,80";', file=f)
+            ig = record.ra_ig
+            ig.to_dot(f)
+            print('  }', file=f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        if hasattr(record, 'zcc_outs'):
+            f = io.StringIO()
+            print('', file=f)
+            print('', file=f)
+            print('.. code::', file=f)
+            print('', file=f)
+            outstream.OutputStreamWriter('  ').dump(record.zcc_outs, f)
+            print('', file=f)
+            s += '\n' + f.getvalue()
+        return s
+