4
# This is a kind of 'flag' module. If you want to write your own 'ri' display
5
# module (perhaps because you'r writing an IDE or somesuch beast), you simply
6
# write a class which implements the various 'display' methods in
7
# 'DefaultDisplay', and include the 'RiDisplay' module in that class.
9
# To access your class from the command line, you can do
11
# ruby -r <your source file> ../ri ....
13
module RDoc::RI::Display
17
def self.append_features(display_class)
18
@@display_class = display_class
22
@@display_class.new(*args)
28
# A paging display module. Uses the RDoc::RI::Formatter class to do the actual
31
class RDoc::RI::DefaultDisplay
33
include RDoc::RI::Display
35
def initialize(formatter, width, use_stdout)
36
@use_stdout = use_stdout
37
@formatter = formatter.new $stdout, width, " "
40
def display_method_info(method)
42
@formatter.draw_line(method.full_name)
43
display_params(method)
45
display_flow(method.comment)
46
if method.aliases && !method.aliases.empty?
48
aka = "(also known as "
49
aka << method.aliases.map {|a| a.name }.join(", ")
56
def display_class_info(klass, ri_reader)
58
superclass = klass.superclass_string
61
superclass = " < " + superclass
66
@formatter.draw_line(klass.display_name + ": " +
67
klass.full_name + superclass)
69
display_flow(klass.comment)
72
unless klass.includes.empty?
74
@formatter.display_heading("Includes:", 2, "")
76
klass.includes.each do |inc|
77
inc_desc = ri_reader.find_class_by_name(inc.name)
80
str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
87
@formatter.wrap(incs.sort.join(', '))
90
unless klass.constants.empty?
92
@formatter.display_heading("Constants:", 2, "")
94
klass.constants.each { |c| len = c.name.length if c.name.length > len }
96
klass.constants.each do |c|
97
@formatter.wrap(c.value,
98
@formatter.indent+((c.name+":").ljust(len)))
102
unless klass.class_methods.empty?
104
@formatter.display_heading("Class methods:", 2, "")
105
@formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
108
unless klass.class_method_extensions.empty?
110
@formatter.display_heading("Class Method Extensions:", 2, "")
111
@formatter.wrap(klass.class_method_extensions.map{|m| m.name}.sort.join(', '))
114
unless klass.instance_methods.empty?
116
@formatter.display_heading("Instance methods:", 2, "")
117
@formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
120
unless klass.instance_method_extensions.empty?
122
@formatter.display_heading("Instance Method Extensions:", 2, "")
123
@formatter.wrap(klass.instance_method_extensions.map{|m| m.name}.sort.join(', '))
126
unless klass.attributes.empty?
128
@formatter.wrap("Attributes:", "")
129
@formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
135
# Display a list of method names
137
def display_method_list(methods)
139
@formatter.raw_print_line("More than one method matched your request. You can refine")
140
@formatter.raw_print_line("your search by asking for information on one of:\n\n")
141
@formatter.wrap(methods.map {|m| m.full_name} .join(", "))
145
def display_class_list(namespaces)
147
@formatter.raw_print_line("More than one class or module matched your request. You can refine")
148
@formatter.raw_print_line("your search by asking for information on one of:\n\n")
149
@formatter.wrap(namespaces.map {|m| m.full_name}.join(", "))
153
def list_known_classes(classes)
158
@formatter.draw_line("Known classes and modules")
160
@formatter.wrap(classes.sort.join(", "))
165
def list_known_names(names)
170
names.each {|n| @formatter.raw_print_line(n)}
178
if pager = setup_pager then
180
orig_output = @formatter.output
181
@formatter.output = pager
184
@formatter.output = orig_output
194
unless @use_stdout then
195
for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq
196
return IO.popen(pager, "w") rescue nil
203
def display_params(method)
204
params = method.params
206
if params[0,1] == "("
207
if method.is_singleton
208
params = method.full_name + params
210
params = method.name + params
213
params.split(/\n/).each do |p|
215
@formatter.break_to_newline
217
if method.source_path then
219
@formatter.wrap("Extension from #{method.source_path}")
223
def display_flow(flow)
224
if !flow || flow.empty?
225
@formatter.wrap("(no description...)")
227
@formatter.display_flow(flow)
232
puts "No ri data found"
234
puts "If you've installed Ruby yourself, you need to generate documentation using:"
236
puts " make install-doc"
238
puts "from the same place you ran `make` to build ruby."
240
puts "If you installed Ruby from a packaging system, then you may need to"
241
puts "install an additional package, or ask the packager to enable ri generation."