# File lib/feedparser/sgml-parser.rb, line 65
    def goahead(_end)
      rawdata = @rawdata
      i = 0
      n = rawdata.length
      while i < n
        if @nomoretags
          handle_data(rawdata[i..(n-1)])
          i = n
          break
        end
        j = rawdata.index(Interesting, i)
        j = n unless j
        if i < j
          handle_data(rawdata[i..(j-1)])
        end
        i = j
        break if (i == n)
        if rawdata[i] == ?< #
          if rawdata.index(Starttagopen, i) == i
            if @literal
              handle_data(rawdata[i, 1])
              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
              handle_data(rawdata[i,1])
              i += 1
              next
            end
            k = parse_comment(i)
            break unless k
            i += k
            next
          end
          if rawdata.index(Special, i) == i
            if @literal
              handle_data(rawdata[i, 1])
              i += 1
              next
            end
            k = parse_special(i)
            break unless k
            i += k
            next
          end
        elsif rawdata[i] == ?& #
          if rawdata.index(Charref, i) == i
            i += $&.length
            handle_charref($1)
            i -= 1 unless rawdata[i-1] == ?;
            next
          end
          if rawdata.index(Entityref, i) == i
            i += $&.length
            handle_entityref($1)
            i -= 1 unless rawdata[i-1] == ?;
            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
          handle_data(rawdata[i, 1])
          i += 1
          next
        end
        j = match + $&.length
        break if j == n # Really incomplete
        handle_data(rawdata[i..(j-1)])
        i = j
      end
      # end while
      if _end and i < n
        handle_data(@rawdata[i..(n-1)])
        i = n
      end
      @rawdata = rawdata[i..-1]
    end