def help(topic="")
case topic
when /fail(?:ed)?\s*plugins?.*(trace(?:back)?s?)?/
return "no plugins failed to load" if @failed.empty?
return (@failed.inject(Array.new) { |list, p|
list << "#{Bold}#{p[:name]}#{Bold} in #{p[:dir]} failed"
list << "with error #{p[:reason].class}: #{p[:reason]}"
list << "at #{p[:reason].backtrace.join(', ')}" if $1 and not p[:reason].backtrace.empty?
list
}).join("\n")
when /ignored?\s*plugins?/
return "no plugins were ignored" if @ignored.empty?
return (@ignored.inject(Array.new) { |list, p|
case p[:reason]
when :loaded
list << "#{p[:name]} in #{p[:dir]} (overruled by previous)"
else
list << "#{p[:name]} in #{p[:dir]} (#{p[:reason].to_s})"
end
list
}).join(", ")
when /^(\S+)\s*(.*)$/
key = $1
params = $2
if(@@plugins.has_key?(key))
begin
return @@plugins[key].help(key, params)
rescue Exception => err
error "plugin #{@@plugins[key].name} help() failed: #{err.class}: #{err}"
error err.backtrace.join("\n")
end
else
return false
end
end
end