1.1 --- a/moinformat/tree.py Sun Apr 30 17:59:52 2017 +0200
1.2 +++ b/moinformat/tree.py Sun Apr 30 23:15:22 2017 +0200
1.3 @@ -76,8 +76,14 @@
1.4 def __str__(self):
1.5 return self.prettyprint()
1.6
1.7 - def prettyprint(self, indent=""):
1.8 - pass
1.9 + def _prettyprint(self, l, indent=""):
1.10 + for node in self.nodes:
1.11 + l.append(node.prettyprint(indent + " "))
1.12 + return "\n".join(l)
1.13 +
1.14 + def _to_string(self, out):
1.15 + for node in self.nodes:
1.16 + node.to_string(out)
1.17
1.18 class Region(Container):
1.19
1.20 @@ -115,14 +121,11 @@
1.21
1.22 def prettyprint(self, indent=""):
1.23 l = ["%sRegion: level=%d indent=%d type=%s" % (indent, self.level, self.indent, self.type)]
1.24 - for node in self.nodes:
1.25 - l.append(node.prettyprint(indent + " "))
1.26 - return "\n".join(l)
1.27 + return self._prettyprint(l, indent)
1.28
1.29 def to_string(self, out):
1.30 out.start_region(self.level, self.indent, self.type)
1.31 - for node in self.nodes:
1.32 - node.to_string(out)
1.33 + self._to_string(out)
1.34 out.end_region(self.level, self.indent, self.type)
1.35
1.36 class Block(Container):
1.37 @@ -134,16 +137,54 @@
1.38
1.39 def prettyprint(self, indent=""):
1.40 l = ["%sBlock" % indent]
1.41 - for node in self.nodes:
1.42 - l.append(node.prettyprint(indent + " "))
1.43 - return "\n".join(l)
1.44 + return self._prettyprint(l, indent)
1.45
1.46 def to_string(self, out):
1.47 out.start_block()
1.48 - for node in self.nodes:
1.49 - node.to_string(out)
1.50 + self._to_string(out)
1.51 out.end_block()
1.52
1.53 +class DefItem(Container):
1.54 +
1.55 + "A definition item."
1.56 +
1.57 + def __init__(self, nodes, pad, extra):
1.58 + Container.__init__(self, nodes)
1.59 + self.pad = pad
1.60 + self.extra = extra
1.61 +
1.62 + def __repr__(self):
1.63 + return "DefItem(%r, %r, %r)" % (self.nodes, self.pad, self.extra)
1.64 +
1.65 + def prettyprint(self, indent=""):
1.66 + l = ["%sDefItem: pad=%r extra=%r" % (indent, self.pad, self.extra)]
1.67 + return self._prettyprint(l, indent)
1.68 +
1.69 + def to_string(self, out):
1.70 + out.start_defitem(self.pad, self.extra)
1.71 + self._to_string(out)
1.72 + out.end_defitem(self.pad, self.extra)
1.73 +
1.74 +class DefTerm(Container):
1.75 +
1.76 + "A definition term."
1.77 +
1.78 + def __init__(self, nodes, pad):
1.79 + Container.__init__(self, nodes)
1.80 + self.pad = pad
1.81 +
1.82 + def __repr__(self):
1.83 + return "DefTerm(%r, %r)" % (self.nodes, self.pad)
1.84 +
1.85 + def prettyprint(self, indent=""):
1.86 + l = ["%sDefTerm: pad=%r" % (indent, self.pad)]
1.87 + return self._prettyprint(l, indent)
1.88 +
1.89 + def to_string(self, out):
1.90 + out.start_defterm(self.pad)
1.91 + self._to_string(out)
1.92 + out.end_defterm(self.pad)
1.93 +
1.94 class Heading(Container):
1.95
1.96 "A heading."
1.97 @@ -163,14 +204,11 @@
1.98 def prettyprint(self, indent=""):
1.99 l = ["%sHeading: level=%d start_extra=%r start_pad=%r end_pad=%r end_extra=%r" % (
1.100 indent, self.level, self.start_extra, self.start_pad, self.end_pad, self.end_extra)]
1.101 - for node in self.nodes:
1.102 - l.append(node.prettyprint(indent + " "))
1.103 - return "\n".join(l)
1.104 + return self._prettyprint(l, indent)
1.105
1.106 def to_string(self, out):
1.107 out.start_heading(self.level, self.start_extra, self.start_pad)
1.108 - for node in self.nodes:
1.109 - node.to_string(out)
1.110 + self._to_string(out)
1.111 out.end_heading(self.level, self.end_pad, self.end_extra)
1.112
1.113 class ListItem(Container):
1.114 @@ -188,14 +226,11 @@
1.115
1.116 def prettyprint(self, indent=""):
1.117 l = ["%sListItem: indent=%d marker=%r space=%r" % (indent, self.indent, self.marker, self.space)]
1.118 - for node in self.nodes:
1.119 - l.append(node.prettyprint(indent + " "))
1.120 - return "\n".join(l)
1.121 + return self._prettyprint(l, indent)
1.122
1.123 def to_string(self, out):
1.124 out.start_listitem(self.indent, self.marker, self.space)
1.125 - for node in self.nodes:
1.126 - node.to_string(out)
1.127 + self._to_string(out)
1.128 out.end_listitem(self.indent, self.marker)
1.129
1.130