%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                  BEGIN of INCLUDE FILE pitchedArticulations.ly                           %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (c)copyright Arnold W., Fuerth, Germany, anno Domini 2011 - 2012
%
% This part of code is designed for the use with the music engraving software LILYPOND
% and may be redistributed and used under the same copyright condition which LILYPOND uses.
% At the moment this is 'GPLv3' (not GPLv3+), the GNU General Public License, version 3,
% as published by the Free Software Foundation.
%


#(define (articulationtext-trill-pitched grob semitone-count)
  (let*
   ((sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (output-text-selector "fallback")
   )
   (let ((my-note-column (ly:grob-parent grob X)))
    (if (not (null? my-note-column))
     (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
      (if (not (null? noteheadlist))
       (let ((notehead-count (ly:grob-array-length noteheadlist)))
        (if (> notehead-count 0)
         (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
          (if (not (null? reference-notehead))
           (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
            (if (not (null? reference-pitch))
             (let ((articulation-pitch (ly:pitch-transpose reference-pitch
                 (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2)))))
              (set! output-text-selector (ly:pitch-alteration articulation-pitch))
              ; (display "\n articulation-accidental = ") (display output-text-selector) (display ". ")
   )))))))))))
   (case output-text-selector
    ((-1) (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
            (#:translate (cons (* 0.20 sz-mult) (* sz-mult 1.85))
             (#:fontsize -4 (#:doubleflat)))))))
    ((-1/2) (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
            (#:translate (cons (* 0.60 sz-mult) (* sz-mult 1.85))
             (#:fontsize -4 (#:flat)))))))
    ((0) (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
           (#:translate (cons (* 0.65 sz-mult) (* sz-mult 2.35))
            (#:fontsize -4 (#:natural)))))))
    ((1/2) (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
           (#:translate (cons (* 0.40 sz-mult) (* sz-mult 2.30))
            (#:fontsize -4 (#:sharp)))))))
    ((1) (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
           (#:translate (cons (* 0.45 sz-mult) (* sz-mult 2.20))
            (#:fontsize -4 (#:doublesharp)))))))
    (else
     (if (eq? semitone-count 2)
      (begin (ly:warning " trill fallback to (+) symbol")
       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
           (#:translate (cons (* 0.35 sz-mult) (* 1.8 sz-mult))
            (#:override (cons 'thickness sz-mult ) (#:circle (#:fontsize -4 "+"))))))))
      (begin (ly:warning " trill fallback to (-) symbol")
       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
           (#:translate (cons (* 0.35 sz-mult) (* 1.8 sz-mult))
            (#:override (cons 'thickness sz-mult ) (#:circle (#:fontsize -4 (#:char 8211))))))))))))))

#(define (articulationtext-trill-minor grob) (articulationtext-trill-pitched grob 1))
#(define (articulationtext-trill-major grob) (articulationtext-trill-pitched grob 2))

minorTrill =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "trill")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-trill-minor
      (acons 'midi-togle-up-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)
  
majorTrill =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "trill")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-trill-major
      (acons 'midi-togle-up-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)


#(define (articulationtext-upside-pitched grob semitone-count glyph-name)
  (let*
   ((sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (output-text-selector "fallback")
   )
   (let ((my-note-column (ly:grob-parent grob X)))
    (if (not (null? my-note-column))
     (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
      (if (not (null? noteheadlist))
       (let ((notehead-count (ly:grob-array-length noteheadlist)))
        (if (> notehead-count 0)
         (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
          (if (not (null? reference-notehead))
           (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
            (if (not (null? reference-pitch))
             (let ((articulation-pitch (ly:pitch-transpose reference-pitch
                 (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2)))))
              (set! output-text-selector (ly:pitch-alteration articulation-pitch))
              ; (display "\n articulation-accidental = ") (display output-text-selector) (display ". ")
   )))))))))))
   (case output-text-selector
    ((-1) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
         (#:center-column (#:fontsize -3 (#:doubleflat)
           #:musicglyph glyph-name)))))))
    ((-1/2) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
         (#:center-column (#:fontsize -3 (#:flat)
           #:musicglyph glyph-name)))))))
    ((0) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
         (#:center-column (#:fontsize -3 (#:natural)
           #:musicglyph glyph-name)))))))
    ((1/2) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:sharp)
           #:musicglyph glyph-name)))))))
    ((1) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doublesharp)
           #:musicglyph glyph-name)))))))
    (else
     (if (eq? semitone-count 2)
      (begin (ly:warning " ~a fallback to (+) symbol" glyph-name)
       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
          (#:center-column (#:override (cons 'thickness sz-mult)
            (#:circle "+")
            (#:musicglyph glyph-name))))))))
      (begin (ly:warning " ~a fallback to (-) symbol" glyph-name)
       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
          (#:center-column (#:override (cons 'thickness sz-mult)
            (#:circle (#:char 8211))
            (#:musicglyph glyph-name)))))))))))))

#(define (articulationtext-downside-pitched grob semitone-count glyph-name)
  (let*
   ((sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (output-text-selector "fallback")
   )
   (let ((my-note-column (ly:grob-parent grob X)))
    (if (not (null? my-note-column))
     (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
      (if (not (null? noteheadlist))
       (let ((notehead-count (ly:grob-array-length noteheadlist)))
        (if (> notehead-count 0)
         (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
          (if (not (null? reference-notehead))
           (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
            (if (not (null? reference-pitch))
             (let ((articulation-pitch (ly:pitch-transpose reference-pitch (ly:pitch-negate
                  (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2))))))
              (set! output-text-selector (ly:pitch-alteration articulation-pitch))
              ; (display "\n articulation-accidental = ") (display output-text-selector) (display ". ")
   )))))))))))
   (case output-text-selector
    ((-1) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:musicglyph glyph-name
          #:fontsize -3 (#:doubleflat))))))))
    ((-1/2) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:musicglyph glyph-name
          #:fontsize -3 (#:flat))))))))
    ((0) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:musicglyph glyph-name
          #:fontsize -3 (#:natural))))))))
    ((1/2) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:musicglyph glyph-name
          #:fontsize -3 (#:sharp))))))))
    ((1) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:musicglyph glyph-name
          #:fontsize -3 (#:doublesharp))))))))
    (else
     (if (eq? semitone-count 2)
      (begin (ly:warning " ~a fallback to (+) symbol" glyph-name)
       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
          (#:center-column (#:musicglyph glyph-name
            (#:override (cons 'thickness sz-mult)
             (#:circle "+")))))))))
      (begin (ly:warning " ~a fallback to (-) symbol" glyph-name)
       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
          (#:center-column (#:musicglyph glyph-name
            (#:override (cons 'thickness sz-mult)
             (#:circle (#:char 8211)))))))))))))))

#(define (articulationtext-bothsides-pitched grob semitones-up semitones-down glyph-name)
  (let*
   ((sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (upper-alteration "undef")
    (lower-alteration "undef")
    (output-text-selector 0)
   )
   (let ((my-note-column (ly:grob-parent grob X)))
    (if (not (null? my-note-column))
     (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
      (if (not (null? noteheadlist))
       (let ((notehead-count (ly:grob-array-length noteheadlist)))
        (if (> notehead-count 0)
         (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
          (if (not (null? reference-notehead))
           (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
            (if (not (null? reference-pitch))
             (let*
              ((articulation-pitch-up (ly:pitch-transpose reference-pitch
                 (ly:make-pitch 0 1 (* (- semitones-up 2) 1/2))))
               (articulation-pitch-down (ly:pitch-transpose reference-pitch (ly:pitch-negate
                  (ly:make-pitch 0 1 (* (- semitones-down 2) 1/2))))))
              (set! upper-alteration (ly:pitch-alteration articulation-pitch-up))
              (set! lower-alteration (ly:pitch-alteration articulation-pitch-down))
              ; (display "\n upside|downsde-pitch: ") (display (string-concatenate (list
              ;    (number->string (ly:pitch-alteration articulation-pitch-up))
              ;    "|"
              ;    (number->string (ly:pitch-alteration articulation-pitch-down)))))
   )))))))))))
   ; (display "\n upper-alteration = ") (display upper-alteration)
   ; (display "\n lower-alteration = ") (display lower-alteration)
   (case upper-alteration
    ((-1)   (set! output-text-selector 10))
    ((-1/2) (set! output-text-selector 30))
    ((0)    (set! output-text-selector 50))
    ((1/2)  (set! output-text-selector 70))
    ((1)    (set! output-text-selector 90))
   )
   (case lower-alteration
    ((-1)   (set! output-text-selector (+ output-text-selector 1)))
    ((-1/2) (set! output-text-selector (+ output-text-selector 3)))
    ((0)    (set! output-text-selector (+ output-text-selector 5)))
    ((1/2)  (set! output-text-selector (+ output-text-selector 7)))
    ((1)    (set! output-text-selector (+ output-text-selector 9)))
   )
   (case output-text-selector
    ((17) (ly:warning " upside 2 semitones down and downside 1 semitone up - no regular use expected!"))
    ((19) (ly:warning " upside 2 semitones down and downside 2 semitones up - no regular use expected!"))
    ((39) (ly:warning " upside 1 semitone down and downside 2 semitones up - no regular use expected!"))
    ((51) (ly:warning " upside natural and downside 2 semitones down - no regular use expected!"))
    ((71) (ly:warning " upside 1 semitone up and downside 2 semitones down - no regular use expected!"))
    ((73) (ly:warning " upside 1 semitone up and downside 1 semitone down - no regular use expected!"))
    ((91) (ly:warning " upside 2 semitone up and downside 2 semitones down - no regular use expected!"))
    ((93) (ly:warning " upside 2 semitone up and downside 1 semitone down - no regular use expected!"))
    ((95) (ly:warning " upside 2 semitone up and downside natural - no regular use expected!"))
   )
   (case output-text-selector
    ((11) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doubleflat)
          #:musicglyph glyph-name #:fontsize -3 (#:doubleflat))))))))
    ((13) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doubleflat)
          #:musicglyph glyph-name #:fontsize -3 (#:flat))))))))
    ((15) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doubleflat)
          #:musicglyph glyph-name #:fontsize -3 (#:natural))))))))
    ((31) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:flat)
          #:musicglyph glyph-name #:fontsize -3 (#:doubleflat))))))))
    ((33) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:flat)
          #:musicglyph glyph-name #:fontsize -3 (#:flat))))))))
    ((35) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:flat)
          #:musicglyph glyph-name #:fontsize -3 (#:natural))))))))
    ((37) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:flat)
          #:musicglyph glyph-name #:fontsize -3 (#:sharp))))))))
    ((53) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:natural)
          #:musicglyph glyph-name #:fontsize -3 (#:flat))))))))
    ((55) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:natural)
          #:musicglyph glyph-name #:fontsize -3 (#:natural))))))))
    ((57) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:natural)
          #:musicglyph glyph-name #:fontsize -3 (#:sharp))))))))
    ((59) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:natural)
          #:musicglyph glyph-name #:fontsize -3 (#:doublesharp))))))))
    ((75) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:sharp)
          #:musicglyph glyph-name #:fontsize -3 (#:natural))))))))
    ((77) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:sharp)
          #:musicglyph glyph-name #:fontsize -3 (#:sharp))))))))
    ((79) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:sharp)
          #:musicglyph glyph-name #:fontsize -3 (#:doublesharp))))))))
    ((97) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doublesharp)
          #:musicglyph glyph-name #:fontsize -3 (#:sharp))))))))
    ((99) (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
        (#:center-column (#:fontsize -3 (#:doublesharp)
          #:musicglyph glyph-name #:fontsize -3 (#:doublesharp))))))))
    (else
     (if (eq? semitones-up 2)
      (if (eq? semitones-down 2)
       (begin (ly:warning " ~a fallback to (+)/(+) symbol" glyph-name)
        (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
           (#:center-column (#:override (cons 'thickness sz-mult)
             (#:circle "+" ) (#:musicglyph glyph-name)
             (#:override (cons 'thickness sz-mult) (#:circle "+" )))))))))
       (begin (ly:warning " ~a fallback to (+)/(-) symbol" glyph-name)
        (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
           (#:center-column (#:override (cons 'thickness sz-mult)
             (#:circle "+" ) (#:musicglyph glyph-name)
             (#:override (cons 'thickness sz-mult)(#:circle (#:char 8211)))))))))))
      (if (eq? semitones-down 2)
       (begin (ly:warning " ~a fallback to (-)/(+) symbol" glyph-name)
        (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
           (#:center-column (#:override (cons 'thickness sz-mult)
             (#:circle (#:char 8211)) (#:musicglyph glyph-name)
             (#:override (cons 'thickness sz-mult) (#:circle "+" )))))))))
       (begin (ly:warning " ~a fallback to (-)/(-) symbol" glyph-name)
        (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
           (#:center-column (#:override (cons 'thickness sz-mult)
             (#:circle (#:char 8211)) (#:musicglyph glyph-name)
             (#:override (cons 'thickness sz-mult) (#:circle (#:char 8211))))))))))))))))


#(define (articulationtext-prall-minor grob) (articulationtext-upside-pitched grob 1 "scripts.prall"))
#(define (articulationtext-prall-major grob) (articulationtext-upside-pitched grob 2 "scripts.prall"))

minorPrall =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "prall")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-prall-minor
      (acons 'midi-togle-up-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)
  
majorPrall =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "prall")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-prall-major
      (acons 'midi-togle-up-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)

#(define (articulationtext-mordent-minor grob) (articulationtext-downside-pitched grob 1 "scripts.mordent"))
#(define (articulationtext-mordent-major grob) (articulationtext-downside-pitched grob 2 "scripts.mordent"))

minorMordent =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "mordent")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-mordent-minor
      (acons 'midi-togle-down-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)

majorMordent =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "mordent")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-mordent-major
      (acons 'midi-togle-down-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)
  
#(define (articulationtext-turn-minor-normal grob) (articulationtext-upside-pitched grob 1 "scripts.turn"))
#(define (articulationtext-turn-major-normal grob) (articulationtext-upside-pitched grob 2 "scripts.turn"))
#(define (articulationtext-turn-normal-minor grob) (articulationtext-downside-pitched grob 1 "scripts.turn"))
#(define (articulationtext-turn-normal-major grob) (articulationtext-downside-pitched grob 2 "scripts.turn"))
#(define (articulationtext-turn-major-major grob) (articulationtext-bothsides-pitched grob 2 2 "scripts.turn"))
#(define (articulationtext-turn-minor-major grob) (articulationtext-bothsides-pitched grob 1 2 "scripts.turn"))
#(define (articulationtext-turn-major-minor grob) (articulationtext-bothsides-pitched grob 2 1 "scripts.turn"))
#(define (articulationtext-turn-minor-minor grob) (articulationtext-bothsides-pitched grob 1 1 "scripts.turn"))

minorNormalTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-minor-normal
      (acons 'midi-togle-up-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)

majorNormalTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-major-normal
      (acons 'midi-togle-up-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)

normalMinorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-normal-minor
      (acons 'midi-togle-down-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)

normalMajorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-normal-major
      (acons 'midi-togle-down-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)

minorMinorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-minor-minor
      (acons 'midi-togle-up-semitonecount 1
       (acons 'midi-togle-down-semitonecount 1
        (ly:music-property m 'tweaks))))))) m)

minorMajorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-minor-major
      (acons 'midi-togle-up-semitonecount 1
       (acons 'midi-togle-down-semitonecount 2
        (ly:music-property m 'tweaks))))))) m)

majorMinorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-major-minor
      (acons 'midi-togle-up-semitonecount 2
       (acons 'midi-togle-down-semitonecount 1
        (ly:music-property m 'tweaks))))))) m)

majorMajorTurn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "turn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-turn-major-major
      (acons 'midi-togle-up-semitonecount 2
       (acons 'midi-togle-down-semitonecount 2
        (ly:music-property m 'tweaks))))))) m)

#(define (articulationtext-reverseturn-minor-normal grob) (articulationtext-downside-pitched grob 1 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-major-normal grob) (articulationtext-downside-pitched grob 2 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-normal-minor grob) (articulationtext-upside-pitched grob 1 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-normal-major grob) (articulationtext-upside-pitched grob 2 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-major-major grob) (articulationtext-bothsides-pitched grob 2 2 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-minor-major grob) (articulationtext-bothsides-pitched grob 2 1 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-major-minor grob) (articulationtext-bothsides-pitched grob 1 2 "scripts.reverseturn"))
#(define (articulationtext-reverseturn-minor-minor grob) (articulationtext-bothsides-pitched grob 1 1 "scripts.reverseturn"))

minorNormalReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-minor-normal
      (acons 'midi-togle-down-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)

majorNormalReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
 (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-major-normal
      (acons 'midi-togle-down-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)

normalMinorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-normal-minor
      (acons 'midi-togle-up-semitonecount 1
       (ly:music-property m 'tweaks)))))) m)

normalMajorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-normal-major
      (acons 'midi-togle-up-semitonecount 2
       (ly:music-property m 'tweaks)))))) m)
  
minorMinorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-minor-minor
      (acons 'midi-togle-down-semitonecount 1
       (acons 'midi-togle-up-semitonecount 1
        (ly:music-property m 'tweaks))))))) m)

minorMajorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-minor-major
      (acons 'midi-togle-down-semitonecount 1
       (acons 'midi-togle-up-semitonecount 2
        (ly:music-property m 'tweaks))))))) m)

majorMinorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-major-minor
      (acons 'midi-togle-down-semitonecount 2
       (acons 'midi-togle-up-semitonecount 1
        (ly:music-property m 'tweaks))))))) m)

majorMajorReverseturn =
#(let ((m (make-music 'ArticulationEvent 'articulation-type "reverseturn")))
  (ly:music-set-property! m 'tweaks
   (acons 'font-name "New Century Schoolbook"
    (acons 'stencil ly:text-interface::print
     (acons 'text articulationtext-reverseturn-major-major
      (acons 'midi-togle-down-semitonecount 2
       (acons 'midi-togle-up-semitonecount 2
        (ly:music-property m 'tweaks))))))) m)

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

#(define (make-trillspan-pitched grob semitone-count)
  (let*
   ((my-note-column (ly:grob-parent grob X))
    (sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (used-version (ly:version))
    (y-shift 0.0)
   )
   (if (< (car used-version) 2)
    (set! y-shift -1.0)
    (if (> (car used-version) 2)
     (set! y-shift 0.0)
     (if (> (cadr used-version) 12)
      (set! y-shift 0.0)
      (set! y-shift -1.0)
   )))
   (if (not (null? my-note-column))
    (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
     (if (not (null? noteheadlist))
      (let ((notehead-count (ly:grob-array-length noteheadlist)))
       (if (> notehead-count 0)
        (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
         (if (not (null? reference-notehead))
          (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
           (if (not (null? reference-pitch))
            (let*
             ((trill-pitch (ly:pitch-transpose reference-pitch (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2))))
              (trill-accidental (ly:pitch-alteration trill-pitch)))
             ; (display "\n trill-accidental = ") (display trill-accidental) (display " for ") (display semitone-count) (display " semitones. ")
             ; (if (list? (ly:grob-property grob 'bound-details)) (display "\nbound-details is a list. "))
             (let ((my-bound-details (alist-copy (ly:grob-property grob 'bound-details))))
              (if (not (null? my-bound-details))
               (begin
                (ly:grob-set-property! grob 'bound-details my-bound-details)
                (let ((my-left-details (alist-copy (ly:assoc-get 'left my-bound-details))))
                 (if (not (null? my-left-details))
                  (begin
                   (assoc-set! my-bound-details 'left my-left-details)
                   (case trill-accidental
                    ((-1) (assoc-set! my-left-details 'text
                      (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
                         (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                          (#:fontsize -4 (#:doubleflat)))))))))
                    ((-1/2) (assoc-set! my-left-details 'text
                      (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
                         (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                          (#:fontsize -4 (#:flat)))))))))
                    ((0) (assoc-set! my-left-details 'text
                      (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
                         (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                          (#:fontsize -4 (#:natural)))))))))
                    ((1/2) (assoc-set! my-left-details 'text
                      (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
                         (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                          (#:fontsize -4 (#:sharp)))))))))
                    ((1) (assoc-set! my-left-details 'text
                      (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
                         (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                          (#:fontsize -4 (#:doublesharp)))))))))
                    (else (if (eq? semitone-count 2)
                      (begin (ly:warning " trillspan fallback to (+) symbol ")
                      (assoc-set! my-left-details 'text
                       (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine
                          (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                           (#:fontsize -4 (#:override (cons 'thickness sz-mult ) (#:circle "+"))))))))))
                      (begin (ly:warning " trillspan fallback to (-) symbol ")
                      (assoc-set! my-left-details 'text
                       (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine
                          (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                           (#:fontsize -4 (#:override (cons 'thickness sz-mult ) (#:circle (#:char 8211)))))))))))))))
                  (ly:warning " left in bound-details of trillSpan grob not found! "))))
               (ly:warning " bound-details in trillSpan grob not found! ")))))))))))))))

#(define (make-trillspan-minor grob) (make-trillspan-pitched grob 1))
#(define (make-trillspan-major grob) (make-trillspan-pitched grob 2))

nextTrillSpanMinor = \once \override TrillSpanner #'before-line-breaking = #make-trillspan-minor
nextTrillSpanMajor = \once \override TrillSpanner #'before-line-breaking = #make-trillspan-major

startMinorTrillSpan =
#(let ((m (make-music 'TrillSpanEvent 'span-direction -1)))
  (ly:music-set-property! m 'tweaks
   (acons 'before-line-breaking make-trillspan-minor
    (acons 'midi-togle-up-semitonecount 1
     (ly:music-property m 'tweaks)))) m)

startMajorTrillSpan =
#(let ((m (make-music 'TrillSpanEvent 'span-direction -1)))
  (ly:music-set-property! m 'tweaks
   (acons 'before-line-breaking make-trillspan-major
    (acons 'midi-togle-up-semitonecount 2
     (ly:music-property m 'tweaks)))) m)

#(define (make-pitched-trillspan-pitched grob)
  (let*
   ((sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
    (trill-accidental 999)
    (my-trill-pitch (ly:event-property (event-cause grob) 'pitch))  
    (used-version (ly:version))
    (y-shift 0.0)
   )
   (if (< (car used-version) 2)
    (set! y-shift -1.0)
    (if (> (car used-version) 2)
     (set! y-shift 0.0)
     (if (> (cadr used-version) 12)
      (set! y-shift 0.0)
      (set! y-shift -1.0)
   )))
   (if (not (null? my-trill-pitch))
    (set! trill-accidental (ly:pitch-alteration my-trill-pitch))
    (ly:warning  " no Trill Pitch found! "))
   (let ((my-bound-details (alist-copy (ly:grob-property grob 'bound-details))))
    (if (not (null? my-bound-details))
     (begin
      (ly:grob-set-property! grob 'bound-details my-bound-details)
      (let ((my-left-details (alist-copy (ly:assoc-get 'left my-bound-details))))
       (if (not (null? my-left-details))
        (begin
         (assoc-set! my-bound-details 'left my-left-details)
         (case trill-accidental
          ((-1) (assoc-set! my-left-details 'text
            (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
               (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                (#:fontsize -4 (#:doubleflat)))))))))
          ((-1/2) (assoc-set! my-left-details 'text
            (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
               (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                (#:fontsize -4 (#:flat)))))))))
          ((0) (assoc-set! my-left-details 'text
            (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
               (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                (#:fontsize -4 (#:natural)))))))))
          ((1/2) (assoc-set! my-left-details 'text
            (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
               (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                (#:fontsize -4 (#:sharp)))))))))
          ((1) (assoc-set! my-left-details 'text
            (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine 
               (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                (#:fontsize -4 (#:doublesharp)))))))))
          (else (begin (ly:warning " trillspan fallback to (?) symbol ")
            (assoc-set! my-left-details 'text
             (markup #:line (#:center-align (#:translate (cons 0 (* sz-mult y-shift)) (#:combine
                (#:musicglyph "scripts.trill") (#:translate (cons (* 1.50 sz-mult) (* sz-mult 1.5))
                 (#:fontsize -4 (#:override (cons 'thickness sz-mult ) (#:circle "?")))))))))))))
        (ly:warning " left in bound-details of trillSpan grob not found! "))))
     (ly:warning " bound-details in trillSpan grob not found! ")))))

nextTrillSpanPitched = \once \override TrillSpanner #'before-line-breaking = #make-pitched-trillspan-pitched

startPitchedTrillSpan =
#(let ((m (make-music 'TrillSpanEvent 'span-direction -1)))
  (ly:music-set-property! m 'tweaks
   (acons 'before-line-breaking make-pitched-trillspan-pitched
    (ly:music-property m 'tweaks))) m)

#(define (make-trill-pitched grob semitone-count)
  (let*
   ((my-meta (ly:grob-property grob 'meta))
    (my-stencil (ly:grob-property grob 'script-stencil))
    (sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
   )
   (if (pair? my-stencil)
    (let ((rv (cdr my-stencil)))
     (if (pair? rv)
      (let ((script-type (car rv)))
       (if (equal? script-type "trill")
        (begin
         ; (ly:grob-set-property! grob 'color (x11-color 'red))
         (ly:grob-set-property! grob 'font-name "New Century Schoolbook")
         (ly:grob-set-property! grob 'stencil ly:text-interface::print)
         ; Set the fallback glyph-compound
         (if (eq? semitone-count 2)
          (ly:grob-set-property! grob 'text
           (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
               (#:translate (cons (* 0.35 sz-mult) (* 1.8 sz-mult))
                (#:override (cons 'thickness sz-mult ) (#:circle (#:fontsize -4 "+"))))))))
          (ly:grob-set-property! grob 'text
           (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
               (#:translate (cons (* 0.35 sz-mult) (* 1.8 sz-mult))
                (#:override (cons 'thickness sz-mult ) (#:circle (#:fontsize -4 (#:char 8211)))))))))
         )
         (let ((my-note-column (ly:grob-parent grob X)))
          (if (not (null? my-note-column))
           (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
            (if (not (null? noteheadlist))
             (let ((notehead-count (ly:grob-array-length noteheadlist)))
              (if (> notehead-count 0)
               (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
                (if (not (null? reference-notehead))
                 (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
                  (if (not (null? reference-pitch))
                   (let*
                    ((prall-pitch (ly:pitch-transpose reference-pitch (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2))))
                     (prall-accidental (ly:pitch-alteration prall-pitch))
                    )
                    ; (display "\n prall-accidental = ") (display prall-accidental) (display ". ")
                    (case prall-accidental
                     ((-1) (ly:grob-set-property! grob 'text
                       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
                            (#:translate (cons (* 0.20 sz-mult) (* sz-mult 1.85))
                             (#:fontsize -4 (#:doubleflat))))))))
                     ((-1/2) (ly:grob-set-property! grob 'text
                       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
                            (#:translate (cons (* 0.60 sz-mult) (* sz-mult 1.85))
                             (#:fontsize -4 (#:flat))))))))
                     ((0) (ly:grob-set-property! grob 'text
                       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
                            (#:translate (cons (* 0.65 sz-mult) (* sz-mult 2.35))
                             (#:fontsize -4 (#:natural))))))))
                     ((1/2) (ly:grob-set-property! grob 'text
                       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
                            (#:translate (cons (* 0.40 sz-mult) (* sz-mult 2.30))
                             (#:fontsize -4 (#:sharp))))))))
                     ((1) (ly:grob-set-property! grob 'text
                       (markup #:line (#:center-align (#:combine (#:musicglyph "scripts.trill")
                            (#:translate (cons (* 0.45 sz-mult) (* sz-mult 2.20))
                             (#:fontsize -4 (#:doublesharp)))))))))))))))))))))
        (ly:warning " make-trill-pitched: skipping a not-trill-articulation-script "))))))))

#(define (make-trill-minor grob) (make-trill-pitched grob 1))
#(define (make-trill-major grob) (make-trill-pitched grob 2))

nextTrillMinor = \once \override Script #'before-line-breaking = #make-trill-minor
nextTrillMajor = \once \override Script #'before-line-breaking = #make-trill-major



#(define (make-articulation-upside-pitched grob semitone-count for-script-type glyph-name)
  (let*
   ((my-meta (ly:grob-property grob 'meta))
    (my-stencil (ly:grob-property grob 'script-stencil))
    (sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
   )
   (if (pair? my-stencil)
    (let ((rv (cdr my-stencil)))
     (if (pair? rv)
      (let ((script-type (car rv)))
       (if (equal? script-type for-script-type)
        (begin
         ; (ly:grob-set-property! grob 'color (x11-color 'red))
         (ly:grob-set-property! grob 'font-name "New Century Schoolbook")
         (ly:grob-set-property! grob 'stencil ly:text-interface::print)
         ; Set the fallback glyph-compound
         (if (eq? semitone-count 2)
          (ly:grob-set-property! grob 'text
           (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
              (#:center-column (#:override (cons 'thickness sz-mult)
                (#:circle "+")
                (#:musicglyph glyph-name))))))))
          (ly:grob-set-property! grob 'text
           (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
              (#:center-column (#:override (cons 'thickness sz-mult)
                (#:circle (#:char 8211))
                (#:musicglyph glyph-name)))))))))
         (let ((my-note-column (ly:grob-parent grob X)))
          (if (not (null? my-note-column))
           (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
            (if (not (null? noteheadlist))
             (let ((notehead-count (ly:grob-array-length noteheadlist)))
              (if (> notehead-count 0)
               (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
                (if (not (null? reference-notehead))
                 (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
                  (if (not (null? reference-pitch))
                   (let*
                    ((prall-pitch (ly:pitch-transpose reference-pitch (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2))))
                     (prall-accidental (ly:pitch-alteration prall-pitch))
                    )
                    ; (display "\n prall-accidental = ") (display prall-accidental) (display ". ")
                    (case prall-accidental
                     ((-1) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:fontsize -3 (#:doubleflat)
                            #:musicglyph glyph-name))))))))
                     ((-1/2) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:fontsize -3 (#:flat)
                            #:musicglyph glyph-name))))))))
                     ((0) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:fontsize -3 (#:natural)
                            #:musicglyph glyph-name))))))))
                     ((1/2) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                         (#:center-column (#:fontsize -3 (#:sharp)
                            #:musicglyph glyph-name))))))))
                     ((1) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:fontsize -3 (#:doublesharp)
                             #:musicglyph glyph-name)))))))))))))))))))))
        ; (display (string-concatenate (list
        ;    "\nmake-articulation-upside-pitched: skipping a not-"
        ;    for-script-type
        ;    "-articulation-script ")))
 )))))))

#(define (make-articulation-downside-pitched grob semitone-count for-script-type glyph-name)
  (let*
   ((my-meta (ly:grob-property grob 'meta))
    (my-stencil (ly:grob-property grob 'script-stencil))
    (sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
   )
   (if (pair? my-stencil)
    (let ((rv (cdr my-stencil)))
     (if (pair? rv)
      (let ((script-type (car rv)))
       (if (equal? script-type for-script-type)
        (begin
         ; (ly:grob-set-property! grob 'color (x11-color 'red))
         (ly:grob-set-property! grob 'font-name "New Century Schoolbook")
         (ly:grob-set-property! grob 'stencil ly:text-interface::print)
         ; Set the fallback glyph-compound
         (if (eq? semitone-count 2)
          (ly:grob-set-property! grob 'text
           (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
              (#:center-column (#:musicglyph glyph-name
                (#:override (cons 'thickness sz-mult)
                 (#:circle "+")))))))))
          (ly:grob-set-property! grob 'text
           (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
              (#:center-column (#:musicglyph glyph-name
                (#:override (cons 'thickness sz-mult)
                 (#:circle (#:char 8211)))))))))))
         (let ((my-note-column (ly:grob-parent grob X)))
          (if (not (null? my-note-column))
           (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
            (if (not (null? noteheadlist))
             (let ((notehead-count (ly:grob-array-length noteheadlist)))
              (if (> notehead-count 0)
               (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
                (if (not (null? reference-notehead))
                 (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
                  (if (not (null? reference-pitch))
                   (let*
                    ((prall-pitch (ly:pitch-transpose reference-pitch (ly:pitch-negate
                        (ly:make-pitch 0 1 (* (- semitone-count 2) 1/2)))))
                     (prall-accidental (ly:pitch-alteration prall-pitch))
                    )
                    ; (display "\n prall-accidental = ") (display prall-accidental) (display ". ")
                    (case prall-accidental
                     ((-1) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:musicglyph glyph-name
                            #:fontsize -3 (#:doubleflat)))))))))
                     ((-1/2) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:musicglyph glyph-name
                            #:fontsize -3 (#:flat)))))))))
                     ((0) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:musicglyph glyph-name
                            #:fontsize -3 (#:natural)))))))))
                     ((1/2) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:musicglyph glyph-name
                            #:fontsize -3 (#:sharp)))))))))
                     ((1) (ly:grob-set-property! grob 'text
                       (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                          (#:center-column (#:musicglyph glyph-name
                            #:fontsize -3 (#:doublesharp))))))))))))))))))))))
        ; (display (string-concatenate (list
        ;    "\nmake-articulation-downside-pitched: skipping a not-"
        ;    for-script-type
        ;    "-articulation-script ")))
 )))))))

#(define (make-articulation-bothsides-pitched grob semitones-up semitones-down for-script-type glyph-name)
  (let*
   ((my-meta (ly:grob-property grob 'meta))
    (my-stencil (ly:grob-property grob 'script-stencil))
    (sz (ly:grob-property grob 'font-size 0.0))
    (sz-mult (magstep sz))
   )
   (if (pair? my-stencil)
    (let ((rv (cdr my-stencil)))
     (if (pair? rv)
      (let ((script-type (car rv)))
       (if (equal? script-type for-script-type)
        (begin
         ; (ly:grob-set-property! grob 'color (x11-color 'red))
         (ly:grob-set-property! grob 'font-name "New Century Schoolbook")
         (ly:grob-set-property! grob 'stencil ly:text-interface::print)
         ; Set the fallback glyph-compound
         (if (eq? semitones-up 2)
          (if (eq? semitones-down 2)
           (ly:grob-set-property! grob 'text
            (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
               (#:center-column (#:override (cons 'thickness sz-mult)
                 (#:circle "+" ) (#:musicglyph glyph-name)
                 (#:override (cons 'thickness sz-mult) (#:circle "+" )))))))))
           (ly:grob-set-property! grob 'text
            (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
               (#:center-column (#:override (cons 'thickness sz-mult)
                 (#:circle "+" ) (#:musicglyph glyph-name)
                 (#:override (cons 'thickness sz-mult)(#:circle (#:char 8211)))))))))))
          (if (eq? semitones-down 2)
           (ly:grob-set-property! grob 'text
            (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
               (#:center-column (#:override (cons 'thickness sz-mult)
                 (#:circle (#:char 8211)) (#:musicglyph glyph-name)
                 (#:override (cons 'thickness sz-mult) (#:circle "+" )))))))))
           (ly:grob-set-property! grob 'text
            (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
               (#:center-column (#:override (cons 'thickness sz-mult)
                 (#:circle (#:char 8211)) (#:musicglyph glyph-name)
                 (#:override (cons 'thickness sz-mult) (#:circle (#:char 8211))))))))))))
         (let ((my-note-column (ly:grob-parent grob X)))
          (if (not (null? my-note-column))
           (let ((noteheadlist (ly:grob-object my-note-column 'note-heads)))
            (if (not (null? noteheadlist))
             (let ((notehead-count (ly:grob-array-length noteheadlist)))
              (if (> notehead-count 0)
               (let ((reference-notehead (ly:grob-array-ref noteheadlist 0)))
                (if (not (null? reference-notehead))
                 (let ((reference-pitch (ly:event-property (event-cause reference-notehead) 'pitch)))
                  (if (not (null? reference-pitch))
                   (let*
                    ((upside-pitch (ly:pitch-transpose reference-pitch
                        (ly:make-pitch 0 1 (* (- semitones-up 2) 1/2))))
                     (upside-accidental (ly:pitch-alteration upside-pitch))
                     (downside-pitch (ly:pitch-transpose reference-pitch (ly:pitch-negate
                        (ly:make-pitch 0 1 (* (- semitones-down 2) 1/2)))))
                     (downside-accidental (ly:pitch-alteration downside-pitch))
                    )
                    ; (display "\n upside-accidental = ") (display upside-accidental) (display ". ")
                    ; (display "\n downside-accidental = ") (display downside-accidental) (display ". ")
                    (case upside-accidental
                     ((-1) ; (ly:warning " upside 2 semitones down")
                      (case downside-accidental
                       ((-1) ; (ly:warning " upside 2 semitones down and downside 2 semitones down ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:doubleflat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:doubleflat))))))))
                       )
                       ((-1/2) ; (ly:warning " upside 2 semitones down and downside 1 semitones down ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line ((#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:doubleflat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:flat))))))))
                       )
                       ((0) ; (ly:warning " upside 2 semitones down and downside natural ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:doubleflat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:natural))))))))
                       )
                       ((1/2) (ly:warning " upside 2 semitones down and downside 1 semitone up - no regular usage expected! ")
                       )
                       ((1) (ly:warning " upside 2 semitones down and downside 2 semitones up - no regular usage expected! ")
                       )
                     ))
                     ((-1/2) ; (ly:warning " upside 1 semitone down")
                      (case downside-accidental
                       ((-1) ; (ly:warning " upside 1 semitone down and downside 2 semitones down ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:flat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:doubleflat))))))))
                       )
                       ((-1/2) ; (ly:warning " upside 1 semitone down and downside 1 semitones down ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:flat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:flat))))))))
                       )
                       ((0) ; (ly:warning " upside 1 semitone down and downside natural ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:flat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:natural))))))))
                       )
                       ((1/2) ; (ly:warning " upside 1 semitone down and downside 1 semitone up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:flat)
                              #:musicglyph glyph-name  #:fontsize -3 (#:sharp))))))))
                       )
                       ((1) (ly:warning " upside 1 semitone down and downside 2 semitones up - no regular usage expected! ")
                       )
                     ))
                     ((0) ; (ly:warning " upside natural")
                      (case downside-accidental
                       ((-1) (ly:warning " upside natural and downside 2 semitones down - no regular usage expected! ")
                       )
                       ((-1/2) ; (ly:warning " upside natural and downside 1 semitones down ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:natural)
                              #:musicglyph glyph-name  #:fontsize -3 (#:flat))))))))
                       )
                       ((0) ; (ly:warning " upside natural and downside natural ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:natural)
                              #:musicglyph glyph-name  #:fontsize -3 (#:natural))))))))
                       )
                       ((1/2) ; (ly:warning " upside natural and downside 1 semitone up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:natural)
                              #:musicglyph glyph-name  #:fontsize -3 (#:sharp))))))))
                       )
                       ((1) ; (ly:warning " upside natural and downside 2 semitones up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:natural)
                              #:musicglyph glyph-name  #:fontsize -3 (#:doublesharp))))))))
                       )
                     ))
                     ((1/2) ; (ly:warning " upside 1 semitone up")
                      (case downside-accidental
                       ((-1) (ly:warning " upside 1 semitone up and downside 2 semitones down - no regular usage expected! ")
                       )
                       ((-1/2) (ly:warning " upside 1 semitone up and downside 1 semitones down - no regular usage expected! ")
                       )
                       ((0) ; (ly:warning " upside 1 semitone up and downside natural ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:sharp)
                              #:musicglyph glyph-name  #:fontsize -3 (#:natural))))))))
                       )
                       ((1/2) ; (ly:warning " upside 1 semitone up and downside 1 semitone up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:sharp)
                              #:musicglyph glyph-name  #:fontsize -3 (#:sharp))))))))
                       )
                       ((1) ; (ly:warning " upside 1 semitone up and downside 2 semitones up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:sharp)
                              #:musicglyph glyph-name  #:fontsize -3 (#:doublesharp))))))))
                       )
                     ))
                     ((1) ; (ly:warning " upside 2 semitones up")
                      (case downside-accidental
                       ((-1) (ly:warning " upside 2 semitones up and downside 2 semitones down - no regular usage expected! ")
                       )
                       ((-1/2) (ly:warning " upside 2 semitones up and downside 1 semitones down - no regular usage expected! ")
                       )
                       ((0) (ly:warning " upside 2 semitones up and downside natural - no regular usage expected! ")
                       )
                       ((1/2) ; (ly:warning " upside 2 semitones up and downside 1 semitone up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:doublesharp)
                              #:musicglyph glyph-name  #:fontsize -3 (#:sharp))))))))
                       )
                       ((1) ; (ly:warning " upside 2 semitones up and downside 2 semitones up ")
                        (ly:grob-set-property! grob 'text
                         (markup (#:line (#:center-align (#:override (cons 'baseline-skip sz-mult)
                            (#:center-column (#:fontsize -3 (#:doublesharp)
                              #:musicglyph glyph-name  #:fontsize -3 (#:doublesharp))))))))
                      ))))))))))))))))
        ; (display (string-concatenate (list
        ;    "\nmake-articulation-bothsides-pitched: skipping a not-"
        ;    for-script-type
        ;    "-articulation-script ")))
 )))))))


#(define (make-prall-minor grob) (make-articulation-upside-pitched grob 1 "prall" "scripts.prall"))
#(define (make-prall-major grob) (make-articulation-upside-pitched grob 2 "prall" "scripts.prall"))

nextPrallMinor = \once \override Script #'before-line-breaking = #make-prall-minor
nextPrallMajor = \once \override Script #'before-line-breaking = #make-prall-major

#(define (make-mordent-minor grob) (make-articulation-downside-pitched grob 1 "mordent" "scripts.mordent"))
#(define (make-mordent-major grob) (make-articulation-downside-pitched grob 2 "mordent" "scripts.mordent"))

nextMordentMinor = \once \override Script #'before-line-breaking = #make-mordent-minor
nextMordentMajor = \once \override Script #'before-line-breaking = #make-mordent-major

#(define (make-turn-minor-normal grob) (make-articulation-upside-pitched grob 1 "turn" "scripts.turn"))
#(define (make-turn-major-normal grob) (make-articulation-upside-pitched grob 2 "turn" "scripts.turn"))
#(define (make-turn-normal-minor grob) (make-articulation-downside-pitched grob 1 "turn" "scripts.turn"))
#(define (make-turn-normal-major grob) (make-articulation-downside-pitched grob 2 "turn" "scripts.turn"))
#(define (make-turn-minor-minor grob) (make-articulation-bothsides-pitched grob 1 1 "turn" "scripts.turn"))
#(define (make-turn-minor-major grob) (make-articulation-bothsides-pitched grob 1 2 "turn" "scripts.turn"))
#(define (make-turn-major-minor grob) (make-articulation-bothsides-pitched grob 2 1 "turn" "scripts.turn"))
#(define (make-turn-major-major grob) (make-articulation-bothsides-pitched grob 2 2 "turn" "scripts.turn"))

nextTurnMinorNormal = \once \override Script #'before-line-breaking = #make-turn-minor-normal
nextTurnMajorNormal = \once \override Script #'before-line-breaking = #make-turn-major-normal
nextTurnNormalMinor = \once \override Script #'before-line-breaking = #make-turn-normal-minor
nextTurnNormalMajor = \once \override Script #'before-line-breaking = #make-turn-normal-major
nextTurnMinorMinor = \once \override Script #'before-line-breaking = #make-turn-minor-minor
nextTurnMinorMajor = \once \override Script #'before-line-breaking = #make-turn-minor-major
nextTurnMajorMinor = \once \override Script #'before-line-breaking = #make-turn-major-minor
nextTurnMajorMajor = \once \override Script #'before-line-breaking = #make-turn-major-major

#(define (make-reverseturn-minor-normal grob) (make-articulation-downside-pitched grob 1 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-major-normal grob) (make-articulation-downside-pitched grob 2 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-normal-minor grob) (make-articulation-upside-pitched grob 1 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-normal-major grob) (make-articulation-upside-pitched grob 2 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-minor-minor grob) (make-articulation-bothsides-pitched grob 1 1 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-minor-major grob) (make-articulation-bothsides-pitched grob 2 1 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-major-minor grob) (make-articulation-bothsides-pitched grob 1 2 "reverseturn" "scripts.reverseturn"))
#(define (make-reverseturn-major-major grob) (make-articulation-bothsides-pitched grob 2 2 "reverseturn" "scripts.reverseturn"))

nextReverseturnMinorNormal = \once \override Script #'before-line-breaking = #make-reverseturn-minor-normal
nextReverseturnMajorNormal = \once \override Script #'before-line-breaking = #make-reverseturn-major-normal
nextReverseturnNormalMinor = \once \override Script #'before-line-breaking = #make-reverseturn-normal-minor
nextReverseturnNormalMajor = \once \override Script #'before-line-breaking = #make-reverseturn-normal-major
nextReverseturnMinorMinor = \once \override Script #'before-line-breaking = #make-reverseturn-minor-minor
nextReverseturnMinorMajor = \once \override Script #'before-line-breaking = #make-reverseturn-minor-major
nextReverseturnMajorMinor = \once \override Script #'before-line-breaking = #make-reverseturn-major-minor
nextReverseturnMajorMajor = \once \override Script #'before-line-breaking = #make-reverseturn-major-major

pitchedSkip =
#(define-music-function (parser location music) (ly:music?)
  (let*
   ((used-version (ly:version))
    (neu #t))
   (if (< (car used-version) 2)
    (set! neu #f)
    (if (> (car used-version) 2)
     (set! neu #t)
     (if (> (cadr used-version) 14)
      (set! neu #t)
      (set! neu #f))))
   (if (not neu)
    (begin ;(display "-old Version - until 2.14.x -")
     #{
       \once \override NoteHead #'transparent = ##t
       \once \override NoteHead #'no-ledgers = ##t
       \once \override Stem #'flag-style = #'no-flag
       \once \override Stem #'stencil = ##f
       \once \override Dots #'stencil = ##f
       \once \override Accidental #'stencil = ##f
       \once \override AccidentalCautionary #'stencil = ##f
       $music
    #})
    (begin ;(display "-new Version - since 2.15.x -")
     #{
       \once \override NoteHead #'transparent = ##t
       \once \override NoteHead #'no-ledgers = ##t
       \once \override Flag #'stencil = ##f
       \once \override Stem #'stencil = ##f
       \once \override Dots #'stencil = ##f
       \once \override Accidental #'stencil = ##f
       \once \override AccidentalCautionary #'stencil = ##f
       $music
    #}))))


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                  END of INCLUDE FILE pitchedArticulations.ly                             %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
