@end itemize
There are also Scheme functions to access all of these logging functions from
-scheme.
+scheme. In addition, the Grob class contains some convenience wrappers for
+even easier access to these functions.
The message and debug functions in @code{warn.hh} also have an optional
argument @code{newline}, which specifies whether the message should always
@item @tab @tab
@headitem
-@tab Scheme, no location
-@tab Scheme, input location
+@tab C++ from a Grob
+@tab Scheme, music expression
@item ERROR
+@tab @code{Grob::programming_error (msg)}
@tab -
-@tab @code{(ly:error msg args)}, @code{(ly:programming-error msg args)}
@item WARN
-@tab @code{(ly:warning msg args)}
-@tab @code{(ly:input-warning input msg args)}
+@tab @code{Grob::warning (msg)}
+@tab @code{(ly:music-warning music msg)}
@item BASIC
-@tab @code{(ly:success msg args)}
+@tab -
@tab -
@item PROGRESS
-@tab (ly:progress msg args), (ly:message msg args)
-@tab @code{(ly:input-message input msg args)}
+@tab -
+@tab @code{(ly:music-message music msg)}
@item DEBUG
-@tab @code{(ly:debug msg args)}
@tab -
-
+@tab -
@item @tab @tab
@headitem
-@tab Scheme, music expression
-@tab
+@tab Scheme, no location
+@tab Scheme, input location
@item ERROR
@tab -
+@tab @code{(ly:error msg args)}, @code{(ly:programming-error msg args)}
@item WARN
-@tab @code{(ly:music-warning music msg)}
+@tab @code{(ly:warning msg args)}
+@tab @code{(ly:input-warning input msg args)}
@item BASIC
+@tab @code{(ly:success msg args)}
@tab -
@item PROGRESS
-@tab @code{(ly:music-message music msg)}
+@tab (ly:progress msg args), (ly:message msg args)
+@tab @code{(ly:input-message input msg args)}
@item DEBUG
+@tab @code{(ly:debug msg args)}
@tab -
+
@end multitable
MESSAGES
****************************************************************/
void
-Grob::warning (string s) const
+Grob::programming_error (string s) const
{
- if (get_program_option ("warning-as-error"))
- error (s);
+ SCM cause = self_scm ();
+ while (Grob *g = unsmob_grob (cause))
+ cause = g->get_property ("cause");
+ /* ES TODO: cause can't be Music*/
+ if (Music *m = unsmob_music (cause))
+ m->origin ()->programming_error (s);
+ else if (Stream_event *ev = unsmob_stream_event (cause))
+ ev->origin ()->programming_error (s);
+ else
+ ::programming_error (s);
+}
+
+void
+Grob::warning (string s) const
+{
SCM cause = self_scm ();
while (Grob *g = unsmob_grob (cause))
cause = g->get_property ("cause");
return scm_is_symbol (nm) ? ly_symbol2string (nm) : this->class_name ();
}
-void
-Grob::programming_error (string s) const
-{
- if (get_program_option ("warning-as-error"))
- error (s);
-
- SCM cause = self_scm ();
- while (Grob *g = unsmob_grob (cause))
- cause = g->get_property ("cause");
-
- s = _f ("programming error: %s", s);
-
- /* ES TODO: cause can't be Music*/
- if (Music *m = unsmob_music (cause))
- m->origin ()->message (s);
- else if (Stream_event *ev = unsmob_stream_event (cause))
- ev->origin ()->message (s);
- else
- ::message (s);
-}
-
ADD_INTERFACE (Grob,
"A grob represents a piece of music notation.\n"
"\n"