87 lines
1.9 KiB
Plaintext
87 lines
1.9 KiB
Plaintext
|
#!/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 [-<format>]
|
||
|
coderay -<lang> [-<format>] [< 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
|