aboutsummaryrefslogtreecommitdiff
path: root/mammoth/html
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-12-10 22:01:20 +0000
committerMichael Williamson <mike@zwobble.org>2016-12-10 22:01:20 +0000
commit8661cad2a82b66254fff564f4a514cbd67ad371d (patch)
tree83cf43f5127b7e93575f3fd40ddeb8a1f41e7ee2 /mammoth/html
parentb870478788c35f9aa7902977938f253197b6d6d8 (diff)
Remove self-closing elements from AST
Diffstat (limited to 'mammoth/html')
-rw-r--r--mammoth/html/__init__.py29
-rw-r--r--mammoth/html/nodes.py7
2 files changed, 11 insertions, 25 deletions
diff --git a/mammoth/html/__init__.py b/mammoth/html/__init__.py
index 6e97ead..b397a81 100644
--- a/mammoth/html/__init__.py
+++ b/mammoth/html/__init__.py
@@ -1,5 +1,5 @@
from ..lists import flat_map
-from .nodes import TextNode, Tag, Element, SelfClosingElement, ForceWrite, NodeVisitor
+from .nodes import TextNode, Tag, Element, ForceWrite, NodeVisitor
def text(value):
@@ -24,13 +24,6 @@ def element(tag_names, attributes=None, children=None, collapsible=None, separat
def collapsible_element(tag_names, attributes=None, children=None):
return element(tag_names, attributes, children, collapsible=True)
-
-
-def self_closing_element(tag_name, attributes=None):
- if attributes is None:
- attributes = {}
-
- return SelfClosingElement(tag_name, attributes)
force_write = ForceWrite()
@@ -53,14 +46,11 @@ class StripEmpty(NodeVisitor):
def visit_element(self, element):
children = strip_empty(element.children)
- if len(children) == 0:
+ if len(children) == 0 and not element.is_void():
return []
else:
return [Element(element.tag, children)]
- def visit_self_closing_element(self, element):
- return [element]
-
def visit_force_write(self, node):
return [node]
@@ -80,9 +70,6 @@ class _CollapseNode(NodeVisitor):
def visit_element(self, element):
return Element(element.tag, collapse(element.children))
- def visit_self_closing_element(self, element):
- return element
-
def visit_force_write(self, node):
return node
@@ -133,12 +120,12 @@ class _NodeWriter(NodeVisitor):
self._writer.text(node.value)
def visit_element(self, element):
- self._writer.start(element.tag_name, element.attributes)
- self.visit_all(element.children)
- self._writer.end(element.tag_name)
-
- def visit_self_closing_element(self, element):
- self._writer.self_closing(element.tag_name, element.attributes)
+ if element.is_void():
+ self._writer.self_closing(element.tag_name, element.attributes)
+ else:
+ self._writer.start(element.tag_name, element.attributes)
+ self.visit_all(element.children)
+ self._writer.end(element.tag_name)
def visit_force_write(self, element):
pass
diff --git a/mammoth/html/nodes.py b/mammoth/html/nodes.py
index ff31c8c..9c07259 100644
--- a/mammoth/html/nodes.py
+++ b/mammoth/html/nodes.py
@@ -47,11 +47,10 @@ class Element(Node):
def separator(self):
return self.tag.separator
+ _VOID_TAG_NAMES = set(["br", "hr", "img"])
-@cobble.data
-class SelfClosingElement(Node):
- tag_name = cobble.field()
- attributes = cobble.field()
+ def is_void(self):
+ return not self.children and self.tag_name in self._VOID_TAG_NAMES
@cobble.visitable