# File lib/rouge/guessers/modeline.rb, line 24
      def filter(lexers)
        # don't bother reading the stream if we've already decided
        return lexers if lexers.size == 1

        source_text = @source
        source_text = source_text.read if source_text.respond_to? :read

        lines = source_text.split(/\r?\n/)

        search_space = (lines.first(@lines) + lines.last(@lines)).join("\n")

        matches = MODELINES.map { |re| re.match(search_space) }.compact
        return lexers unless matches.any?
        
        match_set = Set.new(matches.map { |m| m[1] })
        lexers.select { |l| match_set.include?(l.tag) || l.aliases.any? { |a| match_set.include?(a) } }
      end