/*
- repeat-acknowledge-engraver.cc -- implement Repeat_acknowledge_engraver
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
+ Copyright (C) 2000--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
- (c) 2000--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
#include "engraver.hh"
context ()->set_property ("repeatCommands", SCM_EOL);
}
-Repeat_acknowledge_engraver::Repeat_acknowledge_engraver ()
+Repeat_acknowledge_engraver::Repeat_acknowledge_engraver (Context *c)
+ : Engraver (c)
{
}
string s = "";
bool start = false;
bool end = false;
+ bool segno = false;
bool volta_found = false;
while (scm_is_pair (cs))
{
SCM command = scm_car (cs);
- if (command == ly_symbol2scm ("start-repeat"))
- start = true;
- else if (command == ly_symbol2scm ("end-repeat"))
- end = true;
- else if (scm_is_pair (command) && scm_car (command) == ly_symbol2scm ("volta"))
- volta_found = true;
+ if (scm_is_eq (command, ly_symbol2scm ("start-repeat")))
+ start = true;
+ else if (scm_is_eq (command, ly_symbol2scm ("end-repeat")))
+ end = true;
+ else if (scm_is_eq (command, ly_symbol2scm ("segno-display")))
+ segno = true;
+ else if (scm_is_pair (command)
+ && scm_is_eq (scm_car (command), ly_symbol2scm ("volta")))
+ volta_found = true;
cs = scm_cdr (cs);
}
- if (start && end)
- s = robust_scm2string (get_property ("doubleRepeatType"), ":|:");
+ /*
+ Select which bar type to set
+ */
+ if (segno)
+ if (start)
+ if (end) // { segno, start, end }
+ s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|.S.|:");
+ else // { segno, start }
+ s = robust_scm2string (get_property ("startRepeatSegnoType"), "S.|:");
+ else if (end) // { segno, end }
+ s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|.S");
+ else // { segno }
+ s = robust_scm2string (get_property ("segnoType"), "S");
else if (start)
- s = "|:";
- else if (end)
- s = ":|";
+ if (end) // { start, end }
+ s = robust_scm2string (get_property ("doubleRepeatType"), ":|.|:");
+ else // { start }
+ s = robust_scm2string (get_property ("startRepeatType"), ".|:");
+ else if (end) // { end }
+ s = robust_scm2string (get_property ("endRepeatType"), ":|.");
/*
TODO: line breaks might be allowed if we set whichBar to "".
if (!scm_is_string (wb) || ly_is_equal (db, wb))
{
if (s != "" || (volta_found && !scm_is_string (wb)))
- context ()->set_property ("whichBar", ly_string2scm (s));
+ context ()->set_property ("whichBar", ly_string2scm (s));
}
}
+void
+Repeat_acknowledge_engraver::boot ()
+{
+
+}
+
ADD_TRANSLATOR (Repeat_acknowledge_engraver,
- /* doc */
- "Acknowledge repeated music, and convert the contents of"
- " @code{repeatCommands} into an appropriate setting for"
- " @code{whichBar}.",
-
- /* create */
- "",
-
- /* read */
- "doubleRepeatType "
- "repeatCommands "
- "whichBar ",
-
- /* write */
- ""
- );
+ /* doc */
+ "Acknowledge repeated music, and convert the contents of"
+ " @code{repeatCommands} into an appropriate setting for"
+ " @code{whichBar}.",
+
+ /* create */
+ "",
+
+ /* read */
+ "doubleRepeatType "
+ "startRepeatType "
+ "endRepeatType "
+ "doubleRepeatSegnoType "
+ "startRepeatSegnoType "
+ "endRepeatSegnoType "
+ "segnoType "
+ "repeatCommands "
+ "whichBar ",
+
+ /* write */
+ ""
+ );