Am 15.01.2011 21:51, schrieb Neil Puttock:
On 15 January 2011 19:01, Marc Hohl<m...@hohlart.de>  wrote:

Now I wonder whether it is possible to create a kind of text book by
including the lyrics in a markup, perhaps with a scheme function which
replaces the " -- " by "".

Is it possible to store the text in a variable?
[...]

For simplicity I've ignored hyphens, but it shouldn't be too difficult
to add them (or use their position in the list of strings to restore
the hyphenated words).

This is what I got so far:

\version "2.13.46"

words = \lyricmode { This is my ex -- am -- ple text }

#(define (lyrics->list lyrics)
"Return a flat list containing all syllables and hyphens from @code{lyrics}."
   (let ((extracted-list
          (if (ly:music? lyrics)
(if (memq (ly:music-property lyrics 'name) '(LyricEvent HyphenEvent)) (begin (if (eq? (ly:music-property lyrics 'name) 'LyricEvent)
                             (list (ly:music-property lyrics 'text))
                             (list "--")))
                  (let ((elt (ly:music-property lyrics 'element))
                        (elts (ly:music-property lyrics 'elements)))
                    (if (ly:music? elt)
                        (lyrics->list elt)
                        (if (null? elts)
                            '()
                            (map (lambda(x)
                                    (lyrics->list x))
                             elts)))))
              '())))
     (flatten-list extracted-list)))


text = #(lyrics->list words)

melody = \relative c' { c4 d e f | g a c2 }

\new Voice { \melody }
\addlyrics { \words }

#(markup* (make-line-markup text))

The function liyrics->list extracts the syllables and the hyphens.

The second part (eliminating the hyphens in the list and concatenate the surrounding
syllables) seems a bit harder, but I try to find a solution.

Regards,

Marc

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

Reply via email to