83 lines
1.7 KiB
Ruby
83 lines
1.7 KiB
Ruby
#!/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 -<lang> [-<format>] < file > output
|
|
coderay file [-<format>]
|
|
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
|