OSDN Git Service

52477613c6314ee10f5b6d7d4ff96fd6eddfab9b
[redminele/redminele.git] / redmine / vendor / plugins / coderay-0.7.6.227 / bin / coderay
1 #!/usr/bin/env ruby\r
2 # CodeRay Executable\r
3 #\r
4 # Version: 0.1\r
5 # Author: murphy\r
6 \r
7 def err msg\r
8   $stderr.puts msg\r
9 end\r
10 \r
11 begin\r
12   require 'coderay'\r
13 \r
14   if ARGV.empty?\r
15     puts <<-USAGE\r
16 CodeRay #{CodeRay::VERSION} (http://rd.cYcnus.de/coderay)\r
17 Usage:\r
18   coderay -<lang> [-<format>] < file > output\r
19   coderay file [-<format>]\r
20 Example:\r
21   coderay -ruby -statistic < foo.rb\r
22   coderay codegen.c  # generates codegen.c.html\r
23     USAGE\r
24   end\r
25 \r
26   first, second = ARGV\r
27 \r
28   if first\r
29     if first[/-(\w+)/] == first\r
30       lang = $1.to_sym\r
31       input = $stdin.read\r
32       tokens = :scan\r
33     elsif first == '-'\r
34       lang = $1.to_sym\r
35       input = $stdin.read\r
36       tokens = :scan\r
37     else\r
38       file = first\r
39       tokens = CodeRay.scan_file file\r
40       output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/\r
41     end\r
42   else\r
43     puts 'No lang/file given.'\r
44     exit 1\r
45   end\r
46 \r
47   if second\r
48     if second[/-(\w+)/] == second\r
49       format = $1.to_sym\r
50     else\r
51       raise 'Invalid format (must be -xxx).'\r
52     end\r
53   else\r
54     $stderr.puts 'No format given; setting to default (HTML Page)'\r
55     format = :page\r
56   end\r
57   \r
58   # TODO: allow streaming\r
59   if tokens == :scan\r
60     output = CodeRay::Duo[lang => format].highlight input  #, :stream => true\r
61   else\r
62     output = tokens.encode format\r
63   end\r
64   out = $stdout\r
65   if output_filename\r
66     output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION\r
67     if File.exist? output_filename\r
68       err 'File %s already exists.' % output_filename\r
69       exit\r
70     else\r
71       out = File.open output_filename, 'w'\r
72     end\r
73   end\r
74   out.print output\r
75 \r
76 rescue => boom\r
77   err "Error: #{boom.message}\n"\r
78   err boom.backtrace\r
79   err '-' * 50\r
80   err ARGV\r
81   exit 1\r
82 end\r