1.1 --- a/moinformat/tree.py Mon Jul 16 19:19:31 2018 +0200
1.2 +++ b/moinformat/tree.py Tue Jul 17 19:19:59 2018 +0200
1.3 @@ -26,6 +26,11 @@
1.4 def __init__(self, nodes):
1.5 self.nodes = nodes
1.6
1.7 + # In principle, allow blocks within containers. Some nodes may forbid
1.8 + # them to simplify the document structure.
1.9 +
1.10 + self.allow_blocks = True
1.11 +
1.12 def append(self, node):
1.13 self.nodes.append(node)
1.14
1.15 @@ -97,12 +102,13 @@
1.16
1.17 "A region of the page."
1.18
1.19 - def __init__(self, nodes, level=0, indent=0, type=None, transparent=True):
1.20 + def __init__(self, nodes, level=0, indent=0, type=None, transparent=True, extra=None):
1.21 Container.__init__(self, nodes)
1.22 self.level = level
1.23 self.indent = indent
1.24 self.type = type
1.25 self.transparent = transparent
1.26 + self.extra = extra
1.27
1.28 def add(self, node):
1.29 last = self.node(-1)
1.30 @@ -121,14 +127,16 @@
1.31 return self.level and s.startswith("}") and self.level == len(s)
1.32
1.33 def __repr__(self):
1.34 - return "Region(%r, %r, %r, %r)" % (self.nodes, self.level, self.indent, self.type)
1.35 + return "Region(%r, %r, %r, %r, %r, %r)" % (self.nodes, self.level,
1.36 + self.indent, self.type, self.transparent, self.extra)
1.37
1.38 def prettyprint(self, indent=""):
1.39 - l = ["%sRegion: level=%d indent=%d type=%s" % (indent, self.level, self.indent, self.type)]
1.40 + l = ["%sRegion: level=%d indent=%d type=%s extra=%r" % (indent,
1.41 + self.level, self.indent, self.type, self.extra)]
1.42 return self._prettyprint(l, indent)
1.43
1.44 def to_string(self, out):
1.45 - out.start_region(self.level, self.indent, self.type)
1.46 + out.start_region(self.level, self.indent, self.type, self.extra)
1.47
1.48 # Obtain a serialiser for the region, if appropriate.
1.49
1.50 @@ -139,7 +147,7 @@
1.51
1.52 self._to_string(region_out)
1.53
1.54 - out.end_region(self.level, self.indent, self.type)
1.55 + out.end_region(self.level, self.indent, self.type, self.extra)
1.56
1.57
1.58
1.59 @@ -300,6 +308,10 @@
1.60 self.space = space
1.61 self.num = num
1.62
1.63 + # Forbid blocks within list items for simpler structure.
1.64 +
1.65 + self.allow_blocks = False
1.66 +
1.67 def __repr__(self):
1.68 return "ListItem(%r, %r, %r, %r, %r)" % (self.nodes, self.indent, self.marker, self.space, self.num)
1.69
1.70 @@ -353,17 +365,17 @@
1.71 self.attrs = attrs
1.72
1.73 def __repr__(self):
1.74 - return "TableCell(%r, %f)" % (self.nodes, self.attrs)
1.75 + return "TableCell(%r, %r)" % (self.nodes, self.attrs)
1.76
1.77 def prettyprint(self, indent=""):
1.78 l = ["%sTableCell:" % indent]
1.79 - if self.attrs:
1.80 - l.append(self.attrs.prettyprint(indent + " "))
1.81 return self._prettyprint(l, indent)
1.82
1.83 def to_string(self, out):
1.84 out.start_table_cell(self.attrs)
1.85 - self._to_string(out)
1.86 + for node in self.nodes:
1.87 + if node is not self.attrs:
1.88 + node.to_string(out)
1.89 out.end_table_cell()
1.90
1.91 class TableRow(Container):