1.1 --- a/moinformat/__init__.py Wed May 03 16:27:07 2017 +0200
1.2 +++ b/moinformat/__init__.py Wed May 03 18:16:06 2017 +0200
1.3 @@ -93,8 +93,8 @@
1.4 "halign" : r"([(:)])",
1.5 "valign" : r"([v^])",
1.6 "colour" : r"(\#[0-9A-F]{6})",
1.7 - "colspan" : r"\|(\d+)",
1.8 - "rowspan" : r"-(\d+)",
1.9 + "colspan" : r"-(\d+)",
1.10 + "rowspan" : r"\|(\d+)",
1.11 "width" : r"(\d+%)",
1.12 "attrname" : r"((?![-\d])[-\w]+)", # not-dash-or-digit dash-or-word-char...
1.13 "attrvalue" : r"""=(?P<x>['"])(.*?)(?P=x)""",
1.14 @@ -300,6 +300,7 @@
1.15
1.16 preceding = items.read_until(["attrvalue"], False)
1.17 if preceding == "":
1.18 + attr.quote = items.read_match(1)
1.19 attr.value = items.read_match(2)
1.20
1.21 attrs.append(attr)
2.1 --- a/moinformat/serialisers.py Wed May 03 16:27:07 2017 +0200
2.2 +++ b/moinformat/serialisers.py Wed May 03 18:16:06 2017 +0200
2.3 @@ -157,7 +157,7 @@
2.4 def rule(self, length):
2.5 self.out("-" * length)
2.6
2.7 - def table_attr(self, name, value, concise):
2.8 + def table_attr(self, name, value, concise, quote):
2.9 if concise:
2.10 if name == "colour": self.out(value)
2.11 elif name == "colspan": self.out("-%s" % value)
2.12 @@ -166,7 +166,8 @@
2.13 elif name == "valign" : self.out(value == "top" and "^" or "v")
2.14 elif name == "width" : self.out(value)
2.15 else:
2.16 - self.out("%s%s" % (escape_text(name), value is not None and "='%s'" % escape_attr(value) or ""))
2.17 + self.out("%s%s" % (escape_text(name), value is not None and
2.18 + "=%s%s%s" % (quote or '"', escape_attr(value), quote or '"') or ""))
2.19
2.20 def text(self, s):
2.21 self.out(s)
2.22 @@ -299,8 +300,9 @@
2.23 def rule(self, length):
2.24 self.out("<hr style='height: %dpt' />" % min(length, 10))
2.25
2.26 - def table_attr(self, name, value, concise):
2.27 - self.out(" %s%s" % (escape_text(name), value is not None and "='%s'" % escape_attr(value) or ""))
2.28 + def table_attr(self, name, value, concise, quote):
2.29 + self.out(" %s%s" % (escape_text(name), value is not None and
2.30 + "='%s'" % escape_attr(value) or ""))
2.31
2.32 def text(self, s):
2.33 self.out(escape_text(s))
3.1 --- a/moinformat/tree.py Wed May 03 16:27:07 2017 +0200
3.2 +++ b/moinformat/tree.py Wed May 03 18:16:06 2017 +0200
3.3 @@ -451,19 +451,20 @@
3.4
3.5 "A table attribute."
3.6
3.7 - def __init__(self, name, value=None, concise=False):
3.8 + def __init__(self, name, value=None, concise=False, quote=None):
3.9 self.name = name
3.10 self.value = value
3.11 self.concise = concise
3.12 + self.quote = quote
3.13
3.14 def __repr__(self):
3.15 - return "TableAttr(%r, %r, %r)" % (self.name, self.value, self.concise)
3.16 + return "TableAttr(%r, %r, %r, %r)" % (self.name, self.value, self.concise, self.quote)
3.17
3.18 def prettyprint(self, indent=""):
3.19 - return "%sTableAttr: name=%r value=%r concise=%r" % (indent, self.name, self.value, self.concise)
3.20 + return "%sTableAttr: name=%r value=%r concise=%r quote=%r" % (indent, self.name, self.value, self.concise, self.quote)
3.21
3.22 def to_string(self, out):
3.23 - out.table_attr(self.name, self.value, self.concise)
3.24 + out.table_attr(self.name, self.value, self.concise, self.quote)
3.25
3.26 class Text(Node):
3.27