| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040 | 
							- require 'optparse'
 
- ##
 
- # RDoc::Options handles the parsing and storage of options
 
- #
 
- # == Saved Options
 
- #
 
- # You can save some options like the markup format in the
 
- # <tt>.rdoc_options</tt> file in your gem.  The easiest way to do this is:
 
- #
 
- #   rdoc --markup tomdoc --write-options
 
- #
 
- # Which will automatically create the file and fill it with the options you
 
- # specified.
 
- #
 
- # The following options will not be saved since they interfere with the user's
 
- # preferences or with the normal operation of RDoc:
 
- #
 
- # * +--coverage-report+
 
- # * +--dry-run+
 
- # * +--encoding+
 
- # * +--force-update+
 
- # * +--format+
 
- # * +--pipe+
 
- # * +--quiet+
 
- # * +--template+
 
- # * +--verbose+
 
- class RDoc::Options
 
-   ##
 
-   # The deprecated options.
 
-   DEPRECATED = {
 
-     '--accessor'      => 'support discontinued',
 
-     '--diagram'       => 'support discontinued',
 
-     '--help-output'   => 'support discontinued',
 
-     '--image-format'  => 'was an option for --diagram',
 
-     '--inline-source' => 'source code is now always inlined',
 
-     '--merge'         => 'ri now always merges class information',
 
-     '--one-file'      => 'support discontinued',
 
-     '--op-name'       => 'support discontinued',
 
-     '--opname'        => 'support discontinued',
 
-     '--promiscuous'   => 'files always only document their content',
 
-     '--ri-system'     => 'Ruby installers use other techniques',
 
-   }
 
-   ##
 
-   # RDoc options ignored (or handled specially) by --write-options
 
-   SPECIAL = %w[
 
-     coverage_report
 
-     dry_run
 
-     encoding
 
-     files
 
-     force_output
 
-     force_update
 
-     generator
 
-     generator_name
 
-     generator_options
 
-     generators
 
-     op_dir
 
-     option_parser
 
-     pipe
 
-     rdoc_include
 
-     static_path
 
-     stylesheet_url
 
-     template
 
-     template_dir
 
-     update_output_dir
 
-     verbosity
 
-     write_options
 
-   ]
 
-   ##
 
-   # Path option validator for OptionParser
 
-   Path = Object.new
 
-   ##
 
-   # Array of Paths option validator for OptionParser
 
-   PathArray = Object.new
 
-   ##
 
-   # Template option validator for OptionParser
 
-   Template = Object.new
 
-   ##
 
-   # Character-set for HTML output.  #encoding is preferred over #charset
 
-   attr_accessor :charset
 
-   ##
 
-   # If true, RDoc will not write any files.
 
-   attr_accessor :dry_run
 
-   ##
 
-   # Encoding of output where.  This is set via --encoding.
 
-   attr_accessor :encoding
 
-   ##
 
-   # Files matching this pattern will be excluded
 
-   attr_accessor :exclude
 
-   ##
 
-   # The list of files to be processed
 
-   attr_accessor :files
 
-   ##
 
-   # Create the output even if the output directory does not look
 
-   # like an rdoc output directory
 
-   attr_accessor :force_output
 
-   ##
 
-   # Scan newer sources than the flag file if true.
 
-   attr_accessor :force_update
 
-   ##
 
-   # Formatter to mark up text with
 
-   attr_accessor :formatter
 
-   ##
 
-   # Description of the output generator (set with the <tt>--fmt</tt> option)
 
-   attr_accessor :generator
 
-   ##
 
-   # For #==
 
-   attr_reader :generator_name # :nodoc:
 
-   ##
 
-   # Loaded generator options.  Used to prevent --help from loading the same
 
-   # options multiple times.
 
-   attr_accessor :generator_options
 
-   ##
 
-   # Old rdoc behavior: hyperlink all words that match a method name,
 
-   # even if not preceded by '#' or '::'
 
-   attr_accessor :hyperlink_all
 
-   ##
 
-   # Include line numbers in the source code
 
-   attr_accessor :line_numbers
 
-   ##
 
-   # Name of the file, class or module to display in the initial index page (if
 
-   # not specified the first file we encounter is used)
 
-   attr_accessor :main_page
 
-   ##
 
-   # The default markup format.  The default is 'rdoc'.  'tomdoc' and 'rd' are
 
-   # also built-in.
 
-   attr_accessor :markup
 
-   ##
 
-   # If true, only report on undocumented files
 
-   attr_accessor :coverage_report
 
-   ##
 
-   # The name of the output directory
 
-   attr_accessor :op_dir
 
-   ##
 
-   # The OptionParser for this instance
 
-   attr_accessor :option_parser
 
-   ##
 
-   # Is RDoc in pipe mode?
 
-   attr_accessor :pipe
 
-   ##
 
-   # Array of directories to search for files to satisfy an :include:
 
-   attr_accessor :rdoc_include
 
-   ##
 
-   # Include the '#' at the front of hyperlinked instance method names
 
-   attr_accessor :show_hash
 
-   ##
 
-   # Directory to copy static files from
 
-   attr_accessor :static_path
 
-   ##
 
-   # The number of columns in a tab
 
-   attr_accessor :tab_width
 
-   ##
 
-   # Template to be used when generating output
 
-   attr_accessor :template
 
-   ##
 
-   # Directory the template lives in
 
-   attr_accessor :template_dir
 
-   ##
 
-   # Documentation title
 
-   attr_accessor :title
 
-   ##
 
-   # Should RDoc update the timestamps in the output dir?
 
-   attr_accessor :update_output_dir
 
-   ##
 
-   # Verbosity, zero means quiet
 
-   attr_accessor :verbosity
 
-   ##
 
-   # URL of web cvs frontend
 
-   attr_accessor :webcvs
 
-   ##
 
-   # Minimum visibility of a documented method. One of +:public+,
 
-   # +:protected+, +:private+. May be overridden on a per-method
 
-   # basis with the :doc: directive.
 
-   attr_accessor :visibility
 
-   def initialize # :nodoc:
 
-     init_ivars
 
-   end
 
-   def init_ivars # :nodoc:
 
-     @dry_run = false
 
-     @exclude = []
 
-     @files = nil
 
-     @force_output = false
 
-     @force_update = true
 
-     @generator = nil
 
-     @generator_name = nil
 
-     @generator_options = []
 
-     @generators = RDoc::RDoc::GENERATORS
 
-     @hyperlink_all = false
 
-     @line_numbers = false
 
-     @main_page = nil
 
-     @markup = 'rdoc'
 
-     @coverage_report = false
 
-     @op_dir = nil
 
-     @pipe = false
 
-     @rdoc_include = []
 
-     @show_hash = false
 
-     @static_path = []
 
-     @stylesheet_url = nil # TODO remove in RDoc 4
 
-     @tab_width = 8
 
-     @template = nil
 
-     @template_dir = nil
 
-     @title = nil
 
-     @update_output_dir = true
 
-     @verbosity = 1
 
-     @visibility = :protected
 
-     @webcvs = nil
 
-     @write_options = false
 
-     if Object.const_defined? :Encoding then
 
-       @encoding = Encoding.default_external
 
-       @charset = @encoding.to_s
 
-     else
 
-       @encoding = nil
 
-       @charset = 'UTF-8'
 
-     end
 
-   end
 
-   def init_with map # :nodoc:
 
-     init_ivars
 
-     encoding = map['encoding']
 
-     @encoding = if Object.const_defined? :Encoding then
 
-                   encoding ? Encoding.find(encoding) : encoding
 
-                 end
 
-     @charset        = map['charset']
 
-     @exclude        = map['exclude']
 
-     @generator_name = map['generator_name']
 
-     @hyperlink_all  = map['hyperlink_all']
 
-     @line_numbers   = map['line_numbers']
 
-     @main_page      = map['main_page']
 
-     @markup         = map['markup']
 
-     @op_dir         = map['op_dir']
 
-     @show_hash      = map['show_hash']
 
-     @tab_width      = map['tab_width']
 
-     @template_dir   = map['template_dir']
 
-     @title          = map['title']
 
-     @visibility     = map['visibility']
 
-     @webcvs         = map['webcvs']
 
-     @rdoc_include = sanitize_path map['rdoc_include']
 
-     @static_path  = sanitize_path map['static_path']
 
-   end
 
-   def yaml_initialize tag, map # :nodoc:
 
-     init_with map
 
-   end
 
-   def == other # :nodoc:
 
-     self.class === other and
 
-       @encoding       == other.encoding       and
 
-       @generator_name == other.generator_name and
 
-       @hyperlink_all  == other.hyperlink_all  and
 
-       @line_numbers   == other.line_numbers   and
 
-       @main_page      == other.main_page      and
 
-       @markup         == other.markup         and
 
-       @op_dir         == other.op_dir         and
 
-       @rdoc_include   == other.rdoc_include   and
 
-       @show_hash      == other.show_hash      and
 
-       @static_path    == other.static_path    and
 
-       @tab_width      == other.tab_width      and
 
-       @template       == other.template       and
 
-       @title          == other.title          and
 
-       @visibility     == other.visibility     and
 
-       @webcvs         == other.webcvs
 
-   end
 
-   ##
 
-   # Check that the files on the command line exist
 
-   def check_files
 
-     @files.delete_if do |file|
 
-       if File.exist? file then
 
-         if File.readable? file then
 
-           false
 
-         else
 
-           warn "file '#{file}' not readable"
 
-           true
 
-         end
 
-       else
 
-         warn "file '#{file}' not found"
 
-         true
 
-       end
 
-     end
 
-   end
 
-   ##
 
-   # Ensure only one generator is loaded
 
-   def check_generator
 
-     if @generator then
 
-       raise OptionParser::InvalidOption,
 
-         "generator already set to #{@generator_name}"
 
-     end
 
-   end
 
-   ##
 
-   # Set the title, but only if not already set. Used to set the title
 
-   # from a source file, so that a title set from the command line
 
-   # will have the priority.
 
-   def default_title=(string)
 
-     @title ||= string
 
-   end
 
-   ##
 
-   # For dumping YAML
 
-   def encode_with coder # :nodoc:
 
-     encoding = @encoding ? @encoding.name : nil
 
-     coder.add 'encoding', encoding
 
-     coder.add 'static_path',  sanitize_path(@static_path)
 
-     coder.add 'rdoc_include', sanitize_path(@rdoc_include)
 
-     ivars = instance_variables.map { |ivar| ivar.to_s[1..-1] }
 
-     ivars -= SPECIAL
 
-     ivars.sort.each do |ivar|
 
-       coder.add ivar, instance_variable_get("@#{ivar}")
 
-     end
 
-   end
 
-   ##
 
-   # Completes any unfinished option setup business such as filtering for
 
-   # existent files, creating a regexp for #exclude and setting a default
 
-   # #template.
 
-   def finish
 
-     @op_dir ||= 'doc'
 
-     @rdoc_include << "." if @rdoc_include.empty?
 
-     if @exclude.nil? or Regexp === @exclude then
 
-       # done, #finish is being re-run
 
-     elsif @exclude.empty? then
 
-       @exclude = nil
 
-     else
 
-       @exclude = Regexp.new(@exclude.join("|"))
 
-     end
 
-     check_files
 
-     # If no template was specified, use the default template for the output
 
-     # formatter
 
-     unless @template then
 
-       @template     = @generator_name
 
-       @template_dir = template_dir_for @template
 
-     end
 
-     self
 
-   end
 
-   ##
 
-   # Returns a properly-space list of generators and their descriptions.
 
-   def generator_descriptions
 
-     lengths = []
 
-     generators = RDoc::RDoc::GENERATORS.map do |name, generator|
 
-       lengths << name.length
 
-       description = generator::DESCRIPTION if
 
-         generator.const_defined? :DESCRIPTION
 
-       [name, description]
 
-     end
 
-     longest = lengths.max
 
-     generators.sort.map do |name, description|
 
-       if description then
 
-         "  %-*s - %s" % [longest, name, description]
 
-       else
 
-         "  #{name}"
 
-       end
 
-     end.join "\n"
 
-   end
 
-   ##
 
-   # Parses command line options.
 
-   def parse argv
 
-     ignore_invalid = true
 
-     argv.insert(0, *ENV['RDOCOPT'].split) if ENV['RDOCOPT']
 
-     opts = OptionParser.new do |opt|
 
-       @option_parser = opt
 
-       opt.program_name = File.basename $0
 
-       opt.version = RDoc::VERSION
 
-       opt.release = nil
 
-       opt.summary_indent = ' ' * 4
 
-       opt.banner = <<-EOF
 
- Usage: #{opt.program_name} [options] [names...]
 
-   Files are parsed, and the information they contain collected, before any
 
-   output is produced. This allows cross references between all files to be
 
-   resolved. If a name is a directory, it is traversed. If no names are
 
-   specified, all Ruby files in the current directory (and subdirectories) are
 
-   processed.
 
-   How RDoc generates output depends on the output formatter being used, and on
 
-   the options you give.
 
-   Options can be specified via the RDOCOPT environment variable, which
 
-   functions similar to the RUBYOPT environment variable for ruby.
 
-     $ export RDOCOPT="--show-hash"
 
-   will make rdoc show hashes in method links by default.  Command-line options
 
-   always will override those in RDOCOPT.
 
-   Available formatters:
 
- #{generator_descriptions}
 
-   RDoc understands the following file formats:
 
-       EOF
 
-       parsers = Hash.new { |h,parser| h[parser] = [] }
 
-       RDoc::Parser.parsers.each do |regexp, parser|
 
-         parsers[parser.name.sub('RDoc::Parser::', '')] << regexp.source
 
-       end
 
-       parsers.sort.each do |parser, regexp|
 
-         opt.banner << "  - #{parser}: #{regexp.join ', '}\n"
 
-       end
 
-       opt.banner << "\n  The following options are deprecated:\n\n"
 
-       name_length = DEPRECATED.keys.sort_by { |k| k.length }.last.length
 
-       DEPRECATED.sort_by { |k,| k }.each do |name, reason|
 
-         opt.banner << "    %*1$2$s  %3$s\n" % [-name_length, name, reason]
 
-       end
 
-       opt.accept Template do |template|
 
-         template_dir = template_dir_for template
 
-         unless template_dir then
 
-           $stderr.puts "could not find template #{template}"
 
-           nil
 
-         else
 
-           [template, template_dir]
 
-         end
 
-       end
 
-       opt.accept Path do |directory|
 
-         directory = File.expand_path directory
 
-         raise OptionParser::InvalidArgument unless File.exist? directory
 
-         directory
 
-       end
 
-       opt.accept PathArray do |directories,|
 
-         directories = if directories then
 
-                         directories.split(',').map { |d| d unless d.empty? }
 
-                       end
 
-         directories.map do |directory|
 
-           directory = File.expand_path directory
 
-           raise OptionParser::InvalidArgument unless File.exist? directory
 
-           directory
 
-         end
 
-       end
 
-       opt.separator nil
 
-       opt.separator "Parsing options:"
 
-       opt.separator nil
 
-       if Object.const_defined? :Encoding then
 
-         opt.on("--encoding=ENCODING", "-e", Encoding.list.map { |e| e.name },
 
-                "Specifies the output encoding.  All files",
 
-                "read will be converted to this encoding.",
 
-                "Preferred over --charset") do |value|
 
-                  @encoding = Encoding.find value
 
-                  @charset = @encoding.to_s # may not be valid value
 
-                end
 
-         opt.separator nil
 
-       end
 
-       opt.on("--all", "-a",
 
-              "Synonym for --visibility=private.") do |value|
 
-         @visibility = :private
 
-       end
 
-       opt.separator nil
 
-       opt.on("--exclude=PATTERN", "-x", Regexp,
 
-              "Do not process files or directories",
 
-              "matching PATTERN.") do |value|
 
-         @exclude << value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--extension=NEW=OLD", "-E",
 
-              "Treat files ending with .new as if they",
 
-              "ended with .old. Using '-E cgi=rb' will",
 
-              "cause xxx.cgi to be parsed as a Ruby file.") do |value|
 
-         new, old = value.split(/=/, 2)
 
-         unless new and old then
 
-           raise OptionParser::InvalidArgument, "Invalid parameter to '-E'"
 
-         end
 
-         unless RDoc::Parser.alias_extension old, new then
 
-           raise OptionParser::InvalidArgument, "Unknown extension .#{old} to -E"
 
-         end
 
-       end
 
-       opt.separator nil
 
-       opt.on("--[no-]force-update", "-U",
 
-              "Forces rdoc to scan all sources even if",
 
-              "newer than the flag file.") do |value|
 
-         @force_update = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--pipe",
 
-              "Convert RDoc on stdin to HTML") do
 
-         @pipe = true
 
-       end
 
-       opt.separator nil
 
-       opt.on("--tab-width=WIDTH", "-w", OptionParser::DecimalInteger,
 
-              "Set the width of tab characters.") do |value|
 
-         @tab_width = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--visibility=VISIBILITY", "-V", RDoc::VISIBILITIES,
 
-              "Minimum visibility to document a method.",
 
-              "One of 'public', 'protected' (the default)",
 
-              "or 'private'. Can be abbreviated.") do |value|
 
-         @visibility = value
 
-       end
 
-       opt.separator nil
 
-       markup_formats = RDoc::Text::MARKUP_FORMAT.keys.sort
 
-       opt.on("--markup=MARKUP", markup_formats,
 
-              "The markup format for the named files.",
 
-              "The default is rdoc.  Valid values are:",
 
-              markup_formats.join(', ')) do |value|
 
-         @markup = value
 
-       end
 
-       opt.separator nil
 
-       opt.separator "Common generator options:"
 
-       opt.separator nil
 
-       opt.on("--force-output", "-O",
 
-              "Forces rdoc to write the output files,",
 
-              "even if the output directory exists",
 
-              "and does not seem to have been created",
 
-              "by rdoc.") do |value|
 
-         @force_output = value
 
-       end
 
-       opt.separator nil
 
-       generator_text = @generators.keys.map { |name| "  #{name}" }.sort
 
-       opt.on("-f", "--fmt=FORMAT", "--format=FORMAT", @generators.keys,
 
-              "Set the output formatter.  One of:", *generator_text) do |value|
 
-         check_generator
 
-         @generator_name = value.downcase
 
-         setup_generator
 
-       end
 
-       opt.separator nil
 
-       opt.on("--include=DIRECTORIES", "-i", PathArray,
 
-              "Set (or add to) the list of directories to",
 
-              "be searched when satisfying :include:",
 
-              "requests. Can be used more than once.") do |value|
 
-         @rdoc_include.concat value.map { |dir| dir.strip }
 
-       end
 
-       opt.separator nil
 
-       opt.on("--[no-]coverage-report=[LEVEL]", "--[no-]dcov", "-C", Integer,
 
-              "Prints a report on undocumented items.",
 
-              "Does not generate files.") do |value|
 
-         value = 0 if value.nil? # Integer converts -C to nil
 
-         @coverage_report = value
 
-         @force_update = true if value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--output=DIR", "--op", "-o",
 
-              "Set the output directory.") do |value|
 
-         @op_dir = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("-d",
 
-              "Deprecated --diagram option.",
 
-              "Prevents firing debug mode",
 
-              "with legacy invocation.") do |value|
 
-       end
 
-       opt.separator nil
 
-       opt.separator 'HTML generator options:'
 
-       opt.separator nil
 
-       opt.on("--charset=CHARSET", "-c",
 
-              "Specifies the output HTML character-set.",
 
-              "Use --encoding instead of --charset if",
 
-              "available.") do |value|
 
-         @charset = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--hyperlink-all", "-A",
 
-              "Generate hyperlinks for all words that",
 
-              "correspond to known methods, even if they",
 
-              "do not start with '#' or '::' (legacy",
 
-              "behavior).") do |value|
 
-         @hyperlink_all = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--main=NAME", "-m",
 
-              "NAME will be the initial page displayed.") do |value|
 
-         @main_page = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--[no-]line-numbers", "-N",
 
-              "Include line numbers in the source code.",
 
-              "By default, only the number of the first",
 
-              "line is displayed, in a leading comment.") do |value|
 
-         @line_numbers = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--show-hash", "-H",
 
-              "A name of the form #name in a comment is a",
 
-              "possible hyperlink to an instance method",
 
-              "name. When displayed, the '#' is removed",
 
-              "unless this option is specified.") do |value|
 
-         @show_hash = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--template=NAME", "-T", Template,
 
-              "Set the template used when generating",
 
-              "output. The default depends on the",
 
-              "formatter used.") do |(template, template_dir)|
 
-         @template     = template
 
-         @template_dir = template_dir
 
-       end
 
-       opt.separator nil
 
-       opt.on("--title=TITLE", "-t",
 
-              "Set TITLE as the title for HTML output.") do |value|
 
-         @title = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--copy-files=PATH", Path,
 
-              "Specify a file or directory to copy static",
 
-              "files from.",
 
-              "If a file is given it will be copied into",
 
-              "the output dir.  If a directory is given the",
 
-              "entire directory will be copied.",
 
-              "You can use this multiple times") do |value|
 
-         @static_path << value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--webcvs=URL", "-W",
 
-              "Specify a URL for linking to a web frontend",
 
-              "to CVS. If the URL contains a '\%s', the",
 
-              "name of the current file will be",
 
-              "substituted; if the URL doesn't contain a",
 
-              "'\%s', the filename will be appended to it.") do |value|
 
-         @webcvs = value
 
-       end
 
-       opt.separator nil
 
-       opt.separator "ri generator options:"
 
-       opt.separator nil
 
-       opt.on("--ri", "-r",
 
-              "Generate output for use by `ri`. The files",
 
-              "are stored in the '.rdoc' directory under",
 
-              "your home directory unless overridden by a",
 
-              "subsequent --op parameter, so no special",
 
-              "privileges are needed.") do |value|
 
-         check_generator
 
-         @generator_name = "ri"
 
-         @op_dir ||= RDoc::RI::Paths::HOMEDIR
 
-         setup_generator
 
-       end
 
-       opt.separator nil
 
-       opt.on("--ri-site", "-R",
 
-              "Generate output for use by `ri`. The files",
 
-              "are stored in a site-wide directory,",
 
-              "making them accessible to others, so",
 
-              "special privileges are needed.") do |value|
 
-         check_generator
 
-         @generator_name = "ri"
 
-         @op_dir = RDoc::RI::Paths::SITEDIR
 
-         setup_generator
 
-       end
 
-       opt.separator nil
 
-       opt.separator "Generic options:"
 
-       opt.separator nil
 
-       opt.on("--write-options",
 
-              "Write .rdoc_options to the current",
 
-              "directory with the given options.  Not all",
 
-              "options will be used.  See RDoc::Options",
 
-              "for details.") do |value|
 
-         @write_options = true
 
-       end
 
-       opt.separator nil
 
-       opt.on("--[no-]dry-run",
 
-              "Don't write any files") do |value|
 
-         @dry_run = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("-D", "--[no-]debug",
 
-              "Displays lots on internal stuff.") do |value|
 
-         $DEBUG_RDOC = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--[no-]ignore-invalid",
 
-              "Ignore invalid options and continue",
 
-              "(default true).") do |value|
 
-         ignore_invalid = value
 
-       end
 
-       opt.separator nil
 
-       opt.on("--quiet", "-q",
 
-              "Don't show progress as we parse.") do |value|
 
-         @verbosity = 0
 
-       end
 
-       opt.separator nil
 
-       opt.on("--verbose", "-v",
 
-              "Display extra progress as RDoc parses") do |value|
 
-         @verbosity = 2
 
-       end
 
-       opt.separator nil
 
-       opt.on("--help",
 
-              "Display this help") do
 
-         RDoc::RDoc::GENERATORS.each_key do |generator|
 
-           setup_generator generator
 
-         end
 
-         puts opt.help
 
-         exit
 
-       end
 
-       opt.separator nil
 
-     end
 
-     setup_generator 'darkfish' if
 
-       argv.grep(/\A(-f|--fmt|--format|-r|-R|--ri|--ri-site)\b/).empty?
 
-     deprecated = []
 
-     invalid = []
 
-     begin
 
-       opts.parse! argv
 
-     rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
 
-       if DEPRECATED[e.args.first] then
 
-         deprecated << e.args.first
 
-       elsif %w[--format --ri -r --ri-site -R].include? e.args.first then
 
-         raise
 
-       else
 
-         invalid << e.args.join(' ')
 
-       end
 
-       retry
 
-     end
 
-     unless @generator then
 
-       @generator = RDoc::Generator::Darkfish
 
-       @generator_name = 'darkfish'
 
-     end
 
-     if @pipe and not argv.empty? then
 
-       @pipe = false
 
-       invalid << '-p (with files)'
 
-     end
 
-     unless quiet then
 
-       deprecated.each do |opt|
 
-         $stderr.puts 'option ' << opt << ' is deprecated: ' << DEPRECATED[opt]
 
-       end
 
-       unless invalid.empty? then
 
-         invalid = "invalid options: #{invalid.join ', '}"
 
-         if ignore_invalid then
 
-           $stderr.puts invalid
 
-           $stderr.puts '(invalid options are ignored)'
 
-         else
 
-           $stderr.puts opts
 
-           $stderr.puts invalid
 
-           exit 1
 
-         end
 
-       end
 
-     end
 
-     @files = argv.dup
 
-     finish
 
-     if @write_options then
 
-       write_options
 
-       exit
 
-     end
 
-     self
 
-   end
 
-   ##
 
-   # Don't display progress as we process the files
 
-   def quiet
 
-     @verbosity.zero?
 
-   end
 
-   ##
 
-   # Set quietness to +bool+
 
-   def quiet= bool
 
-     @verbosity = bool ? 0 : 1
 
-   end
 
-   ##
 
-   # Removes directories from +path+ that are outside the current directory
 
-   def sanitize_path path
 
-     require 'pathname'
 
-     dot = Pathname.new('.').expand_path
 
-     path.reject do |item|
 
-       path = Pathname.new(item).expand_path
 
-       relative = path.relative_path_from(dot).to_s
 
-       relative.start_with? '..'
 
-     end
 
-   end
 
-   ##
 
-   # Set up an output generator for the named +generator_name+.
 
-   #
 
-   # If the found generator responds to :setup_options it will be called with
 
-   # the options instance.  This allows generators to add custom options or set
 
-   # default options.
 
-   def setup_generator generator_name = @generator_name
 
-     @generator = @generators[generator_name]
 
-     unless @generator then
 
-       raise OptionParser::InvalidArgument,
 
-             "Invalid output formatter #{generator_name}"
 
-     end
 
-     return if @generator_options.include? @generator
 
-     @generator_name = generator_name
 
-     @generator_options << @generator
 
-     if @generator.respond_to? :setup_options then
 
-       @option_parser ||= OptionParser.new
 
-       @generator.setup_options self
 
-     end
 
-   end
 
-   ##
 
-   # Finds the template dir for +template+
 
-   def template_dir_for template
 
-     template_path = File.join 'rdoc', 'generator', 'template', template
 
-     $LOAD_PATH.map do |path|
 
-       File.join File.expand_path(path), template_path
 
-     end.find do |dir|
 
-       File.directory? dir
 
-     end
 
-   end
 
-   ##
 
-   # This is compatibility code for syck
 
-   def to_yaml opts = {} # :nodoc:
 
-     return super if YAML.const_defined?(:ENGINE) and not YAML::ENGINE.syck?
 
-     YAML.quick_emit self, opts do |out|
 
-       out.map taguri, to_yaml_style do |map|
 
-         encode_with map
 
-       end
 
-     end
 
-   end
 
-   ##
 
-   # Displays a warning using Kernel#warn if we're being verbose
 
-   def warn message
 
-     super message if @verbosity > 1
 
-   end
 
-   ##
 
-   # Writes the YAML file .rdoc_options to the current directory containing the
 
-   # parsed options.
 
-   def write_options
 
-     RDoc.load_yaml
 
-     open '.rdoc_options', 'w' do |io|
 
-       io.set_encoding Encoding::UTF_8 if Object.const_defined? :Encoding
 
-       YAML.dump self, io
 
-     end
 
-   end
 
- end
 
 
  |