2
# notifier.rb - output methods used by irb
3
# $Release Version: 0.9.5$
5
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
13
require "irb/output-method"
17
extend Exception2MessageMapper
18
def_exception :ErrUndefinedNotifier,
19
"undefined notifier level: %d is specified"
20
def_exception :ErrUnrecognizedLevel,
21
"unrecognized notifier level: %s is specified"
23
def def_notifier(prefix = "", output_method = StdioOutputMethod.new)
24
CompositeNotifier.new(prefix, output_method)
26
module_function :def_notifier
28
class AbstructNotifier
29
def initialize(prefix, base_notifier)
31
@base_notifier = base_notifier
41
@base_notifier.print prefix, *opts if notify?
45
@base_notifier.printn prefix, *opts if notify?
48
def printf(format, *opts)
49
@base_notifier.printf(prefix + format, *opts) if notify?
54
@base_notifier.puts(*objs.collect{|obj| prefix + obj.to_s})
60
@base_notifier.ppx @prefix, *objs
64
def ppx(prefix, *objs)
66
@base_notifier.ppx @prefix+prefix, *objs
71
yield(@base_notifier) if notify?
75
class CompositeNotifier<AbstructNotifier
76
def initialize(prefix, base_notifier)
79
@notifiers = [D_NOMSG]
80
@level_notifier = D_NOMSG
83
attr_reader :notifiers
85
def def_notifier(level, prefix = "")
86
notifier = LeveledNotifier.new(self, level, prefix)
87
@notifiers[level] = notifier
91
attr_reader :level_notifier
92
alias level level_notifier
94
def level_notifier=(value)
97
@level_notifier = value
100
Notifier.Raise ErrUndefinedNotifer, value unless l
103
Notifier.Raise ErrUnrecognizedLevel, value unless l
107
alias level= level_notifier=
110
class LeveledNotifier<AbstructNotifier
113
def initialize(base, level, prefix)
122
@level <=> other.level
126
@base_notifier.level >= self
130
class NoMsgNotifier<LeveledNotifier
142
D_NOMSG = NoMsgNotifier.new