A ly_B2A (B b);
*/
SCM ly_str02scm (char const*c);
+SCM ly_deep_copy (SCM);
+
+
SCM ly_symbol2scm (char const *);
String ly_scm2string (SCM s);
String ly_symbol2string (SCM);
Rest_collision(SCM);
- SCM member_before_line_breaking ();
- static SCM before_line_breaking (SCM);
+ SCM member_after_line_breaking ();
+ static SCM after_line_breaking (SCM);
};
#endif // REST_COLLISION_HH
}
ADD_SCM_INIT_FUNC(funcs, init_functions);
+
+SCM
+ly_deep_copy (SCM l)
+{
+ if (gh_pair_p (l))
+ {
+ return gh_cons (ly_deep_copy (gh_car (l)), ly_deep_copy (gh_cdr (l)));
+ }
+ else
+ return l;
+}
+
}
}
+/*
+ ugh. deep_copy uses lots of space.
+ */
void
Local_key_engraver::do_process_music()
{
if (!mp)
{
if (!to_boolean (get_property ("noResetKey")))
- daddy_trans_l_->set_property ("localKeySignature", sig);
+ daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig));
}
else if (last_keysig_ != sig)
{
- daddy_trans_l_->set_property ("localKeySignature", sig);
+ daddy_trans_l_->set_property ("localKeySignature", ly_deep_copy (sig));
}
}
return dynamic_cast<Rhythmic_head*> (e);
}
-GLUE_SCORE_ELEMENT(Rest_collision,before_line_breaking);
+GLUE_SCORE_ELEMENT(Rest_collision,after_line_breaking);
+
SCM
-Rest_collision::member_before_line_breaking ()
+Rest_collision::member_after_line_breaking ()
{
Link_array<Note_column> rest_l_arr =
Pointer_group_interface__extract_elements (this, (Note_column*) 0, "rests");
Link_array<Note_column> ncol_l_arr =
Pointer_group_interface__extract_elements (this, (Note_column*) 0, "notes");
-
+
/*
handle rest-rest and rest-note collisions