X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frepeat-acknowledge-engraver.cc;h=6d3234c6c6ce8b6145cfdf685729f1d35ddefdbd;hb=288456fe3fe04dd089aa53c2fc2435ddd33b4801;hp=f8507b9285189df282c00672d550188b020e206b;hpb=a6bd229f7fe1dc4a03478e14ccc0c0c66b225061;p=lilypond.git diff --git a/lily/repeat-acknowledge-engraver.cc b/lily/repeat-acknowledge-engraver.cc index f8507b9285..6d3234c6c6 100644 --- a/lily/repeat-acknowledge-engraver.cc +++ b/lily/repeat-acknowledge-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2010 Han-Wen Nienhuys + Copyright (C) 2000--2012 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,25 +80,42 @@ Repeat_acknowledge_engraver::process_music () 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; + start = true; else if (command == ly_symbol2scm ("end-repeat")) - end = true; + end = true; + else if (command == ly_symbol2scm ("segno-display")) + segno = true; else if (scm_is_pair (command) && scm_car (command) == ly_symbol2scm ("volta")) - volta_found = true; + 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 "". @@ -113,24 +130,30 @@ Repeat_acknowledge_engraver::process_music () 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)); } } 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 */ + "" + );