]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/mensural-ligature-engraver.cc
* lily/mensural-ligature-engraver.cc: bugfix: another victim of
[lilypond.git] / lily / mensural-ligature-engraver.cc
index 1611f40cb93d2b3bb817c9f6ee10a3cf1bb3e0b4..33d42b17d2db704659fecd65482a3a2f120d049f 100644 (file)
@@ -3,22 +3,21 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2002--2003 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2005 Juergen Reuter <reuter@ipd.uka.de>
  */
 
-#include "mensural-ligature.hh"
 #include "coherent-ligature-engraver.hh"
+
+#include "mensural-ligature.hh"
 #include "event.hh"
 #include "warn.hh"
-#include "item.hh"
 #include "spanner.hh"
-#include "rod.hh"
 #include "paper-column.hh"
 #include "note-column.hh"
 #include "rhythmic-head.hh"
 #include "note-head.hh"
 #include "staff-symbol-referencer.hh"
-#include "paper-def.hh"
+#include "output-def.hh"
 #include "font-interface.hh"
 
 /*
@@ -54,7 +53,7 @@ protected:
   virtual void build_ligature (Spanner *ligature, Array<Grob_info> primitives);
 
 public:
-  TRANSLATOR_DECLARATIONS(Mensural_ligature_engraver);
+  TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
 
 private:
   int apply_transition (Array<Grob_info> primitives,
@@ -73,7 +72,7 @@ Mensural_ligature_engraver::Mensural_ligature_engraver ()
 Spanner *
 Mensural_ligature_engraver::create_ligature_spanner ()
 {
-  return make_spanner ("MensuralLigature");
+  return make_spanner ("MensuralLigature", SCM_EOL);
 }
 
 /*
@@ -211,7 +210,7 @@ Mensural_ligature_engraver::apply_transition (Array<Grob_info> primitives,
            programming_error ("last_primitive undefined");
            break;
          }
-       last_primitive->set_grob_property ("primitive", gh_int2scm (output));
+       last_primitive->set_property ("primitive", scm_int2num (output));
        break;
       case MLP_BB:
       case MLP_LB:
@@ -226,8 +225,8 @@ Mensural_ligature_engraver::apply_transition (Array<Grob_info> primitives,
            programming_error ("primitive undefined");
            break;
          }
-       last_primitive->set_grob_property ("primitive", gh_int2scm (output));
-       primitive->set_grob_property ("primitive", gh_int2scm (MLP_NONE));
+       last_primitive->set_property ("primitive", scm_int2num (output));
+       primitive->set_property ("primitive", scm_int2num (MLP_NONE));
        break;
       case MLP_SS:
        // delayed primitive with two note heads
@@ -241,8 +240,8 @@ Mensural_ligature_engraver::apply_transition (Array<Grob_info> primitives,
            programming_error ("last_primitive undefined");
            break;
          }
-       last_last_primitive->set_grob_property ("primitive", gh_int2scm (output));
-       last_primitive->set_grob_property ("primitive", gh_int2scm (MLP_NONE));
+       last_last_primitive->set_property ("primitive", scm_int2num (output));
+       last_primitive->set_property ("primitive", scm_int2num (MLP_NONE));
        break;
       default:
        programming_error (_f ("unexpected case fall-through"));
@@ -284,7 +283,7 @@ Mensural_ligature_engraver::transform_heads (Array<Grob_info> primitives)
       }
     else
       {
-       pitch = *unsmob_pitch (nr->get_mus_property ("pitch"));
+       pitch = *unsmob_pitch (nr->get_property ("pitch"));
        have_pitch = 1;
       }
 
@@ -337,19 +336,19 @@ Mensural_ligature_engraver::transform_heads (Array<Grob_info> primitives)
  * these properties via the concrete Ligature grob (like
  * MensuralLigature) and then copy these properties as necessary to
  * each of the NoteHead grobs.  This is what
- * propagate_properties() does.
+ * propagate_properties () does.
  */
 void
 Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
                                                  Array<Grob_info> primitives)
 {
-  Real thickness = robust_scm2double (ligature->get_grob_property ("thickness"), 1.4);
-  thickness *= ligature->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
+  Real thickness = robust_scm2double (ligature->get_property ("thickness"), 1.4);
+  thickness *= ligature->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
 
   Real head_width =
     Font_interface::get_default_font (ligature)->
-    find_by_name ("noteheads--1mensural").extent (X_AXIS).length ();
-    Real flexa_width = robust_scm2double (ligature->get_grob_property ("flexa-width"), 2);
+    find_by_name ("noteheads.s-1mensural").extent (X_AXIS).length ();
+    Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
   flexa_width *= Staff_symbol_referencer::staff_space (ligature);
 
   Real half_flexa_width = 0.5 * (flexa_width + thickness);
@@ -357,27 +356,27 @@ Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
   for (int i = 0; i < primitives.size (); i++)
     {
       Item *primitive = dynamic_cast<Item*> (primitives[i].grob_);
-      int output = gh_scm2int (primitive->get_grob_property ("primitive"));
-      primitive->set_grob_property ("thickness",
-                                   gh_double2scm (thickness));
+      int output = scm_to_int (primitive->get_property ("primitive"));
+      primitive->set_property ("thickness",
+                                   scm_make_real (thickness));
       switch (output) {
        case MLP_NONE:
-         primitive->set_grob_property ("head-width",
-                                       gh_double2scm (half_flexa_width));
+         primitive->set_property ("head-width",
+                                       scm_make_real (half_flexa_width));
          break;
        case MLP_sc:
        case MLP_ss:
        case MLP_cs:
-         primitive->set_grob_property ("head-width",
-                                       gh_double2scm (head_width));
+         primitive->set_property ("head-width",
+                                       scm_make_real (head_width));
          break;
        case MLP_BB:
        case MLP_LB:
        case MLP_SS:
-         primitive->set_grob_property ("head-width",
-                                       gh_double2scm (half_flexa_width));
-         primitive->set_grob_property ("flexa-width",
-                                       gh_double2scm (flexa_width));
+         primitive->set_property ("head-width",
+                                       scm_make_real (half_flexa_width));
+         primitive->set_property ("flexa-width",
+                                       scm_make_real (flexa_width));
          break;
        default:
          programming_error (_f ("unexpected case fall-through"));
@@ -407,8 +406,8 @@ Mensural_ligature_engraver::fold_up_primitives (Array<Grob_info> primitives)
        }
 
       distance +=
-       gh_scm2double (current->get_grob_property ("head-width")) -
-       gh_scm2double (current->get_grob_property ("thickness"));
+       scm_to_double (current->get_property ("head-width")) -
+       scm_to_double (current->get_property ("thickness"));
     }
 }
 
@@ -419,16 +418,16 @@ Mensural_ligature_engraver::join_primitives (Array<Grob_info> primitives)
   for (int i = 0; i < primitives.size (); i++)
     {
       Grob_info info = primitives[i];
-      Pitch pitch = *unsmob_pitch (info.music_cause ()->get_mus_property ("pitch"));
+      Pitch pitch = *unsmob_pitch (info.music_cause ()->get_property ("pitch"));
       if (i > 0)
         {
          Item *primitive = dynamic_cast<Item*> (info.grob_);
-         int output = gh_scm2int (primitive->get_grob_property ("primitive"));
+         int output = scm_to_int (primitive->get_property ("primitive"));
          if (output & MLP_ANY)
            {
              int delta_pitch = (pitch.steps () - last_pitch.steps ());
-             primitive->set_grob_property ("join-left-amount",
-                                           gh_int2scm (delta_pitch));
+             primitive->set_property ("join-left-amount",
+                                           scm_int2num (delta_pitch));
            }
        }
       last_pitch = pitch;
@@ -445,7 +444,7 @@ Mensural_ligature_engraver::build_ligature (Spanner *ligature,
   join_primitives (primitives);
 }
 
-ENTER_DESCRIPTION (Mensural_ligature_engraver,
+ADD_TRANSLATOR (Mensural_ligature_engraver,
 /* descr */       "Handles Mensural_ligature_events by glueing special ligature heads together.",
 /* creats*/       "MensuralLigature",
 /* accepts */     "ligature-event",