Esempio n. 1
0
    def get_next_symbol(self):
        symbol = Symbol()
        symbol.type = SymbolType.UNKNOWN

        self.scanner.skip_spaces()

        if self.is_open_tag():
            self.scanner.set_next_char()

            if self.scanner.char == '!':
                next_char = self.scanner.peek_next_char()

                if next_char.upper() == 'D':
                    symbol.type = SymbolType.DOCTYPE

                    self.scanner.skip_to_char('>')
                    self.scanner.set_next_char()
                elif next_char == '-':
                    symbol.type = SymbolType.COMMENT

                    while self.scanner.char != '-' and next_char != '>':
                        self.scanner.skip_to_char('-')
                        next_char = self.scanner.peek_next_char()

                    self.scanner.set_next_char()

            elif self.scanner.char == '/':
                self.scanner.set_next_char()

                self.set_tag(symbol)
                self.set_end_tag_type(symbol)

                self.scanner.skip_to_char('>')
                self.scanner.set_next_char()
            else:
                self.set_tag(symbol)
                self.set_start_tag_type(symbol)

                self.set_attributes(symbol)

                self.scanner.skip_to_char('>')
                self.scanner.set_next_char()
        else:
            self.set_text(symbol)
            symbol.type = SymbolType.PLAIN_TEXT

            self.scanner.skip_to_char('<')

        return symbol
Esempio n. 2
0
    def add_sym(self, s_type) -> int:
        """
        Add an empty symbol instance to the syms list.
        Returns index for new symbol at end of list. This may not be
        necessary when using python.

        :param str s_type:
        """
        sym = Symbol()
        sym.type = s_type
        self.syms.append(sym)
        return len(self.syms)