class Rouge::Guessers::Modeline

Constants

EMACS_MODELINE
jneen

regexen stolen from linguist

MODELINES
VIM_MODELINE_1

First form vim modeline [text]white}{vi:|vim:|ex:{options} ex: 'vim: syntax=ruby'

VIM_MODELINE_2

Second form vim modeline (compatible with some versions of Vi)

text]white}{vi:|vim:|Vim:|ex:se[t

{options}:[text]

ex: 'vim set syntax=ruby:'

Public Class Methods

new(source, opts={}) click to toggle source
# File lib/rouge/guessers/modeline.rb, line 19
def initialize(source, opts={})
  @source = source
  @lines = opts[:lines] || 5
end

Public Instance Methods

filter(lexers) click to toggle source
# 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
  match_set = Set.new(matches.map { |m| m[1] })

  lexers.select { |l| (Set.new([l.tag] + l.aliases) & match_set).any? }
end