]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'translation' into staging
authorFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 6 Aug 2012 15:31:58 +0000 (17:31 +0200)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 6 Aug 2012 15:31:58 +0000 (17:31 +0200)
92 files changed:
.mailmap
Documentation/changes.tely
Documentation/common-macros.itexi
Documentation/contributor/programming-work.itexi
Documentation/de/notation/fretted-strings.itely
Documentation/de/notation/rhythms.itely
Documentation/es/notation/fretted-strings.itely
Documentation/es/notation/rhythms.itely
Documentation/es/notation/staff.itely
Documentation/extending/programming-interface.itely
Documentation/extending/scheme-tutorial.itely
Documentation/fr/notation/fretted-strings.itely
Documentation/fr/notation/rhythms.itely
Documentation/fr/notation/staff.itely
Documentation/ja/notation/fretted-strings.itely
Documentation/ja/notation/rhythms.itely
Documentation/learning/fundamental.itely
Documentation/ly-examples/cary-layout.ily
Documentation/notation/changing-defaults.itely
Documentation/notation/editorial.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/input.itely
Documentation/notation/keyboards.itely
Documentation/notation/pitches.itely
Documentation/notation/rhythms.itely
Documentation/notation/staff.itely
Documentation/snippets/cross-staff-stems.ly
Documentation/snippets/new/cross-staff-stems.ly
Documentation/web/news-front.itexi
Documentation/web/news.itexi
GNUmakefile.in
VERSION
config.make.in
configure.in
flower/include/yaffut.hh
flower/test-file-path.cc
input/regression/display-lily-tests.ly
input/regression/header-book-multiple.ly [new file with mode: 0644]
input/regression/header-book-multiplescores.ly [new file with mode: 0644]
input/regression/header-bookpart-multiple.ly [new file with mode: 0644]
input/regression/header-score-multiple.ly [new file with mode: 0644]
input/regression/header-toplevel-multiple.ly [new file with mode: 0644]
input/regression/page-spacing-nonstaff-lines-skylines.ly [new file with mode: 0644]
input/regression/safe.ly
lily/auto-beam-engraver.cc
lily/axis-group-interface.cc
lily/bar-engraver.cc
lily/bar-line.cc
lily/clef-engraver.cc
lily/cue-clef-engraver.cc
lily/custos-engraver.cc
lily/duration-scheme.cc
lily/grob-scheme.cc
lily/hairpin.cc
lily/include/bar-line.hh
lily/include/page-layout-problem.hh
lily/include/span-bar.hh [deleted file]
lily/key-engraver.cc
lily/lexer.ll
lily/mark-engraver.cc
lily/midi-chunk.cc
lily/page-layout-problem.cc
lily/parser.yy
lily/span-bar-engraver.cc
lily/span-bar-stub-engraver.cc
lily/span-bar.cc [deleted file]
lily/staff-performer.cc
lily/staff-spacing.cc
lily/vertical-align-engraver.cc
lily/volta-engraver.cc
ly/music-functions-init.ly
ly/string-tunings-init.ly
ly/titling-init.ly
make/lilypond-vars.make
make/substitute.make
po/lilypond.pot
python/convertrules.py
scm/bar-line.scm [new file with mode: 0644]
scm/define-event-classes.scm
scm/define-grob-interfaces.scm
scm/define-music-display-methods.scm
scm/display-lily.scm
scm/lily-library.scm
scm/lily.scm
scm/music-functions.scm
scm/output-lib.scm
scm/paper.scm
scm/safe-lily.scm
scm/song.scm
scripts/build/lys-to-tely.py
tex/GNUmakefile
tex/lilypond.map.in [new file with mode: 0644]

index a8ae3180ee8e9461f7c339ce3e30abafa74cf437..78d92e31a2903b3d08f7571f28e43ffacea05a86 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -98,6 +98,7 @@ Han-Wen Nienhuys <uid67283> #?
 Heikki Junes <hjunes>
 Heikki Junes <hjunes@gmail.com>
 Heikki Junes <hjunes@hjunes-laptop.(none)>
+Heikki Tauriainen <g034737@welho.com>
 Hu Haipeng <hhpmusic@163.com>
 Ian Hulin <ian@hulin.org.uk>
 James E. Bailey <derhindemith@googlemail.com>
index 6545c1dd69c8de8ce1ce80753cfb22b054a1449b..83db4ea85980a7ba7bc1dc1b0d02b5ec5e8b3917 100644 (file)
@@ -60,6 +60,34 @@ which scares away people.
 * only show user-visible changes.
 
 @end ignore
+@item
+Support for cross-staff stems on chords, using @code{crossStaff}
+and the @code{Span_stem_engraver}.  This calculates the length of
+cross-staff stems automatically.
+@lilypondfile[quote]
+{cross-staff-stems.ly}
+
+@item
+The syntax of words (character sequences recognized without enclosing
+quotes) and commands (now always a backslash @samp{\} followed by a
+word) has been unified across all modes: it now consists of alphabetic
+characters, possibly enclosing isolated dashes @samp{-} and underlines
+@samp{_}.
+
+As one consequence, using unquoted text scripts like (literally!)
+@example
+@{ c-script c\f_script @}
+@end example
+will now tend to result in invalid music.  Omitting quote marks
+for arbitrary text rather than keywords has never been good practice or
+even documented, and it is unlikely to have seen significant use.
+
+Staying with established conventions (like not using dashes or
+underlines for command names intended to be used inside of music)
+remains advisable.  The reason for this change is more robust
+recognition of LilyPond's lexical units for LilyPond itself as well as
+external tools interpreting its syntax.
+
 @item
 Support for Kievan square notation:
 @lilypond[quote,relative=1,verbatim]
@@ -228,6 +256,11 @@ reduces the containing expression, greatly reducing the potential for
 premature evaluation.  There are also @q{splicing} operators @code{$@@}
 and @code{#@@} for interpreting the members of a list individually.
 
+@item
+To reduce the necessity for using @code{$}, Scheme expressions written
+with @code{#} are interpreted as music inside of music lists, and as
+markups or markup lists inside of markups.
+
 @item
 Support for jazz-like chords has been improved: Lydian and altered
 chords are recognised; separators between chord modifiers are now
index baff739e3cfce1bde7ccf04a13d4708ae16d9ce8..1fda210772dca9152ba331fb1457d3bc1bbafa61 100644 (file)
 @set txicodequoteundirected
 @set txicodequotebacktick
 
+@c Trick to use with proper font mappings the same NCSB fonts as
+@c LilyPond instead of those provided by TeX distribution
+@tex
+\ifpdf
+  \pdfmapfile{=lilypond.map}
+\fi
+@end tex
+
 
 @c   ***** Displaying text *****
 
index 205783513f87d0b0e5d5a61fcff6481b790fdf94..9644cf78682e6746a1b85d79a0dd9f2f51046d18 100644 (file)
@@ -979,7 +979,7 @@ for all errors and defines functions for displaying scheme objects
 (ps), grobs (pgrob), and parsed music expressions (pmusic).
 
 @example
-file lily/out/lilypond
+file ~/lilypond-git/build/out/bin/lilypond
 b programming_error
 b Grob::programming_error
 
@@ -1466,19 +1466,13 @@ introduced into the output.  This process is described in
 
 @subheading Typical developer's edit/compile/test cycle
 
-TODO: is @code{[-j@var{X} CPU_COUNT=@var{X}]} useful for
-@code{test-baseline}, @code{check}, @code{clean},
-@code{test-redo}?  Neil Puttock says it is useful for
-everything but @code{clean}, which is disk-limited.
-Need to check formally.
-
 @itemize
 @item
 Initial test:
 
 @example
 make [-j@var{X}]
-make test-baseline
+make [-j@var{X} CPU_COUNT=@var{X}] test-baseline
 make [-j@var{X} CPU_COUNT=@var{X}] check
 @end example
 
@@ -1488,10 +1482,10 @@ Edit/compile/test cycle:
 @example
 @emph{## edit source files, then...}
 
-make clean                    @emph{## only if needed (see below)}
-make [-j@var{X}]                    @emph{## only if needed (see below)}
-make test-redo                @emph{## redo files differing from baseline}
-make [-j@var{X} CPU_COUNT=@var{X}] check  @emph{## CPU_COUNT here?}
+make clean                       @emph{## only if needed (see below)}
+make [-j@var{X}]                       @emph{## only if needed (see below)}
+make [-j@var{X} CPU_COUNT=@var{X}] test-redo @emph{## redo files differing from baseline}
+make [-j@var{X} CPU_COUNT=@var{X}] check
 @end example
 
 @item
@@ -1510,10 +1504,6 @@ the object files.  If you only modify files which are interpreted,
 like those in the @file{scm/} and @file{ly/} directories, then
 @command{make} is not needed before @command{make test-redo}.
 
-TODO:  Fix the following paragraph.  You can do @command{rm mf/out/*}
-instead of make clean, and you can probably do
-@command{make -C  mf/ clean} as well, but I haven't checked it -- cds
-
 Also, if you modify any font definitions in the @file{mf/}
 directory then you must run @command{make clean} and
 @command{make} before running @command{make test-redo}.  This will
@@ -1525,6 +1515,12 @@ Running @command{make@tie{}check} will leave an HTML page
 important differences that your change introduced, whether in the
 layout, MIDI, performance or error reporting.
 
+You only need to use @command{make test-clean} to start from
+scratch, prior to running @command{make@tie{}test-baseline}. To
+check new modifications, all that is needed is to repeat
+@command{make@tie{}test-redo} and @command{make@tie{}test-check}
+(not forgetting @command{make} if needed).
+
 
 
 
index c8ff484d517c0c6bc3e46bd45172f7a8970f4ad3..12e8fbf04cd45d761354c6fa06d5a792b915341b 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes.
 @end ignore
 
-@c \version "2.15.42"
+@c \version "2.15.43"
 
 @c Translators: Till Paala
 
@@ -615,7 +615,7 @@ vordefinierte Bunddiagramme eingesetzt (siehe auch
 Das vorherige Beispiel könnte auch folgenderweise geschrieben werden:
 
 @lilypond[quote,verbatim]
-"custom-tuning" = \stringTuning <c' g' d'' a''>
+custom-tuning = \stringTuning <c' g' d'' a''>
 
 mynotes = {
   c'4 e' g' c'' |
index 9c5052619117528b8ac41ef8a38466ed099152c8..3c4a0b3b88bbe7ba4bbcb41db6c7e08c02c1c322 100644 (file)
@@ -2268,11 +2268,11 @@ Regel wird durch die Eigenschaft @code{beamWholeMeasure} bestimmt.
 
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% By default we beam in one
-\repeat unfold 6 { a8 }
-% We can avoid beaming in one
-\set Timing.beamWholeMeasure = ##f
-\repeat unfold 6 { a8 }
+% by default we beam in (6) due to beamExceptions
+\repeat unfold 6 {a8} |
+% This will beam (1 1 1) due to beatLength
+\set Timing.beamExceptions = #'()
+\repeat unfold 6 {a8}
 @end lilypond
 
 In einigen Notenstichen der romantischen und klassischen Periode kann auch
@@ -2282,10 +2282,8 @@ die Eigenschaft @code{beamHalfMeasure} bestimmt:
 
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% By default we avoid half-measure beams
 r4. a8 a a |
-% We can allow half-measure beams
-\set Timing.beamHalfMeasure = ##t
+\set Timing.beamHalfMeasure = ##f
 r4. a8 a a |
 @end lilypond
 
index 553c3ab0d149727ad6475561a01389d54b6217d0..eba749f5138c6dd08dc5095a71f50c2be209f9d6 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.42"
+@c \version "2.15.43"
 
 @node Instrumentos de cuerda con trastes
 @section Instrumentos de cuerda con trastes
@@ -618,7 +618,7 @@ El ejemplo anterior también se podría haber escrito
 como sigue:
 
 @lilypond[quote,verbatim]
-"custom-tuning" = \stringTuning <c' g' d'' a''>
+custom-tuning = \stringTuning <c' g' d'' a''>
 
 mynotes = {
   c'4 e' g' c'' |
index 57bcb3082c4bf14dbbb06be3e8bbd5b8cc8004fb..8afb312247c47318d3c8be69a417cc65dfb13a62 100644 (file)
@@ -2216,7 +2216,7 @@ las corcheas en 3/4 mediante una barra en cada parte, reinicie
 
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% by default we beam in (3) due to beamExceptions
+% by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
 % This will beam (1 1 1) due to beatLength
 \set Timing.beamExceptions = #'()
index c21285bbd694213b210a55e791b9539ebde2f1cf..6888184fb64bf7d4abf40d0497dd332c63941e47 100644 (file)
@@ -1403,7 +1403,7 @@ bassoonNotes = \relative c {
   \clef bass
   R1
   \clef treble
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuring #"flute" #UP { R1 }
   \clef bass
   g4. b8 d2
@@ -1431,7 +1431,7 @@ fluteNotes = \relative c'' {
 bassoonNotes = \relative c {
   \clef bass
   R1
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuringWithClef #"flute" #UP #"treble" { R1 }
   g4. b8 d2
 }
@@ -1510,7 +1510,7 @@ bassoonNotes = \relative c {
   R1
   \tag #'part {
     \clef treble
-    \new CueVoice { \set "instrumentCueName" = "flute" }
+    \new CueVoice { \set instrumentCueName = "flute" }
   }
   \cueDuring #"flute" #UP { R1 }
   \tag #'part \clef bass
index 46d7fd512fa08490edcbfe5b993aa960a07c49ad..a861d573224cbc61d9354e7751d2787cf2e99357 100644 (file)
@@ -427,7 +427,7 @@ withAlt =
      \override Stem #'length = #(* 7.0 mag)
      \override NoteHead #'font-size =
        #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
-     $music
+     #music
      \revert Stem #'length
      \revert NoteHead #'font-size
    #})
@@ -756,7 +756,7 @@ padding.
   "Draw a double box around text."
   (interpret-markup layout props
     #@{\markup \override #'(box-padding . 0.4) \box
-            \override #'(box-padding . 0.6) \box @{ $text @}#@}))
+            \override #'(box-padding . 0.6) \box @{ #text @}#@}))
 @end lisp
 
 or, equivalently 
@@ -800,7 +800,7 @@ now as follows:
   (interpret-markup layout props
     #@{\markup \override #`(box-padding . ,inter-box-padding) \box
                \override #`(box-padding . ,box-padding) \box
-               @{ $text @} #@}))
+               @{ #text @} #@}))
 @end lisp
 
 Again, the equivalent version using the markup macro would be:
@@ -836,7 +836,7 @@ customized:
   (interpret-markup layout props
     #{\markup \override #`(box-padding . ,inter-box-padding) \box
               \override #`(box-padding . ,box-padding) \box
-              { $text } #}))
+              { #text } #}))
 
 \markup \double-box A
 \markup \override #'(inter-box-padding . 0.8) \double-box A
@@ -942,7 +942,7 @@ indented.  The indent width is taken from the @code{props} argument.
 #(define-markup-list-command (paragraph layout props args) (markup-list?)
    #:properties ((par-indent 2))
    (interpret-markup-list layout props
-     #@{\markuplist \justified-lines @{ \hspace #par-indent $args @} #@}))
+     #@{\markuplist \justified-lines @{ \hspace #par-indent #args @} #@}))
 @end example
 
 
index 9b055dcba6475654ce457bc1fcaaf3860d04de01..bf2abe38d79c5c1305cd0aea12cac4574fd18db5 100644 (file)
@@ -667,8 +667,12 @@ without consulting the Scheme reader, and thus only variable names
 consistent with the current Lilypond mode are accepted.
 
 The immediate action of @code{$} can lead to surprises, @ref{Input
-variables and Scheme}.  Using @code{#} where the parser supports it is
-usually preferable.
+variables and Scheme}.  Using @code{#} where the parser supports it
+is usually preferable.  Inside of music expressions, expressions
+created using @code{#} @emph{are} interpreted as music.  However,
+they are @emph{not} copied before use.  If they are part of some
+structure that might still get used, you may need to use
+@code{ly:music-deep-copy} explicitly.
 
 @funindex $@@
 @funindex #@@
@@ -855,14 +859,14 @@ written as
 
 @example
 ...
-@{ $@@newLa @}
+@{ #@@newLa @}
 @end example
 
 Here, every element of the list stored in @code{newLa} is taken in
 sequence and inserted into the list, as if we had written
 
 @example
-@{ $(first newLa) $(second newLa) @}
+@{ #(first newLa) #(second newLa) @}
 @end example
 
 Now in all of these forms, the Scheme code is evaluated while the
@@ -1102,7 +1106,7 @@ let Lilypond direct just this output to a file of its own:
 
 @example
 @{
-  $(with-output-to-file "display.txt"
+  #(with-output-to-file "display.txt"
       (lambda () #@{ \displayMusic @{ c'4\f @} #@}))
 @}
 @end example
@@ -1524,16 +1528,16 @@ We can use it to create new commands:
 
 @lilypond[quote,verbatim,ragged-right]
 tempoPadded = #(define-music-function (parser location padding tempotext)
-  (number? string?)
+  (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = $padding
+  \once \override Score.MetronomeMark #'padding = #padding
   \tempo \markup { \bold #tempotext }
 #})
 
 \relative c'' {
   \tempo \markup { "Low tempo" }
   c4 d e f g1
-  \tempoPadded #4.0 #"High tempo"
+  \tempoPadded #4.0 "High tempo"
   g4 f e d c1
 }
 @end lilypond
@@ -1544,7 +1548,7 @@ Even music expressions can be passed in:
 @lilypond[quote,verbatim,ragged-right]
 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
 #{
-  $x e8 a b $y b a e
+  #x e8 a b #y b a e
 #})
 
 \relative c''{
index 27425323e7c013a804c11dae36685fe19761a1f2..567c629a06bef450a2f600237cbe1d2ebc05bab8 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.42"
+@c \version "2.15.43"
 
 @c Translators: Matthieu Jacquot
 @c Translation checkers: Jean-Charles Malahieude
@@ -608,7 +608,7 @@ diagrammes prédéfinis -- voir @ref{Tablatures prédéfinies}.
 Nous pourrions donc écrire l'exemple précédent ainsi :
 
 @lilypond[quote,verbatim]
-"custom-tuning" = \stringTuning <c' g' d'' a''>
+custom-tuning = \stringTuning <c' g' d'' a''>
 
 mynotes = {
   c'4 e' g' c'' |
index 90885c16acd4979359e183c3977d12e5122dfded..573f48ddd6afc87ee873b173a5535cd6599bf342 100644 (file)
@@ -2225,7 +2225,7 @@ la mesure par défaut.  Ligaturer sur le temps requiert un appel à
 
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% by default we beam in (3) due to beamExceptions
+% by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
 % This will beam (1 1 1) due to beatLength
 \set Timing.beamExceptions = #'()
index 8502e7a695332c5c509eca7ca85e2be5a15d945e..4ddf50bec3647fa5658d091174297cfbc1f67320 100644 (file)
@@ -1395,7 +1395,7 @@ bassoonNotes = \relative c {
   \clef bass
   R1
   \clef treble
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuring #"flute" #UP { R1 }
   \clef bass
   g4. b8 d2
@@ -1420,7 +1420,7 @@ fluteNotes = \relative c'' {
 bassoonNotes = \relative c {
   \clef bass
   R1
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuringWithClef #"flute" #UP #"treble" { R1 }
   g4. b8 d2
 }
@@ -1499,7 +1499,7 @@ bassoonNotes = \relative c {
   R1
   \tag #'part {
     \clef treble
-    \new CueVoice { \set "instrumentCueName" = "flute" }
+    \new CueVoice { \set instrumentCueName = "flute" }
   }
   \cueDuring #"flute" #UP { R1 }
   \tag #'part \clef bass
index f4ff4b5f6c463a930597ed8124ccec05953eb3d5..993f37dee7c9932149096f935f4ddc2ba6448fd3 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.42"
+@c \version "2.15.43"
 
 @c Translators: Yoshiki Sawada
 @c Translation status: post-GDP
@@ -598,7 +598,7 @@ mynotes = {
 上記の例を、以下のように書き換えることができます:
 
 @lilypond[quote,verbatim]
-"custom-tuning" = \stringTuning <c' g' d'' a''>
+custom-tuning = \stringTuning <c' g' d'' a''>
 
 mynotes = {
   c'4 e' g' c'' |
index 2eec31efefd2f9f61d4f5f29686c4158d68b6092..73befdbab572dc85db2eeb8ae57a4288f2f2f6cc 100644 (file)
@@ -2211,7 +2211,7 @@ c16 c c |
 @c KEEP LY
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% デフォルトでは beamExceptions のため、(3) の連桁になります
+% デフォルトでは beamExceptions のため、(6) の連桁になります
 \repeat unfold 6 {a8} |
 % 以下は beatLength のため、(1 1 1) の連桁になります
 \set Timing.beamExceptions = #'()
index a419121dcab455f346f2cf6e2000a57b4f203897..22f1e277d63368c37a18624ebba894d23273261e 100644 (file)
@@ -3069,7 +3069,7 @@ padText =
      (parser location padding)
      (number?)
    #{
-     \once \override TextScript #'padding = $padding
+     \once \override TextScript #'padding = #padding
    #})
 
 \relative c''' {
index 97030d53df056ecc13a4ecd851f16702f09e683d..7b88676f1ad18062fdaa3534e6b44bde3e80b409 100644 (file)
@@ -74,31 +74,31 @@ beam = #(define-music-function (parser location left right) (number? number?)
 )
 
 fraction = #(define-music-function (parser location music) (ly:music?)
-       #{ \tweak #'text #tuplet-number::calc-fraction-text $music #})
+       #{ \tweak #'text #tuplet-number::calc-fraction-text #music #})
 
 triangle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(do do do do do do do) $music #})
+       #{ \once \set shapeNoteStyles = #'#(do do do do do do do) #music #})
 
 semicircle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(re re re re re re re) $music #})
+       #{ \once \set shapeNoteStyles = #'#(re re re re re re re) #music #})
 
 blackdiamond = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(mi mi mi mi mi mi mi) $music #})
+       #{ \once \set shapeNoteStyles = #'#(mi mi mi mi mi mi mi) #music #})
 
 tiltedtriangle = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(fa fa fa fa fa fa fa) $music #})
+       #{ \once \set shapeNoteStyles = #'#(fa fa fa fa fa fa fa) #music #})
 
 square = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(la la la la la la la) $music #})
+       #{ \once \set shapeNoteStyles = #'#(la la la la la la la) #music #})
 
 wedge = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(ti ti ti ti ti ti ti) $music #})
+       #{ \once \set shapeNoteStyles = #'#(ti ti ti ti ti ti ti) #music #})
 
 harmonic = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) $music #})
+       #{ \once \set shapeNoteStyles = #'#(harmonic harmonic harmonic harmonic harmonic harmonic harmonic) #music #})
 
 cross = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) $music #})
+       #{ \once \set shapeNoteStyles = #'#(cross cross cross cross cross cross cross) #music #})
 
 white = #(define-music-function (parser location music) (ly:music?)
-       #{ \once \override NoteHead #'duration-log = #1 $music #})
+       #{ \once \override NoteHead #'duration-log = #1 #music #})
index ae59d06ee8214b17aedbf26f4cee78828b0a9e69..edf8a3f262cd312cecf1279a9ca03df4d2df5292 100644 (file)
@@ -672,19 +672,33 @@ time signature.
 
 @knownissues
 
-Usually the order in which the engravers are specified
-does not matter, but in a few special cases the order
-is important, for example where one engraver writes
-a property and another reads it, or where one engraver
-creates a grob and another must process it.  The order in
-which the engravers are specified is the order in which
-they are called to carry out their processing.
-
-The following orderings are important: the
-@code{Bar_engraver} must normally be first, and
-the @code{New_fingering_engraver} must come before
-the @code{Script_column_engraver}.  There may be others
-with ordering dependencies.
+The order in which the engravers are specified is the order in
+which they are called to carry out their processing.  Usually the
+order in which the engravers are specified does not matter, but in
+a few special cases the order is important, for example where one
+engraver writes a property and another reads it, or where one
+engraver creates a grob and another must process it.
+
+The following orderings are important:
+
+@itemize
+@item
+the @code{Bar_engraver} must normally be first,
+
+@item
+the @code{New_fingering_engraver} must come before the
+@code{Script_column_engraver},
+
+@item
+the @code{Timing_translator} must come before the
+@code{Bar_number_engraver}.
+
+@end itemize
+
+@seealso
+Installed Files:
+@file{ly/engraver-init.ly}.
+
 
 @node Changing context default settings
 @subsection Changing context default settings
@@ -4104,7 +4118,8 @@ must return @code{#t}.
 @item @code{@var{@dots{}music@dots{}}}
 @tab normal LilyPond input, using @code{$} (in places where only
 Lilypond constructs are allowed) or @code{#} (to use it as a Scheme
-value or music function argument) to reference arguments
+value or music function argument or music inside of music lists) to
+reference arguments
 (eg. @samp{#arg1}).
 @end multitable
 
@@ -4188,7 +4203,7 @@ custosNote =
      \tweak NoteHead #'text
         \markup \musicglyph #"custodes.mensural.u0"
      \tweak Stem #'stencil ##f
-     $note
+     #note
    #})
 
 \relative c' { c4 d e f \custosNote g }
index 0f7c96a5878374260dd8cf8e57b7a5f83cbdd5f0..c035dc2d5c1a3d81978be2382af8526a7d532399 100644 (file)
@@ -398,6 +398,7 @@ Notes in a chord cannot be colored with @code{\override}; use
 @cindex notes, ghost
 @cindex notes, parenthesized
 @cindex parentheses
+@cindex brackets
 
 @funindex \parenthesize
 @funindex parenthesize
index 067073b7912fe5a3ffaa5bf3b816373cc97fd696..91f97effbd319e39022d0567f99fec2d8fff11f9 100644 (file)
@@ -7,7 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.42"
+@c \version "2.15.43"
 
 @node Fretted string instruments
 @section Fretted string instruments
@@ -599,7 +599,7 @@ for predefined fret diagrams
 The previous example could also be written as follows:
 
 @lilypond[quote,verbatim]
-"custom-tuning" = \stringTuning <c' g' d'' a''>
+custom-tuning = \stringTuning <c' g' d'' a''>
 
 mynotes = {
   c'4 e' g' c'' |
index fe0af3b5daf4aaddcf320def4da0602a2dfaaea9..74083d906bfa20d0599bcd309b5d1222e8fe7810 100644 (file)
@@ -640,47 +640,80 @@ Notation Reference:
 @node Default layout of book and score title blocks
 @unnumberedsubsubsec Default layout of book and score title blocks
 
-The layout and formatting of title blocks are controlled by two
-@code{\paper} variables; @code{bookTitleMarkup} for the main
-@code{\header} title block and @code{scoreTitleMarkup} for individual
-@code{\header} blocks within a @code{\score}.
+This example demonstrates all @code{\header} variables:
 
-@lilypond[papersize=a6,quote,verbatim,noragged-right]
-\header {
-  % The following fields are centered
-  dedication = "Dedication"
-  title = "Title"
-  subtitle = "Subtitle"
-  subsubtitle = "Subsubtitle"
-  instrument = "Instrument"
-
-  % The following fields are left-aligned on the left side
-  poet = "Poet"
-  meter = "Meter"
-
-  % The following fields are right-aligned on the right side
-  composer = "Composer"
-  arranger = "Arranger"
-}
-
-\score {
-  { s1 }
+@lilypond[papersize=a7,quote,verbatim,noragged-right]
+\book {
   \header {
-    % The following fields are placed at opposite ends of the same line
-    piece = "Piece"
-    opus = "Opus"
+      % The following fields are centered
+    dedication = "Dedication"
+    title = "Title"
+    subtitle = "Subtitle"
+    subsubtitle = "Subsubtitle"
+      % The following fields are evenly spread on one line
+      % the field "instrument" also appears on following pages
+    instrument = \markup \with-color #green "Instrument"
+    poet = "Poet"
+    composer = "Composer"
+      % The following fields are placed at opposite ends of the same line
+    meter = "Meter"
+    arranger = "Arranger"
+      % The following fields are centered at the bottom
+    tagline = "tagline goes at the bottom of the last page"
+    copyright = "copyright goes at the bottom of the first page"
+  }
+  \score {
+    { s1 }
+    \header {
+        % The following fields are placed at opposite ends of the same line
+      piece = "Piece 1"
+      opus = "Opus 1"
+    }
+  }
+  \score {
+    { s1 }
+    \header {
+        % The following fields are placed at opposite ends of the same line
+      piece = "Piece 2 on the same page"
+      opus = "Opus 2"
+    }
+  }
+  \pageBreak
+  \score {
+    { s1 }
+    \header {
+        % The following fields are placed at opposite ends of the same line
+      piece = "Piece 3 on a new page"
+      opus = "Opus 3"
+    }
   }
 }
 @end lilypond
 
-@c Is the bit about \null markups true? -mp
+Note that
 
+@itemize
+@item
+The instrument name will be repeated on every page.
+
+@item
+Only @code{piece} and @code{opus} are printed in a @code{\score}
+when the paper variable @code{print-all-headers} is set to
+@code{##f} (the default).
+
+@item
+@c Is the bit about \null markups true? -mp
 Text fields left unset in a @code{\header} block are replaced with
 @code{\null} markups so that the space is not wasted.
 
+@item
 The default settings for @code{scoreTitleMarkup} place the @code{piece}
 and @code{opus} text fields at opposite ends of the same line.
 
+@end itemize
+
+To change the default layout see @ref{Custom layout for title blocks}.
+
 @cindex breakbefore
 
 Use the @code{breakbefore} variable inside a @code{\header} block
@@ -710,6 +743,7 @@ Learning Manual:
 @rlearning{How LilyPond input files work},
 
 Notation Reference:
+@ref{Custom layout for title blocks},
 @ref{File structure}.
 
 Installed Files:
@@ -819,17 +853,23 @@ Notation Reference:
 @node Custom layout for title blocks
 @unnumberedsubsubsec Custom layout for title blocks
 
+@cindex bookTitleMarkup
+@cindex scoreTitleMarkup
+@funindex bookTitleMarkup
+@funindex scoreTitleMarkup
+
 @code{\markup} commands in the @code{\header} block are useful for
 simple text formatting, but they do not allow precise control over the
 placement of titles.  To customize the placement of the text fields,
-use either or both of the following @code{\paper} variables:
+change either or both of the following @code{\paper} variables:
 
 @itemize
 @item @code{bookTitleMarkup}
 @item @code{scoreTitleMarkup}
 @end itemize
 
-These markup variables are discussed in
+The placement of titles when using the default values of these
+@code{\markup} variables is shown in the examples in
 @ref{Default layout of book and score title blocks}.
 
 The default settings for @code{scoreTitleMarkup} as defined in
index c693aa91ac9fd086206916993be3acedda786813..ee37e5560eafacd6c25886ac531b0e1195483561 100644 (file)
@@ -417,40 +417,17 @@ Internals Reference:
 @cindex cross staff chords
 
 @funindex Stem
-@funindex cross-staff
-@funindex length
-@funindex flag-style
+@funindex \crossStaff
+@funindex \autoBeamOff
+@funindex Span_stem_engraver
 
-Chords that cross staves may be produced:
+Chords that cross staves may be produced using the
+@code{Span_stem_engraver}. Care must be taken to ensure that
+automatic beams do not beam the notes on one staff when it’s not
+required on the other.
 
-@lilypond[verbatim,quote]
-\new PianoStaff <<
-  \new Staff {
-    \relative c' {
-      f8 e4 d8 d f e4
-    }
-  }
-  \new Staff {
-    \relative c' {
-      << {
-        \clef bass
-        % stems may overlap the other staff
-        \override Stem #'cross-staff = ##t
-        % extend the stems to reach the other staff
-        \override Stem #'length = #12
-        % do not print extra flags
-        \override Flag #'style = #'no-flag
-        % prevent beaming as needed
-        a8 g4 f8 f bes\noBeam g4
-      }
-      \\
-      {
-        f,2 bes4 c
-      } >>
-    }
-  }
->>
-@end lilypond
+@lilypondfile[verbatim,quote]
+{cross-staff-stems.ly}
 
 @snippets
 @lilypondfile[verbatim,quote,texidoc,doctitle]
index 42643abde9a0112877cfb20a9d4923b47a745aad..99e8e0932b0936ebab737cf19ded2cb4663f9d99 100644 (file)
@@ -2577,7 +2577,7 @@ the accidental style to @code{forget}:
 @lilypond[verbatim,quote]
 forget = #(define-music-function (parser location music) (ly:music?) #{
   \accidentalStyle "forget"
-  $music
+  #music
   \accidentalStyle "modern"
 #})
 {
index ed9424c45550e97fe87711672944f980132d6615..d46674a12a061c8fe30805af73cad894e5f4fe70 100644 (file)
@@ -2155,7 +2155,7 @@ reset @code{beamExceptions}.
 
 @lilypond[quote,verbatim,relative=2]
 \time 3/4
-% by default we beam in (3) due to beamExceptions
+% by default we beam in (6) due to beamExceptions
 \repeat unfold 6 {a8} |
 % This will beam (1 1 1) due to beatLength
 \set Timing.beamExceptions = #'()
@@ -3361,9 +3361,9 @@ MyCadenza = \relative c' {
     \MyCadenza c'1
   }
   \new Staff {
-    $(mmrest-of-length MyCadenza)
+    #(mmrest-of-length MyCadenza)
     c'1
-    $(skip-of-length MyCadenza)
+    #(skip-of-length MyCadenza)
     c'1
   }
 >>
index cd0b1073e8c7abeccd3e8a0a935b47faf87564ec..18c1f4bb8f4eb3d409f872bf09bf757174686e5b 100644 (file)
@@ -1360,7 +1360,7 @@ bassoonNotes = \relative c {
   \clef bass
   R1
   \clef treble
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuring #"flute" #UP { R1 }
   \clef bass
   g4. b8 d2
@@ -1386,7 +1386,7 @@ fluteNotes = \relative c'' {
 bassoonNotes = \relative c {
   \clef bass
   R1
-  \new CueVoice { \set "instrumentCueName" = "flute" }
+  \new CueVoice { \set instrumentCueName = "flute" }
   \cueDuringWithClef #"flute" #UP #"treble" { R1 }
   g4. b8 d2
 }
@@ -1462,7 +1462,7 @@ bassoonNotes = \relative c {
   R1
   \tag #'part {
     \clef treble
-    \new CueVoice { \set "instrumentCueName" = "flute" }
+    \new CueVoice { \set instrumentCueName = "flute" }
   }
   \cueDuring #"flute" #UP { R1 }
   \tag #'part \clef bass
index dc9c3b8e838941955eca21801e81d90bf5a74646..2ef51185fc40f84a9f7f41d1380f5b8ea4519fe8 100644 (file)
@@ -9,9 +9,12 @@
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
-  texidoc = "This file demonstrates a scheme engraver that
-connects stems across staves.  The stem length need not be specified, as
-the code takes care of the variable distance between noteheads and staves."
+  texidoc = "
+This snippet shows the use of the @code{Span_stem_engraver}
+and @code{\\crossStaff} to connect stems across staves automatically.
+The stem length need not be specified, as the variable distance
+between noteheads and staves is calculated automatically.
+"
   doctitle = "Cross staff stems"
 } % begin verbatim
 
@@ -27,12 +30,15 @@ the code takes care of the variable distance between noteheads and staves."
   \new PianoStaff <<
     \new Staff {
       <b d'>4 r d'16\> e'8. g8 r\!
+      e'8 f' g'4 e'2
     }
-   \new Staff {
-     \clef bass
+    \new Staff {
+      \clef bass
       \voiceOne
       \autoBeamOff
       \crossStaff { <e g>4 e, g16 a8. c8} d
+      \autoBeamOn
+      g8 f g4 c2
     }
   >>
 }
index 2168e20222f3d349a715e542c1785f18cffb61e5..edf4fbf77b4db758733ff2658e6e7a52f18b9f6b 100644 (file)
@@ -2,9 +2,12 @@
 
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
-  texidoc = "This file demonstrates a scheme engraver that
-connects stems across staves.  The stem length need not be specified, as
-the code takes care of the variable distance between noteheads and staves."
+  texidoc = "
+This snippet shows the use of the @code{Span_stem_engraver}
+and @code{\crossStaff} to connect stems across staves automatically.
+The stem length need not be specified, as the variable distance
+between noteheads and staves is calculated automatically.
+"
   doctitle = "Cross staff stems"
 }
 
@@ -19,12 +22,15 @@ the code takes care of the variable distance between noteheads and staves."
   \new PianoStaff <<
     \new Staff {
       <b d'>4 r d'16\> e'8. g8 r\!
+      e'8 f' g'4 e'2
     }
-   \new Staff {
-     \clef bass
+    \new Staff {
+      \clef bass
       \voiceOne
       \autoBeamOff
       \crossStaff { <e g>4 e, g16 a8. c8} d
+      \autoBeamOn
+      g8 f g4 c2
     }
   >>
 }
index 93ed4162df722a44bcb2c8c8fd03fa65173a5491..940fc578c74977ef8f7e3f50046c62a62c6a0227 100644 (file)
 
 
 @newsItem
-@subsubheading Release candidate withdrawn  @emph{July 11, 2012}
-
-We have discovered a regression since 2.14.2, so lilypond 2.15.41
-is no longer a candidate for the 2.16.0 release.  However, please
-continue testing it -- we would like to discover (and fix!) any
-more regressions as soon as possible.  If you discover any
-problems, please send us @ref{Bug reports}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading Release candidate 8 of 2.16 - LilyPond 2.15.41 released!  @emph{July 4, 2012}
+@subsubheading LilyPond 2.15.42 released!  @emph{August 02, 2012}
 
-LilyPond 2.15.41 is out; this is the eighth release candidate of
-the upcoming 2.16 stable release.  All users are invited to
-experiment with this version.  New features since 2.14.2 are
-listed in the @qq{Changes} manual on the website section about
-@ref{Development}.
+We are happy to announce the release of LilyPond 2.15.42.  This
+release contains the usual number of bugfixes.
 
-There are no known Critical issues with this release.  If no
-Critical bugs are found, then the official 2.16.0 release will be
-on 18 July 2012.  If you discover any problems, please send us
-@ref{Bug reports}.
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.  Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
 
 @newsEnd
 
 
 @newsItem
-@subsubheading LilyPond 2.15.40 released!  @emph{June 05, 2012}
+@subsubheading The LilyPond Report #27. @emph{August 2, 2012}
 
-We are happy to announce the release of LilyPond 2.15.40.  This
-release contains the usual number of bugfixes.
+The @emph{LilyPond Report} is back, with some interesting insights on
+new Scheme-related features recently added by our community’s only paid
+developer David Kastrup (thanks to your
+@uref{http://lilypond.org/sponsoring.html, continuing donations}).  Also
+to be found in this issue are an overview of some lesser-known LilyPond
+companion projects, and a handful of more shallow factoids.
 
-It is strongly recommended that normal users do @strong{not} use
-this release, and instead use the stable 2.14 version.  Please
-note that due to a few Critical bugs, this is not the next release
-candidate.
+Come
+@uref{http://news.lilynet.net/?The-LilyPond-Report-27, read
+LilyPond Report 27} now; comments and contributions are
+warmly encouraged!
 
 @newsEnd
 
 
 @newsItem
-@subsubheading Release candidate withdrawn  @emph{June 01, 2012}
+@subsubheading Release candidate withdrawn  @emph{July 11, 2012}
 
-We have discovered a regression since 2.14.2, so lilypond 2.15.39
+We have discovered a regression since 2.14.2, so lilypond 2.15.41
 is no longer a candidate for the 2.16.0 release.  However, please
 continue testing it -- we would like to discover (and fix!) any
 more regressions as soon as possible.  If you discover any
@@ -65,9 +54,9 @@ problems, please send us @ref{Bug reports}.
 
 
 @newsItem
-@subsubheading Release candidate 7 of 2.16 - LilyPond 2.15.39 released!  @emph{May 22, 2012}
+@subsubheading Release candidate 8 of 2.16 - LilyPond 2.15.41 released!  @emph{July 4, 2012}
 
-LilyPond 2.15.39 is out; this is the seventh release candidate of
+LilyPond 2.15.41 is out; this is the eighth release candidate of
 the upcoming 2.16 stable release.  All users are invited to
 experiment with this version.  New features since 2.14.2 are
 listed in the @qq{Changes} manual on the website section about
@@ -75,26 +64,7 @@ listed in the @qq{Changes} manual on the website section about
 
 There are no known Critical issues with this release.  If no
 Critical bugs are found, then the official 2.16.0 release will be
-on 05 June 2012.  If you discover any problems, please send us
+on 18 July 2012.  If you discover any problems, please send us
 @ref{Bug reports}.
 
 @newsEnd
-
-
-@newsItem
-@subsubheading The LilyPond Report #26. @emph{May 22, 2012}
-
-The @emph{LilyPond Report} is back, with a new editor on board -
-Pavel Roskin, who tells us about his adventures in strange lands
-of compiler bugs!  There is also a detailed report about current
-development status, and an analysis of example LilyPond output -
-see for yourself how close (or how far?) are we from matching
-the quality of hand-engraved scores.
-
-Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-26, read
-LilyPond Report 26} now; comments and contributions are
-warmly encouraged!
-
-@newsEnd
-
index 379a44a33e00f45477fe92b442e73d2bba4c23fe..2cf3adf4b6a6d70b097961a7868ab556f9227feb 100644 (file)
@@ -27,6 +27,67 @@ NOTE:
 @end ignore
 
 
+@newsItem
+@subsubheading LilyPond 2.15.40 released!  @emph{June 05, 2012}
+
+We are happy to announce the release of LilyPond 2.15.40.  This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.  Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Release candidate withdrawn  @emph{June 01, 2012}
+
+We have discovered a regression since 2.14.2, so lilypond 2.15.39
+is no longer a candidate for the 2.16.0 release.  However, please
+continue testing it -- we would like to discover (and fix!) any
+more regressions as soon as possible.  If you discover any
+problems, please send us @ref{Bug reports}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Release candidate 7 of 2.16 - LilyPond 2.15.39 released!  @emph{May 22, 2012}
+
+LilyPond 2.15.39 is out; this is the seventh release candidate of
+the upcoming 2.16 stable release.  All users are invited to
+experiment with this version.  New features since 2.14.2 are
+listed in the @qq{Changes} manual on the website section about
+@ref{Development}.
+
+There are no known Critical issues with this release.  If no
+Critical bugs are found, then the official 2.16.0 release will be
+on 05 June 2012.  If you discover any problems, please send us
+@ref{Bug reports}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading The LilyPond Report #26. @emph{May 22, 2012}
+
+The @emph{LilyPond Report} is back, with a new editor on board -
+Pavel Roskin, who tells us about his adventures in strange lands
+of compiler bugs!  There is also a detailed report about current
+development status, and an analysis of example LilyPond output -
+see for yourself how close (or how far?) are we from matching
+the quality of hand-engraved scores.
+
+Come
+@uref{http://news.lilynet.net/?The-LilyPond-Report-26, read
+LilyPond Report 26} now; comments and contributions are
+warmly encouraged!
+
+@newsEnd
+
+
 @newsItem
 @subsubheading Release candidate 6 of 2.16 - LilyPond 2.15.38 released!  @emph{May 3, 2012}
 
index 8cce2c8f72171d4dbc3221777e58b6e36e49afb9..512b8ef598bfc8d2e645df21415501fc2da5010f 100644 (file)
@@ -60,6 +60,7 @@ refresh-release-files:
        $(MAKE) $(RELEASE_OUT_FILES)
 
 python-modules:
+       $(MAKE) -C scripts/build
        $(MAKE) -C python
 
 top-doc: python-modules
@@ -102,7 +103,7 @@ ifeq ($(out),www)
 # installed in non-recursing target from TOP-SRC-DIR
 install-WWW:
        -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir)
-       rsync -rl --exclude='*.signature' $(outdir)/offline-root $(DESTDIR)$(webdir)
+       rsync -rl --exclude='*.signature' $(outdir)/offline-root/ $(DESTDIR)$(webdir)
        $(MAKE) -C Documentation omf-local-install
 
 install-info-WWW:
diff --git a/VERSION b/VERSION
index af3005007ba2fb1eb41dce33d92ffc0940facd81..019ae0d469b81f4d6cd25fc59712fb4175830f9d 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=15
-PATCH_LEVEL=42
+PATCH_LEVEL=43
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.41
+VERSION_DEVEL=2.15.42
index 3ed8e53b05b5dde9123bec6be15e7debf7ed5511..aa674379e3dcaa8679195c722f377c6b3ce84922 100644 (file)
@@ -90,6 +90,7 @@ vimdir = $(lilypond_datadir)/vim
 
 
 NCSB_SOURCE_FILES = @NCSB_SOURCE_FILES@
+NCSB_DIR = @NCSB_DIR@
 
 ################################################################
 ## PROGRAMS
index 2050b87336c5e885654e1756d4b94f9dd56dd10e..66799abd3b43e994ea58eb32f29c440228e87f44 100644 (file)
@@ -62,13 +62,14 @@ STEPMAKE_COMPILE
 AC_CHECK_PROG(FCLIST, fc-list, fc-list)
 AC_MSG_CHECKING([New Century Schoolbook PFB files])
 AC_SUBST(NCSB_SOURCE_FILES)
+AC_SUBST(NCSB_DIR)
+UNCHECKED_NCSB_SOURCE_FILES=""
 if test "$NCSB_DIR" != "" ;  then
-  NCSB_SOURCE_FILES=""
   for f in c059013l c059016l c059033l c059036l; do
     if test ! -f "$NCSB_DIR/$f.pfb"; then
       STEPMAKE_WARN($NCSB_DIR does not contain $f.pfb.)
     else
-      NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $NCSB_SOURCE_FILES"
+      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $UNCHECKED_NCSB_SOURCE_FILES"
     fi
   done
 else
@@ -78,14 +79,23 @@ else
                 | head -n 1`
       NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
       NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
-      NCSB_SOURCE_FILES="$NCSB_FILE $NCSB_SOURCE_FILES"
+      UNCHECKED_NCSB_SOURCE_FILES="$NCSB_FILE $UNCHECKED_NCSB_SOURCE_FILES"
     done
+    NCSB_DIR=`AS_DIRNAME($NCSB_FILE)`
   else
     AC_MSG_RESULT(not found)
     echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
     echo "or use --with-ncsb-dir"
   fi
 fi
+NCSB_SOURCE_FILES=""
+for f in $UNCHECKED_NCSB_SOURCE_FILES; do
+  if test "`grep Cyrillic "$f"`" = ""; then
+    STEPMAKE_WARN($f does not have Cyrillic characters.)
+  else
+    NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
+  fi
+done
 AC_MSG_RESULT($NCSB_SOURCE_FILES)
 
 AC_LANG([C++])
index 0da01807d48a263cba2cb3736f51d14f21ba0873..38fba30801089b87e10475e282e1ccc8ff88969e 100644 (file)
@@ -395,6 +395,9 @@ void assert_throw (void (*pf) (), const char *at = "")
 #ifdef YAFFUT_MAIN
 
 #include <iostream>
+#include <sys/types.h>
+#include <unistd.h>
+
 
 int main (int argc, const char *argv[])
 {
index 99366a1f100d0182bb248ffd1eae22ff595c7303..a20364b98cf6214e0f727ec9a9672fef85f217d0 100644 (file)
@@ -1,6 +1,7 @@
 #include "file-path.hh"
 
 #include <limits.h>
+#include <unistd.h>
 
 #include "yaffut.hh"
 #include "config.hh"
index e8a85040460d1cce972b8f3de5bbcfda7ffb7c6a..d565c10ff3523142542c69a162dcaa9ebabe0815 100644 (file)
@@ -180,6 +180,7 @@ stderr of this run."
 %% Tuplets
 \test ##[ \times 2/3 { c8 d e } #]                             % TimeScaledMusic
 \test ##[ \times 4/6 { c16 d e f g a } #]
+\test ##[ \times 2/3 { c d e \times 2/5 { f e d2 d4 } c } #]
 %}
 %% \relative and \tranpose
 \test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
diff --git a/input/regression/header-book-multiple.ly b/input/regression/header-book-multiple.ly
new file mode 100644 (file)
index 0000000..5eb9639
--- /dev/null
@@ -0,0 +1,35 @@
+\version "2.15.42"
+
+\header {
+  texidoc="
+A second book-level header block and headers nested in bookpart and score should not clear values from the first header block.  This score should show composer, piece, subtitle and title."
+}
+
+\book {
+  \header {
+    title = "Title incorrect (to be superseded at book level)"
+    subtitle = "Subtitle incorrect (to be superseded in bookpart)"
+    composer = "Composer correct (set in book)"
+    piece = "Piece incorrect (to be superseded in score)"
+  }
+  % This should replace title without affecting other fields
+  \header {
+    title = "Title correct (superseded at book level)"
+  }
+  \bookpart {
+    % This should replace subtitle without affecting other fields
+    \header {
+      subtitle = "Subtitle correct (superseded in bookpart)"
+    }
+    \markup \vspace #2
+    \markup { \bold Note: title, subtitle, piece, and composer expected. }
+    \markup \vspace #2
+    \score {
+      \new Staff { c'1 }
+      \header {
+        % This should replace piece without affecting other fields
+        piece = "Piece correct (superseded in score)"
+      }
+    }
+  }
+}
diff --git a/input/regression/header-book-multiplescores.ly b/input/regression/header-book-multiplescores.ly
new file mode 100644 (file)
index 0000000..87dce63
--- /dev/null
@@ -0,0 +1,33 @@
+\version "2.15.42"
+
+\header {
+  texidoc="
+Changing the header fields in a book or a bookpart shall not have any effect on the global default values.
+"
+}
+
+\markup \vspace #2
+\markup { \bold Note: expect only title. }
+\markup \vspace #2
+
+\header {
+  title = "Title correct (set at top level)"
+}
+\score {
+  \relative c' { c1 }
+}
+
+
+\book {
+  % This should NOT set a global subtitle for the first score above:
+  \header {
+    subtitle = "Subtitle (set at book level)"
+  }
+  \markup \vspace #2
+  \markup { \bold Note: expect title and subtitle. }
+  \markup \vspace #2
+  %% Do we have a title, and is the subtitle set?
+  \score {
+    \new Staff { c'1 }
+  }
+}
diff --git a/input/regression/header-bookpart-multiple.ly b/input/regression/header-bookpart-multiple.ly
new file mode 100644 (file)
index 0000000..f6ea5b8
--- /dev/null
@@ -0,0 +1,30 @@
+\version "2.15.42"
+
+\header {
+  texidoc="
+A second bookpart-level header block shall retain previously set values from a first header block at the same or higher levels unless overriden.
+"
+}
+
+\header { composer = "Composer correct (set at top level)" }
+\book {
+  \header {
+    title = "Title correct (set in book)"
+    subtitle = "Subtitle incorrect (to be superseded in bookpart)"
+  }
+  \bookpart {
+    \header {
+      subtitle = "Subtitle correct (superseded in bookpart)"
+      piece = "Piece incorrect (to be superseded at bookpart level)"
+    }
+    \header {
+      piece = "Piece correct (superseded at bookpart level)"
+    }
+    \markup \vspace #2
+    \markup { \bold Note: expect title, subtitle, piece and composer. }
+    \markup \vspace #2
+    \score {
+      \new Staff { c'4 }
+    }
+  }
+}
diff --git a/input/regression/header-score-multiple.ly b/input/regression/header-score-multiple.ly
new file mode 100644 (file)
index 0000000..a0b2246
--- /dev/null
@@ -0,0 +1,22 @@
+\version "2.15.42"
+\header {
+  texidoc="
+A second score-level header block shall not entirely replace a first header block, but only update changed variables.
+"
+}
+
+\markup \vspace #3
+\markup { \bold Note: expect piece and opus. }
+\markup \vspace #3
+
+\score {
+  \new Staff { c'1 }
+  \header {
+    piece = "Piece correct (set in score)"
+    opus = "Opus incorrect (to be superseded at score level)"
+  }
+  \header {
+    % This should NOT overwrite the piece from above!
+    opus = "Opus correct (superseded at score level)"
+  }
+}
diff --git a/input/regression/header-toplevel-multiple.ly b/input/regression/header-toplevel-multiple.ly
new file mode 100644 (file)
index 0000000..27ec3dc
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.15.42"
+\header {
+  texidoc="
+A second top-level header block shall not entirely replace a first header block, but only changed variables.
+"
+  piece = "Piece correct (set at top level)"
+  title = "Title incorrect (to be superseded at top level)"
+}
+\header {
+  % This should NOT overwrite the piece from above!
+  title = "Title correct (superseded at top level)"
+}
+\markup \vspace #3
+\markup { \bold Note: expect title and piece. }
+\markup \vspace #3
+
+\score {
+  \new Staff { c'4 }
+}
diff --git a/input/regression/page-spacing-nonstaff-lines-skylines.ly b/input/regression/page-spacing-nonstaff-lines-skylines.ly
new file mode 100644 (file)
index 0000000..43dac95
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.15.42"
+
+\header {
+  texidoc = "Relative indentation between systems is taken into
+  account in allowing space for loose lines between systems."
+}
+
+\paper {
+  ragged-right = ##t
+  indent = 10
+  short-indent = 00
+}
+
+\book {
+  \score { <<
+    \chords {s1\break c2 c2 }
+    \new Staff {\clef bass c,1 | c''2 c2 }
+  >> }
+}
index b57f16fda9a3a168458c6e42c8bad4e73b9891e6..0211ffa6c1304331684bf12207d5613a165244fe 100644 (file)
@@ -1,12 +1,12 @@
-\version "2.14.0"
+\version "2.15.42"
 
-"expect-error" = ##t
+expect-error = ##t
 
 % Ugh - this affects other files too.
 #(ly:set-option 'protected-scheme-parsing #t)
 #(ly:set-option 'safe #t)
 
-"force-finish" = ##t  
+force-finish = ##t
 
 \header{
     texidoc = "This should not survive lilypond --safe-mode"
@@ -18,4 +18,3 @@
 #(open-file "/tmp/safe-guile.scm")
 
 \include "this-should-fail.ly"
-
index 87ab20e52460b21614265289ec4395335f567830..fe9c94ae542ea1bf502f7272eb25aa06c97c01af 100644 (file)
@@ -17,7 +17,6 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "bar-line.hh"
 #include "beaming-pattern.hh"
 #include "beam.hh"
 #include "context.hh"
index 1b937985eeee2aab63444c47401f2a49e9a59af7..febff36afb6462d4b39137d46e1c7c221414ab73 100644 (file)
@@ -828,18 +828,6 @@ Axis_group_interface::calc_maybe_pure_staff_staff_spacing (Grob *me, bool pure,
   return me->get_maybe_pure_property ("default-staff-staff-spacing", pure, start, end);
 }
 
-Real
-Axis_group_interface::minimum_distance (Grob *g1, Grob *g2, Axis a)
-{
-  SCM sym = ly_symbol2scm ((a == Y_AXIS) ? "vertical-skylines" : "horizontal-skylines");
-
-  Skyline_pair *s1 = Skyline_pair::unsmob (g1->get_property (sym));
-  Skyline_pair *s2 = Skyline_pair::unsmob (g2->get_property (sym));
-  if (s1 && s2)
-    return (*s1)[DOWN].distance ((*s2)[UP]);
-  return 0;
-}
-
 ADD_INTERFACE (Axis_group_interface,
                "An object that groups other layout objects.",
 
index 63f5e83384e794a756af375d9cff863120872722..b2594a2cb871a8f4b5cff207083e36b18245aaf3 100644 (file)
@@ -18,7 +18,6 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "bar-line.hh"
 #include "context.hh"
 #include "score-engraver.hh"
 #include "warn.hh"
index 0cd0339235b41c307459670210ea35c27f69d66d..fe4406956c2e9b5a531a8d71f86a3f083c80c536 100644 (file)
 */
 
 #include "bar-line.hh"
-
-#include "all-font-metrics.hh"
-#include "font-interface.hh"
-#include "line-interface.hh"
-#include "lookup.hh"
-#include "output-def.hh"
 #include "paper-column.hh"
-#include "staff-symbol-referencer.hh"
-
-MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1)
-SCM
-Bar_line::calc_bar_extent (SCM smob)
-{
-  Interval result;
-  Grob *me = unsmob_grob (smob);
-  if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
-    {
-      result = staff->extent (staff, Y_AXIS);
-
-      /* Due to rounding problems, bar lines extending to the outermost edges
-         of the staff lines appear wrongly in on-screen display
-         (and, to a lesser extent, in print) - they stick out a pixel.
-         The solution is to extend bar lines only to the middle
-         of the staff line - unless they have different colors,
-         when it would be undesirable.
-      */
-      SCM bar_line_color = me->get_property ("color");
-      SCM staff_color = staff->get_property ("color");
-      Real radius = Staff_symbol_referencer::staff_radius (me);
-      if (bar_line_color == staff_color && radius)
-        result *= (1 - 0.5 * (Staff_symbol_referencer::line_thickness (me) / radius));
-    }
-  return ly_interval2scm (result);
-}
-
-Interval
-Bar_line::bar_y_extent (Grob *me, Grob *refpoint)
-{
-  Interval iv = robust_scm2interval (me->get_property ("bar-extent"), Interval ());
-
-  iv.translate (me->relative_coordinate (refpoint, Y_AXIS));
-  return iv;
-}
 
 bool
 Bar_line::non_empty_barline (Grob *me)
 {
-  return has_interface (me) && !me->extent (me, X_AXIS).is_empty ();
-}
-
-MAKE_SCHEME_CALLBACK (Bar_line, print, 1);
-SCM
-Bar_line::print (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-
-  SCM s = me->get_property ("glyph-name");
-  SCM extent = me->get_property ("bar-extent");
-
-  if (scm_is_string (s) && is_number_pair (extent))
-    {
-      string str = ly_scm2string (s);
-      Interval ex = ly_scm2interval (extent);
-      if (ex.length () > 0)
-        {
-          Stencil result = compound_barline (me, str, ex, false);
-
-          return result.smobbed_copy ();
-        }
-    }
-  return SCM_EOL;
+  return me->internal_has_interface (ly_symbol2scm ("bar-line-interface"))
+         && !me->extent (me, X_AXIS).is_empty ();
 }
-
-Stencil
-Bar_line::compound_barline (Grob *me, string str, Interval const &extent,
-                            bool rounded)
-{
-  Real kern = robust_scm2double (me->get_property ("kern"), 1);
-  Real thinkern = robust_scm2double (me->get_property ("thin-kern"), 1);
-  Real hair = robust_scm2double (me->get_property ("hair-thickness"), 1);
-  Real fatline = robust_scm2double (me->get_property ("thick-thickness"), 1);
-
-  Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
-  Real staff_space = Staff_symbol_referencer::staff_space (me);
-
-  kern *= staffline;
-  thinkern *= staffline;
-  hair *= staffline;
-  fatline *= staffline;
-
-  Stencil thin = simple_barline (me, hair, extent, rounded);
-  Stencil thick = simple_barline (me, fatline, extent, rounded);
-  Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot");
-
-  int lines = Staff_symbol_referencer::line_count (me);
-  Real dist
-    = ((lines & 1 || lines == 0)
-       ? 1
-       : (staff_space < 2 ? 2 : .5)) * staff_space;
-  Stencil colon (dot);
-  colon.translate_axis (dist, Y_AXIS);
-  colon.add_stencil (dot);
-  colon.translate_axis (-dist / 2, Y_AXIS);
-
-  Real const h = extent.length ();
-  Stencil m;
-
-  if (str == "||:")
-    str = "|:";
-
-  if (str == "|S" || str == "S|")
-    str = "S";
-
-  if (str == "")
-    {
-      Stencil empty = Lookup::blank (Box (Interval (0, 0), extent));
-      return empty;
-    }
-  else if (str == "|")
-    return thin;
-  else if (str == ".")
-    return thick;
-  else if (str == "|." || (h == 0 && str == ":|"))
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern);
-    }
-  else if (str == ".|" || (h == 0 && str == "|:"))
-    {
-      m.add_at_edge (X_AXIS, RIGHT, thick, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-    }
-  else if (str == ":|")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern);
-    }
-  else if (str == "|:")
-    {
-      m.add_at_edge (X_AXIS, RIGHT, thick, 0);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-    }
-  else if (str == ":|:")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, thinkern);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern);
-      m.add_at_edge (X_AXIS, RIGHT, thick, kern);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-    }
-  else if (str == ":|.|:")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-    }
-  else if (str == ":|.:")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern);
-      m.add_at_edge (X_AXIS, LEFT, colon, kern);
-      m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-    }
-  else if (str == ".|.")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, thinkern);
-      m.add_at_edge (X_AXIS, RIGHT, thick, kern);
-    }
-  else if (str == "|.|")
-    {
-      m.add_at_edge (X_AXIS, LEFT, thick, 0);
-      m.add_at_edge (X_AXIS, LEFT, thin, kern);
-      m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-    }
-  else if (str == "||")
-    {
-      /*
-        should align to other side? this never appears
-        on the system-start?
-        m.add_at_edge (X_AXIS, RIGHT, thin, 0);
-        m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
-      */
-      m.add_at_edge (X_AXIS, LEFT, thin, thinkern);
-      m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
-    }
-  else if (str.find ("S") != NPOS || str == "|._.|")
-    {
-      //  Handle all varsegno stuff
-      Stencil segno;
-      segno.add_at_edge (X_AXIS, LEFT, thin, thinkern);
-      segno.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
-      segno.add_stencil (Font_interface::get_default_font (me)->find_by_name ("scripts.varsegno"));
-
-      if (str == "S")
-        m.add_stencil (segno);
-      else if (str == "S|:" || str == ".S|:")
-        {
-          m.add_at_edge (X_AXIS, RIGHT, thick, 0);
-          m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-          m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-          m.add_at_edge (X_AXIS, LEFT, segno, thinkern);
-        }
-      else if (str == ":|S" || str == ":|S.")
-        {
-          m.add_at_edge (X_AXIS, LEFT, thick, 0);
-          m.add_at_edge (X_AXIS, LEFT, thin, kern);
-          m.add_at_edge (X_AXIS, LEFT, colon, kern);
-          m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
-        }
-      else if (str == ":|S|:" || str == ":|S.|:")
-        {
-          m.add_at_edge (X_AXIS, LEFT, thick, 0);
-          m.add_at_edge (X_AXIS, LEFT, thin, kern);
-          m.add_at_edge (X_AXIS, LEFT, colon, kern);
-          m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
-          m.add_at_edge (X_AXIS, RIGHT, thick, thinkern);
-          m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-          m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-        }
-      else if (str == "|._.|") // :|S|: or :|S.|: without segno and colon
-        {
-          // get the width of the segno sign
-          Real segno_width = segno.extent (X_AXIS).length ();
-          m.add_at_edge (X_AXIS, LEFT, thick, 0);
-          m.add_at_edge (X_AXIS, LEFT, thin, kern);
-          m.add_at_edge (X_AXIS, RIGHT, thick, segno_width + 2 * thinkern);
-          m.add_at_edge (X_AXIS, RIGHT, thin, kern);
-        }
-      // end varsegno block
-    }
-  else if (str == ":")
-    {
-      if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
-        {
-          Interval staff_extent = staff->extent (staff, Y_AXIS);
-
-          /*
-            assume staff lines are disposed equally at unit space;
-            put a dot into each space within extent (may extend staff_extent).
-
-            staff_extent is an interval of two integers or two half-integers;
-            in the former case dots are to be placed at half-integers,
-            in the latter at integers.
-
-            these integers are not exact due to staff line thickness.
-          */
-          int const pos = int (rint (staff_extent.at (UP) * 2));
-          Real const correction = pos & 1 ? 0.0 : 0.5;
-
-          for (int i = int (rint (extent.at (DOWN) + (0.5 - correction))),
-               e = int (rint (extent.at (UP) + (0.5 - correction)));
-               i < e;
-               ++i)
-            {
-              Stencil d (dot);
-
-              d.translate_axis (i + correction, Y_AXIS);
-              m.add_stencil (d);
-            }
-        }
-    }
-  else if (str == "dashed")
-    m = dashed_bar_line (me, extent, hair);
-  else if (str == "'")
-    m = tick_bar_line (me, extent.at (UP), rounded);
-  else if (str == "kievan")
-   {
-    me->set_property ("layer", scm_from_int (1));
-    m.add_stencil (Font_interface::get_default_font (me)->find_by_name ("scripts.barline.kievan"));
-    m = *unsmob_stencil (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"), m.smobbed_copy ()));
-   }
-  return m;
-}
-
-Stencil
-Bar_line::simple_barline (Grob *me,
-                          Real w,
-                          Interval const &extent,
-                          bool rounded)
-{
-  Real blot
-    = rounded
-      ? me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"))
-      : 0.0;
-
-  return Lookup::round_filled_box (Box (Interval (0, w), extent), blot);
-}
-
-Stencil
-Bar_line::tick_bar_line (Grob *me, Real h, bool rounded)
-{
-  Real th = Staff_symbol_referencer::staff_space (me) / 2;
-  Real line_thick = Staff_symbol_referencer::line_thickness (me);
-
-  Real blot
-    = rounded
-      ? me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"))
-      : 0.0;
-
-  return Lookup::round_filled_box (Box (Interval (0, line_thick),
-                                        Interval (h - th, h + th)), blot);
-}
-
-Stencil
-Bar_line::dashed_bar_line (Grob *me, Interval const &extent, Real thick)
-{
-  Real dash_size
-    = 1.0 - robust_scm2double (me->get_property ("gap"), 0.3);
-  /*
-    this is a tad complex for what we want to achieve, but with a
-    simple line, the round blotting interferes with staff line
-    connections.
-  */
-  Real ss = Staff_symbol_referencer::staff_space (me);
-  Real const h = extent.length ();
-  int dashes = int (rint (h / ss));
-
-  /*
-    there are two concerns:
-    1. one dash plus one space should be one staff space
-    2. the line should begin and end with half a dash
-
-    both can be satisfied, if the extent is (roughly) an integer
-    multiple of staff space.
-  */
-  if (fabs (h / ss - dashes) < 0.1)
-    {
-      Real blot
-        = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
-
-      Real const half_dash = dash_size / 2;
-      Stencil bar;
-
-      for (int i = 0; i <= dashes; ++i)
-        {
-          Real top_y = extent.at (DOWN)
-                       + (i == dashes ? h : (i + half_dash) * ss);
-          Real bot_y = extent.at (DOWN) + (i ? (i - half_dash) * ss : 0.0);
-
-          bar.add_stencil (Lookup::round_filled_box (Box (Interval (0, thick),
-                                                          Interval (bot_y, top_y)),
-                                                     blot));
-        }
-      return bar;
-    }
-  else
-    {
-      /*
-        We have to scale the dashing so it starts and ends with half a
-        dash exactly.
-      */
-      Real total_dash_size = h / dashes;
-      Real factor = (dash_size - thick) / ss;
-
-      SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
-                           scm_from_double (thick),
-                           scm_from_double (factor * total_dash_size),
-                           scm_from_double ((1 - factor) * total_dash_size),
-                           scm_from_double (0),
-                           scm_from_double (h),
-                           scm_from_double (factor * total_dash_size * 0.5),
-                           SCM_UNDEFINED);
-
-      Box box;
-      box.add_point (Offset (0, 0));
-      box.add_point (Offset (0, h));
-
-      Stencil s (box, at);
-      s.translate (Offset (thick / 2, extent.at (DOWN)));
-      return s;
-    }
-  return Stencil ();
-}
-
-MAKE_SCHEME_CALLBACK (Bar_line, calc_anchor, 1)
-SCM
-Bar_line::calc_anchor (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  Real kern = robust_scm2double (me->get_property ("kern"), 1);
-  Real staffline = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
-  string str = robust_scm2string (me->get_property ("glyph-name"), "");
-
-  /* we put the anchor in the center of the barline, unless we are
-     a repeat bar, in which case we put the anchor in the center of
-     the barline without the dots. */
-  Interval ext = me->extent (me, X_AXIS);
-  if (ext.is_empty ())
-    return scm_from_double (0);
-
-  Real anchor = ext.center ();
-
-  Stencil dot = Font_interface::get_default_font (me)->find_by_name ("dots.dot");
-  Real dot_width = dot.extent (X_AXIS).length () + kern * staffline;
-  if (str == "|:")
-    anchor -= dot_width / 2;
-  else if (str == ":|")
-    anchor += dot_width / 2;
-
-  return scm_from_double (anchor);
-}
-
-ADD_INTERFACE (Bar_line,
-               "Bar line.\n"
-               "\n"
-               "Print a special bar symbol.  It replaces the regular bar"
-               " symbol with a special symbol.  The argument @var{bartype}"
-               " is a string which specifies the kind of bar line to print."
-               "  Options are @code{|}, @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:},"
-               " @code{:|.:}, @code{.}, @code{||}, @code{|.}, @code{.|}, @code{.|.},"
-               " @code{|.|}, @code{:}, @code{dashed}, @code{'} and @code{S}.\n"
-               "\n"
-               "These produce, respectively, a normal bar line, a right repeat, a left repeat,"
-               " a thick double repeat, a thin-thick-thin double repeat,"
-               " a thin-thick double repeat, a thick bar, a double bar, a start bar,"
-               " an end bar, a thick double bar, a thin-thick-thin bar,"
-               " a dotted bar, a dashed bar, a tick as bar line and a segno bar.\n"
-               "\n"
-               "In addition, there is an option"
-               " @code{||:} which is equivalent to @code{|:} except at line"
-               " breaks, where it produces a double bar (@code{||}) at the"
-               " end of the line and a repeat sign (@code{|:}) at the"
-               " beginning of the new line.\n"
-               "\n"
-               "For segno, @code{S} produces a segno sign except at line breaks,"
-               " where it produces a double bar (@code{||}) at the"
-               " end of the line and a segno sign at the beginning of the new line."
-               " @code{|S} is equivalent to @code{S} but produces a simple bar line"
-               " (@code{|}) instead of a double bar line (@code{||}) at line breaks."
-               " @code{S|} produces the segno sign at line breaks and starts the following"
-               " line without special bar lines.\n"
-               "\n"
-               "@code{S|:} and @code{:|S} are used for repeat/segno combinations that are"
-               " separated at line breaks.  Alternatively, @code{.S|:} and @code{:|S.}"
-               " may be used which combine repeat signs and segno at the same line in"
-               " case of a line break.  @code{:|S|:} is a combination of a left repeat"
-               " (@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which"
-               " splits before the segno at line breaks; @code{:|S.|:} splits after"
-               " the segno sign.\n"
-               "\n"
-               "If @var{bartype} is set to @code{empty} then nothing is"
-               " printed, but a line break is allowed at that spot.\n"
-               "\n"
-               "@code{gap} is used for the gaps in dashed bar lines.",
-
-               /* properties */
-               "allow-span-bar "
-               "gap "
-               "kern "
-               "thin-kern "
-               "hair-thickness "
-               "has-span-bar "
-               "thick-thickness "
-               "glyph "
-               "glyph-name "
-               "bar-extent "
-              );
index 29fb3f0bdc028ae3fdc86704c847530f829c5b7d..00c345771728f4e46a06ed75ce08c023b0740f1c 100644 (file)
@@ -23,7 +23,6 @@ using namespace std;
 
 #include "item.hh"
 #include "context.hh"
-#include "bar-line.hh"
 #include "staff-symbol-referencer.hh"
 #include "engraver.hh"
 #include "direction.hh"
index c5d8ea6dba83292624df491957c6a311c284154c..dad382a27a64d9c85612ad67d7e7f753daa8f166 100644 (file)
@@ -24,7 +24,6 @@ using namespace std;
 
 #include "item.hh"
 #include "context.hh"
-#include "bar-line.hh"
 #include "staff-symbol-referencer.hh"
 #include "engraver.hh"
 #include "direction.hh"
index c6ad98aa02984fb1b3d8f4c8eecd4c135d248387..6b915f5cb45114851b4a513730048dc6bfe126db 100644 (file)
@@ -19,7 +19,6 @@
 */
 
 #include "engraver.hh"
-#include "bar-line.hh"
 #include "item.hh"
 #include "note-head.hh"
 #include "pitch.hh"
index a6ed4571d2090ea25f7e1024e2b95956a0695b3b..ffb769e2e90f50583de9e00c6d3de88d6957ebc4 100644 (file)
@@ -57,8 +57,8 @@ LY_DEFINE (ly_make_duration, "ly:make-duration",
            " eighth note, etc.  The number of dots after the note is given by"
            " the optional argument @var{dotcount}.\n"
            "\n"
-           "The duration factor is optionally given by @var{num} and"
-           " @var{den}.\n"
+           "The duration factor is optionally given by integers @var{num} and"
+           " @var{den}, alternatively by a single rational number.\n"
            "\n"
            "A duration is a musical duration, i.e., a length of time"
            " described by a power of two (whole, half, quarter, etc.) and a"
@@ -74,17 +74,17 @@ LY_DEFINE (ly_make_duration, "ly:make-duration",
     }
 
   bool compress = false;
-  if (num != SCM_UNDEFINED)
+  if (!SCM_UNBNDP (num))
     {
-      LY_ASSERT_TYPE (scm_is_number, num, 3);
+      LY_ASSERT_TYPE (ly_is_rational, num, 3);
       compress = true;
     }
   else
     num = scm_from_int (1);
 
-  if (den != SCM_UNDEFINED)
+  if (!SCM_UNBNDP (den))
     {
-      LY_ASSERT_TYPE (scm_is_number, den, 4);
+      LY_ASSERT_TYPE (scm_is_integer, den, 4);
       compress = true;
     }
   else
@@ -92,7 +92,7 @@ LY_DEFINE (ly_make_duration, "ly:make-duration",
 
   Duration p (scm_to_int (length), dots);
   if (compress)
-    p = p.compressed (Rational (scm_to_int (num), scm_to_int (den)));
+    p = p.compressed (ly_scm2rational (scm_divide (num, den)));
 
   return p.smobbed_copy ();
 }
@@ -147,3 +147,16 @@ LY_DEFINE (ly_duration_factor, "ly:duration-factor",
   Rational r = unsmob_duration (dur)->factor ();
   return scm_cons (scm_from_int64 (r.num ()), scm_from_int64 (r.den ()));
 }
+
+// This is likely what ly:duration-factor should have been in the
+// first place.
+LY_DEFINE (ly_duration_scale, "ly:duration-scale",
+           1, 0, 0, (SCM dur),
+           "Extract the compression factor from @var{dur}."
+           "  Return it as a rational.")
+{
+  LY_ASSERT_SMOB (Duration, dur, 1);
+  Rational r = unsmob_duration (dur)->factor ();
+
+  return ly_rational2scm (r);
+}
index e56e02d27a40c2e709d4ba18ad72df086005a48c..81ff7864ff36b4b4ff972bb0fc3051d8700f60e5 100644 (file)
@@ -453,3 +453,16 @@ LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback",
   chain_callback (gr, proc, sym);
   return SCM_UNSPECIFIED;
 }
+
+LY_DEFINE (ly_grob_vertical_less_p, "ly:grob-vertical<?",
+           2, 0, 0, (SCM a, SCM b),
+           "Does @var{a} lie above @var{b} on the page?")
+{
+  LY_ASSERT_SMOB (Grob, a, 1);
+  LY_ASSERT_SMOB (Grob, b, 2);
+
+  Grob *ga = unsmob_grob (a);
+  Grob *gb = unsmob_grob (b);
+
+  return ly_bool2scm (Grob::vertical_less (ga, gb));
+}
index 3933bd8a3b458c23ed4282f2f9cd4f8cf0334c76..cacfb0f51c148968f015fec995ef17d742ba24b3 100644 (file)
@@ -20,7 +20,6 @@
 #include "hairpin.hh"
 
 #include "axis-group-interface.hh"
-#include "bar-line.hh"
 #include "dimensions.hh"
 #include "directional-element-interface.hh"
 #include "international.hh"
@@ -82,7 +81,7 @@ Hairpin::broken_bound_padding (SCM smob)
     {
       extract_grob_set (vertical_axis_groups[d], "elements", elts);
       for (vsize i = elts.size (); i--;)
-        if (Bar_line::has_interface (elts[i])
+        if (elts[i]->internal_has_interface (ly_symbol2scm ("bar-line-interface"))
             && dynamic_cast<Item *> (elts[i])->break_status_dir () == -1)
           {
             SCM hsb = elts[i]->get_property ("has-span-bar");
@@ -92,6 +91,7 @@ Hairpin::broken_bound_padding (SCM smob)
             span_bars[d] = unsmob_grob ((d == UP ? scm_car : scm_cdr) (hsb));
             break;
           }
+
       if (!span_bars[d])
         return scm_from_double (0.0);
     }
index 432cb0fd4a2be9e2e9c262bab9e6561834a57198..8f7b1a24dd0a0a9fe23bd04631ea17a88f92d757 100644 (file)
@@ -28,17 +28,6 @@ class Bar_line
 public:
   DECLARE_GROB_INTERFACE ();
 
-  static Stencil dashed_bar_line (Grob *me, Interval const &extent, Real thick);
-  static Stencil tick_bar_line (Grob *me, Real h, bool rounded);
-  static Stencil compound_barline (Grob *, string, Interval const &extent,
-                                   bool rounded);
-  static Stencil simple_barline (Grob *, Real wid, Interval const &extent,
-                                 bool rounded);
-  static Interval bar_y_extent (Grob *, Grob *);
   static bool non_empty_barline (Grob *me);
-
-  DECLARE_SCHEME_CALLBACK (calc_bar_extent, (SCM));
-  DECLARE_SCHEME_CALLBACK (print, (SCM));
-  DECLARE_SCHEME_CALLBACK (calc_anchor, (SCM));
 };
 #endif // BAR_LINE_HH
index ccc2538905c86dc7cdd4716a84002f09e631b647..b7d63a2e13e0f7d8b02ce519a3a0be7ffcf94ed3 100644 (file)
@@ -64,14 +64,16 @@ protected:
     Prob *prob;
     vector<Grob *> staves;
     vector<Real> min_offsets;
-    // Store the appropriate '*-*-spacing 'padding,
-    //  for spacing any adjacent loose line
+    // Store the appropriate '*-*-spacing 'padding, and skyline-distance,
+    //  considering indentation, from the previous system.
+    Real min_distance;
     Real padding;
 
-    Element (vector<Grob *> const &a, vector<Real> const &o, Real p)
+    Element (vector<Grob *> const &a, vector<Real> const &o, Real m, Real p)
     {
       staves = a;
       min_offsets = o;
+      min_distance = m;
       padding = p;
       prob = 0;
     }
diff --git a/lily/include/span-bar.hh b/lily/include/span-bar.hh
deleted file mode 100644 (file)
index 6ae9dc1..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  LilyPond is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  LilyPond is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SPAN_BAR_HH
-#define SPAN_BAR_HH
-
-#include "lily-proto.hh"
-#include "grob-interface.hh"
-
-/**
-   This is a barline that is spanned across other bar lines.  This is
-   the implementation of the long barlines that occur in orchestral
-   score and other multi-staff music.
-*/
-class Span_bar
-{
-public:
-
-  DECLARE_GROB_INTERFACE ();
-  static Interval get_spanned_interval (Grob *);
-  static void add_bar (Grob *, Grob *);
-  static void evaluate_glyph (Grob *);
-  static void notify_grobs_of_my_existence (Grob *);
-  DECLARE_SCHEME_CALLBACK (width, (SCM smob));
-  DECLARE_SCHEME_CALLBACK (print, (SCM));
-  DECLARE_SCHEME_CALLBACK (calc_glyph_name, (SCM));
-  DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM));
-  DECLARE_SCHEME_CALLBACK (center_on_spanned_callback, (SCM element));
-};
-
-#endif // SPAN_BAR_HH
index 6f1d9a374e4fb64fbffa24e5c5628e25026aee2d..5707b548b99f46e8923a99bd710115d06381e2e6 100644 (file)
@@ -17,7 +17,6 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "bar-line.hh"
 #include "clef.hh"
 #include "context.hh"
 #include "engraver.hh"
index 07bb33c6f7187979356d7e6ffac05cca3ba095a5..57b9a599678027aa95bde7c06854beeeb65893f8 100644 (file)
@@ -150,18 +150,14 @@ SCM (* scm_parse_error_handler) (void *);
 A              [a-zA-Z\200-\377]
 AA             {A}|_
 N              [0-9]
-AN             {AA}|{N}
 ANY_CHAR       (.|\n)
 PUNCT          [][()?!:'`]
 SPECIAL_CHAR           [&@]
 NATIONAL       [\001-\006\021-\027\031\036]
 TEX            {AA}|-|{PUNCT}|{NATIONAL}|{SPECIAL_CHAR}
-DASHED_WORD            {A}({AN}|-)*
-DASHED_KEY_WORD                \\{DASHED_WORD}
+WORD           {A}([-_]{A}|{A})*
+COMMAND                \\{WORD}
 
-
-
-ALPHAWORD      {A}+
 UNSIGNED       {N}+
 E_UNSIGNED     \\{N}+
 FRACTION       {N}+\/{N}+
@@ -171,8 +167,6 @@ WHITE               [ \n\t\f\r]
 HORIZONTALWHITE                [ \t]
 BLACK          [^ \n\t\f\r]
 RESTNAME       [rs]
-NOTECOMMAND    \\{A}+
-MARKUPCOMMAND  \\({A}|[-_])+
 LYRICS         ({AA}|{TEX})[^0-9 \t\n\r\f]*
 ESCAPED                [nt\\'"]
 EXTENDER       __
@@ -393,15 +387,25 @@ BOM_UTF8  \357\273\277
        error (_ ("end quote missing"));
        exit (1);
 }
+
+    /* Flex picks the longest matching pattern including trailing
+     * contexts.  Without the backup pattern, r-. does not trigger the
+     * {RESTNAME} rule but rather the {WORD}/[-_] rule coming later,
+     * needed for avoiding backup states.
+     */
+
+<chords,notes,figures>{RESTNAME}/[-_]  |  // pseudo backup rule
 <chords,notes,figures>{RESTNAME}       {
        char const *s = YYText ();
        yylval.scm = scm_from_locale_string (s);
        return RESTNAME;
 }
+<chords,notes,figures>q/[-_]   | // pseudo backup rule
 <chords,notes,figures>q        {
        return CHORD_REPETITION;
 }
 
+<chords,notes,figures>R/[-_]   | // pseudo backup rule
 <chords,notes,figures>R                {
        return MULTI_MEASURE_REST;
 }
@@ -476,11 +480,13 @@ BOM_UTF8  \357\273\277
 }
 
 <notes,figures>{
-       {ALPHAWORD}     {
+       {WORD}/[-_]     | // backup rule
+       {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
 
-       {NOTECOMMAND}   {
+       {COMMAND}/[-_]  | // backup rule
+       {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1); 
        }
        {FRACTION}      {
@@ -528,16 +534,13 @@ BOM_UTF8  \357\273\277
                yylval.scm =  scan_fraction (YYText ());
                return FRACTION;
        }
-       {UNSIGNED}/\/[^0-9] { // backup rule
-               yylval.scm = scm_c_read_string (YYText ());
-               return UNSIGNED;
-       }
        {UNSIGNED}/\/   | // backup rule
        {UNSIGNED}              {
                yylval.scm = scm_c_read_string (YYText ());
                return UNSIGNED;
        }
-       {NOTECOMMAND}   {
+       {COMMAND}/[-_]  | // backup rule
+       {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
        }
        {LYRICS} {
@@ -563,20 +566,18 @@ BOM_UTF8  \357\273\277
        }
 }
 <chords>{
-       {ALPHAWORD}     {
+       {WORD}/[-_]     | // backup rule
+       {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
-       {NOTECOMMAND}   {
+       {COMMAND}/[-_]  | // backup rule
+       {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
        }
        {FRACTION}      {
                yylval.scm =  scan_fraction (YYText ());
                return FRACTION;
        }
-       {UNSIGNED}/\/[^0-9] { // backup rule
-               yylval.scm = scm_c_read_string (YYText ());
-               return UNSIGNED;
-       }
        {UNSIGNED}/\/   | // backup rule
        {UNSIGNED}              {
                yylval.scm = scm_c_read_string (YYText ());
@@ -598,7 +599,7 @@ BOM_UTF8    \357\273\277
                return CHORD_CARET;
        }
        . {
-               return YYText ()[0]; // ALPHAWORD catches all multibyte.
+               return YYText ()[0]; // WORD catches all multibyte.
        }
 }
 
@@ -607,7 +608,8 @@ BOM_UTF8    \357\273\277
        \\score {
                return SCORE;
        }
-       {MARKUPCOMMAND} {
+       {COMMAND}/[-_]  | // backup rule
+       {COMMAND} {
                string str (YYText_utf8 () + 1);
 
                 int token_type = MARKUP_FUNCTION;
@@ -702,10 +704,12 @@ BOM_UTF8  \357\273\277
 }
 
 <INITIAL>{
-       {DASHED_WORD}   {
+       {WORD}/[-_]     | // backup rule
+       {WORD}  {
                return scan_bare_word (YYText_utf8 ());
        }
-       {DASHED_KEY_WORD}       {
+       {COMMAND}/[-_]  | // backup rule
+       {COMMAND}       {
                return scan_escaped_word (YYText_utf8 () + 1);
        }
 }
@@ -720,10 +724,6 @@ BOM_UTF8   \357\273\277
        yylval.scm = scm_c_read_string (YYText ());
        return REAL;
 }
--\.    { // backup rule
-       yylval.scm = scm_from_double (0.0);
-       return REAL;
-}
 
 {UNSIGNED}/\/  | // backup rule
 {UNSIGNED}     {
@@ -736,6 +736,8 @@ BOM_UTF8    \357\273\277
 
        return YYText ()[0];
 }
+
+-/\.   | // backup rule
 [*:=]          {
        char c = YYText ()[0];
 
@@ -836,12 +838,22 @@ Lily_lexer::push_markup_state ()
 void
 Lily_lexer::push_note_state (SCM alist)
 {
+       bool extra = (YYSTATE == extratoken);
+
        SCM p = scm_assq (alist, pitchname_tab_stack_);
 
+       if (extra)
+               yy_pop_state ();
+
        if (scm_is_false (p))
                p = scm_cons (alist, alist_to_hashq (alist));
        pitchname_tab_stack_ = scm_cons (p, pitchname_tab_stack_);
        yy_push_state (notes);
+
+       if (extra) {
+               hidden_state_ = YYSTATE;
+               yy_push_state (extratoken);
+       }
 }
 
 void
index 4f2cd630d21edbbd4ea7d141f6d84bcb352e04b2..25b19bd18a607b2ae34e50e9c7e677242dbcb922 100644 (file)
@@ -23,7 +23,6 @@ using namespace std;
 #include "engraver.hh"
 
 #include "axis-group-interface.hh"
-#include "bar-line.hh"
 #include "context.hh"
 #include "grob-array.hh"
 #include "international.hh"
index 9e5a828a602908badd83f5ef0ec8bfb73fa399e7..699ec7e89876049d379858b5dd287118f4266271 100644 (file)
@@ -74,7 +74,48 @@ Midi_track::add (int delta_ticks, Midi_item *midi)
   assert (delta_ticks >= 0);
 
   Midi_event *e = new Midi_event (delta_ticks, midi);
-  events_.push_back (e);
+
+  // Insertion position for the new event in the track.
+  vector<Midi_event *>::iterator position (events_.end ());
+  if (delta_ticks == 0
+      && (! dynamic_cast<Midi_note *> (midi)
+          || dynamic_cast<Midi_note_off *> (midi)))
+    {
+      // If the new event occurs at the same time as the most recently added
+      // one, and the event does not represent the start of a note, insert the
+      // new event before all notes (if any) already starting at this time.
+      // This is to force notes to be started only after all other events
+      // (such as changes in instruments) which occur at the same time have
+      // taken effect.
+      while (position != events_.begin ())
+        {
+          vector<Midi_event *>::iterator previous (position - 1);
+          if (! dynamic_cast<Midi_note *> ((*previous)->midi_)
+              || dynamic_cast<Midi_note_off *> ((*previous)->midi_))
+            {
+              // Found an event that does not represent the start of a note.
+              // Exit the loop to insert the new event in the track after this
+              // event.
+              break;
+            }
+          else if ((*previous)->delta_ticks_ != 0)
+            {
+              // Found the start of a new note with delta_ticks_ != 0.  Prepare
+              // to insert the new event before this event, swapping the
+              // delta_ticks_ fields of the events to keep the sequence of
+              // deltas consistent.
+              e->delta_ticks_ = (*previous)->delta_ticks_;
+              (*previous)->delta_ticks_ = 0;
+              position = previous;
+              break;
+            }
+          // Otherwise, the event in the track is the start of a note occurring
+          // at the same time as the new event: continue searching for the
+          // insertion position.
+          position = previous;
+        }
+    }
+  events_.insert (position, e);
 }
 
 string
index dd9b6da71ca8e658775e49f840bcf10311cbd49b..68f870b2dc7f19959e11ea859d036e49da009d8b 100644 (file)
@@ -583,8 +583,19 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
   spring_copy.ensure_min_distance (minimum_distance);
   springs_.push_back (spring_copy);
 
+  if (elts.size () && !is_spaceable (elts[0]))
+    {
+      // store the minimum distance, considering relative indents,
+      // for a loose line
+      Skyline first_skyline (UP);
+      Skyline_pair *sky = Skyline_pair::unsmob (elts[0]->get_property ("vertical-skylines"));
+      if (sky)
+        first_skyline.merge ((*sky)[UP]);
+      first_skyline.shift (indent);
+      minimum_distance = first_skyline.distance (bottom_skyline_) - bottom_loose_baseline_ ;
+    }
   bottom_skyline_ = down_skyline;
-  elements_.push_back (Element (elts, minimum_offsets, padding));
+  elements_.push_back (Element (elts, minimum_offsets, minimum_distance, padding));
 
   // Add the springs for the VerticalAxisGroups in this system.
 
@@ -840,7 +851,7 @@ Page_layout_problem::find_system_offsets ()
                   found_spaceable_staff = true;
                   spring_idx++;
                 }
-              else
+              else // ! is_spaceable
                 {
                   if (loose_lines.empty ())
                     loose_lines.push_back (last_spaceable_line);
@@ -859,16 +870,14 @@ Page_layout_problem::find_system_offsets ()
                         {
                           // distance to the final line in the preceding system,
                           // including 'system-system-spacing 'padding
-                          min_dist = (Axis_group_interface::minimum_distance (loose_lines.back (),
-                                                                              staff, Y_AXIS)
-                                      + elements_[i].padding);
+                          min_dist = elements_[i].min_distance + elements_[i].padding;
                           // A null line to break any staff-affinity for the previous system
                           loose_line_min_distances.push_back (0.0);
                           loose_lines.push_back (0);
                         }
                       else if (!last_title_extent.is_empty ())
                         // distance to the preceding title,
-                        //  including 'markup-system-spacing 'padding
+                        //  including 'markup-system-wg 'padding
                         min_dist = (staff->extent (staff, Y_AXIS)[UP] - last_title_extent[DOWN]
                                     + elements_[i].padding);
                       else // distance to the top margin
index a9b73280f41e0ce15435c3101e344bb84fc3534c..fc9aea63be73c95966a31ebe207b12228fdff2bf 100644 (file)
@@ -29,9 +29,6 @@
 
 %{
 
-#define YYDEBUG 1
-#define YYERROR_VERBOSE 1
-
 #define yyerror Lily_parser::parser_error
 
 /* We use custom location type: Input objects */
@@ -44,6 +41,8 @@
 
 %parse-param {Lily_parser *parser}
 %lex-param {Lily_parser *parser}
+%error-verbose
+%debug
 
 /* We use SCMs to do strings, because it saves us the trouble of
 deleting them.  Let's hope that a stack overflow doesn't trigger a move
@@ -406,6 +405,7 @@ If we give names, Bison complains.
 %type <scm> music_arg
 %type <scm> music_assign
 %type <scm> music_embedded
+%type <scm> music_or_context_def
 %type <scm> complex_music
 %type <scm> complex_music_prefix
 %type <scm> mode_changed_music
@@ -496,7 +496,6 @@ If we give names, Bison complains.
 %type <scm> identifier_init
 %type <scm> lilypond
 %type <scm> lilypond_header
-%type <scm> lilypond_header_body
 %type <scm> lyric_element
 %type <scm> lyric_element_arg
 %type <scm> lyric_element_music
@@ -587,8 +586,10 @@ lilypond:  /* empty */ { }
 
 
 toplevel_expression:
-       lilypond_header {
-               parser->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $1);
+       {
+               parser->lexer_->add_scope (get_header (parser));
+       } lilypond_header {
+               parser->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $2);
        }
        | book_block {
                Book *book = $1;
@@ -720,10 +721,7 @@ embedded_lilypond:
 
 
 lilypond_header_body:
-       {
-               $$ = get_header (parser);
-               parser->lexer_->add_scope ($$);
-       }
+       /* empty */
        | lilypond_header_body assignment  {
 
        }
@@ -889,7 +887,7 @@ book_body:
                $$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
                $$->paper_->unprotect ();
                push_paper (parser, $$->paper_);
-               $$->header_ = parser->lexer_->lookup_identifier ("$defaultheader");
+               $$->header_ = get_header (parser);
                parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$->self_scm ());
        }
        | BOOK_IDENTIFIER {
@@ -928,9 +926,10 @@ book_body:
                SCM proc = parser->lexer_->lookup_identifier ("book-text-handler");
                scm_call_2 (proc, $$->self_scm (), $2);
        }
-       | book_body lilypond_header {
-               $$->header_ = $2;
-       }
+       | book_body
+       {
+               parser->lexer_->add_scope ($1->header_);
+       } lilypond_header
        | book_body embedded_scm { }
        | book_body error {
                $$->paper_ = 0;
@@ -981,9 +980,12 @@ bookpart_body:
                SCM proc = parser->lexer_->lookup_identifier ("bookpart-text-handler");
                scm_call_2 (proc, $$->self_scm (), $2);
        }
-       | bookpart_body lilypond_header {
-               $$->header_ = $2;
-       }
+       | bookpart_body
+       {
+               if (!ly_is_module ($1->header_))
+                       $1->header_ = ly_make_module (false);
+               parser->lexer_->add_scope ($1->header_);
+       } lilypond_header
        | bookpart_body embedded_scm { }
        | bookpart_body error {
                $$->paper_ = 0;
@@ -1013,9 +1015,12 @@ score_body:
                $$->protect ();
                $$->origin ()->set_spot (@$);
        }
-       | score_body lilypond_header    {
-               $$->set_header ($2);
-       }
+       | score_body
+       {
+               if (!ly_is_module ($1->get_header ()))
+                       $1->set_header (ly_make_module (false));
+               parser->lexer_->add_scope ($1->get_header ());
+       } lilypond_header
        | score_body output_def {
                if ($2->lookup_variable (ly_symbol2scm ("is-paper")) == SCM_BOOL_T)
                {
@@ -1086,6 +1091,25 @@ output_def_head_with_mode_switch:
        }
        ;
 
+// We need this weird nonterminal because both music as well as a
+// context definition can start with \context and the difference is
+// only apparent after looking at the next token.  If it is '{', there
+// is still time to escape from notes mode.
+
+music_or_context_def:
+       music_arg
+       {
+               parser->lexer_->pop_state ();
+       }
+       | CONTEXT
+       {
+               parser->lexer_->pop_state ();
+       } '{' context_def_spec_body '}'
+       {
+               $$ = $4;
+       }
+       ;
+
 output_def_body:
        output_def_head_with_mode_switch '{' {
                $$ = $1;
@@ -1104,12 +1128,21 @@ output_def_body:
        | output_def_body assignment  {
 
        }
-       | output_def_body context_def_spec_block        {
-               assign_context_def ($$, $2);
-       }
-       | output_def_body music_arg {
-               SCM proc = parser->lexer_->lookup_identifier ("output-def-music-handler");
-               scm_call_3 (proc, parser->self_scm (), $1->self_scm (), $2);
+       | output_def_body
+       {
+               SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+               parser->lexer_->push_note_state (nn);
+       } music_or_context_def
+       {
+               if (unsmob_context_def ($3))
+                       assign_context_def ($$, $3);
+               else {
+
+                       SCM proc = parser->lexer_->lookup_identifier
+                                    ("output-def-music-handler");
+                       scm_call_3 (proc, parser->self_scm (),
+                                   $1->self_scm (), $3);
+               }
        }
        | output_def_body error {
 
index dc22f904844af91e488aea7eacb03e7ed558abf2..09c846f8968c1c9897d040e1740555da145a70b0 100644 (file)
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "bar-line.hh"
 #include "item.hh"
-#include "span-bar.hh"
 #include "engraver.hh"
+#include "pointer-group-interface.hh"
 
 /**
 
@@ -54,7 +53,7 @@ void
 Span_bar_engraver::acknowledge_bar_line (Grob_info i)
 {
   int depth = i.origin_contexts (this).size ();
-  if (depth && !Span_bar::has_interface (i.grob ()))
+  if (depth && !i.grob ()->internal_has_interface (ly_symbol2scm ("span-bar-interface")))
     {
       Item *it = dynamic_cast<Item *> (i.grob ());
       bars_.push_back (it);
@@ -73,7 +72,7 @@ Span_bar_engraver::process_acknowledged ()
 
       spanbar_->set_parent (bars_[0], X_AXIS);
       for (vsize i = 0; i < bars_.size (); i++)
-        Span_bar::add_bar (spanbar_, bars_[i]);
+        Pointer_group_interface::add_grob (spanbar_, ly_symbol2scm ("elements"), bars_[i]);
       make_spanbar_ = false;
     }
 }
@@ -87,7 +86,7 @@ Span_bar_engraver::stop_translation_timestep ()
       SCM vis = bars_[0]->internal_get_property (vissym);
       if (ly_is_equal (spanbar_->internal_get_property (vissym), vis))
         spanbar_->set_property (vissym, vis);
-      Span_bar::notify_grobs_of_my_existence (spanbar_);
+      scm_call_1 (ly_lily_module_constant ("span-bar::notify-grobs-of-my-existence"), spanbar_->self_scm ());
       spanbar_ = 0;
     }
   bars_.resize (0);
index 11f1137f2f28278f679b807e558d609831ca9f2e..10d97241bde43c0563d749074c845eb4ca54fcec 100644 (file)
 #include <algorithm>
 
 #include "align-interface.hh"
-#include "bar-line.hh"
 #include "context.hh"
 #include "grob.hh"
 #include "item.hh"
 #include "pointer-group-interface.hh"
-#include "span-bar.hh"
 #include "engraver.hh"
 
 /*
diff --git a/lily/span-bar.cc b/lily/span-bar.cc
deleted file mode 100644 (file)
index 5652313..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
-  This file is part of LilyPond, the GNU music typesetter.
-
-  Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-  LilyPond is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  LilyPond is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "span-bar.hh"
-
-#include "font-interface.hh"
-#include "dimensions.hh"
-#include "output-def.hh"
-#include "stencil.hh"
-#include "warn.hh"
-#include "axis-group-interface.hh"
-#include "bar-line.hh"
-#include "grob.hh"
-#include "pointer-group-interface.hh"
-#include "staff-symbol-referencer.hh"
-
-void
-Span_bar::add_bar (Grob *me, Grob *b)
-{
-  Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), b);
-}
-
-MAKE_SCHEME_CALLBACK (Span_bar, print, 1);
-
-/* Limitations/Bugs:
-
-(1) Elements from 'me->get_object ("elements")' must be
-ordered according to their y coordinates relative to their common
-axis group parent.  Otherwise, the computation goes mad.
-
-(2) This method depends on bar_engraver not being removed from
-staff context.  If bar_engraver is removed, the size of the staff
-lines is evaluated as 0, which results in a solid span bar line
-with faulty y coordinate. */
-
-/* This routine was originally by Juergen Reuter, but it was a on the
-   bulky side. Rewritten by Han-Wen. */
-SCM
-Span_bar::print (SCM smobbed_me)
-{
-  Grob *me = unsmob_grob (smobbed_me);
-  extract_grob_set (me, "elements", elements);
-  Grob *refp = common_refpoint_of_array (elements, me, Y_AXIS);
-
-  SCM glyph = me->get_property ("glyph-name");
-
-  /* glyph may not be a string, when ME is killed by Hara Kiri in
-     between. */
-  if (!scm_is_string (glyph))
-    return SCM_EOL;
-
-  string glyph_string = ly_scm2string (glyph);
-
-  /* compose span_bar_mol */
-  vector<Interval> extents;
-  vector<bool> make_span_bar;
-  Grob *model_bar = 0;
-  for (vsize i = elements.size (); i--;)
-    {
-      Grob *bar = elements[i];
-      Interval ext = Bar_line::bar_y_extent (bar, refp);
-      if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (bar))
-        ext.unite (staff->extent (refp, Y_AXIS));
-      if (ext.is_empty ())
-        continue;
-
-      extents.push_back (ext);
-      make_span_bar.push_back (to_boolean (bar->get_property ("allow-span-bar")));
-      model_bar = bar;
-    }
-
-  if (!model_bar)
-    model_bar = me;
-
-  // Fixes problem with disappearing span bars when alignAboveContext is active
-  vector_sort (extents, Interval::left_less);
-
-  Stencil span_bar;
-  for (vsize i = 1; i < extents.size (); i++)
-    {
-      Interval prev_extent = extents[i - 1];
-      Interval ext = extents[i];
-      if (!prev_extent.is_empty ())
-        {
-          Interval l (prev_extent [UP],
-                      ext[DOWN]);
-
-          if (l.is_empty () || !make_span_bar[i])
-            {
-              /* There is overlap between the bar lines.  Do nothing. */
-            }
-          else
-            {
-              Stencil interbar = Bar_line::compound_barline (model_bar,
-                                                             glyph_string,
-                                                             l,
-                                                             false);
-              span_bar.add_stencil (interbar);
-            }
-        }
-      prev_extent = ext;
-    }
-
-  span_bar.translate_axis (- me->relative_coordinate (refp, Y_AXIS),
-                           Y_AXIS);
-
-  return span_bar.smobbed_copy ();
-}
-
-MAKE_SCHEME_CALLBACK (Span_bar, width, 1);
-SCM
-Span_bar::width (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  SCM gn = me->get_property ("glyph-name");
-  if (!me->is_live ())
-    return ly_interval2scm (Interval ());
-
-  string gl = ly_scm2string (gn);
-
-  /*
-    urg.
-  */
-  Stencil m
-    = Bar_line::compound_barline (me, gl, Interval (-20 PT, 20 PT), false);
-
-  return ly_interval2scm (m.extent (X_AXIS));
-}
-
-MAKE_SCHEME_CALLBACK (Span_bar, before_line_breaking, 1);
-SCM
-Span_bar::before_line_breaking (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "elements", elements);
-  if (elements.empty ())
-    me->suicide ();
-
-  return SCM_UNSPECIFIED;
-}
-
-MAKE_SCHEME_CALLBACK (Span_bar, center_on_spanned_callback, 1);
-
-SCM
-Span_bar::center_on_spanned_callback (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  Interval i (get_spanned_interval (me));
-
-  /* Bar_line::print delivers a barline of y-extent (-h/2, h/2), so
-     we have to translate ourselves to be in the center of the
-     interval that we span. */
-  if (i.is_empty ())
-    {
-      me->suicide ();
-      return scm_from_double (0.0);
-    }
-
-  return scm_from_double (i.center ());
-}
-
-MAKE_SCHEME_CALLBACK (Span_bar, calc_glyph_name, 1);
-SCM
-Span_bar::calc_glyph_name (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "elements", elements);
-  SCM gl = SCM_EOL;
-  for (vsize i = elements.size ();
-       i-- && !scm_is_string (gl);)
-    gl = elements[i]->get_property ("glyph-name");
-
-  if (!scm_is_string (gl))
-    {
-      me->suicide ();
-      return SCM_UNSPECIFIED;
-    }
-
-  string type = ly_scm2string (gl);
-  if (type == "|:" || type == "||:")
-    type = ".|";
-  else if (type == ":|")
-    type = "|.";
-  else if (type == ":|:")
-    type = ".|.";
-  else if (type == ":|.|:")
-    type = "|.|";
-  else if (type == ":|.:")
-    type = "|.";
-  else if (type == "S" || type == "S|" || type == "|S")
-    type = "||";
-  else if (type == "S|:" || type == ".S|:")
-    type = ".|";
-  else if (type == ":|S" || type == ":|S.")
-    type = "|.";
-  else if (type == ":|S|:" || type == ":|S.|:")
-    type = "|._.|";
-  else if (type == "'")
-    type = "";
-
-  return ly_string2scm (type);
-}
-
-void
-Span_bar::notify_grobs_of_my_existence (Grob *me)
-{
-  extract_grob_set (me, "elements", elts);
-  vector<Grob *> sortable (elts.begin (), elts.end ());
-  vector_sort (sortable, Grob::vertical_less);
-  for (vsize i = 0; i < sortable.size (); i++)
-    sortable[i]->set_property ("has-span-bar",
-                               scm_cons (i != sortable.size () - 1 ? me->self_scm () : scm_from_bool (false),
-                                         i != 0 ? me->self_scm () : scm_from_bool (false)));
-}
-
-Interval
-Span_bar::get_spanned_interval (Grob *me)
-{
-  return ly_scm2interval (Axis_group_interface::generic_group_extent (me, Y_AXIS));
-}
-
-ADD_INTERFACE (Span_bar,
-               "A bar line that is spanned between other barlines.  This"
-               " interface is used for bar lines that connect different"
-               " staves.",
-
-               /* properties */
-               "glyph-name "
-               "elements "
-               "pure-Y-common "
-               "pure-relevant-grobs "
-               "pure-relevant-items "
-               "pure-relevant-spanners "
-              );
-
index 90d43f6b141afac6d772f6f64fd7ea735304494a..77dc986cfe8dd4fed779c32da03d8c57e0ee523d 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include <map>
+#include <deque>
 
 #include "audio-column.hh"
 #include "audio-item.hh"
@@ -58,6 +59,7 @@ private:
   Audio_text *instrument_name_;
   Audio_text *name_;
   Audio_tempo *tempo_;
+  map<string, deque<Audio_note *> > note_map_;
   map<string, Audio_staff *> staff_map_;
   map<string, int> channel_map_;
   map<string, Audio_dynamic *> dynamic_map_;
@@ -192,6 +194,22 @@ Staff_performer::stop_translation_timestep ()
   tempo_ = 0;
   instrument_name_ = 0;
   instrument_ = 0;
+  // For each voice with a note played in the current translation time step,
+  // check if the voice has an Audio_dynamic registered: if yes, apply this
+  // dynamic to every note played in the voice in the current translation time
+  // step.
+  for (map<string, deque<Audio_note *> >::iterator vi = note_map_.begin ();
+       vi != note_map_.end (); ++vi)
+    {
+      Audio_dynamic *d = get_dynamic (vi->first);
+      if (d)
+        {
+          for (deque<Audio_note *>::iterator ni = vi->second.begin ();
+               ni != vi->second.end (); ++ni)
+            (*ni)->dynamic_ = d;
+        }
+    }
+  note_map_.clear ();
 }
 
 void
@@ -290,15 +308,19 @@ Staff_performer::acknowledge_audio_element (Audio_element_info inf)
       bool encode_dynamics_as_velocity_ = true;
       if (encode_dynamics_as_velocity_)
         {
-          if (Audio_dynamic *d = dynamic_cast<Audio_dynamic *> (inf.elem_))
+          if (Audio_note *n = dynamic_cast<Audio_note *> (inf.elem_))
+            {
+              // Keep track of the notes played in the current voice in this
+              // translation time step (for adjusting their dynamics later in
+              // stop_translation_timestep).
+              note_map_[voice].push_back (n);
+            }
+          else if (Audio_dynamic *d = dynamic_cast<Audio_dynamic *> (inf.elem_))
             {
               dynamic_map_[voice] = d;
               // Output volume as velocity: must disable Midi_dynamic output
               d->silent_ = true;
             }
-          if (Audio_dynamic *d = get_dynamic (voice))
-            if (Audio_note *n = dynamic_cast<Audio_note *> (inf.elem_))
-              n->dynamic_ = d;
         }
       Audio_staff *audio_staff = get_audio_staff (voice);
       audio_staff->add_audio_item (ai);
index d348b10fd7347699ade91628563da97068423f6a..49f42ea4a6d3e4caa98f3c8b75a795825bbf5f7d 100644 (file)
@@ -26,7 +26,6 @@ using namespace std;
 #include "paper-column.hh"
 #include "separation-item.hh"
 #include "warn.hh"
-#include "bar-line.hh"
 #include "staff-symbol-referencer.hh"
 #include "note-column.hh"
 #include "stem.hh"
@@ -75,7 +74,8 @@ Staff_spacing::bar_y_positions (Grob *bar_grob)
 {
   Interval bar_size;
   bar_size.set_empty ();
-  if (Bar_line::has_interface (bar_grob))
+
+  if (bar_grob->internal_has_interface (ly_symbol2scm ("bar-line-interface")))
     {
       SCM glyph = bar_grob->get_property ("glyph-name");
       Grob *staff_sym = Staff_symbol_referencer::get_staff_symbol (bar_grob);
index 520a1225c4be95a0cea3ff483d88dbf9b6bcd068..97f14fdce03b0e6f88aecac0be7ccc4491e0938f 100644 (file)
@@ -20,7 +20,6 @@
 #include "context.hh"
 #include "paper-column.hh"
 #include "align-interface.hh"
-#include "span-bar.hh"
 #include "axis-group-interface.hh"
 #include "engraver.hh"
 #include "spanner.hh"
index f4dc48bf642c699ea01b8ae5ae3f35fafbf528bd..882359621ab63ea6ffa4276dc16648ca5e626a7b 100644 (file)
@@ -20,7 +20,6 @@
 #include "engraver.hh"
 
 #include "axis-group-interface.hh"
-#include "bar-line.hh"
 #include "context.hh"
 #include "grob-array.hh"
 #include "international.hh"
index 95bf9ce08a02db560bbd0f284615ddf7eaaa5a52..9544346db3f690a06a1a1ece67b3f4f244f3f908 100644 (file)
@@ -18,7 +18,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.15.18"
+\version "2.15.42"
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -36,7 +36,7 @@ acciaccatura =
    (_i "Create an acciaccatura from the following music expression"))
 
 %% keep these two together
-"instrument-definitions" = #'()
+instrument-definitions = #'()
 addInstrumentDefinition =
 #(define-void-function
    (parser location name lst) (string? list?)
index a003a1e4921de89a27d6fe97c75215c801d6a82b..7169452e16c382de5c9faefc16923b99a41dd8db 100644 (file)
@@ -15,7 +15,7 @@
 %%%% You should have received a copy of the GNU General Public License
 %%%% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
-\version "2.15.16"
+\version "2.15.42"
 
 %%  A stringTuning is a list of pitches ordered by string number
 %%  from 1 to N.
@@ -87,5 +87,5 @@ for documentation purposes.")
 defaultStringTunings = #(reverse! defaultStringTunings)
 
 %% convert 5-string banjo tuning to 4-string by removing the 5th string
-"four-string-banjo" = #(lambda (tuning)
+four-string-banjo = #(lambda (tuning)
                         (take tuning 4))
index 7b004468a91abdb192be3aa691851ac3e34a82d8..406e39c67e77ebe63ebc5dc9e4ff4858cda02a39 100644 (file)
@@ -33,13 +33,13 @@ bookTitleMarkup = \markup {
     \fill-line { \fromproperty #'header:dedication }
     \override #'(baseline-skip . 3.5)
     \column {
-      \huge \larger \bold
       \fill-line {
-        \larger \fromproperty #'header:title
+        \huge \larger \larger \bold
+        \fromproperty #'header:title
       }
       \fill-line {
-        \large \smaller \bold
-        \larger \fromproperty #'header:subtitle
+        \large \bold
+        \fromproperty #'header:subtitle
       }
       \fill-line {
         \smaller \bold
index 69a863bdc89a6902482a0286e3220d4e6de1d696..5c5e1efe3e0a171d74607787988e0a3e289c96b1 100644 (file)
@@ -75,6 +75,8 @@ endif
 
 TEXINPUTS=$(top-src-dir)/tex/::
 export TEXINPUTS
+TEXFONTMAPS=$(top-build-dir)/tex/$(outdir)::
+export TEXFONTMAPS
 
 export LYDOC_LOCALEDIR:= $(top-build-dir)/Documentation/po/out-www
 
index 74ba9f67d9455afba614e8652d7f4e00f36cb62d..2da2f150918b37ff18ce1de15ee85f5d2628fe78 100644 (file)
@@ -13,6 +13,7 @@ ATVARIABLES = \
   MICRO_VERSION\
   MAJOR_VERSION\
   MINOR_VERSION\
+  NCSB_DIR\
   PACKAGE\
   PATCH_LEVEL\
   PATHSEP\
index 4a766f3554bca28bdc599de37f0bdefad3213f89..aef132aee13bf06e7e5566c12bb793f74c4d6362 100644 (file)
@@ -6,31 +6,44 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.41\n"
+"Project-Id-Version: lilypond 2.15.42\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2012-07-05 20:10+0200\n"
+"POT-Creation-Date: 2012-08-02 18:31+0100\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"
-"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: fontextract.py:25
+#: book_base.py:26
 #, python-format
-msgid "Scanning %s"
+msgid "file not found: %s"
 msgstr ""
 
-#: fontextract.py:70
+#: book_base.py:164
+msgid "Output function not implemented"
+msgstr ""
+
+#: book_latex.py:170
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr ""
+
+#: book_latex.py:188
 #, python-format
-msgid "Extracted %s"
+msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr ""
 
-#: fontextract.py:85
+#: book_latex.py:209 book_texinfo.py:228
+msgid "Unable to auto-detect default settings:\n"
+msgstr ""
+
+#: book_latex.py:221 book_texinfo.py:240
 #, python-format
-msgid "Writing fonts to %s"
+msgid ""
+"Unable to auto-detect default settings:\n"
+"%s"
 msgstr ""
 
 #: book_snippets.py:409
@@ -101,6 +114,14 @@ msgid ""
 "printing diff against existing file."
 msgstr ""
 
+#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
+#. used to detect relative/absolute paths, so the absolute path is not
+#. detected as such and this command fails:
+#: book_texinfo.py:206
+#, python-format
+msgid "Running texi2pdf on file %s to detect default page settings.\n"
+msgstr ""
+
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s."
@@ -749,13 +770,19 @@ msgstr ""
 msgid "beamExceptions controls whole-measure beaming."
 msgstr ""
 
-#: book_base.py:26
+#: fontextract.py:25
 #, python-format
-msgid "file not found: %s"
+msgid "Scanning %s"
 msgstr ""
 
-#: book_base.py:164
-msgid "Output function not implemented"
+#: fontextract.py:70
+#, python-format
+msgid "Extracted %s"
+msgstr ""
+
+#: fontextract.py:85
+#, python-format
+msgid "Writing fonts to %s"
 msgstr ""
 
 #: lilylib.py:96
@@ -847,298 +874,378 @@ msgstr ""
 msgid "Unable to find instrument for ID=%s\n"
 msgstr ""
 
-#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
-#. used to detect relative/absolute paths, so the absolute path is not
-#. detected as such and this command fails:
-#: book_texinfo.py:206
+#: abc2ly.py:1376 convert-ly.py:81 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
-msgid "Running texi2pdf on file %s to detect default page settings.\n"
-msgstr ""
-
-#: book_texinfo.py:228 book_latex.py:209
-msgid "Unable to auto-detect default settings:\n"
+msgid "%s [OPTION]... FILE"
 msgstr ""
 
-#: book_texinfo.py:240 book_latex.py:221
+#: abc2ly.py:1377
 #, python-format
 msgid ""
-"Unable to auto-detect default settings:\n"
-"%s"
+"abc2ly converts ABC music files (see\n"
+"%s) to LilyPond input.\n"
 msgstr ""
 
-#: book_latex.py:170
-msgid "cannot find \\begin{document} in LaTeX document"
+#: abc2ly.py:1385 convert-ly.py:88 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:174
+msgid "show version number and exit"
 msgstr ""
 
-#: book_latex.py:188
-#, python-format
-msgid "Running `%s' on file `%s' to detect default page settings.\n"
+#: abc2ly.py:1388 convert-ly.py:92 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:153
+msgid "show this help and exit"
 msgstr ""
 
-#: musicxml2ly.py:228
-#, python-format
-msgid ""
-"Encountered file created by %s, containing wrong beaming information. All "
-"beaming information in the MusicXML file will be ignored"
+#: abc2ly.py:1391 etf2ly.py:1209 midi2ly.py:1071
+msgid "write output to FILE"
 msgstr ""
 
-#: musicxml2ly.py:247 musicxml2ly.py:249
-#, python-format
-msgid "Unprocessed PartGroupInfo %s encountered"
+#: abc2ly.py:1394
+msgid "be strict about success"
 msgstr ""
 
-#: musicxml2ly.py:500
-#, python-format
-msgid "Encountered note at %s without type and duration (=%s)"
+#: abc2ly.py:1397
+msgid "preserve ABC's notion of beams"
 msgstr ""
 
-#: musicxml2ly.py:520
-#, python-format
+#: abc2ly.py:1400
+msgid "suppress progress messages"
+msgstr ""
+
+#. Translators, please translate this string as
+#. "Report bugs in English via %s",
+#. or if there is a LilyPond users list or forum in your language
+#. "Report bugs in English via %s or in YOUR_LANG via URI"
+#: abc2ly.py:1403 convert-ly.py:146 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:285
+#, c-format, python-format
+msgid "Report bugs via %s"
+msgstr ""
+
+#: convert-ly.py:46
 msgid ""
-"Encountered rational duration with denominator %s, unable to convert to "
-"lilypond duration"
+"Update LilyPond input to newer version.  By default, update from the\n"
+"version taken from the \\version command, to the current LilyPond version."
 msgstr ""
 
-#: musicxml2ly.py:767
-msgid "Unable to extract key signature!"
+#: convert-ly.py:48 lilypond-book.py:82
+msgid "Examples:"
 msgstr ""
 
-#: musicxml2ly.py:794
+#: convert-ly.py:75 etf2ly.py:1191 lilypond-book.py:115 midi2ly.py:81
 #, python-format
-msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
+msgid "Copyright (c) %s by"
 msgstr ""
 
-#: musicxml2ly.py:932
-#, python-format
-msgid "Encountered unprocessed marker %s\n"
+#: convert-ly.py:77 etf2ly.py:1193 lilypond-book.py:117 midi2ly.py:83
+msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: musicxml2ly.py:1026
-#, python-format
-msgid "unknown span event %s"
+#: convert-ly.py:78 etf2ly.py:1194 lilypond-book.py:118 midi2ly.py:84
+msgid "It comes with NO WARRANTY."
 msgstr ""
 
-#: musicxml2ly.py:1036
-#, python-format
-msgid "unknown span type %s for %s"
+#: convert-ly.py:96 convert-ly.py:137
+msgid "VERSION"
 msgstr ""
 
-#: musicxml2ly.py:1456
-msgid "Unknown metronome mark, ignoring"
+#: convert-ly.py:98
+msgid "start from VERSION [default: \\version found in file]"
 msgstr ""
 
-#. TODO: Implement the other (more complex) way for tempo marks!
-#: musicxml2ly.py:1461
-msgid ""
-"Metronome marks with complex relations (<metronome-note> in MusicXML) are "
-"not yet implemented."
+#: convert-ly.py:101
+msgid "edit in place"
 msgstr ""
 
-#: musicxml2ly.py:1663
-#, python-format
-msgid "Unable to convert chord type %s to lilypond."
+#: convert-ly.py:105 lilypond-book.py:179 musicxml2ly.py:2627
+msgid ""
+"Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
+"(default), DEBUG)"
 msgstr ""
 
-#: musicxml2ly.py:1816
-#, python-format
-msgid "drum %s type unknown, please add to instrument_drumtype_dict"
+#: convert-ly.py:107 lilypond-book.py:163 lilypond-book.py:181
+#: musicxml2ly.py:2629 main.cc:167
+msgid "LOGLEVEL"
 msgstr ""
 
-#: musicxml2ly.py:1820
-msgid "cannot find suitable event"
+#: convert-ly.py:113
+msgid "do not add \\version command if missing"
 msgstr ""
 
-#: musicxml2ly.py:1968
+#: convert-ly.py:119
 #, python-format
-msgid "Negative skip %s (from position %s to %s)"
+msgid "force updating \\version number to %s"
 msgstr ""
 
-#: musicxml2ly.py:2109
+#: convert-ly.py:125
+msgid "only update \\version number if file is modified"
+msgstr ""
+
+#: convert-ly.py:131
 #, python-format
-msgid "Negative skip found: from %s to %s, difference is %s"
+msgid "show rules [default: -f 0, -t %s]"
 msgstr ""
 
-#: musicxml2ly.py:2190
+#: convert-ly.py:136
 #, python-format
-msgid "unexpected %s; expected %s or %s or %s"
+msgid "convert to VERSION [default: %s]"
 msgstr ""
 
-#: musicxml2ly.py:2296
-msgid "Encountered closing slur, but no slur is open"
+#: convert-ly.py:141 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
+#: main.cc:176
+msgid "show warranty and copyright"
 msgstr ""
 
-#: musicxml2ly.py:2299
-msgid "Cannot have two simultaneous (closing) slurs"
+#: convert-ly.py:186
+msgid "Applying conversion: "
 msgstr ""
 
-#: musicxml2ly.py:2308
-msgid "Cannot have a slur inside another slur"
+#: convert-ly.py:202
+msgid "Error while converting"
 msgstr ""
 
-#: musicxml2ly.py:2311
-msgid "Cannot have two simultaneous slurs"
+#: convert-ly.py:204
+msgid "Stopping at last successful rule"
 msgstr ""
 
-#: musicxml2ly.py:2445
+#: convert-ly.py:231
 #, python-format
-msgid "cannot simultaneously have more than one mode: %s"
+msgid "Processing `%s'... "
 msgstr ""
 
-#: musicxml2ly.py:2553
-msgid "Converting to LilyPond expressions..."
+#: convert-ly.py:338
+#, python-format
+msgid "%s: Unable to open file"
 msgstr ""
 
-#: musicxml2ly.py:2564
-msgid "musicxml2ly [OPTION]... FILE.xml"
+#: convert-ly.py:345
+#, python-format
+msgid "%s: Unable to determine version.  Skipping"
 msgstr ""
 
-#: musicxml2ly.py:2566
+#: convert-ly.py:350
+#, python-format
 msgid ""
-"Convert MusicXML from FILE.xml to LilyPond input.\n"
-"If the given filename is -, musicxml2ly reads from the command line.\n"
+"%s: Invalid version string `%s' \n"
+"Valid version strings consist of three numbers, separated by dots, e.g. "
+"`2.8.12'"
 msgstr ""
 
-#: musicxml2ly.py:2572 midi2ly.py:1062 abc2ly.py:1388 lilypond-book.py:140
-#: convert-ly.py:92 etf2ly.py:1204 main.cc:153
-msgid "show this help and exit"
+#: etf2ly.py:1197
+#, python-format
+msgid "%s [OPTION]... ETF-FILE"
 msgstr ""
 
-#: musicxml2ly.py:2576
+#: etf2ly.py:1198
 msgid ""
-"Copyright (c) 2005--2012 by\n"
-"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
-"    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
-"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
+"Enigma Transport Format is a format used by Coda Music Technology's\n"
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
+"file.\n"
 msgstr ""
 
-#: musicxml2ly.py:2590 midi2ly.py:1095 abc2ly.py:1385 lilypond-book.py:231
-#: convert-ly.py:88 etf2ly.py:1208 main.cc:174
-msgid "show version number and exit"
+#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
+#: main.cc:159 main.cc:171
+msgid "FILE"
 msgstr ""
 
-#: musicxml2ly.py:2596 midi2ly.py:1090 lilypond-book.py:223
-msgid "be verbose"
+#: lilypond-book.py:80
+msgid ""
+"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
 
-#: musicxml2ly.py:2602
-msgid "use lxml.etree; uses less memory and cpu time"
+#: lilypond-book.py:87
+msgid "BOOK"
 msgstr ""
 
-#: musicxml2ly.py:2608
-msgid "input file is a zip-compressed MusicXML file"
+#: lilypond-book.py:95
+#, python-format
+msgid "Exiting (%d)..."
 msgstr ""
 
-#: musicxml2ly.py:2614
-msgid "convert pitches in relative mode (default)"
+#: lilypond-book.py:127
+msgid "FILTER"
 msgstr ""
 
-#: musicxml2ly.py:2619
-msgid "convert pitches in absolute mode"
+#: lilypond-book.py:130
+msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
 msgstr ""
 
-#: musicxml2ly.py:2622
-msgid "LANG"
+#: lilypond-book.py:134
+msgid ""
+"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 
-#: musicxml2ly.py:2624
-msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
+#: lilypond-book.py:135
+msgid "FORMAT"
 msgstr ""
 
-#: musicxml2ly.py:2627 lilypond-book.py:179 convert-ly.py:105
-msgid ""
-"Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
-"(default), DEBUG)"
+#: lilypond-book.py:142
+msgid "add DIR to include path"
 msgstr ""
 
-#: musicxml2ly.py:2629 lilypond-book.py:163 lilypond-book.py:181
-#: convert-ly.py:107 main.cc:167
-msgid "LOGLEVEL"
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
+msgid "DIR"
 msgstr ""
 
-#: musicxml2ly.py:2638
-msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
+#: lilypond-book.py:148
+msgid "format Texinfo output so that Info will look for images of music in DIR"
 msgstr ""
 
-#: musicxml2ly.py:2644
-msgid "do not convert exact vertical positions of rests"
+#: lilypond-book.py:155
+msgid "PAD"
 msgstr ""
 
-#: musicxml2ly.py:2650
-msgid "do not convert the exact page layout and breaks"
+#: lilypond-book.py:157
+msgid ""
+"pad left side of music to align music inspite of uneven bar numbers (in mm)"
 msgstr ""
 
-#: musicxml2ly.py:2656
+#: lilypond-book.py:162
+msgid "Print lilypond log messages according to LOGLEVEL"
+msgstr ""
+
+#: lilypond-book.py:168
+msgid "write lily-XXX files to DIR, link into --output dir"
+msgstr ""
+
+#: lilypond-book.py:173
 msgid ""
-"do not convert beaming information, use lilypond's automatic beaming instead"
+"Load the additional python PACKAGE (containing e.g. a custom output format)"
 msgstr ""
 
-#: musicxml2ly.py:2659 midi2ly.py:1067 midi2ly.py:1072 etf2ly.py:1210
-#: main.cc:159 main.cc:171
-msgid "FILE"
+#: lilypond-book.py:174
+msgid "PACKAGE"
 msgstr ""
 
-#: musicxml2ly.py:2664
-msgid "set output filename to FILE, stdout if -"
+#: lilypond-book.py:186
+msgid "write output to DIR"
 msgstr ""
 
-#: musicxml2ly.py:2670
-msgid "activate midi-block"
+#: lilypond-book.py:191
+msgid "COMMAND"
 msgstr ""
 
-#. Translators, please translate this string as
-#. "Report bugs in English via %s",
-#. or if there is a LilyPond users list or forum in your language
-#. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: musicxml2ly.py:2674 midi2ly.py:1107 abc2ly.py:1403 lilypond-book.py:258
-#: convert-ly.py:146 etf2ly.py:1218 main.cc:285
-#, c-format, python-format
-msgid "Report bugs via %s"
+#: lilypond-book.py:192
+msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: musicxml2ly.py:2754
+#: lilypond-book.py:197
+msgid "Redirect the lilypond output"
+msgstr ""
+
+#: lilypond-book.py:201
+msgid "Compile snippets in safe mode"
+msgstr ""
+
+#: lilypond-book.py:207
+msgid "do not fail if no lilypond output is found"
+msgstr ""
+
+#: lilypond-book.py:213
+msgid "do not fail if no PNG images are found for EPS files"
+msgstr ""
+
+#: lilypond-book.py:219
+msgid "write snippet output files with the same base name as their source file"
+msgstr ""
+
+#: lilypond-book.py:223 midi2ly.py:1090 musicxml2ly.py:2596
+msgid "be verbose"
+msgstr ""
+
+#: lilypond-book.py:239
+msgid ""
+"run executable PROG instead of latex, or in\n"
+"case --pdf option is set instead of pdflatex"
+msgstr ""
+
+#: lilypond-book.py:241 lilypond-book.py:246
+msgid "PROG"
+msgstr ""
+
+#: lilypond-book.py:245
+msgid "run executable PROG instead of texi2pdf"
+msgstr ""
+
+#: lilypond-book.py:252
+msgid "create PDF files for use with PDFTeX"
+msgstr ""
+
+#: lilypond-book.py:455
+msgid "Writing snippets..."
+msgstr ""
+
+#: lilypond-book.py:460
+msgid "Processing..."
+msgstr ""
+
+#: lilypond-book.py:465
+msgid "All snippets are up to date..."
+msgstr ""
+
+#: lilypond-book.py:467
+msgid "Linking files..."
+msgstr ""
+
+#: lilypond-book.py:487
 #, python-format
-msgid "unknown part in part-list: %s"
+msgid "cannot determine format for: %s"
 msgstr ""
 
-#: musicxml2ly.py:2816
-msgid "Input is compressed, extracting raw MusicXML data from stdin"
+#: lilypond-book.py:496
+#, python-format
+msgid "%s is up to date."
 msgstr ""
 
-#: musicxml2ly.py:2829
+#: lilypond-book.py:509
 #, python-format
-msgid "Input file %s is compressed, extracting raw MusicXML data"
+msgid "Writing `%s'..."
 msgstr ""
 
-#: musicxml2ly.py:2859
-msgid "Reading MusicXML from Standard input ..."
+#: lilypond-book.py:570
+msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: musicxml2ly.py:2861
+#: lilypond-book.py:574
 #, python-format
-msgid "Reading MusicXML from %s ..."
+msgid "Reading %s..."
 msgstr ""
 
-#: musicxml2ly.py:2894
+#: lilypond-book.py:581
+msgid "Dissecting..."
+msgstr ""
+
+#: lilypond-book.py:592
 #, python-format
-msgid "Output to `%s'"
+msgid "Compiling %s..."
 msgstr ""
 
-#: musicxml2ly.py:2964
+#: lilypond-book.py:600
 #, python-format
-msgid "Unable to find input file %s"
+msgid "Processing include: %s"
 msgstr ""
 
-#: midi2ly.py:81 lilypond-book.py:115 convert-ly.py:75 etf2ly.py:1191
+#: lilypond-book.py:611
 #, python-format
-msgid "Copyright (c) %s by"
+msgid "Removing `%s'"
 msgstr ""
 
-#: midi2ly.py:83 lilypond-book.py:117 convert-ly.py:77 etf2ly.py:1193
-msgid "Distributed under terms of the GNU General Public License."
+#: lilypond-book.py:704
+#, python-format
+msgid "Setting LilyPond's loglevel to %s"
 msgstr ""
 
-#: midi2ly.py:84 lilypond-book.py:118 convert-ly.py:78 etf2ly.py:1194
-msgid "It comes with NO WARRANTY."
+#: lilypond-book.py:708
+#, python-format
+msgid ""
+"Setting LilyPond's loglevel to %s (from environment variable "
+"LILYPOND_LOGLEVEL)"
+msgstr ""
+
+#: lilypond-book.py:711
+msgid ""
+"Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr ""
 
 #: midi2ly.py:90
@@ -1162,11 +1269,6 @@ msgstr ""
 msgid "%s output to `%s'..."
 msgstr ""
 
-#: midi2ly.py:1044 abc2ly.py:1376 lilypond-book.py:122 convert-ly.py:81
-#, python-format
-msgid "%s [OPTION]... FILE"
-msgstr ""
-
 #: midi2ly.py:1045
 #, python-format
 msgid "Convert %s to LilyPond input.\n"
@@ -1204,10 +1306,6 @@ msgstr ""
 msgid "ALT[:MINOR]"
 msgstr ""
 
-#: midi2ly.py:1071 abc2ly.py:1391 etf2ly.py:1209
-msgid "write output to FILE"
-msgstr ""
-
 #: midi2ly.py:1074
 msgid "preview of first 4 bars"
 msgstr ""
@@ -1232,11 +1330,6 @@ msgstr ""
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:1096 lilypond-book.py:234 convert-ly.py:141 etf2ly.py:1212
-#: main.cc:176
-msgid "show warranty and copyright"
-msgstr ""
-
 #: midi2ly.py:1098
 msgid "treat every text as a lyric"
 msgstr ""
@@ -1249,324 +1342,250 @@ msgstr ""
 msgid "no files specified on command line."
 msgstr ""
 
-#: abc2ly.py:1377
+#: musicxml2ly.py:228
 #, python-format
 msgid ""
-"abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input.\n"
+"Encountered file created by %s, containing wrong beaming information. All "
+"beaming information in the MusicXML file will be ignored"
 msgstr ""
 
-#: abc2ly.py:1394
-msgid "be strict about success"
+#: musicxml2ly.py:247 musicxml2ly.py:249
+#, python-format
+msgid "Unprocessed PartGroupInfo %s encountered"
 msgstr ""
 
-#: abc2ly.py:1397
-msgid "preserve ABC's notion of beams"
+#: musicxml2ly.py:500
+#, python-format
+msgid "Encountered note at %s without type and duration (=%s)"
 msgstr ""
 
-#: abc2ly.py:1400
-msgid "suppress progress messages"
+#: musicxml2ly.py:520
+#, python-format
+msgid ""
+"Encountered rational duration with denominator %s, unable to convert to "
+"lilypond duration"
 msgstr ""
 
-#: lilypond-book.py:80
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+#: musicxml2ly.py:767
+msgid "Unable to extract key signature!"
 msgstr ""
 
-#: lilypond-book.py:82 convert-ly.py:48
-msgid "Examples:"
+#: musicxml2ly.py:794
+#, python-format
+msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
 msgstr ""
 
-#: lilypond-book.py:87
-msgid "BOOK"
+#: musicxml2ly.py:932
+#, python-format
+msgid "Encountered unprocessed marker %s\n"
 msgstr ""
 
-#: lilypond-book.py:95
+#: musicxml2ly.py:1026
 #, python-format
-msgid "Exiting (%d)..."
+msgid "unknown span event %s"
 msgstr ""
 
-#: lilypond-book.py:127
-msgid "FILTER"
+#: musicxml2ly.py:1036
+#, python-format
+msgid "unknown span type %s for %s"
 msgstr ""
 
-#: lilypond-book.py:130
-msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
+#: musicxml2ly.py:1456
+msgid "Unknown metronome mark, ignoring"
 msgstr ""
 
-#: lilypond-book.py:134
+#. TODO: Implement the other (more complex) way for tempo marks!
+#: musicxml2ly.py:1461
 msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+"Metronome marks with complex relations (<metronome-note> in MusicXML) are "
+"not yet implemented."
 msgstr ""
 
-#: lilypond-book.py:135
-msgid "FORMAT"
+#: musicxml2ly.py:1663
+#, python-format
+msgid "Unable to convert chord type %s to lilypond."
 msgstr ""
 
-#: lilypond-book.py:142
-msgid "add DIR to include path"
+#: musicxml2ly.py:1816
+#, python-format
+msgid "drum %s type unknown, please add to instrument_drumtype_dict"
 msgstr ""
 
-#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
-msgid "DIR"
+#: musicxml2ly.py:1820
+msgid "cannot find suitable event"
 msgstr ""
 
-#: lilypond-book.py:148
-msgid "format Texinfo output so that Info will look for images of music in DIR"
+#: musicxml2ly.py:1968
+#, python-format
+msgid "Negative skip %s (from position %s to %s)"
 msgstr ""
 
-#: lilypond-book.py:155
-msgid "PAD"
+#: musicxml2ly.py:2109
+#, python-format
+msgid "Negative skip found: from %s to %s, difference is %s"
 msgstr ""
 
-#: lilypond-book.py:157
-msgid ""
-"pad left side of music to align music inspite of uneven bar numbers (in mm)"
+#: musicxml2ly.py:2190
+#, python-format
+msgid "unexpected %s; expected %s or %s or %s"
 msgstr ""
 
-#: lilypond-book.py:162
-msgid "Print lilypond log messages according to LOGLEVEL"
+#: musicxml2ly.py:2296
+msgid "Encountered closing slur, but no slur is open"
 msgstr ""
 
-#: lilypond-book.py:168
-msgid "write lily-XXX files to DIR, link into --output dir"
-msgstr ""
-
-#: lilypond-book.py:173
-msgid ""
-"Load the additional python PACKAGE (containing e.g. a custom output format)"
-msgstr ""
-
-#: lilypond-book.py:174
-msgid "PACKAGE"
-msgstr ""
-
-#: lilypond-book.py:186
-msgid "write output to DIR"
-msgstr ""
-
-#: lilypond-book.py:191
-msgid "COMMAND"
-msgstr ""
-
-#: lilypond-book.py:192
-msgid "process ly_files using COMMAND FILE..."
+#: musicxml2ly.py:2299
+msgid "Cannot have two simultaneous (closing) slurs"
 msgstr ""
 
-#: lilypond-book.py:197
-msgid "Redirect the lilypond output"
+#: musicxml2ly.py:2308
+msgid "Cannot have a slur inside another slur"
 msgstr ""
 
-#: lilypond-book.py:201
-msgid "Compile snippets in safe mode"
+#: musicxml2ly.py:2311
+msgid "Cannot have two simultaneous slurs"
 msgstr ""
 
-#: lilypond-book.py:207
-msgid "do not fail if no lilypond output is found"
+#: musicxml2ly.py:2445
+#, python-format
+msgid "cannot simultaneously have more than one mode: %s"
 msgstr ""
 
-#: lilypond-book.py:213
-msgid "do not fail if no PNG images are found for EPS files"
+#: musicxml2ly.py:2553
+msgid "Converting to LilyPond expressions..."
 msgstr ""
 
-#: lilypond-book.py:219
-msgid "write snippet output files with the same base name as their source file"
+#: musicxml2ly.py:2564
+msgid "musicxml2ly [OPTION]... FILE.xml"
 msgstr ""
 
-#: lilypond-book.py:239
+#: musicxml2ly.py:2566
 msgid ""
-"run executable PROG instead of latex, or in\n"
-"case --pdf option is set instead of pdflatex"
-msgstr ""
-
-#: lilypond-book.py:241 lilypond-book.py:246
-msgid "PROG"
-msgstr ""
-
-#: lilypond-book.py:245
-msgid "run executable PROG instead of texi2pdf"
-msgstr ""
-
-#: lilypond-book.py:252
-msgid "create PDF files for use with PDFTeX"
-msgstr ""
-
-#: lilypond-book.py:455
-msgid "Writing snippets..."
-msgstr ""
-
-#: lilypond-book.py:460
-msgid "Processing..."
-msgstr ""
-
-#: lilypond-book.py:465
-msgid "All snippets are up to date..."
-msgstr ""
-
-#: lilypond-book.py:467
-msgid "Linking files..."
-msgstr ""
-
-#: lilypond-book.py:487
-#, python-format
-msgid "cannot determine format for: %s"
-msgstr ""
-
-#: lilypond-book.py:496
-#, python-format
-msgid "%s is up to date."
+"Convert MusicXML from FILE.xml to LilyPond input.\n"
+"If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
 
-#: lilypond-book.py:509
-#, python-format
-msgid "Writing `%s'..."
+#: musicxml2ly.py:2576
+msgid ""
+"Copyright (c) 2005--2012 by\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: lilypond-book.py:570
-msgid "Output would overwrite input file; use --output."
+#: musicxml2ly.py:2602
+msgid "use lxml.etree; uses less memory and cpu time"
 msgstr ""
 
-#: lilypond-book.py:574
-#, python-format
-msgid "Reading %s..."
+#: musicxml2ly.py:2608
+msgid "input file is a zip-compressed MusicXML file"
 msgstr ""
 
-#: lilypond-book.py:581
-msgid "Dissecting..."
+#: musicxml2ly.py:2614
+msgid "convert pitches in relative mode (default)"
 msgstr ""
 
-#: lilypond-book.py:592
-#, python-format
-msgid "Compiling %s..."
+#: musicxml2ly.py:2619
+msgid "convert pitches in absolute mode"
 msgstr ""
 
-#: lilypond-book.py:600
-#, python-format
-msgid "Processing include: %s"
+#: musicxml2ly.py:2622
+msgid "LANG"
 msgstr ""
 
-#: lilypond-book.py:611
-#, python-format
-msgid "Removing `%s'"
+#: musicxml2ly.py:2624
+msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
 msgstr ""
 
-#: lilypond-book.py:704
-#, python-format
-msgid "Setting LilyPond's loglevel to %s"
+#: musicxml2ly.py:2638
+msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
 msgstr ""
 
-#: lilypond-book.py:708
-#, python-format
-msgid ""
-"Setting LilyPond's loglevel to %s (from environment variable "
-"LILYPOND_LOGLEVEL)"
+#: musicxml2ly.py:2644
+msgid "do not convert exact vertical positions of rests"
 msgstr ""
 
-#: lilypond-book.py:711
-msgid ""
-"Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
+#: musicxml2ly.py:2650
+msgid "do not convert the exact page layout and breaks"
 msgstr ""
 
-#: convert-ly.py:46
+#: musicxml2ly.py:2656
 msgid ""
-"Update LilyPond input to newer version.  By default, update from the\n"
-"version taken from the \\version command, to the current LilyPond version."
-msgstr ""
-
-#: convert-ly.py:96 convert-ly.py:137
-msgid "VERSION"
-msgstr ""
-
-#: convert-ly.py:98
-msgid "start from VERSION [default: \\version found in file]"
+"do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: convert-ly.py:101
-msgid "edit in place"
+#: musicxml2ly.py:2664
+msgid "set output filename to FILE, stdout if -"
 msgstr ""
 
-#: convert-ly.py:113
-msgid "do not add \\version command if missing"
+#: musicxml2ly.py:2670
+msgid "activate midi-block"
 msgstr ""
 
-#: convert-ly.py:119
+#: musicxml2ly.py:2754
 #, python-format
-msgid "force updating \\version number to %s"
-msgstr ""
-
-#: convert-ly.py:125
-msgid "only update \\version number if file is modified"
+msgid "unknown part in part-list: %s"
 msgstr ""
 
-#: convert-ly.py:131
-#, python-format
-msgid "show rules [default: -f 0, -t %s]"
+#: musicxml2ly.py:2816
+msgid "Input is compressed, extracting raw MusicXML data from stdin"
 msgstr ""
 
-#: convert-ly.py:136
+#: musicxml2ly.py:2829
 #, python-format
-msgid "convert to VERSION [default: %s]"
-msgstr ""
-
-#: convert-ly.py:186
-msgid "Applying conversion: "
+msgid "Input file %s is compressed, extracting raw MusicXML data"
 msgstr ""
 
-#: convert-ly.py:202
-msgid "Error while converting"
+#: musicxml2ly.py:2859
+msgid "Reading MusicXML from Standard input ..."
 msgstr ""
 
-#: convert-ly.py:204
-msgid "Stopping at last successful rule"
+#: musicxml2ly.py:2861
+#, python-format
+msgid "Reading MusicXML from %s ..."
 msgstr ""
 
-#: convert-ly.py:231
+#: musicxml2ly.py:2894
 #, python-format
-msgid "Processing `%s'... "
+msgid "Output to `%s'"
 msgstr ""
 
-#: convert-ly.py:338
+#: musicxml2ly.py:2964
 #, python-format
-msgid "%s: Unable to open file"
+msgid "Unable to find input file %s"
 msgstr ""
 
-#: convert-ly.py:345
-#, python-format
-msgid "%s: Unable to determine version.  Skipping"
+#: website_post.py:123
+msgid "English"
 msgstr ""
 
-#: convert-ly.py:350
-#, python-format
-msgid ""
-"%s: Invalid version string `%s' \n"
-"Valid version strings consist of three numbers, separated by dots, e.g. "
-"`2.8.12'"
+#: website_post.py:126
+msgid "Other languages"
 msgstr ""
 
-#: etf2ly.py:1197
+#: website_post.py:127
 #, python-format
-msgid "%s [OPTION]... ETF-FILE"
+msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr ""
 
-#: etf2ly.py:1198
-msgid ""
-"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file.\n"
+#: getopt-long.cc:153
+#, c-format
+msgid "option `%s' requires an argument"
 msgstr ""
 
-#: website_post.py:123
-msgid "English"
+#: getopt-long.cc:157
+#, c-format
+msgid "option `%s' does not allow an argument"
 msgstr ""
 
-#: website_post.py:126
-msgid "Other languages"
+#: getopt-long.cc:161
+#, c-format
+msgid "unrecognized option: `%s'"
 msgstr ""
 
-#: website_post.py:127
-#, python-format
-msgid "About <a href=\"%s\">automatic language selection</a>."
+#: getopt-long.cc:167
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
 msgstr ""
 
 #: warn.cc:56
@@ -1614,433 +1633,194 @@ msgstr ""
 msgid "suppressed warning: %s"
 msgstr ""
 
-#: getopt-long.cc:153
+#: accidental-engraver.cc:180
 #, c-format
-msgid "option `%s' requires an argument"
+msgid "accidental typesetting list must begin with context-name: %s"
 msgstr ""
 
-#: getopt-long.cc:157
+#: accidental-engraver.cc:210
 #, c-format
-msgid "option `%s' does not allow an argument"
+msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr ""
 
-#: getopt-long.cc:161
+#: accidental.cc:200
 #, c-format
-msgid "unrecognized option: `%s'"
+msgid "Could not find glyph-name for alteration %s"
 msgstr ""
 
-#: getopt-long.cc:167
-#, c-format
-msgid "invalid argument `%s' to option `%s'"
-msgstr ""
-
-#: input.cc:138 source-file.cc:178 source-file.cc:193
-msgid "position unknown"
-msgstr ""
-
-#: chord-tremolo-engraver.cc:88
-msgid "No tremolo to end"
-msgstr ""
-
-#: chord-tremolo-engraver.cc:109
-msgid "unterminated chord tremolo"
-msgstr ""
-
-#: chord-tremolo-engraver.cc:149 beam-engraver.cc:266
-msgid "stem must have Rhythmic structure"
-msgstr ""
-
-#: flag.cc:113
-#, c-format
-msgid "flag `%s' not found"
-msgstr ""
-
-#: flag.cc:133
-#, c-format
-msgid "flag stroke `%s' not found"
-msgstr ""
-
-#: vaticana-ligature.cc:94
-msgid "flexa-height undefined; assuming 0"
-msgstr ""
-
-#: vaticana-ligature.cc:99
-msgid "ascending vaticana style flexa"
-msgstr ""
-
-#: slur.cc:430
-#, c-format
-msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
-msgstr ""
-
-#: translator-group.cc:188
-#, c-format
-msgid "cannot find: `%s'"
-msgstr ""
-
-#: hyphen-engraver.cc:104
-msgid "removing unterminated hyphen"
-msgstr ""
-
-#: hyphen-engraver.cc:118
-msgid "unterminated hyphen; removing"
-msgstr ""
-
-#: page-layout-problem.cc:403
-msgid ""
-"A page layout problem has been initiated that cannot accommodate footnotes."
-msgstr ""
-
-#: page-layout-problem.cc:721
-msgid ""
-"cannot fit music on page: ragged-spacing was requested, but page was "
-"compressed"
+#: accidental.cc:215
+msgid "natural alteration glyph not found"
 msgstr ""
 
-#: page-layout-problem.cc:724
+#: all-font-metrics.cc:149
 #, c-format
-msgid "cannot fit music on page: overflow is %f"
-msgstr ""
-
-#: page-layout-problem.cc:726
-msgid "compressing music to fit"
+msgid "cannot find font: `%s'"
 msgstr ""
 
-#: page-layout-problem.cc:1188
-msgid "staff-affinities should only decrease"
+#: apply-context-iterator.cc:42
+msgid "\\applycontext argument is not a procedure"
 msgstr ""
 
 #: arpeggio.cc:115
 msgid "no heads for arpeggio found?"
 msgstr ""
 
-#: lyric-combine-music-iterator.cc:199
-msgid "argument of \\lyricsto should contain Lyrics context"
-msgstr ""
-
-#: lyric-combine-music-iterator.cc:337
-#, c-format
-msgid "cannot find Voice `%s'"
-msgstr ""
-
-#: custos.cc:87
-#, c-format
-msgid "custos `%s' not found"
-msgstr ""
-
-#: context.cc:149
-#, c-format
-msgid "cannot find or create new `%s'"
-msgstr ""
-
-#: context.cc:207
-#, c-format
-msgid "cannot find or create `%s' called `%s'"
-msgstr ""
-
-#: context.cc:400
-#, c-format
-msgid "cannot find or create: `%s'"
-msgstr ""
-
-#: dispatcher.cc:83
-msgid "Event class should be a list"
-msgstr ""
-
-#: dispatcher.cc:166
-#, c-format
-msgid "Junking event: %s"
-msgstr ""
-
-#: dispatcher.cc:262
-msgid "Attempting to remove nonexisting listener."
-msgstr ""
-
-#: dispatcher.cc:284
-msgid "Already listening to dispatcher, ignoring request"
-msgstr ""
-
-#: grob-property.cc:35
-#, c-format
-msgid "%d: %s"
-msgstr ""
-
 #: auto-change-iterator.cc:74 change-iterator.cc:72
 #, c-format
 msgid "cannot change, already in translator: %s"
 msgstr ""
 
-#: tie-engraver.cc:117
-msgid "unterminated tie"
-msgstr ""
-
-#: tie-engraver.cc:348
-msgid "lonely tie"
-msgstr ""
-
-#: note-column.cc:147
-msgid "cannot have note heads and rests together on a stem"
-msgstr ""
-
-#: parse-scm.cc:121
-msgid "GUILE signaled an error for the expression beginning here"
-msgstr ""
-
-#: footnote-engraver.cc:109
-msgid "Must be footnote-event."
-msgstr ""
-
-#: paper-score.cc:122 minimal-page-breaking.cc:40
-msgid "Calculating line breaks..."
-msgstr ""
-
-#: paper-score.cc:134
-#, c-format
-msgid "Element count %d (spanners %d) "
-msgstr ""
-
-#: paper-score.cc:138
-msgid "Preprocessing graphical objects..."
-msgstr ""
-
-#: paper-score.cc:162 optimal-page-breaking.cc:207
-#: page-turn-page-breaking.cc:248
-msgid "Drawing systems..."
-msgstr ""
-
-#: program-option-scheme.cc:235
-#, c-format
-msgid "no such internal option: %s"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:96
-msgid "ligature with less than 2 heads -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:123
-msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:137
-msgid "single note ligature - skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:148
-msgid "prime interval within ligature -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:159
-msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:202
-msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:212
-msgid ""
-"semibreves can only appear at the beginning of a ligature,\n"
-"and there may be only zero or two of them"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:232
-msgid ""
-"invalid ligatura ending:\n"
-"when the last note is a descending brevis,\n"
-"the penultimate note must be another one,\n"
-"or the ligatura must be LB or SSB"
-msgstr ""
-
-#: mensural-ligature-engraver.cc:387
-msgid "unexpected case fall-through"
-msgstr ""
-
-#: piano-pedal-engraver.cc:279
-#, c-format
-msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr ""
-
-#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
-#: piano-pedal-performer.cc:104
-#, c-format
-msgid "cannot find start of piano pedal: `%s'"
-msgstr ""
-
-#: piano-pedal-engraver.cc:340
-#, c-format
-msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr ""
-
-#: new-dynamic-engraver.cc:168
-#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
-msgstr ""
-
-#: new-dynamic-engraver.cc:233
-#, c-format
-msgid "unterminated %s"
-msgstr ""
-
-#: general-scheme.cc:390
-#, c-format
-msgid "failed redirecting stderr to `%s'"
+#: axis-group-engraver.cc:94
+msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: general-scheme.cc:469 output-ps.scm:48
-msgid "Found infinity or nan in output.  Substituting 0.0"
+#: axis-group-engraver.cc:95
+msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: music.cc:150
-#, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
+#: axis-group-engraver.cc:96
+msgid "removing this vertical group"
 msgstr ""
 
-#: music.cc:219
-msgid "(normalized pitch)"
+#: axis-group-interface.cc:668
+msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 
-#: music.cc:223
+#: bar-check-iterator.cc:84
 #, c-format
-msgid "Transposing %s by %s makes alteration larger than double"
+msgid "barcheck failed at: %s"
 msgstr ""
 
-#: stem.cc:128
-msgid "weird stem size, check for narrow beams"
+#: beam-engraver.cc:147
+msgid "already have a beam"
 msgstr ""
 
-#: relative-octave-check.cc:49
-msgid "Failed octave check, got: "
+#: beam-engraver.cc:230
+msgid "unterminated beam"
 msgstr ""
 
-#: translator-ctors.cc:65
-#, c-format
-msgid "unknown translator: `%s'"
+#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+msgid "stem must have Rhythmic structure"
 msgstr ""
 
-#: partial-iterator.cc:45
-msgid "trying to use \\partial after the start of a piece"
+#: beam-engraver.cc:277
+msgid "stem does not fit in beam"
 msgstr ""
 
-#: relocate.cc:52
-#, c-format
-msgid "Setting %s to %s"
+#: beam-engraver.cc:278
+msgid "beam was started here"
 msgstr ""
 
-#. this warning should only be printed in debug mode!
-#: relocate.cc:73
-#, c-format
-msgid "no such file: %s for %s"
+#. We are completely screwed.
+#: beam-quanting.cc:839
+msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
-#. this warning should only be printed in debug mode!
-#. this warning should only be printed in debug mode
-#: relocate.cc:84 relocate.cc:102
-#, c-format
-msgid "no such directory: %s for %s"
+#: beam.cc:181
+msgid "removing beam with no stems"
 msgstr ""
 
-#: relocate.cc:93
+#: change-iterator.cc:34
 #, c-format
-msgid "%s=%s (prepend)\n"
+msgid "cannot change `%s' to `%s'"
 msgstr ""
 
-#: relocate.cc:124
-#, c-format
-msgid "not relocating, no %s/ or current/ found under %s"
+#. FIXME: constant error message.
+#: change-iterator.cc:93
+msgid "cannot find context to switch to"
 msgstr ""
 
-#: relocate.cc:134
+#. We could change the current translator's id, but that would make
+#. errors hard to catch.
+#.
+#. last->translator_id_string () = get_change
+#. ()->change_to_id_string ();
+#: change-iterator.cc:102
 #, c-format
-msgid "Relocation: compile datadir=%s, new datadir=%s"
+msgid "not changing to same context type: %s"
 msgstr ""
 
-#: relocate.cc:146
-#, c-format
-msgid "Relocation: framework_prefix=%s"
+#. FIXME: uncomprehensable message
+#: change-iterator.cc:106
+msgid "none of these in my family"
 msgstr ""
 
-#: relocate.cc:186
-#, c-format
-msgid "Relocation: is absolute: argv0=%s\n"
+#: chord-tremolo-engraver.cc:88
+msgid "No tremolo to end"
 msgstr ""
 
-#: relocate.cc:192
-#, c-format
-msgid "Relocation: from cwd: argv0=%s\n"
+#: chord-tremolo-engraver.cc:109
+msgid "unterminated chord tremolo"
 msgstr ""
 
-#: relocate.cc:208
+#: clef.cc:65
 #, c-format
-msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
-msgstr ""
-
-#: relocate.cc:235
-msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+msgid "clef `%s' not found"
 msgstr ""
 
-#: relocate.cc:360
+#: cluster.cc:120
 #, c-format
-msgid "Relocation file: %s"
+msgid "unknown cluster style `%s'"
 msgstr ""
 
-#: relocate.cc:364 source-file.cc:65
-#, c-format
-msgid "cannot open file: `%s'"
+#: cluster.cc:157
+msgid "junking empty cluster"
 msgstr ""
 
-#: relocate.cc:394
+#: coherent-ligature-engraver.cc:110
 #, c-format
-msgid "Unknown relocation command %s"
+msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
-#: extender-engraver.cc:169 extender-engraver.cc:178
-msgid "unterminated extender"
+#. if we get to here, just put everything on one line
+#: constrained-breaking.cc:187 constrained-breaking.cc:205
+msgid "cannot find line breaking that satisfies constraints"
 msgstr ""
 
-#: lily-lexer.cc:255
-msgid "include files are not allowed in safe mode"
+#: context-property.cc:43
+msgid "need symbol arguments for \\override and \\revert"
 msgstr ""
 
-#: lily-lexer.cc:282
+#: context.cc:149
 #, c-format
-msgid "identifier name is a keyword: `%s'"
+msgid "cannot find or create new `%s'"
 msgstr ""
 
-#: lily-lexer.cc:303 lily-lexer.cc:316
+#: context.cc:207
 #, c-format
-msgid "%s:EOF"
+msgid "cannot find or create `%s' called `%s'"
 msgstr ""
 
-#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72
-msgid "cannot find start of ligature"
+#: context.cc:400
+#, c-format
+msgid "cannot find or create: `%s'"
 msgstr ""
 
-#: ligature-engraver.cc:109
-msgid "no right bound"
+#: custos.cc:88
+#, c-format
+msgid "custos `%s' not found"
 msgstr ""
 
-#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85
-msgid "already have a ligature"
+#: dispatcher.cc:83
+msgid "Event class should be a list"
 msgstr ""
 
-#: ligature-engraver.cc:140
-msgid "no left bound"
+#: dispatcher.cc:166
+#, c-format
+msgid "Junking event: %s"
 msgstr ""
 
-#: ligature-engraver.cc:184
-msgid "unterminated ligature"
+#: dispatcher.cc:262
+msgid "Attempting to remove nonexisting listener."
 msgstr ""
 
-#: ligature-engraver.cc:211
-msgid "ignoring rest: ligature may not contain rest"
+#: dispatcher.cc:284
+msgid "Already listening to dispatcher, ignoring request"
 msgstr ""
 
-#: ligature-engraver.cc:212
-msgid "ligature was started here"
+#: dots.cc:48
+#, c-format
+msgid "dot `%s' not found"
 msgstr ""
 
 #: dynamic-engraver.cc:193
@@ -2063,151 +1843,131 @@ msgstr ""
 msgid "unterminated (de)crescendo"
 msgstr ""
 
-#. fixme: be more verbose.
-#: volta-engraver.cc:111
-msgid "cannot end volta spanner"
-msgstr ""
-
-#: volta-engraver.cc:121
-msgid "already have a volta spanner, ending that one prematurely"
+#: episema-engraver.cc:75
+msgid "already have an episema"
 msgstr ""
 
-#: volta-engraver.cc:125
-msgid "also already have an ended spanner"
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
 msgstr ""
 
-#: volta-engraver.cc:126
-msgid "giving up"
+#: episema-engraver.cc:137
+msgid "unterminated episema"
 msgstr ""
 
-#: minimal-page-breaking.cc:44
-msgid "Calculating page breaks..."
+#: extender-engraver.cc:169 extender-engraver.cc:178
+msgid "unterminated extender"
 msgstr ""
 
-#: accidental-engraver.cc:180
+#: flag.cc:113
 #, c-format
-msgid "accidental typesetting list must begin with context-name: %s"
+msgid "flag `%s' not found"
 msgstr ""
 
-#: accidental-engraver.cc:210
+#: flag.cc:133
 #, c-format
-msgid "procedure or context-name expected for accidental rule, found %s"
+msgid "flag stroke `%s' not found"
 msgstr ""
 
-#: ttf.cc:480 ttf.cc:528
+#: font-config-scheme.cc:151 font-config.cc:53
 #, c-format
-msgid "font index %d too large for font `%s', using index 0"
+msgid "failed adding font directory: %s"
 msgstr ""
 
-#: ttf.cc:512 ttf.cc:562
-msgid "font index must be non-negative, using index 0"
+#: font-config-scheme.cc:153 font-config.cc:55
+#, c-format
+msgid "Adding font directory: %s"
 msgstr ""
 
-#: score.cc:172
-msgid "already have music in score"
+#: font-config-scheme.cc:167
+#, c-format
+msgid "failed adding font file: %s"
 msgstr ""
 
-#: score.cc:173
-msgid "this is the previous music"
+#: font-config-scheme.cc:169
+#, c-format
+msgid "Adding font file: %s"
 msgstr ""
 
-#: score.cc:178
-msgid "errors found, ignoring music expression"
+#: font-config.cc:38
+msgid "Initializing FontConfig..."
 msgstr ""
 
-#: multi-measure-rest.cc:138
-msgid ""
-"usable-duration-logs must be a non-empty list.  Falling back to whole rests."
+#: font-config.cc:58
+msgid "Building font database..."
 msgstr ""
 
-#: multi-measure-rest.cc:328
-msgid "Using naive multi measure rest spacing."
+#: footnote-engraver.cc:110
+msgid "Must be footnote-event."
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:400
+#: general-scheme.cc:390
 #, c-format
-msgid ""
-"ignored prefix(es) `%s' of this head according to restrictions of the "
-"selected ligature style"
+msgid "failed redirecting stderr to `%s'"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:466
-msgid ""
-"Ambiguous use of dots in ligature: there are multiple dotted notes with the "
-"same pitch.  The ligature should be split."
+#: general-scheme.cc:469 output-ps.scm:48
+msgid "Found infinity or nan in output.  Substituting 0.0"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:524
-msgid ""
-"This ligature has a dotted head followed by a non-dotted head.  The ligature "
-"should be split after the last dotted head before this head."
+#: glissando-engraver.cc:158
+msgid "unterminated glissando"
 msgstr ""
 
-#: vaticana-ligature-engraver.cc:736
-#, c-format
-msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
+#: global-context-scheme.cc:96 global-context-scheme.cc:114
+msgid "no music found in score"
 msgstr ""
 
-#: paper-book.cc:214
-#, c-format
-msgid "program option -dprint-pages not supported by backend `%s'"
+#: global-context-scheme.cc:104
+msgid "Interpreting music..."
 msgstr ""
 
-#: paper-book.cc:233
+#: global-context-scheme.cc:126
 #, c-format
-msgid "program option -dpreview not supported by backend `%s'"
-msgstr ""
-
-#: note-collision.cc:496
-msgid "ignoring too many clashing note columns"
+msgid "elapsed time: %.2f seconds"
 msgstr ""
 
-#: system.cc:200
+#: gregorian-ligature-engraver.cc:70
 #, c-format
-msgid "Element count %d"
+msgid "\\%s ignored"
 msgstr ""
 
-#: system.cc:480
+#: gregorian-ligature-engraver.cc:75
 #, c-format
-msgid "Grob count %d"
-msgstr ""
-
-#: paper-column-engraver.cc:261
-msgid ""
-"forced break was overridden by some other event, should you be using bar "
-"checks?"
+msgid "implied \\%s added"
 msgstr ""
 
-#: score-engraver.cc:78
-#, c-format
-msgid "cannot find `%s'"
+#. ligature may not start with 2nd head of pes or flexa
+#: gregorian-ligature-engraver.cc:224
+msgid "cannot apply `\\~' on first head of ligature"
 msgstr ""
 
-#: score-engraver.cc:80
-msgid "Music font has not been installed properly."
+#. (pitch == prev_pitch)
+#: gregorian-ligature-engraver.cc:236
+msgid "cannot apply `\\~' on heads with identical pitch"
 msgstr ""
 
-#: score-engraver.cc:82
+#: grob-interface.cc:68
 #, c-format
-msgid "Search path `%s'"
+msgid "Unknown interface `%s'"
 msgstr ""
 
-#: score-engraver.cc:84
-msgid "Aborting"
+#: grob-interface.cc:79
+#, c-format
+msgid "Grob `%s' has no interface for property `%s'"
 msgstr ""
 
-#: apply-context-iterator.cc:42
-msgid "\\applycontext argument is not a procedure"
+#: grob-property.cc:35
+#, c-format
+msgid "%d: %s"
 msgstr ""
 
-#: includable-lexer.cc:71 lily-parser-scheme.cc:108 lily-guile.cc:91
-#, c-format
-msgid "cannot find file: `%s'"
+#: hairpin.cc:60
+msgid "Asking for broken bound padding at a non-broken bound."
 msgstr ""
 
-#: includable-lexer.cc:73 lily-parser-scheme.cc:100
-#, c-format
-msgid "(search path: `%s')"
+#: hairpin.cc:254
+msgid "decrescendo too small"
 msgstr ""
 
 #: horizontal-bracket-engraver.cc:62
@@ -2218,155 +1978,157 @@ msgstr ""
 msgid "conflicting note group events"
 msgstr ""
 
-#: note-heads-engraver.cc:76
-msgid "NoteEvent without pitch"
+#: hyphen-engraver.cc:104
+msgid "removing unterminated hyphen"
 msgstr ""
 
-#: beam.cc:181
-msgid "removing beam with no stems"
+#: hyphen-engraver.cc:118
+msgid "unterminated hyphen; removing"
 msgstr ""
 
-#: staff-performer.cc:257
-msgid "MIDI channel wrapped around"
+#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
+#, c-format
+msgid "cannot find file: `%s'"
 msgstr ""
 
-#: staff-performer.cc:258
-msgid "remapping modulo 16"
+#: includable-lexer.cc:73 lily-parser-scheme.cc:100
+#, c-format
+msgid "(search path: `%s')"
 msgstr ""
 
-#: slur-engraver.cc:102 phrasing-slur-engraver.cc:101
-#, c-format
-msgid "direction of %s invalid: %d"
+#: input.cc:138 source-file.cc:178 source-file.cc:193
+msgid "position unknown"
 msgstr ""
 
-#: slur-engraver.cc:176
-msgid "unterminated slur"
+#: key-engraver.cc:198
+msgid "Incomplete keyAlterationOrder for key signature"
 msgstr ""
 
-#: slur-engraver.cc:211
-msgid "cannot end slur"
+#: key-signature-interface.cc:77
+#, c-format
+msgid "No glyph found for alteration: %s"
 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"
+#: key-signature-interface.cc:87
+msgid "alteration not found"
 msgstr ""
 
-#: dots.cc:48
-#, c-format
-msgid "dot `%s' not found"
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
+msgid "cannot find start of ligature"
 msgstr ""
 
-#. find out the ideal number of pages
-#: optimal-page-breaking.cc:62
-msgid "Finding the ideal number of pages..."
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
+msgid "already have a ligature"
 msgstr ""
 
-#: optimal-page-breaking.cc:85
-msgid ""
-"could not satisfy systems-per-page and page-count at the same time, ignoring "
-"systems-per-page"
+#: ligature-engraver.cc:109
+msgid "no right bound"
 msgstr ""
 
-#: optimal-page-breaking.cc:105
-msgid "Fitting music on 1 page..."
+#: ligature-engraver.cc:140
+msgid "no left bound"
 msgstr ""
 
-#: optimal-page-breaking.cc:107
-#, c-format
-msgid "Fitting music on %d pages..."
+#: ligature-engraver.cc:184
+msgid "unterminated ligature"
 msgstr ""
 
-#: optimal-page-breaking.cc:109
-#, c-format
-msgid "Fitting music on %d or %d pages..."
+#: ligature-engraver.cc:211
+msgid "ignoring rest: ligature may not contain rest"
 msgstr ""
 
-#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
-#, c-format
-msgid "trying %d systems"
+#: ligature-engraver.cc:212
+msgid "ligature was started here"
 msgstr ""
 
-#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
+#: lily-guile.cc:93
 #, c-format
-msgid "best score for this sys-count: %f"
+msgid "(load path: `%s')"
 msgstr ""
 
-#: accidental.cc:200
+#: lily-guile.cc:416
 #, c-format
-msgid "Could not find glyph-name for alteration %s"
+msgid "cannot find property type-check for `%s' (%s)."
 msgstr ""
 
-#: accidental.cc:215
-msgid "natural alteration glyph not found"
+#: lily-guile.cc:419
+msgid "perhaps a typing error?"
 msgstr ""
 
-#: context-property.cc:43
-msgid "need symbol arguments for \\override and \\revert"
+#: lily-guile.cc:426
+msgid "doing assignment anyway"
 msgstr ""
 
-#: font-config-scheme.cc:151 font-config.cc:53
+#: lily-guile.cc:438
 #, c-format
-msgid "failed adding font directory: %s"
+msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr ""
 
-#: font-config-scheme.cc:153 font-config.cc:55
-#, c-format
-msgid "Adding font directory: %s"
+#: lily-lexer.cc:255
+msgid "include files are not allowed in safe mode"
 msgstr ""
 
-#: font-config-scheme.cc:167
+#: lily-lexer.cc:282
 #, c-format
-msgid "failed adding font file: %s"
+msgid "identifier name is a keyword: `%s'"
 msgstr ""
 
-#: font-config-scheme.cc:169
+#: lily-lexer.cc:303 lily-lexer.cc:316
 #, c-format
-msgid "Adding font file: %s"
+msgid "%s:EOF"
 msgstr ""
 
-#: hairpin.cc:61
-msgid "Asking for broken bound padding at a non-broken bound."
+#: lily-parser-scheme.cc:80
+#, c-format
+msgid "Changing working directory to: `%s'"
 msgstr ""
 
-#: hairpin.cc:254
-msgid "decrescendo too small"
+#: lily-parser-scheme.cc:84
+#, c-format
+msgid "unable to change directory to: `%s'"
 msgstr ""
 
-#: open-type-font.cc:44
+#: lily-parser-scheme.cc:99
 #, c-format
-msgid "cannot allocate %lu bytes"
+msgid "cannot find init file: `%s'"
 msgstr ""
 
-#: open-type-font.cc:48
+#: lily-parser-scheme.cc:117
 #, c-format
-msgid "cannot load font table: %s"
+msgid "Processing `%s'"
 msgstr ""
 
-#: open-type-font.cc:53
-#, c-format
-msgid "FreeType error: %s"
+#: lily-parser-scheme.cc:208
+msgid ""
+"ly:parser-parse-string is only valid with a new parser.  Use ly:parser-"
+"include-string instead."
 msgstr ""
 
-#: open-type-font.cc:110
-#, c-format
-msgid "unsupported font format: %s"
+#: lily-parser-scheme.cc:239
+msgid ""
+"ly:parse-string-expression is only valid with a new parser.  Use ly:parser-"
+"include-string instead."
 msgstr ""
 
-#: open-type-font.cc:112
-#, c-format
-msgid "error reading font file %s: %s"
+#: lily-parser.cc:109
+msgid "Parsing..."
 msgstr ""
 
-#: open-type-font.cc:187
-#, c-format
-msgid "FT_Get_Glyph_Name () Freetype error: %s"
+#: line-spanner.cc:373
+msgid "Line spanner's left point is to the right of its right point."
 msgstr ""
 
-#: open-type-font.cc:318 pango-font.cc:189
+#: lyric-combine-music-iterator.cc:199
+msgid "argument of \\lyricsto should contain Lyrics context"
+msgstr ""
+
+#: lyric-combine-music-iterator.cc:337
 #, c-format
-msgid "FT_Get_Glyph_Name () error: %s"
+msgid "cannot find Voice `%s'"
+msgstr ""
+
+#: lyric-engraver.cc:186
+msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
 msgstr ""
 
 #: main.cc:101
@@ -2474,309 +2236,478 @@ msgstr ""
 msgid "write output to FILE (suffix will be added)"
 msgstr ""
 
-#: main.cc:172
-msgid "relocate using directory of lilypond program"
+#: main.cc:172
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
+#: main.cc:173
+msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+msgstr ""
+
+#: main.cc:175
+msgid "be verbose (equivalent to loglevel=DEBUG)"
+msgstr ""
+
+#. Do not update the copyright years here, run `make grand-replace'
+#: main.cc:242
+#, c-format
+msgid ""
+"Copyright (c) %s by\n"
+"%s  and others."
+msgstr ""
+
+#. No version number or newline here.  It confuses help2man.
+#: main.cc:269
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr ""
+
+#: main.cc:271
+msgid "Typeset music and/or produce MIDI from FILE."
+msgstr ""
+
+#: main.cc:273
+msgid "LilyPond produces beautiful music notation."
+msgstr ""
+
+#: main.cc:275
+#, c-format
+msgid "For more information, see %s"
+msgstr ""
+
+#: main.cc:277
+msgid "Options:"
+msgstr ""
+
+#: main.cc:331
+#, c-format
+msgid "expected %d arguments with jail, found: %u"
+msgstr ""
+
+#: main.cc:345
+#, c-format
+msgid "no such user: %s"
+msgstr ""
+
+#: main.cc:347
+#, c-format
+msgid "cannot get user id from user name: %s: %s"
+msgstr ""
+
+#: main.cc:362
+#, c-format
+msgid "no such group: %s"
+msgstr ""
+
+#: main.cc:364
+#, c-format
+msgid "cannot get group id from group name: %s: %s"
+msgstr ""
+
+#: main.cc:372
+#, c-format
+msgid "cannot chroot to: %s: %s"
+msgstr ""
+
+#: main.cc:379
+#, c-format
+msgid "cannot change group id to: %d: %s"
+msgstr ""
+
+#: main.cc:385
+#, c-format
+msgid "cannot change user id to: %d: %s"
+msgstr ""
+
+#: main.cc:391
+#, c-format
+msgid "cannot change working directory to: %s: %s"
+msgstr ""
+
+#: main.cc:639
+#, c-format
+msgid "exception caught: %s"
+msgstr ""
+
+#. FIXME: constant error message.
+#: mark-engraver.cc:156
+msgid "rehearsalMark must have integer value"
+msgstr ""
+
+#: mark-engraver.cc:162
+msgid "mark label must be a markup object"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:96
+msgid "ligature with less than 2 heads -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:123
+msgid "cannot determine pitch of ligature primitive -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:137
+msgid "single note ligature - skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:148
+msgid "prime interval within ligature -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:159
+msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:202
+msgid "semibrevis must be followed by another one -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:212
+msgid ""
+"semibreves can only appear at the beginning of a ligature,\n"
+"and there may be only zero or two of them"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:232
+msgid ""
+"invalid ligatura ending:\n"
+"when the last note is a descending brevis,\n"
+"the penultimate note must be another one,\n"
+"or the ligatura must be LB or SSB"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:387
+msgid "unexpected case fall-through"
+msgstr ""
+
+#: midi-item.cc:89
+#, c-format
+msgid "no such MIDI instrument: `%s'"
+msgstr ""
+
+#: midi-item.cc:161
+msgid "Time signature with more than 255 beats.  Truncating"
+msgstr ""
+
+#: midi-stream.cc:39
+#, c-format
+msgid "cannot open for write: %s: %s"
+msgstr ""
+
+#: midi-stream.cc:55
+#, c-format
+msgid "cannot write to file: `%s'"
+msgstr ""
+
+#: minimal-page-breaking.cc:40 paper-score.cc:122
+msgid "Calculating line breaks..."
+msgstr ""
+
+#: minimal-page-breaking.cc:44
+msgid "Calculating page breaks..."
+msgstr ""
+
+#: multi-measure-rest.cc:138
+msgid ""
+"usable-duration-logs must be a non-empty list.  Falling back to whole rests."
+msgstr ""
+
+#: multi-measure-rest.cc:328
+msgid "Using naive multi measure rest spacing."
+msgstr ""
+
+#: music.cc:150
+#, c-format
+msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr ""
 
-#: main.cc:173
-msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+#: music.cc:219
+msgid "(normalized pitch)"
 msgstr ""
 
-#: main.cc:175
-msgid "be verbose (equivalent to loglevel=DEBUG)"
+#: music.cc:223
+#, c-format
+msgid "Transposing %s by %s makes alteration larger than double"
 msgstr ""
 
-#. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:242
+#: new-dynamic-engraver.cc:168
 #, c-format
 msgid ""
-"Copyright (c) %s by\n"
-"%s  and others."
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
 msgstr ""
 
-#. No version number or newline here.  It confuses help2man.
-#: main.cc:269
+#: new-dynamic-engraver.cc:233
 #, c-format
-msgid "Usage: %s [OPTION]... FILE..."
+msgid "unterminated %s"
 msgstr ""
 
-#: main.cc:271
-msgid "Typeset music and/or produce MIDI from FILE."
+#: new-fingering-engraver.cc:113
+msgid "cannot add text scripts to individual note heads"
 msgstr ""
 
-#: main.cc:273
-msgid "LilyPond produces beautiful music notation."
+#: new-fingering-engraver.cc:269
+msgid "no placement found for fingerings"
 msgstr ""
 
-#: main.cc:275
-#, c-format
-msgid "For more information, see %s"
+#: new-fingering-engraver.cc:270
+msgid "placing below"
 msgstr ""
 
-#: main.cc:277
-msgid "Options:"
+#: note-collision.cc:496
+msgid "ignoring too many clashing note columns"
 msgstr ""
 
-#: main.cc:331
-#, c-format
-msgid "expected %d arguments with jail, found: %u"
+#: note-column.cc:147
+msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: main.cc:345
+#: note-head.cc:95
 #, c-format
-msgid "no such user: %s"
+msgid "none of note heads `%s' or `%s' found"
 msgstr ""
 
-#: main.cc:347
-#, c-format
-msgid "cannot get user id from user name: %s: %s"
+#: note-heads-engraver.cc:76
+msgid "NoteEvent without pitch"
 msgstr ""
 
-#: main.cc:362
+#: open-type-font.cc:44
 #, c-format
-msgid "no such group: %s"
+msgid "cannot allocate %lu bytes"
 msgstr ""
 
-#: main.cc:364
+#: open-type-font.cc:48
 #, c-format
-msgid "cannot get group id from group name: %s: %s"
+msgid "cannot load font table: %s"
 msgstr ""
 
-#: main.cc:372
+#: open-type-font.cc:53
 #, c-format
-msgid "cannot chroot to: %s: %s"
+msgid "FreeType error: %s"
 msgstr ""
 
-#: main.cc:379
+#: open-type-font.cc:110
 #, c-format
-msgid "cannot change group id to: %d: %s"
+msgid "unsupported font format: %s"
 msgstr ""
 
-#: main.cc:385
+#: open-type-font.cc:112
 #, c-format
-msgid "cannot change user id to: %d: %s"
+msgid "error reading font file %s: %s"
 msgstr ""
 
-#: main.cc:391
+#: open-type-font.cc:187
 #, c-format
-msgid "cannot change working directory to: %s: %s"
+msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr ""
 
-#: main.cc:639
+#: open-type-font.cc:318 pango-font.cc:189
 #, c-format
-msgid "exception caught: %s"
+msgid "FT_Get_Glyph_Name () error: %s"
 msgstr ""
 
-#: page-turn-page-breaking.cc:168
-#, c-format
-msgid "page-turn-page-breaking: breaking from %d to %d"
+#. find out the ideal number of pages
+#: optimal-page-breaking.cc:62
+msgid "Finding the ideal number of pages..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:217
+#: optimal-page-breaking.cc:85
 msgid ""
-"cannot fit the first page turn onto a single page.  Consider setting first-"
-"page-number to an even number."
+"could not satisfy systems-per-page and page-count at the same time, ignoring "
+"systems-per-page"
 msgstr ""
 
-#: page-turn-page-breaking.cc:230
-#, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
+#: optimal-page-breaking.cc:105
+msgid "Fitting music on 1 page..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:300
+#: optimal-page-breaking.cc:107
 #, c-format
-msgid "break starting at page %d"
+msgid "Fitting music on %d pages..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:301
+#: optimal-page-breaking.cc:109
 #, c-format
-msgid "\tdemerits: %f"
+msgid "Fitting music on %d or %d pages..."
 msgstr ""
 
-#: page-turn-page-breaking.cc:302
+#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:172
 #, c-format
-msgid "\tsystem count: %d"
+msgid "trying %d systems"
 msgstr ""
 
-#: page-turn-page-breaking.cc:303
+#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:200
 #, c-format
-msgid "\tpage count: %d"
+msgid "best score for this sys-count: %f"
 msgstr ""
 
-#: page-turn-page-breaking.cc:304
-#, c-format
-msgid "\tprevious break: %d"
+#: optimal-page-breaking.cc:207 page-turn-page-breaking.cc:248
+#: paper-score.cc:162
+msgid "Drawing systems..."
 msgstr ""
 
-#: midi-item.cc:89
-#, c-format
-msgid "no such MIDI instrument: `%s'"
+#: output-def.cc:235
+msgid "margins do not fit with line-width, setting default values"
 msgstr ""
 
-#: midi-item.cc:161
-msgid "Time signature with more than 255 beats.  Truncating"
+#: output-def.cc:242
+msgid ""
+"systems run off the page due to improper paper settings, setting default "
+"values"
 msgstr ""
 
-#: stem-engraver.cc:110
-msgid "tremolo duration is too long"
+#: page-breaking.cc:277
+msgid ""
+"ignoring min-systems-per-page and max-systems-per-page because systems-per-"
+"page was set"
 msgstr ""
 
-#: stem-engraver.cc:162
-#, c-format
-msgid "adding note head to incompatible stem (type = %d/%d)"
+#: page-breaking.cc:282
+msgid ""
+"min-systems-per-page is larger than max-systems-per-page, ignoring both "
+"values"
 msgstr ""
 
-#: stem-engraver.cc:165
-msgid "maybe input should specify polyphonic voices"
+#: page-layout-problem.cc:403
+msgid ""
+"A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr ""
 
-#: translator.cc:326
-#, c-format
-msgid "Two simultaneous %s events, junking this one"
+#: page-layout-problem.cc:732
+msgid ""
+"cannot fit music on page: ragged-spacing was requested, but page was "
+"compressed"
 msgstr ""
 
-#: translator.cc:327
+#: page-layout-problem.cc:735
 #, c-format
-msgid "Previous %s event here"
-msgstr ""
-
-#: glissando-engraver.cc:158
-msgid "unterminated glissando"
-msgstr ""
-
-#: skyline-pair.cc:131
-msgid "direction must not be CENTER in ly:skyline-pair::skyline"
+msgid "cannot fit music on page: overflow is %f"
 msgstr ""
 
-#: beam-engraver.cc:147
-msgid "already have a beam"
+#: page-layout-problem.cc:737
+msgid "compressing music to fit"
 msgstr ""
 
-#: beam-engraver.cc:230
-msgid "unterminated beam"
+#: page-layout-problem.cc:1197
+msgid "staff-affinities should only decrease"
 msgstr ""
 
-#: beam-engraver.cc:277
-msgid "stem does not fit in beam"
+#: page-turn-page-breaking.cc:168
+#, c-format
+msgid "page-turn-page-breaking: breaking from %d to %d"
 msgstr ""
 
-#: beam-engraver.cc:278
-msgid "beam was started here"
+#: page-turn-page-breaking.cc:217
+msgid ""
+"cannot fit the first page turn onto a single page.  Consider setting first-"
+"page-number to an even number."
 msgstr ""
 
-#: key-engraver.cc:199
-msgid "Incomplete keyAlterationOrder for key signature"
+#: page-turn-page-breaking.cc:230
+#, c-format
+msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr ""
 
-#.
-#. Todo: should make typecheck?
-#.
-#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#: time-signature-engraver.cc:75
+#: page-turn-page-breaking.cc:300
 #, c-format
-msgid "strange time signature found: %d/%d"
+msgid "break starting at page %d"
 msgstr ""
 
-#: lily-parser-scheme.cc:80
+#: page-turn-page-breaking.cc:301
 #, c-format
-msgid "Changing working directory to: `%s'"
+msgid "\tdemerits: %f"
 msgstr ""
 
-#: lily-parser-scheme.cc:84
+#: page-turn-page-breaking.cc:302
 #, c-format
-msgid "unable to change directory to: `%s'"
+msgid "\tsystem count: %d"
 msgstr ""
 
-#: lily-parser-scheme.cc:99
+#: page-turn-page-breaking.cc:303
 #, c-format
-msgid "cannot find init file: `%s'"
+msgid "\tpage count: %d"
 msgstr ""
 
-#: lily-parser-scheme.cc:117
+#: page-turn-page-breaking.cc:304
 #, c-format
-msgid "Processing `%s'"
+msgid "\tprevious break: %d"
 msgstr ""
 
-#: lily-parser-scheme.cc:208
+#: pango-font.cc:205
+#, c-format
 msgid ""
-"ly:parser-parse-string is only valid with a new parser.  Use ly:parser-"
-"include-string instead."
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
 msgstr ""
 
-#: lily-parser-scheme.cc:239
-msgid ""
-"ly:parse-string-expression is only valid with a new parser.  Use ly:parser-"
-"include-string instead."
+#: pango-font.cc:242
+#, c-format
+msgid "no PostScript font name for font `%s'"
 msgstr ""
 
-#. We are completely screwed.
-#: beam-quanting.cc:839
-msgid "no viable initial configuration found: may not find good beam slope"
+#: pango-font.cc:291
+msgid "FreeType face has no PostScript font name"
 msgstr ""
 
-#: lily-guile.cc:93
+#: paper-book.cc:214
 #, c-format
-msgid "(load path: `%s')"
+msgid "program option -dprint-pages not supported by backend `%s'"
 msgstr ""
 
-#: lily-guile.cc:416
+#: paper-book.cc:233
 #, c-format
-msgid "cannot find property type-check for `%s' (%s)."
+msgid "program option -dpreview not supported by backend `%s'"
 msgstr ""
 
-#: lily-guile.cc:419
-msgid "perhaps a typing error?"
+#: paper-column-engraver.cc:261
+msgid ""
+"forced break was overridden by some other event, should you be using bar "
+"checks?"
 msgstr ""
 
-#: lily-guile.cc:426
-msgid "doing assignment anyway"
+#: paper-outputter-scheme.cc:41
+#, c-format
+msgid "Layout output to `%s'..."
 msgstr ""
 
-#: lily-guile.cc:438
+#: paper-score.cc:134
 #, c-format
-msgid "type check for `%s' failed; value `%s' must be of type `%s'"
+msgid "Element count %d (spanners %d) "
 msgstr ""
 
-#: rest-collision.cc:146
-msgid "cannot resolve rest collision: rest direction not set"
+#: paper-score.cc:138
+msgid "Preprocessing graphical objects..."
 msgstr ""
 
-#: rest-collision.cc:158 rest-collision.cc:267
-msgid "too many colliding rests"
+#: parse-scm.cc:121
+msgid "GUILE signaled an error for the expression beginning here"
 msgstr ""
 
-#: episema-engraver.cc:75
-msgid "already have an episema"
+#: partial-iterator.cc:45
+msgid "trying to use \\partial after the start of a piece"
 msgstr ""
 
-#: episema-engraver.cc:88
-msgid "cannot find start of episema"
+#: pdf-scheme.cc:50
+#, c-format
+msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr ""
 
-#: episema-engraver.cc:137
-msgid "unterminated episema"
+#: percent-repeat-engraver.cc:147
+msgid "unterminated percent repeat"
 msgstr ""
 
-#: rest.cc:192
-#, c-format
-msgid "rest `%s' not found"
+#: performance.cc:54
+msgid "Track..."
 msgstr ""
 
-#: pango-font.cc:205
+#: performance.cc:82
 #, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
+msgid "MIDI output to `%s'..."
 msgstr ""
 
-#: pango-font.cc:242
+#: phrasing-slur-engraver.cc:101 slur-engraver.cc:102
 #, c-format
-msgid "no PostScript font name for font `%s'"
-msgstr ""
-
-#: pango-font.cc:291
-msgid "FreeType face has no PostScript font name"
+msgid "direction of %s invalid: %d"
 msgstr ""
 
 #: phrasing-slur-engraver.cc:175
@@ -2793,142 +2724,155 @@ msgstr ""
 msgid "already have phrasing slur"
 msgstr ""
 
-#: lyric-engraver.cc:186
-msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
+#: piano-pedal-engraver.cc:279
+#, c-format
+msgid "expect 3 strings for piano pedals, found: %ld"
 msgstr ""
 
-#: page-breaking.cc:277
-msgid ""
-"ignoring min-systems-per-page and max-systems-per-page because systems-per-"
-"page was set"
+#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
+#: piano-pedal-performer.cc:104
+#, c-format
+msgid "cannot find start of piano pedal: `%s'"
 msgstr ""
 
-#: page-breaking.cc:282
-msgid ""
-"min-systems-per-page is larger than max-systems-per-page, ignoring both "
-"values"
+#: piano-pedal-engraver.cc:340
+#, c-format
+msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr ""
 
-#: paper-outputter-scheme.cc:41
+#: program-option-scheme.cc:235
 #, c-format
-msgid "Layout output to `%s'..."
+msgid "no such internal option: %s"
 msgstr ""
 
-#: performance.cc:54
-msgid "Track..."
+#: property-iterator.cc:93
+#, c-format
+msgid "not a grob name, `%s'"
 msgstr ""
 
-#: performance.cc:82
+#: relative-octave-check.cc:49
+msgid "Failed octave check, got: "
+msgstr ""
+
+#: relocate.cc:52
 #, c-format
-msgid "MIDI output to `%s'..."
+msgid "Setting %s to %s"
 msgstr ""
 
-#: tuplet-engraver.cc:110
-msgid "No tuplet to end"
+#. this warning should only be printed in debug mode!
+#: relocate.cc:73
+#, c-format
+msgid "no such file: %s for %s"
 msgstr ""
 
-#: gregorian-ligature-engraver.cc:70
+#. this warning should only be printed in debug mode!
+#. this warning should only be printed in debug mode
+#: relocate.cc:84 relocate.cc:102
 #, c-format
-msgid "\\%s ignored"
+msgid "no such directory: %s for %s"
 msgstr ""
 
-#: gregorian-ligature-engraver.cc:75
+#: relocate.cc:93
 #, c-format
-msgid "implied \\%s added"
+msgid "%s=%s (prepend)\n"
 msgstr ""
 
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on first head of ligature"
+#: relocate.cc:124
+#, c-format
+msgid "not relocating, no %s/ or current/ found under %s"
 msgstr ""
 
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:236
-msgid "cannot apply `\\~' on heads with identical pitch"
+#: relocate.cc:134
+#, c-format
+msgid "Relocation: compile datadir=%s, new datadir=%s"
 msgstr ""
 
-#: key-signature-interface.cc:77
+#: relocate.cc:146
 #, c-format
-msgid "No glyph found for alteration: %s"
+msgid "Relocation: framework_prefix=%s"
 msgstr ""
 
-#: key-signature-interface.cc:87
-msgid "alteration not found"
+#: relocate.cc:186
+#, c-format
+msgid "Relocation: is absolute: argv0=%s\n"
 msgstr ""
 
-#: source-file.cc:85
+#: relocate.cc:192
 #, c-format
-msgid "expected to read %d characters, got %d"
+msgid "Relocation: from cwd: argv0=%s\n"
 msgstr ""
 
-#: axis-group-engraver.cc:94
-msgid "Axis_group_engraver: vertical group already has a parent"
+#: relocate.cc:208
+#, c-format
+msgid ""
+"Relocation: from PATH=%s\n"
+"argv0=%s"
 msgstr ""
 
-#: axis-group-engraver.cc:95
-msgid "are there two Axis_group_engravers?"
+#: relocate.cc:235
+msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr ""
 
-#: axis-group-engraver.cc:96
-msgid "removing this vertical group"
+#: relocate.cc:360
+#, c-format
+msgid "Relocation file: %s"
 msgstr ""
 
-#: cluster.cc:120
+#: relocate.cc:364 source-file.cc:65
 #, c-format
-msgid "unknown cluster style `%s'"
+msgid "cannot open file: `%s'"
 msgstr ""
 
-#: cluster.cc:157
-msgid "junking empty cluster"
+#: relocate.cc:394
+#, c-format
+msgid "Unknown relocation command %s"
 msgstr ""
 
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
-msgid "no music found in score"
+#: rest-collision-engraver.cc:70
+msgid "rhythmic head is not part of a rhythmic column"
 msgstr ""
 
-#: global-context-scheme.cc:104
-msgid "Interpreting music..."
+#: rest-collision.cc:146
+msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: global-context-scheme.cc:126
-#, c-format
-msgid "elapsed time: %.2f seconds"
+#: rest-collision.cc:158 rest-collision.cc:272
+msgid "too many colliding rests"
 msgstr ""
 
-#: output-def.cc:235
-msgid "margins do not fit with line-width, setting default values"
+#: rest.cc:193
+#, c-format
+msgid "rest `%s' not found"
 msgstr ""
 
-#: output-def.cc:242
-msgid ""
-"systems run off the page due to improper paper settings, setting default "
-"values"
+#: score-engraver.cc:78
+#, c-format
+msgid "cannot find `%s'"
 msgstr ""
 
-#: axis-group-interface.cc:668
-msgid "an outside-staff object should have a direction, defaulting to up"
+#: score-engraver.cc:80
+msgid "Music font has not been installed properly."
 msgstr ""
 
-#: coherent-ligature-engraver.cc:110
+#: score-engraver.cc:82
 #, c-format
-msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+msgid "Search path `%s'"
 msgstr ""
 
-#: percent-repeat-engraver.cc:147
-msgid "unterminated percent repeat"
+#: score-engraver.cc:84
+msgid "Aborting"
 msgstr ""
 
-#: note-head.cc:95
-#, c-format
-msgid "none of note heads `%s' or `%s' found"
+#: score.cc:172
+msgid "already have music in score"
 msgstr ""
 
-#: font-config.cc:38
-msgid "Initializing FontConfig..."
+#: score.cc:173
+msgid "this is the previous music"
 msgstr ""
 
-#: font-config.cc:58
-msgid "Building font database..."
+#: score.cc:178
+msgid "errors found, ignoring music expression"
 msgstr ""
 
 #. FIXME:
@@ -2940,71 +2884,79 @@ msgstr ""
 msgid " scheme encoding: "
 msgstr ""
 
-#: all-font-metrics.cc:149
-#, c-format
-msgid "cannot find font: `%s'"
+#: skyline-pair.cc:131
+msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr ""
 
-#: clef.cc:65
-#, c-format
-msgid "clef `%s' not found"
+#: slur-engraver.cc:176
+msgid "unterminated slur"
 msgstr ""
 
-#: property-iterator.cc:93
+#: slur-engraver.cc:211
+msgid "cannot end slur"
+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"
+msgstr ""
+
+#: slur.cc:430
 #, c-format
-msgid "not a grob name, `%s'"
+msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr ""
 
-#: pdf-scheme.cc:50
+#: source-file.cc:85
 #, c-format
-msgid "Conversion of string `%s' to UTF-16be failed: %s"
+msgid "expected to read %d characters, got %d"
 msgstr ""
 
-#: new-fingering-engraver.cc:113
-msgid "cannot add text scripts to individual note heads"
+#: staff-performer.cc:275
+msgid "MIDI channel wrapped around"
 msgstr ""
 
-#: new-fingering-engraver.cc:269
-msgid "no placement found for fingerings"
+#: staff-performer.cc:276
+msgid "remapping modulo 16"
 msgstr ""
 
-#: new-fingering-engraver.cc:270
-msgid "placing below"
+#: stem-engraver.cc:110
+msgid "tremolo duration is too long"
 msgstr ""
 
-#: bar-check-iterator.cc:84
+#: stem-engraver.cc:162
 #, c-format
-msgid "barcheck failed at: %s"
+msgid "adding note head to incompatible stem (type = %d/%d)"
 msgstr ""
 
-#: change-iterator.cc:34
-#, c-format
-msgid "cannot change `%s' to `%s'"
+#: stem-engraver.cc:165
+msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
-#. FIXME: constant error message.
-#: change-iterator.cc:93
-msgid "cannot find context to switch to"
+#: stem.cc:128
+msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#. We could change the current translator's id, but that would make
-#. errors hard to catch.
-#.
-#. last->translator_id_string () = get_change
-#. ()->change_to_id_string ();
-#: change-iterator.cc:102
+#: system.cc:200
 #, c-format
-msgid "not changing to same context type: %s"
+msgid "Element count %d"
+msgstr ""
+
+#: system.cc:480
+#, c-format
+msgid "Grob count %d"
 msgstr ""
 
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:106
-msgid "none of these in my family"
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:129
+#, c-format
+msgid "Cyclic markup detected: %s"
 msgstr ""
 
-#: translator-group-ctors.cc:40
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:142
 #, c-format
-msgid "fatal error.  Couldn't find type: %s"
+msgid "Markup depth exceeds maximal value of %d; Markup: %s"
 msgstr ""
 
 #: text-spanner-engraver.cc:72
@@ -3019,117 +2971,178 @@ msgstr ""
 msgid "unterminated text spanner"
 msgstr ""
 
-#: lily-parser.cc:109
-msgid "Parsing..."
+#: tie-engraver.cc:117
+msgid "unterminated tie"
 msgstr ""
 
-#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:187 constrained-breaking.cc:205
-msgid "cannot find line breaking that satisfies constraints"
+#: tie-engraver.cc:348
+msgid "lonely tie"
 msgstr ""
 
-#. FIXME: constant error message.
-#: mark-engraver.cc:157
-msgid "rehearsalMark must have integer value"
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:75
+#, c-format
+msgid "strange time signature found: %d/%d"
 msgstr ""
 
-#: mark-engraver.cc:163
-msgid "mark label must be a markup object"
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#: time-signature.cc:94
+#, c-format
+msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
 
-#: rest-collision-engraver.cc:70
-msgid "rhythmic head is not part of a rhythmic column"
+#: translator-ctors.cc:65
+#, c-format
+msgid "unknown translator: `%s'"
 msgstr ""
 
-#. If there is no such symbol, we default to the numbered style.
-#. (Here really with a warning!)
-#: time-signature.cc:122
+#: translator-group-ctors.cc:40
 #, c-format
-msgid "time signature symbol `%s' not found; reverting to numbered style"
+msgid "fatal error.  Couldn't find type: %s"
 msgstr ""
 
-#: grob-interface.cc:68
+#: translator-group.cc:188
 #, c-format
-msgid "Unknown interface `%s'"
+msgid "cannot find: `%s'"
 msgstr ""
 
-#: grob-interface.cc:79
+#: translator.cc:326
 #, c-format
-msgid "Grob `%s' has no interface for property `%s'"
+msgid "Two simultaneous %s events, junking this one"
 msgstr ""
 
-#: midi-stream.cc:39
+#: translator.cc:327
 #, c-format
-msgid "cannot open for write: %s: %s"
+msgid "Previous %s event here"
 msgstr ""
 
-#: midi-stream.cc:55
+#: ttf.cc:480 ttf.cc:528
 #, c-format
-msgid "cannot write to file: `%s'"
+msgid "font index %d too large for font `%s', using index 0"
 msgstr ""
 
-#. TODO: Also print the arguments of the markup!
-#: text-interface.cc:129
+#: ttf.cc:512 ttf.cc:562
+msgid "font index must be non-negative, using index 0"
+msgstr ""
+
+#: tuplet-engraver.cc:110
+msgid "No tuplet to end"
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:400
 #, c-format
-msgid "Cyclic markup detected: %s"
+msgid ""
+"ignored prefix(es) `%s' of this head according to restrictions of the "
+"selected ligature style"
 msgstr ""
 
-#. TODO: Also print the arguments of the markup!
-#: text-interface.cc:142
+#: vaticana-ligature-engraver.cc:466
+msgid ""
+"Ambiguous use of dots in ligature: there are multiple dotted notes with the "
+"same pitch.  The ligature should be split."
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:524
+msgid ""
+"This ligature has a dotted head followed by a non-dotted head.  The ligature "
+"should be split after the last dotted head before this head."
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:736
 #, c-format
-msgid "Markup depth exceeds maximal value of %d; Markup: %s"
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
+msgstr ""
+
+#: vaticana-ligature.cc:95
+msgid "flexa-height undefined; assuming 0"
+msgstr ""
+
+#: vaticana-ligature.cc:100
+msgid "ascending vaticana style flexa"
+msgstr ""
+
+#. fixme: be more verbose.
+#: volta-engraver.cc:110
+msgid "cannot end volta spanner"
+msgstr ""
+
+#: volta-engraver.cc:120
+msgid "already have a volta spanner, ending that one prematurely"
+msgstr ""
+
+#: volta-engraver.cc:124
+msgid "also already have an ended spanner"
+msgstr ""
+
+#: volta-engraver.cc:125
+msgid "giving up"
 msgstr ""
 
-#: parser.yy:162 parser.yy:176
+#: parser.yy:162 parser.yy:176 /home/gperciva/src/lilypond/lily/parser.yy:162
+#: /home/gperciva/src/lilypond/lily/parser.yy:176
 msgid "Too much lookahead"
 msgstr ""
 
-#: parser.yy:833 parser.yy:1234
+#: parser.yy:835 parser.yy:1256 /home/gperciva/src/lilypond/lily/parser.yy:835
+#: /home/gperciva/src/lilypond/lily/parser.yy:1256
 msgid "not a context mod"
 msgstr ""
 
-#: parser.yy:1018
+#: parser.yy:1027 /home/gperciva/src/lilypond/lily/parser.yy:1027
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:1042
+#: parser.yy:1051 /home/gperciva/src/lilypond/lily/parser.yy:1051
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1999
+#: parser.yy:1176 /home/gperciva/src/lilypond/lily/parser.yy:1176
+msgid "Ignoring non-music expression"
+msgstr ""
+
+#: parser.yy:2016 /home/gperciva/src/lilypond/lily/parser.yy:2016
 msgid "only \\consists and \\remove take non-string argument."
 msgstr ""
 
-#: parser.yy:2012
+#: parser.yy:2029 /home/gperciva/src/lilypond/lily/parser.yy:2029
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:2216
+#: parser.yy:2233 /home/gperciva/src/lilypond/lily/parser.yy:2233
 msgid "not a rhythmic event"
 msgstr ""
 
-#: parser.yy:2312 parser.yy:2317
+#: parser.yy:2329 parser.yy:2334
+#: /home/gperciva/src/lilypond/lily/parser.yy:2329
+#: /home/gperciva/src/lilypond/lily/parser.yy:2334
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:2432
+#: parser.yy:2449 /home/gperciva/src/lilypond/lily/parser.yy:2449
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:2592 parser.yy:2643
+#: parser.yy:2609 parser.yy:2653
+#: /home/gperciva/src/lilypond/lily/parser.yy:2609
+#: /home/gperciva/src/lilypond/lily/parser.yy:2653
 #, c-format
 msgid "not a duration: %d"
 msgstr ""
 
-#: parser.yy:2762
+#: parser.yy:2772 /home/gperciva/src/lilypond/lily/parser.yy:2772
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2817
+#: parser.yy:2827 /home/gperciva/src/lilypond/lily/parser.yy:2827
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: parser.yy:3077
+#: parser.yy:3087 /home/gperciva/src/lilypond/lily/parser.yy:3087
 msgid "not a markup"
 msgstr ""
 
@@ -3171,196 +3184,254 @@ msgstr ""
 msgid "string expected after \\include"
 msgstr ""
 
-#. backup rule
 #: lexer.ll:393
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:555
+#: lexer.ll:551
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:670
+#: lexer.ll:662
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:682
+#: lexer.ll:674
 msgid "EOF found inside a comment"
 msgstr ""
 
-#: lexer.ll:780
+#: lexer.ll:770
 #, c-format
 msgid "invalid character: `%s'"
 msgstr ""
 
-#: lexer.ll:883 lexer.ll:884
+#: lexer.ll:881
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:1166 lexer.ll:1167
+#: lexer.ll:1164
 msgid "non-UTF-8 input"
 msgstr ""
 
-#: lexer.ll:1210 lexer.ll:1211
+#: lexer.ll:1208
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 
-#: lexer.ll:1211 lexer.ll:1212
+#: lexer.ll:1209
 msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: lexer.ll:1217 lexer.ll:1218
+#: lexer.ll:1215
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr ""
 
-#: parser-clef.scm:143 parser-clef.scm:183
+#: backend-library.scm:27
 #, scheme-format
-msgid "unknown clef type `~a'"
+msgid "Invoking `~a'..."
 msgstr ""
 
-#: parser-clef.scm:144 parser-clef.scm:184
+#: backend-library.scm:31
 #, scheme-format
-msgid "supported clefs: ~a"
+msgid "`~a' failed (~a)\n"
 msgstr ""
 
-#: parser-ly-from-scheme.scm:73
-msgid "error in #{ ... #}"
+#: backend-library.scm:90
+#, scheme-format
+msgid "Converting to `~a'...\n"
 msgstr ""
 
-#: framework-eps.scm:108
+#. Do not try to guess the name of the png file,
+#. GS produces PNG files like BASE-page%d.png.
+#: backend-library.scm:99
 #, scheme-format
-msgid "Writing ~a..."
+msgid "Converting to ~a..."
 msgstr ""
 
-#: flag-styles.scm:151
+#: backend-library.scm:137
 #, scheme-format
-msgid "flag stroke `~a' or `~a' not found"
+msgid "Writing header field `~a' to `~a'..."
 msgstr ""
 
-#: graphviz.scm:64
+#: backend-library.scm:187
 #, scheme-format
-msgid "Writing graph `~a'..."
+msgid "missing stencil expression `~S'"
+msgstr ""
+
+#: chord-entry.scm:52
+#, scheme-format
+msgid "Spurious garbage following chord: ~A"
 msgstr ""
 
-#: define-music-properties.scm:21 define-grob-properties.scm:21
-#: define-context-properties.scm:31
+#: define-context-properties.scm:31 define-grob-properties.scm:21
+#: define-music-properties.scm:21
 #, scheme-format
 msgid "symbol ~S redefined"
 msgstr ""
 
-#: lily.scm:234
-msgid "Using (ice-9 curried-definitions) module\n"
+#: define-event-classes.scm:67
+#, scheme-format
+msgid "unknown parent class `~a'"
 msgstr ""
 
-#: lily.scm:237
-msgid "Guile 1.8\n"
+#: define-markup-commands.scm:887
+msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: lily.scm:297
+#: define-markup-commands.scm:2614
 #, scheme-format
-msgid "cannot find: ~A"
+msgid "Cannot find glyph ~a"
 msgstr ""
 
-#: lily.scm:707
-msgid "Success: compilation successfully completed"
+#: define-markup-commands.scm:3040
+#, scheme-format
+msgid "no brace found for point size ~S "
 msgstr ""
 
-#: lily.scm:708
-msgid "Compilation completed with warnings or errors"
+#: define-markup-commands.scm:3041
+#, scheme-format
+msgid "defaulting to ~S pt"
 msgstr ""
 
-#: lily.scm:770
+#: define-markup-commands.scm:3194
 #, scheme-format
-msgid "job ~a terminated with signal: ~a"
+msgid "not a valid duration string: ~a"
 msgstr ""
 
-#: lily.scm:773
+#: define-music-types.scm:765
 #, scheme-format
-msgid ""
-"logfile ~a (exit ~a):\n"
-"~a"
+msgid "symbol expected: ~S"
 msgstr ""
 
-#: lily.scm:795 lily.scm:881
+#: define-music-types.scm:768
 #, scheme-format
-msgid "failed files: ~S"
+msgid "cannot find music object: ~S"
 msgstr ""
 
-#: lily.scm:872
+#: define-music-types.scm:787
 #, scheme-format
-msgid "Redirecting output to ~a..."
+msgid "unknown repeat type `~S'"
+msgstr ""
+
+#: define-music-types.scm:788
+msgid "See define-music-types.scm for supported repeats"
+msgstr ""
+
+#: define-note-names.scm:962
+msgid "Select note names language."
 msgstr ""
 
-#: lily.scm:891 ps-to-png.scm:66
+#: define-note-names.scm:968
 #, scheme-format
-msgid "Invoking `~a'...\n"
+msgid "Using `~a' note names..."
 msgstr ""
 
-#: layout-beam.scm:40
+#: define-note-names.scm:971
 #, scheme-format
-msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
+msgid "Could not find language `~a'.  Ignoring."
 msgstr ""
 
-#: layout-beam.scm:54
+#: document-backend.scm:132
 #, scheme-format
-msgid "Error in beam quanting.  Expected ~S 0, found ~S."
+msgid "pair expected in doc ~s"
 msgstr ""
 
-#: output-svg.scm:47
+#: document-backend.scm:189
 #, scheme-format
-msgid "undefined: ~S"
+msgid "cannot find interface for property: ~S"
 msgstr ""
 
-#: output-svg.scm:157
+#: document-backend.scm:199
 #, scheme-format
-msgid "cannot decypher Pango description: ~a"
+msgid "unknown Grob interface: ~S"
 msgstr ""
 
-#: output-svg.scm:237
-msgid "Glyph must have a unicode value"
+#: documentation-lib.scm:59
+#, scheme-format
+msgid "Processing ~S..."
 msgstr ""
 
-#: output-svg.scm:289 output-svg.scm:299
+#: documentation-lib.scm:176
 #, scheme-format
-msgid "cannot find SVG font ~S"
+msgid "Writing ~S..."
 msgstr ""
 
-#: output-svg.scm:524 output-ps.scm:277
+#: documentation-lib.scm:188
 #, scheme-format
-msgid "unknown line-cap-style: ~S"
+msgid "cannot find description for property `~S' (~S)"
+msgstr ""
+
+#: documentation-lib.scm:209
+#, scheme-format
+msgid "cannot find description for property ~S (~S)"
 msgstr ""
 
-#: output-svg.scm:530 output-ps.scm:282
+#: flag-styles.scm:151
 #, scheme-format
-msgid "unknown line-join-style: ~S"
+msgid "flag stroke `~a' or `~a' not found"
+msgstr ""
+
+#: framework-eps.scm:108
+#, scheme-format
+msgid "Writing ~a..."
+msgstr ""
+
+#: framework-ps.scm:250
+#, scheme-format
+msgid "cannot embed ~S=~S"
+msgstr ""
+
+#: framework-ps.scm:293
+#, scheme-format
+msgid "cannot extract file matching ~a from ~a"
+msgstr ""
+
+#: framework-ps.scm:311
+#, scheme-format
+msgid "do not know how to embed ~S=~S"
+msgstr ""
+
+#: framework-ps.scm:336
+#, scheme-format
+msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: to-xml.scm:191
-#, scheme-format
-msgid "assertion failed: ~S"
+#: framework-ps.scm:686
+msgid ""
+"\n"
+"The PostScript backend does not support the\n"
+"system-by-system output.  For that, use the EPS backend instead,\n"
+"\n"
+"  lilypond -dbackend=eps FILE\n"
+"\n"
+"If have cut & pasted a lilypond fragment from a webpage, be sure\n"
+"to only remove anything before\n"
+"\n"
+"  %% ****************************************************************\n"
+"  %% Start cut-&-pastable-section\n"
+"  %% ****************************************************************\n"
 msgstr ""
 
-#: paper.scm:120
-msgid "set-global-staff-size: not in toplevel scope"
+#: framework-svg.scm:84
+#, scheme-format
+msgid "Updating font into: ~a"
 msgstr ""
 
-#: paper.scm:314
+#: graphviz.scm:64
 #, scheme-format
-msgid "This is not a \\layout {} object, ~S"
+msgid "Writing graph `~a'..."
 msgstr ""
 
-#: paper.scm:326
+#: layout-beam.scm:40
 #, scheme-format
-msgid "Unknown paper size: ~a"
+msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr ""
 
-#. TODO: should raise (generic) exception with throw, and catch
-#. that in parse-scm.cc
-#: paper.scm:341
-msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
+#: layout-beam.scm:54
+#, scheme-format
+msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
 #: lily-library.scm:299
@@ -3376,106 +3447,88 @@ msgstr ""
 msgid "Music unsuitable for output-def"
 msgstr ""
 
-#: lily-library.scm:888
+#: lily-library.scm:892
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
 "applied to function @var{getter}."
 msgstr ""
 
-#: lily-library.scm:962
+#: lily-library.scm:966
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:987
+#: lily-library.scm:991
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:993
+#: lily-library.scm:997
 msgid "old relative compatibility not used"
 msgstr ""
 
-#: backend-library.scm:27
-#, scheme-format
-msgid "Invoking `~a'..."
-msgstr ""
-
-#: backend-library.scm:31
-#, scheme-format
-msgid "`~a' failed (~a)\n"
-msgstr ""
-
-#: backend-library.scm:90
-#, scheme-format
-msgid "Converting to `~a'...\n"
+#: lily.scm:234
+msgid "Using (ice-9 curried-definitions) module\n"
 msgstr ""
 
-#. Do not try to guess the name of the png file,
-#. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:99
-#, scheme-format
-msgid "Converting to ~a..."
+#: lily.scm:237
+msgid "Guile 1.8\n"
 msgstr ""
 
-#: backend-library.scm:137
+#: lily.scm:297
 #, scheme-format
-msgid "Writing header field `~a' to `~a'..."
+msgid "cannot find: ~A"
 msgstr ""
 
-#: backend-library.scm:187
-#, scheme-format
-msgid "missing stencil expression `~S'"
+#: lily.scm:708
+msgid "Success: compilation successfully completed"
 msgstr ""
 
-#: documentation-lib.scm:59
-#, scheme-format
-msgid "Processing ~S..."
+#: lily.scm:709
+msgid "Compilation completed with warnings or errors"
 msgstr ""
 
-#: documentation-lib.scm:176
+#: lily.scm:771
 #, scheme-format
-msgid "Writing ~S..."
+msgid "job ~a terminated with signal: ~a"
 msgstr ""
 
-#: documentation-lib.scm:188
+#: lily.scm:774
 #, scheme-format
-msgid "cannot find description for property `~S' (~S)"
+msgid ""
+"logfile ~a (exit ~a):\n"
+"~a"
 msgstr ""
 
-#: documentation-lib.scm:209
+#: lily.scm:796 lily.scm:882
 #, scheme-format
-msgid "cannot find description for property ~S (~S)"
-msgstr ""
-
-#: define-markup-commands.scm:887
-msgid "no systems found in \\score markup, does it have a \\layout block?"
+msgid "failed files: ~S"
 msgstr ""
 
-#: define-markup-commands.scm:2614
+#: lily.scm:873
 #, scheme-format
-msgid "Cannot find glyph ~a"
+msgid "Redirecting output to ~a..."
 msgstr ""
 
-#: define-markup-commands.scm:3040
+#: lily.scm:892 ps-to-png.scm:66
 #, scheme-format
-msgid "no brace found for point size ~S "
+msgid "Invoking `~a'...\n"
 msgstr ""
 
-#: define-markup-commands.scm:3041
+#: ly-syntax-constructors.scm:66
 #, scheme-format
-msgid "defaulting to ~S pt"
+msgid "~a function cannot return ~a"
 msgstr ""
 
-#: define-markup-commands.scm:3194
+#: ly-syntax-constructors.scm:75
 #, scheme-format
-msgid "not a valid duration string: ~a"
+msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: define-event-classes.scm:67
+#: ly-syntax-constructors.scm:188
 #, scheme-format
-msgid "unknown parent class `~a'"
+msgid "Invalid property operation ~a"
 msgstr ""
 
 #: markup-macros.scm:331
@@ -3493,35 +3546,6 @@ msgstr ""
 msgid "Not a markup command: ~A"
 msgstr ""
 
-#: document-backend.scm:132
-#, scheme-format
-msgid "pair expected in doc ~s"
-msgstr ""
-
-#: document-backend.scm:189
-#, scheme-format
-msgid "cannot find interface for property: ~S"
-msgstr ""
-
-#: document-backend.scm:199
-#, scheme-format
-msgid "unknown Grob interface: ~S"
-msgstr ""
-
-#: define-note-names.scm:962
-msgid "Select note names language."
-msgstr ""
-
-#: define-note-names.scm:968
-#, scheme-format
-msgid "Using `~a' note names..."
-msgstr ""
-
-#: define-note-names.scm:971
-#, scheme-format
-msgid "Could not find language `~a'.  Ignoring."
-msgstr ""
-
 #: modal-transforms.scm:38
 msgid "'from' pitch not in scale; ignoring"
 msgstr ""
@@ -3546,105 +3570,123 @@ msgstr ""
 msgid "negative replication count; ignoring"
 msgstr ""
 
-#: framework-ps.scm:250
+#: music-functions.scm:272
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr ""
+
+#: music-functions.scm:303
 #, scheme-format
-msgid "cannot embed ~S=~S"
+msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: framework-ps.scm:293
+#: music-functions.scm:689
+msgid "Bad chord repetition"
+msgstr ""
+
+#: music-functions.scm:724
 #, scheme-format
-msgid "cannot extract file matching ~a from ~a"
+msgid "music expected: ~S"
 msgstr ""
 
-#: framework-ps.scm:311
+#: music-functions.scm:1042
 #, scheme-format
-msgid "do not know how to embed ~S=~S"
+msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: framework-ps.scm:336
+#: music-functions.scm:1180
+msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+msgstr ""
+
+#: music-functions.scm:1240
 #, scheme-format
-msgid "do not know how to embed font ~s ~s ~s"
+msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: framework-ps.scm:686
-msgid ""
-"\n"
-"The PostScript backend does not support the\n"
-"system-by-system output.  For that, use the EPS backend instead,\n"
-"\n"
-"  lilypond -dbackend=eps FILE\n"
-"\n"
-"If have cut & pasted a lilypond fragment from a webpage, be sure\n"
-"to only remove anything before\n"
-"\n"
-"  %% ****************************************************************\n"
-"  %% Start cut-&-pastable-section\n"
-"  %% ****************************************************************\n"
+#: music-functions.scm:1241
+msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:274
-msgid "More alternatives than repeats.  Junking excess alternatives"
+#: music-functions.scm:1578
+#, scheme-format
+msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: music-functions.scm:305
+#: output-ps.scm:277 output-svg.scm:524
 #, scheme-format
-msgid "invalid tremolo repeat count: ~a"
+msgid "unknown line-cap-style: ~S"
 msgstr ""
 
-#: music-functions.scm:671
-msgid "Bad chord repetition"
+#: output-ps.scm:282 output-svg.scm:530
+#, scheme-format
+msgid "unknown line-join-style: ~S"
 msgstr ""
 
-#: music-functions.scm:706
+#: output-svg.scm:47
 #, scheme-format
-msgid "music expected: ~S"
+msgid "undefined: ~S"
 msgstr ""
 
-#: music-functions.scm:1024
+#: output-svg.scm:157
 #, scheme-format
-msgid "cannot find quoted music: `~S'"
+msgid "cannot decypher Pango description: ~a"
 msgstr ""
 
-#: music-functions.scm:1162
-msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+#: output-svg.scm:237
+msgid "Glyph must have a unicode value"
 msgstr ""
 
-#: music-functions.scm:1222
+#: output-svg.scm:289 output-svg.scm:299
 #, scheme-format
-msgid "Unknown octaveness type: ~S "
+msgid "cannot find SVG font ~S"
 msgstr ""
 
-#: music-functions.scm:1223
-msgid "Defaulting to 'any-octave."
+#: paper.scm:120
+msgid "set-global-staff-size: not in toplevel scope"
 msgstr ""
 
-#: music-functions.scm:1560
+#: paper.scm:315
 #, scheme-format
-msgid "unknown accidental style: ~S"
+msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: define-music-types.scm:765
+#: paper.scm:327
 #, scheme-format
-msgid "symbol expected: ~S"
+msgid "Unknown paper size: ~a"
 msgstr ""
 
-#: define-music-types.scm:768
+#. TODO: should raise (generic) exception with throw, and catch
+#. that in parse-scm.cc
+#: paper.scm:342
+msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
+msgstr ""
+
+#: parser-clef.scm:143 parser-clef.scm:183
 #, scheme-format
-msgid "cannot find music object: ~S"
+msgid "unknown clef type `~a'"
 msgstr ""
 
-#: define-music-types.scm:787
+#: parser-clef.scm:144 parser-clef.scm:184
 #, scheme-format
-msgid "unknown repeat type `~S'"
+msgid "supported clefs: ~a"
 msgstr ""
 
-#: define-music-types.scm:788
-msgid "See define-music-types.scm for supported repeats"
+#: parser-ly-from-scheme.scm:73
+msgid "error in #{ ... #}"
 msgstr ""
 
-#: framework-svg.scm:84
+#: part-combiner.scm:598
 #, scheme-format
-msgid "Updating font into: ~a"
+msgid "quoted music `~a' is empty"
+msgstr ""
+
+#: ps-to-png.scm:70
+#, scheme-format
+msgid "~a exited with status: ~S"
+msgstr ""
+
+#: to-xml.scm:191
+#, scheme-format
+msgid "assertion failed: ~S"
 msgstr ""
 
 #: translation-functions.scm:359
@@ -3686,33 +3728,3 @@ msgid ""
 "No label for fret ~a (on string ~a);\n"
 "only ~a fret labels provided"
 msgstr ""
-
-#: ps-to-png.scm:70
-#, scheme-format
-msgid "~a exited with status: ~S"
-msgstr ""
-
-#: chord-entry.scm:52
-#, scheme-format
-msgid "Spurious garbage following chord: ~A"
-msgstr ""
-
-#: part-combiner.scm:598
-#, scheme-format
-msgid "quoted music `~a' is empty"
-msgstr ""
-
-#: ly-syntax-constructors.scm:66
-#, scheme-format
-msgid "~a function cannot return ~a"
-msgstr ""
-
-#: ly-syntax-constructors.scm:75
-#, scheme-format
-msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
-
-#: ly-syntax-constructors.scm:188
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
index e3d5dd65d0c5c14cd7e954f96dc6264de1cf5f7c..44ecf049e78c04e5691e1fa1a2c142f2b731836b 100644 (file)
@@ -3373,6 +3373,13 @@ def conv (str):
     str = re.sub (r"(\\set\s+)stringTuning", r"\1Staff.stringTuning", str)
     return str
 
+wordsyntax = r"[a-zA-Z\200-\377](?:[-_]?[a-zA-Z\200-\377])*"
+
+@rule ((2, 15, 43), r'"custom-tuning" = -> custom-tuning =')
+def conv (str):
+    str = re.sub ('\n"(' + wordsyntax + r')"(\s*=\s*\\stringTuning)', "\n\\1\\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,
diff --git a/scm/bar-line.scm b/scm/bar-line.scm
new file mode 100644 (file)
index 0000000..e000178
--- /dev/null
@@ -0,0 +1,650 @@
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2009--2012 Marc Hohl <marc@hohlart.de>
+;;;;
+;;;; LilyPond is free software: you can redistribute it and/or modify
+;;;; it under the terms of the GNU General Public License as published by
+;;;; the Free Software Foundation, either version 3 of the License, or
+;;;; (at your option) any later version.
+;;;;
+;;;; LilyPond is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+
+;; helper functions
+
+(define (get-staff-symbol grob)
+  (if (grob::has-interface grob 'staff-symbol-interface)
+      grob
+      (ly:grob-object grob 'staff-symbol)))
+
+(define (layout-blot-diameter grob)
+  (let* ((layout (ly:grob-layout grob))
+         (blot (ly:output-def-lookup layout 'blot-diameter)))
+
+        blot))
+
+(define (layout-line-thickness grob)
+  (let* ((layout (ly:grob-layout grob))
+         (line-thickness (ly:output-def-lookup layout 'line-thickness)))
+
+        line-thickness))
+
+(define (staff-symbol-line-count grob)
+  (let ((line-count 0))
+
+       (if (ly:grob? grob)
+           (let ((line-pos (ly:grob-property grob 'line-positions '())))
+
+                (set! line-count (if (pair? line-pos)
+                                     (length line-pos)
+                                     (ly:grob-property grob 'line-count 0)))))
+
+         line-count))
+
+(define (staff-symbol-line-span grob)
+  (let ((line-pos (ly:grob-property grob 'line-positions '()))
+        (iv (cons 0.0 0.0)))
+
+       (if (pair? line-pos)
+           (map (lambda (x)
+                        (set! iv (cons (min (car iv) x)
+                                       (max (cdr iv) x))))
+                line-pos)
+           (let ((line-count (ly:grob-property grob 'line-count 0)))
+
+                (set! iv (cons (- 1 line-count)
+                               (- line-count 1)))))
+       iv))
+
+(define (staff-symbol-line-positions grob)
+  (let ((line-pos (ly:grob-property grob 'line-positions '())))
+
+       (if (not (pair? line-pos))
+           (let* ((line-count (ly:grob-property grob 'line-count 0))
+                  (height (- line-count 1.0)))
+
+                 (set! line-pos (map (lambda (x)
+                                             (- height (* x 2)))
+                                     (iota line-count)))))
+       line-pos))
+
+;; functions used by external routines
+
+(define-public (span-bar::notify-grobs-of-my-existence grob)
+  (let* ((elts (ly:grob-array->list (ly:grob-object grob 'elements)))
+         (sorted-elts (sort elts ly:grob-vertical<?))
+         (last-pos (1- (length sorted-elts)))
+         (idx 0))
+
+        (map (lambda (g)
+                     (ly:grob-set-property!
+                       g
+                       'has-span-bar
+                       (cons (if (eq? idx last-pos)
+                                 #f
+                                 grob)
+                             (if (zero? idx)
+                                 #f
+                                 grob)))
+                      (set! idx (1+ idx)))
+             sorted-elts)))
+
+;; How should a bar line behave at a break?
+;; the following alist has the form
+;; ( unbroken-bar-glyph . ( bar-glyph-at-end-of-line . bar-glyph-at-begin-of-line ))
+
+(define bar-glyph-alist
+  '((":|:" . (":|" . "|:"))
+    (":|.|:" . (":|" . "|:"))
+    (":|.:" . (":|" . "|:"))
+    ("||:" . ("||" . "|:"))
+    ("dashed" . ("dashed" . '()))
+    ("|" . ("|" . ()))
+    ("|s" . (() . "|"))
+    ("|:" . ("|" . "|:"))
+    ("|." . ("|." . ()))
+
+    ;; hmm... should we end with a bar line here?
+    (".|" . ("|" . ".|"))
+    (":|" . (":|" . ()))
+    ("||" . ("||" . ()))
+    (".|." . (".|." . ()))
+    ("|.|" . ("|.|" . ()))
+    ("" . ("" . ""))
+    (":" . (":" . ""))
+    ("." . ("." . ()))
+    ("'" . ("'" . ()))
+    ("empty" . (() . ()))
+    ("brace" . (() . "brace"))
+    ("bracket" . (() . "bracket"))
+
+    ;; segno bar lines
+    ("S" . ("||" . "S"))
+    ("|S" . ("|" . "S"))
+    ("S|" . ("S" . ()))
+    (":|S" . (":|" . "S"))
+    (":|S." . (":|S" . ()))
+    ("S|:" . ("S" . "|:"))
+    (".S|:" . ("|" . "S|:"))
+    (":|S|:" . (":|" . "S|:"))
+    (":|S.|:" . (":|S" . "|:"))
+
+    ;; ancient bar lines
+    ("kievan" . ("kievan" . ""))))
+
+;; drawing functions for various bar line types
+
+(define (make-empty-bar-line grob extent)
+  (ly:make-stencil "" (cons 0 0) extent))
+
+(define (make-simple-bar-line grob width extent rounded)
+  (let ((blot (if rounded
+                  (layout-blot-diameter grob)
+                  0)))
+
+        (ly:round-filled-box (cons 0 width)
+                             extent
+                             blot)))
+
+(define (make-tick-bar-line grob height rounded)
+  (let ((half-staff (* 1/2 (ly:staff-symbol-staff-space grob)))
+        (staff-line-thickness (ly:staff-symbol-line-thickness grob))
+        (blot (if rounded
+                  (layout-blot-diameter grob)
+                  0)))
+
+       (ly:round-filled-box (cons 0 staff-line-thickness)
+                            (cons (- height half-staff) (+ height half-staff))
+                            blot)))
+
+(define (make-colon-bar-line grob)
+  (let* ((staff-space (ly:staff-symbol-staff-space grob))
+         (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
+         (staff-symbol (get-staff-symbol grob))
+         (lines (staff-symbol-line-count staff-symbol))
+         (stencil empty-stencil)
+         (dist (* (if (or (odd? lines)
+                          (zero? lines))
+                      1
+                      (if (< staff-space 2)
+                          2
+                          0.5))
+                  staff-space)))
+
+        (if (zero? staff-space)
+            (set! staff-space 1.0))
+
+        (let* ((stencil (ly:stencil-add stencil dot))
+               (stencil (ly:stencil-translate-axis
+                          stencil dist Y))
+               (stencil (ly:stencil-add stencil dot))
+               (stencil (ly:stencil-translate-axis
+                          stencil (/ dist -2) Y)))
+              stencil)))
+
+(define (make-dotted-bar-line grob extent)
+  (let* ((position (round (* (interval-end extent) 2)))
+         (correction (if (even? position) 0.5 0.0))
+         (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
+         (i (round (+ (interval-start extent)
+                      (- 0.5 correction))))
+         (e (round (+ (interval-end extent)
+                      (- 0.5 correction))))
+         (counting (interval-length (cons i e)))
+         (stil-list (map
+                      (lambda (x)
+                              (ly:stencil-translate-axis
+                                dot (+ x correction) Y))
+                      (iota counting i 1))))
+
+        (define (add-stencils! stil l)
+          (if (null? l)
+              stil
+              (if (null? (cdr l))
+                  (ly:stencil-add stil (car l))
+                  (add-stencils! (ly:stencil-add stil (car l)) (cdr l)))))
+
+        (add-stencils! empty-stencil stil-list)))
+
+(define (make-dashed-bar-line grob extent thickness)
+  (let* ((height (interval-length extent))
+         (staff-symbol (get-staff-symbol grob))
+         (staff-space (ly:staff-symbol-staff-space grob))
+         (line-thickness (layout-line-thickness grob))
+         (dash-size (- 1.0 (ly:grob-property grob 'gap 0.3)))
+         (line-count (staff-symbol-line-count staff-symbol)))
+
+        (if (< (abs (+ line-thickness
+                       (* (1- line-count) staff-space)
+                       (- height)))
+               0.1)
+            (let ((blot (layout-blot-diameter grob))
+                  (half-space (/ staff-space 2.0))
+                  (half-thick (/ line-thickness 2.0))
+                  (stencil empty-stencil))
+
+                 (map (lambda (i)
+                      (let ((top-y (min (* (+ i dash-size) half-space)
+                                        (+ (* (1- line-count) half-space)
+                                           half-thick)))
+                            (bot-y (max (* (- i dash-size) half-space)
+                                        (- 0 (* (1- line-count) half-space)
+                                           half-thick))))
+
+                           (set! stencil
+                                 (ly:stencil-add
+                                   stencil
+                                   (ly:round-filled-box (cons 0 thickness)
+                                                        (cons bot-y top-y)
+                                                        blot)))))
+                      (iota line-count (1- line-count) (- 2)))
+            stencil)
+            (let* ((dashes (/ height staff-space))
+                   (total-dash-size (/ height dashes))
+                   (factor (/ (- dash-size thickness) staff-space)))
+
+                  (ly:stencil-translate-axis
+                    (ly:make-stencil (list 'dashed-line
+                                           thickness
+                                           (* factor total-dash-size)
+                                           (* (- 1 factor) total-dash-size)
+                                           0
+                                           height
+                                           (* factor total-dash-size 0.5))
+                                           (cons 0 thickness)
+                                           (cons 0 height))
+                                           (interval-start extent)
+                                           Y)))))
+
+(define (make-segno-bar-line grob glyph extent rounded)
+  (let* ((line-thickness (layout-line-thickness grob))
+         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
+         (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
+         (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
+         (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
+         (thin-stil (make-simple-bar-line grob hair extent rounded))
+         (thick-stil (make-simple-bar-line grob fatline extent rounded))
+         (colon-stil (make-colon-bar-line grob))
+         (segno-stil (ly:stencil-add
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           '() X LEFT thin-stil thinkern)
+                         X RIGHT thin-stil thinkern)
+                       (ly:font-get-glyph (ly:grob-default-font grob) "scripts.varsegno")))
+         (glyph (cond
+                  ((string=? glyph "|S") "S")
+                  ((string=? glyph "S|") "S")
+                  (else glyph)))
+         (stencil (cond
+                    ((or (string=? glyph "S|:")
+                         (string=? glyph ".S|:"))
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           thick-stil X RIGHT thin-stil kern)
+                         X RIGHT colon-stil kern)
+                       X LEFT segno-stil thinkern))
+                    ((or (string=? glyph ":|S")
+                         (string=? glyph ":|S."))
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           thick-stil X LEFT thin-stil kern)
+                         X LEFT colon-stil kern)
+                       X RIGHT segno-stil thinkern))
+                    ((or (string=? glyph ":|S|:")
+                         (string=? glyph ":|S.|:"))
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           (ly:stencil-combine-at-edge
+                             (ly:stencil-combine-at-edge
+                               (ly:stencil-combine-at-edge
+                                 thick-stil X LEFT thin-stil kern)
+                               X LEFT colon-stil kern)
+                             X RIGHT segno-stil thinkern)
+                           X RIGHT thick-stil thinkern)
+                         X RIGHT thin-stil kern)
+                       X RIGHT colon-stil kern))
+                    ((string=? glyph "|._.|")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           thick-stil X LEFT thin-stil kern)
+                         X RIGHT thick-stil (+ (interval-length
+                                                 (ly:stencil-extent segno-stil X))
+                                               (* 2 thinkern)))
+                       X RIGHT thin-stil kern))
+                    (else segno-stil))))
+
+       stencil))
+
+(define (make-kievan-bar-line grob)
+  (let* ((font (ly:grob-default-font grob))
+         (stencil (stencil-whiteout
+                    (ly:font-get-glyph font "scripts.barline.kievan"))))
+
+        ;; the kievan bar line has mo staff lines underneath,
+        ;; so we whiteout them and move ithe grob to a higher layer
+        (ly:grob-set-property! grob 'layer 1)
+        stencil))
+
+;; bar line callbacks
+
+(define-public (ly:bar-line::calc-bar-extent grob)
+  (let ((staff-symbol (get-staff-symbol grob))
+        (staff-extent (cons 0 0)))
+
+       (if (ly:grob? staff-symbol)
+           (let* ((bar-line-color (ly:grob-property grob 'color))
+                  (staff-color (ly:grob-property staff-symbol 'color))
+                  (radius (ly:staff-symbol-staff-radius grob))
+                  (staff-line-thickness (ly:staff-symbol-line-thickness grob)))
+
+                 ;; Due to rounding problems, bar lines extending to the outermost edges
+                 ;; of the staff lines appear wrongly in on-screen display
+                 ;; (and, to a lesser extent, in print) - they stick out a pixel.
+                 ;; The solution is to extend bar lines only to the middle
+                 ;; of the staff line - unless they have different colors,
+                 ;;when it would be undesirable.
+                 (set! staff-extent (ly:staff-symbol::height staff-symbol))
+                 (if (and (eq? bar-line-color staff-color)
+                          radius)
+                     (set! staff-extent
+                       (interval-scale staff-extent
+                                       (- 1 (* 1/2 (/ staff-line-thickness radius))))))))
+       staff-extent))
+
+(define (bar-line::bar-y-extent grob refpoint)
+  (let* ((extent (ly:grob-property grob 'bar-extent '(0 . 0)))
+         (rel-y (ly:grob-relative-coordinate grob refpoint Y))
+         (y-extent (coord-translate extent rel-y)))
+
+        y-extent))
+
+(define-public (ly:bar-line::print grob)
+  (let ((glyph (ly:grob-property grob 'glyph-name))
+        (extent (ly:grob-property grob 'bar-extent '(0 . 0))))
+
+       (if (and (not (eq? glyph '()))
+                (> (interval-length extent) 0))
+           (bar-line::compound-bar-line grob glyph extent #f)
+           #f)))
+
+(define-public (bar-line::compound-bar-line grob glyph extent rounded)
+  (let* ((line-thickness (layout-line-thickness grob))
+         (height (interval-length extent))
+         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
+         (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
+         (hair (* (ly:grob-property grob 'hair-thickness 1) line-thickness))
+         (fatline (* (ly:grob-property grob 'thick-thickness 1) line-thickness))
+         (thin-stil (make-simple-bar-line grob hair extent rounded))
+         (thick-stil (make-simple-bar-line grob fatline extent rounded))
+         (colon-stil (make-colon-bar-line grob))
+         (glyph (cond
+                  ((not glyph) "")
+                  ((string=? glyph "||:") "|:")
+                  ;; bar-line::compound-bar-line is called only if
+                  ;; height > 0, but just in case ...
+                  ((and (string=? glyph ":|")
+                        (zero? height)) "|.")
+                  ((and (string=? glyph "|:")
+                        (zero? height)) ".|")
+                  (else glyph)))
+         (stencil (cond
+                    ((string=? glyph "|") thin-stil)
+                    ((string=? glyph ".") thick-stil)
+                    ((string=? glyph "||")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         '() X LEFT thin-stil thinkern)
+                       X RIGHT thin-stil thinkern))
+                    ((string=? glyph "|.")
+                     (ly:stencil-combine-at-edge
+                       thick-stil X LEFT thin-stil kern))
+                    ((string=? glyph ".|")
+                     (ly:stencil-combine-at-edge
+                       thick-stil X RIGHT thin-stil kern))
+                    ((string=? glyph "|:")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         thick-stil X RIGHT thin-stil kern)
+                       X RIGHT colon-stil kern))
+                    ((string=? glyph ":|")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         thick-stil X LEFT thin-stil kern)
+                       X LEFT colon-stil kern))
+                    ((string=? glyph ":|:")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           (ly:stencil-combine-at-edge
+                             '() X LEFT thick-stil thinkern)
+                           X LEFT colon-stil kern)
+                         X RIGHT thick-stil kern)
+                       X RIGHT colon-stil kern))
+                    ((string=? glyph ":|.|:")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           (ly:stencil-combine-at-edge
+                             thick-stil X LEFT thin-stil kern)
+                           X LEFT colon-stil kern)
+                         X RIGHT thin-stil kern)
+                       X RIGHT colon-stil kern))
+                    ((string=? glyph ":|.:")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         (ly:stencil-combine-at-edge
+                           thick-stil X LEFT thin-stil kern)
+                         X LEFT colon-stil kern)
+                       X RIGHT colon-stil kern))
+                    ((string=? glyph ".|.")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         '() X LEFT thick-stil thinkern)
+                       X RIGHT thick-stil kern))
+                    ((string=? glyph "|.|")
+                     (ly:stencil-combine-at-edge
+                       (ly:stencil-combine-at-edge
+                         thick-stil X LEFT thin-stil kern)
+                       X RIGHT thin-stil kern))
+                    ((string=? glyph ":")
+                     (make-dotted-bar-line grob extent))
+                    ((or (string=? glyph "|._.|")
+                         (string-contains glyph "S"))
+                     (make-segno-bar-line grob glyph extent rounded))
+                    ((string=? glyph "'")
+                     (make-tick-bar-line grob (interval-end extent) rounded))
+                    ((string=? glyph "dashed")
+                     (make-dashed-bar-line grob extent hair))
+                    ((string=? glyph "kievan")
+                     (make-kievan-bar-line grob))
+                    (else (make-empty-bar-line grob extent)))))
+         stencil))
+
+(define-public (ly:bar-line::calc-anchor grob)
+  (let* ((line-thickness (layout-line-thickness grob))
+         (kern (* (ly:grob-property grob 'kern 1) line-thickness))
+         (glyph (ly:grob-property grob 'glyph-name ""))
+         (x-extent (ly:grob-extent grob grob X))
+         (dot-width (+ (interval-length
+                         (ly:stencil-extent
+                           (ly:font-get-glyph
+                             (ly:grob-default-font grob)
+                             "dots.dot")
+                           X))
+                       kern))
+         (anchor 0.0))
+
+        (if (> (interval-length x-extent) 0)
+            (begin
+              (set! anchor (interval-center x-extent))
+              (cond ((string=? glyph "|:")
+                     (set! anchor (+ anchor (/ dot-width -2.0))))
+                    ((string=? glyph ":|")
+                     (set! anchor (+ anchor (/ dot-width 2.0)))))))
+        anchor))
+
+(define-public (bar-line::calc-glyph-name grob)
+  (let* ((glyph (ly:grob-property grob 'glyph))
+         (dir (ly:item-break-dir grob))
+         (result (assoc-get glyph bar-glyph-alist))
+         (glyph-name (if (= dir CENTER)
+                         glyph
+                         (if (and result
+                                  (string? (index-cell result dir)))
+                            (index-cell result dir)
+                            #f))))
+        glyph-name))
+
+(define-public (bar-line::calc-break-visibility grob)
+  (let* ((glyph (ly:grob-property grob 'glyph))
+         (result (assoc-get glyph bar-glyph-alist)))
+
+    (if result
+        (vector (string? (car result)) #t (string? (cdr result)))
+        all-invisible)))
+
+;; which span bar belongs to a bar line?
+
+(define-public span-bar-glyph-alist
+  '(("|:" . ".|")
+    ("||:" . ".|")
+    (":|" . "|.")
+    (":|.:" . "|.")
+    (":|:" . ".|.")
+    (":|.|:" . "|.|")
+    (":|.|" . "|.")
+    ("S" . "||" )
+    ("S|" . "||")
+    ("|S" . "||")
+    ("S|:" . ".|")
+    (".S|:" . ".|")
+    (":|S" . "|.")
+    (":|S." . "|.")
+    (":|S|:" . "|._.|")
+    (":|S.|:" . "|._.|")
+    ("kievan" . "")
+    ("'" . "")))
+
+;; span bar callbacks
+
+(define-public (ly:span-bar::calc-glyph-name grob)
+  (let* ((elts (ly:grob-object grob 'elements))
+         (pos (1- (ly:grob-array-length elts)))
+         (glyph '()))
+
+        (while (and (eq? glyph '())
+                    (> pos -1))
+               (begin (set! glyph (ly:grob-property (ly:grob-array-ref elts pos)
+                                                    'glyph-name))
+                      (set! pos (1- pos))))
+         (if (eq? glyph '())
+             (begin (ly:grob-suicide! grob)
+                    (set! glyph "")))
+        (assoc-get glyph span-bar-glyph-alist glyph)))
+
+(define-public (ly:span-bar::width grob)
+  (let ((width (cons 0 0)))
+
+       (if (grob::is-live? grob)
+           (let* ((glyph (ly:grob-property grob 'glyph-name))
+                  (stencil (bar-line::compound-bar-line grob glyph (cons -1 1) #f)))
+
+                 (set! width (ly:stencil-extent stencil X))))
+       width))
+
+(define-public (ly:span-bar::before-line-breaking grob)
+  (let ((elts (ly:grob-object grob 'elements)))
+
+       (if (zero? (ly:grob-array-length elts))
+           (ly:grob-suicide! grob))))
+
+;; The method used in the following routine depends on bar_engraver
+;; not being removed from staff context.  If bar_engraver is removed,
+;; the size of the staff lines is evaluated as 0, which results in a
+;; solid span bar line with faulty y coordinate.
+;;
+;; This routine was originally by Juergen Reuter, but it was a on the
+;; bulky side. Rewritten by Han-Wen. Ported from c++ to Scheme by Marc Hohl.
+(define-public (ly:span-bar::print grob)
+  (let* ((elts-array (ly:grob-object grob 'elements))
+         (refp (ly:grob-common-refpoint-of-array grob elts-array Y))
+         (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.
+         (glyph (ly:grob-property grob 'glyph-name))
+         (span-bar empty-stencil))
+
+        (if (string? glyph)
+            (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 ((l (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! l (cons (cdr prev) (car curr)))
+                                             (if (or (zero? (interval-length l))
+                                                     (not allow-span-bar))
+                                                 (begin
+                                                   ;; there is overlap between the bar lines
+                                                   ;; or 'allow-span-bar = #f.
+                                                   ;; Do nothing.
+                                                 )
+                                                 (set! span-bar
+                                                       (ly:stencil-add span-bar
+                                                                       (bar-line::compound-bar-line
+                                                                         model-bar
+                                                                         glyph
+                                                                         l
+                                                                         #f))))))
+                                       curr))
+                          "" extents)
+                  (set! span-bar (ly:stencil-translate-axis
+                                   span-bar
+                                   (- (ly:grob-relative-coordinate grob refp Y))
+                                   Y))))
+        span-bar))
index e093337091d7610af2d36b2bc1e68c9c5bc5476b..2beabeeff7e6756e1e1f2874d7b12ed069397dfb 100644 (file)
     (list 'unquote `(ly:make-duration
                     ,(ly:duration-log e)
                     ,(ly:duration-dot-count e)
-                    ,(car (ly:duration-factor e))
-                    ,(cdr (ly:duration-factor e)))))
+                    ,(ly:duration-scale))))
    ((ly:pitch? e)
     (list 'unquote `(ly:make-pitch
                     ,(ly:pitch-octave e)
index 5ce96901678af7dd69a26ecbc990aeb8daa09d58..8d9c457037538c4bddd95e8d44ecaad4ee1c6105 100644 (file)
@@ -36,6 +36,50 @@ note)."
  "The line between note heads for a pitch range."
  '(gap note-heads thickness))
 
+(ly:add-interface
+ 'bar-line-interface
+ "Print a special bar symbol.  It replaces the regular bar
+symbol with a special symbol.  The argument @var{bartype}
+is a string which specifies the kind of bar line to print.
+Options are @code{|}, @code{:|}, @code{|:}, @code{:|:}, @code{:|.|:},
+@code{:|.:}, @code{.}, @code{||}, @code{|.}, @code{.|}, @code{.|.},
+@code{|.|}, @code{:}, @code{dashed}, @code{'} and @code{S}.
+
+These produce, respectively, a normal bar line, a right repeat, a left repeat,
+a thick double repeat, a thin-thick-thin double repeat,
+a thin-thick double repeat, a thick bar, a double bar, a start bar,
+an end bar, a thick double bar, a thin-thick-thin bar,
+a dotted bar, a dashed bar, a tick as bar line and a segno bar.
+
+In addition, there is an option
+@code{||:} which is equivalent to @code{|:} except at line
+breaks, where it produces a double bar (@code{||}) at the
+end of the line and a repeat sign (@code{|:}) at the
+beginning of the new line.
+
+For segno, @code{S} produces a segno sign except at line breaks,
+where it produces a double bar (@code{||}) at the
+end of the line and a segno sign at the beginning of the new line.
+@code{|S} is equivalent to @code{S} but produces a simple bar line
+(@code{|}) instead of a double bar line (@code{||}) at line breaks.
+@code{S|} produces the segno sign at line breaks and starts the following
+line without special bar lines.
+
+@code{S|:} and @code{:|S} are used for repeat/segno combinations that are
+separated at line breaks.  Alternatively, @code{.S|:} and @code{:|S.}
+may be used which combine repeat signs and segno at the same line in
+case of a line break.  @code{:|S|:} is a combination of a left repeat
+(@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which
+splits before the segno at line breaks; @code{:|S.|:} splits after
+the segno sign.
+
+If @var{bartype} is set to @code{empty} then nothing is
+printed, but a line break is allowed at that spot.
+
+@code{gap} is used for the gaps in dashed bar lines."
+ '(allow-span-bar bar-extent gap glyph glyph-name has-span-bar
+   hair-thickness kern thin-kern thick-thickness))
+
 (ly:add-interface
  'bass-figure-interface
  "A bass figure text."
@@ -212,6 +256,14 @@ interesting enough to maintain a hara-kiri staff."
  "Supports setting of spacing variables."
  '(spacing-increment shortest-duration-space))
 
+(ly:add-interface
+ 'span-bar-interface
+ "A bar line that is spanned between other barlines.
+  This interface is used for bar lines that connect different
+  staves."
+ '(glyph-name elements pure-Y-common pure-relevant-grobs
+   pure-relevant-items pure-relevant-spanners))
+
 (ly:add-interface
  'stanza-number-interface
  "A stanza number, to be put in from of a lyrics line."
index 9505c3e2b052c50d7e091f0a467f469f5bc5161a..9631da734ddd6ad0d6e3389ec2fb5683b9b5a10f 100644 (file)
@@ -107,13 +107,12 @@ expression."
 ;;;
 (define*-public (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*))
                        (force-duration (*force-duration*))
-                       (time-factor-numerator (*time-factor-numerator*))
-                       (time-factor-denominator (*time-factor-denominator*))
+                       (time-scale (*time-scale*))
                        remember)
   (if remember (*previous-duration* ly-duration))
   (let ((log2   (ly:duration-log ly-duration))
        (dots    (ly:duration-dot-count ly-duration))
-       (num+den (ly:duration-factor ly-duration)))
+       (scale (ly:duration-scale ly-duration)))
     (if (or force-duration (not prev-duration) (not (equal? ly-duration prev-duration)))
        (string-append (case log2
                         ((-1) "\\breve")
@@ -121,17 +120,9 @@ expression."
                         ((-3) "\\maxima")
                         (else (number->string (expt 2 log2))))
                       (make-string dots #\.)
-                      (let ((num? (not (or (= 1 (car num+den))
-                                           (and time-factor-numerator
-                                                (= (car num+den) time-factor-numerator)))))
-                            (den? (not (or (= 1 (cdr num+den))
-                                           (and time-factor-denominator
-                                                (= (cdr num+den) time-factor-denominator))))))
-                        (cond (den?
-                               (format #f "*~a/~a" (car num+den) (cdr num+den)))
-                              (num?
-                               (format #f "*~a" (car num+den)))
-                              (else ""))))
+                      (let ((end-scale (/ scale time-scale)))
+                        (if (= end-scale 1) ""
+                            (format #f "*~a" end-scale))))
        "")))
 
 ;;;
@@ -670,10 +661,17 @@ Otherwise, return #f."
 (define-display-method TimeScaledMusic (times parser)
   (let* ((num (ly:music-property times 'numerator))
         (den (ly:music-property times 'denominator))
-        (nd-gcd (gcd num den)))
+        (scale (/ num den))
+        (dur (*previous-duration*))
+        (time-scale (*time-scale*)))
+
     (parameterize ((*force-line-break* #f)
-                  (*time-factor-numerator* (/ num nd-gcd))
-                  (*time-factor-denominator* (/ den nd-gcd)))
+                  (*previous-duration*
+                   (ly:make-duration (ly:duration-log dur)
+                                     (ly:duration-dot-count dur)
+                                     (* (ly:duration-scale dur)
+                                        scale)))
+                  (*time-scale* (* time-scale scale)))
       (format #f "\\times ~a/~a ~a"
              num
              den
index 058534acfe6812a52d844eb24ff29e6e42bd24c5..16f809fc8bca2306e6c71d57cc5722bdfdc009fc 100644 (file)
@@ -285,8 +285,7 @@ inside body."
 (define *max-element-number-before-break* (make-parameter 6))
 
 ;; \times factor (used in durations)
-(define *time-factor-denominator* (make-parameter #f))
-(define *time-factor-numerator* (make-parameter #f))
+(define *time-scale* (make-parameter 1))
 
 (define *current-context* (make-parameter 'Bottom))
 
index 91ece1e476a360785b81614f636d59e79d9123d7..ec1097a32b7ace1ae756e86f61fd5fa08f6cffd7 100644 (file)
@@ -652,6 +652,10 @@ right (@var{dir}=+1)."
 (define (other-axis a)
   (remainder (+ a 1) 2))
 
+(define-public (interval-scale iv factor)
+  (cons (* (car iv) factor)
+    (* (cdr iv) factor)))
+
 (define-public (interval-widen iv amount)
   (cons (- (car iv) amount)
     (+ (cdr iv) amount)))
index 190670045cd912be3972785fd3d16bdf31370c7b..5a6b5f388dd2b52b456e4d1679da61def9d48fa7 100644 (file)
@@ -408,6 +408,7 @@ messages into errors.")
     "font.scm"
     "encoding.scm"
 
+    "bar-line.scm"
     "flag-styles.scm"
     "fret-diagrams.scm"
     "tablature.scm"
index 6e3f79cb5fefdd504a48c643aa188826941041a2..cd0ff32e1cd7ec47b34139e382ffe3c3fef797ec 100644 (file)
@@ -180,8 +180,7 @@ equivalent to @var{obj}, that is, for a music expression, a
         (ly:duration? obj)
         `(ly:make-duration ,(ly:duration-log obj)
                            ,(ly:duration-dot-count obj)
-                           ,(car (ly:duration-factor obj))
-                           ,(cdr (ly:duration-factor obj))))
+                           ,(ly:duration-scale obj)))
        (;; note pitch
         (ly:pitch? obj)
         `(ly:make-pitch ,(ly:pitch-octave obj)
@@ -237,12 +236,11 @@ which often can be read back in order to generate an equivalent expression."
 The number of dots in the shifted music may not be less than zero."
   (let ((d (ly:music-property music 'duration)))
     (if (ly:duration? d)
-       (let* ((cp (ly:duration-factor d))
+       (let* ((cp (ly:duration-scale d))
               (nd (ly:make-duration
                     (+ shift (ly:duration-log d))
                     (max 0 (+ dot (ly:duration-dot-count d)))
-                   (car cp)
-                   (cdr cp))))
+                   cp)))
          (set! (ly:music-property music 'duration) nd)))
     music))
 
@@ -867,7 +865,7 @@ NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
 (defmacro-public define-syntax-function (type args signature . body)
   "Helper macro for `ly:make-music-function'.
 Syntax:
-  (define-syntax-function (result-type? parser location arg1 arg2 ...) (result-type? arg1-type arg2-type ...)
+  (define-syntax-function result-type? (parser location arg1 arg2 ...) (arg1-type arg2-type ...)
     ...function body...)
 
 argX-type can take one of the forms @code{predicate?} for mandatory
index 01e429cd195594cae2e3fcd202f3148bffdc7364..af55cc8fde11557f70c010b2f827e073278275e8 100644 (file)
@@ -358,68 +358,8 @@ and duration-log @var{log}."
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bar lines.
+;; neighbor-interface routines
 
-;;
-;; How should a  bar line behave at a break?
-(define bar-glyph-alist
-  '((":|:" . (":|" . "|:"))
-    (":|.|:" . (":|" . "|:"))
-    (":|.:" . (":|" . "|:"))
-    ("||:" . ("||" . "|:"))
-    ("dashed" . ("dashed" . '()))
-    ("|" . ("|" . ()))
-    ("|s" . (() . "|"))
-    ("|:" . ("|" . "|:"))
-    ("|." . ("|." . ()))
-
-    ;; hmm... should we end with a bar line here?
-    (".|" . ("|" . ".|"))
-    (":|" . (":|" . ()))
-    ("||" . ("||" . ()))
-    (".|." . (".|." . ()))
-    ("|.|" . ("|.|" . ()))
-    ("" . ("" . ""))
-    (":" . (":" . ""))
-    ("." . ("." . ()))
-    ("'" . ("'" . ()))
-    ("empty" . (() . ()))
-    ("brace" . (() . "brace"))
-    ("bracket" . (() . "bracket"))
-
-    ;; segno bar lines
-    ("S" . ("||" . "S"))
-    ("|S" . ("|" . "S"))
-    ("S|" . ("S" . ()))
-    (":|S" . (":|" . "S"))
-    (":|S." . (":|S" . ()))
-    ("S|:" . ("S" . "|:"))
-    (".S|:" . ("|" . "S|:"))
-    (":|S|:" . (":|" . "S|:"))
-    (":|S.|:" . (":|S" . "|:"))
-
-    ;; ancient bar lines
-    ("kievan" . ("kievan" . ""))))
-
-(define-public (bar-line::calc-glyph-name grob)
-  (let* ((glyph (ly:grob-property grob 'glyph))
-        (dir (ly:item-break-dir grob))
-        (result (assoc-get glyph bar-glyph-alist))
-        (glyph-name (if (= dir CENTER)
-                        glyph
-                        (if (and result
-                                 (string? (index-cell result dir)))
-                            (index-cell result dir)
-                            #f))))
-    glyph-name))
-
-(define-public (bar-line::calc-break-visibility grob)
-  (let* ((glyph (ly:grob-property grob 'glyph))
-        (result (assoc-get glyph bar-glyph-alist)))
-
-    (if result
-       (vector (string? (car result)) #t (string? (cdr result)))
-       all-invisible)))
 
 (define-public (shift-right-at-line-begin g)
   "Shift an item to the right, but only at the start of the line."
index e076d692a301dc0098d44fa5f8d9df556b8118d5..f482d9b9b79f8419af2fa48327a9314d4e7197d7 100644 (file)
     ;; F4 used in southeast Asia and Australia
     ("f4" . (cons (* 210 mm) (* 330 mm)))
     ;; Used for very small @lilypond examples in the Documentation
-    ;; based on a8 size but landscape not portrait
+    ;; based on a8 and a7 sizes but landscape not portrait
     ("a8landscape" . (cons (* 74 mm) (* 52 mm)))
+    ("a7landscape" . (cons (* 105 mm) (* 74 mm)))
     ))
 
 ;; todo: take dimension arguments.
index d70c2b7d4cb9254fff467dd260786e20b6eb3140..202cad688375bf8dab64daf971a2abd0e661f295 100644 (file)
@@ -41,6 +41,7 @@
    ly:duration-dot-count
    ly:duration-factor
    ly:duration-log
+   ly:duration-scale
    ly:duration<?
    ly:duration?
    ly:error
index 71eb03d72f4b5aa17ed5f5902c98798fdac5f2fb..171ef6e191d3c4d685124d0e9e2a3ed087e0adf8 100644 (file)
 (define *tempo-compression* #f)
 
 (define (duration->number duration)
-  (let* ((log (ly:duration-log duration))
-         (dots (ly:duration-dot-count duration))
-         (factor (ly:duration-factor duration)))
-    (exact->inexact (* (expt 2 (- log)) (+ 1 (/ dots 2)) (/ (car factor) (cdr factor))))))
+  (exact->inexact (ly:moment-main (ly:duration-length duration))))
 
 (define (tempo->beats music)
   (let* ((tempo-spec (find-child-named music 'SequentialMusic))
index 7a8684f1949b9cf50849ea65dcc2436d030319f7..329b412a47f921c0bbeac011d40f56393cb14fa6 100644 (file)
@@ -63,6 +63,14 @@ template = '''\input texinfo
 
 @finalout @c we do not want black boxes.
 
+@c Trick to use with proper font mappings the same NCSB fonts as
+@c LilyPond instead of those provided by TeX distribution
+@tex
+\\ifpdf
+  \\pdfmapfile{=lilypond.map}
+\\fi
+@end tex
+
 @c fool ls-latex
 @ignore
 @author %%(author)s
index 51a54a43aa8f9a4b67e00f2cc862097aabb44f32..5fa66c910f3f1f752e8ddf2c5fe8177766736db8 100644 (file)
@@ -14,3 +14,5 @@ local-uninstall:
        -rmdir $(DESTDIR)$(local_lilypond_datadir)/tex
 
 all: $(INSTALLATION_FILES)
+
+local-WWW-1: $(outdir)/lilypond.map
diff --git a/tex/lilypond.map.in b/tex/lilypond.map.in
new file mode 100644 (file)
index 0000000..1e6e178
--- /dev/null
@@ -0,0 +1,4 @@
+pncr8r CenturySchL-Roma <@NCSB_DIR@/c059013l.pfb
+pncb8r CenturySchL-Bold <@NCSB_DIR@/c059016l.pfb
+pncri8r CenturySchL-Ital <@NCSB_DIR@/c059033l.pfb
+pncbi8r CenturySchL-BoldItal <@NCSB_DIR@/c059036l.pfb