diff --git a/mwparserfromhell/nodes/tag.py b/mwparserfromhell/nodes/tag.py
index c5f9d84..e9531e7 100644
--- a/mwparserfromhell/nodes/tag.py
+++ b/mwparserfromhell/nodes/tag.py
@@ -35,7 +35,8 @@ class Tag(Node):
def __init__(self, tag, contents=None, attrs=None, wiki_markup=None,
self_closing=False, invalid=False, implicit=False, padding="",
- closing_tag=None, closing_wiki_markup=None):
+ closing_tag=None, wiki_style_separator=None,
+ closing_wiki_markup=None):
super(Tag, self).__init__()
self._tag = tag
if contents is None and not self_closing:
@@ -44,12 +45,6 @@ class Tag(Node):
self._contents = contents
self._attrs = attrs if attrs else []
self._wiki_markup = wiki_markup
- if closing_wiki_markup:
- self._closing_wiki_markup = closing_wiki_markup
- elif wiki_markup and not self_closing:
- self._closing_wiki_markup = wiki_markup
- else:
- self._closing_wiki_markup = None
self._self_closing = self_closing
self._invalid = invalid
self._implicit = implicit
@@ -58,16 +53,28 @@ class Tag(Node):
self._closing_tag = closing_tag
else:
self._closing_tag = tag
+ self._wiki_style_separator = wiki_style_separator
+ if closing_wiki_markup is not None:
+ self._closing_wiki_markup = closing_wiki_markup
+ elif wiki_markup and not self_closing:
+ self._closing_wiki_markup = wiki_markup
+ else:
+ self._closing_wiki_markup = None
def __unicode__(self):
if self.wiki_markup:
- attrs = "".join([str(attr) for attr in self.attributes]) if self.attributes else ""
- close = self.closing_wiki_markup if self.closing_wiki_markup else ""
- padding = self.padding if self.padding else ""
+ if self.attributes:
+ attrs = "".join([str(attr) for attr in self.attributes])
+ else:
+ attrs = ""
+ padding = self.padding or ""
+ separator = self.wiki_style_separator or ""
+ close = self.closing_wiki_markup or ""
if self.self_closing:
- return self.wiki_markup + attrs + padding + close
+ return self.wiki_markup + attrs + padding + separator
else:
- return self.wiki_markup + attrs + padding + str(self.contents) + close
+ return self.wiki_markup + attrs + padding + separator + \
+ str(self.contents) + close
result = ("" if self.invalid else "<") + str(self.tag)
if self.attributes:
@@ -144,20 +151,6 @@ class Tag(Node):
return self._wiki_markup
@property
- def closing_wiki_markup(self):
- """The wikified version of the closing tag to show instead of HTML.
-
- If set to a value, this will be displayed instead of the close tag
- brackets. If tag is :attr:`self_closing` is ``True`` and this is not
- ``None``, then it becomes the self-closing end tag. If
- :attr:`wiki_markup` is set and this has not been set, this is set to the
- value of :attr:`wiki_markup`. If this has been set and
- :attr:`wiki_markup` is set to a ``False`` value, this is set to
- ``None``.
- """
- return self._closing_wiki_markup
-
- @property
def self_closing(self):
"""Whether the tag is self-closing with no content (like ``
``)."""
return self._self_closing
@@ -197,6 +190,27 @@ class Tag(Node):
"""
return self._closing_tag
+ @property
+ def wiki_style_separator(self):
+ """The separator between the padding and content in a wiki markup tag.
+
+ Essentially the wiki equivalent of the TagCloseOpen.
+ """
+ return self._wiki_style_separator
+
+ @property
+ def closing_wiki_markup(self):
+ """The wikified version of the closing tag to show instead of HTML.
+
+ If set to a value, this will be displayed instead of the close tag
+ brackets. If tag is :attr:`self_closing` is ``True`` then this is not
+ displayed. If :attr:`wiki_markup` is set and this has not been set, this
+ is set to the value of :attr:`wiki_markup`. If this has been set and
+ :attr:`wiki_markup` is set to a ``False`` value, this is set to
+ ``None``.
+ """
+ return self._closing_wiki_markup
+
@tag.setter
def tag(self, value):
self._tag = self._closing_tag = parse_anything(value)
@@ -211,10 +225,6 @@ class Tag(Node):
if not value or not self.closing_wiki_markup:
self.closing_wiki_markup = str(value) if value else None
- @closing_wiki_markup.setter
- def closing_wiki_markup(self, value):
- self._closing_wiki_markup = str(value) if value else None
-
@self_closing.setter
def self_closing(self, value):
self._self_closing = bool(value)
@@ -241,6 +251,14 @@ class Tag(Node):
def closing_tag(self, value):
self._closing_tag = parse_anything(value)
+ @wiki_style_separator.setter
+ def wiki_style_separator(self, value):
+ self._wiki_style_separator = str(value) if value else None
+
+ @closing_wiki_markup.setter
+ def closing_wiki_markup(self, value):
+ self._closing_wiki_markup = str(value) if value else None
+
def has(self, name):
"""Return whether any attribute in the tag has the given *name*.
diff --git a/mwparserfromhell/parser/builder.py b/mwparserfromhell/parser/builder.py
index 32cbb93..99a54d1 100644
--- a/mwparserfromhell/parser/builder.py
+++ b/mwparserfromhell/parser/builder.py
@@ -248,13 +248,14 @@ class Builder(object):
close_tokens = (tokens.TagCloseSelfclose, tokens.TagCloseClose)
implicit, attrs, contents, closing_tag = False, [], None, None
wiki_markup, invalid = token.wiki_markup, token.invalid or False
- closing_wiki_markup = None
+ wiki_style_separator, closing_wiki_markup = None, wiki_markup
self._push()
while self._tokens:
token = self._tokens.pop()
if isinstance(token, tokens.TagAttrStart):
attrs.append(self._handle_attribute(token))
elif isinstance(token, tokens.TagCloseOpen):
+ wiki_style_separator = token.wiki_markup
padding = token.padding or ""
tag = self._pop()
self._push()
@@ -273,7 +274,8 @@ class Builder(object):
self_closing = False
closing_tag = self._pop()
return Tag(tag, contents, attrs, wiki_markup, self_closing,
- invalid, implicit, padding, closing_tag, closing_wiki_markup)
+ invalid, implicit, padding, closing_tag,
+ wiki_style_separator, closing_wiki_markup)
else:
self._write(self._handle_token(token))
raise ParserError("_handle_tag() missed a close token")
diff --git a/tests/test_tag.py b/tests/test_tag.py
index 2d67723..c2c751b 100644
--- a/tests/test_tag.py
+++ b/tests/test_tag.py
@@ -171,19 +171,6 @@ class TestTag(TreeEqualityTestCase):
self.assertFalse(node.wiki_markup)
self.assertEqual("italic text", node)
- def test_closing_wiki_markup(self):
- """test getter/setter behavior for closing_wiki_markup attribute"""
- node = Tag(wraptext("table"), wraptext("\n"))
- self.assertIs(None, node.closing_wiki_markup)
- node.wiki_markup = "{|"
- self.assertEqual("{|", node.closing_wiki_markup)
- node.closing_wiki_markup = "|}"
- self.assertEqual("|}", node.closing_wiki_markup)
- self.assertEqual("{|\n|}", node)
- node.wiki_markup = False
- self.assertFalse(node.closing_wiki_markup)
- self.assertEqual("