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
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)