This is my version of the circular staff. If someone wants to improve/correct/optimize it is welcome 😊. I attached also the Mark Adler’s Finale example of circular staff (https://www.finalemusic.com/blog/finale-outside-of-the-box/) rendered with my Lilypond code.
%https://www.finalemusic.com/blog/finale-outside-of-the-box/
\version "2.24.4"
\language "italiano"

%PROBLEMI (BACHI?)
%-QUALSIASI OVERRIDES GENERA UN AUMENTO DELLA DISTANZA TRA I RIGHI DELLO 
SPARTITO LINEARE!!!
%-LA CALLBACK DI SpanBar, SystemStartBar E SystemStartBrace NON SCATTA MAI, 
FORSE IL CONTEXT E' SBAGLIATO?
%PERCIO' SI E' SCELTO DI RAPPRESENTARE CERCHI INTERI SENZA LA GRAFFA 
DELL'ACCOLLATURA INIZIALE
%ALTRIMENTI SI AVREBBE SCELTO make-partial-ellipse-stencil PER DISEGNARE ARCHI 
DI CERCHIO
%-IMPOSTANDO LO SPARTITO LINEARE AUTODIMENSIONANTE CON 
one-line-auto-height-breaking VIENE TAGLIATO IL RIGO INFERIORE
%-LO STENCIL Fingering NON PASSA DAL BOOK1 AL BOOK2 (NON C'E' PIU' IL 
RIFERIMENTO ALL'OGGETTO FONT), BISOGNA SALVARE IL TESTO E RICREARLO EX NOVO
%-LE ALTERAZIONI DI ALCUNE NOTE (CON LEGATURA?) HANNO LA POSIZIONE RELATIVA AL 
PENTAGRAMMA E NON ASSOLUTA!!

#(define lista-stampini (list))
#(define lista-note-pause (list)) %riferimento spaziale per gli oggetti che 
vanno vicini alle note/pause
#(define testo-diteggiatura 0) %riferimento al testo della diteggiatura che va 
gestita separatamente
#(define (pippo grob)
  (let* ((stampino (ly:grob-property grob 'stencil)))
    (when (ly:stencil? stampino)
      (let* ((espressione-stampino (ly:stencil-expr stampino)))
        (unless (null? espressione-stampino)
          (let*
            (
              (nome (object->string (assoc-get 'name (ly:grob-property grob 
'meta))))
              (momento-frazione (grob::when grob))
              (numeratore (ly:moment-main-numerator momento-frazione))
              (denominatore (ly:moment-main-denominator momento-frazione))
              (momento (exact->inexact (/ numeratore denominatore)))
              (x-pos (ly:grob-relative-coordinate grob (ly:grob-system grob) X))
              (y-pos (ly:grob-relative-coordinate grob (ly:grob-system grob) Y))
            )
            (set! lista-stampini (cons (list momento nome x-pos y-pos 
espressione-stampino) lista-stampini))
            (when (member nome (list "NoteHead" "Rest"))
              (set! lista-note-pause (cons (list momento x-pos) 
lista-note-pause))
            ) ;when
            (when (member nome (list "Fingering"))
              (set! testo-diteggiatura (ly:grob-property grob 'text))
            ) ;when
          ) ;let
        ) ;unless
      ) ;let
    ) ;unless
  ) ;let
) %define

\layout { ragged-last = ##t ragged-right = ##t %non giustifica il rigo né in 
verticale né in orizzontale
  %SystemStartBrace e SystemStartBar in che contesto stanno? in StaffGroup non 
scatta la callback
  %SpanBar sta nel contesto StaffGroup ma se scatta la callback il grob viene 
disegnato male
  %\context { \StaffGroup
  %  \override SystemStartBrace.after-line-breaking = #pippo
  %  \override SystemStartBar.after-line-breaking = #pippo
  %  \override SpanBar.after-line-breaking = #pippo
  %}
  \context { \Staff autoBeaming = ##f %non devono esserci travature fra le note 
ma solo codine
    \override StaffSymbol.after-line-breaking = #pippo
    \override LedgerLineSpanner.after-line-breaking = #pippo
    \override KeySignature.after-line-breaking = #pippo
    \override MultiMeasureRest.after-line-breaking = # pippo
    \override BarLine.after-line-breaking = #pippo
    \override TimeSignature.after-line-breaking = #pippo
    \override Clef.after-line-breaking = #pippo
    \override NoteHead.after-line-breaking = #pippo
    \override Rest.after-line-breaking = #pippo
    \override Stem.after-line-breaking = #pippo
    \override Flag.after-line-breaking = #pippo
    \override Accidental.after-line-breaking = #pippo
    \override Dots.after-line-breaking = #pippo
    \override Script.after-line-breaking = #pippo % puntato, marcato
    \override TextScript.after-line-breaking = #pippo
    \override DynamicText.after-line-breaking = #pippo % forte, piano
    \override Fingering.after-line-breaking = #pippo
    \override PhrasingSlur.after-line-breaking = #pippo
    \override Slur.after-line-breaking = #pippo
    \override Tie.after-line-breaking = #pippo
    \override Hairpin.after-line-breaking = #pippo
  }
  \context { \Lyrics
    \override LyricText.after-line-breaking = #pippo
    \override LyricExtender.after-line-breaking = #pippo
    \override LyricHyphen.after-line-breaking = #pippo
} }

\book {
  \paper { paper-width = 400\mm paper-height = 100\mm }
  \bookpart {
    \header { title = "SPARTITO LINEARE" }
    \score {
      \new PianoStaff {
        <<
          \new Staff {
            \new Voice {
              \clef treble \key mi \major \numericTimeSignature \time 4/4
              do'8.^+\( r16 do''16^>( la'')\) si''~ si'' r4..^"pausa" r16 |
              R1 \bar "|."
          } }
          \addlyrics { pippo cia -- o. __ }
          \new Staff {
            \new Voice {
              \clef bass \key mi \major
              do1^55 |
              <do' mi re>4~\< <do' mi re>\ff r2 |
          } }
        >>
} } } }

%COSTRUISCE IL RIGO CIRCOLARE
#(define (rigo-circolare y-pos espressione-stampino)
  (define (crea-cerchio expr)
    (let*
      (
        (y (cdr (list-ref expr 1)))
        (thickness (cadr (list-ref expr 2)))
      )
      (make-circle-stencil (+ offset-raggio y-pos y) thickness #f)
    ) ;let
  ) ;define
  (apply ly:stencil-add
    (map crea-cerchio (cdr espressione-stampino)) ;devo usare map perché 
ritorno una variabile
  ) ;apply
) %define

%SPACCHETTA L'ARMATURA DI CHIAVE
#(define (spacchetta-armatura x-pos y-pos espressione-stampino)
  (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;primo 
translate-stencil
  (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
  (set! espressione-stampino (list-ref espressione-stampino 2))
  (if (equal? (list-ref espressione-stampino 0) 'combine-stencil)
    (begin  ;c'è più di una alterazione in chiave
      (set! espressione-stampino (cdr espressione-stampino))
      (for-each ;non devo ritornare nessuna variabile, quindi basta il for-each
        (lambda (s)
          (let* ((x-temp 0) (y-temp 0))
            (set! x-temp (+ x-temp (car (list-ref s 1)))) ;secondo 
translate-stencil
            (set! y-temp (+ y-temp (cdr (list-ref s 1))))
            (set! s (list-ref s 2))
            (when (equal? (car s) 'translate-stencil) ; ;terzo 
translate-stencil, l'ultima alterazione in chiave non ce l'ha!
              (set! x-temp (+ x-temp (car (list-ref s 1))))
              (set! y-temp (+ y-temp (cdr (list-ref s 1))))
              (set! s (list-ref s 2))
            ) ;when
            (set! lista-temp (cons (list (+ x-pos x-temp) (+ y-pos y-temp) s) 
lista-temp))
          ) ;let
        ) ;lambda
      espressione-stampino) ;for-each
    ) ;begin
    (begin ;c'è una sola alterazione in chiave
      (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;secondo 
translate-stencil
      (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
      (set! espressione-stampino (list-ref espressione-stampino 2))
      (set! lista-temp (cons (list x-pos y-pos espressione-stampino) 
lista-temp))
    ) ;begin
  ) ;if
) %define

%SPACCHETTA I TAGLI ADDIZIONALI
#(define (spacchetta-tagli x-pos y-pos espressione-stampino)
  (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;primo 
translate-stencil
  (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
  (set! espressione-stampino (list-ref espressione-stampino 2))
  (if (equal? (list-ref espressione-stampino 0) 'combine-stencil)
    (begin  ;c'è più di un taglio addizionale
      (set! espressione-stampino (cdr espressione-stampino))
      (for-each ;non devo ritornare nessuna variabile, quindi basta il for-each
        (lambda (s)
          (let* ((x-temp 0) (y-temp 0) (rfb (list)))
            (set! x-temp (+ x-temp (car (list-ref s 1)))) ;secondo 
translate-stencil
            (set! y-temp (+ y-temp (cdr (list-ref s 1))))
            (set! s (list-ref s 2))
            ;round-filled-box(-x1 x2 -y1 y2 thickness)
            ;centro lo stencil rfb sull'asse x e aggiorno x-pos (su y è già 
centrato)
            ;le formule sono: SpostTotX=(-x1+x2)/2, nuova coord x1=(x1+x2)/2, 
nuova coord x2=(x1+x2)/2
            ;le formule tengono conto che x1 è negativo quindi va preso col 
meno davanti
            (set! x-temp (+ x-temp (/ (+ (- (list-ref s 1)) (list-ref s 2)) 
2))) ;centra lo stampino sull'asse x
            (set! rfb (list (+ x-pos x-temp) (+ y-pos y-temp)
              (list (list-ref s 0) (/ (+ (list-ref s 1) (list-ref s 2)) 2) (/ 
(+ (list-ref s 1) (list-ref s 2)) 2) (list-ref s 3) (list-ref s 4) (list-ref s 
5))))
            (set! lista-temp (cons rfb lista-temp))
          ) ;let
        ) ;lambda
      espressione-stampino) ;for-each
    ) ;begin
    (begin ;c'è un solo taglio addizionale
      (let* ((rfb (list)))
        (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;secondo 
translate-stencil
        (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
        (set! espressione-stampino (list-ref espressione-stampino 2))
        (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
        (set! rfb (list x-pos y-pos
          (list (list-ref espressione-stampino 0) (/ (+ (list-ref 
espressione-stampino 1) (list-ref espressione-stampino 2)) 2) (/ (+ (list-ref 
espressione-stampino 1) (list-ref espressione-stampino 2)) 2) (list-ref 
espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5))))
        (set! lista-temp (cons rfb lista-temp))
      ) ;let
    ) ;begin
  ) ;if
) %define

%TRASFORMA I PUNTI SULLO SPARTITO LINEARE IN PUNTI SULLO SPARTITO CIRCOLARE 
(CON SCALATURA)
#(define (plineare->pcircolare minimo-x massimo-x p)
  (let*
    (
      (angolo (+ (/ (* (- (car p) minimo-x) -360) massimo-x) 90))
      (x-temp (* (- (cdr p)) (sin (degrees->radians angolo))))
      (y-temp (* (cdr p) (cos (degrees->radians angolo))))
    )
  (cons x-temp y-temp)
  ) ;let
) %define

%TROVA L'ANGOLO CORRETTO PER GLI STAMPINI DA TENERE VICINO ALLA NOTA/PAUSA
#(define (angolo-vicino-nota-pausa minimo-x massimo-x x-pos-stampino 
y-pos-stampino momento-stampino)
  (let*
    (
      (distanza-minima 9999)
      (x-pos-nota 0)
      (delta-x-pos 0)
      (momento-nota 0)
      (angolo-nota 0)
      (angolo-stampino 0)
      (delta-angolo 0)
    )
    (if (= momento-stampino -1)
      (begin
        ;trova la posizione della nota più vicina
        (for-each
          (lambda (x)
            (when (< (abs (- x-pos-stampino (list-ref x 1))) distanza-minima)
              (begin
                (set! distanza-minima (abs (- x-pos-stampino (list-ref x 1))))
                (set! x-pos-nota (list-ref x 1))
              ) ;begin
            ) ;when
          ) ;lambda
        lista-note-pause) ;for-each
      ) ;begin
      ;trova la posizione della nota che ha lo stesso momento
      (begin
        (for-each
          (lambda (x)
            (set! momento-nota (list-ref x 0))
            (when (= momento-nota momento-stampino)
              (set! x-pos-nota (list-ref x 1))
            ) ;when
          ) ;lambda
        lista-note-pause) ;for-each
      ) ;begin
    ) ;if
    (when (= x-pos-nota 0)(ly:message "ERRORE!! angolo-vicino-nota-pausa."))
    (set! delta-x-pos (- x-pos-stampino x-pos-nota))
    (set! y-pos-stampino (+ offset-raggio y-pos-stampino))
    (set! delta-angolo (/ (* delta-x-pos -360) 2 PI y-pos-stampino)) ;trova il 
delta-angolo non scalato fra nota e stampino
    (set! angolo-nota (+ (/ (* (- x-pos-nota minimo-x) -360) massimo-x) 90)) 
;trova l'angolo della nota
    (+ angolo-nota delta-angolo)
  ) ;let
) %define
    
\book { 
  \paper { paper-width = 200\mm paper-height = 200\mm }
  \bookpart {
    \header { title = "SPARTITO CIRCOLARE" }
    \markup \vspace #1
    \markup \musicglyph #"space" %senza questa riga si genera errore, lilypond 
ha bisogno di creare un contesto in questo blocco markup per poter disegnare i 
grob del font Emmenthaler (altrimenti disegna solo gli stencil che contengono 
soltanto direttive postscript)
    \markup {
      \fill-line {
        \overlay {
          
%disegna gli assi in 0,0
#(markup #:stencil (ly:round-filled-box (cons -10 10) (cons 0 0) 0))
#(markup #:stencil (ly:round-filled-box (cons 0 0) (cons -10 10) 0))

%procedura di disegno degli stampini
#(begin
  (define minimo-x 0) (define massimo-x 0) (define offset-raggio 45) (define 
lista-temp (list))
  
  ;ordina lista-stampini in base al momento
  (set! lista-stampini (sort lista-stampini (lambda (a b) (< (car a) (car b)))))
  
  ;ordina lista-note-pause in base al momento e a x-pos, poi elimina i duplicati
  (set! lista-note-pause (sort lista-note-pause (lambda (a b) (or (< (car a) 
(car b)) (and (= (car a) (car b)) (< (cadr a) (cadr b)))))))
  (set! lista-note-pause (uniq-list lista-note-pause))
  
  ;;ripassa lista-note-pause, nel caso ci siano più note con lo stesso momento 
tieni quella con posizione minore
  ;(let* ((momento-old -1))
  ;  (for-each
  ;    (lambda (elemento)
  ;      (when (not (= (list-ref elemento 0) momento-old))
  ;        (set! lista-temp (cons (list (list-ref elemento 0) (list-ref 
elemento 1)) lista-temp))
  ;      )
  ;      (set! momento-old (list-ref elemento 0))
  ;    )
  ;  lista-note-pause)
  ;)
  ;(set! lista-temp (reverse lista-temp))
  ;(set! lista-note-pause lista-temp)
  
  ;trova posizione x minima e massima
  (set! minimo-x (apply min (map (lambda (x) (list-ref x 2)) lista-stampini))) 
;x-pos è al posto 3
  (set! massimo-x (apply max (map (lambda (x) (list-ref x 2)) lista-stampini))) 
;x-pos è al posto 3

  ;gestisce ogni tipo di stencil separatamente
  ;fa in modo che tutti gli stampini abbiano il margine sx sull'asse y, elimina 
i translate-stencil accumulando gli offset
  ;in x-pos e y-pos altrimenti lo stampino scapperebbe lungo la tangente al 
cerchio
  ;le righe orizzontali (LyricHypen e LedgerLineSpanner ma non le pause 
rettangolari) vengono anche centrate sull'asse x
  ;sempre accumulando gli offset, in questo modo la rotazione viene simmetrica
  ;gli stampini vengono creati nell'origine, poi traslati in verticale e 
ruotati rispetto a 0,0
  (map
    (lambda (elemento) ;momento nome x-pos y-pos stampino
      (let*
        (
          (momento (list-ref elemento 0))
          (nome (list-ref elemento 1))
          (x-pos (list-ref elemento 2))
          (y-pos (list-ref elemento 3))
          (espressione-stampino (list-ref elemento 4))
          (stampino 0)
          (angolo 0)
        )
        (cond ;fare attenzione a ritornare sempre un markup se no si genera 
l'errore: non è un markup
          ((member nome (list "StaffSymbol"))
            ;trasforma ogni rigo dei pentagrammi in un cerchio
            (markup #:stencil (rigo-circolare y-pos espressione-stampino))
          )
          ((member nome (list "BarLine" "Clef" "TimeSignature" "Rest"))
            ;questi oggetti vanno già bene così come sono
            ;TimeSignature contiene dei translate-stencil che però si 
annullano in condizioni standard, quindi posso lasciarli
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "MultiMeasureRest"))
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;secondo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;terzo translate stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;quarto translate stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1))) ;named-glyph
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "LyricHyphen"))
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;secondo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
            (set! espressione-stampino (list (list-ref espressione-stampino 0) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(list-ref espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5)))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "LyricExtender"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
            (set! espressione-stampino (list (list-ref espressione-stampino 0) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(list-ref espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5)))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "PhrasingSlur" "Slur" "Tie"))
            ;ricostruisco l'espressione grafica con i punti modificati
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (let*
              (
                (espressione-path (list-ref espressione-stampino 2))
                (t (list-ref espressione-stampino 1));tickness
                (p1 (cons (list-ref espressione-path 1) (list-ref 
espressione-path 2))) ;punto moveto
                (p2 (cons (list-ref espressione-path 4) (list-ref 
espressione-path 5))) ;primo punto di controllo curveto
                (p3 (cons (list-ref espressione-path 6) (list-ref 
espressione-path 7))) ;secondo punto di controllo curveto
                (p4 (cons (list-ref espressione-path 8) (list-ref 
espressione-path 9))) ;punto finale curveto
                (p5 (cons (list-ref espressione-path 11) (list-ref 
espressione-path 12))) ;punto lineto
                (p6 (cons (list-ref espressione-path 14) (list-ref 
espressione-path 15))) ;primo punto di controllo curveto
                (p7 (cons (list-ref espressione-path 16) (list-ref 
espressione-path 17))) ;secondo punto di controllo curveto
                (p8 (cons (list-ref espressione-path 18) (list-ref 
espressione-path 19))) ;punto finale curveto
                (l1 (list-ref espressione-stampino 3)) ;line-cap-style
                (l2 (list-ref espressione-stampino 4)) ;line-join-style
                (f (list-ref espressione-stampino 5)) ;filled
              )
              ;trova le coordinate assolute dei punti
              (set! p1 (cons (+ (car p1) x-pos) (+ (cdr p1) y-pos 
offset-raggio)))
              (set! p2 (cons (+ (car p2) x-pos) (+ (cdr p2) y-pos 
offset-raggio)))
              (set! p3 (cons (+ (car p3) x-pos) (+ (cdr p3) y-pos 
offset-raggio)))
              (set! p4 (cons (+ (car p4) x-pos) (+ (cdr p4) y-pos 
offset-raggio)))
              (set! p5 (cons (+ (car p5) x-pos) (+ (cdr p5) y-pos 
offset-raggio)))
              (set! p6 (cons (+ (car p6) x-pos) (+ (cdr p6) y-pos 
offset-raggio)))
              (set! p7 (cons (+ (car p7) x-pos) (+ (cdr p7) y-pos 
offset-raggio)))
              (set! p8 (cons (+ (car p8) x-pos) (+ (cdr p8) y-pos 
offset-raggio)))
              ;per i punti iniziali e finali delle curve p1 p4 p5 p8 calcola le 
coordinate circolari includendo la correzione della nota più vicina
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p1) (cdr p1) -1)) ;angolo assoluto
              (set! p1 (cons 0 (cdr p1))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p1 (cons (* (- (ly:length p1)) (sin (degrees->radians 
angolo))) (* (ly:length p1) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p4) (cdr p4) -1)) ;angolo assoluto
              (set! p4 (cons 0 (cdr p4))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p4 (cons (* (- (ly:length p4)) (sin (degrees->radians 
angolo))) (* (ly:length p4) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p5) (cdr p5) -1)) ;angolo assoluto
              (set! p5 (cons 0 (cdr p5))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p5 (cons (* (- (ly:length p5)) (sin (degrees->radians 
angolo))) (* (ly:length p5) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p8) (cdr p8) -1)) ;angolo assoluto
              (set! p8 (cons 0 (cdr p8))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p8 (cons (* (- (ly:length p8)) (sin (degrees->radians 
angolo))) (* (ly:length p8) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              ;per i punti di controllo p2 p3 p6 p7 trova le coordinate 
circolari scalate
              (set! p2 (plineare->pcircolare minimo-x massimo-x p2))
              (set! p3 (plineare->pcircolare minimo-x massimo-x p3))
              (set! p6 (plineare->pcircolare minimo-x massimo-x p6))
              (set! p7 (plineare->pcircolare minimo-x massimo-x p7))
              (set! espressione-stampino (list 'path t (list 'moveto (car p1) 
(cdr p1) 'curveto (car p2) (cdr p2) (car p3) (cdr p3) (car p4) (cdr p4) 'lineto 
(car p5) (cdr p5) 'curveto (car p6) (cdr p6) (car p7) (cdr p7) (car p8) (cdr 
p8) 'closepath) l1 l2 f))
            ) ;let
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (markup #:stencil stampino)
          )
          ((member nome (list "Hairpin"))
            ;ricostruisco l'espressione grafica con i punti modificati
            ;PUNTI SCALATI OPPURE RIFERITI ALLA NOTA PIU' VICINA?
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (let*
              (
                (espressione-path (cdr (list-ref espressione-stampino 2)))
                (t1 (list-ref (list-ref espressione-path 0) 1)) ;tickness
                (p1 (cons (list-ref (list-ref espressione-path 0) 2) (list-ref 
(list-ref espressione-path 0) 3))) ;primo punto
                (p2 (cons (list-ref (list-ref espressione-path 0) 4) (list-ref 
(list-ref espressione-path 0) 5))) ;secondo punto
                (t2 (list-ref (list-ref espressione-path 1) 1)) ;tickness
                (p3 (cons (list-ref (list-ref espressione-path 1) 2) (list-ref 
(list-ref espressione-path 1) 3))) ;primo punto
                (p4 (cons (list-ref (list-ref espressione-path 1) 4) (list-ref 
(list-ref espressione-path 1) 5))) ;secondo punto
              )
              ;trova le coordinate assolute dei punti
              (set! p1 (cons (+ (car p1) x-pos) (+ (cdr p1) y-pos 
offset-raggio)))
              (set! p2 (cons (+ (car p2) x-pos) (+ (cdr p2) y-pos 
offset-raggio)))
              (set! p3 (cons (+ (car p3) x-pos) (+ (cdr p3) y-pos 
offset-raggio)))
              (set! p4 (cons (+ (car p4) x-pos) (+ (cdr p4) y-pos 
offset-raggio)))
              ;trova le coordinate circolari scalate
              (set! p1 (plineare->pcircolare minimo-x massimo-x p1))
              (set! p2 (plineare->pcircolare minimo-x massimo-x p2))
              (set! p3 (plineare->pcircolare minimo-x massimo-x p3))
              (set! p4 (plineare->pcircolare minimo-x massimo-x p4))
              (set! espressione-stampino (list 'combine-stencil (list 
'draw-line t1 (car p1) (cdr p1) (car p2) (cdr p2)) (list 'draw-line t2 (car p3) 
(cdr p3) (car p4) (cdr p4))))
            ) ;let
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (markup #:stencil stampino)
          )
          ((member nome (list "KeySignature"))
            ;spacchetta lo stampino nelle singole alterazioni
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! lista-temp (list)) ;cancella la lista-temp
            (spacchetta-armatura x-pos y-pos espressione-stampino)
            (markup #:stencil
              (apply ly:stencil-add
                (map
                  (lambda (s)
                    (set! stampino (ly:make-stencil (list-ref s 2) (cons -1 1) 
(cons -1 1)))
                    (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio (list-ref s 1)))))
                    (set! angolo (+ (/ (* (- (list-ref s 0) minimo-x) -360) 
massimo-x) 90))
                    (set! stampino (ly:stencil-rotate-absolute stampino angolo 
0 0))
                    stampino
                  ) ;lambda
                lista-temp) ;map
              ) ;apply
            ) ;markup
          )
          ((member nome (list "LedgerLineSpanner"))
            ;spacchetta lo stampino nei singoli tagli addizionali
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! lista-temp (list)) ;cancella la lista-temp
            (spacchetta-tagli x-pos y-pos espressione-stampino)
            (markup #:stencil
              (apply ly:stencil-add
                (map
                  (lambda (s)
                    (set! stampino (ly:make-stencil (list-ref s 2) (cons -1 1) 
(cons -1 1)))
                    (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio (list-ref s 1)))))
                    (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x 
(list-ref s 0) (list-ref s 1) -1))
                    (set! stampino (ly:stencil-rotate-absolute stampino angolo 
0 0))
                    stampino
                  ) ;lambda
                lista-temp) ;map
              ) ;apply
            ) ;markup
          )
          ((member nome (list "Stem" "Flag" "Dots" "Script" "TextScript" 
"DynamicText" "LyricText"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "Fingering"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! x-pos (* (+ offset-raggio y-pos) (sin (degrees->radians 
angolo))))
            (set! y-pos (* (+ offset-raggio y-pos) (cos (degrees->radians 
angolo))))
            (markup #:translate (cons (- x-pos) y-pos) #:rotate angolo #:finger 
testo-diteggiatura)
          )
          ((member nome (list "Accidental" "NoteHead"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          (else
            (markup #:center-align #:with-color "red" "STENCIL NON 
INTERCETTATO")
          ) ;else
        ) ;cond
      ) ;let
    ) ;lambda
  lista-stampini) ;map
) %begin
} } } } }
%https://www.finalemusic.com/blog/finale-outside-of-the-box/
\version "2.24.4"
\language "italiano"

%PROBLEMI (BACHI?)
%-QUALSIASI OVERRIDES GENERA UN AUMENTO DELLA DISTANZA TRA I RIGHI DELLO 
SPARTITO LINEARE!!!
%-LA CALLBACK DI SpanBar, SystemStartBar E SystemStartBrace NON SCATTA MAI, 
FORSE IL CONTEXT E' SBAGLIATO?
%PERCIO' SI E' SCELTO DI RAPPRESENTARE CERCHI INTERI SENZA LA GRAFFA 
DELL'ACCOLLATURA INIZIALE
%ALTRIMENTI SI AVREBBE SCELTO make-partial-ellipse-stencil PER DISEGNARE ARCHI 
DI CERCHIO
%-IMPOSTANDO LO SPARTITO LINEARE AUTODIMENSIONANTE CON 
one-line-auto-height-breaking VIENE TAGLIATO IL RIGO INFERIORE
%-LO STENCIL Fingering NON PASSA DAL BOOK1 AL BOOK2 (NON C'E' PIU' IL 
RIFERIMENTO ALL'OGGETTO FONT), BISOGNA SALVARE IL TESTO E RICREARLO EX NOVO
%-LE ALTERAZIONI DI ALCUNE NOTE (CON LEGATURA?) HANNO LA POSIZIONE RELATIVA AL 
PENTAGRAMMA E NON ASSOLUTA!!

#(define lista-stampini (list))
#(define lista-note-pause (list)) %riferimento spaziale per gli oggetti che 
vanno vicini alle note/pause
#(define testo-diteggiatura 0) %riferimento al testo della diteggiatura che va 
gestita separatamente
#(define (pippo grob)
  (let* ((stampino (ly:grob-property grob 'stencil)))
    (when (ly:stencil? stampino)
      (let* ((espressione-stampino (ly:stencil-expr stampino)))
        (unless (null? espressione-stampino)
          (let*
            (
              (nome (object->string (assoc-get 'name (ly:grob-property grob 
'meta))))
              (momento-frazione (grob::when grob))
              (numeratore (ly:moment-main-numerator momento-frazione))
              (denominatore (ly:moment-main-denominator momento-frazione))
              (momento (exact->inexact (/ numeratore denominatore)))
              (x-pos (ly:grob-relative-coordinate grob (ly:grob-system grob) X))
              (y-pos (ly:grob-relative-coordinate grob (ly:grob-system grob) Y))
            )
            (set! lista-stampini (cons (list momento nome x-pos y-pos 
espressione-stampino) lista-stampini))
            (when (member nome (list "NoteHead" "Rest"))
              (set! lista-note-pause (cons (list momento x-pos) 
lista-note-pause))
            ) ;when
            (when (member nome (list "Fingering"))
              (set! testo-diteggiatura (ly:grob-property grob 'text))
            ) ;when
          ) ;let
        ) ;unless
      ) ;let
    ) ;unless
  ) ;let
) %define

\layout { ragged-last = ##t ragged-right = ##t %non giustifica il rigo né in 
verticale né in orizzontale
  %SystemStartBrace e SystemStartBar in che contesto stanno? in StaffGroup non 
scatta la callback
  %SpanBar sta nel contesto StaffGroup ma se scatta la callback il grob viene 
disegnato male
  %\context { \StaffGroup
  %  \override SystemStartBrace.after-line-breaking = #pippo
  %  \override SystemStartBar.after-line-breaking = #pippo
  %  \override SpanBar.after-line-breaking = #pippo
  %}
  \context { \Staff autoBeaming = ##f %non devono esserci travature fra le note 
ma solo codine
    \override StaffSymbol.after-line-breaking = #pippo
    \override LedgerLineSpanner.after-line-breaking = #pippo
    \override KeySignature.after-line-breaking = #pippo
    \override MultiMeasureRest.after-line-breaking = # pippo
    \override BarLine.after-line-breaking = #pippo
    \override TimeSignature.after-line-breaking = #pippo
    \override Clef.after-line-breaking = #pippo
    \override NoteHead.after-line-breaking = #pippo
    \override Rest.after-line-breaking = #pippo
    \override Stem.after-line-breaking = #pippo
    \override Flag.after-line-breaking = #pippo
    \override Accidental.after-line-breaking = #pippo
    \override Dots.after-line-breaking = #pippo
    \override Script.after-line-breaking = #pippo % puntato, marcato
    \override TextScript.after-line-breaking = #pippo
    \override DynamicText.after-line-breaking = #pippo % forte, piano
    \override Fingering.after-line-breaking = #pippo
    \override PhrasingSlur.after-line-breaking = #pippo
    \override Slur.after-line-breaking = #pippo
    \override Tie.after-line-breaking = #pippo
    \override Hairpin.after-line-breaking = #pippo
  }
  \context { \Lyrics \override LyricText.font-size = #-2
    \override LyricText.after-line-breaking = #pippo
    \override LyricExtender.after-line-breaking = #pippo
    \override LyricHyphen.after-line-breaking = #pippo
} }

\book {
  \paper { paper-width = 400\mm paper-height = 200\mm }
  \bookpart {
    \header { title = "SPARTITO LINEARE" }
    \score {
      \new PianoStaff {
        <<
          \new Staff {
            \new Voice \relative do'' {
              \clef treble \key mi \major \numericTimeSignature \time 3/4
              \partial 4 si4 |
              mi2 mi4 |
              mi8.( red16 dod4) si |
              si2 si4 |
              si( dod) red8( si) |
              mi4( si) dod8.( red16) |
              mi8( si mi si16 red mi4) |
              mi mi mi |
              si2 dod8.( red16) |
              mi8.( red16 dod8. red16) mi4 |
              red2 si4 |
              la( sold) dod |
              si si2 |
              \partial 2 si | \bar "|."
          } }
          \addlyrics {
            Hail! Sa -- cred mu -- sic hail! We of -- fer at thy shine
            One per -- fect round com -- plete in sound, ce -- les -- tial and 
di -- vine.
          }
          \new Staff {
            \new Voice \relative do' {
              \clef treble \key mi \major
              \partial 4 mi4 |
              sold2 sold4 |
              la2 fad4 |
              sold2 sold4 |
              fad8.( sold16 la4) <sold si> |
              fad8( fad sold8. mi16) fad4 |
              sold2 r4 |
              sold sold sold |
              sold2 mi4 |
              mi fad (sold8 mi) |
              fad2 sold4 |
              fad( mi) mi |
              mi <red fad>2 |
              \partial 2 <mi sold>
          } }
          \addlyrics {
          'Tis by thy heav'n -- ly aid in one ma -- jes -- tic sound,
          We cel -- le -- brate Je -- ho -- vah's state, in one e -- ter -- nal 
round. }
          \new Staff {
            \new Voice \relative do' {
              \clef treble \key mi \major
              \partial 4 mi4 |
              si'2 si4 |
              dod2 red4 |
              mi2 mi4 |
              red( dod) si |
              dod( si) lad |
              si2 r4 |
              si si si |
              mi( red) red |
              si la sold |
              si2 mi4 |
              dod( si) la |
              sold fad2 |
              \partial 2 mi |
          } }
          \addlyrics {
          Great is the lord our God, His mer -- cy knows no bound;
          Just are his ways then let ___ His praise E -- ter -- nal -- ly go 
round.
          }
          \new Staff {
            \new Voice \relative do {
              \clef bass \key mi \major
              \partial 4 mi4 |
              mi2 mi4 |
              la2 si4 |
              mi,2 mi4 |
              si'( la) sold |
              la( sold) mi |
              mi2. |
              mi4 mi mi |
              mi8.( fad16) sold4 la |
              sold fad mi |
              si2 mi4 |
              fad( sold) la |
              si si,2 |
              \partial 2 mi |
          } }
        >>
} } } }

%COSTRUISCE IL RIGO CIRCOLARE
#(define (rigo-circolare y-pos espressione-stampino)
  (define (crea-cerchio expr)
    (let*
      (
        (y (cdr (list-ref expr 1)))
        (thickness (cadr (list-ref expr 2)))
      )
      (make-circle-stencil (+ offset-raggio y-pos y) thickness #f)
    ) ;let
  ) ;define
  (apply ly:stencil-add
    (map crea-cerchio (cdr espressione-stampino)) ;devo usare map perché 
ritorno una variabile
  ) ;apply
) %define

%SPACCHETTA L'ARMATURA DI CHIAVE
#(define (spacchetta-armatura x-pos y-pos espressione-stampino)
  (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;primo 
translate-stencil
  (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
  (set! espressione-stampino (list-ref espressione-stampino 2))
  (if (equal? (list-ref espressione-stampino 0) 'combine-stencil)
    (begin  ;c'è più di una alterazione in chiave
      (set! espressione-stampino (cdr espressione-stampino))
      (for-each ;non devo ritornare nessuna variabile, quindi basta il for-each
        (lambda (s)
          (let* ((x-temp 0) (y-temp 0))
            (set! x-temp (+ x-temp (car (list-ref s 1)))) ;secondo 
translate-stencil
            (set! y-temp (+ y-temp (cdr (list-ref s 1))))
            (set! s (list-ref s 2))
            (when (equal? (car s) 'translate-stencil) ; ;terzo 
translate-stencil, l'ultima alterazione in chiave non ce l'ha!
              (set! x-temp (+ x-temp (car (list-ref s 1))))
              (set! y-temp (+ y-temp (cdr (list-ref s 1))))
              (set! s (list-ref s 2))
            ) ;when
            (set! lista-temp (cons (list (+ x-pos x-temp) (+ y-pos y-temp) s) 
lista-temp))
          ) ;let
        ) ;lambda
      espressione-stampino) ;for-each
    ) ;begin
    (begin ;c'è una sola alterazione in chiave
      (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;secondo 
translate-stencil
      (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
      (set! espressione-stampino (list-ref espressione-stampino 2))
      (set! lista-temp (cons (list x-pos y-pos espressione-stampino) 
lista-temp))
    ) ;begin
  ) ;if
) %define

%SPACCHETTA I TAGLI ADDIZIONALI
#(define (spacchetta-tagli x-pos y-pos espressione-stampino)
  (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;primo 
translate-stencil
  (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
  (set! espressione-stampino (list-ref espressione-stampino 2))
  (if (equal? (list-ref espressione-stampino 0) 'combine-stencil)
    (begin  ;c'è più di un taglio addizionale
      (set! espressione-stampino (cdr espressione-stampino))
      (for-each ;non devo ritornare nessuna variabile, quindi basta il for-each
        (lambda (s)
          (let* ((x-temp 0) (y-temp 0) (rfb (list)))
            (set! x-temp (+ x-temp (car (list-ref s 1)))) ;secondo 
translate-stencil
            (set! y-temp (+ y-temp (cdr (list-ref s 1))))
            (set! s (list-ref s 2))
            ;round-filled-box(-x1 x2 -y1 y2 thickness)
            ;centro lo stencil rfb sull'asse x e aggiorno x-pos (su y è già 
centrato)
            ;le formule sono: SpostTotX=(-x1+x2)/2, nuova coord x1=(x1+x2)/2, 
nuova coord x2=(x1+x2)/2
            ;le formule tengono conto che x1 è negativo quindi va preso col 
meno davanti
            (set! x-temp (+ x-temp (/ (+ (- (list-ref s 1)) (list-ref s 2)) 
2))) ;centra lo stampino sull'asse x
            (set! rfb (list (+ x-pos x-temp) (+ y-pos y-temp)
              (list (list-ref s 0) (/ (+ (list-ref s 1) (list-ref s 2)) 2) (/ 
(+ (list-ref s 1) (list-ref s 2)) 2) (list-ref s 3) (list-ref s 4) (list-ref s 
5))))
            (set! lista-temp (cons rfb lista-temp))
          ) ;let
        ) ;lambda
      espressione-stampino) ;for-each
    ) ;begin
    (begin ;c'è un solo taglio addizionale
      (let* ((rfb (list)))
        (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) ;secondo 
translate-stencil
        (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
        (set! espressione-stampino (list-ref espressione-stampino 2))
        (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
        (set! rfb (list x-pos y-pos
          (list (list-ref espressione-stampino 0) (/ (+ (list-ref 
espressione-stampino 1) (list-ref espressione-stampino 2)) 2) (/ (+ (list-ref 
espressione-stampino 1) (list-ref espressione-stampino 2)) 2) (list-ref 
espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5))))
        (set! lista-temp (cons rfb lista-temp))
      ) ;let
    ) ;begin
  ) ;if
) %define

%TRASFORMA I PUNTI SULLO SPARTITO LINEARE IN PUNTI SULLO SPARTITO CIRCOLARE 
(CON SCALATURA)
#(define (plineare->pcircolare minimo-x massimo-x p)
  (let*
    (
      (angolo (+ (/ (* (- (car p) minimo-x) -360) massimo-x) 90))
      (x-temp (* (- (cdr p)) (sin (degrees->radians angolo))))
      (y-temp (* (cdr p) (cos (degrees->radians angolo))))
    )
  (cons x-temp y-temp)
  ) ;let
) %define

%TROVA L'ANGOLO CORRETTO PER GLI STAMPINI DA TENERE VICINO ALLA NOTA/PAUSA
#(define (angolo-vicino-nota-pausa minimo-x massimo-x x-pos-stampino 
y-pos-stampino momento-stampino)
  (let*
    (
      (distanza-minima 9999)
      (x-pos-nota 0)
      (delta-x-pos 0)
      (momento-nota 0)
      (angolo-nota 0)
      (angolo-stampino 0)
      (delta-angolo 0)
    )
    (if (= momento-stampino -1)
      (begin
        ;trova la posizione della nota più vicina
        (for-each
          (lambda (x)
            (when (< (abs (- x-pos-stampino (list-ref x 1))) distanza-minima)
              (begin
                (set! distanza-minima (abs (- x-pos-stampino (list-ref x 1))))
                (set! x-pos-nota (list-ref x 1))
              ) ;begin
            ) ;when
          ) ;lambda
        lista-note-pause) ;for-each
      ) ;begin
      ;trova la posizione della nota che ha lo stesso momento
      (begin
        (for-each
          (lambda (x)
            (set! momento-nota (list-ref x 0))
            (when (= momento-nota momento-stampino)
              (set! x-pos-nota (list-ref x 1))
            ) ;when
          ) ;lambda
        lista-note-pause) ;for-each
      ) ;begin
    ) ;if
    (when (= x-pos-nota 0)(ly:message "ERRORE!! angolo-vicino-nota-pausa."))
    (set! delta-x-pos (- x-pos-stampino x-pos-nota))
    (set! y-pos-stampino (+ offset-raggio y-pos-stampino))
    (set! delta-angolo (/ (* delta-x-pos -360) 2 PI y-pos-stampino)) ;trova il 
delta-angolo non scalato fra nota e stampino
    (set! angolo-nota (+ (/ (* (- x-pos-nota minimo-x) -360) massimo-x) 90)) 
;trova l'angolo della nota
    (+ angolo-nota delta-angolo)
  ) ;let
) %define
    
\book { 
  \paper { paper-width = 300\mm paper-height = 300\mm }
  \bookpart {
    \header { title = "SPARTITO CIRCOLARE" }
    \markup \vspace #1
    \markup \musicglyph #"space" %senza questa riga si genera errore, lilypond 
ha bisogno di creare un contesto in questo blocco markup per poter disegnare i 
grob del font Emmenthaler (altrimenti disegna solo gli stencil che contengono 
soltanto direttive postscript)
    \markup {
      \fill-line {
        \overlay {
          
%disegna gli assi in 0,0
%#(markup #:stencil (ly:round-filled-box (cons -10 10) (cons 0 0) 0))
%#(markup #:stencil (ly:round-filled-box (cons 0 0) (cons -10 10) 0))

%aggiungi la scritta centrale
#(markup #:stencil (make-circle-stencil 18 0.5 #f))
#(markup #:stencil (make-circle-stencil 17 0.5 #f))
\column { \halign #CENTER \translate #'(0 . 11) \italic {
"This tune" "is thus disposed" "to show that every" "tune is a complete"
"circle; & that what" "may be deficient" "in the first bar," "is supplied in" 
"the last."
} }

%procedura di disegno degli stampini
#(begin
  (define minimo-x 0) (define massimo-x 0) (define offset-raggio 60) (define 
lista-temp (list))
  
  ;ordina lista-stampini in base al momento
  (set! lista-stampini (sort lista-stampini (lambda (a b) (< (car a) (car b)))))
  
  ;ordina lista-note-pause in base al momento e a x-pos, poi elimina i duplicati
  (set! lista-note-pause (sort lista-note-pause (lambda (a b) (or (< (car a) 
(car b)) (and (= (car a) (car b)) (< (cadr a) (cadr b)))))))
  (set! lista-note-pause (uniq-list lista-note-pause))
  
  ;;ripassa lista-note-pause, nel caso ci siano più note con lo stesso momento 
tieni quella con posizione minore
  ;(let* ((momento-old -1))
  ;  (for-each
  ;    (lambda (elemento)
  ;      (when (not (= (list-ref elemento 0) momento-old))
  ;        (set! lista-temp (cons (list (list-ref elemento 0) (list-ref 
elemento 1)) lista-temp))
  ;      )
  ;      (set! momento-old (list-ref elemento 0))
  ;    )
  ;  lista-note-pause)
  ;)
  ;(set! lista-temp (reverse lista-temp))
  ;(set! lista-note-pause lista-temp)
  
  ;trova posizione x minima e massima
  (set! minimo-x (apply min (map (lambda (x) (list-ref x 2)) lista-stampini))) 
;x-pos è al posto 3
  (set! massimo-x (apply max (map (lambda (x) (list-ref x 2)) lista-stampini))) 
;x-pos è al posto 3

  ;gestisce ogni tipo di stencil separatamente
  ;fa in modo che tutti gli stampini abbiano il margine sx sull'asse y, elimina 
i translate-stencil accumulando gli offset
  ;in x-pos e y-pos altrimenti lo stampino scapperebbe lungo la tangente al 
cerchio
  ;le righe orizzontali (LyricHypen e LedgerLineSpanner ma non le pause 
rettangolari) vengono anche centrate sull'asse x
  ;sempre accumulando gli offset, in questo modo la rotazione viene simmetrica
  ;gli stampini vengono creati nell'origine, poi traslati in verticale e 
ruotati rispetto a 0,0
  (map
    (lambda (elemento) ;momento nome x-pos y-pos stampino
      (let*
        (
          (momento (list-ref elemento 0))
          (nome (list-ref elemento 1))
          (x-pos (list-ref elemento 2))
          (y-pos (list-ref elemento 3))
          (espressione-stampino (list-ref elemento 4))
          (stampino 0)
          (angolo 0)
        )
        (cond ;fare attenzione a ritornare sempre un markup se no si genera 
l'errore: non è un markup
          ((member nome (list "StaffSymbol"))
            ;trasforma ogni rigo dei pentagrammi in un cerchio
            (markup #:stencil (rigo-circolare y-pos espressione-stampino))
          )
          ((member nome (list "BarLine" "Clef" "TimeSignature" "Rest"))
            ;questi oggetti vanno già bene così come sono
            ;TimeSignature contiene dei translate-stencil che però si 
annullano in condizioni standard, quindi posso lasciarli
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "MultiMeasureRest"))
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;secondo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;terzo translate stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;quarto translate stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1))) ;named-glyph
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "LyricHyphen"))
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;secondo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
            (set! espressione-stampino (list (list-ref espressione-stampino 0) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(list-ref espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5)))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (+ (/ (* (- x-pos minimo-x) -360) massimo-x) 90))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "LyricExtender"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (set! espressione-stampino (list-ref espressione-stampino 2))
            (set! x-pos (+ x-pos (/ (+ (- (list-ref espressione-stampino 1)) 
(list-ref espressione-stampino 2)) 2))) ;centra lo stampino sull'asse x
            (set! espressione-stampino (list (list-ref espressione-stampino 0) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(/ (+ (list-ref espressione-stampino 1) (list-ref espressione-stampino 2)) 2) 
(list-ref espressione-stampino 3) (list-ref espressione-stampino 4) (list-ref 
espressione-stampino 5)))
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "PhrasingSlur" "Slur" "Tie"))
            ;ricostruisco l'espressione grafica con i punti modificati
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (let*
              (
                (espressione-path (list-ref espressione-stampino 2))
                (t (list-ref espressione-stampino 1));tickness
                (p1 (cons (list-ref espressione-path 1) (list-ref 
espressione-path 2))) ;punto moveto
                (p2 (cons (list-ref espressione-path 4) (list-ref 
espressione-path 5))) ;primo punto di controllo curveto
                (p3 (cons (list-ref espressione-path 6) (list-ref 
espressione-path 7))) ;secondo punto di controllo curveto
                (p4 (cons (list-ref espressione-path 8) (list-ref 
espressione-path 9))) ;punto finale curveto
                (p5 (cons (list-ref espressione-path 11) (list-ref 
espressione-path 12))) ;punto lineto
                (p6 (cons (list-ref espressione-path 14) (list-ref 
espressione-path 15))) ;primo punto di controllo curveto
                (p7 (cons (list-ref espressione-path 16) (list-ref 
espressione-path 17))) ;secondo punto di controllo curveto
                (p8 (cons (list-ref espressione-path 18) (list-ref 
espressione-path 19))) ;punto finale curveto
                (l1 (list-ref espressione-stampino 3)) ;line-cap-style
                (l2 (list-ref espressione-stampino 4)) ;line-join-style
                (f (list-ref espressione-stampino 5)) ;filled
              )
              ;trova le coordinate assolute dei punti
              (set! p1 (cons (+ (car p1) x-pos) (+ (cdr p1) y-pos 
offset-raggio)))
              (set! p2 (cons (+ (car p2) x-pos) (+ (cdr p2) y-pos 
offset-raggio)))
              (set! p3 (cons (+ (car p3) x-pos) (+ (cdr p3) y-pos 
offset-raggio)))
              (set! p4 (cons (+ (car p4) x-pos) (+ (cdr p4) y-pos 
offset-raggio)))
              (set! p5 (cons (+ (car p5) x-pos) (+ (cdr p5) y-pos 
offset-raggio)))
              (set! p6 (cons (+ (car p6) x-pos) (+ (cdr p6) y-pos 
offset-raggio)))
              (set! p7 (cons (+ (car p7) x-pos) (+ (cdr p7) y-pos 
offset-raggio)))
              (set! p8 (cons (+ (car p8) x-pos) (+ (cdr p8) y-pos 
offset-raggio)))
              ;per i punti iniziali e finali delle curve p1 p4 p5 p8 calcola le 
coordinate circolari includendo la correzione della nota più vicina
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p1) (cdr p1) -1)) ;angolo assoluto
              (set! p1 (cons 0 (cdr p1))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p1 (cons (* (- (ly:length p1)) (sin (degrees->radians 
angolo))) (* (ly:length p1) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p4) (cdr p4) -1)) ;angolo assoluto
              (set! p4 (cons 0 (cdr p4))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p4 (cons (* (- (ly:length p4)) (sin (degrees->radians 
angolo))) (* (ly:length p4) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p5) (cdr p5) -1)) ;angolo assoluto
              (set! p5 (cons 0 (cdr p5))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p5 (cons (* (- (ly:length p5)) (sin (degrees->radians 
angolo))) (* (ly:length p5) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x (car 
p8) (cdr p8) -1)) ;angolo assoluto
              (set! p8 (cons 0 (cdr p8))) ;porto il punto nella posizione di 
partenza sull'asse y, cioè sulla coord 0,y
              (set! p8 (cons (* (- (ly:length p8)) (sin (degrees->radians 
angolo))) (* (ly:length p8) (cos (degrees->radians angolo))))) ;ruoto il punto 
nella sua posizione finale
              ;per i punti di controllo p2 p3 p6 p7 trova le coordinate 
circolari scalate
              (set! p2 (plineare->pcircolare minimo-x massimo-x p2))
              (set! p3 (plineare->pcircolare minimo-x massimo-x p3))
              (set! p6 (plineare->pcircolare minimo-x massimo-x p6))
              (set! p7 (plineare->pcircolare minimo-x massimo-x p7))
              (set! espressione-stampino (list 'path t (list 'moveto (car p1) 
(cdr p1) 'curveto (car p2) (cdr p2) (car p3) (cdr p3) (car p4) (cdr p4) 'lineto 
(car p5) (cdr p5) 'curveto (car p6) (cdr p6) (car p7) (cdr p7) (car p8) (cdr 
p8) 'closepath) l1 l2 f))
            ) ;let
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (markup #:stencil stampino)
          )
          ((member nome (list "Hairpin"))
            ;ricostruisco l'espressione grafica con i punti modificati
            ;PUNTI SCALATI OPPURE RIFERITI ALLA NOTA PIU' VICINA?
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! x-pos (+ x-pos (car (list-ref espressione-stampino 1)))) 
;primo translate-stencil
            (set! y-pos (+ y-pos (cdr (list-ref espressione-stampino 1))))
            (let*
              (
                (espressione-path (cdr (list-ref espressione-stampino 2)))
                (t1 (list-ref (list-ref espressione-path 0) 1)) ;tickness
                (p1 (cons (list-ref (list-ref espressione-path 0) 2) (list-ref 
(list-ref espressione-path 0) 3))) ;primo punto
                (p2 (cons (list-ref (list-ref espressione-path 0) 4) (list-ref 
(list-ref espressione-path 0) 5))) ;secondo punto
                (t2 (list-ref (list-ref espressione-path 1) 1)) ;tickness
                (p3 (cons (list-ref (list-ref espressione-path 1) 2) (list-ref 
(list-ref espressione-path 1) 3))) ;primo punto
                (p4 (cons (list-ref (list-ref espressione-path 1) 4) (list-ref 
(list-ref espressione-path 1) 5))) ;secondo punto
              )
              ;trova le coordinate assolute dei punti
              (set! p1 (cons (+ (car p1) x-pos) (+ (cdr p1) y-pos 
offset-raggio)))
              (set! p2 (cons (+ (car p2) x-pos) (+ (cdr p2) y-pos 
offset-raggio)))
              (set! p3 (cons (+ (car p3) x-pos) (+ (cdr p3) y-pos 
offset-raggio)))
              (set! p4 (cons (+ (car p4) x-pos) (+ (cdr p4) y-pos 
offset-raggio)))
              ;trova le coordinate circolari scalate
              (set! p1 (plineare->pcircolare minimo-x massimo-x p1))
              (set! p2 (plineare->pcircolare minimo-x massimo-x p2))
              (set! p3 (plineare->pcircolare minimo-x massimo-x p3))
              (set! p4 (plineare->pcircolare minimo-x massimo-x p4))
              (set! espressione-stampino (list 'combine-stencil (list 
'draw-line t1 (car p1) (cdr p1) (car p2) (cdr p2)) (list 'draw-line t2 (car p3) 
(cdr p3) (car p4) (cdr p4))))
            ) ;let
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (markup #:stencil stampino)
          )
          ((member nome (list "KeySignature"))
            ;spacchetta lo stampino nelle singole alterazioni
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! lista-temp (list)) ;cancella la lista-temp
            (spacchetta-armatura x-pos y-pos espressione-stampino)
            (markup #:stencil
              (apply ly:stencil-add
                (map
                  (lambda (s)
                    (set! stampino (ly:make-stencil (list-ref s 2) (cons -1 1) 
(cons -1 1)))
                    (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio (list-ref s 1)))))
                    (set! angolo (+ (/ (* (- (list-ref s 0) minimo-x) -360) 
massimo-x) 90))
                    (set! stampino (ly:stencil-rotate-absolute stampino angolo 
0 0))
                    stampino
                  ) ;lambda
                lista-temp) ;map
              ) ;apply
            ) ;markup
          )
          ((member nome (list "LedgerLineSpanner"))
            ;spacchetta lo stampino nei singoli tagli addizionali
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! lista-temp (list)) ;cancella la lista-temp
            (spacchetta-tagli x-pos y-pos espressione-stampino)
            (markup #:stencil
              (apply ly:stencil-add
                (map
                  (lambda (s)
                    (set! stampino (ly:make-stencil (list-ref s 2) (cons -1 1) 
(cons -1 1)))
                    (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio (list-ref s 1)))))
                    (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x 
(list-ref s 0) (list-ref s 1) -1))
                    (set! stampino (ly:stencil-rotate-absolute stampino angolo 
0 0))
                    stampino
                  ) ;lambda
                lista-temp) ;map
              ) ;apply
            ) ;markup
          )
          ((member nome (list "Stem" "Flag" "Dots" "Script" "TextScript" 
"DynamicText" "LyricText"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          ((member nome (list "Fingering"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! x-pos (* (+ offset-raggio y-pos) (sin (degrees->radians 
angolo))))
            (set! y-pos (* (+ offset-raggio y-pos) (cos (degrees->radians 
angolo))))
            (markup #:translate (cons (- x-pos) y-pos) #:rotate angolo #:finger 
testo-diteggiatura)
          )
          ((member nome (list "Accidental" "NoteHead"))
            ;da tenere vicino alla testa della nota o alla pausa
            ;(ly:message "\nMOMENTO ~a\nPOSIZIONE X=~a Y=~a\n~a" momento x-pos 
y-pos espressione-stampino)
            (set! stampino (ly:make-stencil espressione-stampino (cons -1 1) 
(cons -1 1)))
            (set! stampino (ly:stencil-translate stampino (cons 0 (+ 
offset-raggio y-pos))))
            (set! angolo (angolo-vicino-nota-pausa minimo-x massimo-x x-pos 
y-pos momento))
            (set! stampino (ly:stencil-rotate-absolute stampino angolo 0 0))
            (markup #:stencil stampino)
          )
          (else
            (markup #:center-align #:with-color "red" "STENCIL NON 
INTERCETTATO")
          ) ;else
        ) ;cond
      ) ;let
    ) ;lambda
  lista-stampini) ;map
) %begin
} } } } }

Reply via email to