Subject: Re: En rouge et noir, à quand la trêve de douceur ?

From: Editions IN NOMINE <[email-masked]>
Date: Fri, 6 May 2022 12:02:33 +0200

Mmmm, je creuse sans tout comprendre, et je tombe sur une bizarre 
anomalie avec le snippet en pied de message. Vraiment désolé de vous 
embêter encore avec ça...

Tout fonctionne comme voulu si \up est en \relative c', mais ça plante 
si c'est en \relative c, avec le message : Dessin des 
systèmes...<unnamed port>: In procedure scm-error in expression 
(scm-error (quote misc-error) #f ...): <unnamed port>: no matching 
clause for ()

J'avoue humblement sécher au beau soleil de Bretagne... et fais appel, 
du fin fond des terres morbihannaises, aux cadors schemiesques !

PS : pour celles et ceux qui se diraient "Mais que diable nous fait-il 
transpirer gras avec un exemple pareil, il a qu'à tout mettre sur une 
seule voix !", petite explication. Il s'agit d'écrire pour pédalier 
d'orgue, la tongue droite en rouge et stemUp, la tongue gauche en noir 
et stemDown.

PS' : j'ai essayé de mettre tout sur la même voix en faisant \stemUp et 
\stemDown, ça plante itou, mais peut-être avec un message plus 
explicite. L'anomalie concerne la dernière noire de la mesure 2. Ça sent 
le plantage de calcul en dessous d'une certaine note dans le layout, non 
? Lily ne parvient pas récupérer expr (ly:stencil-expr original) ?

Dessin des systèmes...C:/(...)/test.ly:12:22: In procedure 
ly:stencil-expr in expression (ly:stencil-expr original): 
C:(...)test.ly:12:22: Wrong type argument in position 1 (expecting 
Stencil): ()

JMarc

\version "2.22.2"

lay = \layout {
   #(use-modules (ice-9 match))
   \context {
     \Staff
     \override LedgerLineSpanner.stencil =
       #(grob-transformer 'stencil
         (lambda (grob original)
           (match-let*
               ((expr (ly:stencil-expr original))
                (X-ext (ly:stencil-extent original X))
                (Y-ext (ly:stencil-extent original Y))

                (('translate-stencil global-off ('combine-stencil . 
ledgers)) expr)

                (new-ledgers
                 (map
                  (lambda (ledger)
                    (match-let

                        ((('translate-stencil (0.0 . ledger-Y-off) 
ledger-expr) ledger))

                      (if (positive? ledger-Y-off)
                          `(color ,(css-color "red")
                                  ,ledger)
                          ledger)))
                  ledgers))
                (new-expr

                 `(translate-stencil ,global-off (combine-stencil . 
,new-ledgers))))

             (ly:make-stencil new-expr X-ext Y-ext))))

       }
     }

up = \relative c'{\clef bass \voiceOne \time 3/4 \key e \minor
   s4 fis4 g s2 b,4 s fis s s2 fis4
   }

down = \relative c{ \voiceTwo
     e4 s2 c2 s4 ais s a g2 s4
}

\score {
   \new Staff <<
     \new Voice{\up}
     \new Voice{\down}
   >>
   \lay
   }

Librairie les hirondelles
1 rue de Rennes 56660 St Jean Brévelay
Tél : 02 97 54 53 86 / 06 48 96 29 19
Siret : 89353322400018
TVA : FR28893533224
RCS : Vannes B 893 533 224
APE : 4761Z

Le 26/04/2022 à 18:27, Librairie Les hirondelles a écrit :
> Gloire à Jean, on peut le dire !
>
> Mille merci pour ce condenser de trucs que j'ai bien du mal à comprendre.
>
> En guise de remerciements, je vais m'attacher à comprendre tout cela.
>
> Encore merci !
>
> JMarc
>
>

---

From: Jean Abou Samra <[email-masked]>
Date: Fri, 6 May 2022 14:52:18 +0200

Le 06/05/2022 à 12:02, Editions IN NOMINE a écrit :
> PS' : j'ai essayé de mettre tout sur la même voix en faisant \stemUp 
> et \stemDown, ça plante itou, mais peut-être avec un message plus 
> explicite. L'anomalie concerne la dernière noire de la mesure 2. Ça 
> sent le plantage de calcul en dessous d'une certaine note dans le 
> layout, non ? Lily ne parvient pas récupérer expr (ly:stencil-expr 
> original) ?
>

Bonjour,

Pour moi l'exemple fonctionne ; par contre, je me rends compte
effectivement que ça plante en enlevant les notes avec lignes
supplémentaires car j'ai oublié le cas où il n'y a pas de ligne
supplémentaire du tout (le stencil n'est alors pas le même).
Voici un snippet corrigé :

\version "2.22.2"

lay = \layout {
   #(use-modules (ice-9 match))
   \context {
     \Staff
     \override LedgerLineSpanner.stencil =
       #(grob-transformer 'stencil
         (lambda (grob original)
           (if (ly:stencil? original)
               (let ((expr (ly:stencil-expr original))
                     (X-ext (ly:stencil-extent original X))
                     (Y-ext (ly:stencil-extent original Y)))
                 (match expr
                   (('translate-stencil global-off ('combine-stencil . 
ledgers))
                    (let* ((new-ledgers
                            (map
                             (lambda (ledger)
                               (match-let
                                   ((('translate-stencil (0.0 . 
ledger-Y-off) ledger-expr) ledger))
                                 (if (positive? ledger-Y-off)
                                     `(color ,(css-color "red")
                                             ,ledger)
                                     ledger)))
                             ledgers))
                          (new-expr
                           `(translate-stencil ,global-off 
(combine-stencil . ,new-ledgers))))
                       (ly:make-stencil new-expr X-ext Y-ext)))
                   (() original)))
               original)))
       }
     }

   s4 %fis4 g
   s2 b,4 s fis s s2 fis4
   }

\score {
   \new Staff <<
     \new Voice{\up}
     \new Voice{\down}
   >>
   \lay
   }

Cordialement,
Jean