diff options
author | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-11-20 14:41:05 +0000 |
---|---|---|
committer | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-11-20 14:41:05 +0000 |
commit | 4de16dfb245db76d3192ed57a38c50635d8b7015 (patch) | |
tree | a80a44775ad0d08e2f14fbfa802a4a91916b0df2 /bin/erb | |
parent | 5315f0d66741aa8caca75d30953b35733474bf87 (diff) | |
download | bundler-4de16dfb245db76d3192ed57a38c50635d8b7015.tar.gz |
add bin/erb
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bin/erb')
-rwxr-xr-x | bin/erb | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/bin/erb b/bin/erb new file mode 100755 index 0000000000..03e7c47843 --- /dev/null +++ b/bin/erb @@ -0,0 +1,135 @@ +#!/usr/bin/env ruby +# Tiny eRuby --- ERB2 +# Copyright (c) 1999-2000,2002 Masatoshi SEKI +# You can redistribute it and/or modify it under the same terms as Ruby. + +require 'erb' + +class ERB + module Main + def ARGV.switch + return nil if self.empty? + arg = self.shift + return nil if arg == '--' + if arg =~ /^-(.)(.*)/ + return arg if $1 == '-' + raise 'unknown switch "-"' if $2.index('-') + self.unshift "-#{$2}" if $2.size > 0 + "-#{$1}" + else + self.unshift arg + nil + end + end + + def ARGV.req_arg + self.shift || raise('missing argument') + end + + def trim_mode_opt(trim_mode, disable_percent) + return trim_mode if disable_percent + case trim_mode + when 0 + return '%' + when 1 + return '%>' + when 2 + return '%<>' + end + end + module_function :trim_mode_opt + + def run(factory=ERB) + trim_mode = 0 + disable_percent = false + begin + while switch = ARGV.switch + case switch + when '-x' # ruby source + output = true + when '-n' # line number + number = true + when '-v' # verbose + $VERBOSE = true + when '--version' # version + STDERR.puts factory.version + exit + when '-d', '--debug' # debug + $DEBUG = true + when '-r' # require + require ARGV.req_arg + when '-S' # sacurity level + arg = ARGV.req_arg + raise "invalid security level #{arg.dump}" unless arg =~ /^[0-3]$/ + safe_level = arg.to_i + when '-T' # trim mode + arg = ARGV.req_arg + raise "invalid trim mode #{arg.dump}" unless arg =~ /^[0-2]$/ + trim_mode = arg.to_i + when '-K' # KCODE + arg = ARGV.req_arg + case arg.downcase + when 'e', '-e', 'euc' + $KCODE = 'EUC' + when 's', '-s', 'sjis' + $KCODE = 'SJIS' + when 'u', '-u', 'utf8' + $KCODE = 'UTF8' + when 'n', '-n', 'none' + $KCODE = 'NONE' + else + raise "invalid KCODE #{arg.dump}" + end + when '-P' + disable_percent = true + when '--help' + raise "print this help" + else + raise "unknown switch #{switch.dump}" + end + end + rescue # usage + STDERR.puts $!.to_s + STDERR.puts File.basename($0) + + " [switches] [inputfile]" + STDERR.puts <<EOU + -x print ruby script + -n print ruby script with line number + -v enable verbose mode + -d set $DBEUG to true + -r [library] load a library + -K [kcode] specify KANJI code-set + -S [safe_level] set $SAFE (0..3) + -T [trim_mode] specify trim_mode (0..2) + -P disregard the lin which starts in "%" +EOU + exit 1 + end + + src = $<.read + exit 2 unless src + trim = trim_mode_opt(trim_mode, disable_percent) + erb = factory.new(src.untaint, safe_level, trim) + if output + if number + l = 1 + for line in erb.src + puts "%3d %s"%[l, line] + l += 1 + end + else + puts erb.src + end + else + erb.run + end + end + module_function :run + end +end + +if __FILE__ == $0 + ERB::Main.run +end + + |