Passage en 2.23 encore un problème scheme

Bonsoir à toutes et à tous

j'utilise fréquemment des parenthèses ouvrantes et fermantes pour encadre non pas une seule note ou accord mais plusieurs. Par exemple :

ou encore

voici un exemple minimal en 2.22.2

startParenthesis = {
\once \override ParenthesesItem.stencils = #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
(list (car par-list) point-stencil )))
}
endParenthesis = {
\once \override ParenthesesItem.stencils = #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
(list point-stencil (cadr par-list))))
}

{ c1 \startParenthesis \parenthesize c c \endParenthesis \parenthesize }

mais Jean m'avais signalé que le traitement des parenthèse avait beaucoup évolué avec la 2.23, et que parentheses-item n'existe plus. De fait cela ne fonctionne plus même après un convert-ly.

Le message de Lily :

Analyse...

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:7:19: Erreur : chemin erroné d'accès à la propriété de « grob »

\once \override

ParenthesesItem.stencils = #(lambda (grob)

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:12:19: Erreur : chemin erroné d'accès à la propriété de « grob »

\once \override

ParenthesesItem.stencils = #(lambda (grob)

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:17:76: Erreur : syntax error, unexpected '}', expecting \header

{ c1 \startParenthesis \parenthesize c c \endParenthesis \parenthesize

}

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:17:1: Erreur : suite à des erreurs répétées, l'expression musicale sera ignorée

Quelqu'un connaît-il une autre solution, ou saurait-il comment faire évoluer ceci ?

Merci d'avance

···
-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
[https://myrealbook.vintherine.org/](https://myrealbook.vintherine.org/) - [http://photos.vintherine.org/](http://photos.vintherine.org/)

Bonsoir Vincent,

Est-ce que tu es sûr d'avoir correctement passé convert-ly ?
Il n'y a pas eu une fausse manip en cours de route ? Car pour
moi, la conversion de 2.22 vers 2.23.10 donne :

\version "2.23.11"

startParenthesis = {
\once \override Parentheses.stencils = #(lambda (grob)
(let ((par-list (parentheses-interface::calc-parenthesis-stencils grob)))
(list (car par-list) point-stencil )))
}
endParenthesis = {
\once \override Parentheses.stencils = #(lambda (grob)
(let ((par-list (parentheses-interface::calc-parenthesis-stencils grob)))
(list point-stencil (cadr par-list))))
}

{ c1 \startParenthesis \parenthesize c c \endParenthesis \parenthesize }

En rajoutant à la fin du snippet le « c » qui manque avant
l'accolade fermante, j'ai un résultat qui compile.

Amicalement,
Jean

···

Le 21/07/2022 à 22:15, Vincent Gay a écrit :

Bonsoir à toutes et à tous

j'utilise fréquemment des parenthèses ouvrantes et fermantes pour encadre non pas une seule note ou accord mais plusieurs. Par exemple :

ou encore

voici un exemple minimal en 2.22.2

startParenthesis = {
\once \override ParenthesesItem.stencils = #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
(list (car par-list) point-stencil )))
}
endParenthesis = {
\once \override ParenthesesItem.stencils = #(lambda (grob)
(let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
(list point-stencil (cadr par-list))))
}

{ c1 \startParenthesis \parenthesize c c \endParenthesis \parenthesize }

mais Jean m'avais signalé que le traitement des parenthèse avait beaucoup évolué avec la 2.23, et que parentheses-item n'existe plus. De fait cela ne fonctionne plus même après un convert-ly.

Le message de Lily :

Analyse...

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:7:19: Erreur : chemin erroné d'accès à la propriété de « grob »

\once \override

ParenthesesItem.stencils = #(lambda (grob)

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:12:19: Erreur : chemin erroné d'accès à la propriété de « grob »

\once \override

ParenthesesItem.stencils = #(lambda (grob)

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:17:76: Erreur : syntax error, unexpected '}', expecting \header

{ c1 \startParenthesis \parenthesize c c \endParenthesis \parenthesize

}

/home/vincent/Nextcloud2/Musique/Lilypond/Essais/Parenthèses.ly:17:1: Erreur : suite à des erreurs répétées, l'expression musicale sera ignorée

Quelqu'un connaît-il une autre solution, ou saurait-il comment faire évoluer ceci ?

Merci d'avance

Je suis rouge de honte. Merci Jean.

···

Le 21/07/2022 à 22:45, Jean Abou Samra a écrit :

En rajoutant à la fin du snippet le « c » qui manque avant
l'accolade fermante, j'ai un résultat qui compile.

--
Vincent Gay
Envoyé depuis mon saxo-phone :slight_smile:
https://myrealbook.vintherine.org/ - http://photos.vintherine.org/

Mais non, pas de raison, et puis après tout, ça vaut toujours mieux que d'être rouge de chaleur… :slight_smile:

···

Le 21/07/2022 à 22:59, Vincent Gay a écrit :

Le 21/07/2022 à 22:45, Jean Abou Samra a écrit :

En rajoutant à la fin du snippet le « c » qui manque avant
l'accolade fermante, j'ai un résultat qui compile.

Je suis rouge de honte. Merci Jean.

j'utilise fréquemment des parenthèses ouvrantes et fermantes pour
encadre non pas une seule note ou accord mais plusieurs. Par exemple :

Bonjour Vincent.
Pour les séquences d'au moins 2 notes, j'utilise la fonction scheme ci-dessous. Bon elle est un peu lourde, mais je pense qu'elle devrait marcher aussi pour la 2.23 (non testé).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.22.0"

textSize = #-2

#(define (seq-paren m)
"Parenthesize a sequence of music"
    (define sym1 'start-parenthesize) ; use gensym instead
    (define sym2 'end-parenthesize)
    (define ((stencil-func sym) grob)
      (let ((par-list (parentheses-item::calc-parenthesis-stencils grob)))
         (if (eq? sym sym1)
           (list (first par-list) point-stencil)
           (list point-stencil (second par-list)))))
    (let ((notes (extract-named-music m '(EventChord NoteEvent RestEvent))))
       (for-each
          (lambda(note sym)
            (let ((tags (ly:music-property note 'tags)))
              (ly:music-set-property! note 'tags (cons sym tags))))
          (list (first notes) (last notes))
          (list sym1 sym2))
       (music-map
         (lambda(evt)
           (let* ((tags (ly:music-property evt 'tags))
                  (syms (or (memq sym1 tags)(memq sym2 tags))))
             (if syms
               (let ((sym (car syms)))
                 (ly:music-set-property! evt 'tags (delq sym tags))
                 #{ \once \override ParenthesesItem.stencils = #(stencil-func sym)
                    \once \override ParenthesesItem.font-size = #(+ textSize 5)
                    \parenthesize #evt #})
               evt)))
         m)))

seqParen = #(define-music-function (seqMusic)(ly:music?)
    (seq-paren seqMusic))

music = \relative c' { c4 d \seqParen { e f g a } b2 | c1 }

\new Staff \music

···

--
Gilles