diff --git a/mwparserfromhell/nodes/tag.py b/mwparserfromhell/nodes/tag.py index 25c0708..02b87b4 100644 --- a/mwparserfromhell/nodes/tag.py +++ b/mwparserfromhell/nodes/tag.py @@ -24,7 +24,7 @@ from __future__ import unicode_literals from . import Node, Text from ..compat import str -from ..tag_defs import get_wiki_markup, is_visible +from ..tag_defs import is_visible from ..utils import parse_anything __all__ = ["Tag"] @@ -32,7 +32,7 @@ __all__ = ["Tag"] class Tag(Node): """Represents an HTML-style tag in wikicode, like ````.""" - def __init__(self, tag, contents=None, attrs=None, wiki_markup=False, + def __init__(self, tag, contents=None, attrs=None, wiki_markup=None, self_closing=False, invalid=False, implicit=False, padding="", closing_tag=None): super(Tag, self).__init__() @@ -54,11 +54,10 @@ class Tag(Node): def __unicode__(self): if self.wiki_markup: - open_, close = get_wiki_markup(self.tag) if self.self_closing: - return open_ + return self.wiki_markup else: - return open_ + str(self.contents) + close + return self.wiki_markup + str(self.contents) + self.wiki_markup result = ("`` or ``----`` to replace + ``
``. + """ return self._wiki_markup @property @@ -185,7 +189,7 @@ class Tag(Node): @wiki_markup.setter def wiki_markup(self, value): - self._wiki_markup = bool(value) + self._wiki_markup = str(value) if value else None @self_closing.setter def self_closing(self, value): diff --git a/mwparserfromhell/parser/builder.py b/mwparserfromhell/parser/builder.py index ef55776..196ef14 100644 --- a/mwparserfromhell/parser/builder.py +++ b/mwparserfromhell/parser/builder.py @@ -207,14 +207,14 @@ class Builder(object): """Handle a case where a tag is at the head of the tokens.""" close_tokens = (tokens.TagCloseSelfclose, tokens.TagCloseClose) implicit, attrs, contents, closing_tag = False, [], None, None - wiki_markup, invalid = token.wiki_markup, token.invalid + wiki_markup, invalid = token.wiki_markup, token.invalid or False 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): - padding = token.padding + padding = token.padding or "" tag = self._pop() self._push() elif isinstance(token, tokens.TagOpenClose): @@ -224,7 +224,8 @@ class Builder(object): if isinstance(token, tokens.TagCloseSelfclose): tag = self._pop() self_closing = True - padding, implicit = token.padding, token.implicit + padding = token.padding or "" + implicit = token.implicit or False else: self_closing = False closing_tag = self._pop() diff --git a/mwparserfromhell/parser/tokens.py b/mwparserfromhell/parser/tokens.py index 6dd3446..8c2ea87 100644 --- a/mwparserfromhell/parser/tokens.py +++ b/mwparserfromhell/parser/tokens.py @@ -55,7 +55,7 @@ class Token(object): return False def __getattr__(self, key): - return self._kwargs.get(key, False) + return self._kwargs.get(key) def __setattr__(self, key, value): self._kwargs[key] = value diff --git a/mwparserfromhell/tag_defs.py b/mwparserfromhell/tag_defs.py index c918b4d..94e0ac4 100644 --- a/mwparserfromhell/tag_defs.py +++ b/mwparserfromhell/tag_defs.py @@ -24,8 +24,7 @@ from __future__ import unicode_literals -__all__ = ["get_wiki_markup", "is_parsable", "is_visible", "is_single", - "is_single_only"] +__all__ = ["is_parsable", "is_visible", "is_single", "is_single_only"] PARSER_BLACKLIST = [ # enwiki extensions @ 2013-06-28 @@ -44,21 +43,6 @@ INVISIBLE_TAGS = [ SINGLE_ONLY = ["br", "hr", "meta", "link", "img"] SINGLE = SINGLE_ONLY + ["li", "dt", "dd"] -WIKI_MARKUP = { - "i": {"open": "''", "close": "''"}, - "b": {"open": "'''", "close": "'''"}, - "ul": {"open": "*"}, - "ol": {"open": "#"}, - "dt": {"open": ";"}, - "dd": {"open": ":"}, - "hr": {"open": "----"}, -} - -def get_wiki_markup(tag): - """Return the appropriate wiki markup before and after the given *tag*.""" - data = WIKI_MARKUP[tag.lower()] - return (data.get("open"), data.get("close")) - def is_parsable(tag): """Return if the given *tag*'s contents should be passed to the parser.""" return tag.lower() not in PARSER_BLACKLIST diff --git a/tests/test_tag.py b/tests/test_tag.py index a0fbcf1..7ffce35 100644 --- a/tests/test_tag.py +++ b/tests/test_tag.py @@ -50,8 +50,8 @@ class TestTag(TreeEqualityTestCase): implicit=True) node7 = Tag(wraptext("br"), self_closing=True, invalid=True, padding=" ") - node8 = Tag(wraptext("hr"), wiki_markup=True, self_closing=True) - node9 = Tag(wraptext("i"), wraptext("italics!"), wiki_markup=True) + node8 = Tag(wraptext("hr"), wiki_markup="----", self_closing=True) + node9 = Tag(wraptext("i"), wraptext("italics!"), wiki_markup="''") self.assertEqual("", str(node1)) self.assertEqual('foo', str(node2)) @@ -72,7 +72,7 @@ class TestTag(TreeEqualityTestCase): # foobar node1 = Tag(wrap([node1n1]), wrap([node1n2])) # '''bold text''' - node2 = Tag(wraptext("i"), wrap([node2n1]), wiki_markup=True) + node2 = Tag(wraptext("b"), wrap([node2n1]), wiki_markup="'''") # node3 = Tag(wrap([node3n1]), attrs=[Attribute(wrap([node3n2]), wrap([node3n3])), @@ -159,11 +159,11 @@ class TestTag(TreeEqualityTestCase): def test_wiki_markup(self): """test getter/setter for the wiki_markup attribute""" node = Tag(wraptext("i"), wraptext("italic text")) - self.assertFalse(node.wiki_markup) - node.wiki_markup = True - self.assertTrue(node.wiki_markup) + self.assertIs(None, node.wiki_markup) + node.wiki_markup = "''" + self.assertEqual("''", node.wiki_markup) self.assertEqual("''italic text''", node) - node.wiki_markup = 0 + node.wiki_markup = False self.assertFalse(node.wiki_markup) self.assertEqual("italic text", node)