]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/beam.cc
(scm_is_number): add scm_is_number
[lilypond.git] / lily / beam.cc
index 91b0fb55434813ae54de019268432ddbbbdbc220..3a63c6df4a0af6a910baccd03fab5b5364d2a7b7 100644 (file)
@@ -35,7 +35,7 @@ Notes:
 #include "misc.hh"
 #include "least-squares.hh"
 #include "stem.hh"
-#include "paper-def.hh"
+#include "output-def.hh"
 #include "lookup.hh"
 #include "group-interface.hh"
 #include "staff-symbol-referencer.hh"
@@ -43,8 +43,6 @@ Notes:
 #include "spanner.hh"
 #include "warn.hh"
 
-bool debug_beam_quanting_flag;
-
 
 #if DEBUG_QUANTING
 #include "text-item.hh"  // debug output.
@@ -79,7 +77,7 @@ Beam::get_beam_translation (Grob *me)
 {
   SCM func = me->get_property ("space-function");
 
-  if (is_procedure (func))
+  if (ly_c_procedure_p (func))
     {
       SCM s = scm_call_2 (func, me->self_scm (), scm_int2num (get_beam_count (me)));
       return ly_scm2double (s);
@@ -95,7 +93,7 @@ int
 Beam::get_beam_count (Grob *me) 
 {
   int m = 0;
-  for (SCM s = me->get_property ("stems"); is_pair (s); s = ly_cdr (s))
+  for (SCM s = me->get_property ("stems"); ly_c_pair_p (s); s = ly_cdr (s))
     {
       Grob *stem = unsmob_grob (ly_car (s));
       m = m >? (Stem::beam_multiplicity (stem).length () + 1);
@@ -209,7 +207,7 @@ position_with_maximal_common_beams (SCM left_beaming, SCM right_beaming,
        (i - lslice[left_dir])* left_dir <= 0 ; i+= left_dir) 
     {
       int count =0;
-      for ( SCM s = ly_car (right_beaming); is_pair (s); s = ly_cdr (s))
+      for ( SCM s = ly_car (right_beaming); ly_c_pair_p (s); s = ly_cdr (s))
        {
          int k = - right_dir * ly_scm2int (ly_car (s)) + i;
          if (scm_c_memq (scm_int2num (k), left_beaming) != SCM_BOOL_F)
@@ -242,7 +240,7 @@ Beam::connect_beams (Grob *me)
       SCM this_beaming = this_stem->get_property ("beaming");
 
       Direction this_dir = get_grob_direction (this_stem);
-      if (is_pair (last_beaming) && is_pair (this_beaming))
+      if (ly_c_pair_p (last_beaming) && ly_c_pair_p (this_beaming))
        {
          int start_point = position_with_maximal_common_beams
            (last_beaming, this_beaming,
@@ -257,7 +255,7 @@ Beam::connect_beams (Grob *me)
              
              new_slice.set_empty ();
              SCM s = index_get_cell (this_beaming, d);
-             for (; is_pair (s); s = ly_cdr (s))
+             for (; ly_c_pair_p (s); s = ly_cdr (s))
                {
                  int new_beam_pos =
                    start_point - this_dir * ly_scm2int (ly_car (s));
@@ -277,7 +275,7 @@ Beam::connect_beams (Grob *me)
        {
          scm_set_car_x ( this_beaming, SCM_EOL);
          SCM s = ly_cdr (this_beaming);
-         for (; is_pair (s); s = ly_cdr (s))
+         for (; ly_c_pair_p (s); s = ly_cdr (s))
            {
              int np = - this_dir * ly_scm2int (ly_car (s));
              scm_set_car_x (s, scm_int2num (np));
@@ -339,7 +337,7 @@ Beam::print (SCM grob)
   else
     pos= ly_scm2realdrul (posns);
 
-  scale_drul (  &pos,  Staff_symbol_referencer::staff_space (me));
+  scale_drul (&pos,  Staff_symbol_referencer::staff_space (me));
   
   Real dy = pos[RIGHT] - pos[LEFT];
   Real dydx = (dy && dx) ? dy/dx : 0;
@@ -351,7 +349,7 @@ Beam::print (SCM grob)
   Real last_xposn = -1;
   Real last_stem_width = -1 ;
 
-  Real gap_length =robust_scm2double ( me->get_property ("gap"), 0.0);
+  Real gap_length = robust_scm2double (me->get_property ("gap"), 0.0);
   
   Stencil the_beam;
   Real lt = me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness"));
@@ -369,7 +367,7 @@ Beam::print (SCM grob)
        right from the left stem, and rfliebertjes pointing left from
        right stem.
        */
-      SCM left = (i>0) ? ly_cdr (last_beaming) : SCM_EOL;
+      SCM left = (i > 0) ? ly_cdr (last_beaming) : SCM_EOL;
       SCM right = st ? ly_car (this_beaming) : SCM_EOL;
 
       Array<int> full_beams;
@@ -377,7 +375,7 @@ Beam::print (SCM grob)
       Array<int> rfliebertjes;   
 
       for (SCM s = left;
-          is_pair (s); s =ly_cdr (s))
+          ly_c_pair_p (s); s =ly_cdr (s))
        {
          int b = ly_scm2int (ly_car (s));
          if (scm_c_memq (ly_car (s), right) != SCM_BOOL_F)
@@ -390,7 +388,7 @@ Beam::print (SCM grob)
            }
        }
       for (SCM s = right;
-          is_pair (s); s =ly_cdr (s))
+          ly_c_pair_p (s); s =ly_cdr (s))
        {
          int b = ly_scm2int (ly_car (s));
          if (scm_c_memq (ly_car (s), left) == SCM_BOOL_F)
@@ -421,7 +419,7 @@ Beam::print (SCM grob)
       Stencil gapped;
 
       int gap_count = 0;
-      if (is_number (me->get_property ("gap-count")))
+      if (ly_c_number_p (me->get_property ("gap-count")))
        {
          gap_count = ly_scm2int (me->get_property ("gap-count"));
          gapped = Lookup::beam (dydx, w - 2 * gap_length, thick, blot);
@@ -510,8 +508,8 @@ Beam::print (SCM grob)
 
 #if (DEBUG_QUANTING)
   SCM quant_score = me->get_property ("quant-score");
-  if (debug_beam_quanting_flag
-      && is_string (quant_score))
+  if (to_boolean (me->get_paper ()->lookup_variable (ly_symbol2scm ("debug-beam-quanting")))
+      && scm_is_string (quant_score))
     {
       
       /*
@@ -522,13 +520,13 @@ Beam::print (SCM grob)
       String str;
       SCM properties = Font_interface::text_font_alist_chain (me);
 
+      Direction stem_dir = stems.size() ? to_dir (stems[0]->get_property ("direction")) : UP;
+    
       Stencil tm = *unsmob_stencil (Text_item::interpret_markup
         (me->get_paper ()->self_scm (), properties, quant_score));
-      the_beam.add_at_edge (Y_AXIS, UP, tm, 5.0, 0);
+      the_beam.add_at_edge (Y_AXIS, stem_dir, tm, 1.0, 0);
     }
 #endif
-    
-  
   
   return the_beam.smobbed_copy ();
 }
@@ -548,7 +546,7 @@ Beam::get_default_dir (Grob *me)
   Link_array<Grob> stems=
        Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
 
-  for (int i=0; i <stems.size (); i++)
+  for (int i=0; i < stems.size (); i++)
     do {
       Grob *s = stems[i];
       Direction sd = get_grob_direction (s);
@@ -570,7 +568,7 @@ Beam::get_default_dir (Grob *me)
                    scm_cons (scm_int2num (total[UP]),
                             scm_int2num (total[DOWN])));
 
-  if (is_number (s) && ly_scm2int (s))
+  if (ly_c_number_p (s) && ly_scm2int (s))
     return to_dir (s);
   
   /* If dir is not determined: get default */
@@ -666,7 +664,7 @@ void
 Beam::consider_auto_knees (Grob* me)
 {
   SCM scm = me->get_property ("auto-knee-gap");
-  if (!is_number (scm))
+  if (!ly_c_number_p (scm))
     return ;
 
   Real threshold = ly_scm2double (scm);
@@ -830,7 +828,7 @@ Beam::position_beam (Grob *me)
     {
       // one wonders if such genericity is necessary  --hwn.
       SCM callbacks = me->get_property ("position-callbacks");
-      for (SCM i = callbacks; is_pair (i); i = ly_cdr (i))
+      for (SCM i = callbacks; ly_c_pair_p (i); i = ly_cdr (i))
        scm_call_1 (ly_car (i), me->self_scm ());
     }
 
@@ -914,11 +912,11 @@ Beam::least_squares (SCM smob)
 
       /*
        For broken beams this doesn't work well. In this case, the
-        slope esp. of the first part of a broken beam should predict
-        where the second part goes.
-       */
+       slope esp. of the first part of a broken beam should predict
+       where the second part goes.
+      */
       me->set_property ("least-squares-dy",
-                            scm_make_real (pos[RIGHT] - pos[LEFT]));
+                       scm_make_real (pos[RIGHT] - pos[LEFT]));
     }
   else
     {
@@ -1101,7 +1099,7 @@ Beam::check_concave (SCM smob)
   */
   bool is_concave1 = false;
   SCM gap = me->get_property ("concaveness-gap");
-  if (is_number (gap))
+  if (ly_c_number_p (gap))
     {
       Real r1 = ly_scm2double (gap);
       Real dy = Stem::chord_start_y (stems.top ())
@@ -1138,7 +1136,7 @@ Beam::check_concave (SCM smob)
   Real concaveness2 = 0;
   SCM thresh = me->get_property ("concaveness-threshold");
   Real r2 = infinity_f;
-  if (!is_concave1 && is_number (thresh))
+  if (!is_concave1 && ly_c_number_p (thresh))
     {
       r2 = ly_scm2double (thresh);
       
@@ -1160,7 +1158,7 @@ Beam::check_concave (SCM smob)
   if (is_concave1 || concaveness2 > r2)
     {
       Drul_array<Real> pos = ly_scm2interval (me->get_property ("positions"));
-      Real r = linear_combination (pos, 0);
+      Real r = linear_combination (pos, 0.0);
 
       r /= Staff_symbol_referencer::staff_space (me);
       me->set_property ("positions", ly_interval2scm (Drul_array<Real> (r, r)));
@@ -1223,7 +1221,7 @@ where_are_the_whole_beams (SCM beaming)
 {
   Slice l; 
   
-  for ( SCM s = ly_car (beaming); is_pair (s) ; s = ly_cdr (s))
+  for ( SCM s = ly_car (beaming); ly_c_pair_p (s) ; s = ly_cdr (s))
     {
       if (scm_c_memq (ly_car (s), ly_cdr (beaming)) != SCM_BOOL_F)
        
@@ -1297,7 +1295,7 @@ Beam::set_stem_lengths (Grob *me)
 
   bool gap = false;
   Real thick =0.0;
-  if (is_number (me->get_property ("gap-count"))
+  if (ly_c_number_p (me->get_property ("gap-count"))
       &&ly_scm2int (me->get_property ("gap-count")))
     {
       gap = true;
@@ -1455,7 +1453,7 @@ Beam::rest_collision_callback (SCM element_smob, SCM axis)
   Grob *rest = unsmob_grob (element_smob);
   Axis a = (Axis) ly_scm2int (axis);
 
-  if (is_number (rest->get_property ("staff-position")))
+  if (ly_c_number_p (rest->get_property ("staff-position")))
     return scm_int2num (0);
   
   assert (a == Y_AXIS);
@@ -1472,7 +1470,7 @@ Beam::rest_collision_callback (SCM element_smob, SCM axis)
 
   Drul_array<Real> pos (0, 0);
   SCM s = beam->get_property ("positions");
-  if (is_pair (s) && is_number (ly_car (s)))
+  if (ly_c_pair_p (s) && ly_c_number_p (ly_car (s)))
     pos = ly_scm2interval (s);
   Real staff_space = Staff_symbol_referencer::staff_space (rest);
 
@@ -1525,12 +1523,12 @@ bool
 Beam::is_knee (Grob* me)
 {
   SCM k = me->get_property ("knee");
-  if (is_boolean (k))
+  if (ly_c_boolean_p (k))
     return ly_scm2bool (k);
 
   bool knee = false;
   int d = 0;
-  for (SCM s = me->get_property ("stems"); is_pair (s); s = ly_cdr (s))
+  for (SCM s = me->get_property ("stems"); ly_c_pair_p (s); s = ly_cdr (s))
     {
       Direction dir = get_grob_direction (unsmob_grob (ly_car (s)));
       if (d && d != dir)
@@ -1574,7 +1572,7 @@ ADD_INTERFACE (Beam, "beam-interface",
               "knee positioning-done position-callbacks concaveness-gap "
               "concaveness-threshold dir-function quant-score auto-knee-gap gap "
               "gap-count chord-tremolo beamed-stem-shorten shorten least-squares-dy "
-              "damping flag-width-function neutral-direction positions space-function "
+              "damping inspect-quants flag-width-function neutral-direction positions space-function "
               "thickness");