@end ignore
+@item
+The @samp{-d old-relative} option has been removed. Not actually
+accessible from the command line any more, its remaining use was
+for interpretating @code{\relative} in LilyPond files converted
+automatically from version@tie{}1.8 or older. It is unclear how
+much of this was actually still operative.
+
@item
The meaning of @code{instrumentTransposition} has been reversed.
After
fails, Patchy sets it to @qq{patch-needs_work} and notifies the developer list.
@item
-The Patch Handler reviews the tracker periodically, to list patches
+The Patch Meister reviews the tracker periodically, to list patches
which have been on review for at least 24 hours. The list is found at
@smallexample
each patch.
@item
-The Patch Handler sends an email to the developer list, with a fixed
+The Patch Meister sends an email to the developer list, with a fixed
subject line, to enable filtering by email clients:
@example
@end smallexample
@item
-On the scheduled countdown day, the Patch Handler reviews the
+On the scheduled countdown day, the Patch Meister reviews the
previous list of patches on countdown, with the same procedure and
criteria as before. Patches with no controversy can be set to
@qq{patch-push} with a courtesy message added to the comment block.
@item
-Roughly at six month intervals, the Patch Handler can list the
+Roughly at six month intervals, the Patch Meister can list the
patches which have been set to @qq{patch-needs-work} and send the
results to the developer list for review. In most cases, these
patches should be marked @qq{patch-abandoned} but this should come
@item
Profile files: give information about
TODO? I don't know what they're for.
+Apparently they give some information about CPU usage. If you got
+tons of changes in cell counts, this probably means that you compiled
+@code{make test-baseline} with a different amount of CPU threads than
+@code{make check}. Try redoing tests from scratch with the same
+number of threads each time -- see @ref{Saving time with the -j option}.
@end itemize
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.15"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
@c KEEP LY
@lilypond[verbatim,quote]
-\relative {
+\relative c' {
r8^"oui" c8 ~ c2 r4 |
r8^"non" c2 ~ c8 r4
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.15"
@c Translators: Yoshiki Sawada
à vo -- cê uma can -- ção legal
}
-\relative {
+\relative c' {
c2 d e f g f e
}
\addlyrics { \bulgarian }
above the ligature.
@lilypond[quote,ragged-right,verbatim]
-\transpose c c' {
+\relative c'' {
\[ g c a f d' \]
a g f
\[ e f a g \]
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new MensuralVoice = "discantus" \transpose c c' {
+ \new MensuralVoice = "discantus" \relative c' {
\override Score.BarNumber.transparent = ##t {
c'1\melisma bes a g\melismaEnd
f\breve
- \[ f1\melisma a c'\breve d'\melismaEnd \]
- c'\longa
- c'\breve\melisma a1 g1\melismaEnd
+ \[ f1\melisma a c\breve d\melismaEnd \]
+ c\longa
+ c\breve\melisma a1 g1\melismaEnd
fis\longa^\signumcongruentiae
}
}
ficta = { \once \set suggestAccidentals = ##t }
\score { \relative c''
\new MensuralVoice {
- \once \set suggestAccidentals = ##t
- bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
+ \once \set suggestAccidentals = ##t
+ bes4 a2 g2 \ficta fis8 \ficta e! fis2 g1
}
}
@end lilypond
@c @end example
@lilypond[quote,ragged-right,verbatim]
\score {
- \transpose c c' {
+ \relative c' {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
- \[ c'\maxima d'\longa \]
- \[ e'1 a g\breve \]
+ \[ c\maxima d\longa \]
+ \[ e1 a g\breve \]
}
\layout {
\context {
to the following
@lilypond[quote,ragged-right]
-\transpose c c' {
+\relative c' {
\set Score.timing = ##f
\set Score.defaultBarType = "-"
\override NoteHead.style = #'petrucci
\override NoteHead.ligature-flexa = ##t
\once \override NoteHead.flexa-width = #3.2
c\breve f e d \]
- \[ c'\maxima d'\longa \]
- \[ e'1 a g\breve \]
+ \[ c\maxima d\longa \]
+ \[ e1 a g\breve \]
}
@end lilypond
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum
\[ b \]
}
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum
\[ \cavum b \]
}
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum
\[ \linea b \]
}
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum Auctum Ascendens
\[ \auctum \ascendens b \]
}
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum Auctum Descendens
\[ \auctum \descendens b \]
}
@lilypond[staffsize=26,line-width=1.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum Inclinatum
\[ \inclinatum b \]
}
@lilypond[staffsize=26,line-width=2.5\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum Inclinatum Auctum
\[ \inclinatum \auctum b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Punctum Inclinatum Parvum
\[ \inclinatum \deminutum b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Virga
\[ \virga b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Clivis vel Flexa
\[ b \flexa g \]
}
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Clivis Aucta Descendens
\[ b \flexa \auctum \descendens g \]
}
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Clivis Aucta Ascendens
\[ b \flexa \auctum \ascendens g \]
}
@lilypond[staffsize=26,line-width=2.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Cephalicus
\[ b \flexa \deminutum g \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Podatus vel Pes
\[ g \pes b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Pes Auctus Descendens
+ \relative c' {
+ % Pes Auctus Descendens
\[ g \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Pes Auctus Ascendens
\[ g \pes \auctum \ascendens b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Epiphonus
+ \relative c' {
+ % Epiphonus
\[ g \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Pes Initio Debilis
\[ \deminutum g \pes b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Pes Auctus Descendens Initio Debilis
\[ \deminutum g \pes \auctum \descendens b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Torculus
\[ a \pes b \flexa g \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Torculus Auctus Descendens
+ \relative c' {
+ % Torculus Auctus Descendens
\[ a \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Torculus Deminutus
+ \relative c' {
+ % Torculus Deminutus
\[ a \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Torculus Initio Debilis
+ \relative c' {
+ % Torculus Initio Debilis
\[ \deminutum a \pes b \flexa g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Torculus Auctus Descendens Initio Debilis
+ \relative c' {
+ % Torculus Auctus Descendens Initio Debilis
\[ \deminutum a \pes b \flexa \auctum \descendens g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Torculus Deminutus Initio Debilis
+ \relative c' {
+ % Torculus Deminutus Initio Debilis
\[ \deminutum a \pes b \flexa \deminutum g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Porrectus
\[ a \flexa g \pes b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Porrectus Auctus Descendens
+ \relative c' {
+ % Porrectus Auctus Descendens
\[ a \flexa g \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Porrectus Deminutus
+ \relative c' {
+ % Porrectus Deminutus
\[ a \flexa g \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Climacus
\[ \virga b \inclinatum a \inclinatum g \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Climacus Auctus
+ \relative c' {
+ % Climacus Auctus
\[ \virga b \inclinatum a \inclinatum \auctum g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Climacus Deminutus
+ \relative c' {
+ % Climacus Deminutus
\[ \virga b \inclinatum a \inclinatum \deminutum g \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Scandicus
\[ g \pes a \virga b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Scandicus Auctus Descendens
+ \relative c' {
+ % Scandicus Auctus Descendens
\[ g \pes a \pes \auctum \descendens b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
- % Scandicus Deminutus
+ \relative c' {
+ % Scandicus Deminutus
\[ g \pes a \pes \deminutum b \]
}
\layout { \neumeDemoLayout }}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Quilisma
\[ g \pes \quilisma a \pes b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Quilisma Pes Auctus Descendens
\[ g \quilisma a \pes \auctum \descendens b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Oriscus
\[ \oriscus b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Pes Quassus
\[ \oriscus g \pes \virga b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Pes Quassus Auctus Descendens
\[ \oriscus g \pes \auctum \descendens b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Salicus
\[ g \oriscus a \pes \virga b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Salicus Auctus Descendens
\[ g \oriscus a \pes \auctum \descendens b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Stropha
\[ \stropha b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Stropha Aucta
\[ \stropha \auctum b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Bistropha
\[ \stropha b \stropha b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Tristropha
\[ \stropha b \stropha b \stropha b \]
}
@lilypond[staffsize=26,line-width=1.0\cm]
\include "gregorian.ly"
\score {
- \transpose c c' {
+ \relative c' {
% Trigonus
\[ \stropha b \stropha b \stropha a \]
}
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new KievanVoice = "melody" \transpose c c' {
+ \new KievanVoice = "melody" \relative c' {
\cadenzaOn
- c4 c c c c2 b,\longa
- \bar "k"
+ c4 c c c c2 b\longa
+ \bar "k"
}
\new Lyrics \lyricsto "melody" {
Го -- спо -- ди по -- ми -- луй.
@lilypond[quote,ragged-right,verbatim]
\score {
<<
- \new KievanVoice = "melody" \transpose c c' {
+ \new KievanVoice = "melody" \relative c' {
\cadenzaOn
- e2 \[ e4( d4 ) \] \[ c4( d e d ) \] e1 \bar "k"
+ e2 \[ e4( d4 ) \] \[ c4( d e d ) \] e1 \bar "k"
}
\new Lyrics \lyricsto "melody" {
Га -- врі -- и -- лу
doctitle = "Applying note head styles depending on the step of the scale"
} % begin verbatim
-
fragment = {
\key c \major
c2 d
\new Staff {
\transpose c d
\relative c' {
- \set shapeNoteStyles = #'#(do re mi fa
+ \set shapeNoteStyles = ##(do re mi fa
#f la ti)
\fragment
}
\break
\relative c' {
- \set shapeNoteStyles = #'#(cross triangle fa #f
+ \set shapeNoteStyles = ##(cross triangle fa #f
mensural xcircle diamond)
\fragment
}
--- /dev/null
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.7
+\version "2.17.7"
+
+\header {
+ lsrtags = "contexts-and-engravers, repeats, staff-notation"
+
+ texidoc = "
+Scores of large ensemble works often have bar numbers placed beneath the
+system, centered horizontally on the measure's extent. This snippet shows
+how the @code{Measure_counter_engraver} may be used to simulate this
+notational practice. Here, the engraver has been added to a @code{Dynamics}
+context.
+
+"
+
+ doctitle = "Centered measure numbers"
+} % begin verbatim
+
+
+\layout {
+ \context {
+ \Dynamics
+ \consists #Measure_counter_engraver
+ \override MeasureCounter.direction = #DOWN
+ \override MeasureCounter.font-encoding = #'latin1
+ \override MeasureCounter.font-shape = #'italic
+ % to control the distance of the Dynamics context from the staff:
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+ }
+ \context {
+ \Score
+ \remove "Bar_number_engraver"
+ }
+}
+
+pattern = \repeat unfold 7 { c'4 d' e' f' }
+
+\new StaffGroup <<
+ \new Staff {
+ \pattern
+ }
+ \new Staff {
+ \pattern
+ }
+ \new Dynamics {
+ \startMeasureCount
+ s1*7
+ \stopMeasureCount
+ }
+>>
adding-a-figured-bass-above-or-below-the-notes.ly
adding-an-extra-staff-at-a-line-break.ly
adding-an-extra-staff.ly
+centered-measure-numbers.ly
centering-markup-on-note-heads-automatically.ly
changing-midi-output-to-one-channel-per-voice.ly
changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
engravers-one-by-one.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
nesting-staves.ly
+numbering-groups-of-measures.ly
removing-bar-numbers-from-a-score.ly
use-square-bracket-at-the-start-of-a-staff-group.ly
vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.13"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
#(make-music 'FingeringEvent
'digit 50)
+finger =
+#(define-music-function (parser location digit) (integer?)
+ (make-music 'FingeringEvent
+ 'digit digit))
+
#(define (calc-finger-without-warning grob)
(let* ((event (event-cause grob))
(digit (ly:event-property event 'digit)))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.15"
\header {
lsrtags = "contexts-and-engravers"
\new Staff = "Staff_flute" \with {
instrumentName = "Flute"
shortInstrumentName = "Fl"}
- \relative { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
+ \relative c' { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
}
>>
\new StaffGroup = "StaffGroup_Strings"
instrumentName = "Violin II"
shortInstrumentName = "Vi II"
}
- \relative { e1 \repeat unfold 8 { s1 } }
+ \relative c' { e1 \repeat unfold 8 { s1 } }
>>
\new Staff = "Staff_cello" \with {
instrumentName = "Cello"
making-some-staff-lines-thicker-than-the-others.ly
marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
measure-counter.ly
+numbering-groups-of-measures.ly
positioning-fingering-indications-precisely.ly
positioning-text-markups-inside-slurs.ly
printing-text-from-right-to-left.ly
--- /dev/null
+\version "2.17.7"
+
+\header {
+ lsrtags = "contexts-and-engravers, repeats, staff-notation"
+
+ texidoc = "
+Scores of large ensemble works often have bar numbers placed beneath the
+system, centered horizontally on the measure's extent. This snippet shows
+how the @code{Measure_counter_engraver} may be used to simulate this
+notational practice. Here, the engraver has been added to a @code{Dynamics}
+context.
+
+"
+
+ doctitle = "Centered measure numbers"
+}
+
+\layout {
+ \context {
+ \Dynamics
+ \consists #Measure_counter_engraver
+ \override MeasureCounter.direction = #DOWN
+ \override MeasureCounter.font-encoding = #'latin1
+ \override MeasureCounter.font-shape = #'italic
+ % to control the distance of the Dynamics context from the staff:
+ \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
+ }
+ \context {
+ \Score
+ \remove "Bar_number_engraver"
+ }
+}
+
+pattern = \repeat unfold 7 { c'4 d' e' f' }
+
+\new StaffGroup <<
+ \new Staff {
+ \pattern
+ }
+ \new Staff {
+ \pattern
+ }
+ \new Dynamics {
+ \startMeasureCount
+ s1*7
+ \stopMeasureCount
+ }
+>>
--- /dev/null
+\version "2.17.7"
+
+\header {
+ lsrtags = "contexts-and-engravers, editorial-annotations, repeats, staff-notation"
+
+ texidoc = "
+This snippet demonstrates the use of the @code{Measure_counter_engraver} to
+number groups of successive measures. Any stretch of measures may be numbered,
+whether consisting of repetitions or not.
+
+The engraver must be added to the appropriate context. Here, a @code{Staff}
+context is used; another possibility is a @code{Dynamics} context.
+
+The counter is begun with @code{\\startMeasureCount} and ended with
+@code{\\stopMeasureCount}. Numbering will start by default with @code{1}, but
+this behavior may be modified by overriding the @code{count-from} property.
+
+When a measure extends across a line break, the number will appear twice, the
+second time in parentheses.
+
+"
+ doctitle = "Numbering groups of measures"
+}
+
+\layout {
+ \context {
+ \Staff
+ \consists #Measure_counter_engraver
+ }
+}
+
+\new Staff {
+ \startMeasureCount
+ \repeat unfold 7 {
+ c'4 d' e' f'
+ }
+ \stopMeasureCount
+ \bar "||"
+ g'4 f' e' d'
+ \override Staff.MeasureCounter.count-from = #2
+ \startMeasureCount
+ \repeat unfold 5 {
+ g'4 f' e' d'
+ }
+ g'4 f'
+ \bar ""
+ \break
+ e'4 d'
+ \repeat unfold 7 {
+ g'4 f' e' d'
+ }
+ \stopMeasureCount
+}
--- /dev/null
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.7
+\version "2.17.7"
+
+\header {
+ lsrtags = "contexts-and-engravers, editorial-annotations, repeats, staff-notation"
+
+ texidoc = "
+This snippet demonstrates the use of the @code{Measure_counter_engraver} to
+number groups of successive measures. Any stretch of measures may be numbered,
+whether consisting of repetitions or not.
+
+The engraver must be added to the appropriate context. Here, a @code{Staff}
+context is used; another possibility is a @code{Dynamics} context.
+
+The counter is begun with @code{\\startMeasureCount} and ended with
+@code{\\stopMeasureCount}. Numbering will start by default with @code{1}, but
+this behavior may be modified by overriding the @code{count-from} property.
+
+When a measure extends across a line break, the number will appear twice, the
+second time in parentheses.
+
+"
+ doctitle = "Numbering groups of measures"
+} % begin verbatim
+
+
+\layout {
+ \context {
+ \Staff
+ \consists #Measure_counter_engraver
+ }
+}
+
+\new Staff {
+ \startMeasureCount
+ \repeat unfold 7 {
+ c'4 d' e' f'
+ }
+ \stopMeasureCount
+ \bar "||"
+ g'4 f' e' d'
+ \override Staff.MeasureCounter.count-from = #2
+ \startMeasureCount
+ \repeat unfold 5 {
+ g'4 f' e' d'
+ }
+ g'4 f'
+ \bar ""
+ \break
+ e'4 d'
+ \repeat unfold 7 {
+ g'4 f' e' d'
+ }
+ \stopMeasureCount
+}
demonstrating-all-headers.ly
setting-system-separators.ly
table-of-contents.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
doctitle = "Preventing final mark from removing final tuplet"
} % begin verbatim
-
\new Staff {
\set tupletFullLength = ##t
\time 1/8
\tuplet 3/2 { c'16 c'16 c'16 }
\tuplet 3/2 { c'16 c'16 c'16 }
\tuplet 3/2 { c'16 c'16 c'16 }
- \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
+ \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
\tuplet 3/2 { c'16 c'16 c'16 }
\tuplet 3/2 { c'16 c'16 c'16 }
\tuplet 3/2 { c'16 c'16 c'16 }
- \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
+ \override Score.RehearsalMark.break-visibility = ##(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
adding-volta-brackets-to-additional-staves.ly
+centered-measure-numbers.ly
cross-staff-tremolos.ly
engraving-tremolos-with-floating-beams.ly
isolated-percent-repeats.ly
measure-counter.ly
+numbering-groups-of-measures.ly
percent-repeat-count-visibility.ly
percent-repeat-counter.ly
positioning-segno-and-coda-with-line-break.ly
\new Staff {
\override Score.BreakAlignment.break-align-orders =
- #'#((left-edge ambitus breathing-sign clef staff-bar
+ ##((left-edge ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
adding-orchestral-cues-to-a-vocal-score.ly
adding-timing-marks-to-long-glissandi.ly
alternative-bar-numbering.ly
+centered-measure-numbers.ly
changing-the-number-of-lines-in-a-staff.ly
changing-the-staff-size.ly
creating-blank-staves.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
nesting-staves.ly
non-traditional-key-signatures.ly
+numbering-groups-of-measures.ly
orchestra,-choir-and-piano-template.ly
putting-lyrics-inside-the-staff.ly
quoting-another-voice-with-transposition.ly
tweaking-clef-properties.ly
use-square-bracket-at-the-start-of-a-staff-group.ly
using-autochange-with-more-than-one-voice.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
volta-below-chords.ly
volta-multi-staff.ly
doctitle = "Stand-alone two-column markup"
} % begin verbatim
-
\markup {
\fill-line {
\hspace #1
\line { Amen. }
}
\hspace #2
- \column {
- \line { \italic { O sacred feast } }
- \line { \italic { in which Christ is received, } }
- \line { \italic { the memory of His Passion is renewed, } }
- \line { \italic { the mind is filled with grace, } }
- \line { \italic { and a pledge of future glory is given to us. } }
- \line { \italic { Amen. } }
+ \column \italic {
+ \line { O sacred feast }
+ \line { in which Christ is received, }
+ \line { the memory of His Passion is renewed, }
+ \line { the mind is filled with grace, }
+ \line { and a pledge of future glory is given to us. }
+ \line { Amen. }
}
\hspace #1
}
combining-two-parts-on-the-same-staff.ly
entering-several-tuplets-using-only-one--times-command.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
;; for historical reasons
(n (ly:pitch-notename p)))
(cond
- ((and (> a 1) (or (= n 6) (= n 2)))
+ ((and (> a 1) (or (eq? n 6) (eq? n 2)))
(set! a (- a 2))
(set! n (+ n 1)))
- ((and (< a -1) (or (= n 0) (= n 3)))
+ ((and (< a -1) (or (eq? n 0) (eq? n 3)))
(set! a (+ a 2))
(set! n (- n 1))))
(cond
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.11"
+\version "2.17.15"
\header {
lsrtags = "headword"
\score {
<<
- \relative <<
+ \relative c' <<
\new Staff \ViolinSolo
>>
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.11"
+
+\header {
+ lsrtags = "paper-and-layout, staff-notation, syntax-and-expressions"
+
+ texidoc = "
+The code of this snippet shows how to achieve vertical aligned
+StaffGroups with a SystemStartBar for each StaffGroup, but without
+connecting them. This might be helpful for educational uses, but of
+course other utilizations are thinkable.
+
+"
+ doctitle = "Vertical aligned StaffGroups without connecting SystemStartBar"
+} % begin verbatim
+
+% by Thomas Morley
+
+#(set-global-staff-size 18)
+
+\paper {
+ indent = 0
+ ragged-right = ##f
+ print-all-headers = ##t
+}
+
+\layout {
+ \context {
+ \Staff
+ \consists "Mark_engraver"
+ \override RehearsalMark.self-alignment-X = #LEFT
+ }
+ \context {
+ \StaffGroup
+ systemStartDelimiterHierarchy =
+ #'(SystemStartBrace (SystemStartBracket a b))
+ }
+ \context {
+ \Score
+ \override SystemStartBrace.style = #'bar-line
+ \override SystemStartBar.stencil = ##f
+ \override SystemStartBrace.padding = #-0.1
+ \override SystemStartBrace.thickness = #1.6
+ \remove "Mark_engraver"
+ \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
+ }
+}
+
+%%%% EXAMPLE
+
+txt =
+\lyricmode {
+ Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
+ und4 hof -- fet auf ihn al -- le Zeit2.
+}
+
+% First StaffGroup "exercise"
+
+eI =
+\relative c' {
+ \mark \markup {
+ \bold Teacher:
+ This is a simple setting of the choral. Please improve it.
+ }
+ \key a\minor
+ \time 4/4
+ \voiceOne
+
+ \partial 4
+ e4
+ a b c b
+ a b gis2
+ e4\fermata g! g f
+ e a a gis
+ a2.\fermata
+ \bar ":|."
+}
+
+eII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \voiceTwo
+ \partial 4
+ c4
+ e e e gis
+ a f e2
+ b4 b d d
+ c c d d
+ c2.
+ \bar ":|."
+}
+
+eIII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceOne
+
+ \partial 4
+ a4
+ c b a b
+ c d b2
+ gis4 g g b
+ c a f e
+ e2.
+}
+
+eIV =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceTwo
+
+ \partial 4
+ a,4
+ a' gis a e
+ a, d e2
+ e,4\fermata e' b g
+ c f d e
+ a,2.\fermata
+ \bar ":|."
+}
+
+exercise =
+\new StaffGroup = "exercise"
+<<
+
+ \new Staff
+ <<
+ \new Voice \eI
+ \new Voice \eII
+ >>
+
+ \new Lyrics \txt
+
+ \new Staff
+ <<
+ \new Voice \eIII
+ \new Voice \eIV
+ >>
+>>
+
+% Second StaffGRoup "simple Bach"
+
+sbI =
+\relative c' {
+ \mark \markup { \bold" Pupil:" Here's my version! }
+ \key a\minor
+ \time 4/4
+ \voiceOne
+
+ \partial 4
+ e4
+ a b c b
+ a b gis2
+ e4\fermata g! g f
+ e a a gis
+ a2.\fermata
+ \bar ":|."
+}
+
+sbII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \voiceTwo
+ \partial 4
+ c8 d
+ e4 e e8 f g4
+ f f e2
+ b4 b8 c d4 d
+ e8 d c4 b8 c d4
+ c2.
+ \bar ":|."
+}
+
+sbIII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceOne
+
+ \partial 4
+ a8 b
+ c4 b a b8 c
+ d4 d8 c b2
+ gis4 g g8 a b4
+ b a8 g f4 e
+ e2.
+}
+
+sbIV =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceTwo
+
+ \partial 4
+ a,4
+ a' gis a e
+ f8 e d4 e2
+ e,4\fermata e' b a8 g
+ c4 f8 e d4 e
+ a,2.\fermata
+ \bar ":|."
+}
+
+simpleBach =
+\new StaffGroup = "simple Bach"
+<<
+
+ \new Staff
+ <<
+ \new Voice \sbI
+ \new Voice \sbII
+ >>
+
+ \new Lyrics \txt
+
+ \new Staff
+ <<
+ \new Voice \sbIII
+ \new Voice \sbIV
+ >>
+>>
+
+% Third StaffGroup "chromatic Bach"
+
+cbI =
+\relative c' {
+ \mark \markup {
+ \bold "Teacher:"
+ \column {
+ "Well, you simply copied and transposed a version of J.S.Bach."
+ "Do you know this one?"
+ }
+ }
+ \key a\minor
+ \time 4/4
+ \voiceOne
+
+ \partial 4
+ e4
+ a b c b
+ a b gis4. fis8
+ e4\fermata g! g f
+ e a a8 b gis4
+ a2.\fermata
+ \bar ":|."
+}
+
+cbII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \voiceTwo
+ \partial 4
+ c8 d
+ e4 e e8 fis gis4
+ a8 g! f!4 e2
+ b4 e e d
+ d8[ cis] d dis e fis e4
+ e2.
+ \bar ":|."
+}
+
+cbIII =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceOne
+
+ \partial 4
+ a8 b
+ c[ b] a gis8 a4 d,
+ e8[ e'] d c b4. a8
+ gis4 b c d8 c
+ b[ a] a b c b b c16 d
+ c2.
+}
+
+cbIV =
+\relative c' {
+ \key a\minor
+ \time 4/4
+ \clef bass
+ \voiceTwo
+
+ \partial 4
+ a4
+ c, e a, b
+ c d e2
+ e4\fermata e a b8 c
+ gis[ g] fis f e dis e4
+ a,2.\fermata
+ \bar ":|."
+}
+
+chromaticBach =
+\new StaffGroup = "chromatic Bach"
+<<
+
+ \new Staff
+ <<
+ \new Voice \cbI
+ \new Voice \cbII
+ >>
+
+ \new Lyrics \txt
+
+ \new Staff
+ <<
+ \new Voice \cbIII
+ \new Voice \cbIV
+ >>
+>>
+
+
+% Score
+
+\score {
+ <<
+ \exercise
+ \simpleBach
+ \chromaticBach
+ >>
+ \header {
+ title = \markup
+ \column {
+ \vspace #1
+ "Exercise: Improve the given choral"
+ " "
+ }
+ }
+ \layout {
+ \context {
+ \Lyrics
+ \override LyricText.X-offset = #-1
+ }
+ }
+}
\relative c' {
\textLengthOn
+ c1^
+ \markup {
+ \center-column {
+ 'tin-whistle
+ " "
+ \woodwind-diagram
+ #'tin-whistle
+ #'()
+ }
+ }
+
c1^
\markup {
\center-column {
@tab @code{#f}
@tab Convert text strings to paths when glyphs belong to a music font.
-@item @code{old-relative}
-@tab @code{#f}
-@tab Make @code{\relative} mode for simultaneous music work similar to
-chord syntax.
-
@item @code{paper-size}
@tab @code{\"a4\"}
@tab Set default paper size. Note the string must be enclosed in
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.17.13 released! @emph{February 23, 2013}
+@subsubheading LilyPond 2.17.14 released! @emph{March 10, 2013}
-We are happy to announce the release of LilyPond 2.17.13. This
-release contains the usual number of bugfixes and enhancements, and contains
+We are happy to announce the release of LilyPond 2.17.14. This
+release contains the usual number of bugfixes (including putting span bars back
+where they should be) and enhancements, and contains
some work in progress. You will have access to the very latest features, but
some may be incomplete, and you may encounter bugs and crashes. If you require
a stable version of Lilypond, we recommend using the 2.16 version.
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.17.13 released! @emph{February 23, 2013}
+
+We are happy to announce the release of LilyPond 2.17.13. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
@newsItem
@subsubheading LilyPond 2.17.12 released! @emph{February 8, 2013}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=17
-PATCH_LEVEL=14
+PATCH_LEVEL=15
MY_PATCH_LEVEL=
VERSION_STABLE=2.16.2
-VERSION_DEVEL=2.17.13
+VERSION_DEVEL=2.17.14
AC_DEFUN(STEPMAKE_DATADIR, [
- if test "$datadir" = "\${prefix}/share"; then
- datadir='${prefix}/share'
- fi
presome=${prefix}
if test "$prefix" = "NONE"; then
presome=${ac_default_prefix}
build_package_datadir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/share/$package
- DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${prefix}/share!"`
+ DATADIR=`echo ${datadir} | sed "s!\\\${datarootdir}!${presome}/share!"`
DATADIR=`echo ${DATADIR} | sed "s!\\\${prefix}!$presome!"`
BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
## ugh: cut & paste programming from datadir.
AC_DEFUN(STEPMAKE_LIBDIR, [
-
- if test "$libdir" = "\${exec_prefix}/lib"; then
- libdir='${exec_prefix}/lib'
+ presome=${exec_prefix}
+ if test "$presome" = "NONE"; then
+ presome=${prefix}
fi
- presome=$exec_prefix
+ if test "$presome" = "NONE"; then
+ presome=${ac_default_prefix}
+ fi
+
build_package_libdir=$ugh_ugh_autoconf250_builddir/out$CONFIGSUFFIX/lib/$package
LIBDIR=`echo ${libdir} | sed "s!\\\${exec_prefix}!$presome!"`
AC_DEFUN(STEPMAKE_TEXMF_DIRS, [
- # ugh
- STEPMAKE_PROGS(KPSEWHICH, kpsewhich, OPTIONAL)
+ STEPMAKE_PROGS(KPSEWHICH, kpsewhich, $1)
+
+ AC_MSG_CHECKING(for metapost required files)
+ if test "$MFPLAIN_MP" = ""; then
+ MFPLAIN_MP=`kpsewhich -format=mp mfplain`
+ fi
+ if test "$MFPLAIN_MP" = ""; then
+ AC_MSG_RESULT(no)
+ STEPMAKE_ADD_ENTRY($1,['metapost CTAN package (texlive-metapost)'])
+ else
+ AC_MSG_RESULT(yes)
+ fi
])
AC_DEFUN(STEPMAKE_TEXMF, [
STEPMAKE_GETTEXT
STEPMAKE_MSGFMT(REQUIRED)
STEPMAKE_TEXMF(REQUIRED)
-STEPMAKE_TEXMF_DIRS
+STEPMAKE_TEXMF_DIRS(REQUIRED)
STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2)
# check for 3 typedefs added in Guile 1.9
`(
("LilyPond" . (,(concat LilyPond-lilypond-command " %s") "%s" "%l" "View"))
("2PS" . (,(concat LilyPond-lilypond-command " -f ps %s") "%s" "%p" "ViewPS"))
- ("2Gnome" . (,(concat LilyPond-lilypond-command " -b gnome %s")))
-
("Book" . ("lilypond-book %x" "%x" "%l" "LaTeX"))
("LaTeX" . ("latex '\\nonstopmode\\input %l'" "%l" "%d" "ViewDVI"))
(LilyPond-command (LilyPond-command-menu "2PS") 'LilyPond-get-master-file)
)
-(defun LilyPond-command-formatgnome ()
- "Format the gnome output of the current document."
- (interactive)
- (LilyPond-command (LilyPond-command-menu "2Gnome") 'LilyPond-get-master-file))
-
(defun LilyPond-command-formatmidi ()
"Format the midi output of the current document."
(interactive)
(define-key LilyPond-mode-map "\C-c\C-c" 'LilyPond-command-master)
(define-key LilyPond-mode-map "\C-cm" 'LilyPond-command-formatmidi)
(define-key LilyPond-mode-map "\C-c\C-f" 'LilyPond-command-formatps)
- (define-key LilyPond-mode-map "\C-c\C-g" 'LilyPond-command-formatgnome)
(define-key LilyPond-mode-map "\C-c\C-s" 'LilyPond-command-view)
(define-key LilyPond-mode-map "\C-c\C-p" 'LilyPond-command-viewps)
(define-key LilyPond-mode-map [(control c) return] 'LilyPond-command-current-midi)
texidoc = "accidentals avoid stems of other notes too."
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
-\new Staff \relative <<bes' \\ a'>>
+\new Staff \relative c' <<bes' \\ a'>>
}
-\version "2.17.6"
+\version "2.17.15"
\layout
{
ragged-right = ##t
}
-\new PianoStaff \relative <<
+\new PianoStaff \relative c' <<
\accidentalStyle piano
\new Staff { ges'4 ges4 }
\new Staff { r8 gis r8 gis }
anywhere in the vertical alignment. "
}
-\version "2.17.11"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
-\relative <<
+\relative c' <<
\new Staff = "1" { c2 c s1 }
\new Staff = "2" { c2 c s1 }
\new StaffGroup <<
-\version "2.17.5"
+\version "2.17.15"
\header { texidoc = "New bar line glyphs can be defined in Scheme."
}
\defineBarLine "0" #'("0" "" "")
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
\new Staff {
c4 c \bar "0" c c \bar "0" \break
c1
-\version "2.17.5"
+\version "2.17.15"
\header { texidoc = "New bar line styles can be defined by @code{\\defineBarLine}."
}
\defineBarLine "[|;" #'("|" "[|;" " |")
\defineBarLine ";|]" #'(";|]" "" " |")
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
\new Staff {
c4 c \bar "[|;" c c \bar ";|]" \break
c4 c \bar ";|]" c c \bar "[|;" \break
-\version "2.17.5"
+\version "2.17.15"
\header { texidoc = "Segno bar lines can be used to mark
the begin and the end of a segno part."
\paper { ragged-right = ##t }
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
\new Staff {
c4 \bar "S" c \bar "S-|" c \bar "S-S" c \bar ":|.S" \break
c4 c \bar ":|.S.|:" c c \bar ":|.S.|:-S" \break
-\version "2.17.5"
+\version "2.17.15"
\header { texidoc = "Various types of bar lines can be drawn.
" }
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
\new Staff = "1" {
c2 \bar "!" c
s1
-\version "2.16.0"
+\version "2.17.15"
\header {
texidoc = "Manual beams do not collide with notes."
}
indent = #0.0
}
-\relative \new Staff {
+\relative c' \new Staff {
<<
\new Voice {
<<
\new Voice {
- \repeat unfold 8 \relative {
+ \repeat unfold 8 \relative c' {
\voiceOne
c8[
\voiceTwo
c'']
}
}
- \new Voice \relative {
+ \new Voice \relative c' {
\voiceFour
s8 f
s8 g
\break
<<
\new Voice {
- \repeat unfold 8 \relative {
+ \repeat unfold 8 \relative c' {
\voiceOne
%% We must use a wider interval, otherwise the beam will be
c'']
}
}
- \new Voice \relative {
+ \new Voice \relative c' {
\voiceFour
\autoBeamOff
\stemUp f' \stemDown f,
-\version "2.16.0"
+\version "2.17.15"
\header {
texidoc = "Manual beams do not collide with notes."
}
indent = #0.0
}
-\relative \new Staff {
+\relative c' \new Staff {
<<
\new Voice {
% debug-beam-scoring = ##t
}
-\version "2.16.0"
+\version "2.17.15"
-\relative {
+\relative c' {
\time 2/4
c8[ \clef "bass" e,, ]
r8
\layout { ragged-right = ##t }
-\version "2.16.0"
+\version "2.17.15"
-\relative <<
+\relative c' <<
\new Staff {
<<
{ f g } \\
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
<<
- \relative \new Voice {
+ \relative c' \new Voice {
c8 c b b a a b b
c c b b
}
-\version "2.16.0"
+\version "2.17.15"
<<
- \relative \new Voice {
+ \relative c' \new Voice {
c8 c c c c c
}
\figures {
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
<<
- \relative \new Voice {
+ \relative c' \new Voice {
c8 c b b a a b b
c^"the same with extenders" c b b a a b b
-\version "2.16.0"
+\version "2.17.15"
\header
{
when the grace note is tied to the next note.
"
}
-\relative {
+\relative c' {
\slashedGrace c16~ c1
}
-\version "2.16.0"
+\version "2.17.15"
#(ly:set-option 'warning-as-error #f)
#(ly:expect-warning (_ "No such instrument: ~a") "bassClar")
the given instrument definition does not exist."
}
-\relative
+\relative c'
{
c4
\instrumentSwitch "bassClar"
properties for an in staff instrument switch. "
}
-\version "2.16.0"
+\version "2.17.15"
\addInstrumentDefinition #"bassClar"
#`((instrumentTransposition . ,(ly:make-pitch -1 6 FLAT))
(instrumentName . "bla")
ragged-right = ##t
}
-\relative
+\relative c'
{
c4
\instrumentSwitch "bassClar"
-\version "2.16.0"
+\version "2.17.15"
\header{
texidoc="
Key signatures may appear on key changes, even without a barline.
ragged-right = ##T
}
-\relative
+\relative c'
{
\set Staff.createKeyOnClefChange = ##t
\key bes \major c2
}
-\version "2.17.6"
+\version "2.17.15"
\layout {
indent = 0.0\mm
ragged-right = ##T
}
-\relative <<
+\relative c' <<
\new Staff {
\crescTextCresc
c1_\< c c1\!
{
texidoc = "switching voices in the middle of the lyrics is possible using @code{lyricsto}."
}
-\version "2.17.6"
+\version "2.17.15"
<<
- \relative \new Voice = "lahlah" {
+ \relative c' \new Voice = "lahlah" {
c4
<<
\new Voice = "alternative" {
}
-\version "2.17.11"
+\version "2.17.15"
<<
- \relative \new Voice = "lahlah" {
+ \relative c' \new Voice = "lahlah" {
\set Staff.autoBeaming = ##f
c4
<<
}
-\version "2.17.6"
+\version "2.17.15"
\paper{
ragged-right = ##T
}
-\relative
+\relative c'
<< { c'4 c c c }
\\
{
-\version "2.16.0"
+\version "2.17.15"
% possible rename to staff-something. -gp
\header{ texidoc = "@cindex Staff Remove
ragged-right = ##t
}
-\relative \new Staff \with {
+\relative c' \new Staff \with {
\remove "Staff_symbol_engraver"
\consists "Pitch_squash_engraver"
\remove "Clef_engraver"
-\version "2.16.0"
+\version "2.17.15"
\header{
texidoc= "Test optional music function arguments.
(ly:pitch? #{ \pitch d' #}) (ly:pitch? #{ \pitch e' #})
ly:music?) #{ $a $dur $b $c ^\markup{!} $d #})
-\new Voice { \relative c' e' \relative { e' } \ablative c' e' \ablative { e' }
+\new Voice { \relative c' e' \relative c' { e' } \ablative c' e' \ablative { e' }
\zap 8. c'' d'' {e''4..} \zap f''8 g'' \zap 4 a'' b'' c''' d'''2 }
-\version "2.16.0"
+\version "2.17.15"
\header {
texidoc = "Percent repeats are also centered when there is a grace note in a parallel staff. "
ragged-right =##t
}
-\relative <<
+\relative c' <<
\new Staff { \repeat percent 3 c1}
\new Staff { c1 c \grace b8 c1 }
>>
}
-\version "2.16.0"
+\version "2.17.15"
\layout { ragged-right=##t }
-\new Staff \relative
+\new Staff \relative c'
<<
{ s8 f4 } \\
{ <f, a>8[ r <a d>] }
"
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
-\relative
+\relative c'
{
\set stringNumberOrientations = #'(left)
\set fingeringOrientations = #'(left)
-\version "2.16.0"
+\version "2.17.15"
\header {
and then return to the previous value."
}
-\relative {
+\relative c' {
\set fingeringOrientations = #'(left)
<e-1>1 |
\once \set fingeringOrientations = #'(right)
ragged-right = ##T
}
-\version "2.16.0"
+\version "2.17.15"
-\relative
+\relative c'
<<
\new Staff {
c\breve f4 r2.
--- /dev/null
+\version "2.17.15"
+
+\header {
+ texidoc = "The @code{Script} grobs should follow the descending melody line,
+even though the @code{NoteHead} stencils are point stencils. The
+@code{Stem_engraver} is removed so that the only
+@code{side-support-element} is the @code{NoteHead}.
+"
+}
+
+\layout {
+ \context {
+ \Voice
+ \remove "Stem_engraver"
+ }
+}
+
+{
+ \override Script #'direction = #DOWN
+ \override NoteHead #'stencil = #point-stencil
+ c'2.-> b8-- a-- g1->
+}
texidoc = "Dynamics avoid collision with slur."
}
-\version "2.16.0"
+\version "2.17.15"
\layout {
indent = 0\mm
ragged-right = ##t
}
-\relative
+\relative c'
{
b( b f'\p b,)
slur responds appropriately if a script is moved."
}
-\version "2.17.6"
+\version "2.17.15"
\layout {
indent = 0\mm
ragged-right = ##t
}
-\relative
+\relative c'
{
b4-.( b-.)
\once \override Script.padding = #1.5
-\version "2.17.11"
+\version "2.17.15"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\festival #"song-reordering.xml" { \tempo 4 = 100 }
<<
- \relative \context Voice = "lahlah" {
+ \relative c' \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
c4
<<
-\version "2.17.11"
+\version "2.17.15"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
\festival #"song-reordering2.xml" { \tempo 4 = 100 }
<<
- \relative \context Voice = "lahlah" {
+ \relative c' \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
c4
<<
-\version "2.16.0"
+\version "2.17.15"
\header {
texidoc="Festival song synthesis output supports
slurs.
\festival #"song-slurs.xml" { \tempo 4 = 100 }
<<
- \relative \context Voice = "lahlah" {
+ \relative c' \context Voice = "lahlah" {
\set Staff.autoBeaming = ##f
c4
\slurDotted
\header { texidoc = "A heavy-bar system start delimiter may be created by tuning the @code{SystemStartBar} grob."
}
-\version "2.17.6"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
<<
\new StaffGroup
- \relative <<
+ \relative c' <<
\set StaffGroup.systemStartDelimiter = #'SystemStartBar
\override StaffGroup.SystemStartBar.thickness = #8
\override StaffGroup.SystemStartBar.padding = #0.2
created with the @code{systemStartDelimiterHierarchy} property."
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##t
}
\new StaffGroup
-\relative <<
+\relative c' <<
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
\new Staff { c1 }
texidoc = "Tab supports slides."
}
-\version "2.16.0"
+\version "2.17.15"
\paper {
ragged-right = ##T
}
-\relative \new TabVoice
+\relative c' \new TabVoice
{
<c g'\harmonic> d\2\glissando e\2
}
}
-\version "2.16.0"
+\version "2.17.15"
\paper { ragged-right = ##t }
-\relative
+\relative c'
{
<f d a>1~
<f d a>1~
texidoc = "Trill spanner can end on a grace note"
}
-\version "2.16.0"
+\version "2.17.15"
\layout {
ragged-right = ##T
}
-\relative \new Voice {
+\relative c' \new Voice {
<< { c1 \startTrillSpan }
{ s2. \grace { d16[\stopTrillSpan e] } } >>
c4 }
announce_element (info);
}
+ if (!last_volume_initialized_)
+ {
+ absolute_ = new Audio_dynamic ();
+
+ last_volume_
+ = absolute_->volume_ = equalize_volume (0.71); // Backward compatible
+ last_volume_initialized_ = true;
+
+ Audio_element_info info (absolute_, script_event_);
+ announce_element (info);
+ }
+
if (span_dynamic_)
span_dynamic_->add_absolute (absolute_);
#include "lily-guile.hh"
/* options */
-extern bool lily_1_8_relative;
-extern bool lily_1_8_compatibility_used;
SCM ly_get_option (SCM);
SCM ly_set_option (SCM, SCM);
return i;
SCM sid = lookup_identifier (str);
+ if (Music *m = unsmob_music (sid))
+ {
+ m->set_spot (override_input (last_input_));
+ }
+
if (sid != SCM_UNDEFINED)
return scan_scm_id (sid);
sval = scm_struct_ref (sval, SCM_INUM0);
if (scm_is_pair (sval)) {
- for (SCM v = scm_reverse (scm_cdr (sval));
- scm_is_pair (v);
- v = scm_cdr (v))
+ for (SCM p = scm_reverse (scm_cdr (sval));
+ scm_is_pair (p);
+ p = scm_cdr (p))
{
+ SCM v = scm_car (p);
+ if (Music *m = unsmob_music (v))
+ {
+ if (!unsmob_input (m->get_property ("origin")))
+ m->set_spot (override_input (last_input_));
+ }
+
int token;
switch (extra_token) {
case '$':
- token = scan_scm_id (scm_car (v));
+ token = scan_scm_id (v);
if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
push_extra_token (token, yylval);
break;
case '#':
- push_extra_token (SCM_IDENTIFIER, scm_car (v));
+ push_extra_token (SCM_IDENTIFIER, v);
break;
}
}
sval = SCM_UNSPECIFIED;
}
+ if (Music *m = unsmob_music (sval))
+ {
+ if (!unsmob_input (m->get_property ("origin")))
+ m->set_spot (override_input (last_input_));
+ }
+
return sval;
}
Pitch start = *unsmob_pitch (pitch);
Music *m = unsmob_music (music);
Pitch last = m->to_relative_octave (start);
- if (lily_1_8_relative)
- m->set_property ("last-pitch", last.smobbed_copy ());
return last.smobbed_copy ();
}
{
Music *me = unsmob_music (music);
Pitch p = *unsmob_pitch (pitch);
-
- SCM elts = me->get_property ("elements");
- SCM copied = SCM_EOL;
- if (lily_1_8_relative)
- copied = ly_music_deep_copy (elts);
-
- Pitch retval = music_list_to_relative (elts, p, false);
-
- if (lily_1_8_relative)
- {
-
- Pitch retval_1_8 = music_list_to_relative (copied, p, true);
- if (retval_1_8 != retval)
- lily_1_8_compatibility_used = true;
-
- retval = retval_1_8;
- }
-
- return retval.smobbed_copy ();
+ return music_list_to_relative (me->get_property ("elements"),
+ p, false).smobbed_copy ();
}
MAKE_SCHEME_CALLBACK (Music_sequence, event_chord_relative_callback, 2);
| output_def
| context_def_spec_block
| music_assign
- | post_event_nofinger
+ | post_event_nofinger post_events
+ {
+ $$ = scm_reverse_x ($2, SCM_EOL);
+ if (Music *m = unsmob_music ($1))
+ {
+ if (m->is_mus_type ("post-event-wrapper"))
+ $$ = scm_append
+ (scm_list_2 (m->get_property ("elements"),
+ $$));
+ else
+ $$ = scm_cons ($1, $$);
+ }
+ if (scm_is_pair ($$)
+ && scm_is_null (scm_cdr ($$)))
+ $$ = scm_car ($$);
+ else
+ {
+ Music * m = MY_MAKE_MUSIC ("PostEvents", @$);
+ m->set_property ("elements", $$);
+ $$ = m->unprotect ();
+ }
+ }
| number_expression
| FRACTION
| string
$$ = SCM_EOL;
}
| post_events post_event {
- unsmob_music ($2)->set_spot (@2);
- $$ = scm_cons ($2, $$);
+ $$ = $1;
+ if (Music *m = unsmob_music ($2))
+ {
+ if (m->is_mus_type ("post-event-wrapper"))
+ {
+ for (SCM p = m->get_property ("elements");
+ scm_is_pair (p);
+ p = scm_cdr (p))
+ {
+ $$ = scm_cons (scm_car (p), $$);
+ }
+ } else {
+ m->set_spot (@2);
+ $$ = scm_cons ($2, $$);
+ }
+ }
}
;
}
| script_dir music_function_call_closed {
$$ = $2;
- if (!SCM_UNBNDP ($1))
+ if (!unsmob_music ($2)->is_mus_type ("post-event")) {
+ parser->parser_error (@2, _ ("post-event expected"));
+ $$ = SCM_UNSPECIFIED;
+ } else if (!SCM_UNBNDP ($1))
{
unsmob_music ($$)->set_property ("direction", $1);
}
} else if (Music *mus = unsmob_music (sid)) {
mus = mus->clone ();
*destination = mus->self_scm ();
- unsmob_music (*destination)->
- set_property ("origin",
- make_input (override_input (last_input_)));
-
bool is_event = mus->is_mus_type ("post-event");
mus->unprotect ();
return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
bool music_strings_to_paths;
bool relative_includes;
-/*
- Backwards compatibility.
-*/
-bool lily_1_8_relative = false;
-bool lily_1_8_compatibility_used = false;
bool profile_property_accesses = false;
/*
crash if internally the wrong type is used for a grob property.
be_safe_global = valbool;
val = val_scm_bool;
}
- else if (varstr == "old-relative")
- {
- lily_1_8_relative = valbool;
- /* Needs to be reset for each file that uses this option. */
- lily_1_8_compatibility_used = valbool;
- val = val_scm_bool;
- }
else if (varstr == "strict-infinity-checking")
{
strict_infinity_checking = valbool;
MAKE_SCHEME_CALLBACK (Relative_octave_music, relative_callback, 2)
SCM
-Relative_octave_music::relative_callback (SCM music, SCM pitch)
+Relative_octave_music::relative_callback (SCM /* music */,
+ SCM pitch)
{
- Music *me = unsmob_music (music);
- if (lily_1_8_relative)
- {
- lily_1_8_compatibility_used = true;
- /* last-pitch should be junked some time, when
- we ditch 1.8 compat too.
-
- When you do, B should start where A left off.
-
- \relative { A \relative { ...} B } */
- SCM last_pitch = me->get_property ("last-pitch");
- Pitch *ptr = unsmob_pitch (last_pitch);
- return (ptr) ? last_pitch : pitch;
- }
- else
- return pitch;
+ return pitch;
}
return me->get_property ("elements");
}
-MAKE_SCHEME_CALLBACK (Repeated_music, relative_callback, 2);
-SCM
-Repeated_music::relative_callback (SCM music, SCM pitch)
-{
- Pitch p = *unsmob_pitch (pitch);
- Music *me = unsmob_music (music);
- if (lily_1_8_relative)
- {
- Music *body = unsmob_music (me->get_property ("element"));
- if (body)
- p = body->to_relative_octave (p);
-
- Pitch last = p;
- SCM alternatives = me->get_property ("elements");
-
- for (SCM s = alternatives; scm_is_pair (s); s = scm_cdr (s))
- {
- lily_1_8_compatibility_used = true;
- unsmob_music (scm_car (s))->to_relative_octave (p);
- }
-
- return last.smobbed_copy ();
- }
- else
- return me->generic_to_relative_octave (p).smobbed_copy ();
-}
-
Moment
Repeated_music::alternatives_get_length (Music *me, bool fold)
{
dim.set_minimum_height (0.0);
}
- // Ditto - seems kludgy, but this time logic of SystemStartBrackets
- if (my_dim.is_empty ())
- {
- my_dim = Skyline (my_dim.direction ());
- my_dim.set_minimum_height (isinf (max_raise) ? 0.0 : max_raise);
- }
-
// Many cross-staff grobs do not have good height estimations.
// We give the grob the best chance of not colliding by shifting
// it to the maximum height in the case of cross-staff alignment.
a DOWN skyline with an UP skyline, we need to flip the DOWN skyline first.
This means that the merging routine doesn't need to be aware of direction,
but the distance routine does.
-*/
-/* If we start including very thin buildings, numerical accuracy errors can
- arise. Therefore, we ignore all buildings that are less than epsilon wide. */
-#define EPS 1e-5
+ Be careful about numerical accuracy. When dealing with extremely small values,
+ computation errors may arise due to the use of floating point arithmetic.
+ For example, if left and right have equal values to start with, in C++
+ they may not receive the same value after
+
+ left = left*factor + offset;
+ right = right*factor + offset;
+
+ Which is very unfortunate. Maybe using GCC compiler options to disallow
+ extended precision for intermediate results and/or the choice to store
+ intermediates with less than full precision would retain some kind of
+ deterministic behavior that way.
+
+ Anyway, it seems that accepting extremely narrow building in skylines
+ doesn't cause accuracy problems to us, so we allow arbitrarily small buildings.
+ However, as Keith pointed out, problems may appear if more than one operation
+ is done before storing the result, and/or there are different code paths
+ for doing the operations to the different ends of an interval.
+*/
static void
print_buildings (list<Building> const &b)
break;
}
- /* only include buildings wider than epsilon */
- if (end > x + EPS)
+ if (end >= x)
{
b.leading_part (end);
b.start_ = last_end;
static void
single_skyline (Building b, list<Building> *const ret)
{
- if (b.end_ > b.start_ + EPS)
- {
- if (b.start_ != -infinity_f)
- ret->push_back (Building (-infinity_f, -infinity_f,
- -infinity_f, b.start_));
- ret->push_back (b);
- if (b.end_ != infinity_f)
- ret->push_back (Building (b.end_, -infinity_f,
- -infinity_f, infinity_f));
- }
- else
- {
- empty_skyline (ret);
- }
+ assert (b.end_ >= b.start_);
+
+ if (b.start_ != -infinity_f)
+ ret->push_back (Building (-infinity_f, -infinity_f,
+ -infinity_f, b.start_));
+ ret->push_back (b);
+ if (b.end_ != infinity_f)
+ ret->push_back (Building (b.end_, -infinity_f,
+ -infinity_f, infinity_f));
}
/* remove a non-overlapping set of boxes from BOXES and build a skyline
continue;
}
- if (x1 > last_end + EPS)
+ if (x1 >= last_end)
result.push_back (Building (last_end, -infinity_f, -infinity_f, x1));
result.push_back (*i);
/*
Build skyline from a set of boxes.
- Boxes should have fatness in the horizon_axis, otherwise they are ignored.
+ Boxes should be non-empty on both axes. Otherwise, they will be ignored
*/
Skyline::Skyline (vector<Box> const &boxes, Axis horizon_axis, Direction sky)
{
list<Building> buildings;
sky_ = sky;
- Axis vert_axis = other_axis (horizon_axis);
for (vsize i = 0; i < boxes.size (); i++)
- {
- Interval iv = boxes[i][horizon_axis];
- if (iv.length () > EPS && !boxes[i][vert_axis].is_empty ())
- buildings.push_front (Building (boxes[i], horizon_axis, sky));
- }
+ if (!boxes[i].is_empty ())
+ buildings.push_front (Building (boxes[i], horizon_axis, sky));
buildings_ = internal_build_skyline (&buildings);
normalize ();
/*
build skyline from a set of line segments.
- Buildings should have fatness in the horizon_axis, otherwise they are ignored.
+ Segments can be articulated from left to right or right to left.
+ In the case of the latter, they will be stored internally as left to right.
*/
Skyline::Skyline (vector<Drul_array<Offset> > const &segments, Axis horizon_axis, Direction sky)
{
Real y1 = left[other_axis (horizon_axis)] * sky;
Real y2 = right[other_axis (horizon_axis)] * sky;
- if (x1 + EPS < x2)
+ if (x1 <= x2)
buildings.push_back (Building (x1, y1, y2, x2));
}
}
/* do the same filtering as in Skyline (vector<Box> const&, etc.) */
- Interval iv = b[a];
- if (iv.length () <= EPS || b[other_axis (a)].is_empty ())
+ if (b.is_empty ())
return;
my_bld.splice (my_bld.begin (), buildings_);
Skyline
Skyline::padded (Real horizon_padding) const
{
+ if (horizon_padding < 0.0)
+ warning ("Cannot have negative horizon padding. Junking.");
+
+ if (horizon_padding <= 0.0)
+ return *this;
+
list<Building> pad_buildings;
for (list<Building>::const_iterator i = buildings_.begin (); i != buildings_.end (); ++i)
{
? Interval (-infinity_f, infinity_f)
: me->maybe_pure_extent (me, Y_AXIS, pure, beg, end);
- // In horizontal spacing, there are grobs like SystemStartBracket
- // that take up no vertical spcae. So, if the y extent is empty,
- // we use the entire Y extent ot make the X a sort of horizontal wall.
- // Ditto for vertical spacing and grobs like BassFigureAlginmentPositioning.
- if (a == Y_AXIS && yex.is_empty ())
- yex.set_full ();
-
- if (a == X_AXIS && xex.is_empty ())
- xex.set_full ();
-
if (xex.is_empty () || yex.is_empty ())
return Skyline_pair ().smobbed_copy ();
Grob *me = unsmob_grob (smob);
int beg = robust_scm2int (begscm, 0);
int end = robust_scm2int (endscm, INT_MAX);
+ // We cannot measure the width of a spanner before line breaking,
+ // so we assume that the width is infinite.
return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, true, beg, end, dynamic_cast<Spanner *> (me), false);
}
Grob *me = unsmob_grob (smob);
int beg = robust_scm2int (begscm, 0);
int end = robust_scm2int (endscm, INT_MAX);
+ // If the grob is cross staff, we cannot measure its Y-extent before
+ // wayyyy downstream (after spacing of axis groups is done).
+ // Thus, we assume that the Y extent is infinite for cross staff grobs.
return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, true, beg, end, false, to_boolean (me->get_property ("cross-staff")));
}
Grob::simple_horizontal_skylines_from_extents (SCM smob)
{
Grob *me = unsmob_grob (smob);
+ // See comment in function above.
return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, false, 0, 0, false, to_boolean (me->get_property ("cross-staff")));
}
unpure_pure_call_tag = scm_make_smob_type ("unpure-pure-call", 0);
scm_set_smob_mark (unpure_pure_call_tag, scm_markcdr);
scm_set_smob_apply (unpure_pure_call_tag,
- (SCM (*)()) apply_unpure_pure, 2, 0, 1);
+ (scm_t_subr) apply_unpure_pure, 2, 0, 1);
};
ADD_SCM_INIT_FUNC (unpure_pure_container, init_unpure_pure_container);
(list-tabulate
(- rc (length ealtl))
(lambda (i) (list (ly:music-deep-copy body) (ly:music-deep-copy (car ealtl)))))
- (map (lambda (alt) (list (ly:music-deep-copy body) alt))))))))))
+ (map (lambda (alt) (list (ly:music-deep-copy body) alt)) ealtl))))))))
((EventChord)
(let-values
(((trem evl)
\version "2.17.6"
-%% < 1.8 compatibility switch
-#(ly:set-option 'old-relative)
-
%% named durations
breve = #(ly:make-duration -1 0)
longa = #(ly:make-duration -2 0)
#(note-names-language parser default-language)
-#(ly:set-option 'old-relative #f)
#(define location #f)
#(define toplevel-scores (list))
#(define toplevel-bookparts (list))
%% Above and below comments compensate for the parser's look-ahead.
%%
-#(if (and (ly:get-option 'old-relative)
- (defined? 'input-file-name)
- (not (ly:get-option 'old-relative-used)))
- (old-relative-not-used-message input-file-name))%% there is a problem at the end of the input file
-
#(if (and (not version-seen)
(defined? 'input-file-name))
(version-not-seen-message input-file-name))
(symbol? number-pair? markup?)
(_i "Attach @var{text} to @var{grob-name} at offset @var{offset}
(use like @code{\\once})")
- (make-music 'AnnotateOutputEvent
- 'symbol grob-name
- 'X-offset (car offset)
- 'Y-offset (cdr offset)
- 'text text))
+ (make-event-chord
+ (list
+ (make-music 'AnnotateOutputEvent
+ 'symbol grob-name
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text text))))
balloonText =
-#(define-music-function (parser location offset text) (number-pair? markup?)
+#(define-event-function (parser location offset text) (number-pair? markup?)
(_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})")
(make-music 'AnnotateOutputEvent
'X-offset (car offset)
relative =
#(define-music-function (parser location pitch music)
- ((ly:pitch? (ly:make-pitch 0 0 0)) ly:music?)
- (_i "Make @var{music} relative to @var{pitch} (default @code{c'}).")
+ (ly:pitch? ly:music?)
+ (_i "Make @var{music} relative to @var{pitch}.")
(ly:make-music-relative! music pitch)
(make-music 'RelativeOctaveMusic
'element music))
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.17.13\n"
+"Project-Id-Version: lilypond 2.17.14\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2013-02-23 16:12+0000\n"
+"POT-Creation-Date: 2013-03-10 16:43+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "removing this vertical group"
msgstr ""
-#: axis-group-interface.cc:701
+#: axis-group-interface.cc:704
#, c-format
msgid "\"%s\" is not a valid outside-staff-placement-directive"
msgstr ""
-#: axis-group-interface.cc:771
+#: axis-group-interface.cc:774
msgid "an outside-staff object should have a direction, defaulting to up"
msgstr ""
msgid "barcheck failed at: %s"
msgstr ""
-#: beam-engraver.cc:147
+#: beam-engraver.cc:148
msgid "already have a beam"
msgstr ""
-#: beam-engraver.cc:230
+#: beam-engraver.cc:231
msgid "unterminated beam"
msgstr ""
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:270 chord-tremolo-engraver.cc:149
msgid "stem must have Rhythmic structure"
msgstr ""
-#: beam-engraver.cc:277
+#: beam-engraver.cc:281
msgid "stem does not fit in beam"
msgstr ""
-#: beam-engraver.cc:278
+#: beam-engraver.cc:282
msgid "beam was started here"
msgstr ""
msgid "need symbol arguments for \\override and \\revert"
msgstr ""
-#: context.cc:149
+#: context.cc:150
#, c-format
msgid "cannot find or create new `%s'"
msgstr ""
-#: context.cc:228
+#: context.cc:229
#, c-format
msgid "cannot find or create `%s' called `%s'"
msgstr ""
-#: context.cc:427
+#: context.cc:426
#, c-format
msgid "cannot find or create: `%s'"
msgstr ""
msgid "%d: %s"
msgstr ""
-#: grob.cc:478
+#: grob.cc:488
#, c-format
msgid "ignored infinite %s-offset"
msgstr ""
msgid "(load path: `%s')"
msgstr ""
-#: lily-guile.cc:404
+#: lily-guile.cc:422
#, c-format
msgid "cannot find property type-check for `%s' (%s)."
msgstr ""
-#: lily-guile.cc:407
+#: lily-guile.cc:425
msgid "perhaps a typing error?"
msgstr ""
-#: lily-guile.cc:414
+#: lily-guile.cc:432
msgid "doing assignment anyway"
msgstr ""
-#: lily-guile.cc:426
+#: lily-guile.cc:444
#, c-format
msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr ""
"defaulting to hairpin."
msgstr ""
-#: new-dynamic-engraver.cc:233
+#: new-dynamic-engraver.cc:233 slur-proto-engraver.cc:119
#, c-format
msgid "unterminated %s"
msgstr ""
msgid "trying to use \\partial after the start of a piece"
msgstr ""
-#: pdf-scheme.cc:50
+#: pdf-scheme.cc:65
#, c-format
msgid "Conversion of string `%s' to UTF-16be failed: %s"
msgstr ""
msgid "MIDI output to `%s'..."
msgstr ""
-#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
-#, c-format
-msgid "direction of %s invalid: %d"
-msgstr ""
-
-#: phrasing-slur-engraver.cc:175
-msgid "unterminated phrasing slur"
-msgstr ""
-
-#: phrasing-slur-engraver.cc:210
-msgid "cannot end phrasing slur"
-msgstr ""
-
-#. We already have an old slur, so give a warning
-#. and completely ignore the new slur.
-#: phrasing-slur-engraver.cc:230
-msgid "already have phrasing slur"
-msgstr ""
-
#: piano-pedal-engraver.cc:279
#, c-format
msgid "expect 3 strings for piano pedals, found: %ld"
msgid "rhythmic head is not part of a rhythmic column"
msgstr ""
-#: rest-collision.cc:146
+#: rest-collision.cc:150
msgid "cannot resolve rest collision: rest direction not set"
msgstr ""
-#: rest-collision.cc:157 rest-collision.cc:266
+#: rest-collision.cc:161 rest-collision.cc:270
msgid "too many colliding rests"
msgstr ""
msgid "direction must not be CENTER in ly:skyline-pair::skyline"
msgstr ""
-#: slur-engraver.cc:176
-msgid "unterminated slur"
-msgstr ""
-
-#: slur-engraver.cc:211
-msgid "cannot end slur"
+#: slur-proto-engraver.cc:51
+#, c-format
+msgid "direction of %s invalid: %d"
msgstr ""
#. We already have an old slur, so give a warning
#. and completely ignore the new slur.
-#: slur-engraver.cc:231
-msgid "already have slur"
+#: slur-proto-engraver.cc:166
+#, c-format
+msgid "already have %s"
+msgstr ""
+
+#: slur-proto-engraver.cc:183
+#, c-format
+msgid "%s without a cause"
+msgstr ""
+
+#: slur-proto-engraver.cc:244
+#, c-format
+msgid "cannot end %s"
msgstr ""
-#: slur.cc:430
+#: slur.cc:434
#, c-format
msgid "Ignoring grob for slur: %s. avoid-slur not set?"
msgstr ""
msgid "unknown parent class `~a'"
msgstr ""
-#: define-markup-commands.scm:1022
+#: define-markup-commands.scm:986
msgid "no systems found in \\score markup, does it have a \\layout block?"
msgstr ""
-#: define-markup-commands.scm:2749
+#: define-markup-commands.scm:2768
#, scheme-format
msgid "Cannot find glyph ~a"
msgstr ""
-#: define-markup-commands.scm:3175
+#: define-markup-commands.scm:3194
#, scheme-format
msgid "no brace found for point size ~S "
msgstr ""
-#: define-markup-commands.scm:3176
+#: define-markup-commands.scm:3195
#, scheme-format
msgid "defaulting to ~S pt"
msgstr ""
-#: define-markup-commands.scm:3420
+#: define-markup-commands.scm:3439
#, scheme-format
msgid "not a valid duration string: ~a"
msgstr ""
-#: define-markup-commands.scm:3631
+#: define-markup-commands.scm:3650
#, scheme-format
msgid "not a valid duration string: ~a - ignoring"
msgstr ""
msgid "cannot find: ~A"
msgstr ""
-#: lily.scm:795
+#: lily.scm:796
msgid "Success: compilation successfully completed"
msgstr ""
-#: lily.scm:796
+#: lily.scm:797
msgid "Compilation completed with warnings or errors"
msgstr ""
-#: lily.scm:858
+#: lily.scm:859
#, scheme-format
msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: lily.scm:861
+#: lily.scm:862
#, scheme-format
msgid ""
"logfile ~a (exit ~a):\n"
"~a"
msgstr ""
-#: lily.scm:883 lily.scm:972
+#: lily.scm:884 lily.scm:973
#, scheme-format
msgid "failed files: ~S"
msgstr ""
-#: lily.scm:963
+#: lily.scm:964
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr ""
-#: lily.scm:982 ps-to-png.scm:66
+#: lily.scm:983 ps-to-png.scm:66
#, scheme-format
msgid "Invoking `~a'...\n"
msgstr ""
+# -*- coding: utf-8 -*-
# (setq py-indent-offset 4)
r"\1/\2", str)
return str
+@rule((2, 17, 15), r"""#(ly:set-option 'old-relative)
+\relative -> \relative c'""")
+def conv(str):
+ if re.search (r"[#$]\(ly:set-option\s+'old-relative", str):
+ stderr_write (NOT_SMART % "#(ly:set-option 'old-relative)")
+ stderr_write (UPDATE_MANUALLY)
+ raise FatalConversionError ();
+ # If the file contains a language switch to a language where the
+ # name of c is not "c", we can't reliably know which parts of the
+ # file will need "c" and which need "do".
+ m = re.search (r'\\language\s(?!\s*#?"(?:nederlands|deutsch|english|norsk|suomi|svenska))"', str)
+ if m:
+ # Heuristic: if there is a non-commented { before the language
+ # selection, we can't be sure.
+ # Also if there is any selection of a non-do language.
+ if (re.search ("^[^%\n]*\\{", m.string[:m.start()], re.M)
+ or re.search ('\\language\s(?!\s*#?"(?:catalan|espanol|español|italiano|français|portugues|vlaams))"', str)):
+ do = "$(ly:make-pitch 0 0)"
+ else:
+ do = "do'"
+ else:
+ do = "c'"
+ str = re.sub (r"(\\relative)(\s+(\{|[\\<]))",
+ r"\1 " + do + r"\2", str)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
"The print routine for span bars."
(let* ((elts-array (ly:grob-object grob 'elements))
(refp (ly:grob-common-refpoint-of-array grob elts-array Y))
- (elts (sort (ly:grob-array->list elts-array)
- ly:grob-vertical<?))
+ (elts (reverse (sort (ly:grob-array->list elts-array)
+ ly:grob-vertical<?)))
;; Elements must be ordered according to their y coordinates
;; relative to their common axis group parent.
;; Otherwise, the computation goes mad.
- (bar-glyph (ly:grob-property grob 'glyph-name)))
+ (bar-glyph (ly:grob-property grob 'glyph-name))
+ (span-bar empty-stencil))
(if (string? bar-glyph)
- (let loop ((extents '())
- (make-span-bars '())
- ;; if there is no bar grob, we use the callback
- ;; argument
- (model-bar grob)
- (bar-list elts))
-
- ;; we compute the extents of each system and store them
- ;; in a list; dito for the 'allow-span-bar property.
- ;; model-bar takes the bar grob, if given.
- (if (pair? bar-list)
- (let* ((bar (car bar-list))
- (ext (bar-line::bar-y-extent bar refp))
- (staff-symbol (ly:grob-object bar 'staff-symbol)))
- (if (ly:grob? staff-symbol)
- (if (positive? (interval-length ext))
- (loop (cons (interval-union
- ext
- (ly:grob-extent staff-symbol refp Y))
- extents)
- (cons (ly:grob-property
- bar 'allow-span-bar #t)
- make-span-bars)
- bar
- (cdr bar-list))
- (loop extents make-span-bars
- model-bar (cdr bar-list)))))
- ;; end of loop
- ;; model-bar is the last bar found in the elts list
- ;; (former version had the first here).
-
- ;; the span bar reaches from the lower end of the upper staff
- ;; to the upper end of the lower staff - when
- ;; allow-span-bar is #t
-
- (if (pair? extents)
- (ly:stencil-translate-axis
- (fold
- (lambda (curr prev allow-span-bar span-bar)
- (if (and allow-span-bar
- (positive? (interval-length prev)))
- (let ((span-extent (cons (cdr prev) (car curr))))
- ;; draw the span bar only when the staff lines
- ;; don't overlap and allow-span-bar is #t:
- (if (positive? (interval-length span-extent))
- (ly:stencil-add
- span-bar
- (span-bar::compound-bar-line
- model-bar
- bar-glyph
- span-extent))
- span-bar))
- span-bar))
- empty-stencil
- ;; we discard the first entry in make-span-bars,
- ;; because its corresponding bar line is the
- ;; uppermost and therefore not connected to
- ;; another bar line
- (cdr extents) extents (cdr make-span-bars))
- (- (ly:grob-relative-coordinate grob refp Y)) Y)
- empty-stencil)))
- empty-stencil)))
+ (let ((extents '())
+ (make-span-bars '())
+ (model-bar #f))
+
+ ;; we compute the extents of each system and store them
+ ;; in a list; dito for the 'allow-span-bar property.
+ ;; model-bar takes the bar grob, if given.
+ (map (lambda (bar)
+ (let ((ext (bar-line::bar-y-extent bar refp))
+ (staff-symbol (ly:grob-object bar 'staff-symbol)))
+
+ (if (ly:grob? staff-symbol)
+ (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
+
+ (set! ext (interval-union ext refp-extent))
+
+ (if (> (interval-length ext) 0)
+ (begin
+ (set! extents (append extents (list ext)))
+ (set! model-bar bar)
+ (set! make-span-bars
+ (append make-span-bars
+ (list (ly:grob-property
+ bar
+ 'allow-span-bar
+ #t))))))))))
+ elts)
+ ;; if there is no bar grob, we use the callback argument
+ (if (not model-bar)
+ (set! model-bar grob))
+ ;; we discard the first entry in make-span-bars,
+ ;; because its corresponding bar line is the
+ ;; uppermost and therefore not connected to
+ ;; another bar line
+ (if (pair? make-span-bars)
+ (set! make-span-bars (cdr make-span-bars)))
+ ;; the span bar reaches from the lower end of the upper staff
+ ;; to the upper end of the lower staff - when allow-span-bar is #t
+ (reduce (lambda (curr prev)
+ (let ((span-extent (cons 0 0))
+ (allow-span-bar (car make-span-bars)))
+
+ (set! make-span-bars (cdr make-span-bars))
+ (if (> (interval-length prev) 0)
+ (begin
+ (set! span-extent (cons (cdr prev)
+ (car curr)))
+ ;; draw the span bar only when the staff lines
+ ;; don't overlap and allow-span-bar is #t:
+ (and (> (interval-length span-extent) 0)
+ allow-span-bar
+ (set! span-bar
+ (ly:stencil-add
+ span-bar
+ (span-bar::compound-bar-line
+ model-bar
+ bar-glyph
+ span-extent))))))
+ curr))
+ "" extents)
+ (set! span-bar (ly:stencil-translate-axis
+ span-bar
+ (- (ly:grob-relative-coordinate grob refp Y))
+ Y))))
+ span-bar))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; volta bracket functions
(padding . 0.2)
(positioning-done . ,ly:align-interface::align-to-minimum-distances)
(stacking-dir . ,DOWN)
+ (X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,axis-group-interface::height)
(meta . ((class . Spanner)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(padding . 0.5)
(side-axis . ,Y)
(staff-padding . 1.0)
+ (X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,axis-group-interface::height)
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
(axes . (,Y))
(vertical-skylines . ,ly:axis-group-interface::calc-skylines)
+ (X-extent . ,ly:axis-group-interface::width)
(Y-extent . ,axis-group-interface::height)
(meta . ((class . Spanner)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
; we want this to be ignored, so empty, but the extra spacing height
; should preserve the span bar's presence for horizontal spacing
- (Y-extent . ,pure-from-neighbor-interface::unobtrusive-height)
+ (Y-extent . ,pure-from-neighbor-interface::height-if-pure)
(meta . ((class . Item)
(object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
(pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
(collapse-height . 5.0)
(direction . ,LEFT)
+ (cross-staff . #t)
;; ugh--hardcoded.
(padding . -0.1) ;; bar must cover rounded ending of staff line.
(stencil . ,ly:system-start-delimiter::print)
(collapse-height . 5.0)
(direction . ,LEFT)
(font-encoding . fetaBraces)
+ (cross-staff . #t)
(padding . 0.3)
(stencil . ,ly:system-start-delimiter::print)
(style . brace)
. (
(collapse-height . 5.0)
(direction . ,LEFT)
+ (cross-staff . #t)
(padding . 0.8)
(stencil . ,ly:system-start-delimiter::print)
(style . bracket)
(SystemStartSquare
. (
(direction . ,LEFT)
+ (cross-staff . #t)
(stencil . ,ly:system-start-delimiter::print)
(style . line-bracket)
(thickness . 1.0)
(AnnotateOutputEvent
. ((description . "Print an annotation of an output element.")
- (types . (general-music event annotate-output-event))
+ (types . (general-music event annotate-output-event post-event))
))
(ApplyContext
(ArticulationEvent
. ((description . "Add an articulation marking to a note.
-Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction
-(@code{^} for up or @code{_} for down), or LilyPond's choice
-(no direction specified), and where @code{y} is an articulation
-(such as @w{@code{-.}}, @w{@code{->}}, @code{\\tenuto}, @code{\\downbow}).
+Syntax: @var{note}@code{x}@code{y}, where @code{x} is a direction\
+\n(@code{^} for up or @code{_} for down), or LilyPond's choice\
+\n(no direction specified), and where @code{y} is an articulation\
+\n(such as @w{@code{-.}}, @w{@code{->}}, @code{\\tenuto}, @code{\\downbow}).
See the Notation Reference for details.")
(types . (general-music post-event event articulation-event script-event))
))
(types . (general-music post-event span-event event phrasing-slur-event))
))
+ (PostEvents
+ . ((description . "Container for several postevents.
+
+This can be used to package several events into a single one. Should not be seen outside of the parser.")
+ (types . (post-event post-event-wrapper))))
+
(PropertySet
. ((description . "Set a context property.
(define-safe-public DOUBLE-SHARP 1)
(define-safe-public SEMI-TONE 1/2)
+(define-safe-public INFINITY-INT 1000000)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; moments
(ly:format "~a:1" input-file-name)
(_ "no \\version statement found, please add~afor future compatibility")
(format #f "\n\n\\version ~s\n\n" (lilypond-version))))
-
-(define-public (old-relative-not-used-message input-file-name)
- (ly:warning-located
- (ly:format "~a:1" input-file-name)
- (_ "old relative compatibility not used")))
(music-strings-to-paths #f
"Convert text strings to paths when glyphs belong
to a music font.")
- (old-relative #f
-"Make \\relative mode for simultaneous music work
-similar to chord syntax.")
(point-and-click #t
"Add point & click links to PDF output.")
(paper-size "a4"
ly:grob::horizontal-skylines-from-element-stencils
ly:grob::pure-horizontal-skylines-from-element-stencils))
-;; Sometimes, in horizontal spacing, we want grobs to block other grobs.
-;; They thus need to have a non-empty height. We give them a point height
-;; so that, minimally, they block grobs directly to the right of them.
-;; Often this is complimented by an extra-spacing-height.
-;; We don't, however, want these grobs to factor into vertical spacing
-;; decisions, so we make their unpure height #f.
-
;; Using this as a callback for a grob's Y-extent promises
;; that the grob's stencil does not depend on line-spacing.
;; We use this promise to figure the space required by Clefs
(if (stem-stub::do-calculations grob)
(let* ((dad (ly:grob-parent grob X))
(refp (ly:grob-common-refpoint grob dad Y))
- (stem_ph (ly:grob-pure-height dad refp 0 1000000))
- (my_ph (ly:grob-pure-height grob refp 0 1000000))
+ (stem_ph (ly:grob-pure-height dad refp 0 INFINITY-INT))
+ (my_ph (ly:grob-pure-height grob refp 0 INFINITY-INT))
;; only account for distance if stem is on different staff than stub
(dist (if (grob::has-interface refp 'hara-kiri-group-spanner-interface)
0
(cons -0.1 0.1)))
(define-public (pure-from-neighbor-interface::extra-spacing-height grob)
- (let* ((height (ly:grob-pure-height grob grob 0 10000000))
+ (let* ((height (ly:grob-pure-height grob grob 0 INFINITY-INT))
(from-neighbors (interval-union
height
(ly:axis-group-interface::pure-height
grob
0
- 10000000))))
+ INFINITY-INT))))
(coord-operation - from-neighbors height)))
;; If there are neighbors, we place the height at their midpoint
(let* ((height (ly:axis-group-interface::pure-height
grob
0
- 10000000))
+ INFINITY-INT))
(c (interval-center height)))
(if (interval-empty? height) empty-interval (cons c c))))
;; Minimizes the impact of the height on vertical spacing while allowing
;; it to appear in horizontal skylines of paper columns if necessary.
-(define-public pure-from-neighbor-interface::unobtrusive-height
+(define-public pure-from-neighbor-interface::height-if-pure
(ly:make-unpure-pure-container #f pure-from-neighbor-interface::pure-height))
(define-public (pure-from-neighbor-interface::account-for-span-bar grob)
(ly:grob-relative-coordinate spanner common-y Y)))
(interval-end
(ly:grob-robust-relative-extent dots common X))
- ;; TODO: use real infinity constant.
- -10000))))
+ (- INFINITY-INT)))))
(right-x (max (- (interval-start
(ly:grob-robust-relative-extent right-span common X))
padding)
(ly:warning (_ "Unknown paper size: ~a") name)))))
(define-safe-public (set-default-paper-size name . rest)
- (internal-set-paper-size
- (ly:output-def-scope (eval '$defaultpaper (current-module)))
- name
- (memq 'landscape rest)))
+ (let* ((pap (module-ref (current-module) '$defaultpaper))
+ (new-paper (ly:output-def-clone pap))
+ (new-scope (ly:output-def-scope new-paper)))
+ (internal-set-paper-size
+ new-scope
+ name
+ (memq 'landscape rest))
+ (module-set! (current-module) '$defaultpaper new-paper)))
(define-public (set-paper-size name . rest)
(if (module-defined? (current-module) 'is-paper)
(define-public
(make-partial-ellipse-stencil
x-radius y-radius start-angle end-angle thick connect fill)
-
+ "Create an elliptical arc
+@var{x-radius} is the X radius of the arc.
+@var{y-radius} is the Y radius of the arc.
+@var{start-angle} is the starting angle of the arc in degrees.
+@var{end-angle} is the ending angle of the arc in degrees.
+@var{thick} is the thickness of the line.
+@var{connect} is a boolean flag indicating if the end should
+be connected to the start by a line.
+@var{fill} is a boolean flag indicating if the shape should be filled."
(define (make-radius-list x-radius y-radius)
+ "Makes a list of angle/radius pairs at intervals of PI/2 for
+the partial ellipse until 7*PI/2. For example, in pseudo-code:
+> (make-radius-list 2 3)
+((0.0 . 2) (PI/2 . 3) (PI . -2) (3*PI/2 . -3)
+(2*PI . 2) (5*PI/2 . 3) (3*PI . -2) (7*PI/2 . -3))
+"
(apply append
(map (lambda (adder)
(map (lambda (quadrant)
(define
(insert-in-ordered-list ordering-function value inlist cutl? cutr?)
+ "Insert @var{value} in ordered list @var{inlist}. If @var{cutl?}, we
+cut away any parts of @var{inlist} before @var{value}. @var{cutr?} works
+the same way but for the right side. For example:
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #f #f)
+'(1 2 3 4 6 7)
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #t #f)
+'(4 6 7)
+> (insert-in-ordered-list < 4 '(1 2 3 6 7) #f #t)
+'(1 2 3 4)
+"
(define
(helper ordering-function value left-list right-list cutl? cutr?)
(if (null? right-list)
(define (ordering-function-2 a b) (car<= a b))
(define (min-max-crawler min-max side l)
+ "Apply function @var{side} to each member of list and
+then reduce using @var{min-max}:
+> (min-max-crawler min car '((0 . 3) (-1 . 4) (1 . 2)))
+-1
+> (min-max-crawler min cdr '((0 . 3) (-1 . 4) (1 . 2)))
+2
+"
(reduce min-max
(if (eq? min-max min) 100000 -100000)
(map (lambda (x) (side x)) l)))
(let*
- ((x-out-radius (+ x-radius (/ thick 2.0)))
+ (;; the outside limit of the x-radius
+ (x-out-radius (+ x-radius (/ thick 2.0)))
+ ;; the outside limit of the y-radius
(y-out-radius (+ y-radius (/ thick 2.0)))
+ ;; end angle to radians
(new-end-angle (angle-0-2pi (degrees->radians end-angle)))
+ ;; length of the radius at the end angle
(end-radius (ellipse-radius x-out-radius y-out-radius new-end-angle))
+ ;; start angle to radians
(new-start-angle (angle-0-2pi (degrees->radians start-angle)))
+ ;; length of the radius at the start angle
(start-radius (ellipse-radius x-out-radius y-out-radius new-start-angle))
+ ;; points that the arc passes through at 90 degree intervals
(radius-list (make-radius-list x-out-radius y-out-radius))
+ ;; rectangular coordinates of arc endpoint
(rectangular-end-radius (polar->rectangular end-radius end-angle))
+ ;; rectangular coordinates of arc begin point
(rectangular-start-radius (polar->rectangular start-radius start-angle))
+ ;; we want the end angle to always be bigger than the start angle
+ ;; so we redefine it here just in case it is less
(new-end-angle
(if (<= new-end-angle new-start-angle)
(+ TWO-PI new-end-angle)
new-end-angle))
+ ;; all the points that may be extrema of the arc
+ ;; this is the 90 degree points plus the beginning and end points
+ ;; we use this to calculate extents
(possible-extrema
(insert-in-ordered-list
ordering-function-2
thick
connect
fill)
+ ; we know the extrema points by crawling through the
+ ; list of possible extrema and finding the min and max
+ ; for x and y
(cons (min-max-crawler min cadr possible-extrema)
(min-max-crawler max cadr possible-extrema))
(cons (min-max-crawler min cddr possible-extrema)
--- /dev/null
+\paper {
+ #(set-paper-size "A4")
+}
+\header { tagline = ##f }
--- /dev/null
+#!/bin/sh
+
+# Make PNG files from regtests
+#
+# Usage: ./make-regtest-pngs.sh -j CPUs -o/-n
+#
+# where -j specifies the number of parallel processes to run
+# (normally CPUs+1). e.g.:
+#
+# ./make-regtest-pngs.sh -j9
+#
+# -o means build an old regtest set - the PNGs go in the old-regtest-results
+# directory
+#
+# -n means build a new regtest set - the PNGs go in the new-regtest-results
+# directory
+
+cpu_count=1
+
+while getopts "j:on" opts; do
+ if [ "$opts" = "j" ]; then
+ cpu_count=$OPTARG
+ fi
+
+ if [ "$opts" = "o" ]; then
+ file_loc="old-regtest-results"
+ fi
+
+ if [ "$opts" = "n" ]; then
+ file_loc="new-regtest-results"
+ do_compare="y"
+ fi
+done
+
+if [ -z "$file_loc" ]; then
+ echo "Must specify old (-o) or new (-n) regtest PNG creation on command line"
+ exit 1
+fi
+
+rm -rf $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+mkdir -p $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+cd $LILYPOND_BUILD_DIR/out-png-check/$file_loc
+ls $LILYPOND_GIT/input/regression/*.ly > dir.txt
+$LILYPOND_BUILD_DIR/out/bin/lilypond --png --relocate \
+ -dinclude-settings=$LILYPOND_GIT/scripts/auxiliar/NoTagline.ly \
+ -djob-count=$cpu_count -dread-file-list "dir.txt"
+rm -rf dir.txt
+rm -rf *.log
+
+if [ -n "$do_compare" ]; then
+ cd ..
+ rm -rf regtest-diffs
+ mkdir -p regtest-diffs
+ diff_count=0
+ for filename in new-regtest-results/*.png; do
+ trimFile=$(basename $filename)
+ if [ -e old-regtest-results/$trimFile ]; then
+ convert new-regtest-results/$trimFile -level 50% NewTest.png
+ convert old-regtest-results/$trimFile -level 50% OldTest.png
+ difference=$(compare -metric AE NewTest.png OldTest.png null: 2>&1 )
+ if [ $? -gt 0 ];then
+ difference=9999
+ fi
+ if [ $difference -gt 1 ];then
+ echo $trimFile": "$difference" differences"
+ compare -dissimilarity-threshold 1 \
+ new-regtest-results/$trimFile \
+ old-regtest-results/$trimFile regtest-diffs/$trimFile
+ convert regtest-diffs/$trimFile -trim regtest-diffs/$trimFile
+ diff_count=$(($diff_count+1))
+ fi
+ else
+ echo "old-regtest-results/"$trimFile" does not exist"
+ fi
+ done
+ rm -rf NewTest.png
+ rm -rf OldTest.png
+ echo $diff_count "differences found."
+fi