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

Reply via email to