83 lines
1.7 KiB
Plaintext
83 lines
1.7 KiB
Plaintext
|
#!/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
|