summaryrefslogtreecommitdiffstats
path: root/vendor/gems/coderay-0.9.7/bin/coderay
blob: 62101a83aa96a9a28db4f157ff72378816e48439 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env ruby
# CodeRay Executable
#
# Version: 0.2
# Author: murphy

require 'coderay'

if ARGV.empty?
  $stderr.puts <<-USAGE
CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de)

Usage:
  coderay file [-<format>]
  coderay -<lang> [-<format>] [< file] [> output]

Defaults:
  lang:   based on file extension
  format: ANSI colorized output for terminal, HTML page for files

Examples:
  coderay foo.rb                         # colorized output to terminal, based on file extension
  coderay foo.rb -loc                    # print LOC count, based on file extension and format
  coderay foo.rb > foo.html              # HTML page output to file, based on extension
  coderay -ruby < foo.rb                 # colorized output to terminal, based on lang
  coderay -ruby -loc < foo.rb            # print LOC count, based on lang
  coderay -ruby -page foo.rb             # HTML page output to terminal, based on lang and format
  coderay -ruby -page foo.rb > foo.html  # HTML page output to file, based on lang and format
  USAGE
end

first, second = ARGV

def read
  file = ARGV.grep(/^(?!-)/).last
  if file
    if File.exist?(file)
      File.read file
    else
      $stderr.puts "No such file: #{file}"
    end
  else
    $stdin.read
  end
end

if first
  if first[/-(\w+)/] == first
    lang = $1
    input = read
    tokens = :scan
  else
    file = first
    unless File.exist? file
      $stderr.puts "No such file: #{file}"
      exit 2
    end
    tokens = CodeRay.scan_file file
  end
else
  $stderr.puts 'No lang/file given.'
  exit 1
end

if second
  if second[/-(\w+)/] == second
    format = $1.to_sym
  else
    raise 'invalid format (must be -xxx)'
  end
else
  if $stdout.tty?
    format = :term
  else
    $stderr.puts 'No format given; setting to default (HTML Page).'
    format = :page
  end
end

if tokens == :scan
  output = CodeRay::Duo[lang => format].highlight input
else
  output = tokens.encode format
end
out = $stdout
out.puts output