\version "2.14.2"

% http://old.nabble.com/Nice-workaround-for-simultaneous-rehearsal-marks-%E2%80%93-thanks-Neil!-td32212763.html
% defined by Neil Puttock

#(define (multi-mark-engraver ctx)
   (let ((texts '())
         (final-texts '())
         (events '()))

     `((start-translation-timestep
        . ,(lambda (trans)
             (set! final-texts '())))

       (listeners
        (mark-event
         . ,(lambda (trans ev)
              (set! events (cons ev events)))))

       (acknowledgers
        (break-alignment-interface
         . ,(lambda (trans grob source)
              (for-each (lambda (mark)
                          (set! (ly:grob-parent mark X) grob))
                        texts))))

       (process-music
        . ,(lambda (trans)
             (for-each
              (lambda (ev)
                (let* ((mark-grob
                        (ly:engraver-make-grob trans 'RehearsalMark ev))
                       (label (ly:event-property ev 'label))
                       (formatter (ly:context-property ctx 'markFormatter)))

                  (if (and (procedure? formatter)
                           (not (markup? label)))
                      (begin
                       (if (not (number? label))
                           (set! label
                                 (ly:context-property ctx 'rehearsalMark)))

                       (if (and (integer? label)
                                (exact? label))
                           (set! (ly:context-property ctx 'rehearsalMark)
                                 (1+ label)))

                       (if (number? label)
                           (set! label (apply formatter (list label ctx)))
                           (ly:warning "rehearsalMark must have integer value"))))

                  (if (markup? label)
                      (begin
                       (set! (ly:grob-property mark-grob 'text) label)
                       (let ((dir (ly:event-property ev 'direction)))
                         (and (ly:dir? dir)
                              (set! (ly:grob-property mark-grob 'direction)
                                    dir))))
                      (ly:warning "mark label must be a markup object"))

                  (set! texts (cons mark-grob texts))))
              (reverse events))))

       (stop-translation-timestep
        . ,(lambda (trans)
             (if (pair? texts)
                 (let ((staves (ly:context-property ctx 'stavesFound))
                       (priority-index 0))
                   (for-each (lambda (grob)
                               (let ((my-priority (ly:grob-property grob 'outside-staff-priority 1500)))
                                 (for-each (lambda (stave)

                                 (ly:pointer-group-interface::add-grob grob 'side-support-elements
                                               stave))
                                           staves)
                                 (set! (ly:grob-property grob 'outside-staff-priority) (+ my-priority priority-index))
                                 (set! priority-index (1+ priority-index))
                                 (set! final-texts (cons grob final-texts))))
                             (reverse texts))
                     (set! texts '())
                     (set! events '())))))

        (finalize
         . ,(lambda (trans)
              (and (pair? final-texts)
                   (for-each (lambda (grob)
                               (set! (ly:grob-property grob 'break-visibility)
                                     end-of-line-visible))
                             final-texts)))))))

markDown =
#(define-music-function (parser location text) (markup?)
   (make-music 'MarkEvent
               'direction DOWN
               'label text))

myMark =
#(define-music-function (parser location text) (markup?)
  (make-music 'MarkEvent
              'label text))

toCoda = {
 \tweak #'self-alignment-X #RIGHT
 \tweak #'break-visibility #begin-of-line-invisible
 \myMark \markup  { to \hspace #1.25 \raise #1.25  \musicglyph #"scripts.coda" }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paper {
        print-all-headers = ##t
        ragged-last-bottom = ##f
}

\layout {
        \context {
        	\Score
        	 \remove "Mark_engraver"
        	 \consists #multi-mark-engraver
        	 \consists "Tweak_engraver"
        }
%        \context {
%        	\Voice
%        	 \override Script #'direction = #UP
%        }
}

bass = 
\relative c {

\time 2/4

\key f \major


	r2
	r2
	f8\mf r8 r4   
	f8  r8 c8 r8    
%5
	f8 r8  \< f16(e)  d  des    
	c8\f  r8  c8   r8      
	f8   r8    c8   r8      
	f,16 (g) a  bes  c8  a   
	f8  r8  r4
%10
	r2 
  
	\repeat volta 2 {
	\mark \default      
	f'8\mf   r c  r    
	f r c r    
	f  r  c  r      
	f   r   c  r    
%15
	g' r  c,-.  d-.     
	e(c)  bes-.  fis'-.    
	g r  c,  r
	g' r c, r    
	g' r c, r    
%20
	g' r c, r    
	e r c r     
	g' r d e     
	f r a,-. c-.    
	e (f) c-. a-.      
%25
	f  r r4
	r2   
	f'8 r c r    
	f r c r   
	f r c r  
%30
	f r c r   
	f r f-. g-.   
	a (bes) f-. d-.    
	bes r f' r
	bes, r bes r    
%35
	f' r c-. a'-.    
	f (e) \< c-. a-.    
	g\f  r d' r    
	g, r a b   
	c2   
%40
	c2     
	c8-^  r  r4   
	r2 
	\mark \default
	\mark \markup { \musicglyph #"scripts.segno" }
	f8\mf
	r r4    
	f8 r c r   
%45
	f r c r   
	f r c r   
	e r r4    
	g8 r c, r   
	g' r c, r    
%50
	e r c r
	g' r r4    
	c,16 (d) e f g8 e    
	c r e r    
	g r c, r   
%55
	f r r4     
	f,16 (g) a bes c8 a   
	f r r4  
	r2
	f'8 r r4   
%60
	f8 r c r     
	f r c r     
	f r es c   
	bes r r4    
	bes8  r  f  r    
%65
	bes r f r   
	c' r e r   
	f r r4   
	f8 r c r    
	f r \<  f16 (e) d des    
%70  
	c8\ff  r c r 
	}
	\alternative {
	        {f r c4     
	         f,16 (g) a bes c8 a   
	         f r r4    
	         r2}
%75
	        {f'8 r c4}
	}   
	f,16 (g) a bes c8 a    
	f r r4  
	\override BreathingSign #'text = \markup {
	        \musicglyph #"scripts.caesura.straight"
	} 
	\mark "FINE"
	f8-^  \breathe r f'\f  e   
	d a4 a8   
%80
        	d16  (cis) d e f8 g    
	a (g) f-. e-.    
	d r e d   
	c g4 g8   
	c16 (b) c d e8 f    
%85
	g  (f) e-. d-.   
	c r r4   
	r2  
	\<  c   
	(c8)-^\ff r r4 
	r2
	\once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible
	\once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
	\mark "D.S. al FINE" 
	\bar "|."
}

\score { 
        \new Staff \with { instrumentName = "Bass in C " }
        { \clef bass \bass }
        
 \header {
    title = "Bierfest in Budweis"
    composer = "hf"
    opus = "Bass1"
 }
}

\pageBreak

\score {
        \new Staff \with { instrumentName = "Bass in B " } 
        \transpose c bes, { \clef "G_8" \bass }
        
 \header {
    title = "Bierfest in Budweis"
    composer = "hf"
    opus = "Bass1"
 }
}
