]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/mark-engraver.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / mark-engraver.cc
index 6eb7ee321de0054f6838d79f1725b81d4e229f6c..b96ef69182b2ceb80abdb3e141180ca45c1db2e8 100644 (file)
@@ -54,11 +54,12 @@ protected:
   void stop_translation_timestep ();
   virtual void finalize ();
 
-  DECLARE_TRANSLATOR_LISTENER (mark);
-  DECLARE_ACKNOWLEDGER (break_alignment);
+  void listen_mark (Stream_event *);
+  void acknowledge_break_alignment (Grob_info);
 };
 
-Mark_engraver::Mark_engraver ()
+Mark_engraver::Mark_engraver (Context *c)
+  : Engraver (c)
 {
   text_ = 0;
   final_text_ = 0;
@@ -111,7 +112,6 @@ Mark_engraver::create_items (Stream_event *ev)
   text_ = make_item ("RehearsalMark", ev->self_scm ());
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Mark_engraver, mark);
 void
 Mark_engraver::listen_mark (Stream_event *ev)
 {
@@ -140,30 +140,32 @@ Mark_engraver::process_music ()
           if (!scm_is_number (m))
             m = get_property ("rehearsalMark");
 
-          if (scm_integer_p (m) == SCM_BOOL_T
-              && scm_exact_p (m) == SCM_BOOL_T)
+          if (scm_is_number (m))
             {
-              int mark_count = scm_to_int (m);
-              mark_count++;
-              context ()->set_property ("rehearsalMark",
-                                        scm_from_int (mark_count));
+              context ()->set_property ("rehearsalMark", scm_oneplus (m));
+              m = scm_call_2 (proc, m, context ()->self_scm ());
             }
-
-          if (scm_is_number (m))
-            m = scm_call_2 (proc, m, context ()->self_scm ());
           else
-            /* FIXME: constant error message.  */
-            warning (_ ("rehearsalMark must have integer value"));
+            /* Score.rehearsalMark is initialized to #1 so we
+               never should see this case without user error */
+            mark_ev_->origin ()->warning
+              (_ ("rehearsalMark must have integer value"));
         }
 
       if (Text_interface::is_markup (m))
         text_->set_property ("text", m);
       else
-        warning (_ ("mark label must be a markup object"));
+        mark_ev_->origin ()->warning (_ ("mark label must be a markup object"));
     }
 }
 
-ADD_ACKNOWLEDGER (Mark_engraver, break_alignment);
+
+void
+Mark_engraver::boot ()
+{
+  ADD_LISTENER (Mark_engraver, mark);
+  ADD_ACKNOWLEDGER (Mark_engraver, break_alignment);
+}
 
 ADD_TRANSLATOR (Mark_engraver,
                 /* doc */