1# -*- mode:ruby; indent-tabs-mode:nil; coding:utf-8 -*-
2#
3#  ri_text_display.rb
4#  CocoaRepl
5#
6#  Created by Fujimoto Hisa on 07/03/01.
7#  Copyright (c) 2007 Fujimoto Hisa. All rights reserved.
8#
9require 'stringio'
10require 'rdoc/ri/ri_display'
11require 'rdoc/ri/ri_formatter'
12require 'rdoc/ri/ri_options'
13
14class  RiTextDisplay < DefaultDisplay
15
16  def initialize(format = 'plain')
17    @options = RI::Options.instance
18    @options.parse([ '-f', format ])
19    @formatter = @options.formatter.new(@options, "     ")
20  end
21
22  def display_class_info(klass, ri_reader)
23    page do
24      superclass = klass.superclass_string
25
26      if superclass
27        superclass = " < " + superclass
28      else
29        superclass = ""
30      end
31
32      @formatter.draw_line(klass.display_name + ": " +
33                           klass.full_name + superclass)
34
35      display_flow(klass.comment)
36      @formatter.draw_line
37
38      unless klass.includes.empty?
39        @formatter.blankline
40        @formatter.display_heading("Includes:", 2, "")
41        incs = []
42        klass.includes.each do |inc|
43          inc_desc = ri_reader && ri_reader.find_class_by_name(inc.name)
44          if inc_desc
45            str = inc.name + "("
46            str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
47            str << ")"
48            incs << str
49          else
50            incs << inc.name
51          end
52        end
53        @formatter.wrap(incs.sort.join(', '))
54      end
55
56      unless klass.constants.empty?
57        @formatter.blankline
58        @formatter.display_heading("Constants:", 2, "")
59        len = 0
60        klass.constants.each { |c| len = c.name.length if c.name.length > len }
61        len += 2
62        klass.constants.each do |c|
63          @formatter.wrap(c.value,
64                          @formatter.indent+((c.name+":").ljust(len)))
65        end
66      end
67
68      unless klass.class_methods.empty?
69        @formatter.blankline
70        @formatter.display_heading("Class methods:", 2, "")
71        @formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
72      end
73
74      unless klass.instance_methods.empty?
75        @formatter.blankline
76        @formatter.display_heading("Instance methods:", 2, "")
77        @formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
78      end
79
80      unless klass.attributes.empty?
81        @formatter.blankline
82        @formatter.wrap("Attributes:", "")
83        @formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
84      end
85    end
86  end
87
88  private
89
90  def page
91    @save_stdout = $stdout
92    $stdout = io = StringIO.new
93    yield
94    io.string
95  ensure
96    $stdout = @save_stdout
97  end
98end
99