Chris@210: #!/usr/bin/env ruby Chris@210: # CodeRay Executable Chris@210: # Chris@210: # Version: 0.2 Chris@210: # Author: murphy Chris@210: Chris@210: require 'coderay' Chris@210: Chris@210: if ARGV.empty? Chris@210: $stderr.puts <<-USAGE Chris@210: CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de) Chris@210: Chris@210: Usage: Chris@210: coderay file [-] Chris@210: coderay - [-] [< file] [> output] Chris@210: Chris@210: Defaults: Chris@210: lang: based on file extension Chris@210: format: ANSI colorized output for terminal, HTML page for files Chris@210: Chris@210: Examples: Chris@210: coderay foo.rb # colorized output to terminal, based on file extension Chris@210: coderay foo.rb -loc # print LOC count, based on file extension and format Chris@210: coderay foo.rb > foo.html # HTML page output to file, based on extension Chris@210: coderay -ruby < foo.rb # colorized output to terminal, based on lang Chris@210: coderay -ruby -loc < foo.rb # print LOC count, based on lang Chris@210: coderay -ruby -page foo.rb # HTML page output to terminal, based on lang and format Chris@210: coderay -ruby -page foo.rb > foo.html # HTML page output to file, based on lang and format Chris@210: USAGE Chris@210: end Chris@210: Chris@210: first, second = ARGV Chris@210: Chris@210: def read Chris@210: file = ARGV.grep(/^(?!-)/).last Chris@210: if file Chris@210: if File.exist?(file) Chris@210: File.read file Chris@210: else Chris@210: $stderr.puts "No such file: #{file}" Chris@210: end Chris@210: else Chris@210: $stdin.read Chris@210: end Chris@210: end Chris@210: Chris@210: if first Chris@210: if first[/-(\w+)/] == first Chris@210: lang = $1 Chris@210: input = read Chris@210: tokens = :scan Chris@210: else Chris@210: file = first Chris@210: unless File.exist? file Chris@210: $stderr.puts "No such file: #{file}" Chris@210: exit 2 Chris@210: end Chris@210: tokens = CodeRay.scan_file file Chris@210: end Chris@210: else Chris@210: $stderr.puts 'No lang/file given.' Chris@210: exit 1 Chris@210: end Chris@210: Chris@210: if second Chris@210: if second[/-(\w+)/] == second Chris@210: format = $1.to_sym Chris@210: else Chris@210: raise 'invalid format (must be -xxx)' Chris@210: end Chris@210: else Chris@210: if $stdout.tty? Chris@210: format = :term Chris@210: else Chris@210: $stderr.puts 'No format given; setting to default (HTML Page).' Chris@210: format = :page Chris@210: end Chris@210: end Chris@210: Chris@210: if tokens == :scan Chris@210: output = CodeRay::Duo[lang => format].highlight input Chris@210: else Chris@210: output = tokens.encode format Chris@210: end Chris@210: out = $stdout Chris@210: out.puts output