~testdoc-dev/testdoc/trunk.git

« back to all changes in this revision

Viewing changes to testdoc/formatter.py

  • Committer: Jonathan Lange
  • Date: 2010-09-08 11:42:24 UTC
  • mfrom: (14.1.10)
  • Revision ID: git-v1:f0940e6c8fd4eecfe0d9de582f5daa0eaf6c695f
More formatters!

 * REST, Moin and Shiny formatters
 * Bug 120141 is fixed, testdoc no longer generates documentation for 
   imported tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
    def paragraph(self, text):
32
32
        self.writeln('%s\n' % (text.strip(),))
 
33
 
 
34
 
 
35
class ReSTFormatter(object):
 
36
    """ReST formatter."""
 
37
 
 
38
    def __init__(self, stream):
 
39
        self.stream = stream
 
40
 
 
41
    def writeln(self, line):
 
42
        self.stream.write('%s\n' % (line,))
 
43
 
 
44
    def title(self, name):
 
45
        self.writeln('%s' % ('=' * len(name),))
 
46
        self.writeln('%s' % (name,))
 
47
        self.writeln('%s' % ('=' * len(name),))
 
48
        self.writeln('')
 
49
        self.writeln('.. contents::')
 
50
        self.writeln('')
 
51
        self.writeln('')
 
52
 
 
53
    def section(self, name):
 
54
        self.writeln('')
 
55
        self.writeln('%s' % (name,))
 
56
        self.writeln('%s' % ('=' * len(name),))
 
57
        self.writeln('')
 
58
 
 
59
    def subsection(self, name):
 
60
        self.writeln('%s' % (name,))
 
61
        self.writeln('%s' % ('-' * len(name),))
 
62
        self.writeln('')
 
63
 
 
64
    def paragraph(self, text):
 
65
        self.writeln('%s\n' % (text.strip(),))
 
66
 
 
67
 
 
68
class ShinyFormatter(object):
 
69
    """Coloured, indented output.
 
70
    
 
71
    For use on terminals that support ANSI colour sequences.
 
72
    """
 
73
 
 
74
    _colours = {
 
75
        "black": "30",
 
76
        "red": "31",
 
77
        "green": "32",
 
78
        "bright green": "32;1",
 
79
        "yellow": "33",
 
80
        "bright yellow": "33;1",
 
81
        "blue": "34",
 
82
        "magenta": "35",
 
83
        "cyan": "36",
 
84
        "white": "37",
 
85
        "bright white": "37;1",
 
86
        }
 
87
 
 
88
    def __init__(self, stream):
 
89
        self.stream = stream
 
90
        self._last_indent = 0
 
91
 
 
92
    def writeln(self, line, indent, colour):
 
93
        if indent is None:
 
94
            indent = self._last_indent + 2
 
95
        else:
 
96
            self._last_indent = indent
 
97
        line = ' ' * indent + line
 
98
        if colour is None:
 
99
            self.stream.write(line + '\n')
 
100
        else:
 
101
            colour = self._colours[colour]
 
102
            self.stream.write('\x1b[%sm%s\x1b[0m\n' % (colour, line))
 
103
 
 
104
    def title(self, name):
 
105
        self.writeln(name, 0, 'bright green')
 
106
 
 
107
    def section(self, name):
 
108
        self.writeln(name, 2, 'bright yellow')
 
109
 
 
110
    def subsection(self, name):
 
111
        self.writeln(name, 4, 'bright white')
 
112
 
 
113
    def paragraph(self, text):
 
114
        colour = None
 
115
        if self._last_indent == 0:
 
116
            # title
 
117
            colour = 'green'
 
118
        elif self._last_indent == 2:
 
119
            # section
 
120
            colour = 'yellow'
 
121
        for line in text.strip().splitlines(True):
 
122
            self.writeln(line.rstrip('\n'), None, colour)