]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/vaticana-ligature.cc
Run grand-replace (issue 3765)
[lilypond.git] / lily / vaticana-ligature.cc
index 7cc2263c44e8a44e432ac69aee4d1e0576ccf136..d8ac36b9a30c2c8f55b14bbcf8d6e5217a6378e2 100644 (file)
@@ -1,33 +1,43 @@
 /*
-  vaticana-ligature.cc -- implement Vaticana_ligature
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 2003--2004 Juergen Reuter <reuter@ipd.uka.de>
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2003--2014 Juergen Reuter <reuter@ipd.uka.de>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <math.h>
-#include "item.hh"
 #include "vaticana-ligature.hh"
+
+#include "bezier.hh"
 #include "font-interface.hh"
-#include "stencil.hh"
+#include "international.hh"
+#include "item.hh"
 #include "lookup.hh"
-#include "staff-symbol-referencer.hh"
 #include "note-head.hh"
 #include "output-def.hh"
-#include "bezier.hh"
+#include "staff-symbol-referencer.hh"
 #include "warn.hh"
 
 Stencil
 vaticana_brew_cauda (Grob *me,
-                    int pos,
-                    int delta_pitch,
-                    Real thickness,
-                    Real blotdiameter)
+                     int pos,
+                     int delta_pitch,
+                     Real thickness,
+                     Real blotdiameter)
 {
-  bool on_staffline = Staff_symbol_referencer::on_staffline (me, pos);
-  int interspaces = Staff_symbol_referencer::line_count (me)-1;
-  bool above_staff = pos > interspaces;
+  bool on_staffline = Staff_symbol_referencer::on_line (me, pos);
+  bool above_staff = pos > Staff_symbol_referencer::staff_span (me)[UP];
 
   if (delta_pitch > -1)
     {
@@ -38,25 +48,25 @@ vaticana_brew_cauda (Grob *me,
   if (on_staffline)
     {
       if (delta_pitch >= -1)
-       length = 1.30;
+        length = 1.30;
       else if (delta_pitch >= -2)
-       length = 1.35;
+        length = 1.35;
       else
-       length = 1.85;
+        length = 1.85;
     }
   else
     {
       if (delta_pitch >= -1)
-       if (above_staff)
-         length = 1.30;
-       else
-         length = 1.00;
+        if (above_staff)
+          length = 1.30;
+        else
+          length = 1.00;
       else if (delta_pitch >= -2)
-       length = 1.35;
+        length = 1.35;
       else if (delta_pitch >= -3)
-       length = 1.50;
+        length = 1.50;
       else
-       length = 1.85;
+        length = 1.85;
     }
   Box cauda_box (Interval (0, thickness), Interval (-length, 0));
   return Lookup::round_filled_box (cauda_box, blotdiameter);
@@ -67,8 +77,8 @@ vaticana_brew_cauda (Grob *me,
  */
 Stencil
 vaticana_brew_flexa (Grob *me,
-                    bool solid,
-                    Real line_thickness)
+                     bool solid,
+                     Real line_thickness)
 {
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Stencil stencil;
@@ -77,38 +87,34 @@ vaticana_brew_flexa (Grob *me,
   Real interval;
   SCM flexa_height_scm = me->get_property ("flexa-height");
   if (flexa_height_scm != SCM_EOL)
-    {
-      interval = scm_to_int (flexa_height_scm);
-    }
+    interval = scm_to_int (flexa_height_scm);
   else
     {
       me->warning ("Vaticana_ligature: "
-                  "flexa-height undefined; assuming 0");
+                   + _ ("flexa-height undefined; assuming 0"));
       interval = 0.0;
     }
 
   if (interval >= 0.0)
-    {
-      me->warning (_ ("ascending vaticana style flexa"));
-    }
+    me->warning (_ ("ascending vaticana style flexa"));
 
-  Real width = robust_scm2double ( me->get_property ("flexa-width"), 2);
+  Real width = robust_scm2double (me->get_property ("flexa-width"), 2);
 
   /*
    * Compensate curve thickness that appears to be smaller in steep
    * section of bend.
    */
-  Real left_height =
-    right_height +
-    min (0.12 * abs (interval), 0.3) * staff_space;
+  Real left_height
+    = right_height
+      + min (0.12 * abs (interval), 0.3) * staff_space;
 
   /*
    * Compensate optical illusion regarding vertical position of left
    * and right endings due to curved shape.
    */
-  Real ypos_correction = -0.1*staff_space * sign (interval);
-  Real interval_correction = 0.2*staff_space * sign (interval);
-  Real corrected_interval = interval*staff_space + interval_correction;
+  Real ypos_correction = -0.1 * staff_space * sign (interval);
+  Real interval_correction = 0.2 * staff_space * sign (interval);
+  Real corrected_interval = interval * staff_space + interval_correction;
 
   /*
    * middle curve of flexa shape
@@ -122,29 +128,29 @@ vaticana_brew_flexa (Grob *me,
   Bezier top_curve = curve, bottom_curve = curve;
   for (int i = 0; i < 4; i++)
     {
-      Real curve_thickness = 0.33 * ((3 - i)*left_height + i*right_height);
+      Real curve_thickness = 0.33 * ((3 - i) * left_height + i * right_height);
       top_curve.control_[i] += Offset (0, 0.5 * curve_thickness);
       bottom_curve.control_[i] -= Offset (0, 0.5 * curve_thickness);
     }
 
   if (solid)
     {
-      Stencil solid_head =
-       Lookup::bezier_sandwich (top_curve, bottom_curve);
+      Stencil solid_head
+        = Lookup::bezier_sandwich (top_curve, bottom_curve, 0.0);
       stencil.add_stencil (solid_head);
     }
   else // outline
     {
       Bezier inner_top_curve = top_curve;
       inner_top_curve.translate (Offset (0.0, -line_thickness));
-      Stencil top_edge =
-       Lookup::bezier_sandwich (top_curve, inner_top_curve);
+      Stencil top_edge
+        = Lookup::bezier_sandwich (top_curve, inner_top_curve, 0.0);
       stencil.add_stencil (top_edge);
 
       Bezier inner_bottom_curve = bottom_curve;
       inner_bottom_curve.translate (Offset (0.0, +line_thickness));
-      Stencil bottom_edge =
-       Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve);
+      Stencil bottom_edge
+        = Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve, 0.0);
       stencil.add_stencil (bottom_edge);
 
       /*
@@ -156,12 +162,12 @@ vaticana_brew_flexa (Grob *me,
        * the left end of the bezier curve.
        */
       Box left_edge_box (Interval (0, line_thickness),
-                        Interval (-0.5*left_height, +0.5*left_height));
+                         Interval (-0.5 * left_height, +0.5 * left_height));
       Stencil left_edge = Lookup::filled_box (left_edge_box);
       stencil.add_stencil (left_edge);
 
       Box right_edge_box (Interval (-line_thickness, 0),
-                         Interval (-0.5*right_height, +0.5*right_height));
+                          Interval (-0.5 * right_height, +0.5 * right_height));
       Stencil right_edge = Lookup::filled_box (right_edge_box);
       right_edge.translate_axis (width, X_AXIS);
       right_edge.translate_axis (corrected_interval / 2.0, Y_AXIS);
@@ -173,19 +179,19 @@ vaticana_brew_flexa (Grob *me,
 
 Stencil
 vaticana_brew_join (Grob *me, int delta_pitch,
-                   Real join_thickness, Real blotdiameter)
+                    Real join_thickness, Real blotdiameter)
 {
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   if (!delta_pitch)
     {
-      me->programming_error (_f ("Vaticana_ligature: "
-                                "zero join (delta_pitch == 0)"));
-      return Stencil ();
+      me->programming_error ("Vaticana_ligature: "
+                             "zero join (delta_pitch == 0)");
+      return Lookup::blank (Box (Interval (0, 0), Interval (0, 0)));
     }
   Interval x_extent = Interval (0, join_thickness);
-  Interval y_extent = (delta_pitch > 0) ?
-    Interval (0, delta_pitch * 0.5 * staff_space) : // ascending join
-    Interval (delta_pitch * 0.5 * staff_space, 0); // descending join
+  Interval y_extent = (delta_pitch > 0)
+                      ? Interval (0, delta_pitch * 0.5 * staff_space) : // ascending join
+                      Interval (delta_pitch * 0.5 * staff_space, 0); // descending join
   Box join_box (x_extent, y_extent);
   return Lookup::round_filled_box (join_box, blotdiameter);
 }
@@ -197,37 +203,37 @@ vaticana_brew_primitive (Grob *me)
   if (glyph_name_scm == SCM_EOL)
     {
       me->programming_error ("Vaticana_ligature: "
-                            "undefined glyph-name -> ignoring grob");
-      return Stencil ();
+                             "undefined glyph-name -> ignoring grob");
+      return Lookup::blank (Box (Interval (0, 0), Interval (0, 0)));
     }
 
-  String glyph_name = ly_scm2string (glyph_name_scm);
+  string glyph_name = ly_scm2string (glyph_name_scm);
 
   Stencil out;
-  Real thickness = robust_scm2double ( me->get_property ("thickness"), 1);
+  Real thickness = robust_scm2double (me->get_property ("thickness"), 1);
 
-  Real line_thickness =
-    thickness * me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+  Real line_thickness
+    = thickness * me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
 
-  Real blotdiameter =
-    (me->get_layout ()->get_dimension (ly_symbol2scm ("blotdiameter")));
+  Real blotdiameter
+    = (me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")));
 
   int pos = Staff_symbol_referencer::get_rounded_position (me);
 
-  SCM delta_pitch_scm = me->get_property ("delta-pitch");
+  SCM delta_pitch_scm = me->get_property ("delta-position");
   int delta_pitch;
   if (delta_pitch_scm != SCM_EOL)
     delta_pitch = scm_to_int (delta_pitch_scm);
   else
     delta_pitch = 0;
 
-  Real x_offset = robust_scm2double ( me->get_property ("x-offset"), 0);
+  Real x_offset = robust_scm2double (me->get_property ("x-offset"), 0);
 
   bool add_stem = to_boolean (me->get_property ("add-stem"));
   bool add_cauda = to_boolean (me->get_property ("add-cauda"));
   bool add_join = to_boolean (me->get_property ("add-join"));
 
-  if (!String::compare (glyph_name, ""))
+  if (glyph_name == "")
     {
       /*
        * This is an empty head.  This typically applies for the right
@@ -237,44 +243,42 @@ vaticana_brew_primitive (Grob *me)
        * flexa_width.)
        */
       Real staff_space = Staff_symbol_referencer::staff_space (me);
-      Real flexa_width  = robust_scm2double ( me->get_property ("flexa-width"), 2)  *staff_space;
-      out =
-       Lookup::blank (Box (Interval (0, 0.5*flexa_width), Interval (0,0)));
-    }
-  else if (!String::compare (glyph_name, "flexa"))
-    {
-      out = vaticana_brew_flexa (me, true, line_thickness);
+      Real flexa_width = robust_scm2double (me->get_property ("flexa-width"), 2) * staff_space;
+      out
+        = Lookup::blank (Box (Interval (0, 0.5 * flexa_width), Interval (0, 0)));
     }
+  else if (glyph_name == "flexa")
+    out = vaticana_brew_flexa (me, true, line_thickness);
   else
     {
-      out =
-       Font_interface::get_default_font (me)->
-       find_by_name ("noteheads-" + glyph_name);
+      out
+        = Font_interface::get_default_font (me)->
+          find_by_name ("noteheads.s" + glyph_name);
     }
   out.translate_axis (x_offset, X_AXIS);
   Real head_width = out.extent (X_AXIS).length ();
 
   if (add_cauda)
     {
-      Stencil cauda =
-       vaticana_brew_cauda (me, pos, delta_pitch,
-                            line_thickness, blotdiameter);
+      Stencil cauda
+        = vaticana_brew_cauda (me, pos, delta_pitch,
+                               line_thickness, blotdiameter);
       out.add_stencil (cauda);
     }
 
   if (add_stem)
     {
-      Stencil stem =
-       vaticana_brew_cauda (me, pos, -1,
-                            line_thickness, blotdiameter);
+      Stencil stem
+        = vaticana_brew_cauda (me, pos, -1,
+                               line_thickness, blotdiameter);
       stem.translate_axis (head_width - line_thickness, X_AXIS);
       out.add_stencil (stem);
     }
 
   if (add_join)
     {
-      Stencil join =
-       vaticana_brew_join (me, delta_pitch, line_thickness, blotdiameter);
+      Stencil join
+        = vaticana_brew_join (me, delta_pitch, line_thickness, blotdiameter);
       join.translate_axis (head_width - line_thickness, X_AXIS);
       out.add_stencil (join);
     }
@@ -298,8 +302,17 @@ Vaticana_ligature::print (SCM)
   return SCM_EOL;
 }
 
-ADD_INTERFACE (Vaticana_ligature, "vaticana-ligature-interface",
-              "A vaticana style gregorian ligature",
-              "glyph-name flexa-height flexa-width thickness add-cauda "
-              "add-stem add-join delta-pitch x-offset "
-              "ligature-primitive-callback");
+ADD_INTERFACE (Vaticana_ligature,
+               "A vaticana style Gregorian ligature.",
+
+               /* properties */
+               "glyph-name "
+               "flexa-height "
+               "flexa-width "
+               "thickness "
+               "add-cauda "
+               "add-stem "
+               "add-join "
+               "delta-position "
+               "x-offset "
+              );