Mercurial > hg > soundsoftware-site
annotate vendor/gems/coderay-0.9.7/bin/coderay @ 855:7294e8db2515 bug_162
Close obsolete branch bug_162
| author | Chris Cannam |
|---|---|
| date | Thu, 14 Jul 2011 11:59:19 +0100 |
| parents | 0579821a129a |
| children |
| rev | line source |
|---|---|
| Chris@210 | 1 #!/usr/bin/env ruby |
| Chris@210 | 2 # CodeRay Executable |
| Chris@210 | 3 # |
| Chris@210 | 4 # Version: 0.2 |
| Chris@210 | 5 # Author: murphy |
| Chris@210 | 6 |
| Chris@210 | 7 require 'coderay' |
| Chris@210 | 8 |
| Chris@210 | 9 if ARGV.empty? |
| Chris@210 | 10 $stderr.puts <<-USAGE |
| Chris@210 | 11 CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de) |
| Chris@210 | 12 |
| Chris@210 | 13 Usage: |
| Chris@210 | 14 coderay file [-<format>] |
| Chris@210 | 15 coderay -<lang> [-<format>] [< file] [> output] |
| Chris@210 | 16 |
| Chris@210 | 17 Defaults: |
| Chris@210 | 18 lang: based on file extension |
| Chris@210 | 19 format: ANSI colorized output for terminal, HTML page for files |
| Chris@210 | 20 |
| Chris@210 | 21 Examples: |
| Chris@210 | 22 coderay foo.rb # colorized output to terminal, based on file extension |
| Chris@210 | 23 coderay foo.rb -loc # print LOC count, based on file extension and format |
| Chris@210 | 24 coderay foo.rb > foo.html # HTML page output to file, based on extension |
| Chris@210 | 25 coderay -ruby < foo.rb # colorized output to terminal, based on lang |
| Chris@210 | 26 coderay -ruby -loc < foo.rb # print LOC count, based on lang |
| Chris@210 | 27 coderay -ruby -page foo.rb # HTML page output to terminal, based on lang and format |
| Chris@210 | 28 coderay -ruby -page foo.rb > foo.html # HTML page output to file, based on lang and format |
| Chris@210 | 29 USAGE |
| Chris@210 | 30 end |
| Chris@210 | 31 |
| Chris@210 | 32 first, second = ARGV |
| Chris@210 | 33 |
| Chris@210 | 34 def read |
| Chris@210 | 35 file = ARGV.grep(/^(?!-)/).last |
| Chris@210 | 36 if file |
| Chris@210 | 37 if File.exist?(file) |
| Chris@210 | 38 File.read file |
| Chris@210 | 39 else |
| Chris@210 | 40 $stderr.puts "No such file: #{file}" |
| Chris@210 | 41 end |
| Chris@210 | 42 else |
| Chris@210 | 43 $stdin.read |
| Chris@210 | 44 end |
| Chris@210 | 45 end |
| Chris@210 | 46 |
| Chris@210 | 47 if first |
| Chris@210 | 48 if first[/-(\w+)/] == first |
| Chris@210 | 49 lang = $1 |
| Chris@210 | 50 input = read |
| Chris@210 | 51 tokens = :scan |
| Chris@210 | 52 else |
| Chris@210 | 53 file = first |
| Chris@210 | 54 unless File.exist? file |
| Chris@210 | 55 $stderr.puts "No such file: #{file}" |
| Chris@210 | 56 exit 2 |
| Chris@210 | 57 end |
| Chris@210 | 58 tokens = CodeRay.scan_file file |
| Chris@210 | 59 end |
| Chris@210 | 60 else |
| Chris@210 | 61 $stderr.puts 'No lang/file given.' |
| Chris@210 | 62 exit 1 |
| Chris@210 | 63 end |
| Chris@210 | 64 |
| Chris@210 | 65 if second |
| Chris@210 | 66 if second[/-(\w+)/] == second |
| Chris@210 | 67 format = $1.to_sym |
| Chris@210 | 68 else |
| Chris@210 | 69 raise 'invalid format (must be -xxx)' |
| Chris@210 | 70 end |
| Chris@210 | 71 else |
| Chris@210 | 72 if $stdout.tty? |
| Chris@210 | 73 format = :term |
| Chris@210 | 74 else |
| Chris@210 | 75 $stderr.puts 'No format given; setting to default (HTML Page).' |
| Chris@210 | 76 format = :page |
| Chris@210 | 77 end |
| Chris@210 | 78 end |
| Chris@210 | 79 |
| Chris@210 | 80 if tokens == :scan |
| Chris@210 | 81 output = CodeRay::Duo[lang => format].highlight input |
| Chris@210 | 82 else |
| Chris@210 | 83 output = tokens.encode format |
| Chris@210 | 84 end |
| Chris@210 | 85 out = $stdout |
| Chris@210 | 86 out.puts output |
