class HTMLRenderer(Renderer):
"""Render HTMLElement as HTML."""
+ # TODO: check tags not need to close more strict...
+ UNCLOSABLE_TAGS = ["br", "link", "meta", "img"]
+
def render_inner(self, elem):
texts = []
for child in elem:
texts.append("<" + elem.name + self.attrs2str(elem) + ">")
for child in elem:
self._recursive(child, texts)
- texts.append("</" + elem.name + ">")
+ if not elem.name in self.UNCLOSABLE_TAGS:
+ texts.append("</" + elem.name + ">")
elif elem.is_text():
if elem.text():
texts.append(elem.text())
for i in self:
i._r_get_elements_by_class(cls, buf)
+ # manipulation functions
+ def append_tag(self, tag, attrs):
+ elem = HTMLElement(HTMLElement.TAG, tag, attrs)
+ self.append(elem)
+
# query functions
# TODO: this function is under implementing...
def select(self, expr):
JOIN_TEXT = 0x0040
TRUNC_BR = 0x0100
+ # TODO: check tags not need to close more strict...
+ UNCLOSABLE_TAGS = ["br", "link", "meta", "img", "input"]
def __init__(self):
"Constructor"
# Handlers
def handle_starttag(self, tag, attrs):
# some tags treat as start-end tag.
- if tag in ["br",]:
+ if tag in self.UNCLOSABLE_TAGS:
return self.handle_startendtag(tag, attrs)
elem = HTMLElement(HTMLElement.TAG, tag, attrs)
def handle_endtag(self, tag):
# some tags treat as start-end tag.
- if tag in ["br",]:
+ if tag in self.UNCLOSABLE_TAGS:
return
self._cursor = self._cursor.parent()