]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/vaticana-ligature-engraver.cc
(replace_whitespace): UTF-8 characters are up to 4 bytes long.
[lilypond.git] / lily / vaticana-ligature-engraver.cc
index 94fe3f293ded215d09f7ed2eb96a8b96c820e669..45a30edf6c8faeaa8608870deba0c37fc0afffad 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2003--2006 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2003--2007 Juergen Reuter <reuter@ipd.uka.de>
 */
 
 #include "gregorian-ligature-engraver.hh"
@@ -13,6 +13,7 @@
 #include "international.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
+#include "separation-item.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
 #include "stream-event.hh"
  * negative impact, since dotted notes appear within a ligature
  * usually always at the end of the ligature, such that the bug never
  * should apply for valid ligatures.
+ *
+ * TODO: Graduale Triplex, tempus per annum, hebdomada septima,
+ * alleluia (page 280) shows a counter-example for collecting dots
+ * always in a single column behind the ligature.  Maybe only the last
+ * two dots in a ligature should be collected and all other dots put
+ * behind or on top of the head?
  */
 class Vaticana_ligature_engraver : public Gregorian_ligature_engraver
 {
@@ -407,6 +414,9 @@ Vaticana_ligature_engraver::add_mora_column (Paper_column *column)
       dot->set_parent (primitive, Y_AXIS);
       primitive->set_object ("dot", dot->self_scm ());
       Dot_column::add_head (dotcol, primitive);
+
+      // FIXME: why isn't the dot picked up by Paper_column_engraver?
+      Separation_item::add_item (column, dot);
     }
 }
 
@@ -427,10 +437,10 @@ Vaticana_ligature_engraver::add_mora_column (Paper_column *column)
 void
 Vaticana_ligature_engraver::check_for_ambiguous_dot_pitch (Grob_info primitive)
 {
-  // TODO: Fix performance, which is currently O(n^2) (since this
-  // method is called O(n) times and takes O(n) steps in the for
-  // loop), but could be O(n) (by replacing the for loop by e.g. a
-  // bitmask based O(1) test); where n=<number of primitives in the
+  // TODO: Fix performance, which is currently O (n^2) (since this
+  // method is called O (n) times and takes O (n) steps in the for
+  // loop), but could be O (n) (by replacing the for loop by e.g. a
+  // bitmask based O (1) test); where n=<number of primitives in the
   // ligature> (which is typically small (n<10), though).
   Stream_event *new_cause = primitive.event_cause ();
   int new_pitch = unsmob_pitch (new_cause->get_property ("pitch"))->steps ();
@@ -675,7 +685,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
 
       if (prev_primitive)
        prev_primitive->set_property ("glyph-name",
-                                     scm_makfrom0str (prev_glyph_name.c_str ()));
+                                     ly_string2scm (prev_glyph_name));
 
       /*
        * In the backend, flexa shapes and joins need to know about line
@@ -693,7 +703,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
     }
 
   prev_primitive->set_property ("glyph-name",
-                               scm_makfrom0str (prev_glyph_name.c_str ()));
+                               ly_string2scm (prev_glyph_name));
 
   align_heads (primitives, flexa_width, thickness);
 
@@ -718,6 +728,5 @@ ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head);
 ADD_TRANSLATOR (Vaticana_ligature_engraver,
                /* doc */ "Handles ligatures by glueing special ligature heads together.",
                /* create */ "VaticanaLigature DotColumn",
-               /* accept */ "ligature-event",
                /* read */ "",
                /* write */ "");