]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.85
authorfred <fred>
Tue, 26 Mar 2002 23:55:28 +0000 (23:55 +0000)
committerfred <fred>
Tue, 26 Mar 2002 23:55:28 +0000 (23:55 +0000)
16 files changed:
lily/include/ly-smobs.icc
lily/include/music-output-def.hh
lily/include/smobs.hh
lily/include/translator-def.hh [new file with mode: 0644]
lily/include/translator-group.hh
lily/include/translator.hh
lily/lexer.ll
lily/music-output-def.cc
lily/parser.yy
lily/property-iterator.cc
lily/staff-symbol-engraver.cc
lily/translator-ctors.cc
lily/translator-group.cc
lily/translator.cc
ly/engraver.ly
ly/performer.ly

index b17bd314f1487ab144a261a23baff84e79077de0..0bcb9d2e8dbabde1ac3bc00c3b0a4e2f89ebbc95 100644 (file)
@@ -67,6 +67,13 @@ ADD_SCM_INIT_FUNC(CL, CL::init_smobs)
 IMPLEMENT_SIMPLE_SMOBS(CL)                                                     \
 SCM                                                                            \
 CL::smobify_self ()                                                            \
+{                                                                              \
+  SCM s =   unprotected_smobify_self ();\
+  scm_protect_object (s);\
+  return s;\
+}\
+SCM                                                                            \
+CL::unprotected_smobify_self ()                                                                \
 {                                                                              \
   /*                                                                           \
     This is local. We don't assign to self_scm_ directly, to assure            \
@@ -82,7 +89,6 @@ CL::smobify_self ()                                                           \
   SCM_SETCDR (s, SCM_PACK(this));                                              \
   self_scm_ = s;                                                               \
  scm_done_malloc(sizeof(CL));                                                  \
-  scm_protect_object (s);                                                      \
   return s;                                                                    \
 }
 
index eb20e22d11f25b5cffcfdf9d4ba1a0507227e7c6..a5c5c8d15206891d05377564ec7feb3e25540bd9 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "string.hh"
 #include "lily-proto.hh"
+#include "lily-guile.hh"
 #include "virtual-methods.hh"
 
 /**
@@ -33,8 +34,8 @@ public:
   Global_translator *get_global_translator_p ();
   Translator_group *get_group_translator_p (String type) const;
   String get_default_output () const;
-  void assign_translator (Translator_group*);
-  Translator * find_translator_l (String) const;
+  void assign_translator (SCM transdef);
+  SCM find_translator_l (SCM name) const;
 };
 
 #endif // Music_output_DEF_HH
index edd1f2e60c127d24c11216b8974675570beb0cd5..c881c05ad6215d37244930c9f8f2be45613e9a07 100644 (file)
@@ -119,6 +119,7 @@ private:
        DECLARE_SIMPLE_SMOBS(CL,dammy) \
 protected:\
        virtual ~CL();\
+       SCM unprotected_smobify_self ();\
 private: \
        SCM smobify_self ();                                    \
        SCM self_scm_; \
diff --git a/lily/include/translator-def.hh b/lily/include/translator-def.hh
new file mode 100644 (file)
index 0000000..c985222
--- /dev/null
@@ -0,0 +1,56 @@
+/*   
+  translator-def.hh -- declare Translator_def
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef TRANSLATOR_DEF_HH
+#define TRANSLATOR_DEF_HH
+
+#include "lily-proto.hh"
+#include "smobs.hh"
+#include "input.hh"
+
+struct Translator_def : public Input
+{
+  SCM consists_name_list_;
+  SCM end_consists_name_list_;
+  SCM accepts_name_list_;
+  SCM property_ops_;
+  SCM type_name_;
+  SCM translator_group_type_;
+
+  SCM modify_definition (SCM, SCM, bool);
+  
+  void set_acceptor (SCM accepts, bool add);
+  void add_element (SCM name);
+  void remove_element (SCM name);
+  void add_last_element (SCM name);
+
+  void add_push_property (SCM,SCM,SCM);
+  void add_pop_property (SCM,SCM);
+  void add_property_assign (SCM, SCM);
+  Link_array<Translator_def> path_to_acceptable_translator (SCM type_str, Music_output_def* odef) const;
+  Translator_group * instantiate (Music_output_def*);
+
+  static SCM make_scm () ;
+  static void apply_pushpop_property (Translator_group*, SCM syms, SCM eprop, SCM val);
+
+  SCM clone_scm ()const;
+  DECLARE_SMOBS(Translator_def,foo);
+private:
+
+  Translator_def ();
+  Translator_def (Translator_def const&);
+
+
+};
+
+Translator_def* unsmob_translator_def (SCM);
+
+
+#endif /* TRANSLATOR_DEF_HH */
+
index 4701c48bbb29678b0d58a4b21b0d9cfc4b41726f..507ff124b4a86e32d9167f83b54963bf75f20507 100644 (file)
@@ -22,21 +22,6 @@ typedef void (Translator::*Method_pointer)(void);
 
 class Scheme_hash_table;
 
-/*
-  should make a struct out of this, and move SCM list stuff in here.
- */
-struct Translator_group_initializer {
-  static SCM modify_definition (SCM, SCM, bool);
-
-  static void set_acceptor (Translator*,SCM accepts, bool add);
-  static void add_element (Translator*,SCM name);
-  static void remove_element (Translator*,SCM name);
-  static void add_last_element (Translator*,SCM name);
-  static void apply_pushpop_property (Translator*trans, SCM syms, SCM eprop, SCM val);
-  static void add_push_property (Translator*, SCM,SCM,SCM);
-  static void add_pop_property (Translator*, SCM,SCM);  
-  
-};
 
 /** Make some kind of Elements from Requests. Elements are made by
   hierarchically grouped Translators
index 2cca991105ce897032fe5c027d578a31768719eb..74a46a1fd2c503ce8986933bfb0c21741e6cd55b 100644 (file)
@@ -68,15 +68,12 @@ public:
   /*
     ugh: bubbled up from Translator_group. 
    */
-  SCM consists_name_list_;
-  SCM end_consists_name_list_;
-  SCM accepts_name_list_;
   SCM simple_trans_list_;
   SCM trans_group_list_;
+  SCM definition_;
+  
   SCM properties_scm_;
-  SCM property_pushes_;
   DECLARE_SMOBS(Translator, dummy);
-
 public:
   /*
     UGH. Clean this up.
index 09378ba9617a98e79aa7d6eb18abb4e6700821c7..dfbdfd9a3629f79b452a19c79a9acd0a28b80bf3 100644 (file)
@@ -39,7 +39,8 @@
 #include "identifier.hh"
 #include "version.hh"
 #include "mudela-version.hh"
-#include "translator-group.hh"
+#include "translator-def.hh"
+
 void strip_trailing_white (String&);
 void strip_leading_white (String&);
 
@@ -477,7 +478,7 @@ My_lily_lexer::scan_escaped_word (String str)
        } else if (gh_number_p (sid)) {
                yylval.scm = sid;
                return NUMBER_IDENTIFIER;
-       } else if (Translator* tr = unsmob_translator (sid)) {
+       } else if (Translator_def* tr = unsmob_translator_def (sid)) {
                yylval.scm = sid;
                return TRANSLATOR_IDENTIFIER;
        } else if (Music * mus =unsmob_music (sid)) {
index a0107291a58a2ee7829c54407a9396e0c2c1b27c..438ea4cca67281bc5da761db69c2f43d1586469c 100644 (file)
@@ -11,7 +11,7 @@
 #include "debug.hh"
 #include "music-output-def.hh"
 #include "global-translator.hh"
-
+#include "translator-def.hh"
 #include "identifier.hh"
 #include "main.hh"
 #include "lily-guile.hh"
@@ -43,48 +43,38 @@ Music_output_def::Music_output_def (Music_output_def const &s)
 }
 
 void
-Music_output_def::assign_translator (Translator_group*tp)
+Music_output_def::assign_translator (SCM transdef)
 {
-  String s =tp->type_str_;
-  if (s.empty_b ())
-    {
-      tp->warning (_("Interpretation context with empty type"));
-    }
-
-  SCM tr = tp->self_scm ();
-  scm_unprotect_object (tr);
-  translator_p_dict_p_->set (s, tr);
+  Translator_def *tp = unsmob_translator_def (transdef);
+  assert (tp);
+
+  String s = ly_scm2string (tp->type_name_);
+  translator_p_dict_p_->set (s, transdef);
 }
 
-Translator*
-Music_output_def::find_translator_l (String name) const
+SCM
+Music_output_def::find_translator_l (SCM name) const
 {
-  if (translator_p_dict_p_->elem_b (name))
-    return unsmob_translator (translator_p_dict_p_->scm_elem (name));
-
-  map<String, Translator*>::const_iterator ki
-    =global_translator_dict_p->find (name);
-
-  if (ki != global_translator_dict_p->end ())
-    return (*ki).second ;
+  String s = ly_scm2string (name);
+  if (translator_p_dict_p_->elem_b (s))
+    return translator_p_dict_p_->scm_elem (s);
 
-  return 0;
+  return SCM_EOL;
 }
 
 
 Global_translator *
 Music_output_def::get_global_translator_p () 
 {
-  Translator * t = find_translator_l ("Score");
+  Translator_def * t = unsmob_translator_def (find_translator_l (gh_str02scm ("Score")));
   if (!t)
     error (_f ("can't find `%s' context", "Score"));
-  t = t->clone ();
 
-  t->output_def_l_ = this;
-  Global_translator *g = dynamic_cast <Global_translator *> (t);
-  t->add_processing ();
+  Translator_group * tg = t->instantiate (this);
+  
+  tg->add_processing ();
   
-  return g;
+  return dynamic_cast <Global_translator *> (tg);
 }
 
 void
@@ -98,8 +88,6 @@ Music_output_def::get_default_output () const
   if (safe_global_b || !scope_p_->elem_b ("output"))
     return "";
   SCM s =  scope_p_->scm_elem ("output");
-
-  
   
   return gh_string_p (s) ? ly_scm2string (s) : String ("");
 }
index 8db7014cdfc9ac79c8c0b0c11cc60c4fd08ec698..13fd8184796d9667f048df69e233666db7156314 100644 (file)
@@ -10,6 +10,7 @@
 */
 
 #include <iostream.h>
+#include "translator-def.hh"
 #include "lily-guile.hh"
 #include "translation-property.hh"
 #include "lookup.hh"
@@ -26,7 +27,6 @@
 #include "musical-request.hh"
 #include "my-lily-parser.hh"
 #include "context-specced-music.hh"
-#include "translator-group.hh"
 #include "score.hh"
 #include "music-list.hh"
 #include "change-translator.hh"
@@ -106,7 +106,6 @@ of the parse stack onto the heap. */
     SCM scm;
 
     Tempo_req *tempo;
-    Translator_group* trans;
     int i;
 }
 %{
@@ -166,6 +165,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token PENALTY
 %token PROPERTY
 %token PUSHPROPERTY POPPROPERTY
+%token PUSH POP 
 %token PT_T
 %token RELATIVE
 %token REMOVE
@@ -253,7 +253,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <scm>    string bare_number number_expression
 %type <score>  score_block score_body
 
-%type <trans>  translator_spec_block translator_spec_body
+%type <scm>    translator_spec_block translator_spec_body
 %type <tempo>  tempo_request
 %type <scm> notenames_body notenames_block chordmodifiers_block
 %type <scm>    script_abbreviation
@@ -386,8 +386,7 @@ identifier_init:
                $$ = (new Music_output_def_identifier ($1, MUSIC_OUTPUT_DEF_IDENTIFIER))->self_scm();
        }
        | translator_spec_block {
-               $$ = $1->self_scm ();
-               scm_unprotect_object ($$);
+               $$ = $1;
        }
        | Music  {
                $$ = $1->self_scm ();
@@ -420,25 +419,25 @@ translator_spec_block:
 
 translator_spec_body:
        TRANSLATOR_IDENTIFIER   {
-               SCM trs = $1;
-               Translator*tr = unsmob_translator (trs);
-               $$ = dynamic_cast<Translator_group*> (tr->clone ());
-               $$-> set_spot (THIS->here_input ());
+               $$ = unsmob_translator_def ($1)->clone_scm ();
+               unsmob_translator_def ($$)-> set_spot (THIS->here_input ());
        }
        | TYPE STRING semicolon {
-               Translator* t = get_translator_l (ly_scm2string ($2));
-               Translator_group * tg = dynamic_cast<Translator_group*> (t);
-
-               if (!tg)
-                       THIS->parser_error (_("Need a translator group for a context"));
-               
-               tg = dynamic_cast<Translator_group*> (t->clone ());
-               tg->set_spot (THIS->here_input ());
-               $$ = tg;
+               $$ = Translator_def::make_scm ();
+               Translator_def*td =  unsmob_translator_def ($$);
+               td->translator_group_type_ = $2;
+               td->set_spot (THIS->here_input ());
        }
        | translator_spec_body STRING '=' embedded_scm                  {
-               Translator_group* tg = $$;
-               tg->set_property (ly_scm2string ($2), $4);
+               unsmob_translator_def ($$)->add_property_assign ($2, $4);
+       }
+       | translator_spec_body STRING PUSH embedded_scm '=' embedded_scm {
+               unsmob_translator_def ($$)
+                       ->add_push_property (scm_string_to_symbol ($2), $4, $6);
+       }
+       | translator_spec_body STRING POP embedded_scm  {
+         unsmob_translator_def($$)->add_pop_property (
+               scm_string_to_symbol ($2), $4);
        }
        | translator_spec_body STRING '=' identifier_init semicolon     { 
                SCM v = gh_int2scm (0);
@@ -448,35 +447,25 @@ translator_spec_body:
                        THIS->parser_error (_("Wrong type for property value"));
 
                /* ugh*/
-               Translator_group* tg = dynamic_cast<Translator_group*> ($$);
-               
-               tg->set_property (ly_scm2string ($2), v);
-       }
-       | translator_spec_body PUSHPROPERTY
-                               embedded_scm embedded_scm embedded_scm {
-               Translator_group_initializer::add_push_property ($$, $3, $4, $5);
-       }
-       | translator_spec_body POPPROPERTY
-               embedded_scm embedded_scm  {
-               Translator_group_initializer::add_pop_property ($$, $3, $4);
+               unsmob_translator_def($$)->add_property_assign ($2, v);
        }
        | translator_spec_body NAME STRING semicolon {
-               $$->type_str_ = ly_scm2string ($3);
+               unsmob_translator_def ($$)->type_name_ = $3;
        }
        | translator_spec_body CONSISTS STRING semicolon {
-               Translator_group_initializer::add_element ($$, $3);
+               unsmob_translator_def ($$)->add_element ($3);
        }
        | translator_spec_body CONSISTSEND STRING semicolon {
-               Translator_group_initializer::add_last_element ($$, $3);
+               unsmob_translator_def ($$)->add_last_element ( $3);
        }
        | translator_spec_body ACCEPTS STRING semicolon {
-               Translator_group_initializer::set_acceptor ($$, $3,true);
+               unsmob_translator_def ($$)->set_acceptor ($3,true);
        }
        | translator_spec_body DENIES STRING semicolon {
-               Translator_group_initializer::set_acceptor ($$, $3,false);
+               unsmob_translator_def ($$)->set_acceptor ($3,false);
        }
        | translator_spec_body REMOVE STRING semicolon {
-               Translator_group_initializer::remove_element ($$, $3);
+               unsmob_translator_def ($$)->remove_element ($3);
        }
        ;
 
@@ -569,7 +558,7 @@ music_output_def_body:
 
        }
        | music_output_def_body translator_spec_block   {
-               $$-> assign_translator ($2);
+               $$->assign_translator ($2);
        }
        | music_output_def_body tempo_request semicolon {
                /*
@@ -693,17 +682,18 @@ Simple_music:
        }
        | MUSIC_IDENTIFIER { $$ = unsmob_music ($1)->clone (); }
        | property_def
-       | PUSHPROPERTY embedded_scm embedded_scm embedded_scm {
+/*     | PUSHPROPERTY embedded_scm embedded_scm embedded_scm {
                $$ = new Push_translation_property;
                $$->set_mus_property ("symbols", $2);
                $$->set_mus_property ("element-property", $3);
                $$->set_mus_property ("element-value", $4);
        }
-       | POPPROPERTY  embedded_scm embedded_scm {
+       | POPPROPERTY embedded_scm embedded_scm {
                $$ = new Pop_translation_property;
                $$->set_mus_property ("symbols", $2);
                $$->set_mus_property ("element-property", $3);
        }
+*/
        | translator_change
        | Simple_music '*' bare_unsigned '/' bare_unsigned      {
                $$ = $1;
@@ -834,6 +824,23 @@ property_def:
 
                csm-> translator_type_str_ = ly_scm2string ($2);
        }
+       | PROPERTY STRING '.' STRING PUSH embedded_scm '=' embedded_scm {
+               Push_translation_property *t = new Push_translation_property;
+
+               t->set_mus_property ("symbols", scm_string_to_symbol ($4));
+               t->set_mus_property ("element-property", $6);
+               t->set_mus_property ("element-value", $8);
+               Context_specced_music *csm = new Context_specced_music (t);
+               $$ = csm;
+               $$->set_spot (THIS->here_input ());
+
+               csm-> translator_type_str_ = ly_scm2string ($2);
+       }
+       | PROPERTY STRING POP embedded_scm {
+               $$ = new Pop_translation_property;
+               $$->set_mus_property ("symbols", scm_string_to_symbol ($2));
+               $$->set_mus_property ("element-property", $4);
+       }
        ;
 
 scalar:
index 41b0ed5406edbebe6c74e440a5c98f587e59c754..2f44683094ea11879b913924501860c4d61dc6b9 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "property-iterator.hh"
 #include "translation-property.hh"
+#include "translator-def.hh"
 #include "translator-group.hh"
 
 /**
@@ -31,7 +32,7 @@ Push_property_iterator::do_process_and_next (Moment m)
   SCM eprop = music_l_->get_mus_property ("element-property");
   SCM val = music_l_->get_mus_property ("element-value");
 
-  Translator_group_initializer::apply_pushpop_property (report_to_l (), syms,eprop, val);
+  Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val);
   
   Music_iterator::do_process_and_next (m);
 }
@@ -41,7 +42,7 @@ Pop_property_iterator::do_process_and_next (Moment m)
 {
   SCM syms = music_l_->get_mus_property ("symbols");
   SCM eprop = music_l_->get_mus_property ("element-property");
-  Translator_group_initializer::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
+  Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
   
   Music_iterator::do_process_and_next (m);
 }
index 410cbac927eedb45b81705bc6b15c520df7474e8..2917e16a45ca21607a9bcb9a074a4839cc90f6b4 100644 (file)
@@ -44,7 +44,7 @@ Staff_symbol_engraver::Staff_symbol_engraver()
 void
 Staff_symbol_engraver::do_creation_processing()
 {
-  span_p_ = new Spanner (get_property ("staffSymbolBasicProperties"));
+  span_p_ = new Spanner (get_property ("basicStaffSymbolProperties"));
   
   span_p_->set_bound(LEFT, unsmob_element (get_property ("currentCommandColumn")));
 
index ca1e6d516f2c0fd17176c6a33af99c173f4b02a6..44183101866f159c30edc28a3797dc9c72d3aa1e 100644 (file)
@@ -33,7 +33,6 @@ get_translator_l (String s)
 {
   if (global_translator_dict_p->elem_b (s))
     {
-//      return (*global_translator_dict_p)[s];
        Translator* t = (*global_translator_dict_p)[s];
        return t;
     }
index 74cee77b61d95d1368b12c81c0b095da68ac915e..02eb4c7fb95e42b23b417e6f3133e2330ae61890 100644 (file)
@@ -13,6 +13,7 @@
 #include "moment.hh"
 #include "scm-hash.hh"
 #include "killing-cons.tcc"
+#include "translator-def.hh"
 
 Translator_group::Translator_group (Translator_group const&s)
   : Translator(s)
@@ -103,45 +104,8 @@ Translator_group::find_existing_translator_l (String n, String id)
   return r;
 }
 
-Link_array<Translator_group>
-Translator_group::path_to_acceptable_translator (String type, Music_output_def* odef) const
-{
-  Link_array<Translator_group> accepted_arr;
-  for (SCM s = accepts_name_list_; gh_pair_p (s); s = gh_cdr (s))
-    {
-      
-      Translator *t = odef->find_translator_l (ly_scm2string (gh_car (s)));
-      if (!t || !dynamic_cast <Translator_group *> (t))
-       continue;
-      accepted_arr.push (dynamic_cast <Translator_group *> (t));
-    }
 
 
- for (int i=0; i < accepted_arr.size (); i++)
-    if (accepted_arr[i]->type_str_ == type)
-      {
-       Link_array<Translator_group> retval;
-       retval.push (accepted_arr[i]);
-       return retval;
-      }
-
-  Link_array<Translator_group> best_result;
-  int best_depth= INT_MAX;
-  for (int i=0; i < accepted_arr.size (); i++)
-    {
-      Translator_group * g = accepted_arr[i];
-
-      Link_array<Translator_group> result
-       = g->path_to_acceptable_translator (type, odef);
-      if (result.size () && result.size () < best_depth)
-       {
-         result.insert (g,0);
-         best_result = result;
-       }
-    }
-
-  return best_result;
-}
 
 Translator_group*
 Translator_group::find_create_translator_l (String n, String id)
@@ -150,8 +114,8 @@ Translator_group::find_create_translator_l (String n, String id)
   if (existing)
     return existing;
 
-  Link_array<Translator_group> path
-    = path_to_acceptable_translator (n, output_def_l ());
+  Link_array<Translator_def> path
+    = unsmob_translator_def (definition_)->path_to_acceptable_translator (gh_str02scm (n.ch_C()), output_def_l ());
 
   if (path.size ())
     {
@@ -160,7 +124,7 @@ Translator_group::find_create_translator_l (String n, String id)
       // start at 1.  The first one (index 0) will be us.
       for (int i=0; i < path.size (); i++)
        {
-         Translator_group * new_group = dynamic_cast<Translator_group*>(path[i]->clone ());
+         Translator_group * new_group = path[i]->instantiate (output_def_l_);
 
          current->add_group_translator (new_group);
          current = new_group;
@@ -222,10 +186,10 @@ void
 Translator_group::terminate_translator (Translator*r_l)
 {
   r_l->removal_processing();
-  Translator * trans_p =remove_translator_p (r_l);
   /*
-    forget trans_p, GC does the rest.
+    Return value ignored. GC does the rest.
    */
+  remove_translator_p (r_l);
 }
 
 
@@ -263,30 +227,30 @@ Translator_group::get_simple_translator (String type) const
 bool
 Translator_group::is_bottom_translator_b () const
 {
-  return accepts_name_list_ == SCM_EOL;
+  return unsmob_translator_def (definition_)->accepts_name_list_ == SCM_EOL;
 }
 
-
-
 Translator_group*
 Translator_group::get_default_interpreter()
 {
-  if (gh_pair_p (accepts_name_list_))
+  if (!is_bottom_translator_b ())
     {
-      String str = ly_scm2string (gh_car (accepts_name_list_));
-      Translator*t = output_def_l ()->find_translator_l (str);
+      SCM nm = unsmob_translator_def (definition_)->accepts_name_list_;
+      SCM st = output_def_l ()->find_translator_l (gh_car (nm));
+
+      Translator_def *t = unsmob_translator_def (st);
       if (!t)
        {
-         warning (_f ("can't find or create: `%s'", str));
-         t = this;
+         warning (_f ("can't find or create: `%s'", ly_scm2string (nm).ch_C()));
+         t = unsmob_translator_def (this->definition_);
        }
-      Translator_group * g= dynamic_cast <Translator_group*>(t->clone ());
-      add_group_translator (g);
+      Translator_group *tg = t->instantiate (output_def_l_);
+      add_group_translator (tg);
 
-      if (!g->is_bottom_translator_b ())
-       return g->get_default_interpreter ();
+      if (!tg->is_bottom_translator_b ())
+       return tg->get_default_interpreter ();
       else
-       return g;
+       return tg;
     }
   return this;
 }
@@ -313,59 +277,14 @@ Translator_group::do_print() const
 #endif
 }
 
-static SCM
-trans_list (SCM namelist, Music_output_def *mdef)
-{
-  SCM l = SCM_EOL;
-  for (SCM s = namelist; gh_pair_p (s) ; s = gh_cdr (s))
-    {
-      Translator * t = mdef->find_translator_l (ly_scm2string (gh_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);
-         scm_unprotect_object (str);
-       }
-    }
-  return l; 
-}
-
-
 void
 Translator_group::do_add_processing ()
 {
-  assert (simple_trans_list_== SCM_EOL);
-
-  SCM correct_order = scm_reverse (property_pushes_); // pity of the mem.
-  for (SCM s = correct_order; gh_pair_p (s); s = gh_cdr (s))
-    {
-      SCM entry = gh_car (s);
-      SCM val = gh_cddr (entry);
-      val = gh_pair_p (val) ? gh_car (val) : SCM_UNDEFINED;
-      
-      Translator_group_initializer::apply_pushpop_property (this, gh_car (entry),
-                                                           gh_cadr (entry),
-                                                           val);
-    }
-
-  SCM l1 = trans_list (consists_name_list_, output_def_l ());
-  SCM l2 =trans_list (end_consists_name_list_, output_def_l ());
-  l1 = scm_reverse_x (l1, l2);
-  
-  simple_trans_list_ = l1;
-  for (SCM s = l1; gh_pair_p (s) ; s = gh_cdr (s))
+  for (SCM s = simple_trans_list_; gh_pair_p (s) ; s = gh_cdr (s))
     {
       Translator * t = unsmob_translator (gh_car (s));
-
-      t->daddy_trans_l_ = this;
-      t->output_def_l_ = output_def_l_;
       t->add_processing ();
     }
-
-  
 }
 
 /*
index 6605eaae0ca1ae2ababd353a41ede4b9fa856f95..90edc46fbbaa3423bc62f94c9b6612f2a3346e04 100644 (file)
@@ -31,10 +31,7 @@ Translator::init ()
   simple_trans_list_ = SCM_EOL;
   trans_group_list_ = SCM_EOL;
   properties_scm_ = SCM_EOL;
-  accepts_name_list_ = SCM_EOL;   
-  consists_name_list_ = SCM_EOL;
-  end_consists_name_list_ = SCM_EOL;
-  property_pushes_ = SCM_EOL;
+  definition_ = SCM_EOL;
   daddy_trans_l_ =0;
 }
 
@@ -50,12 +47,6 @@ Translator::Translator (Translator const &s)
   : Input (s)
 {
   init ();
-  
-  consists_name_list_ = scm_list_copy (s.consists_name_list_);
-  end_consists_name_list_ = scm_list_copy (s.end_consists_name_list_);
-  accepts_name_list_ = scm_list_copy (s.accepts_name_list_);
-  property_pushes_ = scm_list_copy (s.property_pushes_);
-  
   output_def_l_ = s.output_def_l_;
   type_str_ = s.type_str_;
 
@@ -233,12 +224,11 @@ SCM
 Translator::mark_smob (SCM sm)
 {
   Translator * me = (Translator*) SCM_CELL_WORD_1(sm);
-  scm_gc_mark (me->consists_name_list_);
-  scm_gc_mark (me->accepts_name_list_);
-  scm_gc_mark (me->end_consists_name_list_);
   scm_gc_mark (me->simple_trans_list_);
   scm_gc_mark (me->trans_group_list_);
-  scm_gc_mark (me->property_pushes_);
+  scm_gc_mark (me->definition_);  
+  scm_gc_mark (me->properties_scm_);  
+
   return me->properties_scm_;
 }
 
index 8b6a2f63ebc0007796a4601f0c9e6222a5e28ea8..c34e936bcbd19a921848dd6e55b41f1afd470968 100644 (file)
@@ -76,8 +76,8 @@ RhythmicStaffContext=\translator{
        \consists "Separating_line_group_engraver";     
        \name RhythmicStaff;
 
-       \pushproperty #'basicVoltaSpannerProperties #'minimum-space #15  % urg, in \pt
-       \pushproperty #'basicVoltaSpannerProperties #'padding #5  % urg, in \pt
+       basicVoltaSpannerProperties \push #'minimum-space =  #15  % urg, in \pt
+       basicVoltaSpannerProperties \push #'padding =  #5  % urg, in \pt
 
 
 
@@ -160,12 +160,18 @@ GraceContext=\translator {
 
        \consists "Property_engraver";
 
-       \pushproperty #'basicStemProperties #'style #"grace"
-       \pushproperty #'basicStemProperties #'flag-style #"grace"
-       \pushproperty #'basicStemProperties #'stem-length #6.0
-       \pushproperty #'basicStemProperties #'direction #1
-       \pushproperty #'(basicNoteHeadProperties basicStemProperties basicBeamProperties basicTextScriptProperties basicSlurProperties basicLocalKeyProperties) #'font-size #-1
-               
+       basicStemProperties \push  #'style = #"grace"
+       basicStemProperties \push  #'flag-style = #"grace"
+       basicStemProperties \push  #'stem-length = #6.0
+       basicStemProperties \push  #'direction = #1
+
+       basicNoteHeadProperties \push #'font-size = #-1
+       basicStemProperties \push #'font-size = #-1
+       basicBeamProperties \push #'font-size = #-1
+       basicTextScriptProperties \push #'font-size = #-1
+       basicSlurProperties \push #'font-size = #-1
+       basicLocalKeyProperties \push #'font-size = #-1
+
        weAreGraceContext = ##t 
        graceAccidentalSpace= 1.5 * \staffspace;
 };
@@ -705,7 +711,7 @@ ScoreContext = \translator {
                (visibility-lambda . ,begin-of-line-visible)
                (name . "stanza number")
        )
-       staffSymbolBasicProperties = #`(
+       basicStaffSymbolProperties = #`(
                (interfaces . (staff-symbol-interface ))
                (molecule-callback . ,Staff_symbol::brew_molecule)
                (staff-space . 1.0)
index 4529859e7ceb7324d060f62effb55cf75782fb14..0ad41e658f534a9a1663547ce231aa525341aa3b 100644 (file)
@@ -6,11 +6,6 @@ StaffContext = \translator {
        \name Staff;
        \accepts Voice;
 
-       \accepts VoiceOne;              % ugh.
-       \accepts VoiceTwo;
-       \accepts VoiceThree;
-       \accepts VoiceFour;
-
        \consists "Key_performer";
        \consists "Time_signature_performer";
        \consists "Tempo_performer";