diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-09 05:27:58 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-09 05:27:58 +0000 |
commit | 4c718c753e4fa121c76fa5d73055f2d92c0fce8f (patch) | |
tree | 93e3fcb187c0aca80f4be00e700cf1d36a75e042 | |
parent | 7c5c394f097819c30bb7955704a0f5030d0b1743 (diff) |
* 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
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | lib/optparse.rb | 72 | ||||
-rw-r--r-- | lib/optparse/version.rb | 36 |
3 files changed, 83 insertions, 45 deletions
@@ -1,3 +1,7 @@ +Tue Nov 9 14:27:18 2004 Nobuyoshi Nakada <[email protected]> + + * lib/optparse.rb (OptionParser::Officious): moved from DefaultList. + Tue Nov 9 00:50:06 2004 Dave Thomas <[email protected]> * lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri @@ -46,11 +50,11 @@ Sat Nov 6 11:18:59 2004 Tadayoshi Funaba <[email protected]> Fri Nov 5 19:07:16 2004 NARUSE, Yui <[email protected]> - * ext/nkf: follow CVS Head of original nkf. + * ext/nkf: follow CVS Head of original nkf. Fri Nov 5 18:12:42 2004 Hidetoshi NAGAI <[email protected]> - * ext/tk/lib/tk/scrollable.rb: divide Scrollable module into + * ext/tk/lib/tk/scrollable.rb: divide Scrollable module into X_Scrollable and Y_Scrollable * ext/tk/lib/tk/entry.rb: include X_Scrollable instead of Scrollable @@ -100,8 +104,8 @@ Thu Nov 4 21:25:38 2004 Yukihiro Matsumoto <[email protected]> Thu Nov 4 21:13:48 2004 Masaki Suketa <[email protected]> - * ext/win32ole/win32ole.c(typelib_file_from_typelib): search "win16" - entry to get library path. + * ext/win32ole/win32ole.c(typelib_file_from_typelib): search "win16" + entry to get library path. * ext/win32ole/win32ole.c(oletypelib_path): ditto. @@ -140,12 +144,12 @@ Wed Nov 3 17:19:59 2004 Yukihiro Matsumoto <[email protected]> Wed Nov 3 17:02:48 2004 Hidetoshi NAGAI <[email protected]> - * ext/tk/lib/tk.rb: support to use different Tcl commands between + * ext/tk/lib/tk.rb: support to use different Tcl commands between configure and configinfo * ext/tk/lib/font.rb: ditto. - * ext/tk/lib/itemconfig.rb: support to use different Tcl commands + * ext/tk/lib/itemconfig.rb: support to use different Tcl commands between item_configure and item_configinfo * ext/tk/lib/itemfont.rb: ditto. @@ -159,7 +163,7 @@ Wed Nov 3 15:38:28 2004 Kouhei Sutou <[email protected]> * test/rss/*.rb: removed tab width configuration headers. * test/rss/test_maker_{0.9,1.0}.rb: sort -> do_sort. - + * lib/rss/maker/*.rb: changed API to RSS version independence. * lib/rss/maker/base.rb @@ -276,7 +280,7 @@ Sun Oct 31 14:18:56 2004 Minero Aoki <[email protected]> Sat Oct 30 15:24:41 2004 Masaki Suketa <[email protected]> - * ext/win32ole/win32ole.c: add WIN32OLE_TYPELIB class. add + * ext/win32ole/win32ole.c: add WIN32OLE_TYPELIB class. add WIN32OLE#ole_typelib method. * ext/win32ole/tests/testOLETYPELIB.rb: add WIN32OLE_TYPELIB class. diff --git a/lib/optparse.rb b/lib/optparse.rb index 95ed84884f..01facfe02d 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -718,30 +718,38 @@ 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. + Officious['help'] = proc do |parser| + Switch::NoArgument.new do + puts parser.help + exit + end + end + # --version # Shows version string if (({::Version})) is defined. - # - DefaultList.long['help'] = Switch::NoArgument.new do - puts ARGV.options - exit - end - DefaultList.long['version'] = Switch::OptionalArgument.new do |pkg| - if pkg - begin - require 'optparse/version' - rescue LoadError - pkg = nil - else - show_version(*pkg.split(/,/)) + Officious['version'] = proc do |parser| + Switch::OptionalArgument.new do |pkg| + if pkg + begin + require 'optparse/version' + rescue LoadError + else + 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 - unless pkg - v = ARGV.options.ver and puts v - end - exit 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 diff --git a/lib/optparse/version.rb b/lib/optparse/version.rb index 8e99836878..558d9d710b 100644 --- a/lib/optparse/version.rb +++ b/lib/optparse/version.rb @@ -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}" - 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)})" + 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 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) |