trevorbaca / baca

Trevor Bača's Abjad library.
8 stars 3 forks source link

Teach persistence model about leaked dynamics #10

Closed trevorbaca closed 6 years ago

trevorbaca commented 6 years ago

Example:

voice = abjad.Voice("c'4 r4 d'r r4")
hairpin = abjad.Hairpin(leak='niente')
abjad.attach(hairpin, voice[:1])
hairpin.attach(abjad.Dynamic('f'), hairpin[0])

LilyPond output is correct:

abjad.f(voice)
\new Voice
{
    c'4
    \f
    - \tweak circled-tip ##t
    \>
    <> \!
    r4
    d'4
    r4
    r4
}

But effective dynamics after c'4 should be niente:

>>> for leaf in voice:
...     abjad.inspect(leaf).get_effective(abjad.Dynamic)
... 
Dynamic('f')
Dynamic('f')
Dynamic('f')
Dynamic('f')
Dynamic('f')
trevorbaca commented 6 years ago

MODEL: It's fundamentally wrong to model persistence with spanners.

This explains why abjad.ClefSpanner, abjad.StaffLinesSpanner never made sense.

This also means that abjad.Hairpin and abjad.MetronomeMarkSpanner will be removed.