def __init__(self, name, tag='div'): self.tag = tag self.name = name self.DOM = HTMLTree(name) self.style = {} self.containsLayout = False self.layoutComplete = False self.openChildren = False self.children = []
def __init__(self, html): self._html = html self._pos = 0 self._is_quot = False self._is_value = False self._html_tags = [] self._tree = HTMLTree() self._tag = self._get_tag()
class NextClass: def __init__(self, name, tag='div'): self.tag = tag self.name = name self.DOM = HTMLTree(name) self.style = {} self.containsLayout = False self.layoutComplete = False self.openChildren = False self.children = [] def verifyLayoutBlock(self): if self.layoutComplete: raise NextParseError("Only one class block may contain layout elements. Make sure all content and instances are within a single class definition!") if not self.containsLayout: self.containsLayout = True self.DOM.startTree() def addRule(self, rule, value): value = value.strip() rule = parseRule(rule) params = rule['params'] rule = rule['rule'] if rule == 'listen': if params: raise NextParseError("'listen' rule requires at least one event parameter.") events = params.split() for event in events: HTMLWriter.trees[HTMLWriter.currentTree].addListener(event, rule) elif params: # begin looking at rules that don't accept parameters raise NextParseError("It looks like you are attempting to pass parameters to a rule that does not accept any. (Did you mistype the rule name?)") elif rule == 'img': self.verifyLayoutBlock() CSSWriter.addRule(self.name, "background-image", "url(" + ")") elif rule == 'content': self.verifyLayoutBlock() self.DOM.addContent(value) else: # default to assuming this is a CSS rule. TODO: actually validate CSS rules CSSWriter.addRule(self.name, rule, value) def addInstance(self, classes): self.verifyLayoutBlock() classes.append(IDGenerator()) self.DOM.startTree(classes) def closeInstance(self, classes): self.DOM.endTree() def generate(self):
class HTMLReader: def __init__(self, html): self._html = html self._pos = 0 self._is_quot = False self._is_value = False self._html_tags = [] self._tree = HTMLTree() self._tag = self._get_tag() def __str__(self): return str(self._tree) def _get_tag(self): tag = "" for char in self._html[self._pos:]: self._pos += 1 if self._is_value: if char != "<": tag += char continue else: self._pos -= 1 return tag if char == ">": return char if char == '<': if tag: self._pos -= 1 return tag return char if char == '"' or char == "'": self._is_quot = not self._is_quot if not self._is_quot: return tag continue if not self._is_quot: if char == "/": return char if char == " " or char == "=": if tag: return tag continue tag += char return tag def read(self): while self._pos < len(self._html): if self._tag == '<': tag = self._get_tag() self._is_value = False if tag != '/': new_tag = HTMLTag(tag) self._tree.add_node(Node(new_tag, False)) else: self._tree.close_node() elif self._tag == '/': tag = self._get_tag() if tag == '>': self._tree.close_node() elif self._tag == '>': self._is_value = True tag = self._get_tag() if tag != '<': self._tree.set_value(tag) self._is_value = False else: self._is_value = False continue elif not self._is_value: self._tree.add_attribute(self._tag, self._get_tag()) self._tag = self._get_tag()