]> git.donarmstrong.com Git - lilypond.git/commitdiff
FiguredBass: method for extracting figure info; Shuffle functions around
authorReinhold Kainhofer <reinhold@kainhofer.com>
Wed, 17 Feb 2010 17:17:50 +0000 (18:17 +0100)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Mon, 22 Feb 2010 18:07:00 +0000 (19:07 +0100)
Shuffle functions around so their order is more intuitive

Also move extracting info from event to figure into a dedicated method
of the the Figure struct.

lily/figured-bass-engraver.cc

index 61b6fa2f8236594626f1c835983fe960bde5d1d5..05d3575d4c2a25965e3ab52c63dfdbd8d14981d1 100644 (file)
@@ -91,6 +91,16 @@ struct Figure_group
       current_event_
       && group_is_equal_to (current_event_);
   }
+  void assign_from_event (Stream_event *currevt, Item *item)
+  {
+    number_ = current_event_->get_property ("figure");
+    alteration_ = currevt->get_property ("alteration");
+    augmented_ = currevt->get_property ("augmented");
+    diminished_ = currevt->get_property ("diminished");
+    augmented_slash_ = currevt->get_property ("augmented-slash");
+    text_ = currevt->get_property ("text");
+    figure_item_ = item;
+  }
 };
 
 struct Figured_bass_engraver : public Engraver
@@ -122,6 +132,14 @@ protected:
   void process_music ();
 };
 
+Figured_bass_engraver::Figured_bass_engraver ()
+{
+  alignment_ = 0;
+  continuation_ = false;
+  have_rest_ = 0;
+  new_event_found_ = false;
+}
+
 void
 Figured_bass_engraver::derived_mark () const
 {
@@ -132,44 +150,34 @@ Figured_bass_engraver::derived_mark () const
 }
 
 void
-Figured_bass_engraver::stop_translation_timestep ()
+Figured_bass_engraver::start_translation_timestep ()
 {
-  if (groups_.empty ()
-      || now_mom ().main_part_ < stop_moment_.main_part_
+  if (now_mom ().main_part_ < stop_moment_.main_part_
       || now_mom ().grace_part_ < Rational (0))
     return ;
-  
-  bool found = false;
-  for (vsize i = 0; !found && i < groups_.size (); i++)
-    found  = found  || groups_[i].current_event_;
 
-  if (!found)
-    clear_spanners ();
-}
+  have_rest_ = 0;
+  new_events_.clear ();
+  for (vsize i = 0; i < groups_.size (); i++)
+    groups_[i].current_event_ = 0;
 
-Figured_bass_engraver::Figured_bass_engraver ()
-{
-  alignment_ = 0;
   continuation_ = false;
-  have_rest_ = 0;
-  new_event_found_ = false;
 }
 
 void
-Figured_bass_engraver::start_translation_timestep ()
+Figured_bass_engraver::stop_translation_timestep ()
 {
-  if (now_mom ().main_part_ < stop_moment_.main_part_
+  if (groups_.empty ()
+      || now_mom ().main_part_ < stop_moment_.main_part_
       || now_mom ().grace_part_ < Rational (0))
     return ;
-  
-  have_rest_ = 0;
-  new_events_.clear ();
-  for (vsize i = 0; i < groups_.size (); i++)
-    groups_[i].current_event_ = 0;
 
-  continuation_ = false;
+  bool found = false;
+  for (vsize i = 0; !found && i < groups_.size (); i++)
+    found  = found  || groups_[i].current_event_;
 
-  
+  if (!found)
+    clear_spanners ();
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, rest);
@@ -276,38 +284,6 @@ Figured_bass_engraver::clear_spanners ()
   /* Check me, groups_.clear () ? */
 }
 
-void
-Figured_bass_engraver::add_brackets ()
-{
-  vector<Grob*> encompass;
-  bool inside = false;
-  for (vsize i = 0; i < groups_.size (); i ++)
-    {
-      if (!groups_[i].current_event_)
-       continue;
-      
-      if (to_boolean (groups_[i].current_event_->get_property ("bracket-start")))      
-       inside = true;
-
-      if (inside && groups_[i].figure_item_)
-       encompass.push_back (groups_[i].figure_item_);
-
-       if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop")))
-       {
-         inside = false;
-
-         Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ());
-         for (vsize j = 0; j < encompass.size (); j++)
-           {
-             Pointer_group_interface::add_grob (brack,
-                                                ly_symbol2scm ("elements"),
-                                                encompass[j]);
-           }
-         encompass.clear ();
-       }
-    }
-}
-
 void
 Figured_bass_engraver::process_music ()
 {
@@ -449,44 +425,33 @@ Figured_bass_engraver::create_grobs ()
       if (group.current_event_)
        {
          Item *item
-           = make_item ("BassFigure",
-                        group.current_event_->self_scm ());
+           = make_item ("BassFigure", group.current_event_->self_scm ());
+         group.assign_from_event (group.current_event_, item);
 
-         
-         SCM fig = group.current_event_->get_property ("figure");
          if (!group.group_)
            {
              group.group_ = make_spanner ("BassFigureLine", SCM_EOL);
              group.group_->set_bound (LEFT, muscol);
-             Align_interface::add_element (alignment_,
-                                           group.group_);
+             Align_interface::add_element (alignment_, group.group_);
            }
 
-         if (scm_memq (fig, get_property ("implicitBassFigures")) != SCM_BOOL_F)
+         if (scm_memq (group.number_, get_property ("implicitBassFigures")) != SCM_BOOL_F)
            {
              item->set_property ("transparent", SCM_BOOL_T); 
              item->set_property ("implicit", SCM_BOOL_T);
            }
-         
-         group.number_ = fig;
-         group.alteration_ = group.current_event_->get_property ("alteration");
-         group.augmented_ = group.current_event_->get_property ("augmented");
-         group.diminished_ = group.current_event_->get_property ("diminished");
-         group.augmented_slash_ = group.current_event_->get_property ("augmented-slash");
-         group.text_ = group.current_event_->get_property ("text");
 
          SCM text = group.text_;
          if (!Text_interface::is_markup (text)
              && ly_is_procedure (proc))
            {
-             text = scm_call_3 (proc, fig, group.current_event_->self_scm (),
+             text = scm_call_3 (proc, group.number_, group.current_event_->self_scm (),
                                 context ()->self_scm ());
            }
 
          item->set_property ("text", text);
          
          Axis_group_interface::add_element (group.group_, item);
-         group.figure_item_ = item;
        }
 
       if (group.continuation_line_)
@@ -505,6 +470,38 @@ Figured_bass_engraver::create_grobs ()
 
 }
 
+void
+Figured_bass_engraver::add_brackets ()
+{
+  vector<Grob*> encompass;
+  bool inside = false;
+  for (vsize i = 0; i < groups_.size (); i ++)
+    {
+      if (!groups_[i].current_event_)
+       continue;
+
+      if (to_boolean (groups_[i].current_event_->get_property ("bracket-start")))
+       inside = true;
+
+      if (inside && groups_[i].figure_item_)
+       encompass.push_back (groups_[i].figure_item_);
+
+       if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop")))
+       {
+         inside = false;
+
+         Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ());
+         for (vsize j = 0; j < encompass.size (); j++)
+           {
+             Pointer_group_interface::add_grob (brack,
+                                                ly_symbol2scm ("elements"),
+                                                encompass[j]);
+           }
+         encompass.clear ();
+       }
+    }
+}
+
 ADD_TRANSLATOR (Figured_bass_engraver,
                /* doc */
                "Make figured bass numbers.",