From 38b664f8c509b3d9e815810557d899fe06828e9f Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Tue, 21 Aug 2012 23:44:26 -0400 Subject: [PATCH] Add missing setters for some nodes and extras (#8) --- mwparserfromhell/nodes/extras/attribute.py | 13 ++++++++++++ mwparserfromhell/nodes/extras/parameter.py | 2 +- mwparserfromhell/nodes/heading.py | 12 +++++++++++ mwparserfromhell/nodes/html_entity.py | 23 ++++++++++++++++++++- mwparserfromhell/nodes/tag.py | 32 ++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 2 deletions(-) diff --git a/mwparserfromhell/nodes/extras/attribute.py b/mwparserfromhell/nodes/extras/attribute.py index 3fb448f..648bca0 100644 --- a/mwparserfromhell/nodes/extras/attribute.py +++ b/mwparserfromhell/nodes/extras/attribute.py @@ -24,6 +24,7 @@ from __future__ import unicode_literals from ...compat import str from ...string_mixin import StringMixIn +from ...utils import parse_anything __all__ = ["Attribute"] @@ -62,3 +63,15 @@ class Attribute(StringMixIn): def quoted(self): """Whether the attribute's value is quoted with double quotes.""" return self._quoted + + @name.setter + def name(self, newval): + self._name = parse_anything(newval) + + @value.setter + def value(self, newval): + self._value = parse_anything(newval) + + @quoted.setter + def quoted(self, newval): + self._quoted = bool(newval) diff --git a/mwparserfromhell/nodes/extras/parameter.py b/mwparserfromhell/nodes/extras/parameter.py index b3f53c1..8c5e654 100644 --- a/mwparserfromhell/nodes/extras/parameter.py +++ b/mwparserfromhell/nodes/extras/parameter.py @@ -73,4 +73,4 @@ class Parameter(StringMixIn): @showkey.setter def showkey(self, newval): - self._showkey = newval + self._showkey = bool(newval) diff --git a/mwparserfromhell/nodes/heading.py b/mwparserfromhell/nodes/heading.py index 1d8c5e2..a2b1ca0 100644 --- a/mwparserfromhell/nodes/heading.py +++ b/mwparserfromhell/nodes/heading.py @@ -24,6 +24,7 @@ from __future__ import unicode_literals from . import Node from ..compat import str +from ...utils import parse_anything __all__ = ["Heading"] @@ -60,3 +61,14 @@ class Heading(Node): def level(self): """The heading level, as an integer between 1 and 6, inclusive.""" return self._level + + @title.setter + def title(self, value): + self._title = parse_anything(value) + + @level.setter + def level(self, value): + value = int(value) + if value < 1 or value > 6: + raise ValueError(value) + self._level = value diff --git a/mwparserfromhell/nodes/html_entity.py b/mwparserfromhell/nodes/html_entity.py index a488a4c..a3c6079 100644 --- a/mwparserfromhell/nodes/html_entity.py +++ b/mwparserfromhell/nodes/html_entity.py @@ -23,7 +23,7 @@ from __future__ import unicode_literals from . import Node -from ..compat import htmlentities +from ..compat import htmlentities, str __all__ = ["HTMLEntity"] @@ -116,6 +116,27 @@ class HTMLEntity(Node): """ return self._hex_char + @value.setter + def value(self, newval): + newval = str(newval) + if newval not in htmlentities.entitydefs: + test = int(self.value, 16) + if test < 0 or (test > 0x10FFFF and int(self.value) > 0x10FFFF): + raise ValueError(newval) + self._value = newval + + @named.setter + def named(self, newval): + self._named = bool(newval) + + @hexadecimal.setter + def hexadecimal(self, newval): + self._hexadecimal = bool(newval) + + @hex_char.setter + def hex_char(self, newval): + self._hex_char = bool(newval) + def normalize(self): """Return the unicode character represented by the HTML entity.""" if self.named: diff --git a/mwparserfromhell/nodes/tag.py b/mwparserfromhell/nodes/tag.py index c58db86..5873a49 100644 --- a/mwparserfromhell/nodes/tag.py +++ b/mwparserfromhell/nodes/tag.py @@ -24,6 +24,7 @@ from __future__ import unicode_literals from . import Node, Text from ..compat import str +from ..utils import parse_anything __all__ = ["Tag"] @@ -207,3 +208,34 @@ class Tag(Node): def close_padding(self): """How much spacing to insert before the last closing >.""" return self._close_padding + + @type.setter + def type(self, value): + value = int(value) + if value not in self.TAGS_INVISIBLE | self.TAGS_VISIBLE: + raise ValueError(value) + self._type = value + + @tag.setter + def tag(self, value): + self._tag = parse_anything(value) + + @contents.setter + def contents(self, value): + self._contents = parse_anything(value) + + @showtag.setter + def showtag(self, value): + self._showtag = bool(value) + + @self_closing.setter + def self_closing(self, value): + self._self_closing = bool(value) + + @open_padding.setter + def open_padding(self, value): + self._open_padding = int(value) + + @close_padding.setter + def close_padding(self, value): + self._close_padding = int(value)