aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/.document1
-rw-r--r--lib/cgi.rb2
-rw-r--r--lib/forwardable.rb4
-rw-r--r--lib/getoptlong.rb196
-rw-r--r--lib/jcode.rb2
-rw-r--r--lib/mathn.rb8
-rw-r--r--lib/mkmf.rb25
-rw-r--r--lib/optparse.rb12
-rw-r--r--lib/rdoc/parsers/parse_rb.rb2
-rw-r--r--lib/rdoc/ri/ri_paths.rb6
-rw-r--r--lib/runit/assert.rb7
-rw-r--r--lib/runit/testcase.rb2
-rw-r--r--lib/tempfile.rb2
13 files changed, 209 insertions, 60 deletions
diff --git a/lib/.document b/lib/.document
index 3978aa9347..9374ec7fd5 100644
--- a/lib/.document
+++ b/lib/.document
@@ -20,6 +20,7 @@ fileutils.rb
find.rb
forwardable.rb
generator.rb
+getoptlong.rb
logger.rb
matrix.rb
net
diff --git a/lib/cgi.rb b/lib/cgi.rb
index c1627cb521..825be5a0a8 100644
--- a/lib/cgi.rb
+++ b/lib/cgi.rb
@@ -726,6 +726,8 @@ class CGI
when /shift_jis/ni
content = NKF::nkf('-s', content)
options["language"] = "ja" unless options.has_key?("language")
+ when /utf-8/ni
+ content = NKF::nkf('-w', content)
end
end
diff --git a/lib/forwardable.rb b/lib/forwardable.rb
index 3e979a3155..1889f44109 100644
--- a/lib/forwardable.rb
+++ b/lib/forwardable.rb
@@ -93,7 +93,7 @@
# array, like this:
#
# class RecordCollection
-# extends Forwardable
+# extend Forwardable
# def_delegator :@records, :[], :record_number
# end
#
@@ -101,7 +101,7 @@
# all of which delegate to @records, this is how you can do it:
#
# class RecordCollection
-# # extends Forwardable, but we did that above
+# # extend Forwardable, but we did that above
# def_delegators :@records, :size, :<<, :map
# end
# f = Foo.new
diff --git a/lib/getoptlong.rb b/lib/getoptlong.rb
index 8fb302d741..922d25371c 100644
--- a/lib/getoptlong.rb
+++ b/lib/getoptlong.rb
@@ -1,17 +1,94 @@
-# -*- Ruby -*-
-# Copyright (C) 1998, 1999, 2000 Motoyuki Kasahara
#
-# You may redistribute it and/or modify it under the same license
+# GetoptLong for Ruby
+#
+# Copyright (C) 1998, 1999, 2000 Motoyuki Kasahara.
+#
+# You may redistribute and/or modify this library under the same license
# terms as Ruby.
#
+# See GetoptLong for documentation.
+#
+# Additional documents and the latest version of `getoptlong.rb' can be
+# found at http://www.sra.co.jp/people/m-kasahr/ruby/getoptlong/
+# The GetoptLong class allows you to parse command line options similarly to
+# the GNU getopt_long() C library call. Note, however, that GetoptLong is a
+# pure Ruby implementation.
#
-# Documents and latest version of `getoptlong.rb' are found at:
-# http://www.sra.co.jp/people/m-kasahr/ruby/getoptlong/
+# GetoptLong allows for POSIX-style options like <tt>--file</tt> as well
+# as single letter options like <tt>-f</tt>
#
-
+# The empty option <tt>--</tt> (two minus symbols) is used to end option
+# processing. This can be particularly important if options have optional
+# arguments.
#
-# Parse command line options just like GNU getopt_long().
+# Here is a simple example of usage:
+#
+# # == Synopsis
+# #
+# # hello: greets user, demonstrates command line parsing
+# #
+# # == Usage
+# #
+# # hello [OPTION] ... DIR
+# #
+# # -h, --help:
+# # show help
+# #
+# # --repeat x, -n x:
+# # repeat x times
+# #
+# # --name [name]:
+# # greet user by name, if name not supplied default is John
+# #
+# # DIR: The directory in which to issue the greeting.
+#
+# require 'getoptlong'
+# require 'rdoc/usage'
+#
+# opts = GetoptLong.new(
+# [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
+# [ '--repeat', '-n', GetoptLong::REQUIRED_ARGUMENT ],
+# [ '--name', GetoptLong::OPTIONAL_ARGUMENT ]
+# )
+#
+# dir = nil
+# name = nil
+# repetitions = 1
+# opts.each do |opt, arg|
+# case opt
+# when '--help'
+# RDoc::usage
+# when '--repeat'
+# repetitions = arg.to_i
+# when '--name'
+# if arg == ''
+# name = 'John'
+# else
+# name = arg
+# end
+# end
+# end
+#
+# if ARGV.length != 1
+# puts "Missing dir argument (try --help)"
+# exit 0
+# end
+#
+# dir = ARGV.shift
+#
+# Dir.chdir(dir)
+# for i in (1..repetitions)
+# print "Hello"
+# if name
+# print ", #{name}"
+# end
+# puts
+# end
+#
+# Example command line:
+#
+# hello -n 6 --name -- /tmp
#
class GetoptLong
#
@@ -40,13 +117,20 @@ class GetoptLong
class InvalidOption < Error; end
#
- # The arguments are passed to new() as an array of arrays. Each
- # subarray has a number of option names which carry the same
- # meaning, and a ARGUMENT_FLAG, being one of
- # GetoptLong::NO_ARGUMENT, GetoptLong::REQUIRED_ARGUMENT or
- # GetoptLong::OPTIONAL_ARGUMENT. These determine whether the
- # option takes an argument or not, or whether it is optional The
- # actual processing is done later with #each().
+ # Set up option processing.
+ #
+ # The options to support are passed to new() as an array of arrays.
+ # Each sub-array contains any number of String option names which carry
+ # the same meaning, and one of the following flags:
+ #
+ # GetoptLong::NO_ARGUMENT :: Option does not take an argument.
+ #
+ # GetoptLong::REQUIRED_ARGUMENT :: Option always takes an argument.
+ #
+ # GetoptLong::OPTIONAL_ARGUMENT :: Option may or may not take an argument.
+ #
+ # The first option name is considered to be the preferred (canonical) name.
+ # Other than that, the elements of each sub-array can be in any order.
#
def initialize(*arguments)
#
@@ -109,11 +193,53 @@ class GetoptLong
end
#
- # Set the handling of the ordering of options. The supplied
- # argument ordering must be a member of ORDERINGS, i.e one of
- # GetoptLong::REQUIRE_ORDER, GetoptLong::PERMUTE,
- # GetoptLong::RETURN_IN_ORDER. A RuntimeError is raised if
- # option processing has already started.
+ # Set the handling of the ordering of options and arguments.
+ # A RuntimeError is raised if option processing has already started.
+ #
+ # The supplied value must be a member of GetoptLong::ORDERINGS. It alters
+ # the processing of options as follows:
+ #
+ # <b>REQUIRE_ORDER</b> :
+ #
+ # Options are required to occur before non-options.
+ #
+ # Processing of options ends as soon as a word is encountered that has not
+ # been preceded by an appropriate option flag.
+ #
+ # For example, if -a and -b are options which do not take arguments,
+ # parsing command line arguments of '-a one -b two' would result in
+ # 'one', '-b', 'two' being left in ARGV, and only ('-a', '') being
+ # processed as an option/arg pair.
+ #
+ # This is the default ordering, if the environment variable
+ # POSIXLY_CORRECT is set. (This is for compatibility with GNU getopt_long.)
+ #
+ # <b>PERMUTE</b> :
+ #
+ # Options can occur anywhere in the command line parsed. This is the
+ # default behavior.
+ #
+ # Every sequence of words which can be interpreted as an option (with or
+ # without argument) is treated as an option; non-option words are skipped.
+ #
+ # For example, if -a does not require an argument and -b optionally takes
+ # an argument, parsing '-a one -b two three' would result in ('-a','') and
+ # ('-b', 'two') being processed as option/arg pairs, and 'one','three'
+ # being left in ARGV.
+ #
+ # If the ordering is set to PERMUTE but the environment variable
+ # POSIXLY_CORRECT is set, REQUIRE_ORDER is used instead. This is for
+ # compatibility with GNU getopt_long.
+ #
+ # <b>RETURN_IN_ORDER</b> :
+ #
+ # All words on the command line are processed as options. Words not
+ # preceded by a short or long option flag are passed as arguments
+ # with an option of '' (empty string).
+ #
+ # For example, if -a requires an argument but -b does not, a command line
+ # of '-a one -b two three' would result in option/arg pairs of ('-a', 'one')
+ # ('-b', ''), ('', 'two'), ('', 'three') being processed.
#
def ordering=(ordering)
#
@@ -144,7 +270,9 @@ class GetoptLong
attr_reader :ordering
#
- # Set options
+ # Set options. Takes the same argument as GetoptLong.new.
+ #
+ # Raises a RuntimeError if option processing has already started.
#
def set_options(*arguments)
#
@@ -233,7 +361,7 @@ class GetoptLong
alias quiet? quiet
#
- # Terminate option processing.
+ # Explicitly terminate option processing.
#
def terminate
return nil if @status == STATUS_TERMINATED
@@ -253,7 +381,7 @@ class GetoptLong
end
#
- # Examine whether option processing is terminated or not.
+ # Returns true if option processing has terminated, false otherwise.
#
def terminated?
return @status == STATUS_TERMINATED
@@ -286,16 +414,22 @@ class GetoptLong
#
alias error? error
- #
- # Return an error message.
+ # Return the appropriate error message in POSIX-defined format.
+ # If no error has occurred, returns nil.
#
def error_message
return @error_message
end
#
- # Get next option name and its argument as an array.
- # Return nil if the processing is complete (as determined by
+ # Get next option name and its argument, as an Array of two elements.
+ #
+ # The option name is always converted to the first (preferred)
+ # name given in the original options to GetoptLong.new.
+ #
+ # Example: ['--option', 'value']
+ #
+ # Returns nil if the processing is complete (as determined by
# STATUS_TERMINATED).
#
def get
@@ -462,9 +596,15 @@ class GetoptLong
#
alias get_option get
+ # Iterator version of `get'.
+ #
+ # The block is called repeatedly with two arguments:
+ # The first is the option name.
+ # The second is the argument which followed it (if any).
+ # Example: ('--opt', 'value')
#
- # Iterator version of `get', passes the option and the
- # corresponding argument to the supplied block for processing.
+ # The option name is always converted to the first (preferred)
+ # name given in the original options to GetoptLong.new.
#
def each
loop do
diff --git a/lib/jcode.rb b/lib/jcode.rb
index ea90871572..fcf4f04730 100644
--- a/lib/jcode.rb
+++ b/lib/jcode.rb
@@ -174,7 +174,7 @@ class String
def tr_s!(from, to)
return self.delete!(from) if to.length == 0
- pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])\1+/
+ pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])\1*/
if from[0] == ?^
last = /.$/.match(to)[0]
self.gsub!(pattern, last)
diff --git a/lib/mathn.rb b/lib/mathn.rb
index 3108dd2eb7..3dea0afec1 100644
--- a/lib/mathn.rb
+++ b/lib/mathn.rb
@@ -16,14 +16,6 @@ require "matrix.rb"
class Integer
- remove_method(:gcd2)
- def gcd2(other)
- min = self.abs
- max = other.abs
- min, max = max % min, min while min > 0
- max
- end
-
def Integer.from_prime_division(pd)
value = 1
for prime, index in pd
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 421e6c9e71..1d495e8205 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -786,21 +786,26 @@ def find_executable(bin, path = nil)
end
end
-def arg_config(config, *defaults, &block)
- $arg_config << [config, *defaults]
- defaults << nil if !block and defaults.empty?
+def arg_config(config, default=nil, &block)
+ $arg_config << [config, default]
+ defaults = []
+ if default
+ defaults << default
+ elsif !block
+ defaults << nil
+ end
$configure_args.fetch(config.tr('_', '-'), *defaults, &block)
end
-def with_config(config, *defaults)
+def with_config(config, default=nil)
config = config.sub(/^--with[-_]/, '')
val = arg_config("--with-"+config) do
if arg_config("--without-"+config)
false
elsif block_given?
- yield(config, *defaults)
+ yield(config, default)
else
- break *defaults
+ break default
end
end
case val
@@ -813,15 +818,15 @@ def with_config(config, *defaults)
end
end
-def enable_config(config, *defaults)
+def enable_config(config, default=nil)
if arg_config("--enable-"+config)
true
elsif arg_config("--disable-"+config)
false
elsif block_given?
- yield(config, *defaults)
+ yield(config, default)
else
- return *defaults
+ return default
end
end
@@ -1105,7 +1110,7 @@ EXTSTATIC = #{$static || ""}
STATIC_LIB = #{staticlib unless $static.nil?}
}
- install_dirs.each {|d| mfile.print("%-14s= %s\n" % d) if /^[[:upper:]]/ =~ d[0]}
+ install_dirs.each {|*d| mfile.print("%-14s= %s\n" % d) if /^[[:upper:]]/ =~ d[0]}
n = ($extout ? '$(RUBYARCHDIR)/' : '') + '$(TARGET).'
mfile.print %{
TARGET_SO = #{($extout ? '$(RUBYARCHDIR)/' : '')}$(DLLIB)
diff --git a/lib/optparse.rb b/lib/optparse.rb
index 6d1daeb6a0..9c7676f4be 100644
--- a/lib/optparse.rb
+++ b/lib/optparse.rb
@@ -357,7 +357,7 @@ class OptionParser
if conv
val = conv.call(*val)
else
- val = *val
+ val = val[0]
end
return arg, block, val
else
@@ -622,7 +622,7 @@ class OptionParser
if list = __send__(id)
val = list.fetch(key) {return nil}
return val unless block_given?
- yield(val)
+ yield(*val)
end
end
@@ -848,7 +848,7 @@ class OptionParser
# :nodoc:
def add_officious
list = base()
- Officious.each_pair do |opt, block|
+ Officious.each do |opt, block|
list.long[opt] ||= block.call(self)
end
end
@@ -1319,7 +1319,7 @@ class OptionParser
end
begin
opt, sw, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
- sw.call(val) if sw
+ sw.call(*val) if sw
rescue ParseError
raise $!.set_option(arg, rest)
end
@@ -1458,9 +1458,9 @@ class OptionParser
yielded with the found value when succeeded.
=end #'#"#`#
def search(id, key)
- visit(:search, id, key) do |k|
+ visit(:search, id, key) do |*k|
return k unless block_given?
- return yield(k)
+ return yield(*k)
end
end
private :search
diff --git a/lib/rdoc/parsers/parse_rb.rb b/lib/rdoc/parsers/parse_rb.rb
index fedc67e51f..a297719b80 100644
--- a/lib/rdoc/parsers/parse_rb.rb
+++ b/lib/rdoc/parsers/parse_rb.rb
@@ -2555,7 +2555,7 @@ module RDoc
break
when TkCOMMA
else
- warn("unexpected token: '#{tk2.inspect}'") if $DEBBUG
+ warn("unexpected token: '#{tk2.inspect}'") if $DEBUG
break
end
end
diff --git a/lib/rdoc/ri/ri_paths.rb b/lib/rdoc/ri/ri_paths.rb
index c610b6e551..c5526201ea 100644
--- a/lib/rdoc/ri/ri_paths.rb
+++ b/lib/rdoc/ri/ri_paths.rb
@@ -41,5 +41,11 @@ module RI
# This is the search path for 'ri'
PATH = [ SYSDIR, SITEDIR, HOMEDIR ].find_all {|p| p && File.directory?(p)}
+
+ begin
+ require 'rubygems'
+ Dir["#{Gem.path}/doc/*/ri"].each { |path| RI::Paths::PATH << path }
+ rescue LoadError
+ end
end
end
diff --git a/lib/runit/assert.rb b/lib/runit/assert.rb
index c752b19a25..f18bb36127 100644
--- a/lib/runit/assert.rb
+++ b/lib/runit/assert.rb
@@ -6,8 +6,7 @@ require 'test/unit/assertions'
require 'runit/error'
module RUNIT
- module Assert
- include Test::Unit::Assertions
+ module AssertMixin
def setup_assert
end
@@ -70,4 +69,8 @@ module RUNIT
/assertions\.rb/.match(caller[1])
end
end
+ module Assert
+ include Test::Unit::Assertions
+ include AssertMixin
+ end
end
diff --git a/lib/runit/testcase.rb b/lib/runit/testcase.rb
index 4576cb8644..9e05a58abe 100644
--- a/lib/runit/testcase.rb
+++ b/lib/runit/testcase.rb
@@ -10,7 +10,7 @@ require 'test/unit/testcase'
module RUNIT
class TestCase < Test::Unit::TestCase
- include RUNIT::Assert
+ include RUNIT::AssertMixin
def self.suite
method_names = instance_methods(true)
diff --git a/lib/tempfile.rb b/lib/tempfile.rb
index 1b2a889b4a..a033a5b29e 100644
--- a/lib/tempfile.rb
+++ b/lib/tempfile.rb
@@ -67,7 +67,7 @@ class Tempfile < DelegateClass(File)
end
def make_tmpname(basename, n)
- sprintf('%s%d.%d', basename, $$, n)
+ sprintf('%s.%d.%d', basename, $$, n)
end
private :make_tmpname