]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Tue, 26 Mar 2013 17:18:28 +0000 (18:18 +0100)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Tue, 26 Mar 2013 17:18:28 +0000 (18:18 +0100)
102 files changed:
Documentation/changes.tely
Documentation/contributor/issues.itexi
Documentation/contributor/regressions.itexi
Documentation/fr/notation/rhythms.itely
Documentation/ja/notation/input.itely
Documentation/notation/ancient.itely
Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly
Documentation/snippets/centered-measure-numbers.ly [new file with mode: 0644]
Documentation/snippets/contexts-and-engravers.snippet-list
Documentation/snippets/creating-double-digit-fingerings.ly
Documentation/snippets/displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.ly
Documentation/snippets/editorial-annotations.snippet-list
Documentation/snippets/new/centered-measure-numbers.ly [new file with mode: 0644]
Documentation/snippets/new/numbering-groups-of-measures.ly [new file with mode: 0644]
Documentation/snippets/numbering-groups-of-measures.ly [new file with mode: 0644]
Documentation/snippets/paper-and-layout.snippet-list
Documentation/snippets/preventing-final-mark-from-removing-final-tuplet.ly
Documentation/snippets/repeats.snippet-list
Documentation/snippets/separating-key-cancellations-from-key-signature-changes.ly
Documentation/snippets/staff-notation.snippet-list
Documentation/snippets/stand-alone-two-column-markup.ly
Documentation/snippets/syntax-and-expressions.snippet-list
Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Documentation/snippets/unfretted-headword.ly
Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly [new file with mode: 0644]
Documentation/snippets/woodwind-diagrams-listing.ly
Documentation/usage/running.itely
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
aclocal.m4
configure.ac
elisp/lilypond-mode.el
input/regression/accidental-collision.ly
input/regression/accidental-piano.ly
input/regression/alignment-order.ly
input/regression/bar-line-define-bar-glyph.ly
input/regression/bar-line-define-bar-line.ly
input/regression/bar-line-segno.ly
input/regression/bar-lines.ly
input/regression/beam-collision-basic.ly
input/regression/beam-collision-beamcount.ly
input/regression/beam-collision-prefatory-matter.ly
input/regression/collision-alignment.ly
input/regression/figured-bass-continuation-center.ly
input/regression/figured-bass-continuation-modifiers.ly
input/regression/figured-bass-continuation.ly
input/regression/grace-slashed-no-slur.ly
input/regression/instrument-switch-invalid-warning.ly
input/regression/instrument-switch.ly
input/regression/keys.ly
input/regression/line-dashed-period.ly
input/regression/lyric-combine-switch-voice-2.ly
input/regression/lyric-combine-switch-voice.ly
input/regression/music-function-end-spanners.ly
input/regression/no-staff.ly
input/regression/optional-args.ly
input/regression/repeat-percent-grace.ly
input/regression/rest-collision-beam-note.ly
input/regression/script-stack-horizontal.ly
input/regression/set-once.ly
input/regression/skip-of-length.ly
input/regression/skyline-point-extent.ly [new file with mode: 0644]
input/regression/slur-dynamics.ly
input/regression/slur-script.ly
input/regression/song-reordering.ly
input/regression/song-reordering2.ly
input/regression/song-slurs.ly
input/regression/system-start-heavy-bar.ly
input/regression/system-start-nesting.ly
input/regression/tablature-slide.ly
input/regression/tie-whole.ly
input/regression/trill-spanner-grace.ly
lily/dynamic-performer.cc
lily/include/program-option.hh
lily/lexer.ll
lily/music-scheme.cc
lily/music-sequence.cc
lily/parser.yy
lily/program-option-scheme.cc
lily/relative-octave-music.cc
lily/repeated-music.cc
lily/side-position-interface.cc
lily/skyline.cc
lily/stencil-integral.cc
lily/unpure-pure-container.cc
ly/articulate.ly
ly/declarations-init.ly
ly/init.ly
ly/music-functions-init.ly
po/lilypond.pot
python/convertrules.py
scm/bar-line.scm
scm/define-grobs.scm
scm/define-music-types.scm
scm/lily-library.scm
scm/lily.scm
scm/output-lib.scm
scm/paper.scm
scm/stencil.scm
scripts/auxiliar/NoTagline.ly [new file with mode: 0644]
scripts/auxiliar/make-regtest-pngs.sh [new file with mode: 0755]

index dab40a311297339e0686d820f7704877dd16d10d..2b1a060f41c1ca95794c62ef58bccd5212ae8825 100644 (file)
@@ -61,6 +61,13 @@ which scares away people.
 
 @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
index c9d19f5079ea44b023d1d1f37076636f6dfd5bc6..01cce81411de184e9b780b2883a34bd27e29bf61 100644 (file)
@@ -854,7 +854,7 @@ status to @qq{patch-review} and emails the developer list.  If the patch
 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
@@ -875,7 +875,7 @@ clear the @qq{send email} box to prevent sending notification for
 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
@@ -919,13 +919,13 @@ Colin
 @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
index c155a8b923ad946a6beec6aaa2772eb26353935c..8b600465f5ffbfda13c6b774b862846fab55d258 100644 (file)
@@ -135,6 +135,11 @@ something is suspicious!
 @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
 
index 4a3466e2e5fb986fb9c6a969e3ea731bd7699ae0..63053e2b3c0d9f070f69003140476137d91a6504 100644 (file)
@@ -8,7 +8,7 @@
     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
@@ -449,7 +449,7 @@ longues doivent s'aligner sur les subdivisions de la mesure, comme ici :
 
 @c KEEP LY
 @lilypond[verbatim,quote]
-\relative {
+\relative c' {
   r8^"oui" c8 ~ c2 r4 |
   r8^"non" c2 ~ c8 r4
 }
index a8a42fff974da99a0d6590fbdd2dbb5398fdff60..0f02c9a92200136003834bd0e996791261aabab6 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.17.6"
+@c \version "2.17.15"
 
 
 @c Translators: Yoshiki Sawada
@@ -2231,7 +2231,7 @@ portuguese = \lyricmode {
   à vo -- cê uma can -- ção legal
 }
 
-\relative  {
+\relative c'  {
   c2 d e f g f e
 }
 \addlyrics { \bulgarian }
index 0f3c9a7f70e7d4ea254b7cb3907aab785ca12c6d..9642b02ecce72057c5f9d214aa194e98cbac8e1f 100644 (file)
@@ -220,7 +220,7 @@ specific for this particular type of ligature.  By default, the
 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 \]
@@ -375,13 +375,13 @@ entering the chant, as the following excerpt demonstrates:
 @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
       }
     }
@@ -887,8 +887,8 @@ defined as a convenient shorthand:
 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
@@ -952,7 +952,7 @@ For example,
 @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
@@ -963,8 +963,8 @@ For example,
        \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 {
@@ -981,7 +981,7 @@ Without replacing @code{Ligature_bracket_engraver} with
 to the following
 
 @lilypond[quote,ragged-right]
-\transpose c c' {
+\relative c' {
   \set Score.timing = ##f
   \set Score.defaultBarType = "-"
   \override NoteHead.style = #'petrucci
@@ -992,8 +992,8 @@ to the following
      \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
 
@@ -1640,7 +1640,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum
     \[ b \]
   }
@@ -1654,7 +1654,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum
     \[ \cavum b \]
   }
@@ -1668,7 +1668,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum
     \[ \linea b \]
   }
@@ -1683,7 +1683,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum Auctum Ascendens
     \[ \auctum \ascendens b \]
   }
@@ -1698,7 +1698,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum Auctum Descendens
     \[ \auctum \descendens b \]
   }
@@ -1713,7 +1713,7 @@ code}
 @lilypond[staffsize=26,line-width=1.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum Inclinatum
     \[ \inclinatum b \]
   }
@@ -1728,7 +1728,7 @@ code}
 @lilypond[staffsize=26,line-width=2.5\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum Inclinatum Auctum
     \[ \inclinatum \auctum b \]
   }
@@ -1743,7 +1743,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Punctum Inclinatum Parvum
     \[ \inclinatum \deminutum b \]
   }
@@ -1758,7 +1758,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Virga
     \[ \virga b \]
   }
@@ -1779,7 +1779,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Clivis vel Flexa
     \[ b \flexa g \]
   }
@@ -1795,7 +1795,7 @@ code}
 @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 \]
   }
@@ -1810,7 +1810,7 @@ code}
 @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 \]
   }
@@ -1825,7 +1825,7 @@ code}
 @lilypond[staffsize=26,line-width=2.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Cephalicus
     \[ b \flexa \deminutum g \]
   }
@@ -1840,7 +1840,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Podatus vel Pes
     \[ g \pes b \]
   }
@@ -1855,8 +1855,8 @@ code}
 @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 }}
@@ -1870,7 +1870,7 @@ code}
 @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 \]
   }
@@ -1885,8 +1885,8 @@ code}
 @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 }}
@@ -1900,7 +1900,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Pes Initio Debilis
     \[ \deminutum g \pes b \]
   }
@@ -1915,7 +1915,7 @@ code}
 @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 \]
   }
@@ -1937,7 +1937,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Torculus
     \[ a \pes b \flexa g \]
   }
@@ -1952,8 +1952,8 @@ code}
 @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 }}
@@ -1967,8 +1967,8 @@ code}
 @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 }}
@@ -1982,8 +1982,8 @@ code}
 @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 }}
@@ -1997,8 +1997,8 @@ code}
 @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 }}
@@ -2012,8 +2012,8 @@ code}
 @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 }}
@@ -2027,7 +2027,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Porrectus
     \[ a \flexa g \pes b \]
   }
@@ -2042,8 +2042,8 @@ code}
 @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 }}
@@ -2057,8 +2057,8 @@ code}
 @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 }}
@@ -2072,7 +2072,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Climacus
     \[ \virga b \inclinatum a \inclinatum g \]
   }
@@ -2087,8 +2087,8 @@ code}
 @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 }}
@@ -2102,8 +2102,8 @@ code}
 @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 }}
@@ -2117,7 +2117,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Scandicus
     \[ g \pes a \virga b \]
   }
@@ -2132,8 +2132,8 @@ code}
 @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 }}
@@ -2147,8 +2147,8 @@ code}
 @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 }}
@@ -2169,7 +2169,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Quilisma
     \[ g \pes \quilisma a \pes b \]
   }
@@ -2184,7 +2184,7 @@ code}
 @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 \]
   }
@@ -2199,7 +2199,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Oriscus
     \[ \oriscus b \]
   }
@@ -2214,7 +2214,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Pes Quassus
     \[ \oriscus g \pes \virga b \]
   }
@@ -2229,7 +2229,7 @@ code}
 @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 \]
   }
@@ -2244,7 +2244,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Salicus
     \[ g \oriscus a \pes \virga b \]
   }
@@ -2259,7 +2259,7 @@ code}
 @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 \]
   }
@@ -2274,7 +2274,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Stropha
     \[ \stropha b \]
   }
@@ -2289,7 +2289,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Stropha Aucta
     \[ \stropha \auctum b \]
   }
@@ -2304,7 +2304,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Bistropha
     \[ \stropha b \stropha b \]
   }
@@ -2319,7 +2319,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Tristropha
     \[ \stropha b \stropha b \stropha b \]
   }
@@ -2334,7 +2334,7 @@ code}
 @lilypond[staffsize=26,line-width=1.0\cm]
 \include "gregorian.ly"
 \score {
-  \transpose c c' {
+  \relative c' {
     % Trigonus
     \[ \stropha b \stropha b \stropha a \]
   }
@@ -2434,10 +2434,10 @@ values, so you can immediately go ahead entering the chant:
 @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" {
       Го -- спо -- ди по -- ми -- луй.
@@ -2604,9 +2604,9 @@ The following example demonstrates the use of Kievan ligatures:
 @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" {
       Га -- врі -- и -- лу
index 113ee328b7e27a225e0b6e6f1122a642dd030fdd..8cefbedea781a681efa4c942aa797b365266972c 100644 (file)
@@ -30,7 +30,6 @@ correspondence between harmonic functions and note head styles.
   doctitle = "Applying note head styles depending on the step of the scale"
 } % begin verbatim
 
-
 fragment = {
   \key c \major
   c2 d
@@ -42,7 +41,7 @@ fragment = {
 \new Staff {
   \transpose c d
   \relative c' {
-    \set shapeNoteStyles = #'#(do re mi fa
+    \set shapeNoteStyles = ##(do re mi fa
                                #f la ti)
     \fragment
   }
@@ -50,7 +49,7 @@ fragment = {
   \break
 
   \relative c' {
-    \set shapeNoteStyles = #'#(cross triangle fa #f
+    \set shapeNoteStyles = ##(cross triangle fa #f
                                mensural xcircle diamond)
     \fragment
   }
diff --git a/Documentation/snippets/centered-measure-numbers.ly b/Documentation/snippets/centered-measure-numbers.ly
new file mode 100644 (file)
index 0000000..490fde1
--- /dev/null
@@ -0,0 +1,56 @@
+% 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
+  }
+>>
index 10ce65167de539119b9dd3a07066ae9c0a797029..87e008eeef3fce6e19238147a244e36e65df13f0 100644 (file)
@@ -1,6 +1,7 @@
 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
@@ -12,6 +13,7 @@ displaying-a-whole-grandstaff-system-if-only-one-of-its-staves-is-alive.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
index 85f596d7edf3bc3312868ecd549c718055b17917..4991989e6a7c5bbdde6cbe0f7bb2dbc8a839a634 100644 (file)
@@ -4,7 +4,7 @@
 %% 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"
@@ -28,6 +28,11 @@ fifty =
 #(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)))
index d3de13e21d24cfc7f2fbed28454949c485511f5a..bb20ae2d0e8ac5c147007f9d3392524d7b991303 100644 (file)
@@ -4,7 +4,7 @@
 %% 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"
@@ -36,7 +36,7 @@ the second violin is also displayed.
       \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"
@@ -54,7 +54,7 @@ the second violin is also displayed.
           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"
index 6f500e1abc3cb75c34b86e91516b0fc10589df07..b2cb2d8ff9dacc90ac10820261cd38985c893949 100644 (file)
@@ -25,6 +25,7 @@ how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
 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
diff --git a/Documentation/snippets/new/centered-measure-numbers.ly b/Documentation/snippets/new/centered-measure-numbers.ly
new file mode 100644 (file)
index 0000000..6fa6ee9
--- /dev/null
@@ -0,0 +1,48 @@
+\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
+  }
+>>
diff --git a/Documentation/snippets/new/numbering-groups-of-measures.ly b/Documentation/snippets/new/numbering-groups-of-measures.ly
new file mode 100644 (file)
index 0000000..2722b3d
--- /dev/null
@@ -0,0 +1,53 @@
+\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
+}
diff --git a/Documentation/snippets/numbering-groups-of-measures.ly b/Documentation/snippets/numbering-groups-of-measures.ly
new file mode 100644 (file)
index 0000000..7c082be
--- /dev/null
@@ -0,0 +1,61 @@
+% 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
+}
index 303b979a8a6a9abf12e7a5a7b1fdd75d5ee34152..e99215262aa0187781b6c640b75fd5faa22a7f01 100644 (file)
@@ -6,3 +6,4 @@ creating-blank-staves.ly
 demonstrating-all-headers.ly
 setting-system-separators.ly
 table-of-contents.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
index 89be0cb1d501becd0baee28de45d0ed244ec26d5..45d746657fe2747c411f634bf4c681552e49586d 100644 (file)
@@ -18,14 +18,13 @@ tuplet marking.  This can be overcome by setting @code{TupletBracket
   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
@@ -43,7 +42,7 @@ tuplet marking.  This can be overcome by setting @code{TupletBracket
   \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
index c9b276e8ff251c94da8b644a26cbf942fa9fc9bd..3b55be22a85c818a8d458590c6bf421500ffbb2c 100644 (file)
@@ -1,8 +1,10 @@
 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
index 7670ff4ddb35574a4099ea33ff8a3a3ee89f634c..1b060474b25f630bf16e4cbd417ab0d7c9584b04 100644 (file)
@@ -29,7 +29,7 @@ or the end.
 
 \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
index ab14ed7251f82612734624ba5149410e5d1b6493..0a2df88f19cde82cc0f3955837f284851c95f959 100644 (file)
@@ -5,6 +5,7 @@ adding-indicators-to-staves-which-get-split-after-a-break.ly
 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
@@ -25,6 +26,7 @@ measure-counter.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
@@ -37,5 +39,6 @@ time-signature-in-parentheses.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
index dd096fe981b1cdf7303c9bdbfa8a824e5f4d198f..dd0005c4326e9cf87e617234d6050c120c3212f0 100644 (file)
@@ -17,7 +17,6 @@ Stand-alone text may be arranged in several columns using
   doctitle = "Stand-alone two-column markup"
 } % begin verbatim
 
-
 \markup {
   \fill-line {
     \hspace #1
@@ -30,13 +29,13 @@ Stand-alone text may be arranged in several columns using
       \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
   }
index 7e72565d66807b43c8eda48db58818d24b762cde..f0e653afb06d025c075792653374de1e4e91de80 100644 (file)
@@ -1,2 +1,3 @@
 combining-two-parts-on-the-same-staff.ly
 entering-several-tuplets-using-only-one--times-command.ly
+vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
index 9d1e274ff5ef6ffdf99faa68a95b3c57bfcda25c..2b647d08547461da83c800de38b9523222c3ee7f 100644 (file)
@@ -43,10 +43,10 @@ In this manner, the most natural enharmonic notes are chosen.
          ;; 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
index de2d700e78273bf5fce82bf765aeec9ca9dad0e6..0b71a75ab59aca7e6970966cea9363ed7c6422b7 100644 (file)
@@ -4,7 +4,7 @@
 %% 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"
@@ -216,7 +216,7 @@ ViolinSolo = \relative c' {
 \score {
 
   <<
-    \relative <<
+    \relative c' <<
       \new Staff \ViolinSolo
     >>
 
diff --git a/Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly b/Documentation/snippets/vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
new file mode 100644 (file)
index 0000000..af5047f
--- /dev/null
@@ -0,0 +1,352 @@
+%% 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
+                }
+        }
+}
index 71a59920ccfeffe4ed5fb492f2562323df135042..db8661d8432ebbf95cb04a64c867275b064a9d38 100644 (file)
@@ -19,6 +19,17 @@ defined in LilyPond.
 
 \relative c' {
   \textLengthOn
+  c1^
+  \markup {
+    \center-column {
+      'tin-whistle
+      " "
+       \woodwind-diagram
+                  #'tin-whistle
+                  #'()
+    }
+  }
+
   c1^
   \markup {
     \center-column {
index 5bae43cb1ee1e1fae79f068be7aae238da585a58..76d6823b9ec7b77feb64e99c143febd088f5bc13 100644 (file)
@@ -541,11 +541,6 @@ string.
 @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
index d3509436f3b899edf5bbad1e8ea6077e7af9a814..478139fd299c20a28224248c86373377aa1f2334 100644 (file)
@@ -9,10 +9,11 @@
 @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.
index 25daa24996eb8e33c4269fe21ea5d9bab9471152..55db01073408851b81a525ec4846c3554ed76b62 100644 (file)
@@ -26,6 +26,17 @@ NOTE:
   * 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}
 
diff --git a/VERSION b/VERSION
index 51304f6f793ecea08804d5473844a34b4b7c783b..429d5b6fada5dc139d44ec6e347ecef40bd756b2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 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
index 4d5710ba9e9ce69ad7282562fec3908600e18563..a9d3a662597bd25949b39862999b6d8416b56a26 100644 (file)
@@ -304,9 +304,6 @@ AC_DEFUN(STEPMAKE_GXXCODEGENBUG, [
 
 
 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}
@@ -314,7 +311,7 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     
     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!"`
     
@@ -327,11 +324,14 @@ AC_DEFUN(STEPMAKE_DATADIR, [
 
 ## 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!"`
@@ -1083,8 +1083,18 @@ void *p = v.data ();
 
 
 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, [
index 2ae2f6cbb938c2a245e9a66b1dbdb9a828f1b1e6..25028518353e5ccef0bc379c5da0318c3519c44f 100644 (file)
@@ -121,7 +121,7 @@ STEPMAKE_LOCALE
 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
index bab58f29ed13ed44a2c15d59f6e8d60d4b943995..d9dcc7be472ae295dd4f9d843e8e506d4a9319e9 100644 (file)
@@ -435,8 +435,6 @@ in LilyPond-include-path."
   `(
     ("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"))
 
@@ -569,11 +567,6 @@ Must be the car of an entry in `LilyPond-command-alist'."
   (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)
@@ -757,7 +750,6 @@ command."
   (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)
index aab51034c8f16830b9f41a94f883dbece89f2e05..063c8065b14f5b4f4db22e0dcd14835b52fa89f1 100644 (file)
@@ -2,9 +2,9 @@
   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'>>
index a09f5bf7d600bcfda5c8c30d081f4b8c35170d25..c1c64c80cb1dddcf777f75314c9bbb1b82ddeca8 100644 (file)
@@ -6,14 +6,14 @@ accidental."
 
 }
 
-\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 }
index 88e1ec24816358e776de8814bbdb3e2f787ddb0b..5a6be94daff256e559067690e8153f6fee75f356 100644 (file)
@@ -3,13 +3,13 @@
 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 <<
index 7b5ce64ae2b8f96c729a01b03ca0272217a5eebb..cceab759f119ee2f6a0c62bfb9a6899f142cb14b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.5"
+\version "2.17.15"
 
 \header { texidoc = "New bar line glyphs can be defined in Scheme."
         }
@@ -16,7 +16,7 @@
 \defineBarLine "0" #'("0" "" "")
 
 
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
   \new Staff {
     c4 c \bar "0" c c \bar "0" \break
     c1
index 97ff74f981cee9c42a9d4719d0dc348279ec00e2..b181aa3890409efa149749410f39a7578bf29fb3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.5"
+\version "2.17.15"
 
 \header { texidoc = "New bar line styles can be defined by @code{\\defineBarLine}."
         }
@@ -8,7 +8,7 @@
 \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
index 7b17c0f58b7c418e645c93eb007f0f5160e714c1..3bbf05e07528a3295c0e5d2689e2e645cb0a2a79 100644 (file)
@@ -1,4 +1,4 @@
-\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."
@@ -6,7 +6,7 @@
 
 \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
index 1ae85f4e262528cbc344392a965f73e0e8369631..3beb61a9046ecc808635ac282226978c06c18071 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.5"
+\version "2.17.15"
 
 \header { texidoc = "Various types of bar lines can be drawn.
 
@@ -15,7 +15,7 @@ space, centered on the top-most barline.
 
 " }
 
-\relative \new StaffGroup <<
+\relative c' \new StaffGroup <<
   \new Staff = "1" {
     c2 \bar "!" c
     s1
index e7951e15abefcab87ac27d0421e0a15cc2e57542..507b5a5560fe95b880ce6c334f1dc297146d5781 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,7 +8,7 @@
   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
@@ -67,7 +67,7 @@
   \break
    <<
      \new Voice {
-       \repeat unfold 8 \relative {
+       \repeat unfold 8 \relative c' {
         \voiceOne
 
         %% We must use a wider interval, otherwise the beam will be
@@ -77,7 +77,7 @@
         c'']
        }
      }
-     \new Voice \relative {
+     \new Voice \relative c' {
        \voiceFour
        \autoBeamOff
        \stemUp f' \stemDown f,
index 3e852029b96d9158405585f109ce5f64a94f3376..8f499e3683c60033311d08750fe3333fbfdfebed 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc = "Manual beams do not collide with notes."
 }
@@ -8,7 +8,7 @@
   indent = #0.0
 }
 
-\relative \new Staff {
+\relative c' \new Staff {
 
   <<
     \new Voice {
index 15cdea9bd39ea8fbf334a66d4ba136cafbeac80e..b601528b95ecd10c891611c91442ec6ac41290f2 100644 (file)
@@ -8,9 +8,9 @@
 %  debug-beam-scoring = ##t
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative {
+\relative c' {
   \time 2/4
   c8[ \clef "bass" e,, ]
   r8
index b16b02989841719c3b7a308a05b853b172a6a331..87babb69348ad837a6202acc1d7f9ac1e70c9cb3 100644 (file)
@@ -7,9 +7,9 @@
 
 \layout  { ragged-right = ##t }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative <<
+\relative c' <<
     \new Staff {
        <<
            { f g } \\
index 691cc96243918288720584c577cdf0ac4c1cc989..01694b905423d9c55ccd274b4eca938bfabd5277 100644 (file)
@@ -6,13 +6,13 @@ true."
 
 }
 
-\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
   
index e05535bd3cc89d923da17bba5387a5175b4f2b96..5dc20fa35e4f138f4d67ab375357c6d33b4a5658 100644 (file)
@@ -5,10 +5,10 @@
 
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
 <<
-  \relative \new Voice {
+  \relative c' \new Voice {
     c8 c c c c c
   }
   \figures {
index 916d8e8621047d1167466c94e6f28440cd3cc01a..cb3cf4999a7eb87b340a096ec9b6f3c358449d48 100644 (file)
@@ -5,13 +5,13 @@ figures. They are switched on with @code{useBassFigureExtenders}"
 
 }
 
-\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  
   
index 17456f0fb66844a4c4e885b13e7ff636a5ad1df7..f167a9794e10705ad2d4f07d62d7469299873694 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header
 {
@@ -6,6 +6,6 @@
   when the grace note is tied to the next note.
 "
 }
-\relative {
+\relative c' {
   \slashedGrace c16~ c1
 }
index 7a99c9d474b5176a69753dab9336df18e23d277a..80df393fceaf5eaf1e89ae2fb09f1817cbb37a6a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 #(ly:set-option 'warning-as-error #f)
 #(ly:expect-warning (_ "No such instrument: ~a") "bassClar")
 
@@ -7,7 +7,7 @@
 the given instrument definition does not exist."
 }
 
-\relative
+\relative c'
 {
   c4
   \instrumentSwitch "bassClar"
index 2e0198591f8e0c89611e24e9b8af2e0f6a6e3f2c..fc6542c8c27e68d8fd5e7d01c16b70f7e5708e54 100644 (file)
@@ -5,7 +5,7 @@
 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") 
@@ -21,7 +21,7 @@ properties for an in staff instrument switch. "
   ragged-right = ##t
 }
 
-\relative
+\relative c'
 {
   c4
   \instrumentSwitch "bassClar"
index 207f93209509e97cb8f90ef2bb8114bd5ad33060..46079b264fb1bab9d783fe57304ff47a4c7829f8 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.17.15"
 \header{
 texidoc="
 Key signatures may appear on key changes, even without a barline.  
@@ -15,7 +15,7 @@ are created also on a clef change.
     ragged-right = ##T
 }
 
-\relative
+\relative c'
 {
     \set Staff.createKeyOnClefChange = ##t  
     \key bes \major c2
index 0aa17361b403555b2efaedd3a6f943079f6c7a8a..3302f88cdf15a3ee1d81e825ecb4cf8bbff9efdb 100644 (file)
@@ -5,14 +5,14 @@ starts and ends on a full dash. "
 
 }
 
-\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\!
index 0cc2b7308eaa7f23f5d811dda657b4c5e60f8015..d084e8f2bd3615aa76a5c632496055f0646c516a 100644 (file)
@@ -2,10 +2,10 @@
 {
 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" {
index 28f99fd58e826e12666f9b6acb535a88d30d68cc..ccf444b6821cb519507e369938ce8133ff2d7af9 100644 (file)
@@ -5,10 +5,10 @@ if the switch occurs together with context instantiation."
 
 }
 
-\version "2.17.11"
+\version "2.17.15"
 
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
index 628cee139d94cf4fddccdde56881b6a0793d76c9..30028a284a4add0dee328bb894bc8c5acc7d8385 100644 (file)
@@ -6,11 +6,11 @@ end span events at the end of a note."
   
 }
 
-\version "2.17.6"
+\version "2.17.15"
 \paper{
   ragged-right = ##T
 }
-\relative
+\relative c'
 << {   c'4 c c c }
    \\
    {
index 0c4e28f113a75b5dd7a47f3d6d202437915f9103..7d18f1af1998e82fb062e55f35c621a3b2ba605c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 % possible rename to staff-something.  -gp
 
 \header{ texidoc = "@cindex Staff Remove
@@ -11,7 +11,7 @@ corresponding engraver.
     ragged-right = ##t
 }
 
-\relative \new Staff \with {
+\relative c' \new Staff \with {
        \remove "Staff_symbol_engraver"
        \consists "Pitch_squash_engraver"
        \remove "Clef_engraver"
index 1fbce42da962db0ce46da318f5eb6099aa7ffe28..83ebf7886a6201b9e3463c94ec7a1a8ce8576ada 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header{
   texidoc= "Test optional music function arguments.
@@ -29,5 +29,5 @@ zap =
    (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 }
index 8fd1ea0e5226cd6072e19602fef4c550f3d24ce1..baa5fc134f7880e8bf1b979af0b29aa894bad8db 100644 (file)
@@ -1,4 +1,4 @@
-\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. "
@@ -8,7 +8,7 @@
   ragged-right =##t
 }
 
-\relative <<
+\relative c' <<
   \new Staff { \repeat percent 3 c1} 
   \new Staff { c1 c \grace b8 c1  }
 >>
index d2be3073b3bccd2859697e6dabb7a080d890ea08..9980affc9d224f793a13669bcb661c20715fd4b3 100644 (file)
@@ -6,11 +6,11 @@ collisions can be combined."
 
 }
 
-\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>] }
index ad6e9565f9088032e3fd79bfcad2186a0d4e9ee8..d307d9cf7bd421d8a7e8712276ac1c14f0ab349a 100644 (file)
@@ -8,13 +8,13 @@ The scripts should not be folded under the time signature.
 "
   
 }
-\version "2.16.0"
+\version "2.17.15"
 
 \paper {
   ragged-right = ##t
 }
 
-\relative 
+\relative c' 
 {
   \set stringNumberOrientations = #'(left) 
   \set fingeringOrientations = #'(left) 
index 975c083a6c234dcd38b964d031b1e203416d8cc4..ad65384e707b321fd8b82def4ad5cfd39db3debf 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 
 \header {
 
@@ -6,7 +6,7 @@
 and then return to the previous value."
 
 }
-\relative {
+\relative c' {
   \set fingeringOrientations = #'(left)
   <e-1>1 |
   \once \set fingeringOrientations = #'(right)
index c65c57075bde265d6824cc02f884c707782f5c8f..57e6d1a8305b515007b17cc8a10570ae774a5878 100644 (file)
@@ -7,9 +7,9 @@ last as long as their arguments."
   ragged-right = ##T
 }
 
-\version "2.16.0"
+\version "2.17.15"
 
-\relative
+\relative c'
 <<
   \new Staff {
     c\breve    f4 r2.
diff --git a/input/regression/skyline-point-extent.ly b/input/regression/skyline-point-extent.ly
new file mode 100644 (file)
index 0000000..ceb27b2
--- /dev/null
@@ -0,0 +1,22 @@
+\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->
+}
index 38a9c3288d9215f15c176c5b1a8d27c5dad279a7..a3739a48b3fa2d7f6df72a540198c1a9798637cc 100644 (file)
@@ -4,12 +4,12 @@
   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,)
 
index 84be933af81f532b88f8f4ed65a2faacb85d75f6..8ba9e19b803ed223ae7148e817449fe8b0fbe915 100644 (file)
@@ -6,12 +6,12 @@
     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
index 472c008dbdf8d5f54399a8d275c4fb4113f41531..1c9083597b6f6e0f446566a6f3942bfc15837cec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,7 +8,7 @@ reordered lyrics.
 
 \festival #"song-reordering.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
index 5c5fec17ff8cc4ff05057b19b08d4c03521b4132..57595c22ad452ef88666b9e22d43fab6722b9425 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.11"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 reordered lyrics.
@@ -8,7 +8,7 @@ reordered lyrics.
 
 \festival #"song-reordering2.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
index 8dd068162e19f0e7d4377025312c7fab7f9d8805..25aba696f52b7dc2887cdcbe827718d5900391da 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.16.0"
+\version "2.17.15"
 \header {
   texidoc="Festival song synthesis output supports
 slurs.
@@ -8,7 +8,7 @@ slurs.
 
 \festival #"song-slurs.xml" { \tempo 4 = 100 }
 <<
-  \relative \context Voice = "lahlah" {
+  \relative c' \context Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     \slurDotted
index 51d566bde6757e782b05dd08fa165ee2c6ef7b1b..d79dcd3b0f6651fff9cb360a9a7462aa1ae5cc7d 100644 (file)
@@ -1,14 +1,14 @@
 \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
index d637b667f473d1356556ff730871dd64e42e535f..41a4a72a2a73bf9a28c8087e59714f1e8402e087 100644 (file)
@@ -2,14 +2,14 @@
   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 }
index 295d882e9321d745da6a050759af294439a14049..54b7c62daf8a4804bedfafb9fba5fc3bdeeeced7 100644 (file)
@@ -4,13 +4,13 @@
   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
 }
index 1b9dd8411eb2001da1c1d2ecf7109cf3ce586c17..5b62f19c22c9324d0e32e424dd18386d2c671500 100644 (file)
@@ -5,10 +5,10 @@
 
   
   }
-\version "2.16.0"
+\version "2.17.15"
 
 \paper { ragged-right =  ##t }
-\relative
+\relative c'
 {
   <f d a>1~
   <f d a>1~
index ae0ff5a4a267c48a8e8b0dc618ac4088884d0085..7e57cdc4312855dfdd43f7c10aced84b0c868e57 100644 (file)
@@ -2,11 +2,11 @@
     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 }
index 86734d7ee62fb4bce8cd54a54ab6c6832899c3ed..936060bfc60bf7c4e673c9e699fa150abb2ab5c5 100644 (file)
@@ -162,6 +162,18 @@ Dynamic_performer::process_music ()
       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_);
 
index ae131d3f5d31dfa79272dbd3731ba26e948021d0..83526816de55cffbb3081d651980b3b5bb0714d2 100644 (file)
@@ -22,8 +22,6 @@
 #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);
index c1d3dd86a5a613ae8f78babdcc70152fb71b4ddb..0df70e20082f50bb4a6f131b00d6f55382f9b6af 100644 (file)
@@ -925,6 +925,11 @@ Lily_lexer::scan_escaped_word (string str)
                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);
 
@@ -1084,19 +1089,26 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token)
                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;
                                }
                        }
@@ -1105,6 +1117,12 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token)
                        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;
 }
 
index 3412e73b5642761765b09b971c5e585f14027229..dc2d9a6aa24640bb933942cd13050b25467af5a5 100644 (file)
@@ -182,8 +182,6 @@ LY_DEFINE (ly_make_music_relative_x, "ly:make-music-relative!",
   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 ();
 }
index 7ab62470b567bc5fad37a004329749d7fa7d00a2..b40597df246bb4bd296e5f0a33b205ba057abcc2 100644 (file)
@@ -177,25 +177,8 @@ Music_sequence::simultaneous_relative_callback (SCM music, SCM pitch)
 {
   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);
index 478d05377540e10033d55fb569792645d35e3612..ee413b301feb33f4d16d4a372c4a4c4c0ccfd8bc 100644 (file)
@@ -596,7 +596,28 @@ identifier_init:
        | 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
@@ -2490,8 +2511,22 @@ post_events:
                $$ = 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, $$);
+                       }
+               }
        }
        ;
 
@@ -2501,7 +2536,10 @@ post_event_nofinger:
        }
        | 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);
                }
@@ -3438,10 +3476,6 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
        } 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;
index 616e99397a4d2c8c70b7cd5235bf08a9350fcf35..302b48e3f48b9ec5f6dda3450c39a111f66a30c8 100644 (file)
@@ -37,11 +37,6 @@ bool debug_page_breaking_scoring;
 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.
@@ -85,13 +80,6 @@ internal_set_option (SCM var,
       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;
index 94f566357c5cf5eeb9831ade241834b77e76514d..2f31e20a223c3a2d854557df7dd6f1289aa99dd8 100644 (file)
@@ -38,23 +38,9 @@ Relative_octave_music::no_relative_callback (SCM /* music */,
 
 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;
 }
 
index 13e12df2a48af8f8bcc61540b64658a7649c0a2e..78ffd6b8800c33f316c70225a58f741ba32e107a 100644 (file)
@@ -35,33 +35,6 @@ Repeated_music::alternatives (Music *me)
   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)
 {
index 095b8b49c344db5566303b987dd890eea42136a4..4d8efe1ced4d0687fe0aa61ddf46fc0d190b8b14 100644 (file)
@@ -324,13 +324,6 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i
       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.
index bf95fe35418153ce65237a415a29c4d4553ecde0..3f52d82e9040fd65b104bd98593c034265fbd19d 100644 (file)
    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)
@@ -301,8 +316,7 @@ Skyline::internal_merge_skyline (list<Building> *s1, list<Building> *s2,
           break;
         }
 
-      /* only include buildings wider than epsilon */
-      if (end > x + EPS)
+      if (end >= x)
         {
           b.leading_part (end);
           b.start_ = last_end;
@@ -329,20 +343,15 @@ empty_skyline (list<Building> *const ret)
 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
@@ -377,7 +386,7 @@ non_overlapping_skyline (list<Building> *const buildings)
           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);
@@ -476,20 +485,16 @@ Skyline::Skyline (Direction sky)
 /*
   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 ();
@@ -498,7 +503,8 @@ Skyline::Skyline (vector<Box> const &boxes, Axis horizon_axis, Direction sky)
 /*
   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)
 {
@@ -518,7 +524,7 @@ Skyline::Skyline (vector<Drul_array<Offset> > const &segments, Axis horizon_axis
       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));
     }
 
@@ -594,8 +600,7 @@ Skyline::insert (Box const &b, Axis a)
     }
 
   /* 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_);
@@ -654,6 +659,12 @@ Skyline::internal_distance (Skyline const &other, Real horizon_padding, Real *to
 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)
     {
index 58b2ff46ca55277930db2657c1d920a67485de77..0f1f14ff50485e09ff3933cc6db261ec6a7ab17e 100644 (file)
@@ -981,16 +981,6 @@ Grob::maybe_pure_internal_simple_skylines_from_extents (Grob *me, Axis a, bool p
                  ? 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 ();
 
@@ -1005,6 +995,8 @@ Grob::pure_simple_vertical_skylines_from_extents (SCM smob, SCM begscm, SCM ends
   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);
 }
 
@@ -1023,6 +1015,9 @@ Grob::pure_simple_horizontal_skylines_from_extents (SCM smob, SCM begscm, SCM en
   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")));
 }
 
@@ -1031,6 +1026,7 @@ SCM
 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")));
 }
 
index 05e9c4bcc8ea0d1f1f8db9dee1796f2789f297ba..9b2f871769356ea1de2f47900d8a5a6fb5ffb037 100644 (file)
@@ -137,7 +137,7 @@ void init_unpure_pure_container ()
   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);
index 985c680e35d1be37de0b703d0f68a2667a6d08f2..6992c87ebdc94b8a7a09860153d7494655b8354a 100644 (file)
            (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)
index c2bdb96b70bfec25937f8cef51191c887028ac96..f37103c9a96b4e506bae9587185ba025dd64ee8e 100644 (file)
@@ -18,9 +18,6 @@
 
 \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)
index 8e8a2fc2123436dd8ee428e859b3ff7bfecdaea6..3be64edb7f9811c839626576da7f50485d81a2c5 100644 (file)
@@ -19,7 +19,6 @@
 
 #(note-names-language parser default-language)
 
-#(ly:set-option 'old-relative #f)
 #(define location #f)
 #(define toplevel-scores (list))
 #(define toplevel-bookparts (list))
@@ -48,11 +47,6 @@ $(if (ly:get-option 'include-settings)
 %% 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))
index 379eb933ba192169821a9177991c19e52816ee96..ad9f7bdda27dfa7f9e7d5df1b5ca50742eaa6289 100644 (file)
@@ -178,14 +178,16 @@ balloonGrobText =
    (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)
@@ -1022,8 +1024,8 @@ usually contains spacers or multi-measure rests.")
 
 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))
index ae9a60f43727a2970594b7d4d8a480defd11cd7a..5d65cccba4a81b48c8b603ca9c1dfb1b15de459c 100644 (file)
@@ -6,10 +6,10 @@
 #, 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"
@@ -1694,12 +1694,12 @@ msgstr ""
 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 ""
 
@@ -1708,23 +1708,23 @@ 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 ""
 
@@ -1797,17 +1797,17 @@ 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 ""
@@ -1985,7 +1985,7 @@ msgstr ""
 msgid "%d: %s"
 msgstr ""
 
-#: grob.cc:478
+#: grob.cc:488
 #, c-format
 msgid "ignored infinite %s-offset"
 msgstr ""
@@ -2074,20 +2074,20 @@ 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 ""
@@ -2466,7 +2466,7 @@ msgid ""
 "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 ""
@@ -2721,7 +2721,7 @@ 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 ""
@@ -2739,25 +2739,6 @@ 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"
@@ -2866,11 +2847,11 @@ msgstr ""
 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 ""
 
@@ -2922,21 +2903,29 @@ 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 ""
@@ -3370,31 +3359,31 @@ 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 ""
@@ -3584,37 +3573,37 @@ 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 ""
index a1c8d507a648a7d31df0e0e150a0badb7449ace2..b0a46ebac8de9e357cfbc9271f9c45cc3c6b346d 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 # (setq py-indent-offset 4)
 
 
@@ -3520,6 +3521,32 @@ def conv(str):
                   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,
index ce3288b205e18345c1b8ac4b81dbfbb6570e1714..8ac123e11e9f9d7bedfef87a7c3e2ed835e7c260 100644 (file)
@@ -814,76 +814,80 @@ no elements."
   "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
index effaf131faa22f1dce75d52d8738b4c4eeb71ae7..19a767fba5cd980145fa33cd578053e3c606873b 100644 (file)
        (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)
index e7d121b411c210be1685e4b5e8362429ed7217e1..1090d332b49aec21b01fcf852f1f19fc158f7889 100644 (file)
@@ -39,7 +39,7 @@ Syntax: @var{note}@code{\\x}, where @code{\\x} is a dynamic mark like
 
     (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
@@ -72,10 +72,10 @@ Syntax: @w{@var{note}@code{-\\arpeggio}}")
     (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))
        ))
@@ -437,6 +437,12 @@ Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
        (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.
 
index c6b8dd2a9ea3378e2794aa6931a9a2efd82ba38e..d87bca208ac8e370679f35d622c5bef5d8d906ca 100644 (file)
@@ -57,6 +57,8 @@
 (define-safe-public DOUBLE-SHARP 1)
 (define-safe-public SEMI-TONE 1/2)
 
+(define-safe-public INFINITY-INT 1000000)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; moments
 
@@ -999,8 +1001,3 @@ print a warning and set an optional @var{default}."
     (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")))
index 1c9353ff59a0750b9267424e39fc5be872ad419a..c1f8f1fe3453362e9af71b0f6f47c83788a5dfa2 100644 (file)
@@ -209,9 +209,6 @@ file to given string.")
     (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"
index 09f526b8af631dab96ac49bfff5ba4fcaf722278..f52203468eb42ec82d42512621bd7845d7f576bc 100644 (file)
     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
@@ -505,13 +498,13 @@ and duration-log @var{log}."
       (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
@@ -526,13 +519,13 @@ and duration-log @var{log}."
   (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)
@@ -915,8 +908,7 @@ and duration-log @var{log}."
                            (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)
index fd600c9031c1f60d4bb01100ecf72ab5d3d1f7dd..4cd029b75e257b8e06fcf097e7b73ee8be15979f 100644 (file)
@@ -328,10 +328,14 @@ unless explicitly overriden in the name."
       (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)
index 4be305bd0b89a4ab6e54c2380fc42f23d0873980..678ba7c2e2d8912bd5bbe5a7c9945525ba6b8a8a 100644 (file)
@@ -238,8 +238,22 @@ defined by @code{fill}."
 (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)
@@ -253,6 +267,16 @@ defined by @code{fill}."
 
   (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)
@@ -279,24 +303,45 @@ defined by @code{fill}."
   (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
@@ -319,6 +364,9 @@ defined by @code{fill}."
         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)
diff --git a/scripts/auxiliar/NoTagline.ly b/scripts/auxiliar/NoTagline.ly
new file mode 100644 (file)
index 0000000..8439273
--- /dev/null
@@ -0,0 +1,4 @@
+\paper {
+  #(set-paper-size "A4")
+}
+\header { tagline = ##f }
diff --git a/scripts/auxiliar/make-regtest-pngs.sh b/scripts/auxiliar/make-regtest-pngs.sh
new file mode 100755 (executable)
index 0000000..5942e27
--- /dev/null
@@ -0,0 +1,79 @@
+#!/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