code: def _really_parse_tag(self):
          
          data = _TagOpenData()
          self._push(contexts.TAG_OPEN)
          self._emit(tokens.TagOpenOpen())
          while True:
              this, next = self._read(), self._read(1)
              can_exit = (not data.context & (data.CX_QUOTED | data.CX_NAME) or
                          data.context & data.CX_NOTE_SPACE)
              if this is self.END:
                  if self._context & contexts.TAG_ATTR:
                      if data.context & data.CX_QUOTED:
                          # Unclosed attribute quote: reset, don't die
                          data.context = data.CX_ATTR_VALUE
                          self._memoize_bad_route()
                          self._pop()
                          self._head = data.reset
                          continue
                      self._pop()
                  self._fail_route()
              elif this == ">" and can_exit:
                  self._handle_tag_close_open(data, tokens.TagCloseOpen)
                  self._context = contexts.TAG_BODY
                  if is_single_only(self._stack[1].text):
                      return self._handle_single_only_tag_end()
                  if is_parsable(self._stack[1].text):
                      return self._parse(push=False)
                  return self._handle_blacklisted_tag()
              elif this == "/" and next == ">" and can_exit:
                  self._handle_tag_close_open(data, tokens.TagCloseSelfclose)
                  return self._pop()
              else:
                  self._handle_tag_data(data, this)
              self._head += 1
docs: Actually parse an HTML tag, starting with the open (``<foo>``).