mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/optparse.rb (OptionParser::Officious): moved from DefaultList.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b14c41b918
commit
4f302c1558
3 changed files with 80 additions and 42 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Nov 9 14:27:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/optparse.rb (OptionParser::Officious): moved from DefaultList.
|
||||||
|
|
||||||
Tue Nov 9 00:53:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
|
Tue Nov 9 00:53:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||||
|
|
||||||
* regex.c (slow_match): avoid GCC 3.4.x warnings.
|
* regex.c (slow_match): avoid GCC 3.4.x warnings.
|
||||||
|
|
|
@ -718,31 +718,39 @@ class OptionParser
|
||||||
DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}
|
DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Default options, which never appear in option summary.
|
# OptionParser::Officious
|
||||||
|
# Default options for ARGV, which never appear in option summary.
|
||||||
|
#
|
||||||
|
Officious = {}
|
||||||
|
|
||||||
# --help
|
# --help
|
||||||
# Shows option summary.
|
# Shows option summary.
|
||||||
# --version
|
Officious['help'] = proc do |parser|
|
||||||
# Shows version string if (({::Version})) is defined.
|
Switch::NoArgument.new do
|
||||||
#
|
puts parser.help
|
||||||
DefaultList.long['help'] = Switch::NoArgument.new do
|
|
||||||
puts ARGV.options
|
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
DefaultList.long['version'] = Switch::OptionalArgument.new do |pkg|
|
end
|
||||||
|
|
||||||
|
# --version
|
||||||
|
# Shows version string if (({::Version})) is defined.
|
||||||
|
Officious['version'] = proc do |parser|
|
||||||
|
Switch::OptionalArgument.new do |pkg|
|
||||||
if pkg
|
if pkg
|
||||||
begin
|
begin
|
||||||
require 'optparse/version'
|
require 'optparse/version'
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
pkg = nil
|
|
||||||
else
|
else
|
||||||
show_version(*pkg.split(/,/))
|
show_version(*pkg.split(/,/)) or
|
||||||
end
|
abort("#{parser.program_name}: no version found in package #{pkg}")
|
||||||
end
|
|
||||||
unless pkg
|
|
||||||
v = ARGV.options.ver and puts v
|
|
||||||
end
|
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
v = parser.ver or abort("#{parser.program_name}: version unknown")
|
||||||
|
puts v
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# :startdoc:
|
# :startdoc:
|
||||||
|
|
||||||
|
@ -809,9 +817,18 @@ class OptionParser
|
||||||
@banner = banner
|
@banner = banner
|
||||||
@summary_width = width
|
@summary_width = width
|
||||||
@summary_indent = indent
|
@summary_indent = indent
|
||||||
|
add_officious
|
||||||
yield self if block_given?
|
yield self if block_given?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# :nodoc:
|
||||||
|
def add_officious
|
||||||
|
list = base()
|
||||||
|
Officious.each_pair do |opt, block|
|
||||||
|
list.long[opt] ||= block.call(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
--- OptionParser.terminate([arg])
|
--- OptionParser.terminate([arg])
|
||||||
Terminates option parsing. Optional parameter ((|arg|)) would be
|
Terminates option parsing. Optional parameter ((|arg|)) would be
|
||||||
|
@ -907,7 +924,7 @@ class OptionParser
|
||||||
attr_writer :version, :release
|
attr_writer :version, :release
|
||||||
|
|
||||||
def version
|
def version
|
||||||
@version || (defined?(::Version) && ::Version) || (defined?(::VERSION) && ::VERSION)
|
@version || (defined?(::Version) && ::Version)
|
||||||
end
|
end
|
||||||
|
|
||||||
def release
|
def release
|
||||||
|
@ -1562,6 +1579,21 @@ class OptionParser
|
||||||
s
|
s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
: Regexp
|
||||||
|
Regular expression with option.
|
||||||
|
=end
|
||||||
|
accept(Regexp, %r"\A/((?:\\.|[^\\])*)/([[:alpha:]]+)?\z|.*") do |all, s, o|
|
||||||
|
f = 0
|
||||||
|
if o
|
||||||
|
f |= Regexp::IGNORECASE if /i/ =~ o
|
||||||
|
f |= Regexp::MULTILINE if /m/ =~ o
|
||||||
|
f |= Regexp::EXTENDED if /x/ =~ o
|
||||||
|
k = o.delete("^imx")
|
||||||
|
end
|
||||||
|
Regexp.new(s || all, f, k)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
= Exceptions
|
= Exceptions
|
||||||
|
@ -1646,7 +1678,7 @@ argument.
|
||||||
((<OptionParser::ParseError>))
|
((<OptionParser::ParseError>))
|
||||||
=end #'#"#`#
|
=end #'#"#`#
|
||||||
class NeedlessArgument < ParseError
|
class NeedlessArgument < ParseError
|
||||||
const_set(:Reason, 'needles argument'.freeze)
|
const_set(:Reason, 'needless argument'.freeze)
|
||||||
end
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
|
@ -3,45 +3,47 @@
|
||||||
class << OptionParser
|
class << OptionParser
|
||||||
def show_version(*pkg)
|
def show_version(*pkg)
|
||||||
progname = ARGV.options.program_name
|
progname = ARGV.options.program_name
|
||||||
show = proc do |klass, version|
|
result = false
|
||||||
version = version.join(".") if Array === version
|
show = proc do |klass, cname, version|
|
||||||
str = "#{progname}"
|
str = "#{progname}"
|
||||||
|
unless klass == ::Object and cname == :VERSION
|
||||||
|
version = version.join(".") if Array === version
|
||||||
str << ": #{klass}" unless klass == Object
|
str << ": #{klass}" unless klass == Object
|
||||||
str << " version #{version}"
|
str << " version #{version}"
|
||||||
case
|
end
|
||||||
when klass.const_defined?(:Release)
|
[:Release, :RELEASE].find do |rel|
|
||||||
str << " (#{klass.const_get(:Release)})"
|
if klass.const_defined?(rel)
|
||||||
when klass.const_defined?(:RELEASE)
|
str << " (#{klass.const_get(rel)})"
|
||||||
str << " (#{klass.const_get(:Release)})"
|
end
|
||||||
end
|
end
|
||||||
puts str
|
puts str
|
||||||
|
result = true
|
||||||
end
|
end
|
||||||
if pkg.size == 1 and pkg[0] == "all"
|
if pkg.size == 1 and pkg[0] == "all"
|
||||||
self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
|
self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
|
||||||
unless cname[1] == ?e and klass.const_defined?(:Version)
|
unless cname[1] == ?e and klass.const_defined?(:Version)
|
||||||
show.call(klass, version)
|
show.call(klass, cname.intern, version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
pkg.each do |pkg|
|
pkg.each do |pkg|
|
||||||
/\A[A-Z]\w*((::|\/)[A-Z]\w*)*\z/ni =~ pkg or next
|
|
||||||
begin
|
begin
|
||||||
pkg = eval(pkg)
|
pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
|
||||||
v = case
|
v = case
|
||||||
when pkg.const_defined?(:Version)
|
when pkg.const_defined?(:Version)
|
||||||
pkg.const_get(:Version)
|
pkg.const_get(n = :Version)
|
||||||
when pkg.const_defined?(:VERSION)
|
when pkg.const_defined?(:VERSION)
|
||||||
pkg.const_get(:VERSION)
|
pkg.const_get(n = :VERSION)
|
||||||
else
|
else
|
||||||
|
n = nil
|
||||||
"unknown"
|
"unknown"
|
||||||
end
|
end
|
||||||
show.call(pkg, v)
|
show.call(pkg, n, v)
|
||||||
rescue NameError
|
rescue NameError
|
||||||
puts "#{progname}: #$!"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
exit
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
def each_const(path, klass = ::Object)
|
def each_const(path, klass = ::Object)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue