Subject: Re: Re : Underline / Lyrics et changement de couleur

From: Pierre Perol-Schneider <[email-masked]>
Date: Tue, 1 Mar 2016 10:16:25 +0100

Bonjour Daniel,

J'arrive un peu après la bataille..

Le 29 février 2016 à 07:44, Daniel Bernair <[email-masked]> a
écrit :

> Merci à vous tous pour votre aide. Le résultat des tests est : le
> surlignage dans sa forme actuelle pose problèmes.

En quoi ?

> Le choix typographique en Italic fonctionne très bien, mais n'est pas très
> visible. L'usage de la couleur fonctionne très bien en  alternant
> \override LyricText #'color = #red  et \override LyricText #'color = #black
> à chaque début et fin de corrections, c'est parfait.
>

Attention : le pendant de \override ... est  \revert ... et non \override
(warnings garantis).
Dans ton cas, je mettrai donc \revert LyricText.color

Après avoir tout lu moi, pour résumer, j'en suis là :

% File from Neil Puttochk
% code adapted from regression test `scheme-text-spanner.ly'

#(define (add-bound-item spanner item)
   (if (null? (ly:spanner-bound spanner LEFT))
       (ly:spanner-set-bound! spanner LEFT item)
       (ly:spanner-set-bound! spanner RIGHT item)))

#(define (axis-offset-symbol axis)
   (if (eq? axis X) 'X-offset 'Y-offset))

#(define (set-axis! grob axis)
   (if (not (number? (ly:grob-property grob 'side-axis)))
       (begin
         (set! (ly:grob-property grob 'side-axis) axis)
         (ly:grob-chain-callback
          grob
          (if (eq? axis X)
              ly:side-position-interface::x-aligned-side
              ly:side-position-interface::y-aligned-side)
          (axis-offset-symbol axis)))))

#(define (underline-engraver context)
   (let ((span '())
         (finished '())
         (current-event '())
         (event-drul '(() . ())))
     (list (cons 'listeners
                 (list (cons 'text-span-event
                             (lambda (engraver event)
                               (if (= START (ly:event-property event
'span-direction))
                                   (set-car! event-drul event)
                                   (set-cdr! event-drul event))))))
           (cons 'acknowledgers
                 (list (cons 'lyric-syllable-interface
                             (lambda (engraver grob source-engraver)
                               (if (ly:spanner? span)
                                   (begin
                                     (ly:pointer-group-interface::add-grob
span 'note-columns grob)
                                     (add-bound-item span grob)))
                               (if (ly:spanner? finished)
                                   (begin
                                     (ly:pointer-group-interface::add-grob
finished 'note-columns grob)
                                     (add-bound-item finished grob)))))))
           (cons 'process-music
                 (lambda (trans)
                   (if (ly:stream-event? (cdr event-drul))
                       (if (null? span)
                           (ly:warning "cannot find start of underline")
                           (begin (set! finished span)
                                  (ly:engraver-announce-end-grob trans
finished current-event)
                                  (set! span '())
                                  (set! current-event '())
                                  (set-cdr! event-drul '()))))
                   (if (ly:stream-event? (car event-drul))
                       (begin (set! current-event (car event-drul))
                              (set! span (ly:engraver-make-grob trans
'TextSpanner current-event))
                              (set-axis! span Y)
                              (set-car! event-drul '())))))
           (cons 'stop-translation-timestep
                 (lambda (trans)
                   (if (and (ly:spanner? span)
                            (null? (ly:spanner-bound span LEFT)))
                       (set! (ly:spanner-bound span LEFT)
                             (ly:context-property context
'currentMusicalColumn)))
                   (if (ly:spanner? finished)
                       (begin
                         (if (null? (ly:spanner-bound finished RIGHT))
                             (set! (ly:spanner-bound finished RIGHT)
                                   (ly:context-property context
'currentMusicalColumn)))
                         (set! finished '())
                         (set! event-drul '(() . ()))))))
           (cons 'finalize
                 (lambda (trans)
                   (if (ly:spanner? finished)
                       (begin
                         (if (null? (ly:spanner-bound finished RIGHT))
                             (set! (ly:spanner-bound finished RIGHT)
                                   (ly:context-property context
'currentMusicalColumn)))
                         (set! finished '())))
                   (if (ly:spanner? span)
                       (begin
                         (ly:warning "unterminated underline")
                         (ly:grob-suicide! span)
                         (set! span '()))))))))

%%% Fin du fichier "underline.ily" %%%%%%%%

%%%%%%%%%%%%%%%%%% Exemple %%%%%%%%%%%%%%%%%%%%

\version "2.18.2"

\include "italiano.ly"

%\include "underline.ily"

A_XXXIV = \relative do'' {
  \clef treble
  \key mi \major
  \time 3/4
  \autoBeamOff
  \compressFullBarRests
  R2.*10 sold8.[(la16] si4) si dod8.[( red16] mi4) mi r8 mi([ red]) dod([
si la]) sold4 la sold
  la4.( si16[ dod]) si4 red4( mi) la, \grace{sold8} fa2 dod' mi4 red sold,
lad2 si r4 la!2 r4 la4 sold r R2.*2 la8.([ si16] dod4) dod si8.[( dod16]
re4) re r8 re8[( dod]) si[( la sold]) la4 dod si lad2 si4 r fad mi'4 mi(
red)
  % Page 4
  la!2 fad4 sold( la8) si fad2 mi4 sol sol sol2.\fermata r4 fad4 mi' mi(
red!) la2 fad4 sold( la8) si fad2 mi r4 R2.*4 r4 sold8[( fad mi)] sold fad
si la[( sold fad]) la \slurUp sold[( red mi la]) \slurNeutral sold4 r
sold8[( fad mi])
  sold8 fad si la[( sold fad]) la \slurUp sold[( red mi la]) \slurNeutral
sold4 r la8[( sold la]) dod si mi re[( dod re]) re re[( dod si] re) dod4 r
la8[( sold la]) dod8 si mi re[( dod re]) re re[( dod si re]) do4 r do fad,
fa2 fad4 sold8.[( la16] si4) sold
  la lad lad si do2 r4 dod red mi1 red4 lad4 do2. dod!2.
}

RAL_XXXIV = \lyricmode {
  O \startTextSpan wie brich -- stu mir das Herz,
  Je -- su, Je -- su welch ein Schmerz,
  dich al -- so zu se -- hen? O Je -- su,
  \stopTextSpan o
  \startTextSpan wie brich -- stu mir das Herz
  Je -- su Je -- su welch ein Schmerz dich al -- so
  zu se -- hen, welch ein Schmerz welch
  ein Schmerz dich al -- so zu se -- hen. \stopTextSpan
  War \startTextSpan -- test du beÿ al -- ler
  Pla -- ge ob nicht je -- mand Wie seid tra -- ge,
  fin -- det solch ein Jam -- mer Rei -- nen
  men -- schlich gnug dich zu be -- wri -- nen
  o dir soll ein Le -- bens lang mei -- ne
  Thrä -- nen und mein Dank nicht ert -- ste -- hen. \stopTextSpan
}

\score {
  \new Staff <<
    \new Voice = "A" { \A_XXXIV }
    \new Lyrics \lyricsto "A" { \RAL_XXXIV }
    \new Lyrics
      \with {
        \consists #underline-engraver
        \override TextSpanner.direction = #DOWN
        \override TextSpanner.style = #'line
        \override TextSpanner.outside-staff-priority = ##f
        \override TextSpanner.padding = #0.1 % sets the distance of the
line from the lyrics
        \override TextSpanner.bound-details =
            #`((left . ((Y . 0)
                        (padding . 0)
                        (attach-dir . ,LEFT)))
               (left-broken . ((end-on-note . #t)))
               (right . ((Y . 0)
                         (padding . 0)
                         (attach-dir . ,RIGHT))))
      }\lyricsto "A" { \RAL_XXXIV }
    \new Lyrics \with {
      \override LyricText.color = #blue
    }\lyricsto "A" { \RAL_XXXIV }
    \new Lyrics \with {
      \override LyricText.font-shape = #'italic
    }\lyricsto "A" { \RAL_XXXIV }
  \layout {}
}

~Pierre

---

From: "Daniel Bernair" <[email-masked]>
Date: Tue, 1 Mar 2016 19:22:22 +0100

Bonjour Pierre, merci pour ta réponse.
J’ai copié ton code en frescobaldi et l’ai compilé sans problème, cela fonctionne. ainsi. Cependant mon problème est que si j’utilise un système de plusieurs portées, une par voix, la première portée fonctionnait bien mais dès le début de la seconde portée,  le deuxième soulignage se plaçait sur la première portée.
J’ai voulu tester ton code , ai duplicié   
A_XXXIV = \relative do'' {

en 
A_XXXIVbis= \relative do'' {
et idem pour le lyric, j’ai déplacé les \startTextSpan et \stopTextSpan   
dans chacune des variables en alternance, pour voir le résultat. Le système se prend les pieds dans les bretelles. avec :
Avertissement : cannot find start of underline

Avertissement : cannot find start of underline

..... 

Avertissement : cannot find start of underline

Avertissement : cannot find start of underline

c:/users/daniel/appdata/local/temp/frescobaldi-wkuw6u/tmpbhiuxw/document.ly:70:30: In procedure setter in expression (setter ly:spanner-bound):

c:/users/daniel/appdata/local/temp/frescobaldi-wkuw6u/tmpbhiuxw/document.ly:70:30: Wrong type argument in position 1: #<primitive-procedure ly:spanner-bound>

Arrêté avec le code de retour 1.

Puis, j’ai supprimé les instruction \startTextSpan et \stopTextSpan   de la variable de la première portée. Après compilation, je n’ai pls de rejet du compilateur, mais le soulignage se place sur la première portée et non la deuxième comme montré dan,s l’image du Capture d’une partie du résultat.
Amicalement 
Daniel 

De : Pierre Perol-Schneider 
Date : mardi 1 mars 2016 10:16
À : Daniel Bernair 
Cc : Jean-Jacques Gerbaud ; Remy CLAVERIE ; Christophe Pochon ; LilyPond 
Objet : Re: Re : Underline / Lyrics et changement de couleur

Bonjour Daniel,

Le 29 février 2016 à 07:44, Daniel Bernair <[email-masked]> a écrit :

  Merci à vous tous pour votre aide. Le résultat des tests est : le surlignage dans sa forme actuelle pose problèmes. 

En quoi ?

  Le choix typographique en Italic fonctionne très bien, mais n'est pas très visible. L'usage de la couleur fonctionne très bien en  alternant  \override LyricText #'color = #red  et \override LyricText #'color = #black à chaque début et fin de corrections, c'est parfait.

Attention : le pendant de \override ... est  \revert ... et non \override (warnings garantis). 
Dans ton cas, je mettrai donc \revert LyricText.color

                               (if (= START (ly:event-property event 'span-direction))
                                     (ly:pointer-group-interface::add-grob span 'note-columns grob)
                                     (ly:pointer-group-interface::add-grob finished 'note-columns grob)
                                  (ly:engraver-announce-end-grob trans finished current-event)
                              (set! span (ly:engraver-make-grob trans 'TextSpanner current-event))
                             (ly:context-property context 'currentMusicalColumn)))
                                   (ly:context-property context 'currentMusicalColumn)))
                                   (ly:context-property context 'currentMusicalColumn)))

\version "2.18.2"

\include "italiano.ly"

A_XXXIV = \relative do'' {
  \clef treble
  \key mi \major 
  \time 3/4 
  \autoBeamOff
  \compressFullBarRests
  R2.*10 sold8.[(la16] si4) si dod8.[( red16] mi4) mi r8 mi([ red]) dod([ si la]) sold4 la sold
  la4.( si16[ dod]) si4 red4( mi) la, \grace{sold8} fa2 dod' mi4 red sold, lad2 si r4 la!2 r4 la4 sold r R2.*2 la8.([ si16] dod4) dod si8.[( dod16] re4) re r8 re8[( dod]) si[( la sold]) la4 dod si lad2 si4 r fad mi'4 mi( red)
  % Page 4
  la!2 fad4 sold( la8) si fad2 mi4 sol sol sol2.\fermata r4 fad4 mi' mi( red!) la2 fad4 sold( la8) si fad2 mi r4 R2.*4 r4 sold8[( fad mi)] sold fad si la[( sold fad]) la \slurUp sold[( red mi la]) \slurNeutral sold4 r sold8[( fad mi])
  sold8 fad si la[( sold fad]) la \slurUp sold[( red mi la]) \slurNeutral sold4 r la8[( sold la]) dod si mi re[( dod re]) re re[( dod si] re) dod4 r la8[( sold la]) dod8 si mi re[( dod re]) re re[( dod si re]) do4 r do fad, fa2 fad4 sold8.[( la16] si4) sold
  la lad lad si do2 r4 dod red mi1 red4 lad4 do2. dod!2.
}

RAL_XXXIV = \lyricmode {

\score {
  \new Staff <<
        \override TextSpanner.padding = #0.1 % sets the distance of the line from the lyrics
  \layout {}
}

~Pierre

---

From: Remy CLAVERIE <[email-masked]>
Date: Wed, 2 Mar 2016 08:51:40 +0100 (CET)

Bonjour Daniel,

Je n'ai pas toruvé pourquoi tous les Lyrics n'étaient soulignés... Je ne connais pas Scheme et je ne vois pas où peux se trouver le bug.

Désolé.

Rémy

 

> Message du 01/03/16 19:22
> De : "Daniel Bernair" 
> A : "Pierre Perol-Schneider" 

> Copie à : "Jean-Jacques Gerbaud" , "Remy CLAVERIE" , "Christophe Pochon" , "LilyPond" 

> Objet : Re : Underline / Lyrics et changement de couleur
> 
>

en 

..... 

c:/users/daniel/appdata/local/temp/frescobaldi-wkuw6u/tmpbhiuxw/document.ly:70:30: Wrong type argument in position 1: #

Bonjour Daniel,

Le 29 février 2016 à 07:44, Daniel Bernair  a écrit :
 
En quoi ?
 
Après avoir tout lu moi, pour résumer, j'en suis là :
>   >>
~Pierre

>
> [ capture.JPG (127.8 Ko) ]