* lib/optparse.rb (OptionParser::Officious): moved from DefaultList.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2004-11-09 05:27:58 +00:00
Родитель 7c5c394f09
Коммит 4c718c753e
3 изменённых файлов: 83 добавлений и 45 удалений

Просмотреть файл

@ -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:50:06 2004 Dave Thomas <dave@pragprog.com>
* lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri

Просмотреть файл

@ -718,31 +718,39 @@ class OptionParser
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
# Shows option summary.
# --version
# Shows version string if (({::Version})) is defined.
#
DefaultList.long['help'] = Switch::NoArgument.new do
puts ARGV.options
Officious['help'] = proc do |parser|
Switch::NoArgument.new do
puts parser.help
exit
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
begin
require 'optparse/version'
rescue LoadError
pkg = nil
else
show_version(*pkg.split(/,/))
end
end
unless pkg
v = ARGV.options.ver and puts v
end
show_version(*pkg.split(/,/)) or
abort("#{parser.program_name}: no version found in package #{pkg}")
exit
end
end
v = parser.ver or abort("#{parser.program_name}: version unknown")
puts v
exit
end
end
# :startdoc:
@ -809,9 +817,18 @@ class OptionParser
@banner = banner
@summary_width = width
@summary_indent = indent
add_officious
yield self if block_given?
end
# :nodoc:
def add_officious
list = base()
Officious.each_pair do |opt, block|
list.long[opt] ||= block.call(self)
end
end
=begin
--- OptionParser.terminate([arg])
Terminates option parsing. Optional parameter ((|arg|)) would be
@ -907,7 +924,7 @@ class OptionParser
attr_writer :version, :release
def version
@version || (defined?(::Version) && ::Version) || (defined?(::VERSION) && ::VERSION)
@version || (defined?(::Version) && ::Version)
end
def release
@ -1562,6 +1579,21 @@ class OptionParser
s
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
= Exceptions
@ -1644,7 +1676,7 @@ argument.
((<OptionParser::ParseError>))
=end #'#"#`#
class NeedlessArgument < ParseError
const_set(:Reason, 'needles argument'.freeze)
const_set(:Reason, 'needless argument'.freeze)
end
=begin

Просмотреть файл

@ -3,45 +3,47 @@
class << OptionParser
def show_version(*pkg)
progname = ARGV.options.program_name
show = proc do |klass, version|
version = version.join(".") if Array === version
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}"
case
when klass.const_defined?(:Release)
str << " (#{klass.const_get(:Release)})"
when klass.const_defined?(:RELEASE)
str << " (#{klass.const_get(:Release)})"
end
[:Release, :RELEASE].find do |rel|
if klass.const_defined?(rel)
str << " (#{klass.const_get(rel)})"
end
end
puts str
result = true
end
if pkg.size == 1 and pkg[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, version)
show.call(klass, cname.intern, version)
end
end
else
pkg.each do |pkg|
/\A[A-Z]\w*((::|\/)[A-Z]\w*)*\z/ni =~ pkg or next
begin
pkg = eval(pkg)
pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
v = case
when pkg.const_defined?(:Version)
pkg.const_get(:Version)
pkg.const_get(n = :Version)
when pkg.const_defined?(:VERSION)
pkg.const_get(:VERSION)
pkg.const_get(n = :VERSION)
else
n = nil
"unknown"
end
show.call(pkg, v)
show.call(pkg, n, v)
rescue NameError
puts "#{progname}: #$!"
end
end
end
exit
result
end
def each_const(path, klass = ::Object)