Am 27.01.2016 um 18:22 schrieb David Kastrup:
> Urs Liska <u...@openlilylib.org> writes:
>
>> Hi,
>>
>> I'm running into an issue with including files using
>> ly:parser-include-string.
>>
>> The underlying task is that I want to conditionally include files, so I
>> have the pseudo-code:
>>
>> #(if (some-condition)
>>      (ly:parser-include-string "\\include \"some-file.ily\""))
>>
>> This works pretty well for single items. It is also possible to insert
>> multiple \include-s in the string, and all files are loaded. However,
>> when a file defines anything, subsequently included files don't have
>> access to it. It seems the whole conditional expression has to be
>> evaluated until the new definitions are available.
> Of course it has.  You are in the middle of the interpretation of a
> Scheme form.  ly:parser-include-string works with the _current_ parser
> by default.  Something like
>
> #(ly:parser-include-string "theme = { c1 d }")
>
> \addlyrics { Hi ho }
>
> \displayMusic \theme
>
> creates a single music expression and displays it.  How would that work
> if you wanted to reference `theme' in the expression itself?  If you
> want an _independent_ parser, clone it.
>
> #(begin
>   (ly:parser-parse-string (ly:parser-clone)
>    "\\language #default-language
> theme = { c1 d }")
>   (displayScheme theme))
>
> \displayLilyMusic \theme
>
> will work as expected, using a fresh parser.  Note that the cloned
> parser will not have a language set by default.

Thank you very much. I have the impression that this will already help
me through ...

>> And if I only include this single some-file.ily this can again include
>> multiple files (with regular LilyPond syntax). And again, files
>> included that way don't have access to definitions (variables,
>> functions) that are in files included earlier.
> I have no idea what you are talking about here.
>
> ...
>
>> And is there a solution for my original problem: conditionally
>> including files with multiple secondary includes?
> There is no problem with that.
>

I should be able to give better description or a short example. But
hopefully the first part of your post will have made this obsolete ...

Best
Urs

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to