Warn about missing repeat: Difference between revisions

Mtsb (talk | contribs)
m Undo revision 5178 by Mtsb (talk)
Tag: Undo
No edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
When typesetting orchestral pieces, you will not discover if a repeat is missing in one of the parts if you proof read the score, since the repeat will be typeset anyway if it's included in some other parts. The following engraver (generously contributed in https://lists.gnu.org/archive/html/lilypond-user/2025-11/msg00172.html) automatically detects such missing repeats and issues a warning like
When typesetting orchestral pieces, you will not discover if a repeat is missing in one of the parts if you proof read the score, since the repeat will be typeset anyway if it's included in some other parts. The following engraver (generously contributed in https://lists.gnu.org/archive/html/lilypond-user/2025-11/msg00172.html) automatically detects such missing repeats and issues a warning like


<nowiki><code></nowiki>
warning: Global repeat not stated in context
  #<Context Staff=lower (#<Context Voice () >) >


warning: Global repeat not stated in context #<Context Staff=lower (#<Context Voice () >) >
The definition of the <code>Repeat_warn_engraver</code> and the lines adding it to the <code>Staff</code> context can preferably be placed in a separate file to be <code>\include</code>d in your music files as part of the proof reading process.


<nowiki></code></nowiki>
<lilypond version="2.24">
 
#(define Repeat_warn_engraver
The definition of the <nowiki><code> Repeat_warn_engraver </code></nowiki> and the lines adding it to the <nowiki><code> Staff </code></nowiki> context can preferably be placed in a separate file to be <nowiki><code>\include</code></nowiki>:d in your music files as part of the proof reading process.
  (let
 
    ((repeat-start-anywhere? #f)) ; shared across all instances
<nowiki><lilypond version="2.24"></nowiki>
    (lambda (ctx)
 
      (let ((repeat-start-local? #f)) ; local for one context
<nowiki>#</nowiki>(define Repeat_warn_engraver
        (make-engraver
 
        ((start-translation-timestep engraver)
   (let
          (set! repeat-start-anywhere? #f))
 
        (listeners
    ((repeat-start-anywhere? #f)) ; shared across all instances
          ((volta-repeat-start-event engraver event)
 
          (set! repeat-start-anywhere? #t)
    (lambda (ctx)
          (set! repeat-start-local? #t)))
 
        ((stop-translation-timestep engraver)
      (let ((repeat-start-local? #f)) ; local for one context
          (if (and repeat-start-anywhere?
 
                  (not repeat-start-local?))
        (make-engraver
              (ly:warning "Global repeat not stated in context ~a" ctx))
 
          (set! repeat-start-local? #f)))))))
         ((start-translation-timestep engraver)
 
          (set! repeat-start-anywhere? #f))
 
         (listeners
 
          ((volta-repeat-start-event engraver event)
 
           (set! repeat-start-anywhere? #t)
 
           (set! repeat-start-local? #t)))
 
         ((stop-translation-timestep engraver)
 
          (if (and repeat-start-anywhere?
 
                   (not repeat-start-local?))
 
              (ly:warning "Global repeat not stated in context ~a" ctx))
 
          (set! repeat-start-local? #f)))))))


\layout {
\layout {
 
  \context {
  \context {
    \Staff
 
    \consists #Repeat_warn_engraver
    \Staff
  }
 
    \consists #Repeat_warn_engraver
 
  }
 
}
}
% Example of usage:


<<
<<
 
  \new Staff = upper {
  \new Staff = upper {
    c'1
 
    \repeat volta 2 { c' c' c' }
    c'1
    \repeat volta 2 {
 
      d'
    \repeat volta 2 { c' c' c' }
    }
 
  }
    \repeat volta 2 {
  \new Staff = lower {
 
    c'1
      d
    \repeat volta 2 { c' c' c' }
 
    % \repeat volta 2 { % Typo! Missing repeat, which normally is not detected
    }
    e'
 
    % }
  }
  }
 
  \new Staff = lower {
 
    c'1
 
    \repeat volta 2 { c' c' c' }
 
    % \repeat volta 2 { % Mistakenly missing repeat in one of the parts
 
    e
 
    % }
 
  }
 
>>  
>>  
</lilypond>


<nowiki></lilypond></nowiki>
[[Category:Contexts and engravers]]
[[Category:Repeats]]
[[Category:Scheme]]
[[Category:Snippet]]