]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/vaticana-ligature-engraver.cc
* scm/layout-page-dump.scm (scm): export utility function names,
[lilypond.git] / lily / vaticana-ligature-engraver.cc
index 31005fac31d6a123a5c94ec0215ac2b778213004..f84ecaa6b214cefbece2a3a473fe4d3454385eb2 100644 (file)
@@ -7,14 +7,17 @@
 */
 
 #include "gregorian-ligature-engraver.hh"
+
+#include "font-interface.hh"
 #include "gregorian-ligature.hh"
-#include "vaticana-ligature.hh"
+#include "international.hh"
+#include "output-def.hh"
+#include "paper-column.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
-#include "font-interface.hh"
+#include "stream-event.hh"
+#include "vaticana-ligature.hh"
 #include "warn.hh"
-#include "output-def.hh"
-#include "paper-column.hh"
 
 #include "translator.icc"
 
@@ -32,7 +35,7 @@ private:
                               int context_info, int delta_pitch);
   bool is_stacked_head (int prefix_set,
                        int context_info);
-  Real align_heads (Array<Grob_info> primitives,
+  Real align_heads (vector<Grob_info> primitives,
                    Real flexa_width,
                    Real thickness);
 
@@ -42,9 +45,25 @@ public:
 protected:
   virtual Spanner *create_ligature_spanner ();
   virtual void transform_heads (Spanner *ligature,
-                               Array<Grob_info> primitives);
+                               vector<Grob_info> primitives);
+  DECLARE_TRANSLATOR_LISTENER (pes_or_flexa);
+  DECLARE_TRANSLATOR_LISTENER (ligature);
 };
 
+IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, pes_or_flexa);
+void
+Vaticana_ligature_engraver::listen_pes_or_flexa (Stream_event *ev)
+{
+  Gregorian_ligature_engraver::listen_pes_or_flexa (ev);
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, ligature);
+void
+Vaticana_ligature_engraver::listen_ligature (Stream_event *ev)
+{
+  Ligature_engraver::listen_ligature (ev);
+}
+
 Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
 {
   brew_ligature_primitive_proc = 
@@ -143,7 +162,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in
 }
 
 Real
-Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
+Vaticana_ligature_engraver::align_heads (vector<Grob_info> primitives,
                                         Real flexa_width,
                                         Real thickness)
 {
@@ -161,7 +180,7 @@ Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
     = dynamic_cast<Item *> (primitives[0].grob ())->get_column ();
 
   Real join_thickness
-    = thickness * column->layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+    = thickness * column->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
 
   /*
    * Amount of extra space two put between some particular
@@ -178,7 +197,7 @@ Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
 
   Item *prev_primitive = 0;
   int prev_prefix_set = 0;
-  for (int i = 0; i < primitives.size (); i++)
+  for (vsize i = 0; i < primitives.size (); i++)
     {
       Item *primitive = dynamic_cast<Item *> (primitives[i].grob ());
       int prefix_set
@@ -198,18 +217,18 @@ Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
                                        "ignoring grob");
          continue;
        }
-      String glyph_name = ly_scm2string (glyph_name_scm);
+      string glyph_name = ly_scm2string (glyph_name_scm);
 
       int delta_pitch = 0;
       if (prev_primitive) /* urgh, need prev_primitive only here */
        {
-         SCM delta_pitch_scm = prev_primitive->get_property ("delta-pitch");
+         SCM delta_pitch_scm = prev_primitive->get_property ("delta-position");
          if (delta_pitch_scm != SCM_EOL)
            delta_pitch = scm_to_int (delta_pitch_scm);
          else
            {
              primitive->programming_error ("Vaticana_ligature:"
-                                           "delta-pitch undefined -> "
+                                           "delta-position undefined -> "
                                            "ignoring grob");
              continue;
            }
@@ -236,8 +255,7 @@ Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
            - Font_interface::get_default_font (primitive)->
            find_by_name ("noteheads.s" + glyph_name).extent (X_AXIS).length ();
        }
-      else if (!String::compare (glyph_name, "flexa")
-              || !String::compare (glyph_name, ""))
+      else if (glyph_name == "flexa" || glyph_name == "")
        {
          /*
           * This head represents either half of a flexa shape.
@@ -290,7 +308,7 @@ Vaticana_ligature_engraver::align_heads (Array<Grob_info> primitives,
              ligature_width -= join_thickness;
            }
        }
-      else if (!String::compare (glyph_name, ""))
+      else if (glyph_name == "")
        {
          /*
           * This is the 2nd (virtual) head of flexa shape.  Join it
@@ -342,7 +360,7 @@ check_for_prefix_loss (Item *primitive)
     = scm_to_int (primitive->get_property ("prefix-set"));
   if (prefix_set & ~PES_OR_FLEXA)
     {
-      String prefs = Gregorian_ligature::prefixes_to_str (primitive);
+      string prefs = Gregorian_ligature::prefixes_to_str (primitive);
       primitive->warning (_f ("ignored prefix (es) `%s' of this head according "
                              "to restrictions of the selected ligature style",
                              prefs.c_str ()));
@@ -351,7 +369,7 @@ check_for_prefix_loss (Item *primitive)
 
 void
 Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
-                                            Array<Grob_info> primitives)
+                                            vector<Grob_info> primitives)
 {
   Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
 
@@ -361,19 +379,19 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
   int prev_prefix_set = 0;
   int prev_context_info = 0;
   int prev_delta_pitch = 0;
-  String prev_glyph_name = "";
-  for (int i = 0; i < primitives.size (); i++)
+  string prev_glyph_name = "";
+  for (vsize i = 0; i < primitives.size (); i++)
     {
       Item *primitive = dynamic_cast<Item *> (primitives[i].grob ());
 
       int delta_pitch;
-      SCM delta_pitch_scm = primitive->get_property ("delta-pitch");
+      SCM delta_pitch_scm = primitive->get_property ("delta-position");
       if (delta_pitch_scm != SCM_EOL)
        delta_pitch = scm_to_int (delta_pitch_scm);
       else
        {
          primitive->programming_error ("Vaticana_ligature:"
-                                       "delta-pitch undefined -> "
+                                       "delta-position undefined -> "
                                        "ignoring grob");
          continue;
        }
@@ -396,7 +414,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
        * this decision must be made here in the engraver rather than in
        * the backend).
        */
-      String glyph_name;
+      string glyph_name;
       if (prefix_set & VIRGA)
        {
          glyph_name = "vaticana.punctum";
@@ -504,7 +522,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
        * head of a pes, and if it is a punctum.
        */
       if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER))
-       if (!String::compare (glyph_name, "vaticana.punctum"))
+       if (glyph_name == "vaticana.punctum")
          primitive->set_property ("add-cauda", ly_bool2scm (true));
 
       /*
@@ -543,7 +561,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
        {
          if ((context_info & PES_UPPER) && (context_info & STACKED_HEAD))
            {
-             if (!String::compare (prev_glyph_name, "vaticana.punctum"))
+             if (prev_glyph_name == "vaticana.punctum")
                if (prev_delta_pitch > 1)
                  prev_glyph_name = "vaticana.lpes";
                else