# File lib/html/sgml-parser.rb, line 103
     def goahead(_end)
       rawdata = @rawdata
       i = 0
       n = rawdata.length
       while i < n
         if @nomoretags
           i = handle_data_range(rawdata, i, n)
           break
         end
         j = rawdata.index(Interesting, i)
         j = n unless j
         i = handle_data_range(rawdata, i, j)
         break if (i == n)
         if rawdata[i] == ?< #

           if rawdata.index(Starttagopen, i) == i
             if @literal
               i = handle_data_range(rawdata, i, i+1)
               next
             end
             k = parse_starttag(i)
             break unless k
             i = k
             next
           end
           if rawdata.index(Endtagopen, i) == i
             k = parse_endtag(i)
             break unless k
             i = k
             @literal = false
             next
           end
           if rawdata.index(Commentopen, i) == i
             if @literal
               i = handle_data_range(rawdata, i, i+1)
               next
             end
             k = parse_comment(i)
             break unless k
             i += k
             next
           end
           if rawdata.index(Special, i) == i
             if @literal
               i = handle_data_range(rawdata, i, i+1)
               next
             end
             k = parse_special(i)
             break unless k
             i += k
             next
           end
         elsif rawdata[i] == ?& #

           if rawdata.index(Charref, i) == i
             end_index = i + $&.length
             end_index -= 1 unless rawdata[end_index-1] == ?;
             set_range(i, end_index)
             handle_charref($1)
             i = end_index
             next
           end
           if rawdata.index(Entityref, i) == i
             end_index = i + $&.length
             end_index -= 1 unless rawdata[end_index-1] == ?;
             set_range(i, end_index)
             handle_entityref($1)
             i = end_index
             next
           end
         else
           raise RuntimeError, 'neither < nor & ??'
         end
         # We get here only if incomplete matches but

         # nothing else

         match = rawdata.index(Incomplete, i)
         unless match == i
           i = handle_data_range(rawdata, i, i+1)
           next
         end
         j = match + $&.length
         break if j == n # Really incomplete

         i = handle_data_range(rawdata, i, j)
       end
       # end while

       if _end and i < n
         i = handle_data_range(rawdata, i, n)
       end
       @rawdata = rawdata[i..-1]
       @offset += i
     end