lilypond-1.3.30
authorfred <fred>
Tue, 26 Mar 2002 22:46:32 +0000 (22:46 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:46:32 +0000 (22:46 +0000)
55 files changed:
Documentation/user/properties.itely
input/test/mark.ly
lily/align-element.cc
lily/align-note-column-engraver.cc
lily/auto-beam-engraver.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/bar-script-engraver.cc
lily/base-span-bar-engraver.cc
lily/beam-engraver.cc
lily/beam.cc
lily/break-align-engraver.cc
lily/break-align-item.cc
lily/chord-name-engraver.cc
lily/clef-engraver.cc
lily/command-request.cc
lily/dynamic-engraver.cc
lily/grace-align-item.cc
lily/grace-position-engraver.cc
lily/grace-position-performer.cc
lily/include/align-element.hh
lily/include/command-request.hh
lily/include/mark-engraver.hh
lily/include/translator-group.hh
lily/include/translator.hh
lily/key-engraver.cc
lily/local-key-engraver.cc
lily/mark-engraver.cc
lily/melisma-engraver.cc
lily/multi-measure-rest-engraver.cc
lily/note-heads-engraver.cc
lily/note-performer.cc
lily/paper-column.cc
lily/parser.yy
lily/protected-scm.cc
lily/repeat-engraver.cc
lily/rhythmic-column-engraver.cc
lily/rod.cc
lily/script-engraver.cc
lily/side-position-interface.cc
lily/slur-engraver.cc
lily/staff-margin-engraver.cc
lily/staff-performer.cc
lily/staff-symbol-engraver.cc
lily/stem-engraver.cc
lily/text-engraver.cc
lily/tie-engraver.cc
lily/timing-engraver.cc
lily/timing-translator.cc
lily/translator-group.cc
lily/translator.cc
lily/tuplet-engraver.cc
lily/vertical-align-engraver.cc
ly/engraver.ly
scm/generic-property.scm

index cfa19c28ff84a602f3c673e2bd8b619c02729890..ebf2c901b4a805b1aae9fe63af3d9f62e47be3a9 100644 (file)
@@ -556,12 +556,6 @@ no clef is printed upon creation.
 @cindex properties!GrandStaff
 
 @table @samp 
-  @item @code{alignmentReference}@indexcode{alignmentReference}
-@propertytype{direction}
-    Set to @code{\center} for vertical alignment reference point to be
-    in the center of the vertical group.  Set to @code{\up} to put the
-    reference point at the top of the group.
-
   @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign}  @propertytype{number}
     Set the maximum vertical distance between staffs.
 
index 6b82ae50d4115b0c0ec239e13e5aa31c9ae3d6c8..8d65150c3792d72c580d6cf7245170872c3e4edc 100644 (file)
@@ -2,29 +2,20 @@
 
 global = \notes {
   s1 | \mark "A";
-  s1*2 | \mark "'12";
+  s1 | \mark ; 
+  s1 | \mark "12";
+  s1
 }
 
-one = \notes\relative c{
-  c'' c c c
-  c c c c
-  c c c c
+one = \notes \relative c {
+  c''1 c c c
 }
 
-two = \notes\relative c{
-  b' b b b
-  b b b b
-  b b b b
-}
 
 \score{
-       < \global \one \two >
+\context Staff < \global \one >
        \paper {
                \translator { \OrchestralPartStaffContext 
-                       markScriptPadding = "4.0";
-                       markHangOn  = "Bar";
-                       markHangDepth = "1";
-%                      markDirection = \down;
                }
        }
 }
index db954498bf1314d76ef8dd049790f6907d25bdc1..2f5c617ac64fea029aea2ec9438de2ab31824711 100644 (file)
@@ -30,6 +30,12 @@ Align_element::do_pre_processing ()
 void
 Align_element::do_side_processing ()
 {
+  SCM d = get_elt_property ("stacking-dir");
+  Direction stacking_dir = gh_number_p(d) ? to_dir (d) : CENTER;
+  if (!stacking_dir)
+    stacking_dir = DOWN;
+
+  
   Array<Interval> dims;
 
   Link_array<Score_element> elems;
@@ -66,15 +72,11 @@ Align_element::do_side_processing ()
     }
 
   Real where_f=0;
-  Real center_f = 0.0;
-  SCM scenter = get_elt_property ("center-element");
-  Score_element *center_elt = unsmob_element (scenter);
-  
   for (int i=0 ;  i < elems.size(); i++) 
     {
-      Real dy = - stacking_dir_ * dims[i][-stacking_dir_];
+      Real dy = - stacking_dir * dims[i][-stacking_dir];
       if (i)
-       dy += stacking_dir_ * dims[i-1][stacking_dir_];
+       dy += stacking_dir * dims[i-1][stacking_dir];
 
       if (i)
        {
@@ -82,31 +84,15 @@ Align_element::do_side_processing ()
            <? threshold_interval_[BIGGER];
        }
 
-      if (!i && align_dir_ == LEFT)
-       center_f = where_f;
-      else if (align_dir_ == CENTER && elems[i] == center_elt)
-       center_f = where_f;
 
-      where_f += stacking_dir_ * dy;
+      where_f += stacking_dir * dy;
       elems[i]->translate_axis (where_f, axis ());
     }
-
-  if (dims.size ())
-    where_f += dims.top ()[stacking_dir_];
-  if (align_dir_ == RIGHT)
-    center_f = where_f;
-  else if (align_dir_ == CENTER && !center_elt)
-    center_f = where_f / 2;
-    
-  if (center_f)
-    translate_axis ( - center_f, axis ());
 }
 
 Align_element::Align_element()
 {
   threshold_interval_ = Interval (0, Interval::infinity ());
-  stacking_dir_ = DOWN;
-  align_dir_ = CENTER;
 }
 
 int
index f1ce54bfc80b112f30cc632da35197880223eda0..9fb7d41b99e78fdd7d6e4048c3397e080d4e59cc 100644 (file)
@@ -54,10 +54,12 @@ Align_note_column_engraver::do_creation_processing ()
 void
 Align_note_column_engraver::do_removal_processing ()
 {
-  SCM al = get_property ("graceAlignPosition", 0);
+  SCM al = get_property ("graceAlignPosition");
   if (isdir_b (al))
     {
-      directional_element (align_item_p_).set (to_dir (al));
+      Direction d = to_dir (al);
+      directional_element (align_item_p_).set (d);
+      align_item_p_->set_elt_property ("align-dir", to_dir (-d));
     }
   
   typeset_element (align_item_p_);
@@ -89,7 +91,7 @@ Align_note_column_engraver::process_acknowledged ()
         B. it has no pscore_l_ field.
 
       */
-      SCM grsp = get_property ("graceAccidentalSpace", 0);
+      SCM grsp = get_property ("graceAccidentalSpace");
       if (gh_number_p(grsp))
        {
          /*
index 74761145cd158cfb594690d364364be549fdae25..95052f5e1dc5577f91c10d613c087c12f0191f4a 100644 (file)
@@ -105,7 +105,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   /*
     first guess: end beam at end of beat
   */
-  SCM one (get_property ("beatLength", 0));
+  SCM one (get_property ("beatLength"));
 
   Moment end_mom;
   if (SMOB_IS_TYPE_B(Moment, one))
@@ -114,11 +114,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   /*
     second guess: property generic time exception
   */
-  SCM begin = get_property (time_str + "beamAutoBegin", 0);
+  SCM begin = get_property (time_str + "beamAutoBegin");
   if (SMOB_IS_TYPE_B(Moment, begin))
     begin_mom = * SMOB_TO_TYPE(Moment, begin);
 
-  SCM end = get_property (time_str + "beamAutoEnd", 0);
+  SCM end = get_property (time_str + "beamAutoEnd");
   if (SMOB_IS_TYPE_B (Moment, end))
     end_mom = * SMOB_TO_TYPE(Moment,end);
 
@@ -127,11 +127,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   */
   if (type_str.length_i ())
     {
-      SCM end_mult = get_property (time_str + "beamAutoEnd" + type_str, 0);
+      SCM end_mult = get_property ( time_str + "beamAutoEnd" + type_str);
       if (SMOB_IS_TYPE_B (Moment, end_mult))
        end_mom = * SMOB_TO_TYPE (Moment,end_mult);
 
-      SCM begin_mult = get_property (time_str + "beamAutoBegin" + type_str, 0);
+      SCM begin_mult = get_property (time_str + "beamAutoBegin" + type_str);
       if (SMOB_IS_TYPE_B (Moment, begin_mult))
        begin_mom = * SMOB_TO_TYPE (Moment,begin_mult);
     }
@@ -139,13 +139,13 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   /*
     fourth guess [user override]: property plain generic
   */
-  begin = get_property ("beamAutoBegin", 0);
+  begin = get_property ("beamAutoBegin");
   if (SMOB_IS_TYPE_B(Moment, begin))
     begin_mom = * SMOB_TO_TYPE(Moment, begin);
 
 
   
-  end = get_property ("beamAutoEnd", 0);
+  end = get_property ("beamAutoEnd");
   if (SMOB_IS_TYPE_B (Moment, end))
     end_mom = * SMOB_TO_TYPE (Moment,end);
 
@@ -154,11 +154,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   */
   if (type_str.length_i ())
     {
-      SCM end_mult = get_property (String ("beamAutoEnd") + type_str, 0);
+      SCM end_mult = get_property (String ("beamAutoEnd") + type_str);
       if (SMOB_IS_TYPE_B (Moment, end_mult))
        end_mom = * SMOB_TO_TYPE (Moment,end_mult);
 
-      SCM begin_mult = get_property (String ("beamAutoBegin") + type_str, 0);
+      SCM begin_mult = get_property (String ("beamAutoBegin") + type_str);
       if (SMOB_IS_TYPE_B (Moment, begin_mult))
        begin_mom = * SMOB_TO_TYPE (Moment,begin_mult);
     }
@@ -175,7 +175,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   /*
     Allow already started autobeam to end
    */
-  SCM on = get_property ("noAutoBeaming", 0);
+  SCM on = get_property ("noAutoBeaming");
   if (to_boolean (on))
     return;
 
@@ -289,7 +289,7 @@ bool
 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);
+  SCM wg =get_property ("weAreGraceContext");
   return (to_boolean (wg)) == gr;
 }
 
index 45636011c048182d9a6a30caeb9e3c49f678c9be..a9e1da79575272fc76aca5471b5bd8738c5f5864 100644 (file)
@@ -35,7 +35,7 @@ Bar_engraver::create_bar ()
       bar_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
 
       // urg: "" != empty...
-      SCM default_type = get_property ("defaultBarType", 0);
+      SCM default_type = get_property ("defaultBarType");
       if (gh_string_p (default_type))
        {
          bar_p_->set_elt_property ("glyph", default_type); // gu.h
@@ -45,7 +45,7 @@ Bar_engraver::create_bar ()
       /*
        urg.  Why did I implement this? And did I implement this so
        clumsily?  */
-      SCM prop = get_property ("barAtLineStart", 0);
+      SCM prop = get_property ("barAtLineStart");
       if (to_boolean (prop))
        {
          bar_p_->set_elt_property ("at-line-start", SCM_BOOL_T);
@@ -65,7 +65,7 @@ Bar_engraver::request_bar (String requested_type)
 {
   if (!now_mom ())
     {
-      SCM prop = get_property ("barAtLineStart", 0);
+      SCM prop = get_property ("barAtLineStart");
       if (!to_boolean (prop))
        return;
     }
index b5f20c5235acd818c17ca365cfa13fe2608cdb27..1715fde5ded9c9eb23640871695f339173dc95d2 100644 (file)
@@ -28,7 +28,7 @@ Bar_number_engraver::do_process_requests ()
   Timing_translator *time = dynamic_cast<Timing_translator*>(tr);
 
   // todo include (&&!time->cadenza_b_ )
-  SCM bn = get_property("currentBarNumber",0);
+  SCM bn = get_property("currentBarNumber");
 
   if (gh_number_p (bn) &&
       !time->measure_position () && now_mom () > Moment (0))
index 689ecea2bcff4166f9b1cadc40d61915ce8da4e3..c41d9d12050f80cc2531cb6cdc03b7e72b4de681 100644 (file)
@@ -30,7 +30,7 @@ void
 Bar_script_engraver::do_creation_processing ()
 {
   String t = type_  + "VisibilityFunction";
-  SCM proc = get_property (t, 0);
+  SCM proc = get_property (t);
 
   if (gh_procedure_p (proc))
       visibility_lambda_ = proc;
@@ -128,14 +128,14 @@ Bar_script_engraver::create_items (Request *rq)
   Side_position_interface staffside(text_p_);
   staffside.set_axis (axis_);
 
-  SCM prop = get_property (type_ + "Direction", 0);
+  SCM prop = get_property (type_ + "Direction");
   if (!isdir_b (prop))
     {
       prop = gh_int2scm (UP);
     }
   text_p_->set_elt_property ("direction", prop);
 
-  SCM padding = get_property (type_ + "ScriptPadding", 0);
+  SCM padding = get_property (type_ + "ScriptPadding");
   if (gh_number_p(padding))
     {
       text_p_->set_elt_property ("padding", padding);
index 0c7177017f1cf6211c4f2c1b8fd9a6ed616b2d91..d233d514ca08008f7f69d7b5d44986abb9c8be8e 100644 (file)
@@ -44,7 +44,7 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
 
        /*
 
-         use a property?  get_property ("singleStaffBracket", 0) ?
+         use a property?  get_property ("singleStaffBracket"); ?
 
          --hwn
         */
index 63037e1a7fe5626a101dceb6669364d93fc7e512..15606f34b841b639914b234c4d88040d959f5b20 100644 (file)
@@ -158,7 +158,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);
+      SCM wg =get_property ("weAreGraceContext");
       bool wgb= to_boolean (wg);
 
       if (wgb!= stem_grace)
index d96e15a637bcd0921b38793e176e652250dada3a..e104c10ec89618ba0d4fedb62917b7cedf3c1344 100644 (file)
@@ -599,7 +599,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const
 
 
   Real interbeam_f = paper_l ()->interbeam_f (multiplicity);
-  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));;
+  Real thick = gh_scm2double (get_elt_property ("beam-thickness"));
 
   Real bdy = interbeam_f;
   Real stemdx = staffline_f;
index 44d94270a6028544137528c2e1774f5fe6ca33e6..508f7d3c38b56e31f0e165584cc0f7dcaedcd0b4 100644 (file)
@@ -40,7 +40,7 @@ Break_align_engraver::add_column (SCM smob)
 void
 Break_align_engraver::do_pre_move_processing ()
 {
-  SCM order = get_property ("breakAlignOrder", 0);
+  SCM order = get_property ("breakAlignOrder");
   for (; gh_pair_p (order); order = gh_cdr (order))
     {
       SCM p = scm_assoc ( gh_car (order), column_alist_);
index 376a71dd25498005e01b69a1d8b8bd5af06759d8..84fa63071d832348032105f1099edf736c4194f4 100644 (file)
@@ -7,6 +7,7 @@
 */
 #include <math.h>
 
+#include "side-position-interface.hh"
 #include "warn.hh"
 #include "dimension-cache.hh"
 #include "lily-guile.hh"
 void
 Break_align_item::do_pre_processing()
 {
-  if (break_status_dir() == LEFT)
-    align_dir_ = LEFT;
-  else
-    align_dir_ = RIGHT;
-  
-  flip (&align_dir_);
-
+  Direction ad = (break_status_dir() == LEFT) ? RIGHT : LEFT;
   Real interline= paper_l ()->get_var ("interline");   
-  
+
+  set_elt_property ("self-alignment-X", gh_int2scm (ad));
+
+
   Link_array<Score_element> elems;
   Link_array<Score_element> all_elems (elem_l_arr ());
   
@@ -154,6 +152,8 @@ Break_align_item::do_pre_processing()
 
 Break_align_item::Break_align_item ()
 {
-  stacking_dir_ = RIGHT;
+  set_elt_property ("stacking-dir" , gh_int2scm (RIGHT));
   set_axis (X_AXIS);
+
+  dim_cache_[X_AXIS]->off_callbacks_.push (Side_position_interface::aligned_on_self);
 }
index 22377b7d63924d2a55855a769fa2e799ad10d335..cf2891b02c3c24c25347c6c9bb9505b9ef701380 100644 (file)
@@ -69,7 +69,7 @@ Chord_name_engraver::do_process_requests ()
     return;
 
   bool find_inversion_b = false;
-  SCM chord_inversion = get_property ("chordInversion", 0);
+  SCM chord_inversion = get_property ("chordInversion");
   if (gh_boolean_p (chord_inversion))
     find_inversion_b = gh_scm2bool (chord_inversion);
 
index e0c167b87f2fbd1a20c69d616f5622717294b32d..162cc06978b3e6bbc72917d050ea9d6d89e4c086 100644 (file)
@@ -73,8 +73,8 @@ Clef_engraver::set_type (String s)
   else
     octave_dir_ = CENTER;
 
-  SCM c = get_property ("supportedClefTypes",0);
-  SCM p = get_property ("clefPitches", 0);
+  SCM c = get_property ("supportedClefTypes");
+  SCM p = get_property ("clefPitches");
   
   if (gh_list_p (c))
     {
@@ -132,7 +132,7 @@ Clef_engraver::acknowledge_element (Score_element_info info)
 void
 Clef_engraver::do_creation_processing()
 {
-  SCM def = get_property ("defaultClef", 0);
+  SCM def = get_property ("defaultClef");
   if (gh_string_p (def))
     {
       set_type (ly_scm2string (def));
index e73c253d8914045aa3bd400ee92128e2444c412b..58f4d434d03c28bfffe80a78f364c063a8c1a1a4 100644 (file)
@@ -123,17 +123,12 @@ Break_req::Break_req ()
 }
 
 
-void
-Mark_req::do_print () const
-{
-  DEBUG_OUT << str_;
-}
 
 bool
 Mark_req::do_equal_b (Request const * r) const
 {
   Mark_req const * other = dynamic_cast<Mark_req const*> (r);
-  return other && other->str_ == str_;
+  return other && scm_equal_p (other->mark_label_,  mark_label_);
 }
 
 void
index 7f519db38b220b235587685b039b640771a16ee7..977053e621b825b3f3a05393e9feef630518ee4e 100644 (file)
@@ -139,16 +139,16 @@ Dynamic_engraver::do_process_requests()
          /*
            UGH UGH 
           */
-         SCM prop = get_property ("dynamicDirection", 0);
+         SCM prop = get_property ("dynamicDirection");
          if (!isdir_b (prop))
            {
-             prop = get_property ("verticalDirection", 0);
+             prop = get_property ("verticalDirection");
            }
 
          if (isdir_b (prop) && to_dir (prop))
            text_p_->set_elt_property ("direction", prop);
 
-         prop = get_property ("dynamicPadding", 0);
+         prop = get_property ("dynamicPadding");
          if (gh_number_p(prop))
            {
              text_p_->set_elt_property ("padding", prop);
index 0256679458f11b067002c7d8435ccccf66134253..3d3df3ca0f17835da6b05043f6e2c1e4f48d2f12 100644 (file)
@@ -14,7 +14,7 @@
 
 Grace_align_item::Grace_align_item ()
 {
-  stacking_dir_ = RIGHT;
+  set_elt_property ("stacking-dir", gh_int2scm (RIGHT));
   set_axis (X_AXIS);
 }
   
@@ -29,7 +29,7 @@ Grace_align_item::do_pre_processing ()
 
   
   Axis_align_item::do_pre_processing ();
-  translate_axis (-0.5* nhw, X_AXIS); // ugh.
+  //  translate_axis (-0.5* nhw, X_AXIS); // ugh.
 }
 
 
index e1e49f466af774207424c376240e5aa3bbf76c29..5024b8c7b8470cbee58a3d70f16e84d28e989f8a 100644 (file)
@@ -89,10 +89,6 @@ Grace_position_engraver::do_pre_move_processing ()
        return;
 
       warning (_("Unattached grace notes.  Attaching to last musical column."));
-      /*      if (ae)
-       ae->remove_element (align_l_);
-       else if (elt)*/
-
       
       align_l_->set_parent (0, X_AXIS);
       last_musical_col_l_->add_element (align_l_);
index 58bdd73d6f9bb2f39a02d5843a52fa62433faa05..d932f3900f6af537e80a3a2823e5a062070c0453 100644 (file)
@@ -61,7 +61,7 @@ Grace_position_performer::process_acknowledged ()
            shortest_mom = shortest_mom <? notes_[i]->length_mom_;
          
          Rational grace_fraction_rat (1, 2);
-         SCM prop = get_property ("graceFraction", 0);
+         SCM prop = get_property ("graceFraction");
          if (SMOB_IS_TYPE_B(Moment, prop))
            grace_fraction_rat = *SMOB_TO_TYPE (Moment,prop);
 
index 1ba8ea1289f8ba262338b031acd0a9b06b35b3c0..c6e230df5d058e5bc75fa46bdf3c18f44e527ed5 100644 (file)
   TODO: implement padding.
 
   document usage of this.
- */
-class Align_element : public virtual Axis_group_element {
-public:
-  Interval threshold_interval_ ;
 
-  /**
-     Should high priorities be first or last?
-   */
-    
-  Direction stacking_dir_;
 
-  /**
-     Which side to align?  -1: left side, 0: centered (around
+
+  *******
+  
+  element properties
+
+  stacking-dir
+  
+  Which side to align?  -1: left side, 0: centered (around
      center_l_ if not nil, or around center of width), 1: right side
 
-     URG. Unintuitive if stacking_dir_ == -1 
-  */
+  *****
 
-  Direction align_dir_;
+  align-dir: deprecate! Use Side_pos_interface::self_align
   
+
+*/
+class Align_element : public virtual Axis_group_element {
+public:
+  Interval threshold_interval_ ;
+
   Axis axis () const;
   
   Align_element ();
index c1efa26c43639d8576cd615740c549e05723000e..c21b1d0b3c07b912be8cc2d0224e2114ad1fd9d5 100644 (file)
@@ -15,6 +15,7 @@
 #include "duration.hh"
 #include "musical-pitch.hh"
 #include "key-def.hh"
+#include "protected-scm.hh"
 
 class Break_req : public Request {
 public:
@@ -26,10 +27,9 @@ protected:
 
 class Mark_req : public Request {
 public:
-  String str_;
+  Protected_scm mark_label_;
 protected:
   virtual bool do_equal_b (Request const*) const;
-  virtual void do_print () const;  
   VIRTUAL_COPY_CONS(Music);
 };
 
index 0d9dd4eebf6e2fa55b750d3d6e52c6ae09bc3339..4e4da38cede61750c25712b38dec6926454abab7 100644 (file)
 #ifndef MARK_ENGRAVER_HH
 #define MARK_ENGRAVER_HH
 
-#include "bar-script-engraver.hh"
+#error
 
-/**Print rehearsal marks.
-  */
-class Mark_engraver : public Bar_script_engraver 
-{
-public:
-  Mark_engraver ();
-  VIRTUAL_COPY_CONS(Translator);
-protected:
-  virtual bool do_try_music (Music *req_l);
-  virtual void do_process_requests ();
-  virtual void do_post_move_processing ();
-private:
-  Mark_req * mark_req_l_;
-};
 
-#endif // MARK_ENGRAVER_HH
+dendif // MARK_ENGRAVER_HH
index 0f3fe7dd1a616f192e7508503e02420b59764f1a..11df320ce8a7bc08cbf9eb105c8689f2d187bf55 100644 (file)
@@ -39,7 +39,7 @@ protected:
   Cons_list<Translator> trans_p_list_;
 
 public:
-  SCM get_property (SCM name_sym, Translator_group  **where_found_l) const;
+  SCM get_property (SCM name_sym) const;
   void set_property (String var_name, SCM value);
   
 
index 54696d104082ba638af328620e82c01c58a55e69..7740fc7a9ca050220d150c50ebc5821eb2591997 100644 (file)
@@ -62,8 +62,8 @@ public:
     */
   Music_output_def *output_def_l () const;
 
-  SCM get_property (String, Translator_group **) const;
-  SCM get_property (SCM symbol, Translator_group **) const;
+  SCM get_property (String) const;
+  SCM get_property (SCM symbol) const;
   
   virtual Moment now_mom () const;  
 
index 40b9bd4bfd04408f47aedd999da52cf9a08de05d..161f323b0f2e573606b80825e379fb7a31745601 100644 (file)
@@ -87,7 +87,7 @@ Key_engraver::acknowledge_element (Score_element_info info)
 {
   if (dynamic_cast <Clef_change_req *> (info.req_l_)) 
     {
-      SCM c =  get_property ("createKeyOnClefChange", 0);
+      SCM c =  get_property ("createKeyOnClefChange");
       if (to_boolean (c))
        create_key ();
     }
@@ -133,7 +133,7 @@ Key_engraver::read_req (Key_change_req const * r)
 {
   old_accidental_idx_arr_ = accidental_idx_arr_;
   key_.clear ();
-  SCM prop = get_property ("keyOctaviation", 0);
+  SCM prop = get_property ("keyOctaviation");
 
   key_.multi_octave_b_ = to_boolean (prop);
   
index 6edf683cf6f43929425abbe882722ace11c83e9c..228ec8d1574d044237b5f8e8a52387151451e728 100644 (file)
@@ -101,7 +101,7 @@ Local_key_engraver::process_acknowledged ()
 {
   if (!key_item_p_ && mel_l_arr_.size()) 
     {
-      SCM f = get_property ("forgetAccidentals",0);
+      SCM f = get_property ("forgetAccidentals");
       bool forget = to_boolean (f);
       for (int i=0; i  < mel_l_arr_.size(); i++) 
        {
@@ -188,7 +188,7 @@ Local_key_engraver::do_pre_move_processing()
 void
 Local_key_engraver::acknowledge_element (Score_element_info info)
 {
-  SCM wg= get_property ("weAreGraceContext", 0);
+  SCM wg= get_property ("weAreGraceContext");
   
   bool selfgr = gh_boolean_p (wg) &&gh_scm2bool (wg);
   bool he_gr = to_boolean (info.elem_l_->get_elt_property ("grace"));
@@ -222,7 +222,7 @@ Local_key_engraver::do_process_requests()
 {
   if (time_trans_l_ && !time_trans_l_->measure_position ())
     {
-      if (!to_boolean (get_property ("noResetKey",0)) && key_grav_l_)
+      if (!to_boolean (get_property ("noResetKey")) && key_grav_l_)
        local_key_= key_grav_l_->key_;
     }
   else if (key_grav_l_ && key_grav_l_->key_changed_b ())
index 404644f2cea633c6ede89df0f58ab6326aaf3903..3c3777d5e85aa36944ada32057eb8a3f4ddde1ed 100644 (file)
@@ -5,11 +5,27 @@
 
  (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org>
 */
+
 #include "command-request.hh"
-#include "mark-engraver.hh"
+#include "bar-script-engraver.hh"
 #include "engraver-group-engraver.hh"
 #include "text-item.hh"
 
+/**Print rehearsal marks.
+  */
+class Mark_engraver : public Bar_script_engraver 
+{
+public:
+  Mark_engraver ();
+  VIRTUAL_COPY_CONS(Translator);
+protected:
+  virtual bool do_try_music (Music *req_l);
+  virtual void do_process_requests ();
+  virtual void do_post_move_processing ();
+private:
+  Mark_req * mark_req_l_;
+};
+
 
 ADD_THIS_TRANSLATOR (Mark_engraver);
 
@@ -32,7 +48,6 @@ Mark_engraver::do_try_music (Music* r_l)
 {
   if (Mark_req *mr = dynamic_cast <Mark_req *> (r_l))
     {
-      
       if (mark_req_l_ && mr->equal_b (mark_req_l_))
        return true;
       if (mark_req_l_)
@@ -50,7 +65,39 @@ Mark_engraver::do_process_requests ()
     {
       create_items (mark_req_l_);
 
-      String t = mark_req_l_->str_;
+      String t;
+
+      SCM m = (mark_req_l_->mark_label_ == SCM_UNDEFINED)
+       ? get_property ("rehearsalMark")
+       : SCM(mark_req_l_->mark_label_);
+      
+      if (gh_number_p (m))
+       {
+         int mark_count = gh_scm2int (m);
+         t = to_str (mark_count);
+         mark_count ++;
+         m = gh_int2scm (mark_count);
+       }
+      else if (gh_string_p (m))
+       {
+         t = ly_scm2string (m);
+         String next;
+         if (t.length_i ())
+           {
+             char c = t[0];
+             c++;
+             next = to_str (c);
+           }
+         m = ly_str02scm (next.ch_C());
+       }
+      else
+       {
+         m = gh_int2scm (1);
+       }
+         
+      daddy_trans_l_->set_property ("rehearsalMark", m);
+
+      
       text_p_->set_elt_property ("text",
                                 ly_str02scm ( t.ch_C()));
       SCM st = ly_str02scm ((t.index_any_i ("0123456789")  >= 0 )
index 3a89ad968fbc62b65cd4b0ae4789155e3a404229..a9e1dce2b3b98b48a41ad9110b97af53e374f45d 100644 (file)
@@ -27,9 +27,9 @@ Melisma_engraver::do_try_music (Music *m )
 {
   if (dynamic_cast<Melisma_playing_req*>(m))
     {
-      SCM plain (get_property ("melismaBusy", 0));
-      SCM slur (get_property ("slurMelismaBusy", 0));
-      SCM tie (get_property ("tieMelismaBusy", 0));
+      SCM plain (get_property ("melismaBusy"));
+      SCM slur (get_property ("slurMelismaBusy"));
+      SCM tie (get_property ("tieMelismaBusy"));
       return (to_boolean (plain))
        || (to_boolean (slur))
        || (to_boolean (tie));
index d34a75adbdc374299700eaf66c8b91cee1df15c1..2ed4779388bb776749584fbee2faa9c7371b7151 100644 (file)
@@ -118,7 +118,7 @@ Multi_measure_rest_engraver::do_process_requests ()
 
       announce_element (Score_element_info (mmrest_p_, busy_span_req_l_));
       start_measure_i_
-       = gh_scm2int (time->get_property ("currentBarNumber", 0));
+       = gh_scm2int (time->get_property ("currentBarNumber"));
     }
 }
 
@@ -163,7 +163,7 @@ Multi_measure_rest_engraver::do_post_move_processing ()
   if (mmrest_p_ && !time->measure_position ())
     {
       lastrest_p_ = mmrest_p_;
-      int cur = gh_scm2int (time->get_property ("currentBarNumber", 0));
+      int cur = gh_scm2int (time->get_property ("currentBarNumber"));
       lastrest_p_->set_elt_property ("measure-count",
                                     gh_int2scm (cur - start_measure_i_));
       mmrest_p_ = 0;
index 2815ca843d0642538264cb6d2d29578ea1ce49d3..4a397581a3f3dd63d1b7515bd29f4fd5c971f9c7 100644 (file)
@@ -58,7 +58,7 @@ Note_heads_engraver::do_process_requests()
   if (note_p_arr_.size ())
     return ;
   
-  SCM noteheadstyle = get_property ("noteHeadStyle", 0);
+  SCM noteheadstyle = get_property ("noteHeadStyle");
   for (int i=0; i < note_req_l_arr_.size (); i++)
     {
       Note_head *note_p  = new Note_head;
index d2cfe8dea83e87989e4d7e55c7bec5f3ec775d2d..6e2bab25cab698d84b42d655dcf327710be09928 100644 (file)
@@ -37,7 +37,7 @@ Note_performer::do_process_requests ()
     {
       int transposing_i = 0;
       //urg
-      SCM prop = get_property ("transposing", 0);
+      SCM prop = get_property ("transposing");
       if (gh_number_p(prop)) 
        transposing_i = gh_scm2int (prop);
 
index 59d61683abfb7193783c009661a21829c732e242..3117df5b95a8daefef222ae587feafdd9996f36c 100644 (file)
@@ -122,7 +122,7 @@ Paper_column::column_l () const
 
 Paper_column::Paper_column (Moment w)
 {
-  SCM when = (new Moment (w))->smobify_self ();;
+  SCM when = (new Moment (w))->smobify_self ();
   scm_unprotect_object (when);
   set_elt_property ("when", when);
   
index 83669c3717f1f3ab23cdf0b4d0cc468fdd0343dc..c16f39fd6dd919c504d9156e826ced87042cf68a 100644 (file)
@@ -996,18 +996,23 @@ verbose_command_req:
                sp_p->span_type_str_ = ly_scm2string ($3);
                sp_p->set_spot (THIS->here_input ());
                $$ = sp_p;
-       }       
+       }
+       | MARK  {
+               Mark_req * m = new Mark_req;
+               $$ = m;
+       }
        | MARK STRING {
                Mark_req *m = new Mark_req;
-               m->str_ = ly_scm2string ($2);
+               m->mark_label_ = $2;
                $$ = m;
 
        }
        | MARK unsigned {
                Mark_req *m = new Mark_req;
-               m->str_ =  to_str ($2);
+               m->mark_label_ =  gh_int2scm ($2);
                $$ = m;
        }
+
        | TIME_T unsigned '/' unsigned  {
                Time_signature_change_req *m = new Time_signature_change_req;
                m->beats_i_ = $2;
index 71d6b48273684b30c6844e8604b3f4feb4b54b5f..2878e9c9a8aa9032f0c311644522b98d6dcf0963 100644 (file)
 
 Protected_scm::Protected_scm ()
 {
-  object_ = 0;
+  object_ = SCM_UNDEFINED;
 }
 
 Protected_scm::Protected_scm (SCM s)
 {
-  object_ = s  ? scm_protect_object (s): 0;
+  object_ = SCM_NIMP(s)  ? scm_protect_object (s): s;
 }
 
 Protected_scm::Protected_scm (Protected_scm const &s)
 {
-  object_ = s.object_ ? scm_protect_object (s.object_) : 0;
+  object_ = SCM_NIMP(s.object_) ? scm_protect_object (s.object_) : s.object_;
 }
 
 Protected_scm & 
@@ -30,10 +30,11 @@ Protected_scm::operator =(SCM s)
 {
   if (object_ == s)
     return *this;
-  if (object_)
+  
+  if (SCM_NIMP (object_))
     scm_unprotect_object(object_);
 
-  object_ =  s ? scm_protect_object (s): 0;
+  object_ =  SCM_NIMP (s) ? scm_protect_object (s): s;
   return *this;
 }
 
@@ -46,7 +47,7 @@ Protected_scm::operator = (Protected_scm const &s)
 
 Protected_scm::~Protected_scm ()
 {
-  if  (object_)
+  if  (SCM_NIMP (object_))
     {
       scm_unprotect_object (object_);
     }
index 8cc39fad71864f091077af491f3b532a33090cf3..ef5a60c3b0ea78c04df4e7e8b77b4f1bff851cd8 100644 (file)
@@ -60,7 +60,7 @@ Repeat_engraver::queue_events ()
   Music_sequence* alt = repeated_music_l_->alternatives_p_;
   Moment walk_mom = now_mom () + repeated_music_l_->repeat_body_p_->length_mom ();
 
-  SCM novolta = get_property ("noVoltaBraces",0);
+  SCM novolta = get_property ("noVoltaBraces");
   bool create_volta = !to_boolean (novolta);
 
   Cons_list<Bar_create_event> becel;
@@ -107,7 +107,7 @@ Repeat_engraver::queue_events ()
              becel.append (c);
              last_number = volta_number;
              volta_number ++;
-              SCM l (get_property ("voltaSpannerDuration", 0));
+              SCM l (get_property ("voltaSpannerDuration"));
               if (SMOB_IS_TYPE_B (Moment, l))
                {
                  Moment vSD_mom = *SMOB_TO_TYPE (Moment,l);
index 6e4aaa96c52fedeba56225e21a01a818a907940a..a8bf90263afaf208c7c8dd7de66c495643ea7e0c 100644 (file)
@@ -58,7 +58,7 @@ Rhythmic_column_engraver::process_acknowledged ()
          stem_l_ = 0;
        }
 
-      SCM wg = get_property ("weAreGraceContext",0);
+      SCM wg = get_property ("weAreGraceContext");
       bool wegrace = to_boolean (wg);
 
       if (!wegrace)
@@ -71,7 +71,7 @@ Rhythmic_column_engraver::process_acknowledged ()
 void
 Rhythmic_column_engraver::acknowledge_element (Score_element_info i)
 {
-  SCM wg = get_property ("weAreGraceContext",0);
+  SCM wg = get_property ("weAreGraceContext");
   bool wegrace = to_boolean (wg);
   if ((wegrace !=
       (i.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED))
index cbf1403cdc517d35eb8713f51db6852e16a6cc5e..0db3c858857ebb49e9f09e71497c6ef032545dd1 100644 (file)
@@ -39,13 +39,23 @@ Column_rod::compare (const Column_rod &r1, const Column_rod &r2)
 {
   return r1.other_l_->rank_i() - r2.other_l_->rank_i();
 }
+
 void
 Rod::add_to_cols ()
 {
   Direction d = LEFT;
+  Drul_array<Paper_column*> cols;
+  Real extra_dist = 0.0;
   do {
-    item_l_drul_[-d]->column_l ()->add_rod
-      (item_l_drul_[d]->column_l (), distance_f_);
-  }while ((flip (&d))!=LEFT);
+    cols[d] = item_l_drul_[d]->column_l ();
+    extra_dist += item_l_drul_[d]->relative_coordinate (cols[d], X_AXIS);
+  } while ((flip (&d))!=LEFT);
+
+  if (cols[LEFT] != cols[RIGHT])
+    do
+      {
+       cols[-d]->add_rod(cols[d], distance_f_ + extra_dist);
+      }
+    while ((flip (&d))!=LEFT);
 }
 
index 65ca2915be3ff9bbae198ab928888dc310c45be7..74d8b93f9f7be4f0e61bd6164484ad5d437904ff 100644 (file)
@@ -94,7 +94,7 @@ Script_engraver::do_process_requests()
       if (l->get_direction ())
        stafy.set_direction (l->get_direction ());
 
-      SCM axisprop = get_property ("scriptHorizontal",0);
+      SCM axisprop = get_property ("scriptHorizontal");
       bool xaxis = to_boolean (axisprop);
       if (xaxis)
        stafy.set_axis (X_AXIS);
@@ -119,7 +119,7 @@ void
 Script_engraver::acknowledge_element (Score_element_info inf)
 {
   bool them_grace = to_boolean (inf.elem_l_->get_elt_property ("grace"));
-  bool us_grace = to_boolean (get_property ("weAreGraceContext",0));
+  bool us_grace = to_boolean (get_property ("weAreGraceContext"));
 
   if (us_grace != them_grace)
     return;
index b60a6feb94b1b3163d2303a651f498b3afaaee4d..ba8861c5024c0c08401cd8d1b0173c75f76af0e7 100644 (file)
@@ -111,7 +111,7 @@ Side_position_interface::side_position (Dimension_cache const * c)
   return total_off;
 }
 
-/*
+/**
   callback that centers the element on itself
  */
 Real
index d5f6f768e78f72aef417fc19bde84ba191b74489..61a7d6ce03d4b099c50d1ecb4d8969316bd5a88c 100644 (file)
@@ -29,11 +29,6 @@ Slur_engraver::do_try_music (Music *req_l)
 void
 Slur_engraver::set_melisma (bool m)
 {
-  Translator_group *where = daddy_trans_l_;
-  get_property ("slurMelismaBusy", &where);
-  if (!where)
-    where = daddy_trans_l_;
-    
   daddy_trans_l_->set_property ("slurMelismaBusy", m ? SCM_BOOL_T :SCM_BOOL_F);
 }
 
@@ -58,7 +53,7 @@ Slur_engraver::do_removal_processing ()
       typeset_element (slur_l_stack_[i]);
     }
   slur_l_stack_.clear ();
-  SCM wg = get_property ("weAreGraceContext",0);
+  SCM wg = get_property ("weAreGraceContext");
   bool wgb = to_boolean (wg);
   if (!wgb)
     for (int i=0; i < requests_arr_.size(); i++)
@@ -115,7 +110,7 @@ void
 Slur_engraver::do_post_move_processing()
 {
   new_slur_req_l_arr_.clear();
-  SCM m = get_property ("automaticMelismata",0);
+  SCM m = get_property ("automaticMelismata");
   if (to_boolean (m))
     {
       set_melisma (slur_l_stack_.size ());
index 9a93d91e7dfebce9d07ce63bf62824357cd3af1a..d581d513525f1abc0a5fcdaae9dd87cbbf8dea9c 100644 (file)
@@ -40,8 +40,8 @@ Staff_margin_engraver::acknowledge_element (Score_element_info inf)
     return;
 
 
-  SCM long_name = get_property ("instrument", 0);
-  SCM short_name = get_property ("instr", 0);
+  SCM long_name = get_property ("instrument");
+  SCM short_name = get_property ("instr");
 
   if (now_mom () > Moment (0))
     long_name = short_name;
index 547163f457979d3e93ecf56b06ff21602514edcd..208da51a180cbda2cc3b86a7f0018099a2db3b69 100644 (file)
@@ -96,10 +96,10 @@ String
 Staff_performer::new_instrument_str () 
 { 
   // mustn't ask Score for instrument: it will return piano!
-  SCM minstr = get_property (ly_symbol2scm ("midiInstrument"), 0);
+  SCM minstr = get_property (ly_symbol2scm ("midiInstrument"));
 
   if (!gh_string_p(minstr))
-    minstr = get_property (ly_symbol2scm ("instrument"), 0);
+    minstr = get_property (ly_symbol2scm ("instrument"));
 
   if (!gh_string_p (minstr)
       || ly_scm2string (minstr) == instrument_str_)
index eb32b20db08c916033bf6fff5ca53f6716fb880d..a84f393a52d125d8fa36eb197415a489cb24baaa 100644 (file)
@@ -54,8 +54,8 @@ Staff_symbol_engraver::do_creation_processing()
 void
 Staff_symbol_engraver::do_removal_processing()
 {
-  SCM n = get_property ("numberOfStaffLines",0);
-  SCM ss = get_property ("staffSpace", 0);
+  SCM n = get_property ("numberOfStaffLines");
+  SCM ss = get_property ("staffSpace");
 
   if (gh_number_p (ss))
     span_p_->set_elt_property ("staff-space", ss);
index 91a679eca6e10dedb2e07f167458cefe6c3907a3..a1f467e1f66bfd8d3bbff78d476369d05368188b 100644 (file)
@@ -28,7 +28,7 @@ Stem_engraver::Stem_engraver()
 void
 Stem_engraver::do_creation_processing ()
 {
-  SCM prop = get_property ("abbrev", 0);
+  SCM prop = get_property ("abbrev");
   if (gh_number_p(prop)) 
     {
       default_abbrev_i_  = gh_scm2int (prop);
@@ -99,18 +99,17 @@ Stem_engraver::do_pre_move_processing()
 
   if (stem_p_)
     {
-      Translator_group* which;
-      SCM prop = get_property ("stemLeftBeamCount", &which);
+      SCM prop = get_property ("stemLeftBeamCount");
       if (gh_number_p(prop))
        {
          stem_p_->set_beaming (gh_scm2int (prop),LEFT);
-         ((Translator_group*)which)->set_property ("stemLeftBeamCount", SCM_UNDEFINED);
+         daddy_trans_l_->set_property ("stemLeftBeamCount", SCM_UNDEFINED);
        }
-      prop = get_property ("stemRightBeamCount", &which);
+      prop = get_property ("stemRightBeamCount");
       if (gh_number_p(prop))
        {
          stem_p_->set_beaming (gh_scm2int (prop), RIGHT);
-         ((Translator_group*)which)->set_property ("stemRightBeamCount", SCM_UNDEFINED);
+         daddy_trans_l_->set_property ("stemRightBeamCount", SCM_UNDEFINED);
        }
 
       // UGH. Should mark non-forced instead.
index 80e5e1208024f1d5cdf0c0594803a9d71fd67288..194b779774f5a24378275894a79aa2fc6a0c0750 100644 (file)
@@ -81,7 +81,7 @@ Text_engraver::do_process_requests ()
       Text_item *text = new Text_item;
       Side_position_interface stafy (text);
 
-      SCM axisprop = get_property ("scriptHorizontal",0);
+      SCM axisprop = get_property ("scriptHorizontal");
       if (to_boolean (axisprop))
        {
          stafy.set_axis (X_AXIS);
@@ -102,7 +102,7 @@ Text_engraver::do_process_requests ()
       if (r->style_str_.length_i ())
        text->set_elt_property ("style", ly_str02scm (r->style_str_.ch_C()));
       
-      SCM empty = get_property ("textEmptyDimension", 0);
+      SCM empty = get_property ("textEmptyDimension");
       if (to_boolean (empty))
        {
          text->set_empty (X_AXIS);
index 0090dbd9b576a943a214e89c832a98cd5d55d7d7..9ad9be22363227408e9729abfb4ef12189588045 100644 (file)
@@ -80,7 +80,7 @@ Tie_engraver::do_try_music (Music *m)
   if (Tie_req * c = dynamic_cast<Tie_req*> (m))
     {
       req_l_ = c;
-      SCM m = get_property ("automaticMelismata",0);
+      SCM m = get_property ("automaticMelismata");
       bool am = gh_boolean_p (m) &&gh_scm2bool (m);
       if (am)
        {
@@ -94,11 +94,6 @@ Tie_engraver::do_try_music (Music *m)
 void
 Tie_engraver::set_melisma (bool m)
 {
-  Translator_group *where = daddy_trans_l_;
-  get_property ("tieMelismaBusy", &where);
-  if (!where)
-    where = daddy_trans_l_;
-    
   daddy_trans_l_->set_property ("tieMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F);
 }
 
@@ -168,7 +163,7 @@ Tie_engraver::process_acknowledged ()
        }
 
 
-      SCM sparse = get_property ("sparseTies", 0);
+      SCM sparse = get_property ("sparseTies");
       if (to_boolean (sparse))
        {
          int i = scm_ilength (head_list);
@@ -234,7 +229,7 @@ Tie_engraver::do_pre_move_processing ()
 void
 Tie_engraver::do_post_move_processing ()
 {
-  SCM m = get_property ("automaticMelismata",0);
+  SCM m = get_property ("automaticMelismata");
   if (to_boolean (m))
     {
       set_melisma (false);
index feb368ba3665018d8046541c8404f2f926aaf419..f74a9be590d798e39af84a1b3b75f88e05fd1dfd 100644 (file)
@@ -48,14 +48,14 @@ Timing_engraver::which_bar ()
       if (!now_mom ())
        return "|";
 
-      SCM nonauto = get_property ("barNonAuto", 0);
+      SCM nonauto = get_property ("barNonAuto");
       if (!to_boolean (nonauto))
        {
-         SCM always = get_property ("barAlways", 0);
+         SCM always = get_property ("barAlways");
          if (!measure_position ()
              || (to_boolean (always)))
            {
-             SCM def=get_property ("defaultBarType" ,0);
+             SCM def=get_property ("defaultBarType" );
              return (gh_string_p (def))? ly_scm2string (def) : "";
            }
        }
index 81429e9d3e830685a0ff7c56ff2ba160dd04804f..7e49f77f2ed0308faecc329b43a87a0ed951abfb 100644 (file)
@@ -96,11 +96,11 @@ Timing_translator::do_pre_move_processing()
   while (!global_l);
 
   /* allbars == ! skipbars */
-  SCM sb = get_property ("skipBars", 0);
+  SCM sb = get_property ("skipBars");
   bool allbars = !to_boolean (sb);
 
   // urg: multi bar rests: should always process whole of first bar?
-  SCM tim = get_property ("timing", 0);
+  SCM tim = get_property ("timing");
   bool timb = to_boolean (tim);
   if (timb && allbars)
     {
@@ -130,7 +130,7 @@ Timing_translator::do_creation_processing()
 Moment
 Timing_translator::measure_length () const
 {
-  SCM l = get_property("measureLength",0);
+  SCM l = get_property("measureLength");
   if (SMOB_IS_TYPE_B(Moment, l))
     return *SMOB_TO_TYPE (Moment, l);
   else
@@ -142,7 +142,7 @@ void
 Timing_translator::get_time_signature (int *n, int *d) const
 {
   Moment one_beat (1,4);
-  SCM one = get_property ("beatLength",0);
+  SCM one = get_property ("beatLength");
   if (SMOB_IS_TYPE_B (Moment, one))
     one_beat = *SMOB_TO_TYPE (Moment, one);
   *n = measure_length () / one_beat;
@@ -169,7 +169,7 @@ Timing_translator::Timing_translator()
 Moment
 Timing_translator::measure_position () const
 {
-  SCM sm = get_property ("measurePosition",0);
+  SCM sm = get_property ("measurePosition");
   
   Moment m   =0;
   if (SMOB_IS_TYPE_B (Moment, sm))
@@ -206,7 +206,7 @@ Timing_translator::do_post_move_processing()
 
   Moment * measposp =0;
 
-  SCM s = get_property ("measurePosition", 0);
+  SCM s = get_property ("measurePosition");
   if (SMOB_IS_TYPE_B (Moment, s))
     {
       measposp = SMOB_TO_TYPE (Moment,s);
@@ -220,15 +220,14 @@ Timing_translator::do_post_move_processing()
   *measposp += dt;
   // don't need to set_property
   
-  Translator_group * tr =daddy_trans_l_; 
-  SCM barn = get_property ("currentBarNumber", &tr);
+  SCM barn = get_property ("currentBarNumber");
   int b = 0;
   if (gh_number_p(barn))
     {
       b = gh_scm2int (barn);
     }
 
-  SCM cad = get_property ("timing", 0);
+  SCM cad = get_property ("timing");
   bool c= to_boolean (cad );
 
   Moment len = measure_length ();
@@ -238,6 +237,6 @@ Timing_translator::do_post_move_processing()
        b ++;
       }
 
-  tr->set_property ("currentBarNumber", gh_int2scm (b));
+  daddy_trans_l_->set_property ("currentBarNumber", gh_int2scm (b));
 }
 
index 743f843cb29224c93f4dc04a353c9a49a47c4e50..c76e68e884696003c750dc44cc02963039e63a91 100644 (file)
@@ -429,20 +429,16 @@ Translator_group::do_add_processing ()
 }
 
 SCM
-Translator_group::get_property (SCM sym, Translator_group **where_l) const
+Translator_group::get_property (SCM sym) const
 {
   if (properties_dict_.elem_b (sym))
     {
-      if (where_l)
-       *where_l = (Translator_group*) this; // ugh
       return properties_dict_.get (sym);
     }
 
   if (daddy_trans_l_)
-    return daddy_trans_l_->get_property (sym, where_l);
+    return daddy_trans_l_->get_property (sym);
   
-  if (where_l)
-    *where_l = 0;
 
   return SCM_UNDEFINED;
 }
index 274ef2b4123f3ca2f08c9c2f3ab25e62f9f52f3c..28e2b4c31baa257369cee923de3c385052c94fb3 100644 (file)
@@ -164,16 +164,15 @@ Translator::output_def_l () const
 }
 
 SCM
-Translator::get_property (String id, Translator_group **where_l) const
+Translator::get_property (String id) const
 {
-  return daddy_trans_l_->get_property (ly_symbol2scm (id.ch_C()), where_l);
+  return daddy_trans_l_->get_property (ly_symbol2scm (id.ch_C()));
 }
 
 SCM
-Translator::get_property (SCM sym,
-                         Translator_group **where_l) const
+Translator::get_property (SCM sym) const
 {
-  return daddy_trans_l_->get_property (sym, where_l);
+  return daddy_trans_l_->get_property (sym);
 }
 
 
index 39dbc7b12b8289530fce9b6ae0825d3a1ecf8363..2430e7b37c386241285ff3bc5750cd51cb941794 100644 (file)
@@ -50,7 +50,7 @@ Tuplet_engraver::do_try_music (Music *r)
          Moment m = now_mom () + c->length_mom ();
          stop_moments_.push (m);
 
-         SCM s = get_property ("tupletSpannerDuration",0);
+         SCM s = get_property ("tupletSpannerDuration");
          if (SMOB_IS_TYPE_B(Moment, s))
            m = m <? (now_mom () + *SMOB_TO_TYPE(Moment,s));
          
@@ -64,7 +64,7 @@ Tuplet_engraver::do_try_music (Music *r)
 void
 Tuplet_engraver::do_process_requests ()
 {
-  SCM v = get_property ("tupletInvisible", 0);
+  SCM v = get_property ("tupletInvisible");
   if (to_boolean (v))
     return;
 
@@ -90,7 +90,7 @@ void
 Tuplet_engraver::acknowledge_element (Score_element_info i)
 {
   bool grace= to_boolean (i.elem_l_->get_elt_property ("grace"));
-  SCM wg = get_property ("weAreGraceContext",0);
+  SCM wg = get_property ("weAreGraceContext");
   bool wgb = to_boolean (wg);
   if (grace != wgb)
     return;
@@ -115,7 +115,7 @@ Tuplet_engraver::do_post_move_processing ()
   Moment now = now_mom ();
 
   Moment tsd;
-  SCM s = get_property ("tupletSpannerDuration",0);
+  SCM s = get_property ("tupletSpannerDuration");
   if (SMOB_IS_TYPE_B(Moment, s))
     tsd = *SMOB_TO_TYPE(Moment,s);
 
index aca1c68fd8132e9fa21bc7f3081fb48c540ab306..464e7e3df21defc27b8fb59409625949b857ad00 100644 (file)
@@ -23,7 +23,7 @@ Vertical_align_engraver::do_creation_processing()
 {
   valign_p_ =new Axis_align_spanner;
   valign_p_->set_axis (Y_AXIS);
-  valign_p_->stacking_dir_ = DOWN;
+  valign_p_->set_elt_property ("stacking-dir",  gh_int2scm (DOWN));
   
   valign_p_->set_bounds(LEFT,get_staff_info().command_pcol_l ());
   announce_element (Score_element_info (valign_p_ , 0));
@@ -32,23 +32,18 @@ Vertical_align_engraver::do_creation_processing()
 void
 Vertical_align_engraver::do_removal_processing()
 {
-  SCM dist (get_property ("maxVerticalAlign", 0));
+  SCM dist (get_property ("maxVerticalAlign"));
   if (gh_number_p(dist))
     {
       valign_p_->threshold_interval_[BIGGER]  = gh_scm2double (dist);
     }
 
-  dist = get_property ("minVerticalAlign", 0);
+  dist = get_property ("minVerticalAlign");
   if (gh_number_p(dist))
     {
       valign_p_->threshold_interval_[SMALLER]  = gh_scm2double (dist);
     }
 
-  dist = get_property ("alignmentReference",0);
-  if (isdir_b (dist))
-    {
-      valign_p_->align_dir_ = to_dir (dist);
-    }
   valign_p_->set_bounds(RIGHT,get_staff_info().command_pcol_l ());
   typeset_element (valign_p_);
   valign_p_ =0;
index b30c731e86e386674688d46680f970686b66ffa6..44c508c1bab9a31e776f7f845285bad29e5cd4bc 100644 (file)
@@ -214,8 +214,8 @@ StaffGroupContext= \translator {
        \type "Engraver_group_engraver";
        \consists "Span_bar_engraver";
        \consists "Output_property_engraver";   
-       
        \consists "Staff_group_bar_engraver";
+
        \name StaffGroup;
        \accepts "Staff";
        \accepts "RhythmicStaff";
@@ -246,6 +246,7 @@ LyricsContext = \translator {
        \name Lyrics;
        \consists Vertical_align_engraver;%need this for getting folded repeats right.
 
+       \consists "Property_engraver";
        \consistsend "Axis_group_engraver";
        
        \accepts "LyricVoice";
@@ -340,7 +341,7 @@ ScoreContext = \translator {
        \accepts "NoteNames";
 
        markVisibilityFunction = #end-of-line-invisible
-       barNumberVisibilityFunction = #end-of-line-invisible
+       barNumberVisibilityFunction = #begin-of-line-visible
        marginVisibilityFunction = #begin-of-line-visible
 };
 
@@ -354,8 +355,6 @@ OrchestralScoreContext= \translator {
 
        \consists "Bar_number_engraver";
        \consists "Mark_engraver";
-
-       \accepts "HaraKiriStaff";
 };
 
 \translator {
index 619e0591aa55aec73308222d786507f3ce234821..db27072dbca40d66d3f4760ff3bd5d3bd53df159 100644 (file)
 
   )
    
+(define generic-lyrics-properties
+  (list generic-text-properties
+  )
+  
+)