lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scheme void function problems


From: Simon Albrecht
Subject: Re: Scheme void function problems
Date: Wed, 25 Mar 2015 19:29:03 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0

Hello,

thanks a lot for your thoughts, David.

Am 25.03.2015 um 16:33 schrieb David Nalesnik:
Hi Simon,

I can't judge whether this is getting closer to you want, but maybe my observations can help.

On Wed, Mar 25, 2015 at 9:17 AM, Simon Albrecht <address@hidden> wrote:
Hello,

I’m experimenting with an implementation of automatic tagline language selection and currently have two problems with the void function \language that I adapted from music-functions-init.ly:
– I can’t get the first, optional argument to work; it needs to be explicitly given or Lily will take the string as first argument – although it’s required to be a symbol.

I haven't succeeded in making this work with the optional argument in the first position.  I moved it last.
From the design point of view I think it’s necessary to have it first: it’s much more intuitive to write \language output "deutsch" than \language "deutsch" output.
I don’t quite get why having the optional argument first doesn’t work: after all, this is commonly used in music functions and scheme functions. But apparently define-void-function is implemented differently.
This would then mean that one has to always specify the first argument, which is not the most elegant form. I’ll probably switch to using three distinct functions \language, \inputLanguage and \outputLanguage (with the names being subject to discussion of course).
  However, the last argument either must be specified with a symbol or with \default.  Otherwise, the following _expression_ will be taken as the argument and an error will be raised: in my rewrite that is '#(newline)'. 

– The define in the second clause to cond doesn’t work: there are two errors due to output-language being an unbound variable.

You need to define output-language as a global variable.  Then you can set it within the music function.  In your version, output-language only exists within the music function's scope, and so it is inaccessible to your format call, for example.

Note:
I don't think the cond _expression_ within the definition of 'language' is what you want.  Once we hit a true value, we leave the cond _expression_ entirely.  It appears that you want _both_ clauses to be evaluated, so I used two if expressions.
Right you are.

I attach another state of work, which now works fine. It will have to be extended by solutions for tocTitleMarkup and eventually tocItemMarkup and then perhaps I’ll even make a patch myself. We’ll see :-)

Yours,
Simon

Attachment: tagline-c.ly
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]