[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Using lyrics in a markup
From: |
jakob lund |
Subject: |
Re: Using lyrics in a markup |
Date: |
Tue, 18 Jan 2011 12:56:27 +0100 |
2011/1/18 Marc Hohl <address@hidden>:
> Am 15.01.2011 21:51, schrieb Neil Puttock:
>>
>> On 15 January 2011 19:01, Marc Hohl<address@hidden> 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
> address@hidden"
> (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.
Cool!
>
> 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.
That's a nice scheme exercise... The following would work (but not if
there are consecutive hyphens)
#(define (reduce-hyphens text)
;; Define initial first-word 'wd' and remaining-words 'wds'
(let eat ((wd (car text)) (wds (cdr text)))
(cond
;; Last syllable reached: Terminate recursion
((null? wds) (list wd))
((and (equal? "--" (car wds)) (not (null? (cdr wds))))
;; The first remaining word is a hyphen AND there
is a syllable after that
;; Concatenate that syllable onto wd, and recurse
(eat (string-concatenate (list wd (cadr wds))) (cddr wds)))
;; Not a hyphen, just use wd as the first word on
the list, and then recurse.
(else (cons wd (eat (car wds) (cdr wds)))))))
#(define (lyrics->text lyrics) (reduce-hyphens (lyrics->list lyrics)))
text = #(lyrics->text words)
Cheers
Jakob.
>
> Regards,
>
> Marc
>
> _______________________________________________
> lilypond-user mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/lilypond-user
>
- Using lyrics in a markup, Marc Hohl, 2011/01/15
- Re: Using lyrics in a markup, Neil Puttock, 2011/01/15
- Re: Using lyrics in a markup, Marc Hohl, 2011/01/16
- Re: Using lyrics in a markup, Marc Hohl, 2011/01/18
- Re: Using lyrics in a markup,
jakob lund <=
- Re: Using lyrics in a markup, Jan-Peter Voigt, 2011/01/18
- Re: Using lyrics in a markup, jakob lund, 2011/01/18
- Re: Using lyrics in a markup, Marc Hohl, 2011/01/18
- Re: Using lyrics in a markup, Graham Percival, 2011/01/18
- Re: Using lyrics in a markup, Marc Hohl, 2011/01/18
- Re: Using lyrics in a markup, Jean-Charles Malahieude, 2011/01/18
- Re: Using lyrics in a markup, jakob lund, 2011/01/19
- Re: Using lyrics in a markup, Jan-Peter Voigt, 2011/01/19
- Re: Using lyrics in a markup, jakob lund, 2011/01/20
- Re: Using lyrics in a markup, Marc Hohl, 2011/01/20