]> git.donarmstrong.com Git - lilypond.git/commitdiff
Figured Bass: Break extender line if we have a different augmentation/diminished
authorReinhold Kainhofer <reinhold@kainhofer.com>
Tue, 21 Oct 2008 21:36:25 +0000 (23:36 +0200)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Tue, 11 Nov 2008 23:15:45 +0000 (00:15 +0100)
So far, an extender line was only broken when a figure had a different
alteration (+,-,!), but not if it had a different augmentation (\\, \+
or /). This patch also stores the state of the other modifiers and
breaks the extender if they change.

input/regression/figured-bass-continuation-modifiers.ly [new file with mode: 0644]
lily/figured-bass-engraver.cc

diff --git a/input/regression/figured-bass-continuation-modifiers.ly b/input/regression/figured-bass-continuation-modifiers.ly
new file mode 100644 (file)
index 0000000..de92cda
--- /dev/null
@@ -0,0 +1,21 @@
+\header {
+
+  texidoc = "Figured bass extender lines shall be broken when a figure has
+  a different alteration, augmentation or diminishment."
+
+}
+
+\version "2.11.63"
+\paper {
+  ragged-right = ##t
+}
+
+<<
+  \relative \new Voice {
+    c8 c c c c c
+  }
+  \figures {
+    \bassFigureExtendersOn
+    <6 4 3>8 <6\\ 4! 3!> <6 4- 3+> <6/ 4\+ 3>  <6 4\! 3+>  <6\+ 4\+ 3++>
+  } 
+>>
index 782574e5e6e97a491a977379d6f76a556e5199ec..a0554eed5887a21d682605fa73d6087cc0d010f9 100644 (file)
@@ -28,6 +28,9 @@ struct Figure_group
   
   SCM number_;
   SCM alteration_;
+  SCM augmented_;
+  SCM diminished_;
+  SCM augmented_slash_;
   
   Item *figure_item_; 
   Stream_event *current_event_;
@@ -40,6 +43,9 @@ struct Figure_group
     continuation_line_ = 0;
     number_ = SCM_EOL;
     alteration_ = SCM_EOL;
+    augmented_ = SCM_EOL;
+    diminished_ = SCM_EOL;
+    augmented_slash_ = SCM_EOL;
     group_ = 0;
     current_event_ = 0;
   }
@@ -51,7 +57,13 @@ struct Figure_group
       && ly_is_equal (number_,
                      current_event_->get_property ("figure"))
       && ly_is_equal (alteration_,
-                     current_event_->get_property ("alteration"));
+                     current_event_->get_property ("alteration"))
+      && ly_is_equal (augmented_,
+                     current_event_->get_property ("augmented"))
+      && ly_is_equal (diminished_,
+                     current_event_->get_property ("diminished"))
+      && ly_is_equal (augmented_slash_,
+                     current_event_->get_property ("augmented-slash"));
   }
 };
 
@@ -91,6 +103,9 @@ Figured_bass_engraver::derived_mark () const
     {
       scm_gc_mark (groups_[i].number_);
       scm_gc_mark (groups_[i].alteration_);
+      scm_gc_mark (groups_[i].augmented_);
+      scm_gc_mark (groups_[i].diminished_);
+      scm_gc_mark (groups_[i].augmented_slash_);
     }
 }
 
@@ -348,6 +363,9 @@ Figured_bass_engraver::process_music ()
        {
          groups_[i].number_ = SCM_BOOL_F;
          groups_[i].alteration_ = SCM_BOOL_F;
+         groups_[i].augmented_ = SCM_BOOL_F;
+         groups_[i].diminished_ = SCM_BOOL_F;
+         groups_[i].augmented_slash_ = SCM_BOOL_F;
        }
     }
 
@@ -451,6 +469,9 @@ Figured_bass_engraver::create_grobs ()
          
          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");
 
          SCM text = group.current_event_->get_property ("text");
          if (!Text_interface::is_markup (text)