summaryrefslogtreecommitdiff
path: root/bin/coderay
diff options
context:
space:
mode:
Diffstat (limited to 'bin/coderay')
-rw-r--r--bin/coderay44
1 files changed, 30 insertions, 14 deletions
diff --git a/bin/coderay b/bin/coderay
index d4239fd..a382a84 100644
--- a/bin/coderay
+++ b/bin/coderay
@@ -16,32 +16,48 @@ begin
if ARGV.empty?
puts <<-USAGE
+CodeRay #{CodeRay::Version} (http://rd.cYcnus.de/coderay)
Usage:
- coderay lang [format] < file > output
- coderay file [format]
+ coderay -lang [-format] < file > output
+ coderay file [-format]
USAGE
end
- unless format = ARGV[1]
- $stderr.puts 'No format given; setting to default (HTML)'
- format = :html
+ first, second = ARGV
+
+ if first
+ if first[/-(\w+)/] == first
+ lang = $1.to_sym
+ input = $stdin.read
+ tokens = CodeRay.scan input, lang
+ elsif first == '-'
+ lang = $1.to_sym
+ input = $stdin.read
+ tokens = CodeRay.scan input, lang
+ else
+ file = first
+ tokens = CodeRay.scan_file file
+ output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/
+ end
+ else
+ raise 'No lang/file given.'
end
- lang = ARGV[0] or raise 'No lang/file given.'
- if lang[/\A:(\w+)\z/]
- lang = $1.to_sym
- input = $stdin.read
- tokens = CodeRay.scan input, lang
+ if second
+ if second[/-(\w+)/] == second
+ format = $1.to_sym
+ else
+ raise 'Invalid format (must be -xxx).'
+ end
else
- file = lang
- tokens = CodeRay.scan_file file
- output_filename = file[0...-File.extname(file).size]
+ $stderr.puts 'No format given; setting to default (HTML)'
+ format = :html
end
output = tokens.encode format
out = $stdout
if output_filename
- output_filename << '.' << CodeRay::Encoders[format]::FILE_EXTENSION
+ output_filename.sub output_ext, CodeRay::Encoders[format]::FILE_EXTENSION
if File.exist? output_filename
err 'File %s already exists.' % output_filename
exit