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