#!/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 [-] coderay - [-] [< 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