]> git.donarmstrong.com Git - lilypond.git/commitdiff
(get_simple_trans_list):
authorhanwen <hanwen>
Sat, 10 Jan 2004 18:54:40 +0000 (18:54 +0000)
committerhanwen <hanwen>
Sat, 10 Jan 2004 18:54:40 +0000 (18:54 +0000)
new function; construct simple_trans_list_ lazily.

15 files changed:
ChangeLog
VERSION
lily/accidental-engraver.cc
lily/engraver-group-engraver.cc
lily/grob-pq-engraver.cc
lily/include/translator-group.hh
lily/include/translator.hh
lily/note-heads-engraver.cc
lily/performer-group-performer.cc
lily/score-engraver.cc
lily/timing-translator.cc
lily/translator-def.cc
lily/translator-group.cc
lily/translator.cc
scm/define-music-types.scm

index 5153e348ba6c6708c0d5acbcfe4428e9072bff38..65d186628d98024a9a8a06b32d90d8f2362ca8aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-10  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+       * lily/translator-group.cc (get_simple_trans_list): 
+       new function; construct simple_trans_list_ lazily.
+       
 2004-01-10  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * lily/paper-outputter.cc (output_scope): Check if number before
diff --git a/VERSION b/VERSION
index 0076e7ac4c61bfb1cfd7357ddaf81d6cf4f4bc31..63cc2c5fb2238b5f04c03b5912e2bfadd466335f 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,5 +2,5 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=1
 PATCH_LEVEL=8
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=hwn1
 
index b4dccfadaec01a51230bd1fc37318c816f2db9c8..87399e3db7999d02e12d50487c179e56993d3cc0 100644 (file)
@@ -82,7 +82,7 @@ static void
 set_property_on_children (Translator_group * trans, const char * sym, SCM val)
 {
   trans->set_property (sym, val);
-  for (SCM p = trans -> trans_group_list_; gh_pair_p (p); p = ly_cdr(p)) {
+  for (SCM p = trans->trans_group_list_; gh_pair_p (p); p = ly_cdr(p)) {
     Translator_group *trg =  dynamic_cast<Translator_group*> (unsmob_translator (ly_car (p)));
     set_property_on_children(trg,sym,ly_deep_copy(val));
   }
index 5cab78639a6298163c083867f4d664d81c084d8e..58fefce59a51fad47d5fbecfe327a025a610158d 100644 (file)
@@ -23,7 +23,7 @@ Engraver_group_engraver::announce_grob (Grob_info info)
 void
 Engraver_group_engraver::process_acknowledged_grobs_in_simple_children ()
 {
-  for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p))
+  for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p))
     {
       Translator * t = unsmob_translator (ly_car (p));
       Engraver * eng = dynamic_cast<Engraver*> (t);
@@ -71,7 +71,7 @@ Engraver_group_engraver::acknowledge_grobs ()
       SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED);
       if (acklist == SCM_BOOL_F)
        {
-         acklist= find_acknowledge_engravers (gh_cons (self_scm (), simple_trans_list_), meta);
+         acklist = find_acknowledge_engravers (gh_cons (self_scm (), get_simple_trans_list ()), meta);
          scm_hashq_set_x (tab, nm, acklist);
        }
 
@@ -113,7 +113,7 @@ Engraver_group_engraver::do_announces ()
 void
 Engraver_group_engraver::process_music ()
 {
-   for (SCM p = simple_trans_list_; gh_pair_p (p); p =ly_cdr (p))
+   for (SCM p = get_simple_trans_list (); gh_pair_p (p); p =ly_cdr (p))
     {
       Translator * t = unsmob_translator (ly_car (p));
       Engraver * eng = dynamic_cast<Engraver*> (t);
index 4f7208962b32bb8b0c8d64b5ed6743cce5a4c325..bf46d20166ad0edbb81e27fef6499bf37b8b0fe2 100644 (file)
@@ -117,7 +117,7 @@ Grob_pq_engraver::stop_translation_timestep ()
 void
 Grob_pq_engraver::start_translation_timestep ()
 {
- Moment now = now_mom();
 Moment now = now_mom();
 
   SCM start_busy = get_property ("busyGrobs");
   SCM busy = start_busy;
index 566e33a42f3755495cd538f50ff8b9b3db8fb748..54e355692e4588d49f98c60f6713c7b8b1bb3836 100644 (file)
@@ -38,6 +38,7 @@ class Translator_group : public virtual Translator {
 protected:
   ~Translator_group ();
 
+  virtual SCM get_simple_trans_list ();
 public:
   void execute_pushpop_property (SCM prop, SCM sym, SCM val);
   SCM internal_get_property (SCM name_sym) const;
index 9cb6e7c1718e4988c17d3fe5acd8a8f2bf7e3aa3..e23b68d7011471f18949b911f0758f1e231ca54b 100644 (file)
@@ -54,13 +54,25 @@ public:
   virtual Moment now_mom () const;  
 
   /*
-    ugh: bubbled up from Translator_group. 
+    ugh: bubbled up.
    */
-  SCM simple_trans_list_;
-  SCM trans_group_list_;
   SCM definition_;
   SCM properties_scm_;
+  SCM trans_group_list_;
+
+  virtual SCM get_simple_trans_list ();
+public:
   DECLARE_SMOBS (Translator, dummy);
+private:
+  /*
+    ugh: bubbled up from Translator_group. 
+   */
+
+protected:                     // should be private.
+  SCM simple_trans_list_;
+
+  // ugr.
+  //   friend SCM Translator_group::get_simple_trans_list ();
 
 
 public:
index 55e20f8a6e3bd16597e86f5f5013d091fd857e87..0f0c8201356c83721a9dae510c011a74add87b47 100644 (file)
@@ -30,7 +30,6 @@ public:
   TRANSLATOR_DECLARATIONS(Note_heads_engraver);
 
 protected:
-  virtual void start_translation_timestep ();
   virtual bool try_music (Music *req) ;
   virtual void process_music ();
 
@@ -113,10 +112,6 @@ Note_heads_engraver::stop_translation_timestep ()
   note_reqs_.clear ();
 }
 
-void
-Note_heads_engraver::start_translation_timestep ()
-{
-}
 
 
 ENTER_DESCRIPTION(Note_heads_engraver,
index b8f4349ef8df3b374625b587d4e3ad3862592323..74edd0236b5fa1646d1285a58eccdfef9b27a34e 100644 (file)
@@ -35,7 +35,7 @@ Performer_group_performer::announce_element (Audio_element_info info)
 void
 Performer_group_performer::create_audio_elements ()
 {
-  for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p))
+  for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p))
     {
       Translator * t = unsmob_translator (ly_car (p));
       Performer * eng = dynamic_cast<Performer*> (t);
@@ -51,7 +51,7 @@ Performer_group_performer::acknowledge_audio_elements ()
     {
       Audio_element_info info = announce_infos_[j];
 
-      for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p))
+      for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p))
        {
          Translator * t = unsmob_translator (ly_car (p));
          Performer * eng = dynamic_cast<Performer*> (t);
index 6398c0e04021b341af212c26a7dc63570ecc0b79..96968bd589c1112c167f16b51d605b078bc4e8d1 100644 (file)
@@ -88,7 +88,6 @@ Score_engraver::finish ()
    
   check_removal ();
   finalize ();
-
 }
 
 /*
index 9676e982650ff99217a38cc5f93e318fa5cdcdbc..3d83282c6c8275fbf6cf6f0563fd3ce4f38023ea 100644 (file)
@@ -52,6 +52,11 @@ Timing_translator::stop_translation_timestep ()
 void
 Timing_translator::initialize ()
 {
+
+  /*
+    move this to engraver-init.ly? 
+   */
   daddy_trans_->set_property ("timing" , SCM_BOOL_T);  
   daddy_trans_->set_property ("currentBarNumber" , gh_int2scm (1));
 
index 37bc280533f21019b0263ba667b11dca7a76da43..abe16e0b696dbfe3b6b64333d0b5b94fa70f04f5 100644 (file)
@@ -217,29 +217,6 @@ IMPLEMENT_SMOBS (Translator_def);
 IMPLEMENT_DEFAULT_EQUAL_P (Translator_def);
 
 
-static SCM
-names_to_translators (SCM namelist, Translator_group*tg)
-{
-  SCM l = SCM_EOL;
-  for (SCM s = namelist; gh_pair_p (s) ; s = ly_cdr (s))
-    {
-      Translator * t = get_translator (ly_car (s));
-      if (!t)
-       warning (_f ("can't find: `%s'", s));
-      else
-       {
-         Translator * tr = t->clone ();
-         SCM str = tr->self_scm ();
-         l = gh_cons (str, l);
-
-         tr->daddy_trans_ = tg;
-         tr->output_def_  = tg->output_def_;
-
-         scm_gc_unprotect_object (str);
-       }
-    }
-  return l;
-}
 
 
 SCM
@@ -284,12 +261,10 @@ Translator_def::instantiate (Music_output_def* md, SCM ops)
   tg->output_def_ = md;
   tg->definition_ = self_scm ();
 
-  SCM trans_names = get_translator_names (ops); 
-  tg->simple_trans_list_ = names_to_translators (trans_names, tg);
-
   return tg;
 }
 
+
 SCM
 Translator_def::clone_scm () const
 {
index 14f5321d48fe0cfa380f8a14d7e1adccb481985e..a81f9f1d5a8011aea69ea7698098cb2a1c45a575 100644 (file)
@@ -267,7 +267,7 @@ static_each (SCM list, Method_pointer method)
 void
 Translator_group::each (Method_pointer method) 
 {
-  static_each (simple_trans_list_, method);
+  static_each (get_simple_trans_list (), method);
   static_each (trans_group_list_, method);
 }
 
@@ -404,7 +404,7 @@ Translator_group::initialize ()
 {
   SCM tab = scm_make_vector (gh_int2scm (19), SCM_BOOL_F);
   set_property ("acceptHashTable", tab);
-  each (&Translator::initialize);
+  static_each (trans_group_list_, &Translator::initialize);
 }
 
 void
@@ -413,9 +413,8 @@ Translator_group::finalize ()
   each (&Translator::finalize);
 }
 
-
-
-bool translator_accepts_any_of (Translator*tr, SCM ifaces)
+bool
+translator_accepts_any_of (Translator*tr, SCM ifaces)
 {
   SCM ack_ifs = scm_assoc (ly_symbol2scm ("events-accepted"),
                           tr->translator_description());
@@ -455,7 +454,7 @@ Translator_group::try_music_on_nongroup_children (Music *m )
   SCM accept_list = scm_hashq_ref (tab, name, SCM_UNDEFINED);
   if (accept_list == SCM_BOOL_F)
     {
-      accept_list = find_accept_translators (simple_trans_list_,
+      accept_list = find_accept_translators (get_simple_trans_list (),
                                             m->get_mus_property ("types"));
       scm_hashq_set_x (tab, name, accept_list);
     }
@@ -508,3 +507,55 @@ apply_property_operations (Translator_group*tg, SCM pre_init_ops)
        }
     }
 }
+
+SCM
+names_to_translators (SCM namelist, Translator_group*tg)
+{
+  SCM l = SCM_EOL;
+  for (SCM s = namelist; gh_pair_p (s) ; s = ly_cdr (s))
+    {
+      Translator * t = get_translator (ly_car (s));
+      if (!t)
+       warning (_f ("can't find: `%s'", s));
+      else
+       {
+         Translator * tr = t->clone ();
+         SCM str = tr->self_scm ();
+         l = gh_cons (str, l);
+
+         tr->daddy_trans_ = tg;
+         tr->output_def_  = tg->output_def_;
+
+         scm_gc_unprotect_object (str);
+       }
+    }
+  return l;
+}
+
+
+SCM
+Translator_group::get_simple_trans_list ()
+{
+  if (simple_trans_list_ != SCM_BOOL_F)
+    return simple_trans_list_;
+  
+  Translator_def * td = unsmob_translator_def (definition_);
+
+  /*
+    The following cannot work, since start_translation_timestep ()
+    triggers this code, and start_translation_timestep happens before
+    \property Voice.Voice =#'()
+    
+   */
+  SCM trans_names = internal_get_property (td->get_context_name ());
+  if (!gh_pair_p (trans_names))
+    {
+      trans_names = td->get_translator_names (SCM_EOL); 
+    }
+
+  simple_trans_list_ = names_to_translators (trans_names, this);
+
+  
+  static_each (simple_trans_list_, &Translator::initialize);
+  return simple_trans_list_;
+}
index ee40e52e0bdccb9516085e7407765e3a7d6806dc..6f323bbfed844e4e7ed689a1d8b5080e0e37b2be 100644 (file)
@@ -23,7 +23,7 @@ Translator::~Translator ()
 void
 Translator::init ()
 {
-  simple_trans_list_ = SCM_EOL;
+  simple_trans_list_ = SCM_BOOL_F;
   trans_group_list_ = SCM_EOL;
   properties_scm_ = SCM_EOL;
   definition_ = SCM_EOL;
@@ -138,3 +138,8 @@ IMPLEMENT_SMOBS (Translator);
 IMPLEMENT_DEFAULT_EQUAL_P (Translator);
 IMPLEMENT_TYPE_P(Translator,"ly:translator?");
 
+SCM
+Translator::get_simple_trans_list()
+{
+  return SCM_EOL;
+}
index 67a80cfe26a27ca801e4110fe03ebc74d6553ce0..f994902fc058f3a2e7c5832d8560cd8bc919f9f8 100644 (file)
@@ -11,7 +11,7 @@
     (AbsoluteDynamicEvent
      . (
    (description . "Creates a dynamic mark.  Syntax: @var{note}@code{\\x},
-where x is one of \\@\\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\\@\\}")
+where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
        (internal-class-name . "Event")
        (types . (general-music event dynamic-event absolute-dynamic-event))
        ))