source file of the GNU LilyPond music typesetter
- (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 2000--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "engraver.hh"
class Repeat_acknowledge_engraver : public Engraver
{
public:
- VIRTUAL_COPY_CONS (Translator);
- Repeat_acknowledge_engraver();
-
- virtual void do_post_move_processing ();
- void deprecated_process_music ();
- virtual void do_creation_processing ();
+ TRANSLATOR_DECLARATIONS(Repeat_acknowledge_engraver);
+
+ virtual void start_translation_timestep ();
+ virtual void process_music ();
+ virtual void initialize ();
+
+ bool first_b_;
};
void
-Repeat_acknowledge_engraver::do_creation_processing ()
+Repeat_acknowledge_engraver::initialize ()
{
- daddy_trans_l_->set_property ("repeatCommands", SCM_EOL);
+ first_b_ = true;
+ daddy_trans_->set_property ("repeatCommands", SCM_EOL);
}
-Repeat_acknowledge_engraver::Repeat_acknowledge_engraver()
+Repeat_acknowledge_engraver::Repeat_acknowledge_engraver ()
{
}
void
-Repeat_acknowledge_engraver::do_post_move_processing ()
+Repeat_acknowledge_engraver::start_translation_timestep ()
{
- Translator_group * tr = daddy_trans_l_->where_defined (ly_symbol2scm ("repeatCommands"));
+ first_b_ = true;
+ Translator_group * tr = daddy_trans_->where_defined (ly_symbol2scm ("repeatCommands"));
if (!tr)
- tr = daddy_trans_l_;
+ tr = daddy_trans_;
tr->set_property ("repeatCommands", SCM_EOL);
}
void
-Repeat_acknowledge_engraver::deprecated_process_music ()
+Repeat_acknowledge_engraver::process_music ()
{
/*
At the start of a piece, we don't print any repeat bars.
bool volta_found = false;
while (gh_pair_p (cs))
{
- SCM command = gh_car (cs);
+ SCM command = ly_car (cs);
if (command == ly_symbol2scm ("start-repeat"))
start = true;
else if (command == ly_symbol2scm ("end-repeat"))
end = true;
- else if (gh_pair_p (command) && gh_car (command) == ly_symbol2scm ("volta"))
+ else if (gh_pair_p (command) && ly_car (command) == ly_symbol2scm ("volta"))
volta_found = true;
- cs = gh_cdr (cs);
+ cs = ly_cdr (cs);
}
- if ( start && end )
+ if (start && end)
s = ":|:";
else if (start)
s = "|:";
s = ":|";
/*
- TODO: line breaks might be allowed if we set whichBar to "".
+ TODO: line breaks might be allowed if we set whichBar to "".
*/
- if (s != "" || (volta_found && !gh_string_p (get_property ("whichBar"))))
+
+ /*
+ We only set the barline if we wouldn't overwrite a previously set
+ barline.
+ */
+ SCM wb = get_property ("whichBar");
+ SCM db = get_property ("defaultBarType");
+ if (!gh_string_p (wb) || gh_equal_p (db, wb))
{
- daddy_trans_l_->set_property ("whichBar", ly_str02scm(s.ch_C()));
+ if (s != "" || (volta_found && !gh_string_p (wb)))
+ {
+ daddy_trans_->set_property ("whichBar", scm_makfrom0str (s.to_str0 ()));
+ }
}
}
-
-ADD_THIS_TRANSLATOR(Repeat_acknowledge_engraver);
+ENTER_DESCRIPTION(Repeat_acknowledge_engraver,
+/* descr */ "Acknowledge repeated music, and convert the contents of "
+"repeatCommands ainto an appropriate setting for whichBar.",
+/* creats*/ "",
+/* accepts */ "",
+/* acks */ "",
+/* reads */ "repeatCommands whichBar",
+/* write */ "");