\version "2.12.0"
pedAn =  \sustainOn
pedAus =  \sustainOff


pedtrem = { \once \override TextSpanner #'outside-staff-priority = #500
	\textSpannerDown
\override TextSpanner #'bound-details #'left #'text = \markup { \musicglyph #"pedal.Ped" }  \override TextSpanner #'style = #'zigzag }
%damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!
senzaped = \markup { \italic "senza" \musicglyph #"pedal.Ped" }
kleiner = {\set fontSize = #-3 \override DynamicText #'font-size = #+3 \override TextSpanner
  #'font-size = #+3 \override TextScript #'font-size = #+3 } %noten so schnell wie moeglich; Dynamik und TextSpanner normale Groesse

sostenuto =  \markup { "sost." \musicglyph #"pedal.Ped" }
% das habe ich bisher noch nicht benutzt
normal = {\unset fontSize \revert DynamicText #'font-size \revert TextSpanner #'font-size
 \revert TextScript #'font-size
} % Noten und Dynamik normale Groesse!

connectArp =
{ \set PianoStaff.connectArpeggios = ##t }

splitArp =
{ \set PianoStaff.connectArpeggios = ##f }

re = { \change Staff = rechts }
li = { \change Staff = links }
reru = { \re \stemDown }
lira = { \li \stemUp }
rera = { \re \stemUp }
liru = { \li \stemDown }


unacordaSpan = {
   \textSpannerDown
   \override TextSpanner #'bound-details #'left #'text =
      \markup {\italic "una corda" }
%        \once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
      \override TextSpanner #'style = #'dashed-line
   \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
    \override TextSpanner #'bound-details #'right #'text =
    \markup { \draw-line #'(0 . -1) \italic "tre corde" }
      \once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
    \override TextSpanner #'bound-details #'right #'padding = #-0.5
   } %damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!

pedal = { \once \override TextSpanner #'outside-staff-priority = #5000
   \textSpannerDown
   \override TextSpanner #'bound-details #'left #'text = \markup { \musicglyph #"pedal.Ped" }
    \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafÃ¼r, dass der Text nicht auf der nÃ¤chsten Seite von neuem beginnt!!
    \override TextSpanner #'style = #'dashed-line
    \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
    \override TextSpanner #'bound-details #'right #'text =\markup { \draw-line #'(0 . 1) }
   \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafÃ¼r, dass der Text nicht auf der nÃ¤chsten Seite von neuem beginnt!!
     \override TextSpanner #'bound-details #'right #'padding = #-0.5
   }
mute = {
   \textSpannerUp
   \override TextSpanner #'bound-details #'left #'text =
      \markup {\italic "mute" }
       \once \override TextSpanner #'bound-details #'left-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
           \override TextSpanner #'bound-details #'right-broken #'text = ##f
      \override TextSpanner #'style = #'dashed-line
   \override TextSpanner #'dash-period = #0.01
    \override TextSpanner #'bound-details #'right #'attach-dir = #1
    \override TextSpanner #'bound-details #'right #'text =
      \markup { \draw-line #'(0 . -1) }
      \once \override TextSpanner #'bound-details #'right-broken #'text = ##f %dieser Quatschkram sorgt dafür, dass der Text nicht auf der nächsten Seite von neuem beginnt!!
    \override TextSpanner #'bound-details #'right #'padding = #-0.5
   } %damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!
% Statt des Standardpedals wird dieser TextSpanner besser vertikal adjustiert! Endet auch bei Pausen, und sogar Ganztaktpausen.
% Nur das System darf nicht, zwischen Anfangs- und Endpunkt, ein anderes sein
% damit das klappt, musst Du danach noch "\start" und "\stopTextSpan" einfuegen, erst dann startet das Symbol!

standardped = { \override Staff.PianoPedalBracket #'style = #'bracket \set Staff.pedalSustainStyle = #'mixed }

pedalaltmodisch = \set Staff.pedalSustainStyle = #'text

pedrunter = {\once \override Staff.SustainPedal
  #'outside-staff-priority = #1
\once \override Staff.PianoPedalBracket
  #'outside-staff-priority = #1
\once \override Staff.SustainPedal
  #'extra-offset = #'(0 . -2)
\once \override Staff.PianoPedalBracket
  #'extra-offset = #'(0 . -2) }
%sorgt dafür, dass das Pedal und die Pedallinie unter der Dynamik stehen. Diese Anweisung vor "sustainOn" schreiben!
%funktioniert aber nicht besonders gut

%%%%%%%%  spezielles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%% verlaengerte Notenhälse, für Noten über zwei Systeme %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

noFlag = \override Stem #'flag-style = #'no-flag

stemExtend = { \noFlag  \autoBeamOff
\override TupletNumber #'transparent = ##t
\override TupletBracket #'bracket-visibility = ##f
\override Stem #'length = #16
\override Stem #'cross-staff = ##t

}
flagOn = \revert Stem #'flag-style
stemExtendOff = {\flagOn \autoBeamOn
	\revert Stem #'cross-staff
	\revert Stem #'length
	\override TupletNumber #'transparent = ##f
}

%das ganze mit Ersetzung:
Lang =
	#(define-music-function (parser location length) (number?)
     #{

   \override Stem #'length = $length
   \noFlag  \autoBeamOff
\override TupletNumber #'transparent = ##t
\override TupletBracket #'bracket-visibility = ##f
   \override Stem #'cross-staff = ##t
       #})
%% Funktioniert dann nach dem Motto: \Lang #15 oder \Lang #23
       Kurzhals = { \stemExtendOff \override TupletBracket #'bracket-visibility = #'if-no-beam  }
       %%%%%%%% Erfordert danach noch den Befehl \klammernormal, enthalten in der Dynamik-Bibliothek
	%%%%%%%%%%%%%%%%%%%%%% notenhälse fuer cluster: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
schiefrunter = {  \once\override Stem #'extra-offset = #'(-1.1 . 0.75) \once\override Stem #'rotation = #'(-45 0 0) \once \override Stem #'length = #9 }

schiefrauf = { \once\override Stem #'extra-offset = #'(-2.5 . 0) \once\override Stem #'rotation = #'(45 0 0) \once \override Stem #'length = #9 }
%die Noten mit den schiefen Hälsen müssen nach einem möglichst kurzen "shorter-rest" erscheinen

conped = \markup {\italic "con" \musicglyph #"pedal.Ped"}
sempreconped = \markup {\italic "sempre con" \musicglyph #"pedal.Ped"}
%%%schnelle Vorschlagsnoten auf den Schlag spielen
aufnschlach = \markup { \postscript #"
  0.1     setlinewidth
  0.5 4   moveto
  0.5 0   lineto
  0.2 0.6 lineto
  0.5 0   moveto
  0.8 0.6 lineto
  0.5 4   moveto
  3.5 4 lineto
  stroke
  "}


%% A function to position tuplet numbers next to kneed beams on a
%% single staff and cross-staff. Will ignore ordinary beams and
%% brackets.
%%
%% Usage: \override TupletNumber 'Y-offset = #kneed-beam
%%
%% For best results, use manual beaming.
%%
%% Known issue: number may not be on the best side in tuplets with
%% an even number of notes (sextuplets, for example) when middle notes
%% change direction.

#(define (kneed-beam tuplet-number)
   (let* ((tuplet-bracket (ly:grob-object tuplet-number 'bracket))
          (note-columns (ly:grob-object tuplet-bracket 'note-columns))
          (first-note (ly:grob-array-ref note-columns 0))
          (first-stem (ly:grob-object first-note 'stem)))

     ;; test if bracket will be drawn (no beam on first note of tuplet)
     ;; if no, proceed with variable definitions and calculations

     (if (ly:grob? (ly:grob-object first-stem 'beam))
         (let* ((beam (ly:grob-object first-stem 'beam))
                (number-of-stems (ly:grob-array-length (ly:grob-object beam 'stems)))
                (middle-stem-number
                 ;; if duplet, "middle" = right stem
                 (if (= 2 number-of-stems) 2
                     (ceiling (/ number-of-stems 2))))
                (middle-note (ly:grob-array-ref note-columns (1- middle-stem-number)))
                (middle-stem (ly:grob-object middle-note 'stem))
                (direction-first (ly:grob-property first-stem 'direction))
                (direction-middle (ly:grob-property middle-stem 'direction))
                (beaming-mid-left (car (ly:grob-property middle-stem 'beaming)))
                (number-of-relevant-beams
                 (if (= direction-middle UP)
                     ;; adding one includes main beam (= 0) in total
                     (1+ (length (filter positive? beaming-mid-left)))
                     (1+ (length (filter negative? beaming-mid-left)))))
                (ends (ly:grob-property beam 'positions))
                (average (/ (+ (car ends) (cdr ends)) 2)) ; mid-beam Y-coordinate
                (stencil-height (ly:grob::stencil-height tuplet-number))

                ;; basic correction
                (correction (- average (car stencil-height)))

                (beam-width (ly:grob-property beam 'thickness)) ; 'beam-thickness from version 2_13_4
                (gap (* 0.5 (ly:grob-property beam 'gap))) ; in half staff-spaces
                (number-height (interval-length stencil-height))
                (beam-padding 0.2)) ; change to move number closer or further from beam

           ;; additional correction based on stem directions of first and middle notes
           (cond
            ((= direction-first direction-middle DOWN)
             (set! correction (- correction
                                 (* 0.5 beam-width) number-height beam-padding)))
            ((= direction-first direction-middle UP)
             (set! correction (+ correction
                                 (* 0.5 beam-width) beam-padding)))
            ((and (= direction-first DOWN) (= direction-middle UP))
             (set! correction (+ correction
                                 (* 0.5 beam-width)
                                 (* (1- number-of-relevant-beams) (+ gap beam-width))
                                 beam-padding)))
            ((and (= direction-first UP) (= direction-middle DOWN))
             (set! correction (- correction number-height
                                 (* 0.5 beam-width)
                                 (* (1- number-of-relevant-beams) (+ gap beam-width))
                                 beam-padding))))

           ;; return Y-offset (none for ordinary beam)
           (if (ly:grob-property beam 'knee)
               correction 0))
         ;; no correction if bracket
         0)))
