]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/lily-guile.cc (robust_scm2double): new function. Use throughout.
authorhanwen <hanwen>
Sun, 18 Jan 2004 20:28:51 +0000 (20:28 +0000)
committerhanwen <hanwen>
Sun, 18 Jan 2004 20:28:51 +0000 (20:28 +0000)
* lily/hairpin.cc: use Line_interface

* lily/tuplet-bracket.cc (make_bracket): use Line_interface.

* lily/mensural-ligature.cc (brew_flexa): replace horizontal_slope
() with beam ().

* lily/beam.cc (position_beam): new function
(brew_molecule): make sure that positions are calced before making
the molecule.

* lily/beam.cc (brew_molecule): fix beam offsets: overlap with the
stem do avoid small dents.

42 files changed:
ChangeLog
lily/accidental-placement.cc
lily/align-interface.cc
lily/balloon.cc
lily/bar-line.cc
lily/beam.cc
lily/breathing-sign.cc
lily/cluster.cc
lily/dynamic-performer.cc
lily/font-select.cc
lily/grob.cc
lily/hairpin.cc
lily/hyphen-spanner.cc
lily/include/lily-guile.hh
lily/lily-guile.cc
lily/line-spanner.cc
lily/lyric-extender.cc
lily/measure-grouping-spanner.cc
lily/mensural-ligature-engraver.cc
lily/mensural-ligature.cc
lily/multi-measure-rest.cc
lily/note-head.cc
lily/note-spacing.cc
lily/percent-repeat-item.cc
lily/separation-item.cc
lily/side-position-interface.cc
lily/slur.cc
lily/spacing-spanner.cc
lily/spanner.cc
lily/staff-spacing.cc
lily/staff-symbol-referencer.cc
lily/staff-symbol.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/system-start-delimiter-engraver.cc
lily/system-start-delimiter.cc
lily/text-spanner.cc
lily/tie.cc
lily/tuplet-bracket.cc
lily/vaticana-ligature-engraver.cc
lily/vaticana-ligature.cc
lily/volta-bracket.cc

index 978247bfd5318054fd82fb40d7aa6acea9ecfda4..df9602dfc7c6220fd9203a756c9edc7a25146230 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2004-01-18  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * lily/lily-guile.cc (robust_scm2double): new function. Use throughout.
+
        * lily/line-interface.cc (line): remove thickness from calling interface.
 
        * lily/hairpin.cc: use Line_interface
index 46c765daf2c679e42766320a9d4ecc981d41aed5..bfe0f1b58a368c8e2611e286eea75b20bebac6a5 100644 (file)
@@ -121,7 +121,7 @@ Accidental_placement::get_relevant_accidental_extent (Grob *me,
 
   if (!extent.is_empty ())
     {
-      Real p = gh_scm2double (me->get_grob_property ("left-padding"));
+      Real p = robust_scm2double (me->get_grob_property ("left-padding"), 0.2);
       extent[LEFT] -= p;
     }
   
@@ -380,15 +380,10 @@ Accidental_placement::position_accidentals (Grob * me)
   head_ape-> left_skyline_ = head_skyline;
   head_ape->offset_ = 0.0;
 
-  SCM rs = me->get_grob_property ("right-padding");
-  if (gh_number_p (rs))
-    head_ape->offset_ -= gh_scm2double (rs);
+  head_ape->offset_ -= robust_scm2double ( me->get_grob_property ("right-padding"), 0);
 
   
-  Real padding = 0.2;
-  SCM spad = me->get_grob_property ("padding");
-  if (gh_number_p (spad))
-    padding = gh_scm2double (spad);
+  Real padding = robust_scm2double (me->get_grob_property ("padding"),0.2);
 
   Array<Skyline_entry> left_skyline = head_ape->left_skyline_;
   /*
@@ -431,9 +426,8 @@ Accidental_placement::position_accidentals (Grob * me)
   for (int i = ape->extents_.size(); i--;)
     right_extent.unite (ape->offset_  + ape->extents_[i][X_AXIS]);
 
-  SCM ls = me->get_grob_property ("left-padding");
-  if (gh_number_p (rs))
-    left_extent[LEFT] -= gh_scm2double (ls);
+  
+  left_extent[LEFT] -= robust_scm2double (me->get_grob_property ("left-padding"), 0);
 
   
   Interval width(left_extent[LEFT], right_extent[RIGHT]);
index 3b020ea677e33cfa50ffc16e929d80adf1dde244..62865dc949c7d201bb917326b5583828378c85f5 100644 (file)
@@ -56,13 +56,7 @@ Align_interface::align_to_fixed_distance (Grob *me , Axis a)
   if (!stacking_dir)
     stacking_dir = DOWN;
 
-  SCM force = me->get_grob_property ("forced-distance");
-
-  Real dy = 0.0;
-  if (gh_number_p (force))
-    {
-      dy = gh_scm2double (force);
-    }
+  Real dy = robust_scm2double (me->get_grob_property ("forced-distance"),0.0);
   
   Link_array<Grob> elems
     = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
@@ -134,14 +128,7 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a)
   if (!stacking_dir)
     stacking_dir = DOWN;
   
-  Interval threshold = Interval (0, Interval::infinity ());
-  SCM thr = me->get_grob_property ("threshold");
-  if (gh_pair_p (thr))
-    {
-      threshold[SMALLER] = gh_scm2double (ly_car (thr));
-      threshold[BIGGER] = gh_scm2double (ly_cdr (thr));      
-    }
-
+  Interval threshold  = robust_scm2interval ( me->get_grob_property ("threshold"), Interval (0, Interval::infinity ()));
   
   Array<Interval> dims;
 
index 78938c99144d27b36a7135a03631a6b70b398565..30eb59e7c0f153c3585da093811e718d07fda465 100644 (file)
@@ -47,12 +47,7 @@ Balloon_interface::brew_molecule (SCM smob)
   Box orig_extent = m->extent_box ();
   Box box_extent = orig_extent;
 
-  SCM widen = me->get_grob_property ("balloon-padding");
-  Real w = .1;
-  if (gh_number_p (widen))
-    {
-      w = gh_scm2double (widen);
-    }
+  Real w = robust_scm2double (me->get_grob_property ("balloon-padding"),  .1);
   box_extent.widen (w, w);
   
   
index d729f83429b7a6f44b6c20243fcc778870bb6e43..b27ba0b92a8181b147d6474d4400648c68feace7 100644 (file)
@@ -34,7 +34,7 @@ Bar_line::brew_molecule (SCM smob)
     {
       String str  =ly_scm2string (s);
       SCM siz = gh_call1 (barsiz_proc, me->self_scm ());
-      Real sz =  gh_scm2double (siz);
+      Real sz = robust_scm2double (siz, 0);
       if (sz < 0)
        return SCM_EOL;
       
@@ -47,10 +47,10 @@ Bar_line::brew_molecule (SCM smob)
 Molecule
 Bar_line::compound_barline (Grob*me, String str, Real h)
 {
-  Real kern = gh_scm2double (me->get_grob_property ("kern"));
-  Real thinkern = gh_scm2double (me->get_grob_property ("thin-kern"));
-  Real hair = gh_scm2double (me->get_grob_property ("hair-thickness"));
-  Real fatline = gh_scm2double (me->get_grob_property ("thick-thickness"));
+  Real kern = robust_scm2double (me->get_grob_property ("kern"), 1);
+  Real thinkern = robust_scm2double (me->get_grob_property ("thin-kern"), 1);
+  Real hair = robust_scm2double (me->get_grob_property ("hair-thickness"), 1);
+  Real fatline = robust_scm2double (me->get_grob_property ("thick-thickness"), 1);
 
   Real staffline = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
   Real staff_space = Staff_symbol_referencer::staff_space (me);
index e049696eb8c5f261290bd8f93cbab890eb3f86c0..c000147a33591097d024d6b62cd4944985471f7b 100644 (file)
@@ -71,11 +71,8 @@ Beam::add_stem (Grob *me, Grob *s)
 Real
 Beam::get_thickness (Grob * me)
 {
-  SCM th = me->get_grob_property ("thickness");
-  if (gh_number_p (th))
-    return gh_scm2double (th)* Staff_symbol_referencer::staff_space (me);
-  else
-    return 0.0;
+  return robust_scm2double (me->get_grob_property ("thickness"), 0)
+    * Staff_symbol_referencer::staff_space (me);
 }
 
 /* Return the translation between 2 adjoining beams. */
@@ -339,10 +336,7 @@ Beam::brew_molecule (SCM grob)
   Real last_xposn = -1;
   Real last_stem_width = -1 ;
 
-  Real gap_length =0.0;
-  SCM scm_gap = me->get_grob_property ("gap");
-  if (gh_number_p (scm_gap))
-    gap_length = gh_scm2double (scm_gap);
+  Real gap_length =robust_scm2double ( me->get_grob_property ("gap"), 0.0);
   
   Molecule the_beam;
   Real lt = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
@@ -353,7 +347,7 @@ Beam::brew_molecule (SCM grob)
       
       SCM this_beaming = st ? st->get_grob_property ("beaming") : SCM_EOL;
       Real xposn = st ? st->relative_coordinate (xcommon, X_AXIS) : 0.0;
-      Real stem_width = st ? gh_scm2double (st->get_grob_property ("thickness")) *lt : 0 ;
+      Real stem_width = st ? robust_scm2double (st->get_grob_property ("thickness"), 1.0) *lt : 0 ;
       Direction stem_dir = st ? to_dir (st->get_grob_property ("direction")) : CENTER;
       /*
        We do the space left of ST, with lfliebertjes pointing to the
@@ -882,7 +876,7 @@ Beam::least_squares (SCM smob)
        {
          /* FIXME. -> UP */
          Direction d = (Direction) (sign (chord.delta ()) * UP);
-         pos[d] = gh_scm2double (me->get_grob_property ("thickness")) / 2;
+         pos[d] = get_thickness (me) / 2;
          pos[-d] = - pos[d];
        }
       else
@@ -1480,8 +1474,8 @@ Beam::rest_collision_callback (SCM element_smob, SCM axis)
   Grob *common_x = rest->common_refpoint (beam, Y_AXIS);
   Real rest_dim = rest->extent (common_x, Y_AXIS)[d] / staff_space * d;
 
-  Real minimum_distance = gh_scm2double
-    (rest->get_grob_property ("minimum-beam-collision-distance"));
+  Real minimum_distance = robust_scm2double
+    (rest->get_grob_property ("minimum-beam-collision-distance"), 1);
 
   Real distance = beam_y - rest_dim;
   Real shift = 0;
index ede4b2f8b96c0e316ac0f47cdbdff5da3433dc63..006682be8a4c41cead144d2f3652e748dbca3116 100644 (file)
 
   
 
+/*
+  UGH : this is full of C&P code. Consolidate!  --hwn
+*/
+
 /*
   Gregorian chant divisio minima.  (Actually, this was the original
   breathing sign by Michael. -- jr)
index c89b752fbe7347f0d512db4bf21a8be0dbd101ef..9c1bf995fb07407ba02ab043fdeca7a6d9bd3a9f 100644 (file)
@@ -32,12 +32,8 @@ brew_cluster_piece (Grob *me, Array<Offset> bottom_points, Array<Offset> top_poi
 {
   Real blotdiameter = Staff_symbol_referencer::staff_space (me)/2;
 
-  Real padding;
-  SCM padding_scm = me->get_grob_property ("padding");
-  if (gh_number_p (padding_scm))
-    padding = gh_scm2double (padding_scm);
-  else
-    padding = 0.0;
+  Real padding =robust_scm2double ( me->get_grob_property ("padding"), 0.0);
+
   Offset vpadding = Offset (0, padding);
   Offset hpadding = Offset (0.5 * blotdiameter, 0);
   Offset hvpadding = 0.5 * hpadding + vpadding;
index aefb86da9c823bc933827f279f6ef5a3703bb7ce..c0df3e0cae6736c5c458d1a3b7dd64b0e491520f 100644 (file)
@@ -52,9 +52,7 @@ Dynamic_performer::create_audio_elements ()
          svolume = gh_call1 (proc, script_req_->get_mus_property ("text"));
        }
 
-      Real volume = 0.5; 
-      if (gh_number_p (svolume))
-       volume = gh_scm2double (svolume);
+      Real volume = robust_scm2double (svolume, 0.5); 
 
       /*
        properties override default equaliser setting
@@ -90,11 +88,9 @@ Dynamic_performer::create_audio_elements ()
              s = gh_call1 (eq, s);
            }
 
-         if (gh_pair_p (s))
+         if (is_number_pair (s))
            {
-             Interval iv;
-             iv[MIN] = gh_scm2double (ly_car (s));
-             iv[MAX] = gh_scm2double (ly_cdr (s));
+             Interval iv = ly_scm2interval (s);
              volume = iv[MIN] + iv.length () * volume;
            }
        }
index 294ba8d3fcf0559c44d6de96a34abe08d236a57f..61ae2fa4fc3ed62a0483a4dd327d6f12838c3920 100644 (file)
@@ -153,8 +153,7 @@ select_font (Paper_def *paper, SCM chain)
     {
       SCM mag = ly_assoc_chain (ly_symbol2scm ("font-magnification"), chain);
   
-      Real rmag = gh_pair_p (mag) && gh_number_p (gh_cdr (mag))
-       ? gh_scm2double (gh_cdr (mag)) : 1.0;
+      Real rmag = gh_pair_p (mag) ? robust_scm2double (gh_cdr (mag), 1.0) : 1;
   
       return paper->find_font (name, rmag);
     }
index b11c5b69154ca1ee89dd69af6ab7e0b30a6d8491..0e82fef4907b5c346811ffe248e8c5fc8d72fb4c 100644 (file)
@@ -177,15 +177,11 @@ Grob::preset_extent (SCM element_smob, SCM scm_axis)
   SCM ext = s->get_grob_property ((a == X_AXIS)
                                 ? "X-extent"
                                 : "Y-extent");
-  
-  if (gh_pair_p (ext))
-    {
-      Real l = gh_scm2double (ly_car (ext));
-      Real r = gh_scm2double (ly_cdr (ext));
-      return ly_interval2scm (Interval (l, r));
-    }
-  
-  return ly_interval2scm (Interval ());
+
+  if (is_number_pair (ext))
+    return ext;
+  else
+    return ly_interval2scm (Interval());
 }
 
 
index 66a9931df86835aa33ae3802d17af9d9fc551d2d..41e9eef5ef90e84d517ad81d7ebc4fd01b5cfe89 100644 (file)
@@ -100,7 +100,7 @@ Hairpin::brew_molecule (SCM smob)
     }
 
   bool continued = broken[Direction (-grow_dir)];
-  Real height = gh_scm2double (me->get_grob_property ("height"));
+  Real height = robust_scm2double (me->get_grob_property ("height"), 0.2);
 
   Real starth, endh;
   if (grow_dir < 0)
index 8334e494cc62a4caef7ac734dd133a68b3405443..17b01dad53193d0ac68d837dc3bff768c5ac80eb 100644 (file)
@@ -43,13 +43,13 @@ Hyphen_spanner::brew_molecule (SCM smob)
   while (flip (&d) != LEFT);
   
   Real lt = sp->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
-  Real th = gh_scm2double (sp->get_grob_property ("thickness")) * lt ;
-  Real h = gh_scm2double (sp->get_grob_property ("height"));
+  Real th = robust_scm2double (sp->get_grob_property ("thickness"), 1) * lt ;
+  Real h = robust_scm2double (sp->get_grob_property ("height"), 0.5);
 
   // interval?
   
-  Real dp = gh_scm2double (sp->get_grob_property ("dash-period"));
-  Real dl = gh_scm2double (sp->get_grob_property ("length"));
+  Real dp = robust_scm2double (sp->get_grob_property ("dash-period"), 1.0);
+  Real dl = robust_scm2double (sp->get_grob_property ("length"), .5 );
 
   if (dp < dl)
     dp = 1.5 * dl;
index 613099e24e26c84a9bf7ad4101f22e9c780bd6b0..19fed5950a9ed5aa23595f6a78081067ba8b85f4 100644 (file)
@@ -160,7 +160,8 @@ Slice int_list_to_slice (SCM l);
 SCM ly_interval2scm (Drul_array<Real>);
 
 Real robust_scm2double (SCM, double);
-Drul_array<Real> robust_scm2interval (SCM, Drul_array<Real>);
+Drul_array<Real> robust_scm2drul (SCM, Drul_array<Real>);
+Interval robust_scm2interval (SCM, Drul_array<Real>);
 Offset robust_scm2offset (SCM, Offset);
 
 SCM ly_quote_scm (SCM s);
index c7641e7447288fd1743309ec6aefb3bd45807fd6..559aec578f6e0439a3daa1a705dd6ec9310aef8e 100644 (file)
@@ -724,8 +724,19 @@ robust_scm2double (SCM k, double x)
   return x;
 }
 
-Drul_array<Real>
+Interval
 robust_scm2interval (SCM k, Drul_array<Real> v)
+{
+  Interval i;
+  i[LEFT]= v[LEFT];
+  i[RIGHT]= v[RIGHT];
+  if (is_number_pair (k))
+    i = ly_scm2interval (k);
+  return i;
+}
+
+Drul_array<Real>
+robust_scm2drul (SCM k, Drul_array<Real> v)
 {
   if (is_number_pair (k))
     v = ly_scm2interval (k);
index 578206975d47e5e2991f1dcacd0e760554ffd9cd..3b74fb149741b7715f1dab06164bcf47edb91aff 100644 (file)
@@ -34,10 +34,9 @@ zigzag_molecule (Grob *me,
   thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0); // todo: staff sym referencer? 
   
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  SCM ws = me->get_grob_property ("zigzag-width");
-  SCM ls = me->get_grob_property ("zigzag-length");
-  double w = (gh_number_p(ws) ? gh_scm2double(ws) : 1)*staff_space;
-  double l = (gh_number_p(ls) ? gh_scm2double(ls) : 1)*w;
+
+  double w = robust_scm2double (me->get_grob_property ("zigzag-width"), 1)*staff_space;
+  double l = robust_scm2double ( me->get_grob_property ("zigzag-length"), 1)* w;
   double h = l>w/2 ? sqrt(l*l-w*w/4) : 0;
   
   SCM list = scm_list_n (ly_symbol2scm ("zigzag-line"),
@@ -183,7 +182,7 @@ Line_spanner::brew_molecule (SCM smob)
                            me->get_bound (RIGHT));
   
   
-  Real gap = gh_scm2double (me->get_grob_property ("gap"));
+  Real gap = robust_scm2double (me->get_grob_property ("gap"), 0.0);
 
   Offset ofxy (gap, 0); /*offset from start point to start of line*/
   Offset dxy ;
index 25cfb2bd1e24ddefc848dbf498139e16de971ee1..73a1d49119c070b4a6605cb3feaf02bf6f136be3 100644 (file)
@@ -54,14 +54,14 @@ Lyric_extender::brew_molecule (SCM smob)
    */
   SCM minlen =  me->get_grob_property ("minimum-length");
   Real right_point
-    = left_point + (gh_number_p (minlen) ? gh_scm2double (minlen) : 0.0);
+    = left_point + (robust_scm2double  (minlen,0));
 
   if (r->break_status_dir ())
     right_point = infinity_f;
   else
     right_point = right_point >? heads.top ()->extent (common, X_AXIS)[RIGHT];
   
-  Real h = sl * gh_scm2double (me->get_grob_property ("thickness"));
+  Real h = sl * robust_scm2double (me->get_grob_property ("thickness"), 0);
   Real pad = 2* h;
   right_point = right_point <? (r->extent (common, X_AXIS)[LEFT] - pad);
 
index df06b7f30aac300b102f56546278311040cd01e8..9af72c3405334aee3949a8d9dbcb50686523e6eb 100644 (file)
@@ -25,7 +25,7 @@ Measure_grouping::brew_molecule (SCM grob)
   SCM thick = me->get_grob_property ("thickness");
   SCM height = me->get_grob_property ("height");
 
-  Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) *   gh_scm2double (thick); 
+  Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) * gh_scm2double (thick); 
   Grob *common = me->get_bound(LEFT)->common_refpoint (me->get_bound (RIGHT),
                                                       X_AXIS);
 
@@ -39,7 +39,11 @@ Measure_grouping::brew_molecule (SCM grob)
 
   Interval iv (0,w);
 
-  Molecule m; 
+  Molecule m;
+
+  /*
+    TODO: use line interface
+   */
   if (which == ly_symbol2scm ("bracket"))
     {
       m = Lookup::bracket (X_AXIS, iv, t,-gh_scm2double (height), t);
index f8786b43142723b9d4a8e946e94341a41675f5b4..cd08766d5687d2491e6cb8d1a872b0d74f9c0c60 100644 (file)
@@ -343,17 +343,13 @@ void
 Mensural_ligature_engraver::propagate_properties (Spanner *ligature,
                                                  Array<Grob_info> primitives)
 {
-  SCM thickness_scm = ligature->get_grob_property ("thickness");
-  Real thickness = (thickness_scm != SCM_EOL) ?
-    gh_scm2double (thickness_scm) : 1.4;
+  Real thickness = robust_scm2double (ligature->get_grob_property ("thickness"), 1.4);
   thickness *= ligature->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
 
   Real head_width =
     Font_interface::get_default_font (ligature)->
     find_by_name ("noteheads--1mensural").extent (X_AXIS).length ();
-  SCM flexa_width_scm = ligature->get_grob_property ("flexa-width");
-  Real flexa_width = (flexa_width_scm != SCM_EOL) ?
-    gh_scm2double (flexa_width_scm) : 2.0;
+    Real flexa_width = robust_scm2double (ligature->get_grob_property ("flexa-width"), 2);
   flexa_width *= Staff_symbol_referencer::staff_space (ligature);
 
   Real half_flexa_width = 0.5 * (flexa_width + thickness);
index c0bb7fac49b63f5baa657d15f78cb274c19ed15c..e8df8353a7dec2944b43b2b273d90f9290b2bf65 100644 (file)
@@ -172,18 +172,7 @@ internal_brew_primitive (Grob *me, bool ledger_take_space)
          delta_pitch = 0;
        }
 
-      SCM flexa_width_scm = me->get_grob_property ("flexa-width");
-      if (flexa_width_scm != SCM_EOL)
-       {
-         flexa_width = gh_scm2double (flexa_width_scm);
-       }
-      else
-       {
-         programming_error (_f ("Mensural_ligature:"
-                                "flexa-width undefined on flexa %d; assuming 2.0",
-                                primitive));
-         flexa_width = 2.0 * staff_space;
-       }
+      flexa_width = robust_scm2double (me->get_grob_property ("flexa-width"), 2.0 * staff_space);
     }
 
   switch (primitive)
index e6e747e23cc384d4b450b39fd09866b40762e208..f0522329b0dddf97319479326833326f2427138c 100644 (file)
@@ -180,8 +180,8 @@ Multi_measure_rest::symbol_molecule (Grob *me, Real space)
 Molecule
 Multi_measure_rest::big_rest (Grob *me, Real width)
 {
-  Real thick_thick = gh_scm2double (me->get_grob_property ("thick-thickness"));
-  Real hair_thick = gh_scm2double (me->get_grob_property ("hair-thickness"));
+  Real thick_thick =robust_scm2double (me->get_grob_property ("thick-thickness"), 1.0);
+  Real hair_thick = robust_scm2double (me->get_grob_property ("hair-thickness"), .1);
 
 
   Real ss = Staff_symbol_referencer::staff_space (me);
@@ -337,9 +337,7 @@ Multi_measure_rest::set_spacing_rods (SCM smob)
       rod.distance_ = l->extent (l, X_AXIS)[BIGGER] - r->extent (r, X_AXIS)[SMALLER]
        + sym_width  + 2.0;                     // 2.0 = magic!
   
-      Real minlen  =0.0;
-      SCM ml  =me->get_grob_property ("minimum-length");
-      if (gh_number_p (ml)) minlen = gh_scm2double (ml);
+      Real minlen  = robust_scm2double (me->get_grob_property ("minimum-length"), 0.0);
       rod.distance_ = max(rod.distance_,
                          minlen);
       rod.add_to_cols ();
index bce006a9206302263ff7654f5140e00e0ba388d6..5942c1dc6dc121e6d1c3e7302370492e936dc2e9 100644 (file)
@@ -303,7 +303,7 @@ Note_head::stem_attachment_coordinate (Grob *me, Axis a)
 
   result = (a == X_AXIS) ? ly_car (result) : ly_cdr (result);
   
-  return gh_number_p (result) ?  gh_scm2double (result) : 0.0;
+  return robust_scm2double (result,0);
 }
 
 int
index 38c84388726853585df403c8904a7f24bef0d51c..0cf786d7512bc5bd9b89bfa1c1a11c0254e1ab41 100644 (file)
@@ -355,7 +355,7 @@ Note_spacing::stem_dir_correction (Grob*me, Item * rcolumn,
 
              if (st)
                {
-                 Real thick = gh_scm2double (st->get_grob_property ("thickness"))
+                 Real thick = robust_scm2double (st->get_grob_property ("thickness"), 1)
                    * st->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
 
                  note_head_width -= thick;
@@ -363,7 +363,7 @@ Note_spacing::stem_dir_correction (Grob*me, Item * rcolumn,
            }
 
          correction = note_head_width* stem_dirs[LEFT];
-         correction *= gh_scm2double (me->get_grob_property ("knee-spacing-correction"));
+         correction *= robust_scm2double (me->get_grob_property ("knee-spacing-correction"), 0);
          *fixed += correction;
        }
       else
@@ -383,7 +383,7 @@ Note_spacing::stem_dir_correction (Grob*me, Item * rcolumn,
              correction = (correction/7) <? 1.0;
              correction *= stem_dirs[LEFT] ;
              correction *=
-               gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+               robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 0);
            }
          
          if (!bar_yextent.is_empty ())
@@ -423,7 +423,7 @@ Note_spacing::stem_dir_correction (Grob*me, Item * rcolumn,
        (head_posns[LEFT][DOWN] > head_posns[RIGHT][UP]) ? RIGHT : LEFT;
 
       Real delta = head_posns[-lowest][DOWN] - head_posns[lowest][UP] ;
-      Real corr = gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+      Real corr = robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 0);
       corr =  (delta <= 1) ? 0.0 : 0.25;
       
       correction=  -lowest * corr ;
index 2dbffcff3593eb0f24a7399d0ec08c1fe63b187c..4c87351d26fae0272cdba8846f9d2bb9f4c718c1 100644 (file)
 Molecule
 Percent_repeat_item_interface::brew_slash ( Grob *me)
 {
-  Real slope = gh_scm2double (me->get_grob_property ("slope"));
+  Real slope = robust_scm2double (me->get_grob_property ("slope"), 1);
   Real wid = 2.0 / slope;
 
   /*
     todo: check out if in staff-rule thickness normally.
    */
-  Real thick = gh_scm2double (me->get_grob_property ("thickness"));
+  Real thick = robust_scm2double (me->get_grob_property ("thickness"), 1);
   Molecule m = Lookup::repeat_slash (wid, slope, thick);
   m.translate_axis (-m.extent (Y_AXIS).center (), Y_AXIS);
   return m;
index 8b59a919678891a412152655fb83b51ecc3b2bf4..bb8c4594db5d1c2a442084e1c664af336309f044 100644 (file)
@@ -67,11 +67,7 @@ Separation_item::conditional_width (Grob * me, Grob * left)
 
   SCM pad = me->get_grob_property ("padding");
 
-  if (gh_number_p (pad))
-    {
-      w[RIGHT] += gh_scm2double (pad)/2;
-      w[LEFT] -= gh_scm2double (pad)/2;    
-    }
+  w.widen (robust_scm2double (pad, 0.0));
   return w;
 }
 
@@ -116,11 +112,7 @@ Separation_item::width (Grob *me)
 
   SCM pad = me->get_grob_property ("padding");
 
-  if (gh_number_p (pad))
-  {
-    w[RIGHT] += gh_scm2double (pad)/2;
-    w[LEFT] -= gh_scm2double (pad)/2;    
-  }
+  w.widen (robust_scm2double (pad, 0.0));
 
   me->set_grob_property ("X-extent", ly_interval2scm (w));
   
index ea15805b3ecd49f84e11f503d6c1070000a03aad..f10f80073a60e4f018a295815b34e5dc6ea6760d 100644 (file)
@@ -106,11 +106,7 @@ Side_position_interface::general_side_position (Grob * me, Axis a, bool use_exte
   SCM minimum = me->get_grob_property ("minimum-space");
 
   Real total_off = dim.linear_combination (dir) - off;
-  SCM padding = me->get_grob_property ("padding");
-  if (gh_number_p (padding))
-    {
-      total_off += gh_scm2double (padding) * dir;
-    }
+  total_off += robust_scm2double ( me->get_grob_property ("padding"), 0);
 
   if (gh_number_p (minimum) 
       && dir
@@ -228,11 +224,7 @@ Side_position_interface::out_of_staff (SCM element_smob, SCM axis)
   if (!st)
     return gh_int2scm (0);
 
-  Real padding=0.0;
-  SCM spad = me->get_grob_property ("staff-padding");
-
-  if (gh_number_p (spad))
-    padding = gh_scm2double (spad);
+  Real padding= robust_scm2double ( me->get_grob_property ("staff-padding"), 0);
   
   Grob *common = me->common_refpoint (st, Y_AXIS);
   Direction d = Side_position_interface::get_direction (me);
index 4e2df2297909bb313d9a59050c2914437d28e9ec..4e4150bc83eb474a370710fce0d76b69250704a4 100644 (file)
@@ -349,7 +349,7 @@ Slur::get_attachment (Grob *me, Direction dir,
                Default position is on stem X, at stem end Y
               */
              Real stem_thickness =
-               gh_scm2double (stem->get_grob_property ("thickness"))
+               robust_scm2double (stem->get_grob_property ("thickness"), 1)
                * stem->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
              o += Offset (0.5 *
                           x_extent * (1 + Stem::get_direction (stem))
@@ -450,7 +450,7 @@ Slur::encompass_offset (Grob*me,
   /*
    leave a gap: slur mustn't touch head/stem
    */
-  o[Y_AXIS] += dir * gh_scm2double (me->get_grob_property ("y-free")) *
+  o[Y_AXIS] += dir * robust_scm2double (me->get_grob_property ("y-free"), 0) *
     1.0;
   return o;
 }
@@ -548,7 +548,7 @@ Slur::brew_molecule (SCM smob)
       return SCM_EOL;
     }
 
-  Real base_thick = gh_scm2double (me->get_grob_property ("thickness"));
+  Real base_thick = robust_scm2double (me->get_grob_property ("thickness"), 1);
 
   Real thick = base_thick *
     me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
@@ -563,7 +563,7 @@ Slur::brew_molecule (SCM smob)
   Molecule a;
   SCM d =  me->get_grob_property ("dashed");
   if (gh_number_p (d))
-    a = Lookup::dashed_slur (one, thick, thick * gh_scm2double (d));
+    a = Lookup::dashed_slur (one, thick, thick * robust_scm2double (d, 0));
   else
     a = Lookup::slur (one, get_grob_direction (me) * base_thick * ss / 10.0,
                      thick);
@@ -580,7 +580,7 @@ Slur::set_control_points (Grob*me)
   SCM h_inf_scm = me->get_grob_property ("height-limit");
   SCM r_0_scm = me->get_grob_property ("ratio");
 
-  Real r_0 = gh_scm2double (r_0_scm);
+  Real r_0 = robust_scm2double (r_0_scm, 1);
   Real h_inf = staff_space * gh_scm2double (h_inf_scm);
   
   Slur_bezier_bow bb (get_encompass_offsets (me),
index c582357f728e82402719e5681b845e01fbe6af5e..659216be561657e57604de0631f527cf2f980243 100644 (file)
@@ -164,7 +164,7 @@ void
 Spacing_spanner::prune_loose_columns (Grob*me,Link_array<Grob> *cols, Rational shortest)
 {
   Link_array<Grob> newcols;
-  Real increment = gh_scm2double (me->get_grob_property ("spacing-increment"));
+  Real increment = robust_scm2double (me->get_grob_property ("spacing-increment"), 1.2);
   for (int i=0; i < cols->size ();  i++)
     {
       if (Item::breakable_b (cols->elem(i)) || Paper_column::musical_b (cols->elem (i)))
@@ -508,7 +508,7 @@ void
 Spacing_spanner::do_measure (Rational shortest, Grob*me, Link_array<Grob> *cols) 
 {
 
-  Real headwid =       gh_scm2double (me->get_grob_property ("spacing-increment"));
+  Real headwid = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
   for (int i= 0; i < cols->size () - 1; i++)
     {
       Item * l = dynamic_cast<Item*> (cols->elem (i));
@@ -695,7 +695,7 @@ Spacing_spanner::standard_breakable_column_spacing (Grob * me, Item*l, Item*r,
       if (dt)
        mlen = *dt;
       
-      Real incr = gh_scm2double (me->get_grob_property ("spacing-increment"));
+      Real incr = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
 
       *space =  *fixed + incr * double (mlen.main_part_ / shortest.main_part_) * 0.8;
     }
@@ -812,8 +812,8 @@ Spacing_spanner::breakable_column_spacing (Grob*me, Item* l, Item *r,Moment shor
 Real
 Spacing_spanner::get_duration_space (Grob*me, Moment d, Rational shortest, bool * expand_only) 
 {
-  Real k = gh_scm2double (me->get_grob_property ("shortest-duration-space"));
-  Real incr = gh_scm2double (me->get_grob_property ("spacing-increment"));
+  Real k = robust_scm2double (me->get_grob_property ("shortest-duration-space"), 1);
+  Real incr = robust_scm2double (me->get_grob_property ("spacing-increment"), 1);
   
   if (d < shortest)
     {
@@ -928,10 +928,8 @@ Spacing_spanner::note_spacing (Grob*me, Grob *lc, Grob *rc,
       */
       dist = get_duration_space (me, shortest, shortest.main_part_, expand_only);
 
-      Real grace_fact = 1.0;
-      SCM gf = me->get_grob_property ("grace-space-factor");
-      if (gh_number_p (gf))
-       grace_fact = gh_scm2double (gf);
+      Real grace_fact
+       = robust_scm2double (me->get_grob_property ("grace-space-factor"), 1);
 
       dist *= grace_fact;
     }
index 0b444d45fecdda45bb34a2c021d95d29a414910a..a126483203df0a264549ddcdf76b4e4aa4f2eb94 100644 (file)
@@ -336,7 +336,7 @@ Spanner::set_spacing_rods (SCM smob)
   r.item_l_drul_[LEFT] = sp->get_bound (LEFT);
   r.item_l_drul_[RIGHT] = sp->get_bound (RIGHT);
   r.distance_ =
-    gh_scm2double (me->get_grob_property ("minimum-length"));
+    robust_scm2double (me->get_grob_property ("minimum-length"), 0);
 
   r.add_to_cols ();
   return SCM_UNSPECIFIED;
index dab496820dda708ac78fc0ff0ea4435952e002af..726a6981d6223f52ebd6344a76e9a89c886d768a 100644 (file)
@@ -78,7 +78,7 @@ Staff_spacing::next_note_correction (Grob * me,
 
            Real corr = abs (stem_posns.length ()/7.) <? 1.0;
            corr *=
-             gh_scm2double (me->get_grob_property ("stem-spacing-correction"));
+             robust_scm2double (me->get_grob_property ("stem-spacing-correction"), 1);
 
            if (d != DOWN)
              corr = 0.0;
@@ -106,7 +106,7 @@ Staff_spacing::bar_y_positions (Grob *bar_grob)
        {
          SCM sz = Bar_line::get_staff_bar_size (bar_grob->self_scm());
          bar_size = Interval (-1,1);
-         bar_size *= gh_scm2double (sz)
+         bar_size *= robust_scm2double (sz, 1)
            / Staff_symbol_referencer::staff_space (bar_grob);
        }
     }
index 47e6977ff827ff89a35c1296223a2312b5adc89a..0ce4f1aa0a0bf8456ebbe4193058b9ed2351ba75 100644 (file)
@@ -64,14 +64,8 @@ Staff_symbol_referencer::get_position (Grob*me)
 
       p += 2.0 * y / Staff_symbol::staff_space (st);
     }
-  else
-    {
-      SCM pos = me->get_grob_property ("staff-position");
-      if (gh_number_p (pos))
-       return gh_scm2double (pos);
-    }
-  
-  return  p;
+
+  return robust_scm2double ( me->get_grob_property ("staff-position"), p);
 }
 
 
index c8db2f48122f84123aea00d952b8e0aada756856..69a332b6a147dde767421812aae757e5a48c79f8 100644 (file)
@@ -63,9 +63,7 @@ Staff_symbol::brew_molecule (SCM smob)
     }
 
   Real t = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
-  SCM my_thick = me->get_grob_property("thickness");
-  if (gh_number_p (my_thick))
-    t *= gh_scm2double (my_thick);
+  t *= robust_scm2double ( me->get_grob_property("thickness"), 1.0);
   
   int l = Staff_symbol::line_count (me);
   
@@ -102,12 +100,7 @@ Staff_symbol::line_count (Grob*me)
 Real
 Staff_symbol::staff_space (Grob*me)
 {
-  Real ss = 1.0;
-  
-  SCM s = me->get_grob_property ("staff-space");
-  if (gh_number_p (s))
-    ss *= gh_scm2double (s);
-  return ss;
+  return  robust_scm2double ( me->get_grob_property ("staff-space"), 1.0);
 }
 
 
index 6ca35377f90cb08f195d0839fd713ea0a54891e7..886c9df71dc5ace661ce33de8020e95530e37928 100644 (file)
@@ -80,8 +80,8 @@ Stem_tremolo::raw_molecule (Grob *me)
     dydx = 0.25;
 
   Real ss = Staff_symbol_referencer::staff_space (me);
-  Real thick = gh_scm2double (me->get_grob_property ("beam-thickness"));
-  Real width = gh_scm2double (me->get_grob_property ("beam-width"));
+  Real thick = robust_scm2double (me->get_grob_property ("beam-thickness"),1);
+  Real width = robust_scm2double (me->get_grob_property ("beam-width"),1);
   Real blot = me->get_paper ()->get_realvar (ly_symbol2scm ("blotdiameter"));
 
   width *= ss;
index ce268868663a9d1ce443bc432d65fed81c50b1d2..cda3175f7516353772685c5e3ea9124c22eff114 100644 (file)
@@ -318,15 +318,12 @@ Stem::get_default_stem_end_position (Grob*me)
       || (get_direction (me) != get_default_dir (me)))
     {
       
-      Real shorten = 0.0;
   
       SCM sshorten = me->get_grob_property ("stem-shorten");
       SCM scm_shorten = gh_pair_p (sshorten) ?
        robust_list_ref ((duration_log (me) - 2) >? 0, sshorten): SCM_EOL;
-      if (gh_number_p (scm_shorten))
-       {
-         shorten = 2* gh_scm2double (scm_shorten);
-       }
+      Real shorten = 2* robust_scm2double (scm_shorten,0);
+      
   
       /* On boundary: shorten only half */
       if (abs (head_positions (me)[get_direction (me)]) <= 1)
@@ -454,7 +451,7 @@ Stem::position_noteheads (Grob*me)
     heads.reverse ();
 
 
-  Real thick = gh_scm2double (me->get_grob_property ("thickness"))
+  Real thick = robust_scm2double (me->get_grob_property ("thickness"),1)
      * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
       
   Grob *hed = support_head (me);
@@ -745,7 +742,7 @@ Stem::brew_molecule (SCM smob)
 
   
   // URG
-  Real stem_width = gh_scm2double (me->get_grob_property ("thickness"))
+  Real stem_width = robust_scm2double (me->get_grob_property ("thickness"), 1)
     * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
   Real blot = 
        me->get_paper ()->get_realvar (ly_symbol2scm ("blotdiameter"));
@@ -808,7 +805,7 @@ Stem::off_callback (SCM element_smob, SCM)
       if (attach)
        {
          Real rule_thick
-           = gh_scm2double (me->get_grob_property ("thickness"))
+           = robust_scm2double (me->get_grob_property ("thickness"), 1)
            * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
          
          r += - d * rule_thick * 0.5;
@@ -854,7 +851,7 @@ Stem::calc_stem_info (Grob *me)
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Grob *beam = get_beam (me);
   Real beam_translation = Beam::get_beam_translation (beam);
-  Real beam_thickness = gh_scm2double (beam->get_grob_property ("thickness"));
+  Real beam_thickness = robust_scm2double (beam->get_grob_property ("thickness"), 1);
   int beam_count = Beam::get_direction_beam_count (beam, my_dir);
 
 
@@ -928,9 +925,7 @@ Stem::calc_stem_info (Grob *me)
     }
 
 
-  SCM shorten = beam->get_grob_property ("shorten");
-  if (gh_number_p (shorten))
-    ideal_y -= gh_scm2double (shorten);
+  ideal_y -= robust_scm2double (beam->get_grob_property ("shorten"), 0);
 
   Real minimum_free =
     gh_scm2double (robust_list_ref
index d8045610bd2754a531477974e537f1bfae3f211f..df94b83400433a380a08f41b2177ca8749fc008a 100644 (file)
@@ -56,7 +56,7 @@ System_start_delimiter_engraver::acknowledge_grob (Grob_info inf)
        {
          inf.grob_->translate_axis ( -0.8, X_AXIS); // ugh
          inf.grob_->set_grob_property ("arch-height",
-           gh_double2scm(gh_scm2double(inf.grob_->get_grob_property
+                                      gh_double2scm (gh_scm2double(inf.grob_->get_grob_property
                                        ("arch-height"))+0.5));
        }
     }
index 0714d819e7ce7afe59977f46d31c626aa774421a..4b7c49835fec3fd5a700d3fd59211a5ede3a788d 100644 (file)
@@ -63,7 +63,7 @@ Molecule
 System_start_delimiter::simple_bar (Grob*me,Real h) 
 {
   Real lt =me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness")) ;
-  Real w = lt * gh_scm2double (me->get_grob_property ("thickness"));
+  Real w = lt * robust_scm2double (me->get_grob_property ("thickness"), 1);
   return Lookup::round_filled_box (Box (Interval (0,w), Interval (-h/2, h/2)),
                                   lt);
 }
@@ -112,7 +112,6 @@ System_start_delimiter::brew_molecule (SCM smob)
   if (!gh_string_p (s))
     return SCM_EOL;
   SCM gsym = scm_string_to_symbol (s) ;
-  SCM c = me->get_grob_property ("collapse-height");
   
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Interval ext = ly_scm2interval (Axis_group_interface::group_extent_callback
@@ -120,7 +119,7 @@ System_start_delimiter::brew_molecule (SCM smob)
   Real l = ext.length () / staff_space;
   
   if (ext.is_empty ()
-      || (gh_number_p (c) && l <= gh_scm2double (c)))
+      || (robust_scm2double (me->get_grob_property ("collapse-height"), 0.0) >= l))
     {
       me->suicide ();
       return SCM_EOL;
index b575850ed4cf7dd2f8dabc3124f6068eee54038f..c1025bd54c9e8c3e01b82a95740193fb3d05fb3f 100644 (file)
@@ -40,10 +40,7 @@ Text_spanner::brew_molecule (SCM smob)
   Spanner *spanner = dynamic_cast<Spanner*> (me);
   
   /* Ugh, must be same as Hairpin::brew_molecule.  */
-  Real padding = 0.0;
-  SCM itp= me->get_grob_property ("if-text-padding");
-  if (gh_number_p (itp))
-    padding = gh_scm2double (itp);
+  Real padding = robust_scm2double ( me->get_grob_property ("if-text-padding"), 0);
 
   Grob *common = spanner->get_bound (LEFT)->common_refpoint (spanner->get_bound (RIGHT), X_AXIS);
   Paper_def * paper = me->get_paper();
@@ -116,7 +113,7 @@ Text_spanner::brew_molecule (SCM smob)
            continue;
          
          Real dx = 0.0;
-         if (gh_pair_p (flare))
+         if (is_number_pair (flare))
            dx = gh_scm2double (index_get_cell (flare, d)) * d;
 
          Real dy = - dir * edge_height[d] ;
index 846acaa28fe1f3331d9b20766d3a77c7f488f803..85d838f02d19a5684e512b519df66a0051d52866 100644 (file)
@@ -130,7 +130,7 @@ Tie::get_control_points (SCM smob)
   
   Real staff_space = Staff_symbol_referencer::staff_space (me);
 
-  Real x_gap_f = gh_scm2double (me->get_grob_property ("x-gap"));
+  Real x_gap_f = robust_scm2double (me->get_grob_property ("x-gap"), 0);
 
   Grob* l = me->get_bound (LEFT);
   Grob* r = me->get_bound (RIGHT);  
index a499f296907b2d98681ef5488be1ea74f403f83d..2c9705d0b4e83c55c2206752e948bb0ba3e9740c 100644 (file)
@@ -117,8 +117,8 @@ Tuplet_bracket::brew_molecule (SCM smob)
       after_line_breaking (smob);
   }
   
-  Real ly = gh_scm2double (me->get_grob_property ("left-position"));
-  Real ry = gh_scm2double (me->get_grob_property ("right-position"));  
+  Real ly = robust_scm2double (me->get_grob_property ("left-position"), 0);
+  Real ry = robust_scm2double (me->get_grob_property ("right-position"), 0);  
   
   bool equally_long = false;
   Grob * par_beam = parallel_beam (me, columns, &equally_long);
index cf960ca8bf00ca5af6eafb05d181d2744c0557f2..896cd423629bcf4d167dec9383d1acb274ca1616 100644 (file)
@@ -349,33 +349,9 @@ void
 Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
                                             Array<Grob_info> primitives)
 {
-  Real flexa_width;
-  SCM flexa_width_scm = ligature->get_grob_property ("flexa-width");
-  if (flexa_width_scm != SCM_EOL)
-    {
-      flexa_width = gh_scm2double (flexa_width_scm);
-    }
-  else
-    {
-      ligature->programming_error ("Vaticana_ligature_engraver:"
-                                  "flexa-width undefined; "
-                                  "assuming 2.0 staff space");
-      flexa_width =
-       2.0 * Staff_symbol_referencer::staff_space (ligature);
-    }
+  Real flexa_width= robust_scm2double ( ligature->get_grob_property ("flexa-width"), 2);
 
-  Real thickness;
-  SCM thickness_scm = ligature->get_grob_property ("thickness");
-  if (thickness_scm != SCM_EOL)
-    {
-      thickness = gh_scm2double (thickness_scm);
-    }
-  else
-    {
-      ligature->programming_error ("Vaticana_ligature_engraver:"
-                                  "thickness undefined; assuming 1.0");
-      thickness = 1.0;
-    }
+  Real thickness= robust_scm2double ( ligature->get_grob_property ("thickness"), 1);
 
   Item *prev_primitive = 0;
   int prev_prefix_set = 0;
index e97a7f0f083695eb0831f83dcd11d6fae7e45e6f..2368aa36fcb36e213c2db20e96a39e67c76f4166 100644 (file)
@@ -92,18 +92,7 @@ vaticana_brew_flexa (Grob *me,
       me->warning (_ ("ascending vaticana style flexa"));
     }
 
-  Real width;
-  SCM flexa_width_scm = me->get_grob_property ("flexa-width");
-  if (flexa_width_scm != SCM_EOL)
-    {
-      width = gh_scm2double (flexa_width_scm);
-    }
-  else
-    {
-      me->warning ("Vaticana_ligature: "
-                  "flexa-width undefined; assuming 2.0");
-      width = 2.0 * staff_space;
-    }
+  Real width = robust_scm2double ( me->get_grob_property ("flexa-width"), 2);
 
   /*
    * Compensate curve thickness that appears to be smaller in steep
@@ -238,19 +227,7 @@ vaticana_brew_primitive (Grob *me, bool ledger_take_space)
 
   Molecule out;
   int flexa_height = 0;
-  Real thickness;
-
-  SCM thickness_scm = me->get_grob_property ("thickness");
-  if (thickness_scm != SCM_EOL)
-    {
-      thickness = gh_scm2double (thickness_scm);
-    }
-  else
-    {
-      me->programming_error ("Vaticana_ligature: "
-                            "thickness undefined; assuming 1.0");
-      thickness = 1.0;
-    }
+  Real thickness = robust_scm2double ( me->get_grob_property ("thickness"), 1);
 
   Real line_thickness =
     thickness * me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
@@ -267,17 +244,7 @@ vaticana_brew_primitive (Grob *me, bool ledger_take_space)
   else
     delta_pitch = 0;
 
-  Real x_offset = 0.0;
-  SCM x_offset_scm = me->get_grob_property ("x-offset");
-  if (x_offset_scm != SCM_EOL)
-    {
-      x_offset = gh_scm2double (x_offset_scm);
-    }
-  else
-    {
-      me->programming_error ("Vaticana_ligature: "
-                            "x-offset undefined; assuming 0.0");
-    }
+  Real x_offset = robust_scm2double ( me->get_grob_property ("x-offset"), 0);
 
   bool add_stem = to_boolean (me->get_grob_property ("add-stem"));
   bool add_cauda = to_boolean (me->get_grob_property ("add-cauda"));
@@ -293,18 +260,7 @@ vaticana_brew_primitive (Grob *me, bool ledger_take_space)
        * flexa_width.)
        */
       Real staff_space = Staff_symbol_referencer::staff_space (me);
-      Real flexa_width;
-      SCM flexa_width_scm = me->get_grob_property ("flexa-width");
-      if (flexa_width_scm != SCM_EOL)
-       {
-         flexa_width = gh_scm2double (flexa_width_scm);
-       }
-      else
-       {
-         me->warning ("Vaticana_ligature: "
-                      "flexa-width undefined; assuming 2.0");
-         flexa_width = 2.0 * staff_space;
-       }
+      Real flexa_width  = robust_scm2double ( me->get_grob_property ("flexa-width"), 2);
       out =
        Lookup::blank (Box (Interval (0, 0.5*flexa_width), Interval (0,0)));
     }
index 740054f775599ca51e4a048c00da99a92fb49231..bf2205f46fea08f9c60e669aed798e9f8c1c6390 100644 (file)
@@ -89,7 +89,7 @@ Volta_bracket_interface::brew_molecule (SCM smob)
     }
 
   Real w = dynamic_cast<Spanner*> (me)->spanner_length () - left - half_space;
-  Real h =  gh_scm2double (me->get_grob_property ("height"));
+  Real h =  robust_scm2double (me->get_grob_property ("height"), 1);
 
   Molecule start,end ;
   if (!no_vertical_start)