on which part of their job, checks to make sure that everything is
running smoothly, and has final say on our policy for Issues.
-Currently: Phil
+Currently: Colin H
@item
Doc Meister: trains new doc editors/writers, organizes who works
@subsubheading Daily schedule
@example
-Monday: Ralph
+Monday: Colin H
Tuesday: Eluze
Wednesday: Marek
-Thursday: Colin Hall (disambiguation here)
+Thursday: Ralph
Friday: Marek
-Saturday: James
-Sunday: Phil
+Saturday: Mark
+Sunday: Colin H
@end example
@node Unmetered music
@unnumberedsubsubsec Unmetered music
-@cindex bar lines, turning off
-@cindex bar numbering, turning off
@cindex cadenza
+@cindex cadenza, beams
+@cindex cadenza, accidentals
+@cindex cadenza, bar lines
+@cindex cadenza, bar numbers
@cindex unmetered music
+@cindex unmetered music, beams
+@cindex unmetered music, accidentals
+@cindex unmetered music, bar lines
+@cindex unmetered music, bar numbers
+@cindex accidentals, cadenzas
+@cindex accidentals, unmetered music
+@cindex bar lines, cadenzas
+@cindex bar lines, unmetered music
+@cindex bar numbers, cadenzas
+@cindex bar numbers, unmetered music
+@cindex beams, cadenzas
+@cindex beams, unmetered music
@funindex \cadenzaOn
@funindex cadenzaOn
@funindex \cadenzaOff
@funindex cadenzaOff
-Bar lines and bar numbers are calculated automatically. For
-unmetered music (some cadenzas, for example), this is not desirable.
-To turn off automatic calculation of bar lines and bar numbers,
-use the command @code{\cadenzaOn}, and use @code{\cadenzaOff}
-to turn them on again.
+In metered music bar lines are inserted and bar numbers are calculated
+automatically. In unmetered music (i.e. cadenzas), this is not
+desirable and can be @q{switched off} using the command
+@code{\cadenzaOn}, then @q{switched back on} at the appropriate place
+using @code{\cadenzaOff}.
@lilypond[verbatim,relative=2,quote]
c4 d e d
d4 e d c
@end lilypond
-Bar numbering is resumed at the end of the cadenza as if the
-cadenza were not there:
+Bar numbering is resumed at the end of the cadenza.
@lilypond[verbatim,relative=2,quote]
% Show all bar numbers
d4 e d c
@end lilypond
-@cindex beams, in cadenzas
-@cindex beams, in unmetered music
-@cindex cadenza, with beams
-@cindex unmetered music, with beams
+A new bar is never started within a cadenza, even if one or more
+@code{\bar} commands are inserted within it. Therefore, reminder
+accidentals will need to be added manually. See @ref{Accidentals}.
-Automatic beaming is disabled by @code{\cadenzaOn} and enabled
-by @code{\cadenzaOff}. Therefore, all beaming in cadenzas
-must be entered manually (@ref{Manual beams}).
+@lilypond[verbatim,relative=2,quote]
+c4 d e d
+\cadenzaOn
+cis4 d cis d
+\bar "|"
+cis4 d cis! d
+\cadenzaOff
+\bar "|"
+@end lilypond
+
+Automatic beaming is disabled by @code{\cadenzaOn}. Therefore, all
+beaming in cadenzas must be entered manually. See @ref{Manual beams}.
@lilypond[verbatim,relative=2,quote]
\repeat unfold 8 { c8 }
\cadenzaOn
-\repeat unfold 5 { c8 }
+cis8 c c c c
\bar"|"
+c8 c c
\cadenzaOff
\repeat unfold 8 { c8 }
@end lilypond
-Note that these predefined commands affect all staves in the
-score, even when they are placed in just one @code{Voice}
-context. To change this, move the @code{Timing_translator}
-from the @code{Score} context to the @code{Staff} context, as
-shown in @ref{Polymetric notation}.
+These predefined commands affect all staves in the score, even when
+placed in just one @code{Voice} context. To change this, move the
+@code{Timing_translator} from the @code{Score} context to the
+@code{Staff} context. See @ref{Polymetric notation}.
@predefined
@code{\cadenzaOn},
Notation Reference:
@ref{Visibility of objects},
@ref{Polymetric notation},
-@ref{Manual beams}.
+@ref{Manual beams},
+@ref{Accidentals}.
Snippets:
@rlsr{Rhythms}.
-@cindex cadenza line breaks
-@cindex cadenza page breaks
+@cindex cadenza, line breaks
+@cindex cadenza, page breaks
@cindex unmetered music, line breaks
@cindex unmetered music, page breaks
@cindex breaks in unmetered music
-@cindex line breaks in cadenzas
-@cindex page breaks in cadenzas
-@cindex line breaks in unmetered music
-@cindex page breaks in unmetered music
+@cindex line breaks, cadenzas
+@cindex page breaks, cadenzas
+@cindex line breaks, unmetered music
+@cindex page breaks, unmetered music
@knownissues
-LilyPond will insert line breaks and page breaks only at a
-bar line. Unless the unmetered music ends before the end of the
-staff line, you will need to insert invisible bar lines with
+Automatic line and page breaks are inserted only at bar lines, so
+@q{invisible} bar lines will need to be inserted manually in long
+stretches of unmetered music to permit breaking:
@example
\bar ""
@end example
-@noindent
-to indicate where breaks can occur.
-
-You should explicitly create a @code{Voice} context when starting a
-piece with @code{\cadenzaOn}, otherwise strange errors may occur.
+Explicitly create a @code{Voice} context when starting a piece with
+@code{\cadenzaOn}, else unexpected errors may occur.
@example
\new Voice @{
>here</a> to learn more!
</tweet>
<tweet>
+L'Ensemble 101 part en <a target="_blank"
+href="http://www.kickstarter.com/projects/751757415/ensemble-101"
+>tournée</a> en France et en Irlande où ils chanteront
+des partitions gravées avec LilyPond.
+</tweet>
+<tweet>
2012-06-17: <a target="_blank"
href="http://en.wikipedia.org/wiki/Oskar_Fried">Oskar Fried</a>
(1871-1941) - Complete Songs. New revised
href="http://www.hugo-wolf-akademie.de/veranstaltung/komponistenportraet-oskar-fried">
concert in Stuttgart</a>.
</tweet>
+<tweet>
+17.06.2012: <a target="_blank"
+href="http://de.wikipedia.org/wiki/Oskar_Fried">Oskar Fried</a>
+(1871-1941) - Sämtliche Lieder. Revidierte Neuausgabe, gesetzt mit LilyPond,
+vorgestellt bei einem
+<a target="_blank"
+href="http://www.hugo-wolf-akademie.de/veranstaltung/komponistenportraet-oskar-fried">
+Konzert in Stuttgart</a>.
+</tweet>
+<tweet>
+<a target="_blank"
+href="http://www.inadiutorium.xf.cz">
+Project</a> in adiutorium provides chants to the catholic Divine
+Office in the Czech language. We use LilyPond for the typesetting.
+</tweet>
</tweets>
#include "engraver.hh"
#include "translator-group.hh"
-class Engraver_group : public virtual Translator_group
+class Engraver_group : public Translator_group
{
protected:
vector<Grob_info> announce_infos_;
#include "context.hh"
#include "pqueue.hh"
-class Global_context : public virtual Context
+class Global_context : public Context
{
PQueue<Moment> extra_mom_pq_;
Output_def *output_def_;
typedef void (Performer:: *Performer_method) (void);
-class Performer_group : public virtual Translator_group
+class Performer_group : public Translator_group
{
public:
VIRTUAL_COPY_CONSTRUCTOR (Translator_group, Performer_group);
\consists "Staff_performer"
\consists "Key_performer"
}
+
\context {
\name Global
\accepts Score
EventClasses = #all-event-classes
}
+\context {
+ \type "Performer_group"
+ \name KievanStaff
+ \denies Voice
+ \accepts KievanVoice
+ \defaultchild KievanVoice
+ \alias Staff
+ \consists "Staff_performer"
+ \consists "Key_performer"
+}
+
+\context {
+ \type "Performer_group"
+ \name VaticanaStaff
+ \alias Staff
+ \denies Voice
+ \accepts VaticanaVoice
+ \defaultchild VaticanaVoice
+ \consists "Staff_performer"
+ \consists "Key_performer"
+}
+
+\context {
+ \type "Performer_group"
+ \name MensuralStaff
+ \denies Voice
+ \accepts MensuralVoice
+ \defaultchild MensuralVoice
+ \alias Staff
+ \consists "Staff_performer"
+ \consists "Key_performer"
+}
+
\context {
\Staff
\name DrumStaff
}
\context {
- \Voice
+ \type "Performer_group"
\name VaticanaVoice
\alias Voice
+ \consists "Dynamic_performer"
+ \consists "Tie_performer"
+ \consists "Note_performer"
+ \consists "Beam_performer"
+ \consists "Slur_performer"
+}
+
+\context {
+ \type "Performer_group"
+ \name KievanVoice
+ \alias Voice
+ \consists "Dynamic_performer"
+ \consists "Tie_performer"
+ \consists "Note_performer"
+ \consists "Beam_performer"
+ \consists "Slur_performer"
+}
+
+\context {
+ \type "Performer_group"
+ \name MensuralVoice
+ \alias Voice
+ \consists "Dynamic_performer"
+ \consists "Tie_performer"
+ \consists "Note_performer"
+ \consists "Beam_performer"
+ \consists "Slur_performer"
}
\context {
\defaultchild TabVoice
}
-\context {
- \type "Performer_group"
- \name "VaticanaStaff"
- \alias "Staff"
- \denies "Voice"
- \accepts "VaticanaVoice"
- \defaultchild "VaticanaVoice"
-}
-
\context {
\type "Score_performer"
\accepts FretBoards
\accepts Lyrics
\accepts VaticanaStaff
+ \accepts KievanStaff
+ \accepts MensuralStaff
\consists "Time_signature_performer"
\consists "Control_track_performer"
(let* ((elements (append (ly:music-property chord 'elements)
(ly:music-property chord 'articulations)))
- (chord-elements (filter (lambda (m)
- (music-is-of-type? m 'rhythmic-event))
- elements))
- (post-events (filter post-event? elements))
(chord-repeat (ly:music-property chord 'duration)))
- (cond ((ly:duration? chord-repeat)
- (let ((duration (duration->lily-string chord-repeat #:remember #t)))
- (format #f "q~a~{~a~^ ~}"
- duration
- (map-in-order (lambda (music)
- (music->lily-string music parser))
- post-events))))
- ((pair? chord-elements)
- ;; note_chord_element : '<' (notepitch | drumpitch)* '>" duration post_events
- (let ((duration (duration->lily-string (ly:music-property
- (car chord-elements)
- 'duration) #:remember #t)))
- ;; Format duration first so that it does not appear on chord elements
- (format #f "< ~{~a ~}>~a~{~a~^ ~}"
- (map-in-order (lambda (music)
- (music->lily-string music parser))
- chord-elements)
- duration
- (map-in-order (lambda (music)
- (music->lily-string music parser))
- post-events))))
- (else
- ;; command_element
- (format #f "~{~a~^ ~}" (map-in-order (lambda (music)
- (music->lily-string music parser))
- elements))))))
+ (call-with-values
+ (lambda ()
+ (partition (lambda (m) (music-is-of-type? m 'rhythmic-event))
+ elements))
+ (lambda (chord-elements other-elements)
+ (cond ((pair? chord-elements)
+ ;; note_chord_element :
+ ;; '<' (notepitch | drumpitch)* '>" duration post_events
+ (let ((duration (duration->lily-string (ly:music-property
+ (car chord-elements)
+ 'duration)
+ #:remember #t)))
+ ;; Format duration first so that it does not appear on
+ ;; chord elements
+ (format #f "< ~{~a ~}>~a~:{~:[-~;~]~a~^ ~}"
+ (map-in-order (lambda (music)
+ (music->lily-string music parser))
+ chord-elements)
+ duration
+ (map-in-order (lambda (music)
+ (list
+ (post-event? music)
+ (music->lily-string music parser)))
+ other-elements))))
+ ((ly:duration? chord-repeat)
+ (let ((duration (duration->lily-string chord-repeat
+ #:remember #t)))
+ (format #f "q~a~:{~:[-~;~]~a~^ ~}"
+ duration
+ (map-in-order (lambda (music)
+ (list
+ (post-event? music)
+ (music->lily-string music parser)))
+ other-elements))))
+
+ ((and (= 1 (length other-elements))
+ (not (post-event? (car other-elements))))
+ (format #f (music->lily-string (car other-elements) parser)))
+ (else
+ (format #f "< >~:{~:[-~;~]~a~^ ~}"
+ (map-in-order (lambda (music)
+ (list
+ (post-event? music)
+ (music->lily-string music parser)))
+ other-elements))))))))
(define-display-method MultiMeasureRestMusic (mmrest parser)
(format #f "R~a~{~a~^ ~}"
(let ((chord-repeat (ly:music-property music 'duration)))
(cond
((not (ly:duration? chord-repeat))
- music)
+ (if (any (lambda (m) (ly:duration?
+ (ly:music-property m 'duration)))
+ (ly:music-property music 'elements))
+ music
+ last-chord))
(last-chord
(set! (ly:music-property music 'duration) '())
(copy-repeat-chord last-chord music chord-repeat event-types)
])
AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
- AC_MSG_CHECKING([options for known g++ tail call bug])
+ AC_MSG_CHECKING([options for known g++ bugs])
case "$GXX:$CXX_VERSION" in
- yes:400600?)
- AC_MSG_RESULT([-fno-optimize-sibling-calls])
+ yes:400600[[0-2]])
+ AC_MSG_RESULT([-fno-optimize-sibling-calls (tail call bug)])
CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls"
;;
+ yes:400700?)
+ AC_MSG_RESULT([-fno-tree-vrp (comparison bug)])
+ CXXFLAGS="$CXXFLAGS -fno-tree-vrp"
+ ;;
*) AC_MSG_RESULT([none])
esac
AC_SUBST(CXXFLAGS)