[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Getting context-definiton, while being in applyContext
From: |
David Kastrup |
Subject: |
Re: Getting context-definiton, while being in applyContext |
Date: |
Sun, 18 Nov 2018 20:40:32 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
Thomas Morley <address@hidden> writes:
> Am So., 18. Nov. 2018 um 19:19 Uhr schrieb David Kastrup <address@hidden>:
>>
>> Thomas Morley <address@hidden> writes:
>>
>> > Hi,
>> >
>> > consider the code below. I'd like to restrict usage to Staff-like
>> > contexts, i.e. Staff, Tab- and DrumStaff, etc would be ok, but
>> > container-contexts like StaffGroup, etc should lead to return '().
>> >
>> > Pseudo-code:
>> >
>> > \new Staff(Group)
>> > \with {
>> > \applyContext
>> > #(lambda (context)
>> > (if <condition>
>> > ;; Do something, if we are in a Staff-like context
>> > ;; Multiple Bottom-contexts may happen
>> > (lambda (x) ...)
>> > ;; Do nothing if we are are in container-contexts like
>> > ChoirStaff,
>> > ;; StaffGroup, etc
>> > '()
>> > )
>> > }
>> > { c''1 }
>> >
>> > I thought the <condition> could be "Do I have the Staff_symbol_engraver?"
>> > Though, how to code?
>> > \applyContext
>> > #(lambda (context)
>> > (ly:context-def-lookup context 'consists))
>> > does not work, because 'context' is not a context-definition.
>> >
>> > Any hint how to proceed would be great.
>>
>> Why don't you check whether they have a Staff alias? Basically if
>> looking up 'Staff returns the context itself.
>
> You mean like below?
>
> foo =
> \applyContext
> #(lambda (ctx)
> (let* ((ctx-name (ly:context-name ctx))
> (staff-ctx-def (ly:output-find-context-def $defaultlayout
> 'Staff))
> (staff-like? (assoc-get ctx-name staff-ctx-def #f)))
>
> (if staff-like?
> (format #t "\n\tI'm in a staff-like context: ~a" ctx-name)
> (format #t "\n\tWrong here in: ~a" ctx-name))))
>
> \score {
> <<
> \new StaffGroup R1
> \new Staff R1
> \new TabStaff R1
> \new DrumStaff R1
> \new ChoirStaff R1
> >>
> \layout {
> \context Staff \foo
> \context {
> \StaffGroup
> \foo
> }
> \context {
> \ChoirStaff
> \foo
> }
> }
> }
No. Don't refer to the definition at all. Just do
(eq? ctx (ly:context-find ctx 'Staff))
--
David Kastrup
- Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, David Kastrup, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext,
David Kastrup <=
- Re: Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, David Kastrup, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, David Kastrup, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, Thomas Morley, 2018/11/18
- Re: Getting context-definiton, while being in applyContext, David Kastrup, 2018/11/18