# File lib/html/htmlparser.rb, line 178
178:     def parse_starttag(i)
179:         rawdata = @rawdata
180:         j = rawdata.index(Endbracket, i + 1)
181:         return nil unless j
182:         attrs = []
183:         if rawdata[i+1] == ?> #

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

185:         k = j
186:         tag = @lasttag
187:         else
188:         match = rawdata.index(Tagfind, i + 1)
189:         unless match
190:             raise RuntimeError, 'unexpected call to parse_starttag'
191:         end
192:         k = i + 1 + ($&.length)
193:         tag = $&.downcase
194:         @lasttag = tag
195:         end
196:         while k < j
197:         # Assaf: fixed to allow tag to close itself (XHTML)

198:         break unless idx = rawdata.index(Attrfind, k) and idx < j
199:         matched_length = $&.length
200:         attrname, rest, attrvalue = $1, $2, $3
201:         if not rest
202:             attrvalue = '' # was: = attrname

203:         # Assaf: fixed to handle double quoted attribute values properly

204:         elsif (attrvalue[0] == ?' && attrvalue[-1] == ?') or
205:             (attrvalue[0] == ?" && attrvalue[-1] == ?")
206:             attrvalue = attrvalue[1..-2]
207:         end
208:         attrs << [attrname.downcase, attrvalue]
209:         k += matched_length
210:         end
211:         # Assaf: fixed to allow tag to close itself (XHTML)

212:         if rawdata[j,2] == '/>'
213:         j += 2
214:         finish_starttag(tag, attrs)
215:         finish_endtag(tag)
216:         else
217:         if rawdata[j] == ?> #

218:             j += 1
219:         end
220:         finish_starttag(tag, attrs)
221:         end
222:         return j
223:     end