coderay
86 lines
| 1.9 KiB
| text/plain
|
TextLexer
|
r4619 | #!/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 | ||||