]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.16
authorfred <fred>
Tue, 26 Mar 2002 22:44:41 +0000 (22:44 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:44:41 +0000 (22:44 +0000)
71 files changed:
CHANGES
input/test/tie-sparse.sly [new file with mode: 0644]
lily/align-note-column-engraver.cc
lily/auto-beam-engraver.cc
lily/bar-engraver.cc
lily/bar-script-engraver.cc
lily/beam-engraver.cc
lily/bow.cc
lily/break-align-engraver.cc
lily/breathing-sign.cc
lily/collision.cc
lily/directional-element.cc
lily/dot-column.cc
lily/dots.cc
lily/extender-spanner.cc
lily/hyphen-spanner.cc
lily/include/beam.hh
lily/include/bow.hh
lily/include/breathing-sign.hh
lily/include/clef-item.hh
lily/include/collision.hh
lily/include/crescendo.hh
lily/include/directional-element-interface.hh [new file with mode: 0644]
lily/include/directional-element.hh
lily/include/directional-spanner.hh
lily/include/dots.hh
lily/include/extender-spanner.hh
lily/include/hyphen-spanner.hh
lily/include/lily-guile.hh
lily/include/lily-proto.hh
lily/include/note-head-side.hh
lily/include/side-position-interface.hh
lily/include/staff-symbol-referencer.hh
lily/include/staff-symbol.hh
lily/include/stem-tremolo.hh
lily/include/stem.hh
lily/include/text-item.hh
lily/include/tie.hh
lily/include/tuplet-spanner.hh
lily/key-engraver.cc
lily/lily-guile.cc
lily/local-key-engraver.cc
lily/lookup.cc
lily/melisma-engraver.cc
lily/moment.cc
lily/multi-measure-rest.cc
lily/note-column.cc
lily/note-head-side.cc
lily/note-head.cc
lily/rest-collision.cc
lily/rest.cc
lily/rhythmic-column-engraver.cc
lily/score-element.cc
lily/script-engraver.cc
lily/slur-engraver.cc
lily/slur.cc
lily/staff-bar.cc
lily/staff-symbol-engraver.cc
lily/staff-symbol-referencer.cc
lily/staff-symbol.cc
lily/stem-engraver.cc
lily/stem-tremolo.cc
lily/text-engraver.cc
lily/tie-engraver.cc
lily/tie.cc
lily/timing-engraver.cc
lily/timing-translator.cc
lily/tuplet-engraver.cc
lily/volta-spanner.cc
ly/params.ly
scm/generic-property.scm

diff --git a/CHANGES b/CHANGES
index f0747050e808f46bf8ef25775d6e16fb62325b4a..f0d171221dc1cad39a0636d40e0c784d1213b050 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,36 @@
+1.3.15.hwn1
+===========
+
+       * Fixed bug in stem code.  Stem in chords works again.  Small
+stem cleanups.
+
+       * Use element properties for Staff_symbol.
+
+       * \property sparseTies (boolean).  Only make one tie in the
+middle for tied chords.
+
+       * Junked Directional_spanner, Column_info.
+Directional_element now is element interface `Directional_element_interface'
+
+       * cleanup: use to_boolean () iso. gh_boolean_p && gh_bool2scm
+
+pl 15.jcn4
+       - removed old notename2scm conversion
+       - beam-dir-algorithm through scm
+       - bfs paper-scm
+       - bf: knee-stemlengths
+
+pl 15.jcn3
+       - moved poor man's stem arrays to scm
+       
+pl 15.jcn2
+       - beam quanting using scm lists
+
+pl 14.hwn1jcn1
+       - chord-name uses scm members
+       - bfs: knee with different mults, interstaff knee, auto-knee
+
+**********
 pl 14.hwn1
        - specialize duration.cc for lily, move out of lib/
        - stem cleanup
@@ -19,7 +52,7 @@ pl 13.jcn2
 pl 13.jcn1
        - bezier-bow fix
 
-***********
+**********
 pl 12.hwn1
        - polynomial.hh
        - bf: generic properties
@@ -29,8 +62,7 @@ pl 12.hwn1
        - use smobs for font metric tables/hashes.
        - nl.po bf
 
-************
-
+**********
 pl 11.jcn3
        - small beam fixes (interstaff knees still broken)
 
@@ -45,7 +77,7 @@ pl 11.jcn2
        - bf's: if (Foo b = bar != 1)
        - beam cleanup
 
-************
+*********
 pl 10.uu1
        - various small bfs
        - bf: alignment reversed
@@ -61,7 +93,7 @@ pl 10.jcn1
        - steminfo to properties
        - dropped internote dim for stem-beams
 
-**********
+*********
 pl 9.hwn1
        - abstracting Staff_symbol_referencer to an interface.
        - quantised_position for staccato dots.
@@ -69,7 +101,7 @@ pl 9.hwn1
        - junk Score_element::do_{width,height}: set callbacks directly.
        - merge Score_element, Graphical_element
        - merge Axis_group_element, Graphical_axis_group
-       - junk pointer fields fromScore_element derived classes
+       - junk pointer fields from Score_element derived classes
        - junk obsolete do_substitute_dependency code.
 
 **********
diff --git a/input/test/tie-sparse.sly b/input/test/tie-sparse.sly
new file mode 100644 (file)
index 0000000..cbfc70d
--- /dev/null
@@ -0,0 +1,4 @@
+
+\context Voice {
+\property Voice.sparseTies = ##t
+c''  <c e g> ~ <c e g>  }
index 11bcefe65238f1f66281ca731bf50795a124ea3a..f83c2747ac15d7600afeb5b6b1b08774424b9bba 100644 (file)
@@ -12,6 +12,7 @@
 #include "note-column.hh"
 #include "local-key-item.hh"
 #include "warn.hh"
+#include "directional-element-interface.hh"
 
 /**
    catch notes, and put them in a row.
@@ -53,7 +54,7 @@ Align_note_column_engraver::do_removal_processing ()
   SCM al = get_property ("graceAlignPosition", 0);
   if (isdir_b (al))
     {
-      align_item_p_->set_direction (to_dir (al));
+      directional_element (align_item_p_).set (to_dir (al));
     }
   
   typeset_element (align_item_p_);
index 81e7cf94b8694763477d4a2aa20e083d965d0f29..74761145cd158cfb594690d364364be549fdae25 100644 (file)
@@ -176,7 +176,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
     Allow already started autobeam to end
    */
   SCM on = get_property ("noAutoBeaming", 0);
-  if (gh_boolean_p (on) && gh_scm2bool (on))
+  if (to_boolean (on))
     return;
 
   if (begin_mom)
@@ -290,7 +290,7 @@ Auto_beam_engraver::same_grace_state_b (Score_element* e)
 {
   bool gr = e->get_elt_property ("grace") == SCM_BOOL_T;
   SCM wg =get_property ("weAreGraceContext",0);
-  return (gh_boolean_p (wg) && gh_scm2bool (wg)) == gr;
+  return (to_boolean (wg)) == gr;
 }
 
 void
@@ -327,7 +327,7 @@ Auto_beam_engraver::acknowledge_element (Score_element_info info)
       /*
        Don't (start) auto-beam over empty stems; skips or rests
        */
-      if (!stem_l->first_head ())
+      if (!stem_l->heads_i ())
        {
          if (stem_l_arr_p_)
            end_beam ();
index e8b29882f86e45bb3d667a1941c8292adaa1c4d7..a364995d4c0d6524e4ce216fc2f31bd332f2b1b8 100644 (file)
@@ -45,7 +45,7 @@ Bar_engraver::create_bar ()
        urg.  Why did I implement this?
        */
       SCM prop = get_property ("barAtLineStart", 0);
-      if (gh_boolean_p (prop) && gh_scm2bool (prop))
+      if (to_boolean (prop))
        {
          bar_p_->set_elt_property ("at-line-start", SCM_BOOL_T);
        }
@@ -64,7 +64,7 @@ Bar_engraver::request_bar (String requested_type)
   if (!now_mom ())
     {
       SCM prop = get_property ("barAtLineStart", 0);
-      if (!gh_boolean_p (prop) && gh_scm2bool (prop))
+      if (!to_boolean (prop))
        return;
     }
   bool  bar_existed = bar_p_;
index f4fa06452c4f8cfc33c7148f8e94af75cebba814..c51d6611753c929ab97aba58d4223080adeb8a4e 100644 (file)
@@ -31,7 +31,7 @@ void
 Bar_script_engraver::do_creation_processing ()
 {
   SCM prop = get_property (type_ + "HangOnClef", 0);
-  if (gh_boolean_p (prop) && gh_scm2bool (prop))
+  if (to_boolean (prop))
     {
       hang_on_clef_b_ = true;
     }
index 1fa729cc51a0e8a6d41c22d9866ed7a2268e4f42..9ca86078852e6f3e022f78f30cf55b4edd11c18f 100644 (file)
@@ -159,7 +159,7 @@ Beam_engraver::acknowledge_element (Score_element_info info)
       bool stem_grace = stem_l->get_elt_property ("grace") == SCM_BOOL_T;
 
       SCM wg =get_property ("weAreGraceContext",0);
-      bool wgb= gh_boolean_p (wg) && gh_scm2bool (wg);
+      bool wgb= to_boolean (wg);
 
       if (wgb!= stem_grace)
        return;
index a87329fe785c42712a6b7f1b4b7f9cbaac2fe986..ac43af288ec2aabf604775758585fe316ce986ef 100644 (file)
@@ -15,6 +15,7 @@
 #include "lookup.hh"
 #include "bezier-bow.hh"
 #include "main.hh"
+#include "directional-element-interface.hh"
 
 Bow::Bow ()
 {
@@ -33,7 +34,7 @@ Bow::do_brew_molecule_p () const
   if (gh_number_p (d))
     a = lookup_l ()->dashed_slur (one, thick, gh_scm2int (d));
   else
-    a = lookup_l ()->slur (one, get_direction () * thick, thick);
+    a = lookup_l ()->slur (one, directional_element (this).get () * thick, thick);
   
   return new Molecule (a); 
 }
@@ -58,7 +59,7 @@ Bezier
 Bow::get_curve () const
 {
   Bezier_bow b (paper_l (),
-               get_encompass_offset_arr (), get_direction ());
+               get_encompass_offset_arr (), directional_element (this).get ());
   
   return b.get_curve ();
 }
index f735fe9e8c65eb52eb3151e646040c086002e06f..44d94270a6028544137528c2e1774f5fe6ca33e6 100644 (file)
@@ -83,7 +83,7 @@ Break_align_engraver::acknowledge_element (Score_element_info inf)
        return;
 
       SCM bp=item_l->remove_elt_property ("breakable");
-      bool breakable = (gh_boolean_p  (bp) && gh_scm2bool (bp));
+      bool breakable = (to_boolean (bp));
       if (!breakable)
        return ;
 
index 9861ac19c557004e0df2574a1c1a112785c3314b..97460a490afff8826b707e29ffff6e4db2b4769a 100644 (file)
@@ -9,6 +9,7 @@ TODO: --> see breathing-sign-engraver.cc
 
 */
 #include "staff-symbol-referencer.hh"
+#include "directional-element-interface.hh"
 
 #include "breathing-sign.hh"
 #include "string.hh"
@@ -22,12 +23,9 @@ TODO: --> see breathing-sign-engraver.cc
 
 Breathing_sign::Breathing_sign ()
 {
-  set_direction (UP);
   set_elt_property ("breakable", SCM_BOOL_T);
 }
 
-
-
 Molecule*
 Breathing_sign::do_brew_molecule_p () const
 {
@@ -47,6 +45,6 @@ Breathing_sign::do_post_processing()
 {
   Real dl = Staff_symbol_referencer_interface (this).staff_space();
 
-  translate_axis(2.0 * dl * get_direction (), Y_AXIS);
+  translate_axis(2.0 * dl * directional_element(this).get (), Y_AXIS);
 }
 
index 91301c6ca698dc2f9ca1fe552bd19283b08a76d2..a6bf46e56cc85da7374356e3564d00697da529ff 100644 (file)
@@ -145,10 +145,8 @@ Collision::automatic_shift ()
       /*
        TODO.
        */
-      Note_head * nu_l= cu_l->first_head();  // cu_l->head_l_arr_[0];
-      Note_head * nd_l = cd_l->first_head(); // cd_l->head_l_arr_.top();
-
-
+      Note_head * nu_l= cu_l->first_head();
+      Note_head * nd_l = cd_l->first_head();
       
       int downpos =    cd_l->head_positions_interval ()[BIGGER];
       int uppos =      cu_l->head_positions_interval ()[SMALLER];      
@@ -172,7 +170,6 @@ Collision::automatic_shift ()
          while ((flip (&d))!= UP);
     }
 
-
   do
     {
       for (int i=0; i < clash_groups[d].size (); i++)
index 83a4aaecb5d0b9a1e8e261b310c8a8ddf8d9e40e..dac91951bd0fd7a78f39ffbc9134f53208274824 100644 (file)
@@ -7,18 +7,28 @@
   
  */
 
-#include "directional-element.hh"
+#include "directional-element-interface.hh"
 
 
-Directional_element::Directional_element ()
+Directional_element_interface::Directional_element_interface (Score_element const *s)
 {
+  elt_l_ =  (Score_element*)s;
 }
 
+bool
+Directional_element_interface::has_interface_b () const
+{
+  return isdir_b (elt_l_->get_elt_property ("direction"));
+}
+
+
+  
+
 Direction
-Directional_element::get_direction () const
+Directional_element_interface::get () const
 {
   // return dir_;
-  SCM d= get_elt_property ("direction");
+  SCM d= elt_l_->get_elt_property ("direction");
   if (!isdir_b(d))
     return CENTER;
       
@@ -26,7 +36,13 @@ Directional_element::get_direction () const
 }
 
 void
-Directional_element::set_direction (Direction d) 
+Directional_element_interface::set (Direction d) 
+{
+  elt_l_->set_elt_property ("direction", gh_int2scm (d));
+}
+
+Directional_element_interface
+directional_element (Score_element const*s)
 {
-  set_elt_property ("direction", gh_int2scm (d));
+  return s;
 }
index d085bf401116a6b8dbbdab1086e4eb6452c93b9a..b9868a29b88a27079881664c8ad58942da6d3143 100644 (file)
@@ -11,6 +11,7 @@
 #include "rhythmic-head.hh"
 #include "group-interface.hh"
 #include "staff-symbol-referencer.hh"
+#include "directional-element-interface.hh"
 
 void
 Dot_column::add_dots (Dots *d)
@@ -49,7 +50,7 @@ Dot_column::Dot_column ()
   Group_interface gi (this, "dots");
   gi.set_interface ();
   
-  set_direction (RIGHT);
+  directional_element (this).set (RIGHT);
   set_axes(X_AXIS,X_AXIS);
 }
 
index fc3c57e0dd0c93c5575e30cbfdbd664c39912f80..ad62ecceda10a471d346987165a71261d73deac7 100644 (file)
@@ -11,6 +11,7 @@
 #include "paper-def.hh"
 #include "lookup.hh"
 #include "staff-symbol-referencer.hh"
+#include "directional-element-interface.hh"
 
 Dots::Dots ()
 {
@@ -28,13 +29,13 @@ Dots::do_post_processing ()
     }
   else
     {
-      if (!get_direction ())
-       set_direction (UP);
+      if (!directional_element (this).get ())
+       directional_element (this).set (UP);
 
       Staff_symbol_referencer_interface si (this);
       int p = int (si.position_f ());
       if (!(p % 2))
-       si.set_position (p  + get_direction ());
+       si.set_position (p  + directional_element (this).get ());
     }
 }
 Molecule* 
index a9eb6640c59dd66286073bd1adc46401b6123d9b..e70e848035afa923f404c0a22cc7ad35a5dd1781 100644 (file)
@@ -21,7 +21,7 @@
 #include "extender-spanner.hh"
 
 Extender_spanner::Extender_spanner ()
-  : Directional_spanner ()
+  : Spanner ()
 {
   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
   dim_cache_[Y_AXIS]->set_callback (Dimension_cache::point_dimension_callback);
index ebb02d18d471c8925277c8bb043461246c837505..be36b99bf61ccbf8bc7d749d581a55c42ca43673 100644 (file)
@@ -23,7 +23,7 @@
 #include "dimension-cache.hh"
 
 Hyphen_spanner::Hyphen_spanner ()
-  : Directional_spanner ()
+  : Spanner ()
 {
   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
 
index 13e3421f0c8fcf58ac47d7721edbd7985ddbc9d1..e2908fe5c38e5376f3bff5fda64bd9c65490cdca 100644 (file)
@@ -8,7 +8,7 @@
 #define BEAM_HH
 
 #include "lily-proto.hh"
-#include "directional-spanner.hh"
+#include "spanner.hh"
 
 
 /** a beam connects multiple stems.
   Beam adjusts the stems its owns to make sure that they reach the
   beam and that point in the correct direction (urg?)
 
-elt property:
-
-damping: amount of beam slope damping. (int)
-
-should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams 
-
-slope_quantisation: 'none, 'normal or 'traditional
+   elt_properties:
+   y-position: real  (position of left edge)
+   height: real  (dy)
 
+   damping: amount of beam slope damping. (int)
+   should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams 
 */
-class Beam : public Directional_spanner
+class Beam : public Spanner
 {
 public:
 
index 6b788f154c92242b35f029da90f6542eb4cdf40c..16b9741486a4d2cf53c1f901c2dc338dce2335f3 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef BOW_HH
 #define BOW_HH
 
-#include "directional-spanner.hh"
+#include "spanner.hh"
 
 /**
   Base class for anything that looks like a slur.
@@ -21,7 +21,7 @@
     dy_f_drul_ , dx_f_drul_
   
   */
-class Bow : public Directional_spanner
+class Bow : public Spanner
 {
 public:
   Bow ();
index ffc2f3d7eb8c3d5b2740c2b8faa9eb62d7e5ed9e..aff6f393b438b95162991b5605cfda03a9e4a12a 100644 (file)
 
 #include "item.hh"
 #include "parray.hh"
-#include "directional-element.hh"
 
-class Breathing_sign : public Item,
-                      public Directional_element
+class Breathing_sign : public Item
 {
 public:
   VIRTUAL_COPY_CONS(Score_element);
index 68ed2dc5e274c54fe60c8ff6430b3eefcd247b6c..652441278dd8f03f2120417ddaab6b26416d94ae 100644 (file)
@@ -9,7 +9,7 @@
 #include "item.hh"
 
 #include "direction.hh"
-#include "pointer.hh"
+
 
 /**
   Set a clef in a staff.
index a1ee164ff0f007d8f93450bcde79ae9991233fbe..f17e4378342cbfdc0d4039ec0380d7c99ea54ee4 100644 (file)
@@ -13,7 +13,7 @@
 #include "axis-group-item.hh"
 #include "tuple.hh"
 
-
+//junkme, use SCM conses.
 typedef Tuple<Score_element*, Real> Shift_tup;
 
 /**
index 237cc49984375aee53b7e3d7663d1a3e997b1ae3..48834a4718bae47e94ea5804b1446aca916b21f9 100644 (file)
 #ifndef CRESCENDO_HH
 #define CRESCENDO_HH
 
-#include "directional-spanner.hh"
+#include "spanner.hh"
 /**
   The hairpin symbol. (cresc)
 
   (normal spanner?)
  */
-class Crescendo : public Directional_spanner {
+class Crescendo : public Spanner {
 public:
   int grow_dir_;
     
diff --git a/lily/include/directional-element-interface.hh b/lily/include/directional-element-interface.hh
new file mode 100644 (file)
index 0000000..c21a89d
--- /dev/null
@@ -0,0 +1,31 @@
+/*   
+  directional-element.hh -- declare Directional_element
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef DIRECTIONAL_ELEMENT_HH
+#define DIRECTIONAL_ELEMENT_HH
+
+#include "score-element.hh"
+
+struct Directional_element_interface 
+{
+  
+public:
+  Score_element *elt_l_;
+  
+  Directional_element_interface (Score_element const *);
+  void set  (Direction d);
+  Direction get () const;
+  bool has_interface_b () const;
+  // bool set_interface ();
+};
+
+Directional_element_interface directional_element (Score_element const*);
+
+#endif /* DIRECTIONAL_ELEMENT_HH */
+
index a94bfced9dca15bb08025bade179525e34b56962..139597f9cb07c5d48bed18984ec4747f4b4f3438 100644 (file)
@@ -1,25 +1,2 @@
-/*   
-  directional-element.hh -- declare Directional_element
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
 
-#ifndef DIRECTIONAL_ELEMENT_HH
-#define DIRECTIONAL_ELEMENT_HH
-
-#include "score-element.hh"
-
-struct Directional_element : public virtual Score_element
-{
-  void set_direction (Direction d);
-  Direction get_direction () const;
-
-  VIRTUAL_COPY_CONS(Score_element);
-  Directional_element ();
-};
-
-#endif /* DIRECTIONAL_ELEMENT_HH */
 
index 779a5ed9f4eee8572bef6988aaf7405193372379..65296f81060baccd891380179b283fc7515acef0 100644 (file)
@@ -1,28 +1,2 @@
-/*
-  directional-spanner.hh -- part of GNU LilyPond
-
-  (c) 1996--1999 Han-Wen Nienhuys
-*/
-
-#ifndef DIRECTIONALSPANNER_HH
-#define DIRECTIONALSPANNER_HH
-
-#include "spanner.hh"
-#include "directional-element.hh"
-
-/** a spanner which can be pointing "up" or "down".
-
-    JUNKME
- */
-class Directional_spanner : public Spanner, public Directional_element {
-public:
-  /// offset of "center" relative to left-column/0-pos of staff
-  //  virtual Offset center() const;
-  virtual Direction get_default_dir() const;
-  VIRTUAL_COPY_CONS(Score_element);
-protected:
-  virtual void do_pre_processing();
-};
-
-#endif // DIRECTIONALSPANNER_HH
 
+#error
index 8225860aa9ca1af4180e5e57b9377bb699308dd3..4cb5843b9df8b891703d97207ac68d4b1706495e 100644 (file)
 
 #include "item.hh"
 
-#include "directional-element.hh"
 
 /**
   The dots to go with a notehead/rest.  A separate class, since they
   are a party in collision resolution.
   */
 class Dots :
-  public Item,
-  public Directional_element
+  public Item
 {
 protected:
   virtual Molecule * do_brew_molecule_p () const;
   virtual void do_post_processing ();
 public:
+  // junkme.
   int dots_i_;
   
   Dots ();
index e0268198e8c6c49b3da2b8e3b6f72cc16efce28f..cb24e42ded4344e5aedc57ad8111dd4c9c787a81 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef EXTENDER_SPANNER_HH
 #define EXTENDER_SPANNER_HH
 
-#include "directional-spanner.hh"
+#include "spanner.hh"
 
 /** 
   simple extender line 
@@ -27,7 +27,7 @@
   extend beond, lasting the whole duration of the melissima
   (as in MUP, urg).
   */
-class Extender_spanner : public Directional_spanner
+class Extender_spanner : public Spanner
 {
 public:
   Extender_spanner ();
index d7a15b6c00c11f5795c57a5e8c482d032cb7da7c..3086facc32154c0fff6b4f2705c67e5a44034c42 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef HYPHEN_SPANNER_HH
 #define HYPHEN_SPANNER_HH
 
-#include "directional-spanner.hh"
+#include "spanner.hh"
 
 /** 
   centred hyphen 
@@ -18,7 +18,7 @@
   The length of the hyphen line should stretch based on the
   size of the gap between syllables.
   */
-class Hyphen_spanner : public Directional_spanner
+class Hyphen_spanner : public Spanner
 {
 public:
 Hyphen_spanner ();
index 84af73262bfa92093c2ac9477b85ba08cd353dcc..c9c4e6a997344594c9b8882f2a444805ae317e84 100644 (file)
@@ -16,7 +16,7 @@
 #include "direction.hh"
 
 SCM ly_str02scm (char const*c);
-SCM ly_eval_str (char const*c);
+SCM ly_eval_str (String s);
 SCM ly_symbol2scm (char const *);
 String ly_symbol2string (SCM);
 SCM ly_set_x (String name , SCM val);
@@ -39,6 +39,7 @@ void init_lily_guile ();
 bool isdir_b (SCM s);
 Direction to_dir (SCM s);
 
+bool to_boolean (SCM s);
 
 void init_ly_protection ();
 unsigned int ly_scm_hash (SCM s);
@@ -46,6 +47,16 @@ unsigned int ly_scm_hash (SCM s);
 SCM index_cell (SCM cellp, Direction d);
 SCM index_set_cell (SCM cellp, Direction d, SCM val);
 
+template<class T>SCM array_to_scm (Array<T> arr);
+template<class T>void scm_to_array (SCM s, Array<T>* arr);
+
+//URG how templates suck!
+SCM to_scm (int i);
+void scm_to (SCM s, int* i);
+
+SCM to_scm (Real r);
+void scm_to (SCM s, Real* r);
+
 /*
   snarfing.
  */
@@ -61,6 +72,4 @@ public:\
 } _ ## name ## _scm_initter;                   \
 /* end define */
 
-
-
 #endif // LILY_GUILE_HH
index 0c5b18ef7fdf5d5f618433493227bfe7ca95f4d9..c7d99235b463e62ab77866b726bfa08b9d30d29e 100644 (file)
@@ -81,7 +81,7 @@ struct Command_script_req;
 struct Command_tie_engraver;
 struct Crescendo ;
 struct Dimension_cache;
-struct Directional_spanner;
+struct Spanner;
 struct Dot_column;
 struct Dots;
 struct Durational_req;
index b30271855f7728651b958901a97b0f800df99eeb..3e94b475d2a3dadd05a5216e8a7812563ceea71c 100644 (file)
 #define NOTE_HEAD_SIDE_HH
 
 #include "item.hh"
-#include "directional-element.hh"
 
 /**
    be next to noteheads.
    */
-class Note_head_side: public virtual Item, public virtual Directional_element
+class Note_head_side: public virtual Item
 {
 public:
-
   Note_head_side ();
   bool supported_b () const;
   void add_support (Item*);
index 55a15f308adfabc121b2cbe71de431245d6eb06f..cfa65ffec02be2071bda9e39ec77f05227aabc3d 100644 (file)
@@ -13,8 +13,6 @@
 #include "spanner.hh"
 #include "item.hh"
 
-#include "directional-element.hh"
-
 struct Side_position_interface
 {
   Score_element * elt_l_;
index 589f73e0b49ee833f65d8f41194d09bbc5f58f15..d9d05da0184c4c742672863f355dd0647f3a6a7e 100644 (file)
@@ -35,7 +35,7 @@ public:
   
   Real staff_space () const;
   Staff_symbol * staff_symbol_l () const;
-  int lines_i () const;
+  int line_count () const;
   Real position_f () const;
 };
 
index c052e6220dfbf6c955208b92b259771bf6502389..8fde55f94ddc2eaf0ef023eb773c97275e6e6206 100644 (file)
 class Staff_symbol : public Spanner
 {
 public:
-  /// this many lines.
-  int no_lines_i_;
-  Real staff_space_;
-  Real staff_space ();
-  
-  
-  Staff_symbol ();
+  Real staff_space () const;
   int steps_i() const;
+  int line_count () const;
 protected:
   VIRTUAL_COPY_CONS(Score_element);
   virtual Molecule* do_brew_molecule_p() const;
-  virtual void do_print() const;
 };
 #endif // STAFFSYM_HH
index ef23aadfde82ec64d910386afabae784676d0471..d17936fbec870481426c9defbb8335eec62b7972 100644 (file)
 class Stem_tremolo : public Item {
 protected:
   Stem * stem_l () const;
-  virtual void do_print () const;
   virtual Molecule *do_brew_molecule_p () const;
 
   static Interval dim_callback (Dimension_cache const*);
 public:
-  int abbrev_flags_i_;
   Stem_tremolo ();
   void set_stem (Stem *);
 };
index b496614ebeb08b00d8c244836a55af073f7869d9..e1b330e200d87ff7faeecff3db8146b3739404a4 100644 (file)
@@ -11,7 +11,6 @@
 #include "array.hh"
 #include "moment.hh"
 #include "molecule.hh"
-#include "directional-element.hh"
 #include "stem-info.hh"
 
 /**the rule attached to the ball.
@@ -41,8 +40,7 @@
 
   
   */
-class Stem : public Item,
-            public Directional_element
+class Stem : public Item
 {
 public:
   /// log of the duration. Eg. 4 -> 16th note -> 2 flags
@@ -56,6 +54,8 @@ public:
    */
   Beam* beam_l () const;
   Note_head * first_head () const;
+  Drul_array<Note_head*> extremal_heads () const;
+
   Score_element * support_head () const;
   Stem ();
 
@@ -66,25 +66,28 @@ public:
   Stem_info calc_stem_info () const;
 
   Real chord_start_f () const;
-  
+  Direction get_direction () const;
   int type_i () const;
   void set_stemend (Real);
   Direction get_default_dir() const;
+
   int get_center_distance(Direction) const;
-  Real  get_default_stemlen() const;
+  int heads_i () const;
+
+  bool invisible_b() const;
+    
+  /// heads that the stem encompasses (positions)
+  Interval head_positions() const;
 
+protected:
+  friend class Stem_tremolo;   // ugh.
+  Real  get_default_stem_end_position () const;
   void position_noteheads();
 
-  Real stem_end_position () const;
 
+  Real stem_end_position () const;
   // todo: cleanup, naming
   Real note_delta_f () const;
-
-  bool invisible_b() const;
-    
-  /// heads that the stem encompasses (positions)
-  Interval_t<int> head_positions() const;
-
 protected:
   Molecule flag () const;
 
index 4e628f27870ab4a1333f33c52a2a9e20848cfd1d..4e6f14764edb074a8e995c5751c70f651f3f1661 100644 (file)
@@ -18,6 +18,7 @@
 class Text_item : public Item
 {
 public:
+  // junkme.
   String text_str_;
 
   VIRTUAL_COPY_CONS (Score_element);
index a89088ab8a451edfc90105e4d6d909d80e1ebe16..7fe61a3850e2057c5fb7dd96384e2fc480e95fe6 100644 (file)
@@ -20,7 +20,7 @@ class Tie : public Bow
 {
 public:
   Tie ();
-  void set_head (Direction, Note_head*head_l);
+  void set_head (Direction, Item*head_l);
   VIRTUAL_COPY_CONS(Score_element);
 
   Note_head* head (Direction) const;
index 2fd0a5ff16efd2660d1edd9acfc81ab673682179..662ded9f98f19b68c60aeb2256331082ae047efe 100644 (file)
@@ -8,7 +8,7 @@
 #define Tuplet_spanner_HH
 
 #include "pointer.hh"
-#include "directional-spanner.hh"
+#include "spanner.hh"
 
 /** supportable plet: triplets, eentweetjes, ottava, etc.
 
@@ -17,7 +17,7 @@
 
   todo: handle breaking elegantly.
 */
-class Tuplet_spanner : public Directional_spanner
+class Tuplet_spanner : public Spanner
 {
 public:
   Tuplet_spanner ();
@@ -25,7 +25,9 @@ public:
   void add_column (Note_column*);
   void add_beam (Beam*);
   
-
+  /*
+    JUNKME.
+   */
   String  number_str_;
 
   bool parallel_beam_b_;
index 6758de42079032733a64e80588faaa409cb24d69..299c6d49edd6f2f0f049b68858226d26e599e2e6 100644 (file)
@@ -86,7 +86,7 @@ Key_engraver::acknowledge_element (Score_element_info info)
   if (dynamic_cast <Clef_change_req *> (info.req_l_)) 
     {
       SCM c =  get_property ("createKeyOnClefChange", 0);
-      if (gh_boolean_p (c) && gh_scm2bool (c))
+      if (to_boolean (c))
        create_key ();
     }
   else if (dynamic_cast<Bar *> (info.elem_l_)
@@ -133,7 +133,7 @@ Key_engraver::read_req (Key_change_req const * r)
   key_.clear ();
   SCM prop = get_property ("keyOctaviation", 0);
 
-  key_.multi_octave_b_ = gh_boolean_p (prop) && gh_scm2bool (prop);
+  key_.multi_octave_b_ = to_boolean (prop);
   
   accidental_idx_arr_.clear ();
 
index 21723f7713c21d21f11371f6e9bec600fabbf953..ac577bd101ae046b82e2f16adaf8869b9fe9ea46 100644 (file)
@@ -28,10 +28,10 @@ ly_str02scm (char const*c)
 }
 
 SCM
-ly_eval_str (char const*c)
+ly_eval_str (String s)
 {
   // this all really sucks, guile should take char const* arguments!
-  return gh_eval_str ((char*)c);
+  return gh_eval_str ((char*)s.ch_C ());
 }
 
   
@@ -197,17 +197,6 @@ index_set_cell (SCM s, Direction d, SCM v)
   return s;
 }
   
-SCM
-array_to_list (SCM *a , int l)
-{
-  SCM list = SCM_EOL;
-  for (int i= l; i--;  )
-    {
-      list =  gh_cons (a[i], list);
-    }
-  return list;
-}
-
 SCM
 ly_warning (SCM str)
 {
@@ -282,3 +271,35 @@ to_dir (SCM s)
 }
 
 
+SCM
+to_scm (int i)
+{
+  return gh_int2scm (i);
+}
+
+void
+scm_to (SCM s, int* i)
+{
+  // urg
+  *i = gh_number_p (s) ? gh_scm2int (s) : 0;
+}
+
+SCM
+to_scm (Real r)
+{
+  return gh_double2scm (r);
+}
+
+void
+scm_to (SCM s, Real* r)
+{
+  // urg
+  *r = gh_number_p (s) ? gh_scm2double (s) : 0;
+}
+
+  
+bool
+to_boolean (SCM s)
+{
+  return gh_boolean_p (s) && gh_scm2bool (s);
+}
index 100bac981ddbb9207d55544697f88a6c2ede35b9..9029ea1eb40a0a04e7dda8ddb136da76c2112588 100644 (file)
@@ -60,7 +60,7 @@ Local_key_engraver::process_acknowledged ()
     if (!key_item_p_ && mel_l_arr_.size()) 
     {
         SCM f = get_property ("forgetAccidentals",0);
-        bool forget = gh_boolean_p (f) && gh_scm2bool(f);
+        bool forget = to_boolean (f);
         for (int i=0; i  < mel_l_arr_.size(); i++) 
            {
                Item * support_l = support_l_arr_[i];
@@ -183,7 +183,7 @@ Local_key_engraver::do_process_requests()
   if (time_C_ && !time_C_->measure_position ())
     {
       SCM n =  get_property ("noResetKey",0);
-      bool no_res = gh_boolean_p (n) && gh_scm2bool (n);
+      bool no_res = to_boolean (n);
       if (!no_res && key_grav_l_)
        local_key_= key_grav_l_->key_;
     }
index be3cabead6121f1dad766d5ee25b375caf5f73a1..812460e0fc10f062cf0ec98e7cfb46b0f2fd9d5d 100644 (file)
@@ -565,7 +565,7 @@ Lookup::volta (Real h, Real w, Real thick, bool vert_start, bool vert_end) const
 }
 
 Molecule
-Lookup::accordion (SCM s, Real interline_f) const
+Lookup::accordion (SCM s, Real staff_space) const
 {
   Molecule m;
   String sym = ly_scm2string(gh_car (s));
@@ -578,7 +578,7 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (reg.left_str(1) == "F")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 2.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 2.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
@@ -606,37 +606,37 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (eflag & 0x02)
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
          m.add_molecule(d);
        }
       if (eflag & 0x04)
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
-         d.translate_axis(0.8 * interline_f PT, X_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
+         d.translate_axis(0.8 * staff_space PT, X_AXIS);
          m.add_molecule(d);
        }
       if (eflag & 0x01)
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
-         d.translate_axis(-0.8 * interline_f PT, X_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
+         d.translate_axis(-0.8 * staff_space PT, X_AXIS);
          m.add_molecule(d);
        }
       if (reg.left_str(2) == "SS")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(0.5 * interline_f PT, Y_AXIS);
-         d.translate_axis(0.4 * interline_f PT, X_AXIS);
+         d.translate_axis(0.5 * staff_space PT, Y_AXIS);
+         d.translate_axis(0.4 * staff_space PT, X_AXIS);
          m.add_molecule(d);
-         d.translate_axis(-0.8 * interline_f PT, X_AXIS);
+         d.translate_axis(-0.8 * staff_space PT, X_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-2);
        }
       if (reg.left_str(1) == "S")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(0.5 * interline_f PT, Y_AXIS);
+         d.translate_axis(0.5 * staff_space PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
@@ -648,14 +648,14 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (reg.left_str(1) == "F")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg == "E")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 0.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 0.5 PT, Y_AXIS);
          m.add_molecule(d);
        }
     }
@@ -666,7 +666,7 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (reg.left_str(1) == "T")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 2.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 2.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
@@ -674,24 +674,24 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (reg.left_str(1) == "F")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg.left_str(2) == "EE")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 0.5 PT, Y_AXIS);
-         d.translate_axis(0.4 * interline_f PT, X_AXIS);
+         d.translate_axis(staff_space * 0.5 PT, Y_AXIS);
+         d.translate_axis(0.4 * staff_space PT, X_AXIS);
          m.add_molecule(d);
-         d.translate_axis(-0.8 * interline_f PT, X_AXIS);
+         d.translate_axis(-0.8 * staff_space PT, X_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-2);
        }
       if (reg.left_str(1) == "E")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 0.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 0.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
@@ -703,36 +703,36 @@ Lookup::accordion (SCM s, Real interline_f) const
       if (reg.left_str(1) == "T")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 3.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 3.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg.left_str(1) == "F")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 2.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 2.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg.left_str(1) == "M")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 2 PT, Y_AXIS);
-         d.translate_axis(interline_f PT, X_AXIS);
+         d.translate_axis(staff_space * 2 PT, Y_AXIS);
+         d.translate_axis(staff_space PT, X_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg.left_str(1) == "E")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 1.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 1.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
       if (reg.left_str(1) == "S")
        {
          Molecule d = afm_find("scripts-accDot");
-         d.translate_axis(interline_f * 0.5 PT, Y_AXIS);
+         d.translate_axis(staff_space * 0.5 PT, Y_AXIS);
          m.add_molecule(d);
          reg = reg.right_str(reg.length_i()-1);
        }
index 2bc76c99309ceba781493053c755ce85c37cee9d..3a89ad968fbc62b65cd4b0ae4789155e3a404229 100644 (file)
@@ -30,9 +30,9 @@ Melisma_engraver::do_try_music (Music *m )
       SCM plain (get_property ("melismaBusy", 0));
       SCM slur (get_property ("slurMelismaBusy", 0));
       SCM tie (get_property ("tieMelismaBusy", 0));
-      return (gh_boolean_p (plain) && gh_scm2bool (plain))
-       || (gh_boolean_p (slur) && gh_scm2bool (slur))
-       || (gh_boolean_p (tie) && gh_scm2bool (tie));
+      return (to_boolean (plain))
+       || (to_boolean (slur))
+       || (to_boolean (tie));
     }
   return false;
 }
index 0e11977686cc0c144341dcfedb3c1c0a3aa94927..ebe3b0b190b3d3e1584bd257b59d58eba8c8549c 100644 (file)
@@ -13,7 +13,7 @@
 #include "warn.hh"
 
 SCM
-Moment::mark_smob (SCM s)
+Moment::mark_smob (SCM)
 {
   return SCM_EOL;
 }
index 0ab27b60f59763b90f93e7101449d09285282cd1..72a23f5b589c7bdf08569d59834ee713527592c3 100644 (file)
@@ -89,17 +89,17 @@ Multi_measure_rest::do_brew_molecule_p () const
     }
   
   mol_p->add_molecule (s);
-  Real interline_f
+  Real staff_space
     = staff_symbol_referencer_interface (this).staff_space ();
   if (measures_i_ == 1 && rest_symbol)
     {
-      mol_p->translate_axis (interline_f, Y_AXIS);
+      mol_p->translate_axis (staff_space, Y_AXIS);
     }
   else if (measures_i_ > 1)
     {
       Molecule s (lookup_l ()->text ("number", to_str (measures_i_), paper_l ()));
       s.align_to (X_AXIS, CENTER);
-      s.translate_axis (3.0 * interline_f, Y_AXIS);
+      s.translate_axis (3.0 * staff_space, Y_AXIS);
       mol_p->add_molecule (s);
     }
   mol_p->translate_axis (x_off, X_AXIS);
index 44020d62869f6e092825165806c2c0b3f63ff25f..62fae0d80725cc4351be42aa12bec8441670f550 100644 (file)
@@ -187,7 +187,7 @@ Note_column::do_post_processing ()
   Real dist =
     minimum_dist +  -d  * (beamy - rest_dim) >? 0;
 
-  int stafflines = si.lines_i ();
+  int stafflines = si.line_count ();
 
   // move discretely by half spaces.
   int discrete_dist = int (ceil (dist ));
index b84b8953347e5e6cd6c0a2f0a76b279b7510647a..273744c03290e5300a3bd5454620fdf72e3e7621 100644 (file)
@@ -7,6 +7,8 @@
   
  */
 
+#include "directional-element-interface.hh"
+
 #include "side-position-interface.hh"
 #include "note-head-side.hh"
 void
index 6124b5a1fa6400805263c73a7db6e22819b81b51..fa911e7ca4b19cea11dc752cdf16ad240ad28cde 100644 (file)
@@ -52,7 +52,7 @@ Note_head::do_brew_molecule_p() const
   Staff_symbol_referencer_interface si (this);
   
   Real inter_f = si.staff_space ()/2;
-  int sz = si.lines_i ()-1;
+  int sz = si.line_count ()-1;
   Real p = si.position_f ();
   int streepjes_i = abs (p) < sz 
     ? 0
index 18abd7604c07a09ac8277e4105b7d7fee1d5779c..1f1c8748068ab97ae29edf8f7dff659e8677f52a 100644 (file)
@@ -92,9 +92,9 @@ Rest_collision::do_pre_processing()
        /* FIXME
          staff_space =  rcol->rest_l_arr[0]->staff_space ();
        */
-      Real internote_f = staff_space/2;
+      Real half_staff_space_f = staff_space/2;
       Real minimum_dist = paper_l ()->get_var ("restcollision_minimum_dist")
-       * internote_f;
+       * half_staff_space_f;
       
       /*
        assumption: ref points are the same. 
@@ -113,7 +113,7 @@ Rest_collision::do_pre_processing()
 
 
       // FIXME
-      int stafflines = 5; // rcol->rest_l_arr[0]->lines_i ();
+      int stafflines = 5; // rcol->rest_l_arr[0]->line_count;
 
       
       // move discretely by half spaces.
index 8999559d5f7ef5bf1d69cae171c417099e9ae071..57c5816892073562d2c16b80ccf5d433d786755e 100644 (file)
@@ -46,7 +46,7 @@ Rest::do_brew_molecule_p () const
     {
       Staff_symbol_referencer_interface si(this);
       ledger_b = abs(si.position_f ()  - (2* balltype_i () - 1))
-       > si.lines_i (); 
+       > si.line_count (); 
     }
   
   String style; 
index 6c31e63337d062d2e1d182226f5e0ac6ac63e71e..2709b60a82568c89481782773b4994b45759896c 100644 (file)
@@ -59,7 +59,7 @@ Rhythmic_column_engraver::process_acknowledged ()
        }
 
       SCM wg = get_property ("weAreGraceContext",0);
-      bool wegrace = gh_boolean_p (wg) && gh_scm2bool (wg);
+      bool wegrace = to_boolean (wg);
 
       if (!wegrace)
        for (int i=0; i < grace_slur_endings_.size(); i++)
@@ -72,7 +72,7 @@ void
 Rhythmic_column_engraver::acknowledge_element (Score_element_info i)
 {
   SCM wg = get_property ("weAreGraceContext",0);
-  bool wegrace = gh_boolean_p (wg) && gh_scm2bool (wg);
+  bool wegrace = to_boolean (wg);
   if ((wegrace !=
       (i.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED))
     && !dynamic_cast<Slur*> (i.elem_l_))
index 6d3be5981c996fcc980d5185b1cc793823e18abd..870c2803986e303801bf0bcddd236671a7816e5d 100644 (file)
@@ -265,7 +265,7 @@ Score_element::calculate_dependencies (int final, int busy,
 void
 Score_element::output_processing () 
 {
-  if (get_elt_property ("transparent") != SCM_UNDEFINED)
+  if (to_boolean  (get_elt_property ("transparent")))
     return;
 
   // we're being silly here. 
index 65317776bbc7e51782b05f665d18a531618e12ee..af4be4f176af0e0441c9084eb5fc3554ccf27be1 100644 (file)
@@ -76,7 +76,7 @@ Script_engraver::do_process_requests()
        stafy.set_direction (l->get_direction ());
 
       SCM axisprop = get_property ("scriptHorizontal",0);
-      bool xaxis = gh_boolean_p (axisprop) && gh_scm2bool (axisprop);
+      bool xaxis = to_boolean (axisprop);
       if (xaxis)
        stafy.set_axis (X_AXIS);
       else
index ae15cd1d65071241b4358b90ddfb020a684fd734..4bf349656d8354ddcec864ca74faea104fbefc6e 100644 (file)
@@ -59,7 +59,7 @@ Slur_engraver::do_removal_processing ()
     }
   slur_l_stack_.clear ();
   SCM wg = get_property ("weAreGraceContext",0);
-  bool wgb = gh_boolean_p (wg) && gh_scm2bool (wgb);
+  bool wgb = to_boolean (wg);
   if (!wgb)
     for (int i=0; i < requests_arr_.size(); i++)
       {
@@ -116,7 +116,7 @@ Slur_engraver::do_post_move_processing()
 {
   new_slur_req_l_arr_.clear();
   SCM m = get_property ("automaticMelismata",0);
-  if (gh_boolean_p (m) && gh_scm2bool (m))
+  if (to_boolean (m))
     {
       set_melisma (slur_l_stack_.size ());
     }
index f13ba1dd5324fbad11dee39242797cbee6192bd0..6f4d1c279ceb6c1027995acecd23201b3afbb5c5 100644 (file)
@@ -13,6 +13,7 @@
     * broken slur should have uniform trend
  */
 
+#include "directional-element-interface.hh"
 #include "group-interface.hh"
 #include "slur.hh"
 #include "lookup.hh"
@@ -86,36 +87,38 @@ Slur::encompass_offset (Note_column const* col) const
 {
   Offset o;
   Stem* stem_l = col->stem_l ();
+  Direction dir = directional_element (this).get ();
+  
   if (!stem_l)
     {
       warning (_ ("Slur over rest?"));
       o[X_AXIS] = col->hpos_f ();
-      o[Y_AXIS] = col->extent (Y_AXIS)[get_direction ()];
+      o[Y_AXIS] = col->extent (Y_AXIS)[dir];
       return o;  
     }
-  
+  Direction stem_dir = directional_element (stem_l).get ();
   o[X_AXIS] = stem_l->hpos_f ();
 
   /*
     Simply set x to middle of notehead
    */
 
-  o[X_AXIS] -= 0.5 * stem_l->get_direction () * col->extent (X_AXIS).length ();
+  o[X_AXIS] -= 0.5 * stem_dir * col->extent (X_AXIS).length ();
 
-  if ((stem_l->get_direction () == get_direction ())
+  if ((stem_dir == dir)
       && !stem_l->extent (Y_AXIS).empty_b ())
     {
-      o[Y_AXIS] = stem_l->extent (Y_AXIS)[get_direction ()];
+      o[Y_AXIS] = stem_l->extent (Y_AXIS)[dir];
     }
   else
     {
-      o[Y_AXIS] = col->extent (Y_AXIS)[get_direction ()];
+      o[Y_AXIS] = col->extent (Y_AXIS)[dir];
     }
 
   /*
    leave a gap: slur mustn't touch head/stem
    */
-  o[Y_AXIS] += get_direction () * paper_l ()->get_var ("slur_y_free");
+  o[Y_AXIS] += dir * paper_l ()->get_var ("slur_y_free");
   o[Y_AXIS] += calc_interstaff_dist (stem_l, this);
   return o;
 }
@@ -132,8 +135,8 @@ Slur::do_post_processing ()
     Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
 
 
-  if (!get_direction ())
-    set_direction (get_default_dir ());
+  if (!directional_element (this).get ())
+    directional_element (this).set (get_default_dir ());
 
   /* 
    Slur and tie placement [OSU]
@@ -146,8 +149,8 @@ Slur::do_post_processing ()
      y = length >= 5ss : y next interline - d * 0.25 ss
    */
 
-  Real interline_f = paper_l ()->get_var ("interline");
-  Real internote_f = interline_f / 2;
+  Real staff_space = paper_l ()->get_var ("interline");
+  Real half_staff_space = staff_space / 2;
 
   Real x_gap_f = paper_l ()->get_var ("slur_x_gap");
   Real y_gap_f = paper_l ()->get_var ("slur_y_gap");
@@ -157,6 +160,9 @@ Slur::do_post_processing ()
   note_column_drul[RIGHT] = encompass_arr.top ();
 
   bool fix_broken_b = false;
+
+  Direction my_dir = directional_element (this).get ();
+  
   Direction d = LEFT;
   do 
     {
@@ -173,23 +179,23 @@ Slur::do_post_processing ()
            no beam getting in the way
          */
          if ((stem_l->extent (Y_AXIS).empty_b ()
-              || !((stem_l->get_direction () == get_direction ()) && (get_direction () != d)))
-             && !((get_direction () == stem_l->get_direction ())
+              || !((stem_l->get_direction () == my_dir) && (my_dir != d)))
+             && !((my_dir == stem_l->get_direction ())
                   && stem_l->beam_l () && (stem_l->beam_count (-d) >= 1)))
            {
              dx_f_drul_[d] = spanned_drul_[d]->extent (X_AXIS).length () / 2;
              dx_f_drul_[d] -= d * x_gap_f;
 
-             if (stem_l->get_direction () != get_direction ())
+             if (stem_l->get_direction () != my_dir)
                {
-                 dy_f_drul_[d] = note_column_drul[d]->extent (Y_AXIS)[get_direction ()];
+                 dy_f_drul_[d] = note_column_drul[d]->extent (Y_AXIS)[my_dir];
                }
              else
                {
                  dy_f_drul_[d] = stem_l->chord_start_f ()
-                   + get_direction () * internote_f;
+                   + my_dir * half_staff_space;
                }
-             dy_f_drul_[d] += get_direction () * y_gap_f;
+             dy_f_drul_[d] += my_dir * y_gap_f;
            }
          /*
            side attached to (visible) stem
@@ -203,8 +209,8 @@ Slur::do_post_processing ()
               */
              if (stem_l->beam_l () && (stem_l->beam_count (-d) >= 1))
                {
-                 dy_f_drul_[d] = stem_l->extent (Y_AXIS)[get_direction ()];
-                 dy_f_drul_[d] += get_direction () * 2 * y_gap_f;
+                 dy_f_drul_[d] = stem_l->extent (Y_AXIS)[my_dir];
+                 dy_f_drul_[d] += my_dir * 2 * y_gap_f;
                }
              /*
                side attached to notehead, with stem getting in the way
@@ -214,8 +220,8 @@ Slur::do_post_processing ()
                  dx_f_drul_[d] -= d * x_gap_f;
                  
                  dy_f_drul_[d] = stem_l->chord_start_f ()
-                   + get_direction () * internote_f;
-                 dy_f_drul_[d] += get_direction () * y_gap_f;
+                   + my_dir * half_staff_space;
+                 dy_f_drul_[d] += my_dir * y_gap_f;
                }
            }
        }
@@ -294,7 +300,7 @@ Slur::do_post_processing ()
   Real slope_ratio_f = abs (dy_f / dx_f);
   if (slope_ratio_f > slope_damp_f)
     {
-      Direction d = (Direction)(- get_direction () * (sign (dy_f)));
+      Direction d = (Direction)(- my_dir * (sign (dy_f)));
       if (!d)
        d = LEFT;
       Real damp_f = (slope_ratio_f - slope_damp_f) * dx_f;
@@ -302,7 +308,7 @@ Slur::do_post_processing ()
        must never change sign of dy
        */
       damp_f = damp_f <? abs (dy_f);
-      dy_f_drul_[d] += get_direction () * damp_f;
+      dy_f_drul_[d] += my_dir * damp_f;
     }
 
   /*
@@ -324,7 +330,7 @@ Slur::do_post_processing ()
       Real height_ratio_f = abs (height_f / width_f);
       if (height_ratio_f > height_damp_f)
        {
-         Direction d = (Direction)(- get_direction () * (sign (dy_f)));
+         Direction d = (Direction)(- my_dir * (sign (dy_f)));
          if (!d)
            d = LEFT;
          /* take third step */
@@ -334,8 +340,8 @@ Slur::do_post_processing ()
          */
          if (abs (dy_f / dx_f ) < slope_damp_f)
            {
-             dy_f_drul_[-d] += get_direction () * damp_f;
-             dy_f_drul_[d] += get_direction () * damp_f;
+             dy_f_drul_[-d] += my_dir * damp_f;
+             dy_f_drul_[d] += my_dir * damp_f;
            }
          /*
            don't change slope too much, would have been catched by slope damping
@@ -343,7 +349,7 @@ Slur::do_post_processing ()
          else
            {
              damp_f = damp_f <? abs (dy_f/2);
-             dy_f_drul_[d] += get_direction () * damp_f;
+             dy_f_drul_[d] += my_dir * damp_f;
            }
        }
     }
@@ -362,8 +368,8 @@ Slur::do_post_processing ()
       Note_column * nc = note_column_drul[d];
       if (nc == spanned_drul_[d]
          && nc->stem_l ()
-         && nc->stem_l ()->get_direction () == get_direction ()
-         && abs (nc->stem_l ()->extent (Y_AXIS)[get_direction ()]
+         && nc->stem_l ()->get_direction () == my_dir
+         && abs (nc->stem_l ()->extent (Y_AXIS)[my_dir]
                  - dy_f_drul_[d] + (d == LEFT ? 0 : interstaff_f))
              <= snap_f)
        {
@@ -373,9 +379,9 @@ Slur::do_post_processing ()
          snapx_f_drul[d] = nc->stem_l ()->hpos_f ()
            - spanned_drul_[d]->relative_coordinate (0, X_AXIS);
 
-         snapy_f_drul[d] = nc->stem_l ()->extent (Y_AXIS)[get_direction ()]
+         snapy_f_drul[d] = nc->stem_l ()->extent (Y_AXIS)[my_dir]
            + interstaff_interval[d]
-           + get_direction () * 2 * y_gap_f;
+           + my_dir * 2 * y_gap_f;
          
          snapped_b_drul[d] = true;
        }
index e47791433241b28d949a77d7c6014577db4f5ed3..0f37c1cf0c8f289fb38928c3cd0a0e6bcd3486a5 100644 (file)
@@ -19,7 +19,7 @@ Staff_bar::get_bar_size () const
   else
     {
       Staff_symbol_referencer_interface si (this);
-      return (si.lines_i () -1) * si.staff_space ();
+      return (si.line_count () -1) * si.staff_space ();
     }
 }
 
index 3bb94567713d49c31e43369cad1445768e60d999..6c8787c29928be8a29c4fa43c8984673b38094f2 100644 (file)
@@ -54,21 +54,6 @@ Staff_symbol_engraver::do_creation_processing()
 void
 Staff_symbol_engraver::do_removal_processing()
 {
-  SCM l (get_property ("numberOfStaffLines", 0));
-  if (gh_number_p(l))
-    {
-      span_p_->no_lines_i_ = gh_scm2int (l);
-    }
-
-  SCM sz (get_property ("staffLineLeading", 0));
-  if (gh_number_p(sz))
-    {
-      span_p_->staff_space_ = gh_scm2double (sz);
-    }
-  else
-    {
-      span_p_->staff_space_ = paper_l ()->get_var ("interline");
-    }
   span_p_->set_bounds(RIGHT,get_staff_info().command_pcol_l ());
   typeset_element (span_p_);
   span_p_ =0;
@@ -81,7 +66,7 @@ Staff_symbol_engraver::acknowledge_element (Score_element_info s)
   s.elem_l_->add_dependency (span_p_); // UGH. UGH. UGH 
 
   SCM ss =s.elem_l_->remove_elt_property ("staff-support");
-  if (gh_boolean_p (ss) && gh_scm2bool (ss))
+  if (to_boolean (ss))
     {
       Side_position_interface si (s.elem_l_);
       if (si.has_interface_b ())
index 5b1f6bba8c8d8f5b62a939ed818126cc0f30b585..d7d639fcd95a7995f6ba082fee318e8dc7c42581 100644 (file)
@@ -35,10 +35,10 @@ Staff_symbol_referencer_interface::has_interface_b ()
 
 
 int
-Staff_symbol_referencer_interface::lines_i () const
+Staff_symbol_referencer_interface::line_count () const
 {
   Staff_symbol *st = staff_symbol_l ();
-  return st  ?  st->no_lines_i_ : 5;
+  return st  ?  st->line_count () : 0;
 }
 
 Staff_symbol*
@@ -53,7 +53,7 @@ Staff_symbol_referencer_interface::staff_space () const
 {
   Staff_symbol * st = staff_symbol_l ();
   if (st)
-    return st->staff_space_;
+    return st->staff_space ();
   else if (elt_l_->pscore_l_ && elt_l_->paper_l ())
     elt_l_->paper_l ()->get_var ("interline");
  
index 7ba3c9e235f6503aa9f12d0034afefde93e87dd7..75a3f5a2a54dc41387b302d5b6b713ad29d3d4bc 100644 (file)
 #include "item.hh"
 
 
-Staff_symbol::Staff_symbol ()
-{
-  no_lines_i_ = 5;
-  staff_space_ = 5.0 PT;
-}
-
-void
-Staff_symbol::do_print() const
-{
-#ifndef NPRINT
-  Spanner::do_print();
-  DEBUG_OUT << "lines: " << no_lines_i_;
-#endif
-}
-
 
 Molecule*
 Staff_symbol::do_brew_molecule_p() const
 {
   Score_element * common
     = spanned_drul_[LEFT]->common_refpoint (spanned_drul_[RIGHT], X_AXIS);
-
-#if 0
-  Interval r =  spanned_drul_[RIGHT]->extent (X_AXIS);
-  Interval l =  spanned_drul_[LEFT]->extent (X_AXIS);
   
-  Real left_shift =l.empty_b () ? 0.0: l[LEFT];
-  Real right_shift =r.empty_b () ? 0.0: r[RIGHT];  
-#endif
   Real width =
     // right_shift     - left_shift
     + spanned_drul_[RIGHT]->relative_coordinate (common , X_AXIS)
@@ -53,27 +31,34 @@ Staff_symbol::do_brew_molecule_p() const
   Molecule rule  = lookup_l ()->filledbox (Box (Interval (0,width),
                                                Interval (-t/2, t/2)));
 
-  Real height = (no_lines_i_-1) * staff_space_ /2;
+  int l = line_count ();
+  
+  Real height = (l-1) * staff_space () /2;
   Molecule * m = new Molecule;
-  for (int i=0; i < no_lines_i_; i++)
+  for (int i=0; i < l; i++)
     {
       Molecule a (rule);
-      a.translate_axis (height - i * staff_space_, Y_AXIS);
+      a.translate_axis (height - i * staff_space (), Y_AXIS);
       m->add_molecule (a);
     }
 
-  //  m->translate_axis (left_shift, X_AXIS);
   return m;
 }
 
-
 int
 Staff_symbol::steps_i() const
 {
-  return no_lines_i_*2;
+  return line_count () * 2;
 }
+
+int
+Staff_symbol::line_count () const
+{
+  return gh_scm2int (get_elt_property ("line-count"));
+}
+
 Real
-Staff_symbol::staff_space ()
+Staff_symbol::staff_space ()const
 {
-  return staff_space_;
+  return gh_scm2double (get_elt_property ("staff-space"));
 }
index 3fa1d0ee0a4afa9acb11ba72cec2e8b8af998400..c5e84f734df68bb797a908a11ac92662baf16f52 100644 (file)
@@ -70,7 +70,7 @@ Stem_engraver::acknowledge_element(Score_element_info i)
                {
                  abbrev_p_ = new Stem_tremolo;
                  announce_element (Score_element_info (abbrev_p_, abbrev_req_l_));
-                 abbrev_p_->abbrev_flags_i_ =intlog2 (t) - (duration_log>? 2);
+                 abbrev_p_->set_elt_property ("tremolo-flags", gh_int2scm (intlog2 (t) - (duration_log>? 2)));
                }
            }
 
index e244c568acf8eeca533b1e822bb62b371143c821..db15d09e4be192f6e2182147d9bc281ab612ee6d 100644 (file)
 #include "offset.hh"
 #include "dimension-cache.hh"
 #include "staff-symbol-referencer.hh"
-
+#include "directional-element-interface.hh"
 
 Stem_tremolo::Stem_tremolo ()
 {
   set_elt_property ("stem", SCM_EOL);
-  abbrev_flags_i_ = 1;
 }
 
-void
-Stem_tremolo::do_print () const
-{
-  DEBUG_OUT << "abbrev_flags_i_ " << abbrev_flags_i_;
-}
 
 Stem *
 Stem_tremolo::stem_l ()const
@@ -61,7 +55,7 @@ Stem_tremolo::do_brew_molecule_p () const
   Real interbeam_f = paper_l ()->interbeam_f (mult);
   Real w  = gh_scm2double (get_elt_property ("beam-width"));
   Real space = Staff_symbol_referencer_interface (st).staff_space ();
-  Real internote_f = space / 2;
+  Real half_staff_space = space / 2;
   Real beam_f = gh_scm2double (get_elt_property ("beam-thickness"));
 
   int beams_i = 0;
@@ -84,9 +78,15 @@ Stem_tremolo::do_brew_molecule_p () const
   Molecule a (lookup_l ()->beam (dydx, w, beam_f));
   a.translate (Offset (-w/2, w / 2 * dydx));
   
+  int abbrev_flags = 1;
+  {
+    SCM a = get_elt_property ("abbrev-flags");
+    if (gh_number_p (a))
+      abbrev_flags = gh_scm2int (a);
+  }
 
   Molecule *beams= new Molecule; 
-  for (int i = 0; i < abbrev_flags_i_; i++)
+  for (int i = 0; i < abbrev_flags; i++)
     {
       Molecule b (a);
       b.translate_axis (interbeam_f * i, Y_AXIS);
@@ -99,8 +99,8 @@ Stem_tremolo::do_brew_molecule_p () const
       if (st->beam_l ())
         {
          beams->translate (Offset(st->hpos_f () - hpos_f (),
-           st->stem_end_position () * internote_f - 
-           st->beam_l ()->get_direction () * beams_i * interbeam_f));
+           st->stem_end_position () * half_staff_space - 
+           directional_element (st->beam_l ()).get () * beams_i * interbeam_f));
        }
       else
        {  
index 56f7b3eae1bcd2267509af96d42efd29cf4ad8a1..989332320e8184fff491f9548187b0cc0dc95d4d 100644 (file)
@@ -82,7 +82,7 @@ Text_engraver::do_process_requests ()
       Side_position_interface stafy (text);
 
       SCM axisprop = get_property ("scriptHorizontal",0);
-      if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop))
+      if (to_boolean (axisprop))
        {
          stafy.set_axis (X_AXIS);
          //      text->set_parent (ss, Y_AXIS);
@@ -102,7 +102,7 @@ Text_engraver::do_process_requests ()
        text->set_elt_property ("style", ly_str02scm (r->style_str_.ch_C()));
       
       SCM empty = get_property ("textEmptyDimension", 0);
-      if (gh_boolean_p (empty) && gh_scm2bool (empty))
+      if (to_boolean (empty))
        {
          text->set_empty (X_AXIS);
        }
index 876ca6070fcac5541743bfda711b1dc602fa539c..0948237b0e152886cb2bc16c6ed77e7d9d7215c5 100644 (file)
@@ -82,10 +82,13 @@ Tie_engraver::process_acknowledged ()
     {
       now_heads_.sort (CHead_melodic_tuple::pitch_compare);
       stopped_heads_.sort(CHead_melodic_tuple::pitch_compare);
-      int i=0;
-      int j=0;
-      int tie_count=0;
-      while  ( i < now_heads_.size () && j < stopped_heads_.size ())
+
+      SCM head_list = SCM_EOL;
+      
+      int j = stopped_heads_.size ()-1;
+      int i = now_heads_.size ()-1;
+
+      while  (i >= 0 && j >=0)
        {
          int comp
            = Musical_pitch::compare (now_heads_[i].req_l_->pitch_ ,
@@ -93,31 +96,51 @@ Tie_engraver::process_acknowledged ()
 
          if (comp)
            {
-             (comp < 0) ? i ++ : j++;
+             (comp < 0) ? j -- : i--;
              continue;
            }
          else
            {
-             tie_count ++;
-
-             /* don't go around recreating ties that were already
-                made. Not infallible. Due to reordering in sort (),
-                we will make the wrong ties when noteheads are
-                added.  */
-             if (tie_count > tie_p_arr_.size ())
-               {
-                 Tie * p = new Tie;
-                 p->set_head (LEFT, stopped_heads_[j].head_l_);
-                 p->set_head (RIGHT, now_heads_[i].head_l_);
-                 tie_p_arr_.push (p);
-                 announce_element (Score_element_info (p, req_l_));
-               }
-             i++;
-             j++;
-
+             head_list  = gh_cons (gh_cons (stopped_heads_[j].head_l_->self_scm_,
+                                            now_heads_[i].head_l_->self_scm_),
+                                   head_list);
+
+             past_notes_pq_. insert (now_heads_[i]);
+             now_heads_.del (i);
+             stopped_heads_.del (j);
+             i--;
+             j--;
            }
        }
 
+
+      SCM sparse = get_property ("sparseTies", 0);
+      if (to_boolean (sparse))
+       {
+         int i = scm_ilength (head_list);
+
+         if (!i)
+           return;
+         
+         SCM pair = gh_list_ref (head_list, gh_int2scm (i/2));
+         
+         Tie * p = new Tie;
+         p->set_head (LEFT, dynamic_cast<Item*> (unsmob_element (gh_car (pair))));
+         p->set_head (RIGHT, dynamic_cast<Item*> (unsmob_element (gh_cdr (pair))));
+         
+         tie_p_arr_.push (p);
+         announce_element (Score_element_info (p, req_l_));
+       }
+      else for (SCM s = head_list; gh_pair_p (s); s = gh_cdr (s))
+       {
+         Tie * p = new Tie;
+         p->set_head (LEFT, dynamic_cast<Item*> (unsmob_element (gh_caar (s))));
+         p->set_head (RIGHT, dynamic_cast<Item*> (unsmob_element (gh_cdar (s))));
+         
+         tie_p_arr_.push (p);
+         announce_element (Score_element_info (p, req_l_));
+       }
+
       if (!tie_p_arr_.size ())
        {
          req_l_->warning (_ ("No ties were created!"));
@@ -147,7 +170,7 @@ void
 Tie_engraver::do_post_move_processing ()
 {
   SCM m = get_property ("automaticMelismata",0);
-  if (gh_boolean_p (m) && gh_scm2bool (m))
+  if (to_boolean (m))
     {
       set_melisma (false);
     }
index c891d0bb685a14cfede797791b592203173c6ddc..15597313e3ff72388af43a42389520222cd98bbb 100644 (file)
 #include "paper-column.hh"
 #include "debug.hh"
 #include "staff-symbol-referencer.hh"
+#include "directional-element-interface.hh"
 
 void
-Tie::set_head (Direction d, Note_head * head_l)
+Tie::set_head (Direction d, Item * head_l)
 {
   assert (!head (d));
   index_set_cell (get_elt_property ("heads"), d, head_l->self_scm_);
@@ -89,8 +90,8 @@ Tie::do_post_processing()
       return;
     }
 
-  Real interline_f = paper_l ()->get_var ("interline");
-  Real internote_f = interline_f / 2;
+  Real staff_space = paper_l ()->get_var ("interline");
+  Real half_staff_space = staff_space / 2;
   Real x_gap_f = paper_l ()->get_var ("tie_x_gap");
   Real y_gap_f = paper_l ()->get_var ("tie_y_gap");
 
@@ -175,22 +176,23 @@ Tie::do_post_processing()
     ? Staff_symbol_referencer_interface (head (LEFT)).position_f ()
     : Staff_symbol_referencer_interface (head (RIGHT)).position_f () ;  
 
-  Real y_f = internote_f * ypos; 
+  Real y_f = half_staff_space * ypos; 
   int ypos_i = int (ypos);
  
   Real dx_f = extent (X_AXIS).length () + dx_f_drul_[RIGHT] - dx_f_drul_[LEFT];
+  Direction dir = directional_element (this).get();
   if (dx_f < paper_l ()->get_var ("tie_staffspace_length"))
     {
       if (abs (ypos_i) % 2)
-       y_f += get_direction () * internote_f;
-      y_f += get_direction () * y_gap_f;
+       y_f += dir * half_staff_space;
+      y_f += dir * y_gap_f;
     }
   else
     {
       if (! (abs (ypos_i) % 2))
-       y_f += get_direction () * internote_f;
-      y_f += get_direction () * internote_f;
-      y_f -= get_direction () * y_gap_f;
+       y_f += dir * half_staff_space;
+      y_f += dir * half_staff_space;
+      y_f -= dir * y_gap_f;
     }
   
   dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = y_f;
index ac2373da6a0c39d8a0d23cb41bae1185e15d022b..e576f036c9c5fbe742a0e167dbf76e34bd8e270d 100644 (file)
@@ -49,11 +49,11 @@ Timing_engraver::which_bar ()
        return "|";
 
       SCM nonauto = get_property ("barNonAuto", 0);
-      if (!gh_boolean_p (nonauto) && gh_scm2bool (nonauto))
+      if (!to_boolean (nonauto))
        {
          SCM always = get_property ("barAlways", 0);
          if (!measure_position ()
-             || (gh_boolean_p (always) && gh_scm2bool (always)))
+             || (to_boolean (always)))
            {
              SCM def=get_property ("defaultBarType" ,0);
              return (gh_string_p (def))? ly_scm2string (def) : "";
index d1e68dcb336bffee8e69d811cdd94eca5691bd56..d54a1903f9b919f6a377e4147a15df09df1f73d8 100644 (file)
@@ -97,7 +97,7 @@ Timing_translator::do_pre_move_processing()
 
   // urg: multi bar rests: should always process whole of first bar?
   SCM tim = get_property ("timing", 0);
-  bool timb = gh_boolean_p (tim) && gh_scm2bool (tim);
+  bool timb = to_boolean (tim);
   if (timb && allbars)
     {
       Moment barleft = (measure_length () - measure_position ());
@@ -227,7 +227,7 @@ Timing_translator::do_post_move_processing()
     }
 
   SCM cad = get_property ("timing", 0);
-  bool c= gh_boolean_p (cad ) && gh_scm2bool (cad);
+  bool c= to_boolean (cad );
 
   Moment len = measure_length ();
   while (c && *measposp >= len)
index e1e0f54c8542b6e2ed70663bed33152470b5b791..b8f85eb870dfef0668728e58597190d19fbea66b 100644 (file)
@@ -62,7 +62,7 @@ Tuplet_engraver::acknowledge_element (Score_element_info i)
 {
   bool grace= (i.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED);
   SCM wg = get_property ("weAreGraceContext",0);
-  bool wgb = gh_boolean_p (wg) && gh_scm2bool (wg);
+  bool wgb = to_boolean (wg);
   if (grace != wgb)
     return;
   
index ac0973f9e5954f210780934254de57346042b2fd..2aed1b957084f055be189de04d3108f8192e9727 100644 (file)
@@ -53,11 +53,11 @@ Volta_spanner::do_brew_molecule_p () const
   if (bar_arr.top ()->type_str_.length_i () > 1)
     no_vertical_end = false;
 
-  Real interline_f = paper_l ()->get_var ("interline");
-  Real internote_f = interline_f/2;
+  Real staff_space = paper_l ()->get_var ("interline");
+  Real half_staff_space = staff_space/2;
   Real t = paper_l ()->get_var ("volta_thick");
 
-  Real dx = internote_f;
+  Real dx = half_staff_space;
   Real w = spanner_length() - dx - get_broken_left_end_align ();
   Real h = paper_l()->get_var ("volta_spanner_height");
   Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end));
@@ -75,7 +75,7 @@ Volta_spanner::do_brew_molecule_p () const
   Molecule two (lookup_l ()->text ("number", "2", paper_l ()));
   Real gap = two.dim_.x ().length () / 2;
   Offset off (num.dim_.x ().length () + gap, 
-             h / internote_f - gap);
+             h / half_staff_space - gap);
   num.translate (off);
   mol_p->add_molecule (volta);
   mol_p->add_molecule (num);
index bbeba9384157dfdab38514ce3f44e95130e01dae..dd2e7f1fcc00e995f93c73a8d114593a7cbe50ea 100644 (file)
@@ -20,22 +20,6 @@ beam_thickness = 0.52 * (\interline - \stafflinethickness);
 interbeam = (2.0 * \interline + \stafflinethickness - \beam_thickness) / 2.0;
 interbeam4 = (3.0 * \interline - \beam_thickness) / 3.0;
 
-
-
-% stems and beams
-%
-% poor man's array size
-stem_max = 3.0;
-
-%{ Specify length of stems for notes in the staff
-that don't have beams. 
-   Measured in staff positions.
-%}
-stem_length0 = 7.;
-stem_length1 = 5.;
-stem_length2 = 4.;
-stem_length3 = 3.;
-
 %{
 The space taken by a note is determined by the formula 
 
@@ -51,74 +35,12 @@ arithmetic_basicspace = 2.;
 arithmetic_multiplier = 0.9 * \quartwidth ;
 
 
-
-% urg.
-% if only these ugly arrays were scm,
-% we could override them in the Grace context
-grace_factor = 0.8;
-grace_stem_length0 = \stem_length0 * \grace_factor;
-grace_stem_length1 = \stem_length1 * \grace_factor;
-grace_stem_length2 = \stem_length2 * \grace_factor;
-grace_stem_length3 = \stem_length3 * \grace_factor;
-
-% only used for beams
-minimum_stem_length0 = 0.0 ; % not used
-minimum_stem_length1 = 3.;
-minimum_stem_length2 = 2.5;
-minimum_stem_length3 = 2.0;
-
-grace_minimum_stem_length0 = 0.0 ; % not used
-grace_minimum_stem_length1 = \minimum_stem_length1 * \grace_factor;
-grace_minimum_stem_length2 = \minimum_stem_length2 * \grace_factor;
-grace_minimum_stem_length3 = \minimum_stem_length3 * \grace_factor;
-
-%{
-  stems in unnatural (forced) direction should be shortened,
-  according to [Roush & Gourlay].  Their suggestion to knock off
-  a whole staffspace seems a bit drastical: we'll do half.
-%}
-
-forced_stem_shorten0 = 1.0;
-forced_stem_shorten1 = \forced_stem_shorten0;
-forced_stem_shorten2 = \forced_stem_shorten1;
-forced_stem_shorten3 = \forced_stem_shorten2;
-
-% don't shorten grace stems, always up
-grace_forced_stem_shorten0 = 0.;
-grace_forced_stem_shorten1 = \grace_forced_stem_shorten0;
-grace_forced_stem_shorten2 = \grace_forced_stem_shorten1;
-grace_forced_stem_shorten3 = \grace_forced_stem_shorten2;
-
-% there are several ways to calculate the direction of a beam
-% 
-% * MAJORITY : number count of up or down notes
-% * MEAN     : mean centre distance of all notes
-% * MEDIAN   : mean centre distance weighted per note
-%
-
-#'beam-dir-algorithm = #'majority      %urg.
 #'Stem_tremolo::beam-width = 1.5 * \quartwidth ; 
 
-% The beams should be prevented to conflict with the stafflines, 
-% especially at small slopes.
-#'slope-quantisation = #'normal
-
-
-
 #'Clef_item::visibility-lambda = #postbreak-only-visibility
 #'Key_item::visibility-lambda = #postbreak-only-visibility
 #'Breathing_sign::visibility-lambda = #non-postbreak-visibility
 
-
-%{
-dit(code(beam_dir_algorithm)) Specify algorithm for determining
-whether beams go up or down.  It is real valued.  If set to 2.0 then
-majority selection is used.  If set to 3.0, then mean selection is
-used based on the mean center distance.  If set to 4.0 then median
-selection is used, based on the median center distance.
-%}
-
-
 % catch suspect beam slopes, set slope to zero if
 % outer stem is lengthened more than
 beam_lengthened = 0.2 * \interline;
@@ -313,3 +235,6 @@ Wordwrap =0.0;
 % 
 #'Local_key_item::left-padding = #'0.2
 #'Local_key_item::right-padding = #'0.4
+
+#'Staff_symbol::staff-space = \interline ;
+#'Staff_symbol::line-count = #5
index c6104e21d7c2e3c5f6cb1c399ebb0884934a47b4..decc1ad6df249fe2e34f8707065e4ff4b9d3081b 100644 (file)
@@ -5,7 +5,6 @@
         (list 'beamSlopeDamping number? 'damping)
         (list 'autoKneeGap number? 'auto-knee-gap)
         (list 'autoInterstaffKneeGap number? 'auto-interstaff-knee-gap)
-        (list 'beamQuantisation symbol? 'slope-quantisation)
         (list 'beamDirAlgorithm symbol? 'beam-dir-algorithm)
         (list 'beamSlope number? 'height)
         (list 'beamVerticalPosition number? 'y-position)
                     (list 'barSize number? 'bar-size))
        )
   )    
+
+(define staff-symbol-properties
+  (cons "Staff_symbol" (list
+                       (list 'numberOfStaffLines number? 'line-count)
+                       (list 'staffLineLeading number? 'staff-space)
+                       )
+       )
+  )
+
 (define generic-breathing-sign-properties
   (cons "Breathing_sign"
        (list