Hi again,

On Wed, Mar 25, 2015 at 10:33 AM, David Nalesnik <david.nales...@gmail.com>
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 <simon.albre...@mail.de>
> 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
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to