On Sat, Jan 22, 2011 at 2:26 PM, Jay Anderson <[email protected]> wrote:
> Essentially, I want to write R1*10 and have it be equivalent to
> writing something like R1*10_"[101-110]".
I've gone in and modified multi-measure-rest-engraver.cc to roughly do
what I want. I couldn't figure out how to do it with a separate
engraver (but l don't really know what I'm doing). I'd like to either
be able to get this functionality directly from a lilypond file
(without modifying the source). Any suggestions? Is modifying the
engraver and working on a good patch a better route? Thanks.
-----Jay
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
index 3fbcdb6..cddd4f5 100644
--- a/lily/multi-measure-rest-engraver.cc
+++ b/lily/multi-measure-rest-engraver.cc
@@ -56,6 +56,7 @@ private:
Item *last_command_item_;
Spanner *last_rest_;
Spanner *mmrest_;
+ Spanner *nums_text_;
vector<Spanner*> numbers_;
vector<Spanner*> last_numbers_;
@@ -108,6 +109,14 @@ Multi_measure_rest_engraver::process_music ()
= make_spanner ("MultiMeasureRestNumber", rest_ev_->self_scm ());
numbers_.push_back (sp);
+ {
+ Spanner *sp
+ = make_spanner ("MultiMeasureRestText", rest_ev_->self_scm ());
+ sp->set_property ("direction", scm_from_int (DOWN));
+ nums_text_ = sp;
+ numbers_.push_back (sp);
+ }
+
if (text_events_.size ())
{
for (vsize i = 0; i < text_events_.size (); i++)
@@ -253,6 +262,22 @@ Multi_measure_rest_engraver::start_translation_timestep ()
last->set_property ("text", text);
}
}
+
+ if(nums_text_ != 0)
+ {
+ if(num <= 1)
+ {
+ nums_text_->suicide ();
+ nums_text_ = 0;
+ }
+ else
+ {
+ char s[100];
+ sprintf (s, "[%d-%d]", start_measure_, cur-1);
+ nums_text_->set_property ("text", ly_string2scm(s));
+ nums_text_ = 0;
+ }
+ }
}
last_main_moment_ = now.main_part_;
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user