]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix segfault with ambitus and ligature (Issue 1715)
authorCarl Sorensen <c_sorensen@byu.edu>
Sun, 3 Jul 2011 21:07:05 +0000 (15:07 -0600)
committerCarl Sorensen <c_sorensen@byu.edu>
Sun, 10 Jul 2011 02:10:37 +0000 (20:10 -0600)
Add ligature-head-interface, and assign to NoteHead.

Change acknowledger to acknowledge ligature-head instead of note-head

Also includes regression test.

input/regression/ambitus-with-ligature.ly [new file with mode: 0644]
lily/include/ligature-engraver.hh
lily/ligature-engraver.cc
lily/mensural-ligature-engraver.cc
lily/vaticana-ligature-engraver.cc
scm/define-grob-interfaces.scm
scm/define-grobs.scm

diff --git a/input/regression/ambitus-with-ligature.ly b/input/regression/ambitus-with-ligature.ly
new file mode 100644 (file)
index 0000000..6f1ede4
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.14"
+
+\header {
+  texidoc = "
+A @code{\Voice} should be able to contain both an @code{Ambitus_engraver}
+and a @code{Mensural_ligature_engraver} without segfaulting.
+  "
+}
+
+\score{
+  {
+    \context Staff="default" {
+      \[ c'\longa c''\longa \]
+    }
+  }
+  \layout {
+    \context{
+      \Voice
+      \consists Ambitus_engraver
+      \consists Mensural_ligature_engraver
+    }
+  }
+}
index 0308ab3e5fe89ea92b2be75bb956b03b78b5579e..4a2da856c214c1423085320183bae19ce97bf07a 100644 (file)
@@ -31,7 +31,7 @@ protected:
   virtual void finalize ();
 
   DECLARE_ACKNOWLEDGER (rest);
-  DECLARE_ACKNOWLEDGER (note_head);
+  DECLARE_ACKNOWLEDGER (ligature_head);
   virtual void listen_ligature (Stream_event *ev);
   void process_music ();
   virtual Spanner *create_ligature_spanner () = 0;
index be4917f0c735ec5da9078c875af32a0317ce35ea..99e86ed20b193a1da92e40532ebac1a85f340d2a 100644 (file)
@@ -143,7 +143,7 @@ Ligature_engraver::process_music ()
 
       ligature_start_mom_ = now_mom ();
 
-      // TODO: dump cause into make_item/spanner. 
+      // TODO: dump cause into make_item/spanner.
       // announce_grob (ligature_, events_drul_[START]->self_scm ());
     }
 }
@@ -194,15 +194,13 @@ Ligature_engraver::current_ligature ()
 }
 
 void
-Ligature_engraver::acknowledge_note_head (Grob_info info)
+Ligature_engraver::acknowledge_ligature_head (Grob_info info)
 {
   if (ligature_)
     {
       primitives_.push_back (info);
       if (info.grob () && brew_ligature_primitive_proc != SCM_EOL)
-       {
-         info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
-       }
+        info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
     }
 }
 
index d6e8eed3ca3ffc700ba27a4d80905732496dff8a..ead5f1f0ad7d8242f89e69672a3216530930a8bc 100644 (file)
@@ -59,7 +59,7 @@ protected:
   virtual Spanner *create_ligature_spanner ();
   virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
   DECLARE_TRANSLATOR_LISTENER (ligature);
-  
+
 public:
   TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
 
@@ -78,7 +78,7 @@ Mensural_ligature_engraver::listen_ligature (Stream_event *ev)
 
 Mensural_ligature_engraver::Mensural_ligature_engraver ()
 {
-  brew_ligature_primitive_proc = 
+  brew_ligature_primitive_proc =
     Mensural_ligature::brew_ligature_primitive_proc;
 }
 
@@ -473,7 +473,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature,
 }
 
 ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Mensural_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Mensural_ligature_engraver, ligature_head);
 
 ADD_TRANSLATOR (Mensural_ligature_engraver,
                /* doc */
index df3a3d4ec4050e94f8f5c3dbf595ea08f734bb9c..5402a8fb01da24f005a09caafe2c2b054f6bc42e 100644 (file)
@@ -102,7 +102,7 @@ Vaticana_ligature_engraver::listen_ligature (Stream_event *ev)
 
 Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
 {
-  brew_ligature_primitive_proc = 
+  brew_ligature_primitive_proc =
     Vaticana_ligature::brew_ligature_primitive_proc;
   augmented_primitives_.clear ();
 }
@@ -742,7 +742,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
 }
 
 ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, ligature_head);
 ADD_TRANSLATOR (Vaticana_ligature_engraver,
                /* doc */
                "Handle ligatures by glueing special ligature heads"
index a7090de0327ff19fbd57c011ff33f5d4ac695f0d..735b9c78956e4e602f41478525379bb344880232 100644 (file)
@@ -123,6 +123,11 @@ accidentals)."
  "A key cancellation."
  '())
 
+(ly:add-interface
+ 'ligature-head-interface
+ "A note head that can become part of a ligature."
+ '())
+
 (ly:add-interface
  'ligature-bracket-interface
  "A bracket indicating a ligature in the original edition."
index a5c13d51953fcafd1172af8a4b8707a89654e338..c57675530b8c7016709b71f1b88e9c60f28c8a6f 100644 (file)
                 (interfaces . (font-interface
                                gregorian-ligature-interface
                                ledgered-interface
+                                ligature-head-interface
                                mensural-ligature-interface
                                note-head-interface
                                rhythmic-grob-interface