Class Options
In: 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
generator  [RW]  description of the output generator (set with the -fmt option
ignore_case  [R]  The case of names of classes or modules or methods are ignored
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)
mathml  [R]  TeX formatted formula is converted to MathML
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

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 options.rb, line 578
578:   def check_diagram
579:     return if RUBY_PLATFORM =~ /win/
580: 
581:     ok = false
582:     ver = nil
583:     IO.popen("dot -V 2>&1") do |io|
584:       ver = io.read
585:       if ver =~ /dot\s+version(?:\s+gviz)?\s+(\d+)\.(\d+)/
586:         ok = ($1.to_i > 1) || ($1.to_i == 1 && $2.to_i >= 8)
587:       end
588:     end
589:     unless ok
590:       if ver =~ /^dot version/
591:         $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",
592:           "the --diagram option correctly. You have:\n\n   ",
593:           ver,
594:           "\nDiagrams might have strange background colors.\n\n"
595:       else
596:         $stderr.puts "You need the 'dot' program to produce diagrams.",
597:           "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"
598:         exit
599:       end
600: #      exit
601:     end
602:   end

Check that the files on the command line exist

[Source]

     # File options.rb, line 650
650:   def check_files
651:     @files.each do |f|
652:       stat = File.stat f rescue error("File not found: #{f}")
653:       error("File '#{f}' not readable") unless stat.readable?
654:     end
655:   end

Check that the right version of ‘mathml.rb’ is available.

[Source]

     # File options.rb, line 606
606:   def check_mathml
607:     not_found = true
608:     fpath = ""
609:     $LOAD_PATH.each{ |lpath|
610:       fpath = File.join(lpath, "mathml.rb")
611:       if File.exist?(fpath)
612:         not_found = false
613:         break
614:       end
615:     }
616: 
617:     if not_found
618:       $stderr.puts "You need the 'mathml.rb' to convert TeX to MathML.\n(see http://www.hinet.mydns.jp/~hiraku/hiki/, but JAPANESE only.\nYou can download 'mathml.rb' directly from\nhttp://www.hinet.mydns.jp/~hiraku/data/files/mathml-0.5.tar.gz)\n\n"
619:       exit
620:     end
621: 
622:     contents = File.open(fpath, "r") {|f| f.read}
623:     num = 1
624:     if !(contents =~ /^\s*module\s+MathML/) ||
625:         !(contents =~ /^\s*module\s+LaTeX/) ||
626:         !(contents =~ /^\s*class\s+Parser/) ||
627:         !(contents =~ /^\s*def\s+parse/)
628:       $stderr.puts "You need the 'mathml.rb' V0.5 or later to use.\n(see http://www.hinet.mydns.jp/~hiraku/hiki/, but JAPANESE only.\nYou can download 'mathml.rb' directly from\nhttp://www.hinet.mydns.jp/~hiraku/data/files/mathml-0.5.tar.gz)\n\n"
629: 
630:       exit
631:     end
632:   end

[Source]

     # File options.rb, line 657
657:   def error(str)
658:     $stderr.puts str
659:     exit(1)
660:   end

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

[Source]

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

[Source]

     # File options.rb, line 662
662:   def relative_str(from, target)
663:     from_dir     = File.dirname(from)
664:     target_dir   = File.dirname(target)
665:     target_base  = File.basename(target)
666: 
667:     from_ab_path   = Pathname.new(File.expand_path(from_dir))
668:     target_ab_path = Pathname.new(File.expand_path(target_dir))
669: 
670:     target_re_path = target_ab_path.relative_path_from(from_ab_path)
671: 
672:     result = target_re_path.to_s + "/" + target_base
673: 
674:     return result
675:   end

Set up an output generator for the format in @generator_name

[Source]

     # File options.rb, line 562
562:   def setup_generator(generators)
563:     @generator = generators[@generator_name]
564:     if !@generator
565:       OptionList.error("Invalid output formatter")
566:     end
567:     
568:     if @generator_name == "xml"
569:       @all_one_file = true
570:       @inline_source = true
571:     end
572:   end

[Source]

     # File options.rb, line 547
547:   def title
548:     @title ||= "RDoc Documentation"
549:   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 options.rb, line 554
554:   def title=(string)
555:     @title ||= string
556:   end

[Validate]