コード例 #1
1
ファイル: NextClass.py プロジェクト: Timaster/Next
	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 = []
コード例 #2
0
 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()
コード例 #3
0
ファイル: NextClass.py プロジェクト: Timaster/Next
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):
コード例 #4
0
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()