On 13 April 2010 02:51, Mark Polesky <[email protected]> wrote:
> Neil, sometimes your lateral thinking is just too much for
> me! I'd be curious to understand this connection if it
> doesn't require too much explanation. Or is this documented
> somewhere?
When you have implicit contexts, they don't get created until
absolutely necessary. So in your snippet, until a Voice-level
property set arrives, the only context is the toplevel one: Global.
It doesn't matter what the property setting is; as I pointed out, even
a bogus property works, since LilyPond will still do the setting even
if it complains that it can't find a property check.
I don't know why the late Voice arrival (once the noteheads are parsed
inside the \repeat block) should affect the paper column retrieval for
the first percent repeat; it's slightly mysterious as to what happens
to the column between being cached in
Percent_repeat_engraver::start_translation_timestep () (it exists at
this point) and being set as the left bound in
Percent_repeat_engraver::process_music () (it's disappeared into the
ether).
>
>> Adding an initialize () method to ensure the paper column
>> for the spanner bound exists would work, though I'm not
>> sure whether it's the right fix.
>
> Is this something you plan to figure out, or should we add
> it to the tracker?
There's not much to figure out: just add an initialize () method which
does the following:
void
Percent_repeat_engraver::initialize ()
{
first_command_column_ = unsmob_grob (get_property ("currentCommandColumn"));
}
This will be called whenever a new Voice context is created.
OTOH, we could just chalk it up as another quirk of the way implicit
voices are created and leave it as it is. :)
Cheers,
Neil
_______________________________________________
bug-lilypond mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-lilypond