Han-Wen wrote:
"Your other favorite gripe (property inheritance) was also fixed."
I'm certain that inheritance is the best way to handle properties -
thanks, Han-Wen.
May I suggest a related matter - if you will, "property ups and
downs"?
Context ranges are defined by various sorts of brackets depending on
the context level, but the most consistent context delimiter is curly
brackets {}. However, at present, the following
property 1 {
{property 2 ...}
{ section 3 }
}
results in property 2 being applied to section 3 in many (perhaps
all?) cases. Specifically, this happens for note head shapes and note
head sizes, whether property 1 is specified explicitly or is the
default. Structured object property inheritance would be that
property 1 would apply to section 3, not property 2. In short,
properties should be inherited by children, but not reach back and
change parents, or 'sneak' sideways and change siblings.
I realize all to well from experience that this is unlikely to be a
simple change to the code! But, as a long term goal, I submit that it
would serve Lily well, by improving her logical clarity and
precision.
A while ago, to deal with this problem, Han-Wen suggested:
\context ThreadedVoice <
\context Thread = TA
{ \property Thread.noteHeadStyle = "cross"
\property ThreadedVoice.ydirection = \up c16}
\context Thread = TB
{ \property Thread.noteHeadStyle = "" a16 }
\context Thread = TC
{ \property Thread.noteHeadStyle = "harmonic" d16 }
>
}
\paper {
\translator {
\VoiceContext
\remove Note_heads_engraver;
\accepts Thread;
\name ThreadedVoice;
}
\translator {
\StaffContext
\accepts ThreadedVoice;
}
\translator {
\type Engraver_group_engraver;
\consists Note_heads_engraver;
\name Thread;
}
}
}
Quite apart from the thought of publishing that in each and every one
of 555 Scarlatti files, I haven't been able to get it to work with
note head sizes on Lily 1.1.26 (the RPM I have - the siblings are still
changed). With a clean inheritance structure, none of it would be needed.
John