#!/usr/bin/env ruby # CodeRay Executable # # Version: 0.1 # Author: murphy def err msg $stderr.puts msg end begin require 'coderay' if ARGV.empty? puts <<-USAGE CodeRay #{CodeRay::VERSION} (http://rd.cYcnus.de/coderay) Usage: coderay - [-] < file > output coderay file [-] Example: coderay -ruby -statistic < foo.rb coderay codegen.c # generates codegen.c.html USAGE end first, second = ARGV if first if first[/-(\w+)/] == first lang = $1.to_sym input = $stdin.read tokens = :scan elsif first == '-' lang = $1.to_sym input = $stdin.read tokens = :scan else file = first tokens = CodeRay.scan_file file output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/ end else 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 $stderr.puts 'No format given; setting to default (HTML Page)' format = :page end # TODO: allow streaming if tokens == :scan output = CodeRay::Duo[lang => format].highlight input #, :stream => true else output = tokens.encode format end out = $stdout if output_filename output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION if File.exist? output_filename err 'File %s already exists.' % output_filename exit else out = File.open output_filename, 'w' end end out.print output rescue => boom err "Error: #{boom.message}\n" err boom.backtrace err '-' * 50 err ARGV exit 1 end