Class: Rouge::CLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/rouge/cli.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.start(argv = ARGV, *a) ⇒ Object


14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rouge/cli.rb', line 14

def self.start(argv=ARGV, *a)
  if argv.include? '-v' or argv.include? '--version'
    puts Rouge.version
    exit 0
  end

  unless %w(highlight style list --help -h help).include?(argv.first)
    argv.unshift 'highlight'
  end

  super(argv, *a)
end

Instance Method Details

#highlight(file = nil) ⇒ Object


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/rouge/cli.rb', line 42

def highlight(file=nil)
  filename = options[:file] || file
  source = filename ? File.read(filename) : $stdin.read

  if options[:lexer].nil?
    lexer_class = Lexer.guess(
      :filename => filename,
      :mimetype => options[:mimetype],
      :source   => source,
    )
  else
    lexer_class = Lexer.find(options[:lexer])
    raise "unknown lexer: #{options[:lexer]}" unless lexer_class
  end

  formatter_class = Formatter.find(options[:formatter])

  # only HTML is supported for now
  formatter = formatter_class.new(normalize_hash_keys(options[:formatter_opts]))
  lexer = lexer_class.new(normalize_hash_keys(options[:lexer_opts]))

  formatter.format(lexer.lex(source), &method(:print))
end

#listObject


76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rouge/cli.rb', line 76

def list
  puts "== Available Lexers =="
  all_lexers = Lexer.all
  max_len = all_lexers.map { |l| l.tag.size }.max

  Lexer.all.each do |lexer|
    desc = "#{lexer.desc}"
    if lexer.aliases.any?
      desc << " [aliases: #{lexer.aliases.join(',')}]"
    end
    puts "%s: %s" % [lexer.tag, desc]
    puts
  end
end

#style(theme_name = 'thankful_eyes') ⇒ Object


68
69
70
71
72
73
# File 'lib/rouge/cli.rb', line 68

def style(theme_name='thankful_eyes')
  theme = Theme.find(theme_name)
  raise "unknown theme: #{theme_name}" unless theme

  theme.new(options).render(&method(:puts))
end