# File lib/html/sgml-parser.rb, line 208
     def parse_starttag(i)
       rawdata = @rawdata
       j = rawdata.index(Endbracket, i + 1)
       return nil unless j
       attrs = []
       if rawdata[i+1] == ?> #

         # SGML shorthand: <> == <last open tag seen>

         k = j
         tag = @lasttag
       else
         match = rawdata.index(Tagfind, i + 1)
         unless match
           raise RuntimeError, 'unexpected call to parse_starttag'
         end
         k = i + 1 + ($&.length)
         tag = $&.downcase
         @lasttag = tag
       end
       while k < j
         break if rawdata.index(Endtagfind, k)
         break unless rawdata.index(Attrfind, k)
         matched_length = $&.length
         attrname, rest, attrvalue = $1, $2, $3
         if not rest
           attrvalue = '' # was: = attrname

         elsif (attrvalue[0] == ?' && attrvalue[-1] == ?') or
             (attrvalue[0] == ?" && attrvalue[-1] == ?")
           attrvalue = attrvalue[1..-2]
         end
         attrs << [attrname.downcase, attrvalue]
         k += matched_length
       end
       if rawdata[j] == ?> #

         j += 1
       end
       set_range(i, j)
       finish_starttag(tag, attrs)
       return j
     end