summaryrefslogtreecommitdiff
path: root/jni/ruby/lib/optparse
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/lib/optparse')
-rw-r--r--jni/ruby/lib/optparse/ac.rb50
-rw-r--r--jni/ruby/lib/optparse/date.rb17
-rw-r--r--jni/ruby/lib/optparse/shellwords.rb6
-rw-r--r--jni/ruby/lib/optparse/time.rb10
-rw-r--r--jni/ruby/lib/optparse/uri.rb6
-rw-r--r--jni/ruby/lib/optparse/version.rb70
6 files changed, 159 insertions, 0 deletions
diff --git a/jni/ruby/lib/optparse/ac.rb b/jni/ruby/lib/optparse/ac.rb
new file mode 100644
index 0000000..6a86260
--- /dev/null
+++ b/jni/ruby/lib/optparse/ac.rb
@@ -0,0 +1,50 @@
+require 'optparse'
+
+class OptionParser::AC < OptionParser
+ private
+
+ def _check_ac_args(name, block)
+ unless /\A\w[-\w]*\z/ =~ name
+ raise ArgumentError, name
+ end
+ unless block
+ raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
+ end
+ end
+
+ def _ac_arg_enable(prefix, name, help_string, block)
+ _check_ac_args(name, block)
+
+ sdesc = []
+ ldesc = ["--#{prefix}-#{name}"]
+ desc = [help_string]
+ q = name.downcase
+ enable = Switch::NoArgument.new(nil, proc {true}, sdesc, ldesc, nil, desc, block)
+ disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, block)
+ top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
+ enable
+ end
+
+ public
+
+ def ac_arg_enable(name, help_string, &block)
+ _ac_arg_enable("enable", name, help_string, block)
+ end
+
+ def ac_arg_disable(name, help_string, &block)
+ _ac_arg_enable("disable", name, help_string, block)
+ end
+
+ def ac_arg_with(name, help_string, &block)
+ _check_ac_args(name, block)
+
+ sdesc = []
+ ldesc = ["--with-#{name}"]
+ desc = [help_string]
+ q = name.downcase
+ with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
+ without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
+ top.append(with, [], ["with-" + q], without, ['without-' + q])
+ with
+ end
+end
diff --git a/jni/ruby/lib/optparse/date.rb b/jni/ruby/lib/optparse/date.rb
new file mode 100644
index 0000000..d680559
--- /dev/null
+++ b/jni/ruby/lib/optparse/date.rb
@@ -0,0 +1,17 @@
+require 'optparse'
+require 'date'
+
+OptionParser.accept(DateTime) do |s,|
+ begin
+ DateTime.parse(s) if s
+ rescue ArgumentError
+ raise OptionParser::InvalidArgument, s
+ end
+end
+OptionParser.accept(Date) do |s,|
+ begin
+ Date.parse(s) if s
+ rescue ArgumentError
+ raise OptionParser::InvalidArgument, s
+ end
+end
diff --git a/jni/ruby/lib/optparse/shellwords.rb b/jni/ruby/lib/optparse/shellwords.rb
new file mode 100644
index 0000000..0422d7c
--- /dev/null
+++ b/jni/ruby/lib/optparse/shellwords.rb
@@ -0,0 +1,6 @@
+# -*- ruby -*-
+
+require 'shellwords'
+require 'optparse'
+
+OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}
diff --git a/jni/ruby/lib/optparse/time.rb b/jni/ruby/lib/optparse/time.rb
new file mode 100644
index 0000000..402cadc
--- /dev/null
+++ b/jni/ruby/lib/optparse/time.rb
@@ -0,0 +1,10 @@
+require 'optparse'
+require 'time'
+
+OptionParser.accept(Time) do |s,|
+ begin
+ (Time.httpdate(s) rescue Time.parse(s)) if s
+ rescue
+ raise OptionParser::InvalidArgument, s
+ end
+end
diff --git a/jni/ruby/lib/optparse/uri.rb b/jni/ruby/lib/optparse/uri.rb
new file mode 100644
index 0000000..024dc69
--- /dev/null
+++ b/jni/ruby/lib/optparse/uri.rb
@@ -0,0 +1,6 @@
+# -*- ruby -*-
+
+require 'optparse'
+require 'uri'
+
+OptionParser.accept(URI) {|s,| URI.parse(s) if s}
diff --git a/jni/ruby/lib/optparse/version.rb b/jni/ruby/lib/optparse/version.rb
new file mode 100644
index 0000000..8525677
--- /dev/null
+++ b/jni/ruby/lib/optparse/version.rb
@@ -0,0 +1,70 @@
+# OptionParser internal utility
+
+class << OptionParser
+ def show_version(*pkgs)
+ progname = ARGV.options.program_name
+ result = false
+ show = proc do |klass, cname, version|
+ str = "#{progname}"
+ unless klass == ::Object and cname == :VERSION
+ version = version.join(".") if Array === version
+ str << ": #{klass}" unless klass == Object
+ str << " version #{version}"
+ end
+ [:Release, :RELEASE].find do |rel|
+ if klass.const_defined?(rel)
+ str << " (#{klass.const_get(rel)})"
+ end
+ end
+ puts str
+ result = true
+ end
+ if pkgs.size == 1 and pkgs[0] == "all"
+ self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
+ unless cname[1] == ?e and klass.const_defined?(:Version)
+ show.call(klass, cname.intern, version)
+ end
+ end
+ else
+ pkgs.each do |pkg|
+ begin
+ pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
+ v = case
+ when pkg.const_defined?(:Version)
+ pkg.const_get(n = :Version)
+ when pkg.const_defined?(:VERSION)
+ pkg.const_get(n = :VERSION)
+ else
+ n = nil
+ "unknown"
+ end
+ show.call(pkg, n, v)
+ rescue NameError
+ end
+ end
+ end
+ result
+ end
+
+ def each_const(path, base = ::Object)
+ path.split(/::|\//).inject(base) do |klass, name|
+ raise NameError, path unless Module === klass
+ klass.constants.grep(/#{name}/i) do |c|
+ klass.const_defined?(c) or next
+ klass.const_get(c)
+ end
+ end
+ end
+
+ def search_const(klass, name)
+ klasses = [klass]
+ while klass = klasses.shift
+ klass.constants.each do |cname|
+ klass.const_defined?(cname) or next
+ const = klass.const_get(cname)
+ yield klass, cname, const if name === cname
+ klasses << const if Module === const and const != ::Object
+ end
+ end
+ end
+end