Hi again,
On Wed, Mar 25, 2015 at 10:33 AM, David Nalesnik <[email protected]>
wrote:
> 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 <[email protected]>
> 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. 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)'.
>
>
How about this? I'm viewing the first argument as a slot for either a
symbol ('general and the like) or a string (the language name). The last
argument is optional. I used the scheme? predicate to solve the lookahead
problem. Anything will be taken, and it's up to the function to reject
anything that's not a string. (Presumably, it's unlikely that you'd follow
the music function with a string, but who knows...)
HTH,
David
\version "2.19.16"
#(define output-language '())
language =
#(define-void-function (parser location channel language)
(string-or-symbol? (scheme?))
(_i "Define languages for input (i.e. set note names for @var{language}),
output (i.e. display tagline and table of contents in @var{language}), or both.")
(if (string? channel)
(set! channel 'general))
(if (not (string? language))
(set! language "deutsch"))
;(display (not (eq? channel 'input)))
(if
(not (eq? channel 'output))
(note-names-language parser language))
(if (not (eq? channel 'input))
(set! output-language (string->symbol language)))
)
\language "deutsch"
{
c
}
#(format #t "Output language has been defined as ~a" output-language)
englishTaglineText = #(format #f
"Music typeset using LilyPond ~a~awww.lilypond.org"
(lilypond-version)
(ly:wide-char->utf-8 #x2014) ;; 2014 = em dash.
)
germanTaglineText = #(format #f
"Noten gesetzt mit LilyPond ~a ~a www.lilypond.org"
(lilypond-version)
(ly:wide-char->utf-8 #x2013) ;;2013 = en dash.
)
#(define taglines
`(
(deutsch . ,germanTaglineText)
(english . ,englishTaglineText)
))
#(define-markup-command (format-tagline layout props text) (markup?)
(interpret-markup layout props
#{
\markup {
\pad-to-box #'(0 . 0) #'(0 . 3)
{
\with-url #"http://lilypond.org/"
$text
}
}
#}))
tagline =
\markup \format-tagline
#(let
((tagl (assoc-get output-language taglines)))
(if tagl
tagl
(begin
(ly:warning (format #f "Tagline for ~a not defined, using English."
(symbol->string output-language)))
(assoc-get 'english taglines))))
\header {
}
{ h'1 }_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user