]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.5.30 release/1.5.30
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 4 Feb 2002 09:47:16 +0000 (10:47 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 4 Feb 2002 09:47:16 +0000 (10:47 +0100)
84 files changed:
ChangeLog
Documentation/user/ly2dvi.itexi
Documentation/user/refman.itely
Documentation/user/tutorial.itely
VERSION
input/bugs/divisi-staff.ly [new file with mode: 0644]
lily/a2-engraver.cc
lily/accidental-engraver.cc
lily/arpeggio-engraver.cc
lily/auto-beam-engraver.cc
lily/auto-change-iterator.cc
lily/axis-group-engraver.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/beam-engraver.cc
lily/break-align-engraver.cc
lily/breathing-sign-engraver.cc
lily/change-iterator.cc
lily/chord-name-engraver.cc
lily/chord-tremolo-engraver.cc
lily/clef-engraver.cc
lily/collision-engraver.cc
lily/completion-note-heads-engraver.cc
lily/custos-engraver.cc
lily/dot-column-engraver.cc
lily/dynamic-engraver.cc
lily/engraver.cc
lily/extender-engraver.cc
lily/figured-bass-engraver.cc
lily/fingering-engraver.cc
lily/grob-info.cc
lily/hyphen-engraver.cc
lily/include/engraver.hh
lily/include/grob-info.hh
lily/include/timing-translator.hh
lily/include/translator-group.hh
lily/instrument-name-engraver.cc
lily/key-engraver.cc
lily/line-group-group-engraver.cc
lily/lyric-engraver.cc
lily/mark-engraver.cc
lily/multi-measure-rest-engraver.cc
lily/note-head-line-engraver.cc
lily/note-heads-engraver.cc
lily/note-name-engraver.cc
lily/part-combine-music-iterator.cc
lily/percent-repeat-engraver.cc
lily/phrasing-slur-engraver.cc
lily/piano-pedal-engraver.cc
lily/porrectus-engraver.cc
lily/rest-collision-engraver.cc
lily/rest-engraver.cc
lily/rhythmic-column-engraver.cc
lily/score-engraver.cc
lily/script-column-engraver.cc
lily/script-engraver.cc
lily/separating-line-group-engraver.cc
lily/slur-engraver.cc
lily/spacing-engraver.cc
lily/span-arpeggio-engraver.cc
lily/span-bar-engraver.cc
lily/staff-symbol-engraver.cc
lily/stanza-number-engraver.cc
lily/stem-engraver.cc
lily/system-start-delimiter-engraver.cc
lily/text-engraver.cc
lily/text-spanner-engraver.cc
lily/tie-engraver.cc
lily/time-signature-engraver.cc
lily/timing-translator.cc
lily/translator-group.cc
lily/tuplet-engraver.cc
lily/vertical-align-engraver.cc
lily/volta-engraver.cc
ly/engraver-init.ly
ly/performer-init.ly
make/out/lilypond.lsm
make/out/lilypond.mandrake.spec
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
mf/feta-bolletjes.mf
scm/grob-description.scm
scm/interface-description.scm
scm/lily.scm

index e8e1505545cf201d20242a348520a36d2f0bc786..90166e4d2f01ae8bf8fc9c3b395ba59559069bff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,56 @@
+2002-02-04  Han-Wen  <hanwen@cs.uu.nl>
+
+       * VERSION: 1.5.30 released
+
+       * lily/dynamic-engraver.cc: add doco about DynamicLineSpanner
+
+       * Documentation/user/refman.itely (Dynamics): add a note about
+       DynamicLineSpanner.
+
+       * scm/grob-description.scm: add a 'translator-type?  object
+       property, so that \property Foo.Bar =\turnOff doesn't cause
+       type check warning.
+
+       * lily/translator-group.cc (add_fresh_group_translator): make
+       new add-translator functions to make distinction between fresh and
+       used group-translators. Fixes problem with scripts on auto-changing voice 
+
+       * lily/timing-engraver.cc: make Timing_engraver instantiatable,
+       add to Score_performer. Fixes bar checks in MIDI
+
+       * lily/tie-engraver.cc (create_grobs): Use pitches to compare note
+       heads. Fixes many quirks with ties.
+
+       * lily/engraver.cc (announce_grob): Use SCM argument. Store cause
+       in the grob property #'cause, instead of using Grob_info.
+
+       * ly/engraver-init.ly (StaffContext): move Dot_column_engraver to
+       staff context, fixing dot alignment on collisions.
+
+       * lily/beam-engraver.cc (try_music): remove can't find beam start
+       warning, so that skipTypesetting won't complain.
+
+2002-02-01  Mats Bengtsson  <mats.bengtsson@s3.kth.se>
+
+       * Documentation/user/refman.itely (Paper size): Documentation fix,
+       papersize
+
+       * lily/text-engraver.cc: Bugfix: textNonEmpty works again
+
+       * scm/grob-description.scm: \breathe: Use feta font comma by default
+
+2002-01-23  Mats Bengtsson  <mats.bengtsson@s3.kth.se>
+
+       * input/template/piano-dynamics.ly (pedal): Simplified
+
+2002-01-18  Mats Bengtsson  <mats.bengtsson@s3.kth.se>
+
+       * ly/engraver-init.ly: avoid warnings on \skip in lyrics
+
+2002-01-10  Mats Bengtsson  <matsb@s3.kth.se>
+
+       * lilypond-mode.el (LilyPond-command-query): ignore case.
+
 2002-02-01  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
        * VERSION: 1.5.29 released
index 9f91398699d67268ca0331aa64c94bf854cf3b70..5b32295a530dae78521fb3f82881881c229d7885 100644 (file)
@@ -141,6 +141,12 @@ the @code{\paper} block.
 
 @item pagenumber
    If set to @code{no}, no page numbers will be printed.
+
+
+  
+  @item fontenc
+     The font encoding, should be set identical to the @code{font-encoding}
+     property in the score.
 @end table
 
 @unnumberedsubsec Environment variables
index 9bc3526865c9c9cb0a6f61af4a761f9c85d8358e..f34b6ba4ebdc319a5eed9352cc33128d174bc675 100644 (file)
@@ -1199,7 +1199,10 @@ c'4 \breathe d4
 
 @refbugs
 
-  Currently, only tick marks are supported, not comma style breath marks.
+The current layout of the default comma style breath marks
+could be improved and more optional symbols should be added to the
+font.
+
 
 
 @c .  {Tempo}
@@ -1553,9 +1556,15 @@ For everyday use, we recommend the identifiers @code{\cresc},
 @cindex diminuendo
 
 Dynamics are grobs of @internalsref{DynamicText} and
-@internalsref{Hairpin}. They are put together on
-@internalsref{DynamicLineSpanner} to align them vertically.
-
+@internalsref{Hairpin}. Vertical positioning of these symbols is handled
+by the @internalsref{DynamicLineSpanner} grob.  If you want to adjust
+padding or vertical direction of the dynamics, you must set properties
+for the @internalsref{DynamicLineSpanner} grob. Predefined identifiers
+to set the vertical direction are \dynamicUp and \dynamicDown.
+
+@cindex direction, of dynamics
+@cindex @code{\dynamicDown}
+@cindex @code{\dynamicUp}
 
 @c .  {Repeats}
 @node Repeats
index c4690beb7a505b604991c67785de5482aa60df6c..170a298ab91a4b61f8c1accf9545c7f6c2a704fd 100644 (file)
@@ -258,7 +258,7 @@ We continue with the introduction of the remaining musical constructs.
 
 @c maybe legend here?
 
-Rests are entered just like notes with the name ``@code{r}'':
+Normal rests are entered just like notes with the name ``@code{r}'':
 
 @quotation
 @example
diff --git a/VERSION b/VERSION
index 5577b6f77f64467c972ae1bcf63949cb7cfbd6d1..4b265d335f0864b28f92617e7f3ef7287254590a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
-PATCH_LEVEL=29
+PATCH_LEVEL=30
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff --git a/input/bugs/divisi-staff.ly b/input/bugs/divisi-staff.ly
new file mode 100644 (file)
index 0000000..1c5673d
--- /dev/null
@@ -0,0 +1,28 @@
+%
+% space after barline on 1st staff due to time sig.
+%
+
+\score{
+  \notes\relative c'\context GrandStaff{
+
+c4 d e f | 
+g a b c | \break
+
+<{
+d c b a | 
+  g f e d}
+ \context Staff=lower{
+% \property Staff.TimeSignature = \turnOff
+
+b' a g f |
+  e d c b |}> \break
+
+c1
+}
+\paper{
+  \translator{
+    \GrandStaffContext
+    \consists "Instrument_name_engraver"
+  }
+}
+}
index a08d9e0765428b4dcff58ae69caf2589ec466b4a..a7f1acb4a3870702e49dfe5d555dea2ab552344d 100644 (file)
@@ -55,7 +55,7 @@ A2_engraver::create_grobs ()
        {
          text_p_ = new Item (get_property ("TextScript"));
          Side_position_interface::set_axis (text_p_, Y_AXIS);
-         announce_grob (text_p_, 0);
+         announce_grob(text_p_, SCM_EOL);
       
          Direction dir = UP;
          SCM text = SCM_EOL;
index ee82be6f1c0006f34a9b23df24c795de89aa3b46..9134f01ec0bb398ddf9333bccbf61af75bad784d 100644 (file)
@@ -205,7 +205,7 @@ Accidental_engraver::create_grobs ()
                  if (gh_number_p (c0))
                    Staff_symbol_referencer::set_position (key_item_p_, gh_scm2int (c0));
                         
-                 announce_grob (key_item_p_, 0);
+                 announce_grob(key_item_p_, SCM_EOL);
                }
 
              
@@ -317,15 +317,14 @@ Accidental_engraver::acknowledge_grob (Grob_info info)
   
 }
 
-/*
-  ugh. repeated deep_copy generates lots of garbage.
- */
 void
 Accidental_engraver::process_music ()
 {
+#if 0
   SCM smp = get_property ("measurePosition");
   Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
-
+#endif
+  
   SCM sig = get_property ("keySignature");
 
   /* Detect key sig changes. */
index d280240411fae3979a4cbdbbcff5b632aba92e0d..b236e8b8d801886580b2307268496f658c910571 100644 (file)
@@ -91,7 +91,7 @@ Arpeggio_engraver::create_grobs ()
        {
          Side_position_interface::add_support (arpeggio_, supports_[i]);
        }
-      announce_grob (arpeggio_, arpeggio_req_);
+      announce_grob(arpeggio_, arpeggio_req_->self_scm());
     }
 }
 
index e17e98d2e145cda8a23dcc5ad09ba77688e0f070..17af9045334412b8cdc9a23ee039931991330245 100644 (file)
@@ -235,7 +235,7 @@ Auto_beam_engraver::create_beam_p ()
       Beam::add_stem (beam_p, (*stem_l_arr_p_)[i]);
     }
   
-  announce_grob (beam_p, 0);
+  announce_grob(beam_p, SCM_EOL);
 
   return beam_p;
 }
index c0879f90a9876a55ee831824ce98dc7ce76d3375..56f18919058633d629ce31107532a6574a4f8ca5 100644 (file)
@@ -49,7 +49,7 @@ Auto_change_iterator::change_to (Music_iterator *it, String to_type,
        Translator_group * dest = 
          it->report_to_l ()->find_create_translator_l (to_type, to_id);
        current->remove_translator_p (last);
-       dest->add_group_translator (last);
+       dest->add_used_group_translator (last);
       }
     else
       {
index 260742c627f1db586ea788a1f42b4337ad1be6f4..f22d068ffaf6900310a47011fe61ffcf2d23f928 100644 (file)
@@ -49,7 +49,7 @@ Axis_group_engraver::initialize ()
 
   staffline_p_->set_bound (LEFT,it);
 
-  announce_grob (staffline_p_, 0);
+  announce_grob(staffline_p_, SCM_EOL);
 }
 
 Spanner*
index cb9c6e216ab73113c8df95357b9d3dd40ee2730f..630d4ce14e3c311ee9beb3070755b76b1ec61cb5 100644 (file)
@@ -53,7 +53,7 @@ Bar_engraver::create_bar ()
       if (scm_equal_p (gl, bar_p_->get_grob_property ("glyph")) != SCM_BOOL_T)
          bar_p_->set_grob_property ("glyph", gl);
       
-      announce_grob (bar_p_, 0);
+      announce_grob(bar_p_, SCM_EOL);
     }
 }
 
index 3ab788c9284b9ae22dded822b4f42730fc171472..2c6d4d6c26e6357a25fd7b652607c9f54cb9c56e 100644 (file)
@@ -99,7 +99,7 @@ Bar_number_engraver::create_items ()
   text_p_ = new Item (b);
   Side_position_interface::set_axis (text_p_,Y_AXIS);
 
-  announce_grob (text_p_, 0);
+  announce_grob(text_p_, SCM_EOL);
 }
 
 ENTER_DESCRIPTION(Bar_number_engraver,
index 9ebcd6ea262eaf3f672ab1edc7d77ca5142cdfd6..dc2f5654b9a70593a3df4d552aa61f2879076df3 100644 (file)
@@ -22,9 +22,6 @@
 class Beam_engraver : public Engraver
 {
   Drul_array<Span_req*> reqs_drul_;
-
-  Link_array<Stem> stems_;
-  
   
   Spanner *finished_beam_p_;
   Spanner *beam_p_;
@@ -47,7 +44,7 @@ protected:
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
   virtual void finalize ();
-  virtual void create_grobs ();
+
   virtual void acknowledge_grob (Grob_info);
   virtual bool try_music (Music*);
   virtual void process_music ();
@@ -88,12 +85,6 @@ Beam_engraver::try_music (Music *m)
       
          Direction d =c->get_span_dir ();
 
-         if (d == STOP && !beam_p_)
-           {
-             m->origin ()->warning (_ ("can't find start of beam"));
-             return false;
-           }
-
          if (d == STOP)
            {
              SCM m = get_property ("automaticMelismata");
@@ -137,12 +128,6 @@ Beam_engraver::process_music ()
     {
       top_engraver ()->forbid_breaks ();
     }
-}
-
-
-void
-Beam_engraver::create_grobs ()
-{
   if (reqs_drul_[START])
     {
       if (beam_p_)
@@ -163,12 +148,12 @@ Beam_engraver::create_grobs ()
       
       /* urg, must copy to Auto_beam_engraver too */
  
-      announce_grob (beam_p_, reqs_drul_[START]);
+      announce_grob(beam_p_, reqs_drul_[START]->self_scm());
     }
-  reqs_drul_[STOP] = 0;
-  reqs_drul_[START] = 0;
+
 }
 
+
 void
 Beam_engraver::typeset_beam ()
 {
@@ -182,8 +167,6 @@ Beam_engraver::typeset_beam ()
       delete finished_beam_info_p_;
       finished_beam_info_p_ =0;
       finished_beam_p_ = 0;
-    
-      reqs_drul_[STOP] = 0;
     }
 }
 
@@ -191,14 +174,18 @@ void
 Beam_engraver::start_translation_timestep ()
 {
   reqs_drul_ [START] =0;
-  if (beam_p_) {
-    SCM m = get_property ("automaticMelismata");
-    SCM b = get_property ("noAutoBeaming");
-    if (to_boolean (m) && to_boolean (b)) {
-      set_melisma (true);
+  reqs_drul_[STOP] = 0;
+  
+  if (beam_p_)
+    {
+      SCM m = get_property ("automaticMelismata");
+      SCM b = get_property ("noAutoBeaming");
+      if (to_boolean (m) && to_boolean (b))
+       {
+         set_melisma (true);
+       }
+      subdivide_beams_ = to_boolean(get_property("subdivideBeams")); 
     }
-    subdivide_beams_ = gh_scm2bool(get_property("subdivideBeams")); 
-  }
 }
 
 void
index fbe2bdcf40124a45328e5caa54bfc1945959fad8..e1bd2e212b3675da93d254368ab157e5cedd1a06 100644 (file)
@@ -100,7 +100,7 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
        {
          align_l_ = new Item (get_property ("BreakAlignment"));
          Break_align_interface::set_interface (align_l_);
-         announce_grob (align_l_,0);
+         announce_grob (align_l_, SCM_EOL);
 
          SCM edge_sym = ly_symbol2scm ("Left_edge_item");
          Item * edge = new Item (get_property ("LeftEdge"));
@@ -121,7 +121,7 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
          */
          align_l_->set_grob_property ("self-alignment-X", edge->self_scm ());
          
-         announce_grob (edge, 0);
+         announce_grob(edge, SCM_EOL);
          column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm ());
        }
 
@@ -143,7 +143,7 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
 
          group->set_grob_property ("break-align-symbol", align_name);
          group->set_parent (align_l_, Y_AXIS);
-         announce_grob (group, 0);
+         announce_grob(group, SCM_EOL);
          column_alist_ = scm_assoc_set_x (column_alist_, align_name, group->self_scm ());
 
        }
index a8d47464aeb86bb5be7a0dfb2f782a5a74a70444..439e09bee37b6d9d88f67797883b8d9aa21ea233 100644 (file)
@@ -65,7 +65,7 @@ Breathing_sign_engraver::create_grobs ()
 
       Breathing_sign::set_interface (breathing_sign_p_);
 
-      announce_grob (breathing_sign_p_, breathing_sign_req_l_);
+      announce_grob(breathing_sign_p_, breathing_sign_req_l_->self_scm());
       breathing_sign_req_l_ = 0;
     }
 }
index ac4b81f787a1a87e04e8464753fddd144f9b85b0..cdae5724b40448846892c04bd1e8e98f05ee8150 100644 (file)
@@ -65,7 +65,7 @@ Change_iterator::process (Moment m)
        Translator_group * dest = 
          report_to_l ()->find_create_translator_l (to_type, to_id);
        current->remove_translator_p (last);
-       dest->add_group_translator (last);
+       dest->add_used_group_translator (last);
       }
     else
       {
index cfa35c26219c2682d79ae60155137f1a54c09b71..4064e85a522c7b30d65865c25f558a6f8c16c799 100644 (file)
@@ -91,7 +91,7 @@ Chord_name_engraver::create_grobs ()
     {
       chord_name_p_ = new Item (get_property ("ChordName"));
       chord_name_p_->set_grob_property ("chord", chord_);
-      announce_grob (chord_name_p_, 0);
+      announce_grob(chord_name_p_, SCM_EOL);
       SCM s = get_property ("chordChanges");
       if (to_boolean (s) && ly_car (last_chord_) != SCM_EOL
                  && gh_equal_p (chord_, last_chord_))
index 98c42bb9f47fe5848b83729a4c5dbbd4c4b96324..04e156f2a405c94428b3440d1a8369b188d5df0a 100644 (file)
@@ -112,7 +112,7 @@ Chord_tremolo_engraver::process_music ()
          Moment mp
            = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
          beam_start_location_ = mp;
-         announce_grob (beam_p_, repeat_);
+         announce_grob(beam_p_, repeat_->self_scm());
        }
       else if (!sequential_body_b_ && !stem_tremolo_)
        {
@@ -122,7 +122,7 @@ Chord_tremolo_engraver::process_music ()
              stem_tremolo_ = new Item (get_property ("StemTremolo"));
              Stem_tremolo::set_interface (stem_tremolo_);
 
-             announce_grob (stem_tremolo_, repeat_);
+             announce_grob(stem_tremolo_, repeat_->self_scm());
              stem_tremolo_->set_grob_property ("tremolo-flags",
                                                gh_int2scm (flags));
 
index 92dab534a18c1a30911e7d2bee94dd823b6bacf8..7de41f9f49eb4b988d0509afea00bd5d869c5431 100644 (file)
@@ -92,7 +92,7 @@ Clef_engraver::create_clef ()
   if (!clef_p_)
     {
       Item *c= new Item (get_property ("Clef"));
-      announce_grob (c, 0);
+      announce_grob(c, SCM_EOL);
 
       Staff_symbol_referencer::set_interface (c);
       
@@ -115,7 +115,7 @@ Clef_engraver::create_clef ()
 
       g->set_grob_property ("direction", gh_int2scm (sign (gh_scm2int (oct))));
       octavate_p_ = g;
-      announce_grob (octavate_p_, 0);
+      announce_grob(octavate_p_, SCM_EOL);
     }
 }
 
index 33ad2b15059b82bcb8c9bf8dfeb5f5dbea8dd800..ff947053d2ad94319179247c83ecc2cbca4ee3e1 100644 (file)
@@ -39,7 +39,7 @@ Collision_engraver::create_grobs ()
       Axis_group_interface::set_interface (col_p_);
       Axis_group_interface::set_axes (col_p_, X_AXIS, Y_AXIS);
 
-      announce_grob (col_p_,0);
+      announce_grob (col_p_, SCM_EOL);
     }
   
   for (int i=0; i< note_column_l_arr_.size (); i++)
index edf7677141a7b6ab9eefe6ca0a8f2001c1aa4300..23748de4ac0c48ae33d9eabbedcadbeb33f4fa5c 100644 (file)
@@ -201,12 +201,13 @@ Completion_heads_engraver::process_music ()
       if (scratch_note_reqs_.size())
        {
          req = scratch_note_reqs_[i];
-         req->set_mus_property ("pitch",
-           note_req_l_arr_[i]->get_mus_property ("pitch"));
+         SCM pits = note_req_l_arr_[i]->get_mus_property ("pitch");
+         req->set_mus_property ("pitch",pits);
        }
+
       note_p->set_grob_property ("duration-log",
                                 gh_int2scm (note_dur.duration_log ()));
-
+      
       int dots= note_dur.dot_count ();
       if (dots)
        {
@@ -220,7 +221,7 @@ Completion_heads_engraver::process_music ()
            d->set_grob_property ("dot-count", gh_int2scm (dots));
 
          d->set_parent (note_p, Y_AXIS);
-         announce_grob (d,0);
+         announce_grob (d, SCM_EOL);
          dot_p_arr_.push (d);
        }
 
@@ -241,7 +242,7 @@ Completion_heads_engraver::process_music ()
          note_p->set_grob_property ("note-character", ly_str02scm (s));
        }
       
-      announce_grob (note_p,req);
+      announce_grob (note_p,req->self_scm ());
       note_p_arr_.push (note_p);
     }
 
index faec3cd556d0df940823e532484188f66aa95587..272373a0c0467bab3144339ddaae6fc4ac124955 100644 (file)
@@ -125,7 +125,7 @@ Custos_engraver::create_custos ()
   SCM basicProperties = get_property ("Custos");
   Item* custos = new Item (basicProperties);
   
-  announce_grob (custos, 0);
+  announce_grob(custos, SCM_EOL);
   custos_arr_.push (custos);
   
   return custos;
index 8233c3ec0b827491053099a795037f5cd005e5c7..22609e6e66b26853638f5fe5d7b3cfd7b170e235 100644 (file)
@@ -65,7 +65,7 @@ Dot_column_engraver::acknowledge_grob (Grob_info info)
       if (!dotcol_)
        {
          dotcol_ = new Item (get_property ("DotColumn"));
-         announce_grob (dotcol_, 0);
+         announce_grob(dotcol_, SCM_EOL);
        }
 
       Dot_column::add_head (dotcol_, info.grob_l_);
index a021d21fdfb36324b1295ddb34272cd040be9d16..3fe710acac0adee780e0c6804527a2d48593c27a 100644 (file)
@@ -145,7 +145,7 @@ Dynamic_engraver::process_music ()
          Music * rq = accepted_spanreqs_drul_[START];
          if (script_req_l_)
            rq =  script_req_l_ ;
-         announce_grob (line_spanner_, rq);
+         announce_grob(line_spanner_, rq->self_scm());
                         
 
        }
@@ -179,7 +179,7 @@ Dynamic_engraver::process_music ()
 
       Axis_group_interface::add_element (line_spanner_, script_p_);
 
-      announce_grob (script_p_, script_req_l_);
+      announce_grob(script_p_, script_req_l_->self_scm());
     }
 
   if (accepted_spanreqs_drul_[STOP])
@@ -276,7 +276,7 @@ Dynamic_engraver::process_music ()
 
          add_bound_item (line_spanner_, cresc_p_->get_bound (LEFT));
          
-         announce_grob (cresc_p_, accepted_spanreqs_drul_[START]);
+         announce_grob(cresc_p_, accepted_spanreqs_drul_[START]->self_scm());
        }
     }
 }
@@ -409,7 +409,12 @@ Dynamic_engraver::acknowledge_grob (Grob_info i)
     }
 }
 ENTER_DESCRIPTION(Dynamic_engraver,
-/* descr */       "",
+/* descr */       "
+This engraver creates hairpins, dynamic texts, and their vertical
+alignments.  The symbols are collected onto a DynamicLineSpanner grob
+which takes care of vertical positioning.  
+",
+                 
 /* creats*/       "DynamicLineSpanner DynamicText Hairpin TextSpanner",
 /* acks  */       "note-column-interface",
 /* reads */       "",
index 55929a854b0ac2498c13a9777313502773dbe37f..449ebd0ce07aa8882d9dea3b563e351d7d7cec8f 100644 (file)
@@ -21,20 +21,17 @@ Engraver::announce_grob (Grob_info inf)
 }
 
 void
-Engraver::announce_grob (Grob* e, Music *m)
+Engraver::announce_grob (Grob* e, SCM cause)
 {
   /*
     TODO: junk grob-info, and make a cause grob-property to store
     `causes' generically.
   */
   
-  if (m && store_locations_global_b 
-      && m->origin ()->location_str ().length_i ())
-    {
-      e->set_grob_property ("origin", m->get_mus_property ("origin"));
-    }
-  
-  Grob_info i (e, m ? m->self_scm () : SCM_UNDEFINED);
+  if (unsmob_music (cause) || unsmob_grob (cause))
+    e->set_grob_property ("cause", cause);
+
+  Grob_info i (e);
   if (!i.origin_trans_l_)
     i.origin_trans_l_ = this;
   daddy_grav_l ()->announce_grob (i);
index af30c3ed0fd9e188e606ab5a61fed9813b208bf3..3d78b8b772debb9ab94bda39436c368059d51864 100644 (file)
@@ -113,7 +113,7 @@ Extender_engraver::process_music ()
 
 
       Lyric_extender::set_textitem (extender_p_, LEFT, last_lyric_l_);
-      announce_grob (extender_p_, req_l_);
+      announce_grob(extender_p_, req_l_->self_scm());
     }
 }
 
index de933b472dd8dcc95b938c2f315b727f15c796df..624490ac57be1dcc08f63f3d2491264b942d28c2 100644 (file)
@@ -59,13 +59,13 @@ Figured_bass_engraver::process_music ()
   if (rest_req_)
     {
       figure_ = new Item (get_property ("BassFigure"));
-      announce_grob (figure_, rest_req_); // todo
+      announce_grob(figure_, rest_req_->self_scm()); // todo
       figure_->set_grob_property ("text" , ly_str02scm ("-"));
     }
   else if (figures_.size ())
     {
       figure_ = new Item (get_property ("BassFigure"));
-      announce_grob (figure_, figures_[0]); // todo
+      announce_grob(figure_, figures_[0]->self_scm()); // todo
       SCM flist = SCM_EOL;
       for (int i = 0; i < figures_.size (); i++)
        {
index 4adba9d5716645900d76427db099c6893afd61da..45196adb9fe5ce5687680858f311e6d2bc48d1ab 100644 (file)
@@ -206,7 +206,7 @@ Fingering_engraver::make_script (Direction d, Music *r,Axis a,  int i)
     */
     fingering->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
                
-  announce_grob (fingering, r);
+  announce_grob (fingering, r->self_scm());
   fingerings_.push (fingering);
 }
 
index 93fb16aeee58ca95acda43d8835642b6cbfe95bc..4cc90129c4cec169bd1bd85d92a2e0004753df11 100644 (file)
@@ -5,16 +5,15 @@
 
   (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
-
+#include "grob.hh"
 #include "grob-info.hh"
 #include "request.hh"
 #include "translator.hh"
 #include "translator-group.hh"
 
-Grob_info::Grob_info (Grob*s_l, SCM c)
+Grob_info::Grob_info (Grob*s_l)
 {
   grob_l_ = s_l;
-  cause_ = c; 
   origin_trans_l_ = 0;  
 }
 
@@ -22,14 +21,15 @@ Grob_info::Grob_info (Grob*s_l, SCM c)
 Grob_info::Grob_info ()
 {
   grob_l_ = 0;
-  cause_ = SCM_EOL;
   origin_trans_l_ = 0;
 }
 
 Music*
 Grob_info::music_cause ()
+  
 {
-  return unsmob_music (cause_);
+  SCM cause = grob_l_->get_grob_property ("cause"); 
+  return unsmob_music (cause);
 }
 
 Link_array<Translator>
index 2143ea9d9a0fd62fbb54f27018898ce558d864ef..1697c82849924099fb148b11ae43b2553f7dc3f0 100644 (file)
@@ -105,7 +105,7 @@ Hyphen_engraver::create_grobs ()
       hyphen_p_ = new Spanner (get_property ("LyricHyphen"));
 
       Hyphen_spanner (hyphen_p_).set_textitem (LEFT, last_lyric_l_);
-      announce_grob (hyphen_p_, req_l_);
+      announce_grob(hyphen_p_, req_l_->self_scm());
     }
 }
 
index be00c3b1f5bf296b40d5e007521063e5bb28bbce..a4b2f73a46c39a55e257a26ad4950f7d8be1e386 100644 (file)
@@ -45,7 +45,7 @@ protected:
   /**
     Announce element. Default: pass on to daddy. Utility
     */
-  virtual void announce_grob (Grob*, Music*);
+  virtual void announce_grob (Grob*, SCM cause);
   virtual void announce_grob (Grob_info);
   virtual void process_music ();
 
index 17fda7ff0c22d236ebff7b095a2c74833939b7f6..bba4bc124844dc0a0b5b8e7076eaa88a5ecc1b4b 100644 (file)
@@ -16,8 +16,6 @@
 
 /**
   Data container for broadcasts.
-
-  TODO: Store this in element info! 
   */
 struct Grob_info {
   Translator * origin_trans_l_;
@@ -25,17 +23,11 @@ struct Grob_info {
 
   Grob * grob_l_;
 
-  /*
-    Notice that CAUSE is not GC protected ; this might be a cause for
-    GC errors if you don't use music or grobs as a cause.
-  */
-  SCM cause_;
 public:
   Music * music_cause ();
   Link_array<Translator> origin_trans_l_arr (Translator*) const;
-  Grob_info (Grob*, SCM);
+  Grob_info (Grob*);
   Grob_info ();
 };
 
-
 #endif // STAFFELEMINFO_HH
index 6770e770c192e612579f5e45b12fea92b8184ea5..3490638d0bd12f2b39f1cbda04c30d5091c88426 100644 (file)
@@ -18,8 +18,9 @@
 class Timing_translator : public virtual Translator
 {
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Timing_translator ();
+  //  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Timing_translator);
+
 
 protected: 
   virtual void initialize ();
index 092cbab5e1cf37130e21b968f5407caf9dc7bf60..6621344a95d78aa81bfb803cf9e9da0f8d184173 100644 (file)
@@ -33,10 +33,11 @@ class Translator_group : public virtual Translator {
   int iterator_count_;
 
   friend class Interpretation_context_handle;
+  SCM add_translator (SCM, Translator*);
+
 protected:
   ~Translator_group ();
 public:
-  SCM add_translator (SCM, Translator*);
   void execute_single_pushpop_property (SCM prop, SCM sym, SCM val);
   SCM internal_get_property (SCM name_sym) const;
 
@@ -49,7 +50,9 @@ public:
   VIRTUAL_COPY_CONS (Translator);
   Translator_group (Translator_group const &);
   Translator_group ();
-  void add_group_translator (Translator *trans_p);
+  void add_fresh_group_translator (Translator *trans_p);
+  void add_fresh_simple_translator (Translator *trans_p);  
+  void add_used_group_translator (Translator *trans_p);
   
   /// Score_register = 0, Staff_registers = 1, etc)
   Translator_group* ancestor_l (int l=1);
index 11758a82c8e43c1ff93ee2bef972722ddf081359..18fc78f86f7a77d9f6a7fc24a15733bde506656e 100644 (file)
@@ -70,7 +70,7 @@ Instrument_name_engraver::create_text (SCM txt)
       if (delim_)
         text_->set_parent (delim_, Y_AXIS);
       
-      announce_grob (text_,0);
+      announce_grob (text_, SCM_EOL);
     }
 }
 
index 566516d297583764ec17369c0a2fadd891965768..83777ae87f4dd2f69ccd8c2fd179a1ae143aa335 100644 (file)
@@ -71,7 +71,9 @@ Key_engraver::create_key (bool def)
 
       Staff_symbol_referencer::set_interface (item_p_);
       Key_item::set_interface (item_p_);
-      announce_grob (item_p_,keyreq_l_);
+
+
+      announce_grob(item_p_, keyreq_l_ ? keyreq_l_->self_scm() : SCM_EOL);
     }
 
   if (!def)
index 583ab3a36eced4fbb9d380a9a4cb7e1f3c247d7e..9c52630751d0bce98cd7ea16bb4a2e15f0ecae46 100644 (file)
@@ -50,7 +50,7 @@ Line_group_engraver_group::initialize ()
     = unsmob_grob (get_property ("currentCommandColumn")); 
   staffline_p_->set_bound (LEFT,it);
   
-  Engraver::announce_grob (staffline_p_,0);
+  Engraver::announce_grob (staffline_p_, SCM_EOL);
 }
 
 void
index 2364bd48df8d1e7da6060a405a483294efb0c5b8..279fc1f141eff02de91c77d9141b4415510a0bce 100644 (file)
@@ -73,7 +73,7 @@ Lyric_engraver::create_grobs ()
       
       text_p_->translate_axis (0.66, X_AXIS);
       
-      announce_grob (text_p_, req_l_);
+      announce_grob(text_p_, req_l_->self_scm());
       req_l_ = 0;
     }
 }
index bb9453a128121309fd927a2c877a23bf36a223cf..b5075d84698eee8f035093fc2fbc2f20108aac8f 100644 (file)
@@ -91,7 +91,7 @@ Mark_engraver::create_items (Request *rq)
 
   Side_position_interface::set_axis (text_p_, Y_AXIS);
 
-  announce_grob (text_p_, rq);
+  announce_grob(text_p_, rq->self_scm());
 }
 
 
index 035f5f8924959af03ea4e81d6b110b332c7a81ec..ba7cdafbc730b8335fb8cca6cb487915e2f6eb11 100644 (file)
@@ -103,7 +103,7 @@ Multi_measure_rest_engraver::process_music ()
       Multi_measure_rest::set_interface (mmrest_p_);
       Staff_symbol_referencer::set_interface (mmrest_p_);
 
-      announce_grob (mmrest_p_, busy_span_req_l_);
+      announce_grob(mmrest_p_, busy_span_req_l_->self_scm());
       start_measure_i_
        = gh_scm2int (get_property ("currentBarNumber"));
     }
index c37e613432006696942f7e17939605efbed3c8a9..c8533b8e48835c0ecb4f168a87f18bdd7ebd9024 100644 (file)
@@ -120,7 +120,8 @@ Note_head_line_engraver::create_grobs ()
       line_->set_parent (Staff_symbol_referencer::staff_symbol_l (last_head_),
                         Y_AXIS);
          
-      announce_grob (line_, last_req_);
+      SCM c = last_req_? last_req_->self_scm () : SCM_EOL;
+      announce_grob(line_, c);
       last_req_ = 0;   
 
       follow_ = false;
index aec4c756c821e6312b0558caa68f8beb63ccb4d5..b6fd727f5b9f84e18463dce8831ec6bb4dc7132d 100644 (file)
@@ -83,7 +83,7 @@ Note_heads_engraver::process_music ()
            d->set_grob_property ("dot-count", gh_int2scm (dur.dot_count ()));
 
          d->set_parent (note_p, Y_AXIS);
-         announce_grob (d,0);
+         announce_grob (d, SCM_EOL);
          dot_p_arr_.push (d);
        }
 
@@ -104,7 +104,7 @@ Note_heads_engraver::process_music ()
          note_p->set_grob_property ("note-character", ly_str02scm (s));
        }
       
-      announce_grob (note_p,req);
+      announce_grob (note_p,req->self_scm());
       note_p_arr_.push (note_p);
     }
 }
index 076cff67894c4eeb65d133dd0a5383fb071b58e2..90eb585df230c33e54e4c6014c9cea3aed52c808 100644 (file)
@@ -50,7 +50,7 @@ Note_name_engraver::create_grobs ()
     {
       Item * t = new Item (get_property ("NoteName"));
       t->set_grob_property ("text", ly_str02scm (s.ch_C ()));
-      announce_grob (t, req_l_arr_[0]);
+      announce_grob(t, req_l_arr_[0]->self_scm());
       texts_.push (t);
     }
 }
index 86ad4b367526b56090fa050af053f21b74aeaea5..7c6b0d6c7091149e3ad72b899cd7a9bb67ce1f3f 100644 (file)
@@ -103,7 +103,7 @@ Part_combine_music_iterator::change_to (Music_iterator *it, String to_type,
        Translator_group * dest = 
          it->report_to_l ()->find_create_translator_l (to_type, to_id);
        current->remove_translator_p (last);
-       dest->add_group_translator (last);
+       dest->add_used_group_translator (last);
       }
     else
       {
index f818eb9e33398fbf029f4829546c28e6e3bd15b7..6c9b69272ccccf08d3afa4dfac474b9530605205 100644 (file)
@@ -146,7 +146,7 @@ Percent_repeat_engraver::process_music ()
       if (repeat_sign_type_ == BEAT)
        {
          beat_slash_ = new Item (get_property ("RepeatSlash"));
-         announce_grob (beat_slash_, repeat_);
+         announce_grob(beat_slash_, repeat_->self_scm());
        }
       else if (repeat_sign_type_ == MEASURE)
        {
@@ -155,13 +155,13 @@ Percent_repeat_engraver::process_music ()
          perc_p_ = new Spanner (get_property ("PercentRepeat"));
          SCM col =get_property ("currentCommandColumn");
          perc_p_->set_bound (LEFT, unsmob_grob (col));
-         announce_grob (perc_p_, repeat_);
+         announce_grob(perc_p_, repeat_->self_scm());
        }
       else if (repeat_sign_type_ == DOUBLE_MEASURE)
        
        {
          double_percent_ = new Item (get_property ("DoublePercentRepeat"));
-         announce_grob (double_percent_, repeat_);
+         announce_grob(double_percent_, repeat_->self_scm());
 
       /*
        forbid breaks on a % line. Should forbid all breaks, really.
index dc3e3f35de6e913575140b83ad8ad7680a1d0f5e..f51f9473b8e2e71b1e32fff18084b9974f13da04 100644 (file)
@@ -155,7 +155,7 @@ Phrasing_slur_engraver::create_grobs ()
            }
          start_phrasing_slur_l_arr.push (phrasing_slur);
          requests_arr_.push (phrasing_slur_req_l);
-         announce_grob (phrasing_slur, phrasing_slur_req_l);
+         announce_grob(phrasing_slur, phrasing_slur_req_l->self_scm());
        }
     }
   for (int i=0; i < start_phrasing_slur_l_arr.size (); i++)
index a4f53899492749dae0fa68a0d447074f9df959eb..36fcd1a732833539ca41450c84f14b0147b01aa3 100644 (file)
@@ -170,10 +170,12 @@ Piano_pedal_engraver::create_grobs ()
          p->item_p_ = new Item (get_property (propname.ch_C ()));
          p->item_p_->set_grob_property ("text", s);
 
-         announce_grob (p->item_p_,
-                           p->req_l_drul_[START]
-                           ? p->req_l_drul_[START]
-                           : p->req_l_drul_[STOP]);
+
+         Music * c =  p->req_l_drul_[START]
+           ? p->req_l_drul_[START]
+           : p->req_l_drul_[STOP];
+         announce_grob (p->item_p_, c ?  c->self_scm() : SCM_EOL);
+                       
        }
       p->req_l_drul_[START] = 0;
       p->req_l_drul_[STOP] = 0;
index 15f86571f79a28b311fd958ae0fd9e1bf67697e9..e900701dbf4130a24d260cb44ddd8ef08ed654d3 100644 (file)
@@ -122,7 +122,7 @@ Porrectus_engraver::create_grobs ()
          Porrectus::set_left_head(porrectus_p_, left_head);
          Porrectus::set_right_head(porrectus_p_, right_head);
          porrectus_p_arr_.push (porrectus_p_);
-         announce_grob (porrectus_p_, porrectus_req_l_);
+         announce_grob(porrectus_p_, porrectus_req_l_->self_scm());
 
          past_notes_pq_. insert (right_heads_[i]);
          left_heads_.del (i);
index 4e73f1dc466d8b74532791269c4af19673594ed3..7bdfbbf9276dccb0bbd3ca43944bbd161d44bf12 100644 (file)
@@ -40,7 +40,7 @@ Rest_collision_engraver::create_grobs ()
 
   rest_collision_p_ = new Item (get_property ("RestCollision"));
   Rest_collision::set_interface (rest_collision_p_);
-  announce_grob (rest_collision_p_, 0);
+  announce_grob(rest_collision_p_, SCM_EOL);
   for (int i=0; i< note_column_l_arr_.size (); i++)
     Rest_collision::add_column (rest_collision_p_,note_column_l_arr_[i]);
 }
index b64d874facf3d418de7fe90d03db11a7d7ea6e2f..72582135c2ada844919efd9b97046edd0781c3e0 100644 (file)
@@ -84,10 +84,10 @@ Rest_engraver::create_grobs ()
          Rhythmic_head::set_dots (rest_p_, dot_p_);
          dot_p_->set_parent (rest_p_, Y_AXIS);
          dot_p_->set_grob_property ("dot-count", gh_int2scm (dots));
-         announce_grob (dot_p_,0);
+         announce_grob (dot_p_, SCM_EOL);
        }
 
-      announce_grob (rest_p_, rest_req_l_);
+      announce_grob(rest_p_, rest_req_l_->self_scm());
     }
 }
 
index 55462e76a970b4cba3b742d8523524b727d18a69..32b3061e7e1f5a1703ec423262317496816de7ed 100644 (file)
@@ -86,12 +86,12 @@ Rhythmic_column_engraver::create_grobs ()
        {
          note_column_ = new Item (get_property ("NoteColumn"));
          Note_column::set_interface (note_column_);
-         announce_grob (note_column_, 0);
+         announce_grob(note_column_, SCM_EOL);
 
 
          spacing_ = new Item (get_property ("NoteSpacing"));
          spacing_->set_grob_property ("left-items", gh_cons (note_column_->self_scm (), SCM_EOL));
-         announce_grob (spacing_, 0);
+         announce_grob(spacing_, SCM_EOL);
 
          if (last_spacing_)
            {
index 76ecf79872545323a3d145e54feca3974fe7d0e2..69e6ca905e8619cfe386decae8610ce5e049cc4a 100644 (file)
@@ -46,10 +46,10 @@ Score_engraver::make_columns ()
   
       command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
 
-      Grob_info i1 (command_column_l_, SCM_EOL);
+      Grob_info i1 (command_column_l_);
       i1.origin_trans_l_ = this;
 
-      Grob_info i2 (musical_column_l_, SCM_EOL);
+      Grob_info i2 (musical_column_l_);
       i2.origin_trans_l_ = this;
 
       announce_grob (i1);
@@ -124,7 +124,6 @@ Score_engraver::one_time_step ()
       process_music ();
       announces ();
     }
-
   
   stop_translation_timestep ();
   check_removal ();
index df4ca98b880aa4a5f5dfad3d8977f37078094deb..50cbee9c91e91033cd93c34bf73d8fd381e6ad64 100644 (file)
@@ -72,7 +72,7 @@ Script_column_engraver::create_grobs ()
   if (!scol_p_ && script_l_arr_.size () > 1)
     {
       scol_p_ = new Item (get_property ("ScriptColumn"));
-      announce_grob (scol_p_, 0);
+      announce_grob(scol_p_, SCM_EOL);
     }
 
   if (scol_p_)
index 1d0977a487429032020d573aee96f4b6faaff8a3..7b38dbddf203bf6fd2a1f4cef93e87dbfc0f8b80 100644 (file)
@@ -108,7 +108,7 @@ Script_engraver::process_music ()
   
       script_p_arr_.push (p);
       
-      announce_grob (p, l);
+      announce_grob (p, l->self_scm());
     }
 }
 
index b09b79f3d73e4fd80c08505ab784713c9a724198..8c38cc0c269856c84bc8abacdbd3071c51f46652 100644 (file)
@@ -69,7 +69,7 @@ Separating_line_group_engraver::initialize ()
 {
   sep_span_p_ = new Spanner (get_property ("SeparatingGroupSpanner"));
 
-  announce_grob (sep_span_p_, 0);
+  announce_grob(sep_span_p_, SCM_EOL);
   sep_span_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
 }
 
@@ -120,7 +120,7 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
 
       if (ib)
        p_ref_->set_grob_property ("breakable", SCM_BOOL_T);
-      announce_grob (p_ref_, 0);
+      announce_grob(p_ref_, SCM_EOL);
 
       if (p_ref_ == break_malt_p_)
        {
@@ -128,7 +128,7 @@ Separating_line_group_engraver::acknowledge_grob (Grob_info i)
          current_spacings_.staff_spacing_ = it;
          it->set_grob_property ("left-items", gh_cons (break_malt_p_->self_scm (), SCM_EOL));
          
-         announce_grob (it, 0);
+         announce_grob(it, SCM_EOL);
 
          if (int i = last_spacings_.note_spacings_.size ())
            {
index 90977e6a5578cd3b7ed79324a72b288ca89221e3..9bf8e6a29ec4674f24559c46c68695626589f190 100644 (file)
@@ -164,7 +164,7 @@ Slur_engraver::create_grobs ()
            }
          start_slur_l_arr.push (slur);
          requests_arr_.push (slur_req_l);
-         announce_grob (slur, slur_req_l);
+         announce_grob(slur, slur_req_l->self_scm());
        }
     }
   for (int i=0; i < start_slur_l_arr.size (); i++)
index 678b8da55bd00320cb61e845961433f07e7df4bb..874f6b5e048adfa9bdfd1b82e01c11afd621a7ea 100644 (file)
@@ -80,7 +80,7 @@ Spacing_engraver::initialize ()
   spacing_p_  =new Spanner (get_property ("SpacingSpanner"));
   Spacing_spanner::set_interface (spacing_p_);
   spacing_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));  
-  announce_grob (spacing_p_, 0);
+  announce_grob(spacing_p_, SCM_EOL);
 }
 
 void
index e3165de03a1fbdef9cefb3ca3a69139fdbcdc99c..0753b2c245119cd06333e5b918f9348fd54a4f0e 100644 (file)
@@ -65,7 +65,7 @@ Span_arpeggio_engraver::create_grobs ()
       && to_boolean (get_property ("connectArpeggios")))
     {
       span_arpeggio_ = new Item (get_property ("Arpeggio"));
-      announce_grob (span_arpeggio_, 0);      
+      announce_grob(span_arpeggio_, SCM_EOL);      
     }
 }
 
index e3b4778e4ef485422cefb9480e5add9279370558..5faef20a88783f1c0059ab26680201627af709e7 100644 (file)
@@ -60,7 +60,7 @@ Span_bar_engraver::acknowledge_grob (Grob_info i)
          Span_bar::set_interface (spanbar_p_);
          spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
 
-         announce_grob (spanbar_p_,0);
+         announce_grob (spanbar_p_, SCM_EOL);
        }
     }
 }
index b12d73b3ae7f5eaf67a5062f4430de35972a21d6..dff7448e1230a9d6eedca05636c630574540c9a3 100644 (file)
@@ -47,7 +47,7 @@ Staff_symbol_engraver::initialize ()
   
   span_p_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
 
-  announce_grob (span_p_, 0);
+  announce_grob(span_p_, SCM_EOL);
 }
 
 void
index a80f0141efe8635d6def456e3142beb488c4c046..3978459c166cdf89c03ba7c110bf3f23714f2c0c 100644 (file)
@@ -84,7 +84,7 @@ Stanza_number_engraver::create_text (SCM txt)
     {
       text_ = new Item (get_property ("StanzaNumber"));
       text_->set_grob_property ("text", txt);
-      announce_grob (text_,0);
+      announce_grob (text_, SCM_EOL);
     }
 }
 
index 3d7d879bb837670711d604d911ccc1aa4f060024..cdf1a6b5d48ee34b695f299d46730514f0f52bbf 100644 (file)
@@ -91,7 +91,7 @@ Stem_engraver::acknowledge_grob (Grob_info i)
                  tremolo_p_ = new Item (get_property ("StemTremolo"));
                  Stem_tremolo::set_interface (tremolo_p_);
 
-                 announce_grob (tremolo_p_, tremolo_req_l_);
+                 announce_grob(tremolo_p_, tremolo_req_l_->self_scm());
                  /*
                    The number of tremolo flags is the number of flags of
                    the tremolo-type minus the number of flags of the note
@@ -109,7 +109,7 @@ Stem_engraver::acknowledge_grob (Grob_info i)
          /*
            We announce the cause of the head as cause of the stem.
            The stem needs a rhythmic structure to fit it into a beam.  */
-         announce_grob (stem_p_, i.music_cause ());
+         announce_grob(stem_p_, i.music_cause ()->self_scm());
        }
 
       if (Stem::flag_i (stem_p_) != duration_log)
index 2b509be6acd2ee164bda439bf5882bcc6febf305..fe40a06b84d19c51f7e7f45d13e35f05517ee971 100644 (file)
@@ -77,7 +77,7 @@ System_start_delimiter_engraver::initialize ()
   delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
 
 
-  announce_grob (delim_,0);
+  announce_grob (delim_, SCM_EOL);
 }
 
 void
index e795c9e6770936aea866caf85b272fb33cf229a3..3a463407f2d35ac0e2078c7bc02e13f2a1e93c5d 100644 (file)
@@ -134,7 +134,7 @@ Text_engraver::create_grobs ()
         */
        text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F);
                
-      announce_grob (text, r);
+      announce_grob (text, r->self_scm ());
       texts_.push (text);
     }
 }
index 043a9affa09f50a00e7fdd7fa0e1b13c06264a3d..f8c520b1cbaeb3ec4c508d0c724546de72128977 100644 (file)
@@ -125,7 +125,7 @@ Text_spanner_engraver::create_grobs ()
          Grob *e = unsmob_grob (get_property ("currentMusicalColumn"));
          span_->set_bound (LEFT, e);
          
-         announce_grob (span_, req_drul_[START]);
+         announce_grob (span_, req_drul_[START]->self_scm());
          req_drul_[START] = 0;
        }
     }
index aa2bee3ae6220a782f551f838c64e2d9c237a693..efae25603fb00e7eef382ca9990f78f592f0946d 100644 (file)
    TODO: Remove the dependency on musical info. We should tie on the
    basis of position and duration-log of the heads (not of the reqs).
 
-
-   TODO: figure this out: currently, this engravers ties note heads
-   that have the same Y-position (and does not look at pitch). This
-   means that we will fuck up with a clef-change. How should
-   clef-changes during ties be handled, or should they not?
-
-   
 */
 class Tie_engraver : public Engraver
 {
@@ -104,10 +97,13 @@ Tie_engraver::acknowledge_grob (Grob_info i)
 }
 
 int
-head_position_compare (Grob  *const&a,Grob  *const&b)
+head_pitch_compare (Grob  *const&a,Grob  *const&b)
 {
-  return sign (gh_scm2double (a->get_grob_property ("staff-position"))
-              - gh_scm2double (b->get_grob_property ("staff-position")));
+  Music *m1 =unsmob_music (a->get_grob_property ("cause"));
+  Music *m2 =unsmob_music (b->get_grob_property ("cause"));  
+
+  return Pitch::compare (* unsmob_pitch (m1->get_mus_property ("pitch")),
+                        * unsmob_pitch (m2->get_mus_property ("pitch")));
 }
 
 void
@@ -115,8 +111,8 @@ Tie_engraver::create_grobs ()
 {
   if (req_l_)
     {
-      now_heads_.sort (&head_position_compare);
-      stopped_heads_.sort (&head_position_compare);
+      now_heads_.sort (&head_pitch_compare);
+      stopped_heads_.sort (&head_pitch_compare);
 
       SCM head_list = SCM_EOL;
       
@@ -126,7 +122,7 @@ Tie_engraver::create_grobs ()
       while (i >= 0 && j >=0)
        {
          int comp
-           = head_position_compare (now_heads_[i], stopped_heads_[j]);
+           = head_pitch_compare (now_heads_[i], stopped_heads_[j]);
 
          if (comp)
            {
@@ -164,7 +160,7 @@ Tie_engraver::create_grobs ()
          Tie::set_head (p,RIGHT, dynamic_cast<Item*> (unsmob_grob (ly_cdr (pair))));
          
          tie_p_arr_.push (p);
-         announce_grob (p, req_l_);
+         announce_grob(p, req_l_->self_scm());
        }
       else for (SCM s = head_list; gh_pair_p (s); s = ly_cdr (s))
        {
@@ -175,7 +171,7 @@ Tie_engraver::create_grobs ()
          Tie::set_head (p, RIGHT, dynamic_cast<Item*> (unsmob_grob (ly_cdar (s))));
          
          tie_p_arr_.push (p);
-         announce_grob (p, req_l_);
+         announce_grob(p, req_l_->self_scm());
        }
 
       if (tie_p_arr_.size () > 1 && !tie_column_p_)
@@ -184,7 +180,7 @@ Tie_engraver::create_grobs ()
          Tie_column::set_interface (tie_column_p_);
          for (int i = tie_p_arr_.size (); i--;)
            Tie_column::add_tie (tie_column_p_,tie_p_arr_ [i]);
-         announce_grob (tie_column_p_, 0);
+         announce_grob(tie_column_p_, SCM_EOL);
        }
     }
 }
index f352b498f0e84ae87391181d09fb8098136945d5..5e85cf3c5bbb64cef5fd9c176f35f17b774a2554 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  time_signature-reg.cc -- implement Time_signature_engraver
+  time-signature-engraver.cc -- implement Time_signature_engraver
 
   source file of the GNU LilyPond music typesetter
 
@@ -9,11 +9,8 @@
 #include "time-signature.hh"
 #include "command-request.hh"
 #include "engraver.hh"
-
-
 #include "engraver-group-engraver.hh"
 
-
 /**
   generate time_signatures. 
   */
@@ -27,7 +24,6 @@ protected:
   virtual void create_grobs ();
 public:
   TRANSLATOR_DECLARATIONS(Time_signature_engraver);
-
 };
 
 
@@ -51,13 +47,10 @@ Time_signature_engraver::create_grobs ()
       time_signature_p_->set_grob_property ("fraction",fr);
 
       if (time_signature_p_)
-       announce_grob (time_signature_p_, 0);
+       announce_grob(time_signature_p_, SCM_EOL);
     }
-  
 }
 
-
-
 void
 Time_signature_engraver::stop_translation_timestep ()
 {
@@ -67,9 +60,6 @@ Time_signature_engraver::stop_translation_timestep ()
       time_signature_p_ =0;
     }
 }
-
-
-
  
 
 ENTER_DESCRIPTION(Time_signature_engraver,
index 2504cd73987f756df10b26e1843263ac824453c1..edd5505bc4bd31c627f02d75dd093d644dee1b0a 100644 (file)
@@ -19,7 +19,6 @@
 void
 Timing_translator::stop_translation_timestep ()
 {
-  
   Translator *t = this;
   Global_translator *global_l =0;
   do
@@ -155,3 +154,4 @@ Timing_translator::start_translation_timestep ()
   daddy_trans_l_->set_property ("measurePosition", measposp.smobbed_copy ());
 }
 
+ENTER_DESCRIPTION (Timing_translator, "","","","","" );
index 5ddf433ef9ce827113fb855a7d15b4ec4c342ed0..bd9d1d1002ecba3ed41960ae05773a19ec6390e3 100644 (file)
@@ -62,28 +62,45 @@ Translator_group::check_removal ()
     }
 }
 
-
 SCM
 Translator_group::add_translator (SCM list, Translator *t)
 {
+  /*
+    Must append, since list ordering must be preserved.
+   */
   list = gh_append2 (list, gh_cons (t->self_scm (), SCM_EOL));
   t->daddy_trans_l_ = this;
   t->output_def_l_ = output_def_l_;
-  if (Translator_group*tg = dynamic_cast<Translator_group*> (t))
-    {
-      unsmob_translator_def (tg->definition_)->apply_property_operations (tg);
-    }
-  
-  t->initialize ();
+
   return list;
 }
+
 void
-Translator_group::add_group_translator (Translator *t)
+Translator_group::add_fresh_simple_translator (Translator*t)
+{
+  simple_trans_list_ = add_translator (simple_trans_list_, t);
+  t->initialize ();
+}
+
+void
+Translator_group::add_used_group_translator (Translator *t)
 {
   trans_group_list_ = add_translator (trans_group_list_,t);
 }
 
 
+void
+Translator_group::add_fresh_group_translator (Translator*t)
+{
+  Translator_group*tg = dynamic_cast<Translator_group*> (t);
+  assert (tg);
+
+  trans_group_list_ = add_translator (trans_group_list_,t); 
+  unsmob_translator_def (tg->definition_)->apply_property_operations (tg);
+  t->initialize ();
+  
+}
+
 
 bool
 Translator_group::removable_b () const
@@ -132,7 +149,7 @@ Translator_group::find_create_translator_l (String n, String id)
 
          if (i == path.size () -1)
            new_group->id_str_ = id;      
-         current->add_group_translator (new_group);
+         current->add_fresh_group_translator (new_group);
          current = new_group;
        }
 
@@ -233,7 +250,7 @@ Translator_group::get_default_interpreter ()
          t = unsmob_translator_def (this->definition_);
        }
       Translator_group *tg = t->instantiate (output_def_l_);
-      add_group_translator (tg);
+      add_fresh_group_translator (tg);
 
       if (!tg->is_bottom_translator_b ())
        return tg->get_default_interpreter ();
index dc42574c3844dfd3b7da5ee9a67c0ddcf05a23a7..f3a73c8e10ccdfc2636f964a099719bcb8611ac6 100644 (file)
@@ -89,7 +89,7 @@ Tuplet_engraver::create_grobs ()
          glep->set_grob_property ("text", t);
        }
       
-      announce_grob (glep, time_scaled_music_arr_ [i]);
+      announce_grob(glep, time_scaled_music_arr_ [i]->self_scm());
     }
 }
 
index 3faa77f3d0783ac24a3ab6055304bd42e229bb47..444168570f362b97806f91bdcb8e2e6713331c80 100644 (file)
@@ -35,7 +35,7 @@ Vertical_align_engraver::initialize ()
 {
   valign_p_ =new Spanner (get_property ("VerticalAlignment"));
   valign_p_->set_bound (LEFT,unsmob_grob (get_property ("currentCommandColumn")));
-  announce_grob (valign_p_ , 0);
+  announce_grob(valign_p_ , SCM_EOL);
 }
 
 void
index d83272ba2b569ba9cf635f21d027ab60e5d5d711..411cbc07da0d2d428014e4b30815448eb135f6d3 100644 (file)
@@ -147,7 +147,7 @@ Volta_engraver::create_grobs ()
 
       volta_span_p_ = new Spanner (get_property ("VoltaBracket"));
       Volta_spanner::set_interface (volta_span_p_);
-      announce_grob (volta_span_p_,0);
+      announce_grob (volta_span_p_, SCM_EOL);
       volta_span_p_->set_grob_property ("text", start_str_);
     }
 }
index 26cd85e811d9268ff4cfca11b6a663f0666dcd57..8acac587dadc5a93b82918dd8a49c47d76855315 100644 (file)
@@ -20,6 +20,7 @@ StaffContext=\translator {
        \consists "Separating_line_group_engraver"      
        SeparatingGroupSpanner \override #'spacing-procedure
          =  #Separating_group_spanner::set_spacing_rods_and_seqs
+       \consists "Dot_column_engraver"
 
        \consists "Clef_engraver"
        \consists "Key_engraver"
@@ -128,7 +129,6 @@ VoiceContext = \translator {
        
        \consists "Breathing_sign_engraver"
        % \consists "Rest_engraver"
-       \consists "Dot_column_engraver"
        \consists "Stem_engraver"
        \consists "Beam_engraver"
        \consists "Auto_beam_engraver"
index 97c6638c153950a50972125e0493874c0870d3f0..cd7700b55af440cd3e19848724254b3346fe7368 100644 (file)
@@ -115,8 +115,10 @@ ScoreContext = \translator {
        \accepts ChoirStaff
        \accepts RhythmicStaff
        \accepts ChordNames
-       \consists "Swallow_performer"
 
+       \consists "Timing_translator"
+       \consists "Swallow_performer"
+       
        dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
        instrumentEqualizer = #default-instrument-equalizer
 }
index fa64366d99ad8534c0a509352ef2b433d33374c8..54b32e4d41943db08f517dd7f0dcef2b3cb44a48 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.5.29
-Entered-date: 01FEB02
+Version: 1.5.30
+Entered-date: 04FEB02
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.5.29.tar.gz 
+       1000k lilypond-1.5.30.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.5.29.tar.gz 
+       1000k lilypond-1.5.30.tar.gz 
 Copying-policy: GPL
 End
index 4cd140015df5f3c76cf5c6bc595db81609791245..c6b505226eb472f5d3632ab5022e587b72719ee5 100644 (file)
@@ -1,5 +1,5 @@
 %define name lilypond
-%define version 1.5.29
+%define version 1.5.30
 %define release 1mdk
 
 Name: %{name}
index 85fcdfba5abf1a1aa28be5dd72f64df7d56ca065..1a0a60da4c945e9f0d2d62c8fe90c79faf601f33 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.5.29
+Version: 1.5.30
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.29.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
 Summary: Create and print music notation 
 URL: http://www.lilypond.org/
 BuildRoot: /tmp/lilypond-install
index 6381982af8af8a3a5cbd18b696459350ef5f99a1..83a1b979bfbdf7d7b4afe0a6b169290df56c3749 100644 (file)
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.5.29
+Version: 1.5.30
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.29.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
index b0e2cab0f2d8accf37bf64f536e9ebad60183038..9e24390594de359ced0b7de39eb504240c1fd3fc 100644 (file)
@@ -354,7 +354,7 @@ def draw_slash(expr hwid_hash) =
 enddef;
 
 fet_beginchar("Whole slashhead","0slash","wholeslashhead")
-       draw_slash(staff_space#);
+       draw_slash(staff_space#);
 fet_endchar;
 
 fet_beginchar("Half slashhead","1slash","halfslashhead")
index bf5f35f9dca9cd6dd3048e0c26c21b2980b17e3b..ea731b477ce5c6c008dc8b8f0512b614fefe8aef 100644 (file)
@@ -18,7 +18,9 @@
     ))
 
 
-;;; WARNING: the meta field should be the last one. 
+;;; WARNING: the meta field should be the last one.
+
+;; TODO: junk the meta field in favor of something more compact?
 (define all-grob-descriptions
   `(
     (Accidentals . (
 
 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
 
+
+
 ;  (display  (map pair? all-grob-descriptions))
 
+
+;; make sure that \property Foo.Bar =\turnOff doesn't complain
+
+(map (lambda (x) (set-object-property! (car x) 'translator-type? list?))
+     all-grob-descriptions)
index ce5f960c3fecec7ebf85060bdb9213d8cc30bb75..62ac4dfbcaefca330fa45c72d375dc1be80c7926 100644 (file)
@@ -6,7 +6,7 @@
 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 
-                                       ; should include default value?
+; should include default value?
 
 
 ;;; FIXME: naming.
index 0025dacb7ce4e444614284896fb4e220c8a54a51..a33656487755f67ef12572479e08f5fdbca2f468 100644 (file)
           "pdftex.scm"
           "c++.scm"
           "grob-property-description.scm"
-          "translator-property-description.scm"
           "context-description.scm"
           "interface-description.scm"
           "beam.scm"
           "basic-properties.scm"
           "chord-name.scm"
           "grob-description.scm"
+          "translator-property-description.scm"
           "script.scm"
           "drums.scm"
           "midi.scm"