| Class | Options |
| In: |
options.rb
|
| Parent: | Object |
| 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) |
| 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 |
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
# File options.rb, line 546
546: def check_diagram
547: return if RUBY_PLATFORM =~ /win/
548:
549: ok = false
550: ver = nil
551: IO.popen("dot -V 2>&1") do |io|
552: ver = io.read
553: if ver =~ /dot\s+version(?:\s+gviz)?\s+(\d+)\.(\d+)/
554: ok = ($1.to_i > 1) || ($1.to_i == 1 && $2.to_i >= 8)
555: end
556: end
557: unless ok
558: if ver =~ /^dot version/
559: $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",
560: "the --diagram option correctly. You have:\n\n ",
561: ver,
562: "\nDiagrams might have strange background colors.\n\n"
563: else
564: $stderr.puts "You need the 'dot' program to produce diagrams.",
565: "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"
566: exit
567: end
568: # exit
569: end
570: end
Check that the files on the command line exist
# File options.rb, line 574
574: def check_files
575: @files.each do |f|
576: stat = File.stat f rescue error("File not found: #{f}")
577: error("File '#{f}' not readable") unless stat.readable?
578: end
579: end
Parse command line options. We‘re passed a hash containing output generators, keyed by the generator name
# File 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: @ignore_case = 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: when "--ignore-case" then @ignore_case = true
415:
416: when "--accessor"
417: arg.split(/,/).each do |accessor|
418: if accessor =~ /^(\w+)(=(.*))?$/
419: accessors << $1
420: @extra_accessor_flags[$1] = $3
421: end
422: end
423:
424: when "--diagram"
425: check_diagram
426: @diagram = true
427:
428: when "--fileboxes"
429: @fileboxes = true if @diagram
430:
431: when "--fmt"
432: @generator_name = arg.downcase
433: setup_generator(generators)
434:
435: when "--help"
436: OptionList.usage(generators.keys)
437:
438: when "--help-output"
439: OptionList.help_output
440:
441: when "--image-format"
442: if ['gif', 'png', 'jpeg', 'jpg'].include?(arg)
443: @image_format = arg
444: else
445: raise GetoptLong::InvalidOption.new("unknown image format: #{arg}")
446: end
447:
448: when "--include"
449: @rdoc_include.concat arg.split(/\s*,\s*/)
450:
451: when "--ri", "--ri-site", "--ri-system"
452: @generator_name = "ri"
453: @op_dir = case opt
454: when "--ri" then RI::Paths::HOMEDIR
455: when "--ri-site" then RI::Paths::SITEDIR
456: when "--ri-system" then RI::Paths::SYSDIR
457: else fail opt
458: end
459: setup_generator(generators)
460:
461: when "--tab-width"
462: begin
463: @tab_width = Integer(arg)
464: rescue
465: $stderr.puts "Invalid tab width: '#{arg}'"
466: exit 1
467: end
468:
469: when "--extension"
470: new, old = arg.split(/=/, 2)
471: OptionList.error("Invalid parameter to '-E'") unless new && old
472: unless RDoc::ParserFactory.alias_extension(old, new)
473: OptionList.error("Unknown extension .#{old} to -E")
474: end
475:
476: when "--version"
477: puts VERSION_STRING
478: exit
479: end
480:
481: end
482:
483: @files = ARGV.dup
484:
485: @rdoc_include << "." if @rdoc_include.empty?
486:
487: if @exclude.empty?
488: @exclude = nil
489: else
490: @exclude = Regexp.new(@exclude.join("|"))
491: end
492:
493: check_files
494:
495: # If no template was specified, use the default
496: # template for the output formatter
497:
498: @template ||= @generator_name
499:
500: # Generate a regexp from the accessors
501: unless accessors.empty?
502: re = '^(' + accessors.map{|a| Regexp.quote(a)}.join('|') + ')$'
503: @extra_accessors = Regexp.new(re)
504: end
505:
506: rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument => error
507: OptionList.error(error.message)
508:
509: ensure
510: ARGV.replace(old_argv)
511: end
512: end
Set up an output generator for the format in @generator_name
# File options.rb, line 530
530: def setup_generator(generators)
531: @generator = generators[@generator_name]
532: if !@generator
533: OptionList.error("Invalid output formatter")
534: end
535:
536: if @generator_name == "xml"
537: @all_one_file = true
538: @inline_source = true
539: end
540: end