]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.82
authorfred <fred>
Tue, 26 Mar 2002 23:55:07 +0000 (23:55 +0000)
committerfred <fred>
Tue, 26 Mar 2002 23:55:07 +0000 (23:55 +0000)
lily/axis-group-engraver.cc
lily/translator-group-initializer.cc [new file with mode: 0644]

index 606c93ef8b910d5e97855d5cafe015653e3dfb90..57d42f31139ac6b28104259f9499129aba885717 100644 (file)
@@ -27,8 +27,7 @@ protected:
   virtual void process_acknowledged ();
   virtual Spanner* get_spanner_p () const;
   virtual void add_element (Score_element*) ;
-public:
-  
+public:  
   VIRTUAL_COPY_CONS(Translator);
   Axis_group_engraver ();
 };
@@ -83,7 +82,7 @@ Axis_group_engraver::do_removal_processing ()
       && gh_number_p (gh_cdr (dims)))
     staffline_p_->set_elt_property ("extra-extent-Y", dims);
 
-Score_element *  it = unsmob_element (get_property ("currentCommandColumn"));
+  Score_element *  it = unsmob_element (get_property ("currentCommandColumn"));
 
   Pointer_group_interface (it, "bounded-by-me").add_element (staffline_p_);  
   staffline_p_->set_bound(RIGHT,it);
@@ -98,6 +97,10 @@ Axis_group_engraver::acknowledge_element (Score_element_info i)
   elts_.push (i.elem_l_);
 }
 
+/*
+  maybe should check if our parent_l is set, because we now get a
+  cyclic parent relationship if we have two Axis_group_engravers in
+  the context.  */
 void
 Axis_group_engraver::process_acknowledged ()
 {
@@ -120,8 +123,7 @@ Axis_group_engraver::add_element (Score_element*e)
 }
 
 ////////////////////////////////////////////////////////
-
-// maybenot sucsh a good idea after all.
+// maybenot such a good idea after all., to put classes in .cc
 
 #include "hara-kiri-group-spanner.hh"
 #include "rhythmic-head.hh"
diff --git a/lily/translator-group-initializer.cc b/lily/translator-group-initializer.cc
new file mode 100644 (file)
index 0000000..b7a5aec
--- /dev/null
@@ -0,0 +1,95 @@
+       /*   
+  translator-group-initializer.cc --  implement Translator_group_initializer
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "translator-group.hh"
+#include "warn.hh"
+
+
+void
+Translator_group_initializer::set_acceptor (Translator *me,SCM name, bool add)
+{
+  if (add)
+    me->accepts_name_list_ = gh_append2 (me->accepts_name_list_, gh_cons (name, SCM_EOL));
+  else
+    me->accepts_name_list_ = scm_delete_x (name, me->accepts_name_list_);
+}
+
+
+SCM
+Translator_group_initializer::modify_definition (SCM list, SCM str, bool add)
+{
+  String s = ly_scm2string (str);
+  if (!get_translator_l (s))
+    error (_ ("Program has no such type"));
+
+  if (add)
+    {
+      if (scm_memq (str, list) != SCM_BOOL_F)
+       {
+         warning (_f("Already contains: `%s'", s));
+         warning (_f("Not adding translator: `%s'", s));
+       }
+      else
+       list= gh_cons (str, list);
+    }
+  else
+    {
+      list = scm_delete_x (str, list);
+    }
+  return list;
+}
+
+
+
+void
+Translator_group_initializer::remove_element (Translator *me,SCM s)
+{
+  me->end_consists_name_list_ = modify_definition (me->end_consists_name_list_, s, false);
+  me->consists_name_list_ = modify_definition (me->consists_name_list_, s, false);
+}
+
+void
+Translator_group_initializer::add_element (Translator *me,SCM s)
+{
+  me->consists_name_list_ = modify_definition (me->consists_name_list_, s, true);
+}
+
+void
+Translator_group_initializer::add_last_element (Translator *me,SCM s)
+{
+  me->end_consists_name_list_ = modify_definition (me->end_consists_name_list_, s, true);
+}
+void
+Translator_group_initializer::add_push_property (Translator * me,
+                                                SCM props, SCM syms,  SCM vals)
+{
+  me->property_pushes_ = gh_cons (gh_list (props, syms, vals, SCM_UNDEFINED),
+                                 me->property_pushes_);
+}
+
+void
+Translator_group_initializer::add_pop_property (Translator * me,
+                                                SCM props, SCM syms)
+{
+  me->property_pushes_ = gh_cons (gh_list (props, syms, SCM_UNDEFINED),
+                                 me->property_pushes_);
+}
+
+/*
+  Do it. SYMS maybe a symbol or a list of symbols. VAL is
+  SCM_UNDEFINED in case of a pop
+*/
+void
+Translator_group_initializer::apply_pushpop_property (Translator *trans, SCM syms, SCM eprop, SCM val)
+{
+  if (gh_symbol_p (syms))
+    dynamic_cast<Translator_group*>(trans)->execute_single_pushpop_property (syms, eprop, val);
+  else for (SCM s = syms; gh_pair_p (s); s = gh_cdr (s))
+    dynamic_cast<Translator_group*>(trans)->execute_single_pushpop_property (gh_car (s), eprop, val);
+}