Class Options
In: lib/rdoc/options.rb
Parent: Object

Methods

Included Modules

Singleton

Classes and Modules

Module Options::OptionList

Attributes

all_one_file  [R]  should the output be placed into a single file
charset  [R]  character-set
css  [R]  URL of stylesheet
diagram  [R]  should diagrams be drawn
exclude  [RW]  files matching this pattern will be excluded
extra_accessor_flags  [R] 
extra_accessors  [R]  pattern for additional attr_… style methods
fileboxes  [R]  should we draw fileboxes in diagrams
files  [R]  and the list of files to be processed
force_update  [R]  scan newer sources than the flag file if true.
generator  [RW]  description of the output generator (set with the -fmt option
image_format  [R]  image format for diagrams
include_line_numbers  [R]  include line numbers in the source listings
inline_source  [R]  should source code be included inline, or displayed in a popup
main_page  [RW]  name of the file, class or module to display in the initial index page (if not specified the first file we encounter is used)
merge  [R]  merge into classes of the name name when generating ri
op_dir  [RW]  the name of the output directory
op_name  [R]  the name to use for the output
promiscuous  [R]  Are we promiscuous about showing module contents across multiple files
quiet  [R]  Don‘t display progress as we process the files
rdoc_include  [R]  array of directories to search for files to satisfy an :include:
show_all  [RW]  include private and protected methods in the output
show_hash  [R]  include the ’#’ at the front of hyperlinked instance method names
tab_width  [R]  the number of columns in a tab
template  [R]  template to be used when generating output
webcvs  [R]  URL of web cvs frontend

Public Instance methods

Parse command line options. We‘re passed a hash containing output generators, keyed by the generator name

[Source]

     # File lib/rdoc/options.rb, line 349
349:   def parse(argv, generators)
350:     old_argv = ARGV.dup
351:     begin
352:       ARGV.replace(argv)
353:       @op_dir = "doc"
354:       @op_name = nil
355:       @show_all = false
356:       @main_page = nil
357:       @marge     = false
358:       @exclude   = []
359:       @quiet = false
360:       @generator_name = 'html'
361:       @generator = generators[@generator_name]
362:       @rdoc_include = []
363:       @title = nil
364:       @template = nil
365:       @diagram = false
366:       @fileboxes = false
367:       @show_hash = false
368:       @image_format = 'png'
369:       @inline_source = false
370:       @all_one_file  = false
371:       @tab_width = 8
372:       @include_line_numbers = false
373:       @extra_accessor_flags = {}
374:       @promiscuous = false
375:       @force_update = false
376: 
377:       @css = nil
378:       @webcvs = nil
379: 
380:       @charset = case $KCODE
381:                  when /^S/i
382:                    'Shift_JIS'
383:                  when /^E/i
384:                    'EUC-JP'
385:                  else
386:                    'iso-8859-1'
387:                  end
388: 
389:       accessors = []
390: 
391:       go = GetoptLong.new(*OptionList.options)
392:       go.quiet = true
393: 
394:       go.each do |opt, arg|
395:         case opt
396:         when "--all"           then @show_all      = true
397:         when "--charset"       then @charset       = arg
398:         when "--debug"         then $DEBUG         = true
399:         when "--exclude"       then @exclude       << Regexp.new(arg)
400:         when "--inline-source" then @inline_source = true
401:         when "--line-numbers"  then @include_line_numbers = true
402:         when "--main"          then @main_page     = arg
403:         when "--merge"         then @merge         = true
404:         when "--one-file"      then @all_one_file  = @inline_source = true
405:         when "--op"            then @op_dir        = arg
406:         when "--opname"        then @op_name       = arg
407:         when "--promiscuous"   then @promiscuous   = true
408:         when "--quiet"         then @quiet         = true
409:         when "--show-hash"     then @show_hash     = true
410:         when "--style"         then @css           = arg
411:         when "--template"      then @template      = arg
412:         when "--title"         then @title         = arg
413:         when "--webcvs"        then @webcvs        = arg
414: 
415:         when "--accessor" 
416:           arg.split(/,/).each do |accessor|
417:             if accessor =~ /^(\w+)(=(.*))?$/
418:               accessors << $1
419:               @extra_accessor_flags[$1] = $3
420:             end
421:           end
422: 
423:         when "--diagram"
424:           check_diagram
425:           @diagram = true
426: 
427:         when "--fileboxes"
428:           @fileboxes = true if @diagram
429: 
430:         when "--fmt"
431:           @generator_name = arg.downcase
432:           setup_generator(generators)
433: 
434:         when "--help"      
435:           OptionList.usage(generators.keys)
436: 
437:         when "--help-output"      
438:           OptionList.help_output
439: 
440:         when "--image-format"
441:           if ['gif', 'png', 'jpeg', 'jpg'].include?(arg)
442:             @image_format = arg
443:           else
444:             raise GetoptLong::InvalidOption.new("unknown image format: #{arg}")
445:           end
446: 
447:         when "--include"   
448:           @rdoc_include.concat arg.split(/\s*,\s*/)
449: 
450:         when "--ri", "--ri-site", "--ri-system"
451:           @generator_name = "ri"
452:           @op_dir = case opt
453:                     when "--ri" then RI::Paths::HOMEDIR 
454:                     when "--ri-site" then RI::Paths::SITEDIR
455:                     when "--ri-system" then RI::Paths::SYSDIR
456:                     else fail opt
457:                     end
458:           setup_generator(generators)
459: 
460:         when "--tab-width"
461:           begin
462:             @tab_width     = Integer(arg)
463:           rescue 
464:             $stderr.puts "Invalid tab width: '#{arg}'"
465:             exit 1
466:           end
467: 
468:         when "--extension"
469:           new, old = arg.split(/=/, 2)
470:           OptionList.error("Invalid parameter to '-E'") unless new && old
471:           unless RDoc::ParserFactory.alias_extension(old, new)
472:             OptionList.error("Unknown extension .#{old} to -E")
473:           end
474: 
475:         when "--force-update"
476:           @force_update = true
477: 
478:         when "--version"
479:           puts VERSION_STRING
480:           exit
481:         end
482: 
483:       end
484: 
485:       @files = ARGV.dup
486: 
487:       @rdoc_include << "." if @rdoc_include.empty?
488: 
489:       if @exclude.empty?
490:         @exclude = nil
491:       else
492:         @exclude = Regexp.new(@exclude.join("|"))
493:       end
494: 
495:       check_files
496: 
497:       # If no template was specified, use the default
498:       # template for the output formatter
499: 
500:       @template ||= @generator_name
501: 
502:       # Generate a regexp from the accessors
503:       unless accessors.empty?
504:         re = '^(' + accessors.map{|a| Regexp.quote(a)}.join('|') + ')$' 
505:         @extra_accessors = Regexp.new(re)
506:       end
507: 
508:     rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument => error
509:       OptionList.error(error.message)
510: 
511:     ensure
512:       ARGV.replace(old_argv)
513:     end
514:   end

[Source]

     # File lib/rdoc/options.rb, line 517
517:   def title
518:     @title ||= "RDoc Documentation"
519:   end

Set the title, but only if not already set. This means that a title set from the command line trumps one set in a source file

[Source]

     # File lib/rdoc/options.rb, line 524
524:   def title=(string)
525:     @title ||= string
526:   end

Private Instance methods

Check that the right version of ‘dot’ is available. Unfortuately this doesn‘t work correctly under Windows NT, so we‘ll bypass the test under Windows

[Source]

     # File lib/rdoc/options.rb, line 548
548:   def check_diagram
549:     return if RUBY_PLATFORM =~ /mswin|cygwin|mingw|bccwin/
550: 
551:     ok = false
552:     ver = nil
553:     IO.popen("dot -V 2>&1") do |io|
554:       ver = io.read
555:       if ver =~ /dot.+version(?:\s+gviz)?\s+(\d+)\.(\d+)/
556:         ok = ($1.to_i > 1) || ($1.to_i == 1 && $2.to_i >= 8)
557:       end
558:     end
559:     unless ok
560:       if ver =~ /^dot.+version/
561:         $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",
562:           "the --diagram option correctly. You have:\n\n   ",
563:           ver,
564:           "\nDiagrams might have strange background colors.\n\n"
565:       else
566:         $stderr.puts "You need the 'dot' program to produce diagrams.",
567:           "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"
568:         exit
569:       end
570: #      exit
571:     end
572:   end

Check that the files on the command line exist

[Source]

     # File lib/rdoc/options.rb, line 576
576:   def check_files
577:     @files.each do |f|
578:       stat = File.stat f rescue error("File not found: #{f}")
579:       error("File '#{f}' not readable") unless stat.readable?
580:     end
581:   end

[Source]

     # File lib/rdoc/options.rb, line 583
583:   def error(str)
584:     $stderr.puts str
585:     exit(1)
586:   end

Set up an output generator for the format in @generator_name

[Source]

     # File lib/rdoc/options.rb, line 532
532:   def setup_generator(generators)
533:     @generator = generators[@generator_name]
534:     if !@generator
535:       OptionList.error("Invalid output formatter")
536:     end
537:     
538:     if @generator_name == "xml"
539:       @all_one_file = true
540:       @inline_source = true
541:     end
542:   end

[Validate]