]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 2 Mar 2011 11:57:11 +0000 (12:57 +0100)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 2 Mar 2011 11:57:11 +0000 (12:57 +0100)
67 files changed:
Documentation/GNUmakefile
Documentation/changes.tely
Documentation/learning/tweaks.itely
Documentation/notation/input.itely
Documentation/notation/text.itely
Documentation/notation/vocal.itely
Documentation/snippets/ancient-headword.ly
Documentation/snippets/chords-headword.ly
Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly
Documentation/snippets/editorial-headword.ly
Documentation/snippets/engravers-one-by-one.ly
Documentation/snippets/figured-bass-headword.ly
Documentation/snippets/fretted-headword.ly
Documentation/snippets/hymn-template.ly
Documentation/snippets/new/ancient-headword.ly
Documentation/snippets/new/chords-headword.ly
Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly [new file with mode: 0644]
Documentation/snippets/new/editorial-headword.ly
Documentation/snippets/new/engravers-one-by-one.ly [new file with mode: 0644]
Documentation/snippets/new/figured-bass-headword.ly
Documentation/snippets/new/fretted-headword.ly
Documentation/snippets/new/pitches-headword.ly
Documentation/snippets/new/simultaneous-headword.ly
Documentation/snippets/new/text-headword.ly
Documentation/snippets/partcombine-and-autobeamoff.ly
Documentation/snippets/pitches-headword.ly
Documentation/snippets/simultaneous-headword.ly
Documentation/snippets/text-headword.ly
Documentation/web/ly-examples/example-header.ily
Documentation/web/news-front.itexi
VERSION
elisp/lilypond-what-beat.el
input/regression/balloon.ly
input/regression/beam-collision-feasible-region.ly [new file with mode: 0644]
input/regression/beam-collision-opposite-stem.ly [new file with mode: 0644]
input/regression/display-lily-tests.ly
input/regression/font-bogus-ligature.ly
input/regression/font-family-override.ly
input/regression/font-name.ly
input/regression/hairpin-ending.ly
input/regression/harp-pedals-sanity-checks.ly
input/regression/harp-pedals-tweaking.ly
input/regression/lyric-extender-right-margin.ly
input/regression/lyrics-no-notes.ly
input/regression/markup-commands.ly
input/regression/markup-note.ly
input/regression/markup-syntax.ly
input/regression/markup-user.ly
input/regression/midi-key-signature.ly [new file with mode: 0644]
input/regression/skyline-vertical-placement.ly
input/regression/spacing-stick-out.ly
lily/beam-quanting.cc
lily/beam.cc
lily/include/beam-scoring-problem.hh
lily/key-engraver.cc
lily/open-type-font.cc
lily/page-layout-problem.cc
ly/arabic.ly
ly/toc-init.ly
po/lilypond.pot
po/nl.po
python/book_snippets.py
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/define-music-display-methods.scm
scm/midi.scm
scripts/midi2ly.py

index 4696170e429798c585fd6ecadfbacea0bf6bb41c..19ae57769883b1d8f3667373d426ed2c1bc98544 100644 (file)
@@ -32,7 +32,7 @@ README_TOP_FILES= DEDICATION THANKS
 IN_ITELY_FILES = $(call src-wildcard,snippets/*-intro.itely)
 SNIPPET_LY_FILES = $(call src-wildcard,snippets/*.ly)
 
-EXTRA_DIST_FILES = $(call src-wildcard,*.init)
+EXTRA_DIST_FILES = $(call src-wildcard,*.init) $(call src-wildcard,*.bst)
 
 ### Out files
 
index 002f6a89cf094a54f6707a1e4deea9468e588602..d6700d995af2adb4e7e8cda75eb12e3ad49c1475 100644 (file)
@@ -61,6 +61,25 @@ which scares away people.
 
 @end ignore
 
+@item
+Dots can be added to the table of contents items using:
+@example
+\paper @{
+  tocItemMarkup = \tocItemWithDotsMarkup
+@}
+@end example
+
+@item
+New markup commands @code{\pattern} and @code{\fill-with-pattern} are available.
+@lilypond
+\markup \column {
+  \pattern #3 #Y #0.3 \flat
+  \null
+  \pattern #7 #X #2 \flat
+  \override #'(line-width . 40) \fill-with-pattern #1 #CENTER . left right
+}
+@end lilypond
+
 @item
 A minimal composer toolkit of modal transformations is provided.
 A motif may be @notation{transposed}, @notation{inverted} and/or
index 844399d7f6e7deed5960a6e29528afb818f79fe4..99cfcf645f5512d44bd2b3ad77679e9e8a2f26ca 100644 (file)
@@ -3422,7 +3422,6 @@ lhMusic = \relative c' {
 * Using variables for tweaks::
 * Style sheets::
 * Other sources of information::
-* Avoiding tweaks with slower processing::
 * Advanced tweaks with Scheme::
 @end menu
 
@@ -4106,40 +4105,6 @@ interest are:
 @end multitable
 
 
-
-@node Avoiding tweaks with slower processing
-@subsection Avoiding tweaks with slower processing
-
-LilyPond can perform extra checks while it processes input files.
-These checks will take extra time to perform, but fewer manual tweaks
-may be required to obtain an acceptable result.  If a text script
-or part of the lyrics extends over the margins these checks will
-compress that line of the score just enough to fit within the
-margins.
-
-To be effective under all circumstances these checks must be enabled
-by placing the overrides using @code{\context} within a @code{\layout}
-block, rather than in-line in music, as follows:
-
-@example
-\score @{
-  @{ @dots{}notes@dots{} @}
-  \layout @{
-    \context @{
-      \Score
-      % Makes sure text scripts and lyrics are within the paper margins
-      \override PaperColumn #'keep-inside-line = ##t
-      \override NonMusicalPaperColumn #'keep-inside-line = ##t
-    @}
-  @}
-@}
-@end example
-
-However, @code{keep-inside-line} is expensive and the recommendation
-is to not enable it, to allow for faster processing, until creating
-a final version.  This way you do not need to manually add @code{\break}
-commands to avoid text running off the right-hand side of the page.
-
 @node Advanced tweaks with Scheme
 @subsection Advanced tweaks with Scheme
 
index dea1e53f7430e035172fe10f940bf8ece45c2b31..131b445f1ad80986298ad07090e43f1344bd429c 100644 (file)
@@ -957,6 +957,22 @@ tocAct =
 }
 @end lilypond
 
+Dots can be added to fill the line between an item and its page number:
+
+@lilypond[verbatim,quote]
+\header { tagline = ##f }
+\paper {
+  tocItemMarkup = \tocItemWithDotsMarkup
+}
+
+\book {
+  \markuplines \table-of-contents
+  \tocItem \markup { Allegro }
+  \tocItem \markup { Largo }
+  \markup \null
+}
+@end lilypond
+
 
 @seealso
 Init files: @file{../ly/toc-init.ly}.
index 6841e44dcb5e4bafc0d7fe99cfa7e69562c0e274..406f6be96d1f5abbea1629f2bf8678a1aede8a55 100644 (file)
@@ -123,12 +123,11 @@ Internals Reference:
 
 @knownissues
 Checking to make sure that text scripts and lyrics are within the
-margins is a relatively large computational task.  To speed up
-processing, LilyPond does not perform such calculations by
-default; to enable it, use
+margins requires additonal calculations. In cases where slightly faster
+performance is desired, use
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##t
+\override Score.PaperColumn #'keep-inside-line = ##f
 @end example
 
 
index 47d60222a91a2d766fb4466f47509da74666cb83..e63729bb0fb3e1539d181c2512cc912e61f56fe2 100644 (file)
@@ -1158,12 +1158,12 @@ To make this change for all lyrics in the score, set the property in the
 
 @c TODO: move to LSR -vv
 
-Checking to make sure that text scripts and lyrics are within the
-margins is a relatively large computational task.  To speed up processing,
-LilyPond does not perform such calculations by default; to enable it, use
+Checking to make sure that text scripts and lyrics are within the margins
+required additional calculations.  To speed up processing slighty, this
+feature can be disabled:
 
 @example
-\override Score.PaperColumn #'keep-inside-line = ##t
+\override Score.PaperColumn #'keep-inside-line = ##f
 @end example
 
 To make lyrics avoid bar lines as well, use
index 3b0029dd32c927811a81b2c4f8c6aa05d8701dab..371b90fc4d3f38fcfe35575ff3a27e52cfd5621a 100644 (file)
 } % begin verbatim
 
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 \include "gregorian.ly"
 
 \score {
index 2e0572b13acf906f97ac1ef66c13637300096ea2..102d1c529ec75ca841afd242602187a5512c78ff 100644 (file)
 
 
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 theChords = \chordmode {
   \time 2/2
   f1 | c2 f2 | f1 | c2 f2| %\break
index d8b20b2dc879270e72a9a2fbd8c64aa7d524f826..bcebf46d6dbd76f58474039c5abcea381b1cda88 100644 (file)
@@ -1,14 +1,13 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.12.2"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.13.36
+\version "2.13.36"
 
 \header {
-  lsrtags = "pitches"
-
 %% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
   doctitlees = "Alteraciones de estilo dodecafĆ³nico para todas las notas incluidas las naturales"
   texidoces = "
@@ -53,6 +52,7 @@ Voici comment obtenir une telle notation.
   doctitlefr = "Le dodĆ©caphonisme : toute note est altĆ©rĆ©e"
 
 
+  lsrtags = "pitches"
   texidoc = "
 In early 20th century works, starting with Schoenberg, Berg and Webern
 (the @qq{Second} Viennese school), every pitch in the twelve-tone scale
@@ -67,18 +67,9 @@ This snippet shows how to achieve such notation rules.
   doctitle = "Dodecaphonic-style accidentals for each note including naturals"
 } % begin verbatim
 
-\score {
-  \new Staff {
-    #(set-accidental-style 'dodecaphonic)
-    c'4 dis' cis' cis'
-    c'4 dis' cis' cis'
-    c'4 c' dis' des'
-  }
-  \layout {
-    \context {
-      \Staff
-      \remove "Key_engraver"
-    }
-  }
+
+\markup {
+  This snippet is deprecated as of version 2.12 and
+  will be removed from the documentation in 2.14.
 }
 
index 2c0634256a30ebb470330c329390b7508cd4d6d7..6ecd7d062d241ac92fbb71d6ff2c5527bda4f650 100644 (file)
 } % begin verbatim
 
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.7 Editorial annotations
 
 % Beethoven, Op. 31, No. 3
index e75021d8020076009786a1a57a5366ca6b9f1e96..8757f7d8f372685ddb39b7ece70d24aed316c29a 100644 (file)
@@ -1,14 +1,13 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.12.2"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.13.52
+\version "2.13.52"
 
 \header {
-  lsrtags = "contexts-and-engravers"
-
 %% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
   texidoces = "
 Del problema central de la notaciĆ³n, esto es, crear un determinado
@@ -38,6 +37,8 @@ alteraciones, lĆ­neas de compĆ”s, etc. forman un contexto de pentagrama,
 "
   doctitlees = "Los grabadores uno por uno"
 
+  lsrtags = "contexts-and-engravers"
+
   texidoc = "
 The notation problem, creating a certain symbol, is handled by plugins.
  Each plugin is called an Engraver. In this example, engravers are
@@ -78,7 +79,8 @@ topVoice = \relative c' {
   b4
   b16[-. b-. b-. cis-.]
   d4->
-}
+} % begin verbatim
+
 
 botVoice = \relative c' {
   \key d \major
index f580581d624e056dba8859f4f03441be3076f307..084ca9ccc217f9004caa2d22221399e7512cd7c8 100644 (file)
   indent = 1.5\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 2.7.3 Figured bass
 
 
index 1688f9d2907a15c31f1552029bf9d41b5e16d2ec..c2312c92f12087b5b400d11b778600b17ea6a589 100644 (file)
@@ -30,8 +30,6 @@
   \context {
     \Score
     \remove "Bar_number_engraver"
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
   }
 }
 
index 5be241fc6b97d1ca2bb9b09219a199aeb181b956..a8d8c8bc5c5cf2fa811e7c13515f76fc23d75125 100644 (file)
@@ -18,7 +18,6 @@ aƱadir los versos como texto independiente debajo de la mĆŗsica.
 "
 
   doctitlees = "Plantilla para himnos"
-
 %%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
   texidocde = "
index f7568d728b65ea7d0931fedcd95046a90411f415..50a8ba81d5037f690077078178bdb872c296478e 100644 (file)
   doctitle = "headword"
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 \include "gregorian.ly"
 
 \score {
index 5963f0fd8808503cf5ec2af59a5a32b1a94752a4..d267d561b7518ce6d2a91d5675af8313880aec37 100644 (file)
 }
 
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 theChords = \chordmode {
   \time 2/2
   f1 | c2 f2 | f1 | c2 f2| %\break
diff --git a/Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly b/Documentation/snippets/new/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly
new file mode 100644 (file)
index 0000000..fa91614
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.13.36"
+
+\header {
+  lsrtags = "pitches"
+  texidoc = "
+In early 20th century works, starting with Schoenberg, Berg and Webern
+(the @qq{Second} Viennese school), every pitch in the twelve-tone scale
+has to be regarded as equal, without any hierarchy such as the
+classical (tonal) degrees. Therefore, these composers print one
+accidental for each note, even at natural pitches, to emphasize their
+new approach to music theory and language.
+
+This snippet shows how to achieve such notation rules.
+
+"
+  doctitle = "Dodecaphonic-style accidentals for each note including naturals"
+}
+
+\markup {
+  This snippet is deprecated as of version 2.12 and
+  will be removed from the documentation in 2.14.
+}
+
index 626605f7a531f25a25d014c374d2451e1a90a4a5..6ae939e0fdbe5a40326f59c7dbcc300fb8de9168 100644 (file)
   doctitle = "headword"
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.7 Editorial annotations
 
 % Beethoven, Op. 31, No. 3
diff --git a/Documentation/snippets/new/engravers-one-by-one.ly b/Documentation/snippets/new/engravers-one-by-one.ly
new file mode 100644 (file)
index 0000000..2b70a0d
--- /dev/null
@@ -0,0 +1,273 @@
+\version "2.13.52"
+
+\header {
+  lsrtags = "contexts-and-engravers"
+
+  texidoc = "
+The notation problem, creating a certain symbol, is handled by plugins.
+ Each plugin is called an Engraver. In this example, engravers are
+switched on one by one, in the following order:
+
+- note heads,
+
+
+- staff symbol,
+
+
+- clef,
+
+
+- stem,
+
+
+- beams, slurs, accents,
+
+
+- accidentals, bar lines, time signature and key signature.
+
+
+
+Engravers are grouped. For example, note heads, slurs, beams etc. form
+a @code{Voice} context. Engravers for key signature, accidentals, bar
+line, etc. form a @code{Staff} context.
+
+"
+  doctitle = "Engravers one-by-one"
+} % begin verbatim
+
+
+%% sample music
+topVoice = \relative c' {
+  \key d \major
+  es8([ g] a[ fis])
+  b4
+  b16[-. b-. b-. cis-.]
+  d4->
+}
+
+botVoice = \relative c' {
+  \key d \major
+  c8[( f] b[ a)]
+  es4
+  es16[-. es-. es-. fis-.]
+  b4->
+}
+
+hoom = \relative c {
+  \key d \major
+  \clef bass
+  g8-. r
+  r4
+  fis8-.
+  r8
+  r4
+  b'4->
+}
+
+pah = \relative c' {
+  r8 b-.
+  r4
+  r8 g8-.
+  r16 g-. r8
+  \clef treble
+  fis'4->
+}
+
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+MyStaff = \context {
+  \type "Engraver_group"
+  \name Staff
+
+  \description "Handles clefs, bar lines, keys, accidentals.  It can contain
+@code{Voice} contexts."
+
+  \consists "Output_property_engraver"
+
+  \consists "Font_size_engraver"
+
+  \consists "Volta_engraver"
+  \consists "Separating_line_group_engraver"
+  \consists "Dot_column_engraver"
+
+  \consists "Ottava_spanner_engraver"
+  \consists "Rest_collision_engraver"
+  \consists "Piano_pedal_engraver"
+  \consists "Piano_pedal_align_engraver"
+  \consists "Instrument_name_engraver"
+  \consists "Grob_pq_engraver"
+  \consists "Forbid_line_break_engraver"
+  \consists "Axis_group_engraver"
+
+  \consists "Pitch_squash_engraver"
+
+  localKeySignature = #'()
+
+  % explicitly set instrumentName, so we don't get
+  % weird effects when doing instrument names for
+  % piano staves
+
+  instrumentName = #'()
+  shortInstrumentName = #'()
+
+  \accepts "Voice"
+}
+
+
+MyVoice = \context {
+  \type "Engraver_group"
+  \name Voice
+
+  \description "
+    Corresponds to a voice on a staff.  This context handles the
+    conversion of dynamic signs, stems, beams, super- and subscripts,
+    slurs, ties, and rests.
+
+    You have to instantiate this explicitly if you want to have
+    multiple voices on the same staff."
+
+  localKeySignature = #'()
+  \consists "Font_size_engraver"
+
+  % must come before all
+  \consists "Output_property_engraver"
+  \consists "Arpeggio_engraver"
+  \consists "Multi_measure_rest_engraver"
+  \consists "Text_spanner_engraver"
+  \consists "Grob_pq_engraver"
+  \consists "Note_head_line_engraver"
+  \consists "Glissando_engraver"
+  \consists "Ligature_bracket_engraver"
+  \consists "Breathing_sign_engraver"
+  % \consists "Rest_engraver"
+  \consists "Grace_beam_engraver"
+  \consists "New_fingering_engraver"
+  \consists "Chord_tremolo_engraver"
+  \consists "Percent_repeat_engraver"
+  \consists "Slash_repeat_engraver"
+
+  %{
+    Must come before text_engraver, but after note_column engraver.
+  %}
+  \consists "Text_engraver"
+  \consists "Dynamic_engraver"
+  \consists "Fingering_engraver"
+
+  \consists "Script_column_engraver"
+  \consists "Rhythmic_column_engraver"
+  \consists "Cluster_spanner_engraver"
+  \consists "Tie_engraver"
+  \consists "Tie_engraver"
+  \consists "Tuplet_engraver"
+  \consists "Note_heads_engraver"
+  \consists "Rest_engraver"
+}
+
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+
+MyStaff = \context {
+  \MyStaff
+  \consists "Staff_symbol_engraver"
+}
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyStaff = \context {
+  \MyStaff
+  \consists "Clef_engraver"
+  \remove "Pitch_squash_engraver"
+}
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyVoice = \context {
+  \MyVoice
+  \consists "Stem_engraver"
+}
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyVoice = \context {
+  \MyVoice
+  \consists "Beam_engraver"
+}
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyVoice = \context {
+  \MyVoice
+  \consists "Phrasing_slur_engraver"
+  \consists "Slur_engraver"
+  \consists "Script_engraver"
+}
+
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyStaff = \context {
+  \MyStaff
+  \consists "Bar_engraver"
+  \consists "Time_signature_engraver"
+}
+
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
+MyStaff = \context {
+  \MyStaff
+  \consists "Accidental_engraver"
+  \consists "Key_engraver"
+}
+\score {
+  \topVoice
+  \layout {
+    \context { \MyStaff }
+    \context { \MyVoice }
+  }
+}
+
index ad04108e81760d28d602530406fd96e56b38ebfe..469e72fad59c6c61b616d5f95eb3cea9a107c7e4 100644 (file)
@@ -6,14 +6,6 @@
   indent = 1.5\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 2.7.3 Figured bass
 
 
index 32fafd0700c4b66b8ec353b179e9b9ad52af6fd0..3b221cb0ac61d428c66c3bb85954e4a1656be6b7 100644 (file)
@@ -22,8 +22,6 @@
   \context {
     \Score
     \remove "Bar_number_engraver"
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
   }
 }
 
index 8cc3eca8956ecb49c047c325b9946593dfe47b6a..9c78f065d06858d0685bd43b026103e22d53d202 100644 (file)
@@ -7,14 +7,6 @@
   indent = 0\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.1 Pitches
 
 \header {
index 09ffbe04f09dfd2959b751da1d1c50c5485ed41c..caff63a477aea94a579b1b81a7ac5226615743a8 100644 (file)
@@ -7,15 +7,6 @@
   indent = 0\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
-
 \header {
   lsrtags = "headwords"
   texidoc = ""
index 58a410f37e5c4fe958db1a4b635cffe3248d3de8..10931fc9d7da60dbd576b8d13732ecaa68456238 100644 (file)
   doctitle = "headword"
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.8 Text
 
 % L. v. Beethoven, Op. 110
index 3589444037e50196dc374ea1b743c0381ae7cb63..81c5590f70c626abd28510e46b456c209fb58924 100644 (file)
@@ -47,7 +47,6 @@ necesario hacer tres llamadas a @code{\\autoBeamOff}.
 
 "
   doctitlees = "Partcombine y autoBeamOff"
-
 %%   Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
   texidocde = "
@@ -79,7 +78,6 @@ wenn man es mit @code{\\partcombine} verwendet, muss @code{\\autoBeamOff}
 "
 doctitlede = "Partcombine und autoBeamOff"
 
-
 %% Translation of GIT committish: e1a149d0cc60b02e86209387958f4028567dd366
   texidocfr = "
 Le fonction @code{@bs{}autoBeamOff} dans le cadre d'un
index 4388c7e5feccc84b15ccaa1978939dcc55a01815..0d6b06fac1e485173478730787f81685c121d0f4 100644 (file)
   indent = 0\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.1 Pitches
 
 \header {
index 137e3818517f9441f64c7e9972661218975e73a2..2e69cb45fa2b99c4af2921a7bb0db20b1a41027d 100644 (file)
   indent = 0\cm
 }
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
-
 \header {
   lsrtags = "headwords"
   texidoc = ""
index 507215dac5442f697fc5360b22b2ffecd500561c..0ea3413cfc38b4839d5fde9ce536f08d805f56fe 100644 (file)
 } % begin verbatim
 
 
-\layout {
-  \context {
-    \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
 % NR 1.8 Text
 
 % L. v. Beethoven, Op. 110
index 0817b746832e5866b309b4853c167f73f00255ef..ab35243579863fdb764e86eea73c02c58c28bfc8 100644 (file)
   scoreTitleMarkup = ##f
 }
 
-\layout {
-  \context { \Score
-    \override PaperColumn #'keep-inside-line = ##t
-    \override NonMusicalPaperColumn #'keep-inside-line = ##t
-  }
-}
-
-
index 9203ba553b6abb20b6ca413a6ee0ecc1914bedd0..0cd32ad1710281a07aa10aceda057cf4db20bc3d 100644 (file)
@@ -8,6 +8,17 @@
 
 @c used for news about the upcoming release; see CG 10.2
 
+@newsItem
+@subsubheading LilyPond 2.13.52 released!  @emph{Mar 1, 2011}
+
+We are happy to announce the release of LilyPond 2.13.52.  This
+release contains the usual number of bugfixes.
+
+Please note that this is @strong{not} the third release candidate,
+due to a few remaining Critical bugs.
+
+@newsEnd
+
 @newsItem
 @subsubheading LilyPond 2.13.51 released!  @emph{Feb 22, 2011}
 
diff --git a/VERSION b/VERSION
index 5dc9f9f7e5278f9c214a0712f40f3b7ccdd2f7e1..95e049e78fceb788e63728943d7ade2e2b96865d 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=13
-PATCH_LEVEL=52
+PATCH_LEVEL=53
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.51
+VERSION_DEVEL=2.13.52
index b7d7d98787d7f6d67bd3dff5a3d3f6194a80fcd3..4a00ed36c3182c95582ba5c0c5c0f4120deeb9f2 100644 (file)
-; Features:\r
-;\r
-; -> Counts number of notes between last | and point. Adds durations of\r
-; each note up, and returns result.\r
-;\r
-; -> Works well on notes and chords.\r
-;\r
-; -> Ignores most keywords, like \override\r
-;\r
-; -> Is aware of certain keywords which often contain parameters that\r
-; look like notes, but should not be counted.\r
-;  | a \key b \minor c    % b is not counted, but a and c are.\r
-;\r
-; -> Ignores Scheme expressions, which start with #\r
-;\r
-; -> Doesn't ignore the \times keyword. Intelligently handles triplets.\r
-; \r
-;\r
-; Caveats:\r
-;\r
-; -> Doesn't work on regions that aren't preceded by a |. This is because such\r
-; notes are only delimited by a {, and what-beat can't distinguish a { that\r
-; opens a set of notes from an internal { (say from a triplet)\r
-;\r
-; -> Doesn't work with << >>  expressions or nested {} expressions (unless\r
-; {} is part of a keyword like \times)\r
-;\r
-; -> Keywords abutted against a note are not visible to what-beat, and \r
-; can therefore surreptitiosly sneak fake notes into what-beat.\r
-; | c\glissando f       <- BAD:  the f gets counted, but shouldn't\r
-; | c \glissando f      <- GOOD: the f gets ignored\r
-;\r
-; -> Does not look outside notes context. Derivation rules don't work:\r
-; str = \notes { a8 b c d }\r
-; \score { \notes { | e4 %{ gets counted }% \str %{gets ignored}%\r
-;\r
-; -> Does not handle repeats.\r
-;\r
-; -> Ignores \bar commands (and does not get confused by a | inside a \bar)\r
-;\r
-\r
-; Recognizes pitch & octave\r
-(setq pitch-regex "\\([a-z]+[,']*\\|<[^>]*>\\)\\(=[,']*\\)?")\r
-; Recognizes duration\r
-(setq duration-regex "[ \t\n]*\\(\\(\\(128\\|6?4\\|3?2\\|16?\\|8\\)\\([.]*\\)\\)\\([ \t]*[*][ \t]*\\([0-9]+\\)\\(/\\([1-9][0-9]*\\)\\)?\\)?\\)")\r
-\r
-; These keywords precede notes that should not be counted during beats\r
-(setq Parm-Keywords '("key" "clef" "appoggiatura" "acciaccatura" "grace"\r
-                     "override" "revert" "glissando"))\r
-\r
-\r
-(defun extract-match (string match-num)\r
-  (if (null (match-beginning match-num))\r
-      nil\r
-    (substring string (match-beginning match-num) (match-end match-num))))\r
-\r
-\r
-(defun add-fractions (f1 f2)\r
-  "Adds two fractions, both are (numerator denominator)"\r
-  (set 'result (list (+ (* (car f1) (cadr f2)) (* (car f2) (cadr f1)))\r
-                    (* (cadr f1) (cadr f2))))\r
-  (set 'result (reduce-fraction result 2))\r
-  (set 'result (reduce-fraction result 3))\r
-  (set 'result (reduce-fraction result 5))\r
-  (set 'result (reduce-fraction result 7))\r
-)\r
-\r
-\r
-(defun reduce-fraction (f divisor)\r
-  "Eliminates divisor from fraction if present"\r
-  (while (and (= 0 (% (car result) divisor))\r
-             (= 0 (% (cadr result) divisor))\r
-             (< 1 (cadr result))\r
-             (< 0 (car result)))\r
-    (set 'result (list (/ (car result) divisor) (/ (cadr result) divisor))))\r
-  result\r
-)\r
-\r
-\r
-(defun parse-duration (duration)\r
-  "Returns a duration string parsed as '(numerator denominator)"\r
-  (string-match duration-regex duration)\r
-  (let ((result (list 1 (string-to-int (extract-match duration 2))))\r
-       (dots (extract-match duration 4))\r
-       (numerator (or (extract-match duration 6) "1"))\r
-       (denominator (or (extract-match duration 8) "1")))\r
-    (if (and (not (null dots)) (< 0 (string-width dots)))\r
-       (dotimes (dummy (string-width dots))\r
-         (set 'result (list (1+ (* 2 (car result))) (* 2 (cadr result))))))\r
-    (list (* (string-to-int numerator) (car result))\r
-         (* (string-to-int denominator) (cadr result)))\r
-))\r
-\r
-(defun walk-note-duration ()\r
-"Returns duration of next note, moving point past note.\r
-If point is not before a note, returns nil\r
-If next note has no duration, returns t"\r
-  (if (not (looking-at pitch-regex))\r
-      nil\r
-    (progn\r
-      (goto-char (match-end 0))\r
-      (if (not (looking-at duration-regex))\r
-         t\r
-       (progn\r
-         (goto-char (match-end 0))\r
-         (parse-duration (match-string 0)))))))\r
-\r
-; returns nil if not at a comment\r
-(defun skip-comment ()\r
-  (if (not (char-equal ?\% (following-char)))\r
-      nil\r
-    (progn\r
-      (forward-char)\r
-      (if (char-equal ?\{ (following-char))\r
-         (re-search-forward "}%" nil t)\r
-       (progn\r
-         (skip-chars-forward "^\n")\r
-         (forward-char)))\r
-      t\r
-)))\r
-\r
-; returns nil if not at a quotation\r
-(defun skip-quotation ()\r
-  (if (not (char-equal ?\" (following-char)))\r
-      nil\r
-    (progn\r
-      (forward-char)\r
-      (skip-chars-forward "^\"")\r
-      (forward-char)\r
-      t\r
-)))\r
-\r
-; returns nil if not at a sexp\r
-(defun skip-sexp ()\r
-  (interactive)\r
-  (if (not (char-equal ?\# (following-char)))\r
-      nil\r
-    (progn\r
-      (forward-char)\r
-      (if (char-equal ?\' (following-char))\r
-         (forward-char))\r
-      (if (not (char-equal ?\( (following-char)))\r
-         (skip-chars-forward "^ \t\n")\r
-       (progn\r
-         (let ((paren 1))\r
-           (while (< 0 paren)\r
-             (forward-char)\r
-             (cond ((char-equal ?\( (following-char))\r
-                    (setq paren (1+ paren)))\r
-                   ((char-equal ?\) (following-char))\r
-                    (setq paren (1- paren)))))\r
-           (forward-char)\r
-           t\r
-))))))\r
-\r
-(defun goto-note-begin ()\r
-  (interactive)\r
-  ; skip anything that is not ws. And skip any comments or quotations\r
-  (while (or (< 0 (skip-chars-forward "^ \t\n~%#\""))\r
-            (skip-comment)\r
-            (skip-quotation)\r
-            (skip-sexp)))\r
-  ; Now skip anything that isn't alphanum or \. And skip comments or quotations\r
-  (while (or (< 0 (skip-chars-forward "^A-Za-z<%}#=\""))\r
-            (skip-comment)\r
-            (skip-quotation)\r
-            (skip-sexp)))\r
-  ; (skip-chars-forward "^\\") Why doesn't this work?!!\r
-  (if (char-equal ?\\ (preceding-char))\r
-      (backward-char))\r
-)\r
-\r
-\r
-(defun skip-good-keywords ()\r
-  (if (looking-at "\\\\\\([a-z]*\\)")\r
-      (progn\r
-       (goto-char (match-end 0))\r
-       (if (member (match-string 1) Parm-Keywords)\r
-           (progn\r
-             (if (looking-at "[ \t\n]*?\\([a-z0-9_]+\\|{[^}]*}\\|\"[^\"]*\"\\)")\r
-                 (goto-char (match-end 0))\r
-               (error "Improper regex match:")\r
-               (error "Unknown text: %s")\r
-))))))\r
-\r
-(defun find-measure-start ()\r
-  (let ((start (re-search-backward "\|" 0 t)))\r
-    (if (null start)\r
-       -1\r
-      (if (looking-at "[^ \n\t]*\"")\r
-         (find-measure-start)\r
-       (point)\r
-))))\r
-\r
-(defun get-beat ()\r
-  (save-excursion\r
-    (save-restriction\r
-      (let* ((end (point))\r
-            (measure-start (find-measure-start))\r
-            (last-dur (or (re-search-backward duration-regex 0 t) -1))\r
-            (duration (if (= -1 last-dur) 0 (parse-duration (match-string 0))))\r
-            (result '(0 1)))           ; 0 in fraction form\r
-       (if (= measure-start -1)\r
-           (error "No | before point")\r
-         (progn\r
-           (goto-char (1+ measure-start))\r
-           (goto-note-begin)\r
-           (while (< (point) end)\r
-             (set 'new-duration (walk-note-duration))\r
-             (if (null new-duration)\r
-                 (if (not (looking-at "\\\\times[ \t]*\\([1-9]*\\)/\\([1-9]*\\)[ \t\n]*{"))\r
-                     (skip-good-keywords)\r
-\r
-                                       ; handle \times specially\r
-                   (let ((numerator (string-to-int (match-string 1)))\r
-                         (denominator (string-to-int (match-string 2))))\r
-                     (goto-char (match-end 0))\r
-                     (goto-note-begin)\r
-                     (while (and (not (looking-at "}"))\r
-                                 (< (point) end))\r
-                       (set 'new-duration (walk-note-duration))\r
-                       (if (null new-duration)\r
-                           (if (looking-at "\\\\[a-z]*[ \t]*[a-z]*")\r
-                               (goto-char (match-end 0))\r
-                             (error "Unknown text: %S %s" result(buffer-substring (point) end))))\r
-                       (if (not (eq new-duration t))\r
-                           (set 'duration new-duration))\r
-                       (set 'result (add-fractions result\r
-                                                   (list (* numerator (car duration))\r
-                                                         (* denominator (cadr duration)))))\r
-                       (goto-note-begin))\r
-                     (if (< (point) end)\r
-                         (forward-char 1)))) ; skip }\r
-\r
-               (if (not (eq new-duration t))\r
-                   (set 'duration new-duration))\r
-               (set 'result (add-fractions result duration)))\r
-             (goto-note-begin))\r
-\r
-           result\r
-))))))\r
-\r
-(defun LilyPond-what-beat ()\r
-  "Returns how much of a measure lies between last measaure '|' and point.\r
-Recognizes chords, and triples."\r
-  (interactive)\r
-  (let ((beat (get-beat)))\r
-    (message "Beat: %d/%d" (car beat) (cadr beat)))\r
-)\r
-\r
-(defun LilyPond-electric-bar ()\r
-  "Indicate the number of beats in last measure when a | is inserted"\r
-  (interactive)\r
-  (self-insert-command 1)\r
-  (save-excursion\r
-    (save-restriction\r
-      (backward-char)\r
-      (LilyPond-what-beat)\r
-      (forward-char)\r
-)))\r
-\r
-\r
+; Features:
+;
+; -> Counts number of notes between last | and point. Adds durations of
+; each note up, and returns result.
+;
+; -> Works well on notes and chords.
+;
+; -> Ignores most keywords, like \override
+;
+; -> Is aware of certain keywords which often contain parameters that
+; look like notes, but should not be counted.
+;  | a \key b \minor c    % b is not counted, but a and c are.
+;
+; -> Ignores Scheme expressions, which start with #
+;
+; -> Doesn't ignore the \times keyword. Intelligently handles triplets.
+; 
+;
+; Caveats:
+;
+; -> Doesn't work on regions that aren't preceded by a |. This is because such
+; notes are only delimited by a {, and what-beat can't distinguish a { that
+; opens a set of notes from an internal { (say from a triplet)
+;
+; -> Doesn't work with << >>  expressions or nested {} expressions (unless
+; {} is part of a keyword like \times)
+;
+; -> Keywords abutted against a note are not visible to what-beat, and 
+; can therefore surreptitiosly sneak fake notes into what-beat.
+; | c\glissando f       <- BAD:  the f gets counted, but shouldn't
+; | c \glissando f      <- GOOD: the f gets ignored
+;
+; -> Does not look outside notes context. Derivation rules don't work:
+; str = \notes { a8 b c d }
+; \score { \notes { | e4 %{ gets counted }% \str %{gets ignored}%
+;
+; -> Does not handle repeats.
+;
+; -> Ignores \bar commands (and does not get confused by a | inside a \bar)
+;
+
+; Recognizes pitch & octave
+(setq pitch-regex "\\([a-z]+[,']*\\|<[^>]*>\\)\\(=[,']*\\)?")
+; Recognizes duration
+(setq duration-regex "[ \t\n]*\\(\\(\\(128\\|6?4\\|3?2\\|16?\\|8\\)\\([.]*\\)\\)\\([ \t]*[*][ \t]*\\([0-9]+\\)\\(/\\([1-9][0-9]*\\)\\)?\\)?\\)")
+
+; These keywords precede notes that should not be counted during beats
+(setq Parm-Keywords '("key" "clef" "appoggiatura" "acciaccatura" "grace"
+                     "override" "revert" "glissando"))
+
+
+(defun extract-match (string match-num)
+  (if (null (match-beginning match-num))
+      nil
+    (substring string (match-beginning match-num) (match-end match-num))))
+
+
+(defun add-fractions (f1 f2)
+  "Adds two fractions, both are (numerator denominator)"
+  (set 'result (list (+ (* (car f1) (cadr f2)) (* (car f2) (cadr f1)))
+                    (* (cadr f1) (cadr f2))))
+  (set 'result (reduce-fraction result 2))
+  (set 'result (reduce-fraction result 3))
+  (set 'result (reduce-fraction result 5))
+  (set 'result (reduce-fraction result 7))
+)
+
+
+(defun reduce-fraction (f divisor)
+  "Eliminates divisor from fraction if present"
+  (while (and (= 0 (% (car result) divisor))
+             (= 0 (% (cadr result) divisor))
+             (< 1 (cadr result))
+             (< 0 (car result)))
+    (set 'result (list (/ (car result) divisor) (/ (cadr result) divisor))))
+  result
+)
+
+
+(defun parse-duration (duration)
+  "Returns a duration string parsed as '(numerator denominator)"
+  (string-match duration-regex duration)
+  (let ((result (list 1 (string-to-int (extract-match duration 2))))
+       (dots (extract-match duration 4))
+       (numerator (or (extract-match duration 6) "1"))
+       (denominator (or (extract-match duration 8) "1")))
+    (if (and (not (null dots)) (< 0 (string-width dots)))
+       (dotimes (dummy (string-width dots))
+         (set 'result (list (1+ (* 2 (car result))) (* 2 (cadr result))))))
+    (list (* (string-to-int numerator) (car result))
+         (* (string-to-int denominator) (cadr result)))
+))
+
+(defun walk-note-duration ()
+"Returns duration of next note, moving point past note.
+If point is not before a note, returns nil
+If next note has no duration, returns t"
+  (if (not (looking-at pitch-regex))
+      nil
+    (progn
+      (goto-char (match-end 0))
+      (if (not (looking-at duration-regex))
+         t
+       (progn
+         (goto-char (match-end 0))
+         (parse-duration (match-string 0)))))))
+
+; returns nil if not at a comment
+(defun skip-comment ()
+  (if (not (char-equal ?\% (following-char)))
+      nil
+    (progn
+      (forward-char)
+      (if (char-equal ?\{ (following-char))
+         (re-search-forward "}%" nil t)
+       (progn
+         (skip-chars-forward "^\n")
+         (forward-char)))
+      t
+)))
+
+; returns nil if not at a quotation
+(defun skip-quotation ()
+  (if (not (char-equal ?\" (following-char)))
+      nil
+    (progn
+      (forward-char)
+      (skip-chars-forward "^\"")
+      (forward-char)
+      t
+)))
+
+; returns nil if not at a sexp
+(defun skip-sexp ()
+  (interactive)
+  (if (not (char-equal ?\# (following-char)))
+      nil
+    (progn
+      (forward-char)
+      (if (char-equal ?\' (following-char))
+         (forward-char))
+      (if (not (char-equal ?\( (following-char)))
+         (skip-chars-forward "^ \t\n")
+       (progn
+         (let ((paren 1))
+           (while (< 0 paren)
+             (forward-char)
+             (cond ((char-equal ?\( (following-char))
+                    (setq paren (1+ paren)))
+                   ((char-equal ?\) (following-char))
+                    (setq paren (1- paren)))))
+           (forward-char)
+           t
+))))))
+
+(defun goto-note-begin ()
+  (interactive)
+  ; skip anything that is not ws. And skip any comments or quotations
+  (while (or (< 0 (skip-chars-forward "^ \t\n~%#\""))
+            (skip-comment)
+            (skip-quotation)
+            (skip-sexp)))
+  ; Now skip anything that isn't alphanum or \. And skip comments or quotations
+  (while (or (< 0 (skip-chars-forward "^A-Za-z<%}#=\""))
+            (skip-comment)
+            (skip-quotation)
+            (skip-sexp)))
+  ; (skip-chars-forward "^\\") Why doesn't this work?!!
+  (if (char-equal ?\\ (preceding-char))
+      (backward-char))
+)
+
+
+(defun skip-good-keywords ()
+  (if (looking-at "\\\\\\([a-z]*\\)")
+      (progn
+       (goto-char (match-end 0))
+       (if (member (match-string 1) Parm-Keywords)
+           (progn
+             (if (looking-at "[ \t\n]*?\\([a-z0-9_]+\\|{[^}]*}\\|\"[^\"]*\"\\)")
+                 (goto-char (match-end 0))
+               (error "Improper regex match:")
+               (error "Unknown text: %s")
+))))))
+
+(defun find-measure-start ()
+  (let ((start (re-search-backward "\|" 0 t)))
+    (if (null start)
+       -1
+      (if (looking-at "[^ \n\t]*\"")
+         (find-measure-start)
+       (point)
+))))
+
+(defun get-beat ()
+  (save-excursion
+    (save-restriction
+      (let* ((end (point))
+            (measure-start (find-measure-start))
+            (last-dur (or (re-search-backward duration-regex 0 t) -1))
+            (duration (if (= -1 last-dur) 0 (parse-duration (match-string 0))))
+            (result '(0 1)))           ; 0 in fraction form
+       (if (= measure-start -1)
+           (error "No | before point")
+         (progn
+           (goto-char (1+ measure-start))
+           (goto-note-begin)
+           (while (< (point) end)
+             (set 'new-duration (walk-note-duration))
+             (if (null new-duration)
+                 (if (not (looking-at "\\\\times[ \t]*\\([1-9]*\\)/\\([1-9]*\\)[ \t\n]*{"))
+                     (skip-good-keywords)
+
+                                       ; handle \times specially
+                   (let ((numerator (string-to-int (match-string 1)))
+                         (denominator (string-to-int (match-string 2))))
+                     (goto-char (match-end 0))
+                     (goto-note-begin)
+                     (while (and (not (looking-at "}"))
+                                 (< (point) end))
+                       (set 'new-duration (walk-note-duration))
+                       (if (null new-duration)
+                           (if (looking-at "\\\\[a-z]*[ \t]*[a-z]*")
+                               (goto-char (match-end 0))
+                             (error "Unknown text: %S %s" result(buffer-substring (point) end))))
+                       (if (not (eq new-duration t))
+                           (set 'duration new-duration))
+                       (set 'result (add-fractions result
+                                                   (list (* numerator (car duration))
+                                                         (* denominator (cadr duration)))))
+                       (goto-note-begin))
+                     (if (< (point) end)
+                         (forward-char 1)))) ; skip }
+
+               (if (not (eq new-duration t))
+                   (set 'duration new-duration))
+               (set 'result (add-fractions result duration)))
+             (goto-note-begin))
+
+           result
+))))))
+
+(defun LilyPond-what-beat ()
+  "Returns how much of a measure lies between last measaure '|' and point.
+Recognizes chords, and triples."
+  (interactive)
+  (let ((beat (get-beat)))
+    (message "Beat: %d/%d" (car beat) (cadr beat)))
+)
+
+(defun LilyPond-electric-bar ()
+  "Indicate the number of beats in last measure when a | is inserted"
+  (interactive)
+  (self-insert-command 1)
+  (save-excursion
+    (save-restriction
+      (backward-char)
+      (LilyPond-what-beat)
+      (forward-char)
+)))
+
+
index a60f89e57c1854641ed7f57a283a9043de41bbbf..3a85fed660cc01ffe3025aa4b66cd6888132b5a9 100644 (file)
@@ -9,10 +9,19 @@ with lines and explanatory text added."
 
 \layout{ ragged-right = ##t }
 
-\new Voice \with {\consists "Balloon_engraver" }
-{
-  \relative c'  {
-    \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" }
-    <c-\balloonText #'(-2 . -2) \markup { \simple #"hoi" }  >8
+\score{
+  \new Voice \with {\consists "Balloon_engraver" }
+  {
+    \relative c'  {
+      \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" }
+      <c-\balloonText #'(-2 . -2) \markup { \simple #"hoi" }  >8
+    }
+  }
+
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
+    }
   }
 }
diff --git a/input/regression/beam-collision-feasible-region.ly b/input/regression/beam-collision-feasible-region.ly
new file mode 100644 (file)
index 0000000..dbc1c2e
--- /dev/null
@@ -0,0 +1,42 @@
+\version "2.13.52"
+
+\header {
+  texidoc = "A rough guess for collisions is taken into account when
+  choosing initial beam configurations; the initial position may be
+  chosen to be either above or below large collisions."
+}
+
+\layout {
+  ragged-right = ##t 
+}
+
+partOne = <<
+  { s4 s8 \key f \major s8 }
+  {
+    g8[ c'''8]
+    g8[ c'''8]
+  }
+>>
+
+partTwo = <<
+  { \clef bass \key c \major s4 s8 \key f \major s8 }
+  {
+    c,8[ e'8]
+    c,8[ e'8]
+  }
+>>
+
+partThree = <<
+  { \clef bass \key c \major s4 s8 \key f \major s8 }
+  {
+    b,,8[ e'8]
+    b,,8[ e'8]
+  }
+>>
+
+\new Voice {
+  \partOne
+  \partTwo
+  \partThree
+}
+
diff --git a/input/regression/beam-collision-opposite-stem.ly b/input/regression/beam-collision-opposite-stem.ly
new file mode 100644 (file)
index 0000000..89fe7af
--- /dev/null
@@ -0,0 +1,29 @@
+\header {
+  texidoc = "Meshing stems in oppositely directed beams are handled
+  correctly."  
+}
+
+\version "2.13.46"
+
+\layout {
+  ragged-right = ##t
+}
+
+{
+  \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 e16 [ s cis, ] } \\ { b''16 [ s b ] } >> }
+  \relative c'' { << { s16 d16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 c16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 b16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 a16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 g16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 c,16 [ s cis' ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 c,16 [ s cis'' ] } \\ { b16 [ s b ] } >> }
+  \relative c'' { << { s16 f,16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 e,16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 d,16 [ s cis ] } \\ { b'16 [ s b ] } >> }
+  \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s d ] } >> }
+  \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s f' ] } >> }
+  \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s a ] } >> }
+  \relative c'' { << { s16 e16 [ s cis ] } \\ { b'16 [ s gis ] } >> }
+}
index c28ebf7e3bf15263341e92e62a1120080c149723..7ba3317b80f0bcdb2378bbfaa23a5c07be26550f 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.13.20"
+\version "2.13.53"
 #(use-modules (srfi srfi-13)
               (ice-9 format))
 
@@ -76,6 +76,7 @@ stderr of this run."
 \test "" ##[ R1.*2/3 #]                % MultiMeasureRestMusicGroup, MultiMeasureRestEvent
 \test "" ##[ \skip 2.*3/4 #]           % SkipMusic
 \test "" ##[ < c\1 e\3 >4.*3/4-. #]    % EventChord, NoteEvent, StringNumberEvent, ArticulationEvent
+\test "" ##[ < c-1\4 >8 #]
 \test "NOT A BUG" ##[ { < c e g c' > q8-. } #] % RepeatedChord
 
 %% tags
@@ -148,6 +149,7 @@ stderr of this run."
 \test "" ##[ { c \[ c \] } #]                  % LigatureEvent
 \test "" ##[ \~ #]                                     % PesOrFlexaEvent
 \test "" ##[ { c-\bendAfter #3  } #] % BendAfterEvent
+\test "" ##[ < c-\rightHandFinger #1 > #] % StrokeFingerEvent
 
 \test "" ##[ \break #]
 \test "" ##[ \noBreak #]
index b5abe6ccb5d2a5079890a104de5c431574c12dcc..1e46da7a0f37315eb58d07e7fa91430d4873e4d5 100644 (file)
@@ -11,6 +11,15 @@ This may happen with incorrect font versions.
   ragged-right = ##T
 }
 
-{
-  c4^"November WHITMAN"
+\score{
+  {
+    c4^"November WHITMAN"
+  }
+
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
+    }
+  }
 }
index 553747d4788583d02e8d1fa14b9165bc978974b0..45629a273e413e178e596b394890f7086cc9e964 100644 (file)
      (/ myStaffSize 20)))
 }
 
-\relative c'' {
-
-  c^\markup { roman: foo \bold bla \italic bar \italic \bold baz }
-  c'_\markup {
-    \override #'(font-family . sans)
-    {
-      sans: foo \bold bla \italic bar \italic \bold baz
+\score {
+  \relative c'' {
+
+    c^\markup { roman: foo \bold bla \italic bar \italic \bold baz }
+    c'_\markup {
+      \override #'(font-family . sans)
+      {
+        sans: foo \bold bla \italic bar \italic \bold baz
+      }
+    }
+    c'^\markup {
+      \override #'(font-family . typewriter)
+      {
+        mono: foo \bold bla \italic bar \italic \bold baz
+      }
     }
   }
-  c'^\markup {
-    \override #'(font-family . typewriter)
-    {
-      mono: foo \bold bla \italic bar \italic \bold baz
+
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
     }
   }
+
 }
index 062f2f7549626d18b63bbd1048b7f1dfd34703a7..2e5eabfc4e1a92f23a1185dbaffc744564d70842 100644 (file)
@@ -13,6 +13,7 @@ without size specification."
 
 
 {
+  \override Score.PaperColumn #'keep-inside-line = ##f
   \override Staff.TimeSignature  #'font-name = #"Times New Roman"
   \time 3/4
   \set Score.skipBars = ##t
index a5e33c426c7dcf941058ac1c078b4814cc0d823b..92648d2d4ba874a838f5d661baafc71631545f93 100644 (file)
@@ -12,6 +12,7 @@ into them."
 \layout { ragged-right = ##t } 
 
 \relative c'' {
+  \override Score.PaperColumn #'keep-inside-line = ##f
   c4 \> c4 c4\! c4_\ff \> c4 c4\!\p
   
   <<
index c918ddbe6fa91c369bd14838c84b7093bab2888b..60ba82177413afb210299b83a65f2319a287d3ad 100644 (file)
@@ -9,6 +9,7 @@ a warning is printed out, but they should still look okay."
 }
 
 \relative c'' {
+  \override Score.PaperColumn #'keep-inside-line = ##f
   % Sanity checks: #pedals != 7:
   c1^\markup \harp-pedal #"^-v|--"
   % Sanity checks: no divider, multiple dividers, divider on wrong position:
index ad3f95552affba2d2c2f188649416a5cad0ada70..8b64e780631da59e2d3029f332fc48d3e3ec9756 100644 (file)
@@ -6,6 +6,7 @@ harp-pedal-details properties of TextScript."
 }
 
 \relative c'' {
+  \override Score.PaperColumn #'keep-inside-line = ##f
   \override Voice.TextScript #'(harp-pedal-details box-width) = #1
   \once \override Voice.TextScript #'size = #1.5
   \once \override Voice.TextScript #'thickness = #7
index 0317b53493728000adafe81cb2c428a8c152901e..9d76be3b3cb42d2363e95ed01b7b11454729c87f 100644 (file)
@@ -6,7 +6,6 @@
 \score{
   {
     \relative c' {
-      \override Score.PaperColumn #'keep-inside-line = ##t
       c4 d e f ~ | \break
       f4 e d c |
     }
@@ -16,4 +15,4 @@
       e d c
     }
   }
-}
\ No newline at end of file
+}
index 3c6ef07e790dd3eb4fe54118954dde5d55a25de1..69e8d9c00c0cdb8868b18c431e7b6dc507bc82da 100644 (file)
@@ -8,6 +8,7 @@ paper column is very wide."
 
 \version "2.12.0"
 <<
+  \override Score.PaperColumn #'keep-inside-line = ##f
   \new Staff \relative c' {
     \key aes \major
     \context Voice = "1" { 
index 688cd2e6a614f729a0b49fcd1658762bbb3a0c02..b8f947d84ea302c237022140f70c0926de257db1 100644 (file)
@@ -7,31 +7,40 @@
 \paper { ragged-right = ##T }
 \version "2.12.0"
 
-{
-  g'_\markup {
-    \column {
-      \line { 
-       foo \magnify #2 foo
-       LOWER \lower #3 LOWER
-       \large \bold { normal \normal-text normal }
-       Small-Caps \smallCaps   Small-Caps
-      }
-      
-      \override #'(line-width . 50) 
-      \override #'(bla . "This is a field containing text. Blah blah
-blah.  This is a field containing text. Blah blah blah.  This is a
-field containing text. Blah blah blah.  This is a field containing
-text. Blah blah blah. This is a field containing text. Blah blah
-blah.") 
-      \column  {
-       justify:
-       \justify-field #'bla
-       wordwrap:
-       \wordwrap-field #'bla
+\score{
+  {
+    g'_\markup {
+      \column {
+        \line {
+          foo \magnify #2 foo
+          LOWER \lower #3 LOWER
+          \large \bold { normal \normal-text normal }
+          Small-Caps \smallCaps        Small-Caps
+        }
+
+        \override #'(line-width . 50)
+        \override #'(bla . "This is a field containing text. Blah blah
+  blah.  This is a field containing text. Blah blah blah.  This is a
+  field containing text. Blah blah blah.  This is a field containing
+  text. Blah blah blah. This is a field containing text. Blah blah
+  blah.")
+        \column  {
+          justify:
+          \justify-field #'bla
+          wordwrap:
+          \wordwrap-field #'bla
+        }
+
+        draw-line: \draw-line #'(5 . 3)
+        \underline "underlined"
       }
+    }
+  }
 
-      draw-line: \draw-line #'(5 . 3)
-      \underline "underlined"
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
     }
   }
 }
index 0cdc526b35e32890e049aba451e61ef20011082c..1cda8b33e19aa7b9aa748eed58b2e817ea8a226e 100644 (file)
@@ -5,52 +5,62 @@
 }
 \version "2.12.0"
 
-\relative c''
-{
-  c4^\markup {
-    \note #"1" #1
-    \note #"2" #1
-    \note #"4" #1
-    \note #"8" #1
-    \note #"16" #1
-    \note #"32" #1
-    \note #"64" #1
-
-    \note #"1" #-1
-    \note #"2" #-1
-    \note #"4" #-1
-    \note #"8" #-1
-    \note #"16" #-1
-    \note #"32" #-1
-    \note #"64" #-1
-
-    \note #"1." #-1
-    \note #"2." #-1
-    \note #"4." #-1
-    \note #"8." #-1
-    \note #"16." #-1
-    \note #"32." #-1
-    \note #"64." #-1
-
-    \note #"1." #1
-    \note #"2." #1
-    \note #"4." #1
-    \note #"8." #1
-    \note #"16." #1
-    \note #"32." #1
-    \note #"64." #1
-
-    \override #'(style . cross)
-    { \note-by-number #2 #1 #1
-      \note-by-number #2 #1 #-1
-    } 
-    \override #'(style . triangle)
-    { \note-by-number #2 #1 #1
-      \note-by-number #2 #1 #-1
+\score {
+  \relative c''
+  {
+    c4^\markup {
+      \note #"1" #1
+      \note #"2" #1
+      \note #"4" #1
+      \note #"8" #1
+      \note #"16" #1
+      \note #"32" #1
+      \note #"64" #1
+
+      \note #"1" #-1
+      \note #"2" #-1
+      \note #"4" #-1
+      \note #"8" #-1
+      \note #"16" #-1
+      \note #"32" #-1
+      \note #"64" #-1
+
+      \note #"1." #-1
+      \note #"2." #-1
+      \note #"4." #-1
+      \note #"8." #-1
+      \note #"16." #-1
+      \note #"32." #-1
+      \note #"64." #-1
+
+      \note #"1." #1
+      \note #"2." #1
+      \note #"4." #1
+      \note #"8." #1
+      \note #"16." #1
+      \note #"32." #1
+      \note #"64." #1
+
+      \override #'(style . cross)
+      { \note-by-number #2 #1 #1
+        \note-by-number #2 #1 #-1
+      }
+      \override #'(style . triangle)
+      { \note-by-number #2 #1 #1
+        \note-by-number #2 #1 #-1
+      }
+
     }
 
+    \override NoteHead #'style = #'triangle
+    c4 a
   }
 
-  \override NoteHead #'style = #'triangle
-  c4 a
-} 
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
+    }
+  }
+
+}
index 8a59a454b6dbfdb9e0c52f88e4ff776112857ec6..73b9cff77f23f61940af4e1c4ed9acb8b8932320 100644 (file)
@@ -4,48 +4,58 @@
   texidoc = "Demo of markup texts, using LilyPond syntax."
 }
 
-{
-  f'1-\markup {
-    foo
-    \raise #0.2 \hbracket \bold bar
+\score {
+  {
+    f'1-\markup {
+      foo
+      \raise #0.2 \hbracket \bold bar
 
-    \override #'(baseline-skip . 4)
-    \bracket \column {
-      baz
-      bazr
-      bla
+      \override #'(baseline-skip . 4)
+      \bracket \column {
+        baz
+        bazr
+        bla
+      }
+      \hspace #2.0
+      \override #'(font-encoding . fetaMusic) {
+        \lookup #"noteheads-0"
+      }
+      \semiflat
+      { }
+      \combine "X" "+"
+      \combine "o" "/"
     }
-    \hspace #2.0
-    \override #'(font-encoding . fetaMusic) {
-      \lookup #"noteheads-0"
+    g'1-\markup {
+                                  %            \char-number #"abc1234abc"
+      \box \column {
+        \line { "string 1" }
+        \line { "string 2" }
+        \concat { "f" "i" }
+      }
+      " "
+      \draw-circle #1 #0.3 ##f
+      " "
+      \draw-circle #1 #0.3 ##t
+      " "
+      \italic Norsk
+      \super "2"
+      " "
+      \raise #3.0 \whiteout white-out
+      \circle \dynamic p
+      \with-color #green Green
+      \dynamic sfzp
+      \huge { "A" \smaller "A" \smaller \smaller "A"
+              \smaller \smaller \smaller "A" }
+      \sub "alike"
     }
-    \semiflat
-    { }
-    \combine "X" "+"
-    \combine "o" "/"
+    c''4
   }
-  g'1-\markup {
-                               %               \char-number #"abc1234abc"
-    \box \column {
-      \line { "string 1" }
-      \line { "string 2" }
-      \concat { "f" "i" }
+
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
     }
-    " "
-    \draw-circle #1 #0.3 ##f
-    " "
-    \draw-circle #1 #0.3 ##t
-    " "
-    \italic Norsk
-    \super "2"
-    " "
-    \raise #3.0 \whiteout white-out
-    \circle \dynamic p
-    \with-color #green Green
-    \dynamic sfzp
-    \huge { "A" \smaller "A" \smaller \smaller "A"
-           \smaller \smaller \smaller "A" }
-    \sub "alike"
-  }    
-  c''4
+  }
+
 }
index 637734706063cfddee3c1efa8055dd108ae1e425..63b1450af00a8f8e29348595fef7a37be6f335d1 100644 (file)
@@ -15,10 +15,17 @@ the @code{define-markup-command} scheme macro."
   "Upcase the string characters. Syntax: \\upcase #\"string\""
   (interpret-markup paper props (make-simple-markup (string-upcase str))))
 
-
-{ 
-  c''-\markup \upcase #"hello world"
+\score{
+  {
+    c''-\markup \upcase #"hello world"
                                % produces a "HELLO WORLD" markup
-}
+  }
 
+  \layout {
+    \context {
+      \Score
+      \override PaperColumn #'keep-inside-line = ##f
+    }
+  }
 
+}
diff --git a/input/regression/midi-key-signature.ly b/input/regression/midi-key-signature.ly
new file mode 100644 (file)
index 0000000..8eafbad
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.13.53"
+\header {
+  texidoc = "MIDI key signatures are output, using an approximate
+key signature if MIDI format cannot represent the true key signature"
+}
+
+\include "arabic.ly"
+\score {
+  \relative do' {
+    \key fa \bayati
+    fa4 solsb lab sib
+  }
+  \midi { }
+  \layout { }
+}
index 731db4f2c520dd0ca63e157a2ce6fbcc8d1359f8..b01a8a33d1f41dccc0a3bd040e9b849fb568c404 100644 (file)
@@ -7,6 +7,7 @@ using a skyline algorithm so that they don't collide with other objects."
 
 \version "2.12.0"
 \relative c''' {
+  \override Score.PaperColumn #'keep-inside-line = ##f
   \override TextScript #'outside-staff-priority = #2
   \override DynamicLineSpanner #'outside-staff-priority = #1
   c
index b042ae1abcf99c7189ffacdeb4a3dbdb280cf5e8..099ae34651e8d4ddfa59f5ee9673d3c3dae1ee12 100644 (file)
@@ -1,9 +1,9 @@
 
 \header {
 
-  texidoc = "If @code{keep-inside-line} is set for the relevant
-  PaperColumn, LilyPond will space a line to prevent text sticking out
-  of the right margin."
+  texidoc = "LilyPond will space a line to prevent text sticking out of the
+  right margin unless @code{keep-inside-line} is false for the relevant
+  PaperColumn."
 
 }
 
@@ -12,7 +12,6 @@
 \layout { ragged-right = ##t } 
 
 \relative c' {
-  \override Score.PaperColumn #'keep-inside-line = ##t 
   c1 c1^"This is a really long text" c
 }
 
index db9b1c1b5568f3412e7c170999c46c3b6907f63d..e868e51d7f124af9c4ee4a690a19890314569429 100644 (file)
@@ -20,9 +20,9 @@
 
 #include "beam-scoring-problem.hh"
 
+#include <algorithm>
 #include <queue>  
 #include <set>
-#include <algorithm>
 using namespace std;
 
 #include "align-interface.hh"
@@ -31,6 +31,7 @@ using namespace std;
 #include "directional-element-interface.hh"
 #include "grob.hh"
 #include "international.hh"
+#include "libc-extension.hh"
 #include "main.hh"
 #include "output-def.hh"
 #include "pointer-group-interface.hh"
@@ -72,7 +73,7 @@ Beam_quant_parameters::fill (Grob *him)
 
   // Collisions
   COLLISION_PENALTY = get_detail (details, ly_symbol2scm ("collision-penalty"), 500);
-  COLLISION_DISTANCE = get_detail (details, ly_symbol2scm ("collision-distance"), 0.5);
+  COLLISION_PADDING = get_detail (details, ly_symbol2scm ("collision-padding"), 0.5);
   STEM_COLLISION_FACTOR = get_detail (details, ly_symbol2scm ("stem-collision-factor"), 0.1);
 }
 
@@ -194,13 +195,11 @@ void Beam_scoring_problem::init_collisions (vector<Grob*> grobs)
   set<Grob*> stems;
   for (vsize i = 0; i < grobs.size (); i++) {
     Box b;
-
     for (Axis a = X_AXIS; a < NO_AXES; incr (a))
       b[a] = grobs[i]->extent(common[a], a);
 
-    Real width = b[X_AXIS].length();
-
-    Real width_factor = sqrt(width / staff_space);
+    Real width = b[X_AXIS].length ();
+    Real width_factor = sqrt (width / staff_space);
 
     Direction d = LEFT;
     do
@@ -631,10 +630,11 @@ my_modf (Real x)
 void
 Beam_scoring_problem::score_horizontal_inter_quants (Beam_configuration *config) const
 {
-  if (config->y.delta() == 0.0 && abs (config->y[LEFT]) < staff_radius * staff_space)
+  if (config->y.delta () == 0.0
+      && abs (config->y[LEFT]) < staff_radius * staff_space)
     {
       Real yshift = config->y[LEFT] - 0.5 * staff_space;
-      if (abs (round(yshift) - yshift) < 0.01 * staff_space)
+      if (fabs (my_round (yshift) - yshift) < 0.01 * staff_space)
         config->add (parameters.HORIZONTAL_INTER_QUANT_PENALTY, "H");
     }
 }
@@ -756,8 +756,8 @@ Beam_scoring_problem::score_collisions (Beam_configuration *config) const
                     beam_y.distance (collision_y[UP]));
 
       Real scale_free = 
-        max (parameters.COLLISION_DISTANCE - dist, 0.0)/
-        parameters.COLLISION_DISTANCE;
+        max (parameters.COLLISION_PADDING - dist, 0.0)/
+        parameters.COLLISION_PADDING;
       demerits +=
         collisions_[i].base_penalty_ *
         pow (scale_free, 3) * parameters.COLLISION_PENALTY;
index 58ac5d44d276d61fa98ec69eeada4a68feb71003..53fda8174319205db9cf61ebf5151765ea674577 100644 (file)
 #include "lookup.hh"
 #include "main.hh"
 #include "misc.hh"
+#include "note-head.hh"
 #include "output-def.hh"
 #include "pointer-group-interface.hh"
+#include "rhythmic-head.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
 #include "stem.hh"
@@ -1035,6 +1037,19 @@ Beam::calc_least_squares_positions (SCM smob, SCM /* posns */)
   return ly_interval2scm (pos);
 }
 
+
+// Assuming V is not empty, pick a 'reasonable' point inside V.
+static Real
+point_in_interval (Interval v, Real dist)
+{
+  if (isinf (v[DOWN]))
+    return v[UP] - dist;
+  else if (isinf (v[UP]))
+    return v[DOWN] + dist;
+  else
+    return v.center ();
+}
+
 /*
   We can't combine with previous function, since check concave and
   slope damping comes first.
@@ -1047,41 +1062,43 @@ SCM
 Beam::shift_region_to_valid (SCM grob, SCM posns)
 {
   Grob *me = unsmob_grob (grob);
+
   /*
     Code dup.
   */
   vector<Real> x_posns;
   extract_grob_set (me, "stems", stems);
-  Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
-  Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
+  extract_grob_set (me, "covered-grobs", covered);
 
+  Grob *common[NO_AXES] = { me, me };
+  for (Axis a = X_AXIS; a < NO_AXES; incr (a)) {
+    common[a] = common_refpoint_of_array (stems, me, a);
+    common[a] = common_refpoint_of_array (covered, common[a], a);
+  }
   Grob *fvs = first_normal_stem (me);
 
   if (!fvs)
     return posns;
-
-  Real x0 = fvs->relative_coordinate (commonx, X_AXIS);
+  Interval x_span;
+  x_span[LEFT] = fvs->relative_coordinate (common[X_AXIS], X_AXIS);
   for (vsize i = 0; i < stems.size (); i++)
     {
       Grob *s = stems[i];
 
-      Real x = s->relative_coordinate (commonx, X_AXIS) - x0;
+      Real x = s->relative_coordinate (common[X_AXIS], X_AXIS) - x_span[LEFT];
       x_posns.push_back (x);
     }
-
+  
   Grob *lvs = last_normal_stem (me);
-  if (!lvs)
-    return posns;
-
-  Real dx = lvs->relative_coordinate (commonx, X_AXIS) - x0;
+  x_span[RIGHT] = lvs->relative_coordinate (common[X_AXIS], X_AXIS);
 
   Drul_array<Real> pos = ly_scm2interval (posns);
 
   scale_drul (&pos, Staff_symbol_referencer::staff_space (me));
 
-  Real dy = pos[RIGHT] - pos[LEFT];
-  Real y = pos[LEFT];
-  Real slope = dx ? (dy / dx) : 0.0;
+  Real beam_dy = pos[RIGHT] - pos[LEFT];
+  Real beam_left_y = pos[LEFT];
+  Real slope = x_span.delta () ? (beam_dy / x_span.delta ()) : 0.0;
 
   /*
     Shift the positions so that we have a chance of finding good
@@ -1089,6 +1106,7 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
   */
   Interval feasible_left_point;
   feasible_left_point.set_full ();
+
   for (vsize i = 0; i < stems.size (); i++)
     {
       Grob *s = stems[i];
@@ -1096,7 +1114,6 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
        continue;
 
       Direction d = get_grob_direction (s);
-
       Real left_y
        = Stem::get_stem_info (s).shortest_y_
        - slope * x_posns [i];
@@ -1106,8 +1123,8 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
        ourselves, so translate:
       */
       left_y
-       += + s->relative_coordinate (commony, Y_AXIS)
-       - me->relative_coordinate (commony, Y_AXIS);
+       += + s->relative_coordinate (common[Y_AXIS], Y_AXIS)
+       - me->relative_coordinate (common[Y_AXIS], Y_AXIS);
 
       Interval flp;
       flp.set_full ();
@@ -1116,20 +1133,148 @@ Beam::shift_region_to_valid (SCM grob, SCM posns)
       feasible_left_point.intersect (flp);
     }
 
-  if (feasible_left_point.is_empty ())
-    warning (_ ("no viable initial configuration found: may not find good beam slope"));
-  else if (!feasible_left_point.contains (y))
+  /*
+    We have two intervals here, one for the up variant (beams goes
+    over the collision) one for the down.
+  */
+  Drul_array<Interval> collision_free (feasible_left_point,
+                                       feasible_left_point);
+
+  vector<Grob*> filtered;
+  /*
+    We only update these for objects that are too large for quanting
+    to find a workaround.  Typically, these are notes with
+    stems, and timesig/keysig/clef, which take out the entire area
+    inside the staff as feasible.
+
+    The code below disregards the thickness and multiplicity of the
+    beam.  This should not be a problem, as the beam quanting will
+    take care of computing the impact those exactly.
+  */
+  Real min_y_size = 2.0;
+  for (vsize i = 0; i < covered.size(); i++)
+    {
+      if (!covered[i]->is_live())
+        continue;
+      
+      Box b;
+      for (Axis a = X_AXIS; a < NO_AXES; incr (a))
+        b[a] = covered[i]->extent (common[a], a);
+
+      if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
+        continue;
+
+      if (intersection (b[X_AXIS], x_span).is_empty ())
+        continue;
+
+      filtered.push_back (covered[i]);
+      Grob *head_stem = Rhythmic_head::get_stem (covered[i]);
+      if (head_stem && Stem::is_normal_stem (head_stem)
+          && Note_head::has_interface (covered[i]))
+        {
+          if (Stem::get_beam (head_stem))
+            {
+              /*
+                We must assume that stems are infinitely long in this
+                case, as asking for the length of the stem typically
+                leads to circular dependencies.
+
+                This strategy assumes that we don't want to handle the
+                collision of beams in opposite non-forced directions
+                with this code, where shortening the stems of both
+                would resolve the problem, eg.
+
+                 x    x
+                |    | 
+                =====
+
+                =====
+                |   |  
+                x   x
+                
+                Such beams would need a coordinating grob to resolve
+                the collision, since both will likely want to occupy
+                the centerline.
+              */
+              Direction stemdir = get_grob_direction (head_stem);
+              b[Y_AXIS][stemdir] = stemdir * infinity_f; 
+            }
+          else
+            {
+              // TODO - should we include the extent of the stem here?
+            }
+        }
+
+      if (b[Y_AXIS].length () < min_y_size)
+        continue;
+
+      Direction d = LEFT;
+      do
+        {
+          Real x = b[X_AXIS][d] - x_span[LEFT];
+          Real dy = slope * x;
+
+          Direction yd = DOWN;
+          do
+            {
+              Real left_y = b[Y_AXIS][yd];
+
+              if (left_y == yd * infinity_f)
+                {
+                  collision_free[yd].set_empty ();
+                  continue;
+                }
+
+              left_y -= dy;
+
+              // Translate back to beam as ref point.
+              left_y -= -me->relative_coordinate (common[Y_AXIS], Y_AXIS);
+            
+              Interval allowed;
+              allowed.set_full ();
+
+              allowed[-yd] = left_y;
+              collision_free[yd].intersect (allowed);
+            }
+          while (flip (&yd) != DOWN);
+        }
+      while (flip (&d) != LEFT);
+    }
+
+  Grob_array *arr = 
+    Pointer_group_interface::get_grob_array (me,
+                                             ly_symbol2scm ("covered-grobs"));
+  arr->set_array (filtered);
+
+  if (collision_free[DOWN].contains (beam_left_y)
+      || collision_free[UP].contains (beam_left_y))
     {
-      const int REGION_SIZE = 2; // UGH UGH
-      if (isinf (feasible_left_point[DOWN]))
-       y = feasible_left_point[UP] - REGION_SIZE;
-      else if (isinf (feasible_left_point[UP]))
-       y = feasible_left_point[DOWN]+ REGION_SIZE;
-      else
-       y = feasible_left_point.center ();
+      // We're good to go. Do nothing.
     }
+  else if (!collision_free[DOWN].is_empty ()
+           || !collision_free[UP].is_empty ())
+    {
+      // We have space above or below collisions (or, no collisions at
+      // all).
+      Interval best =  
+        (collision_free[DOWN].length () > collision_free[UP].length ()) ?
+        collision_free[DOWN] : collision_free[UP];
 
-  pos = Drul_array<Real> (y, (y + dy));
+      beam_left_y = point_in_interval (best, 2.0);
+    }
+  else if (!feasible_left_point.is_empty ())
+    {
+      // We are somewhat screwed: we have a collision, but at least
+      // there is a way to satisfy stem length constraints.
+      beam_left_y = point_in_interval (feasible_left_point, 2.0);
+    }
+  else
+    {
+      // We are completely screwed.
+      warning (_ ("no viable initial configuration found: may not find good beam slope"));
+    }
+  
+  pos = Drul_array<Real> (beam_left_y, (beam_left_y + beam_dy));
   scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
 
   return ly_interval2scm (pos);
index 7f6ce478d73b79d24ba22c2ffc6d55421d01c152..08664049e8b331393e0933e5b53f5dc74f1fb5be 100644 (file)
@@ -90,7 +90,7 @@ struct Beam_quant_parameters
   Real IDEAL_SLOPE_FACTOR;
   Real ROUND_TO_ZERO_SLOPE;
   Real COLLISION_PENALTY;
-  Real COLLISION_DISTANCE;
+  Real COLLISION_PADDING;
   Real HORIZONTAL_INTER_QUANT_PENALTY;
   Real STEM_COLLISION_FACTOR;
   
index 66b6e00a2b3bf9a2bd07143b2211b08497234360..db223e66061c8fc3dcf75e2bf0d8414cbe21ac78 100644 (file)
@@ -194,7 +194,7 @@ Key_engraver::read_event (Stream_event const *r)
          }
 
       if (warn)
-       r->origin ()->warning ("No ordering for key signature alterations");      
+       r->origin ()->warning ("Incomplete keyAlterationOrder for key signature");
     }
   
   context ()->set_property ("keySignature", scm_reverse (accs));
index 73d93ccb7dd103079722f1d06e100628951f813d..50c89a40650c67e164f61b5d68f9fb1314bb181d 100644 (file)
@@ -247,7 +247,7 @@ Open_type_font::index_to_charcode (size_t i) const
     return (size_t) iter->second;
   else
     {
-      programming_error (_ ("Invalid index for character"));
+      programming_error ("Invalid index for character");
       return 0;
     }
 }
index c1cfeb0656bbdff88e9eb0c2b56cb4ba3e91de55..3aebfd4aac138bd51a524119dd3f3578bd08bd15 100644 (file)
@@ -319,10 +319,10 @@ Page_layout_problem::solve_rod_spring_problem (bool ragged)
       Real overflow = spacer.configuration_length (spacer.force ())
                      - page_height_;
       if (ragged && overflow < 1e-6)
-       warning (_ ("couldn't fit music on page: ragged-spacing was requested, but page was compressed"));
+       warning (_ ("cannot fit music on page: ragged-spacing was requested, but page was compressed"));
       else
        {
-         warning (_f ("couldn't fit music on page: overflow is %f",
+         warning (_f ("cannot fit music on page: overflow is %f",
                       overflow));
          warning (_ ("compressing music to fit"));
          vsize space_count = solution_.size ();
index 48414b473dfae6366cfa375d5a57f41602d89124..61790e5542232838b2931f5672a7e9f6818859e1 100644 (file)
@@ -33,52 +33,72 @@ dwn = {
 %
 
 bayati = #`(
-    (0 . 0)
+    (0 . ,NATURAL)
     (1 . ,SEMI-FLAT)
     (2 . ,FLAT)
-    (3 . 0)
-    (4 . 0)
+    (3 . ,NATURAL)
+    (4 . ,NATURAL)
     (5 . ,FLAT)
     (6 . ,FLAT)
   )
 
 kurd = #`(
-    (0 . 0)
+    (0 . ,NATURAL)
     (1 . ,FLAT)
     (2 . ,FLAT)
-    (3 . 0)
-    (4 . 0)
+    (3 . ,NATURAL)
+    (4 . ,NATURAL)
     (5 . ,FLAT)
     (6 . ,FLAT)
     )
 
 rast = #`(
-    (0 . 0)
-    (1 . 0)
+    (0 . ,NATURAL)
+    (1 . ,NATURAL)
     (2 . ,SEMI-FLAT)
-    (3 . 0)
-    (4 . 0)
-    (5 . 0)
+    (3 . ,NATURAL)
+    (4 . ,NATURAL)
+    (5 . ,NATURAL)
     (6 . ,SEMI-FLAT)
   )
 
 sikah = #`(
-    (0 . 0)
+    (0 . ,NATURAL)
     (1 . ,SEMI-FLAT)
     (2 . ,SEMI-FLAT)
     (3 . ,SEMI-SHARP)
-    (4 . 0)
+    (4 . ,NATURAL)
     (5 . ,SEMI-FLAT)
     (6 . ,SEMI-FLAT)
   )
 
 iraq = #`(
-    (0 . 0)
+    (0 . ,NATURAL)
     (1 . ,SEMI-FLAT)
     (2 . ,SEMI-FLAT)
-    (3 . 0)
+    (3 . ,NATURAL)
     (4 . ,SEMI-FLAT)
     (5 . ,SEMI-FLAT)
     (6 . ,SEMI-FLAT)
   )
 
+\layout {
+  \context {
+    \Score
+      keyAlterationOrder =
+      #`(
+        (6 . ,FLAT) (2 . ,FLAT) (5 . ,FLAT ) (1 . ,FLAT)
+        (4 . ,FLAT) (0 . ,FLAT) (3 . ,FLAT)
+        (6 . ,SEMI-FLAT) (2 . ,SEMI-FLAT) (5 . ,SEMI-FLAT ) (1 . ,SEMI-FLAT)
+        (4 . ,SEMI-FLAT) (0 . ,SEMI-FLAT) (3 . ,SEMI-FLAT)
+        (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP)
+        (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
+        (3 . ,SEMI-SHARP) (0 . ,SEMI-SHARP) (4 . ,SEMI-SHARP) (1 . ,SEMI-SHARP)
+        (5 . ,SEMI-SHARP) (2 . ,SEMI-SHARP) (6 . ,SEMI-SHARP)
+        (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT)
+        (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
+        (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (1 . ,DOUBLE-SHARP)
+        (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP)
+       )
+  }
+}
index dda4f31ab4d13250336decea7f2c3e57c87485e6..488e22ba2a6eb823a43f048dac5bdcfef344abec 100644 (file)
@@ -31,6 +31,9 @@
   }
 }
 
+tocItemWithDotsMarkup = \markup \fill-with-pattern #1 #RIGHT .
+  \fromproperty #'toc:text \fromproperty #'toc:page
+
 #(define-markup-list-command (table-of-contents layout props) ()
   ( _i "Outputs the table of contents, using the paper variable
 @code{tocTitleMarkup} for its title, then the list of lines
index 606e9f3c01b2999475e569f421c8a1813e000a61..0ff656e5b5359db41981653971185f580ba00b9c 100644 (file)
@@ -1,12 +1,12 @@
-# Translation of LilyPOond.
+# Translation of LilyPond.
 # Copyright (C) 1998--2011 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the lilypond package.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.13.48\n"
+"Project-Id-Version: lilypond 2.13.53\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2011-02-05 20:21+0100\n"
+"POT-Creation-Date: 2011-03-02 10:34+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"
@@ -30,42 +30,42 @@ msgstr ""
 msgid "Writing fonts to %s"
 msgstr ""
 
-#: book_snippets.py:517
+#: book_snippets.py:519
 #, python-format
 msgid "deprecated ly-option used: %s=%s"
 msgstr ""
 
-#: book_snippets.py:519
+#: book_snippets.py:521
 #, python-format
 msgid "compatibility mode translation: %s=%s"
 msgstr ""
 
-#: book_snippets.py:522
+#: book_snippets.py:524
 #, python-format
 msgid "deprecated ly-option used: %s"
 msgstr ""
 
-#: book_snippets.py:524
+#: book_snippets.py:526
 #, python-format
 msgid "compatibility mode translation: %s"
 msgstr ""
 
-#: book_snippets.py:542
+#: book_snippets.py:544
 #, python-format
 msgid "ignoring unknown ly option: %s"
 msgstr ""
 
-#: book_snippets.py:728
+#: book_snippets.py:736
 #, python-format
 msgid "Opening filter `%s'\n"
 msgstr ""
 
-#: book_snippets.py:748
+#: book_snippets.py:756
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr ""
 
-#: book_snippets.py:749
+#: book_snippets.py:757
 msgid "The error log is as follows:"
 msgstr ""
 
@@ -673,6 +673,16 @@ msgstr ""
 msgid "Replace bar-size with bar-extent."
 msgstr ""
 
+#: convertrules.py:3197
+msgid "Woodwind diagrams: Changes to the clarinet diagram."
+msgstr ""
+
+#: convertrules.py:3201
+msgid ""
+"woodwind-diagrams.  Clarinet fingering changed to reflect actual anatomy of "
+"instrument.\n"
+msgstr ""
+
 #: book_base.py:24
 #, python-format
 msgid "file not found: %s"
@@ -884,7 +894,7 @@ msgid ""
 "If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
 
-#: musicxml2ly.py:2562 midi2ly.py:894 abc2ly.py:1386 lilypond-book.py:140
+#: musicxml2ly.py:2562 midi2ly.py:987 abc2ly.py:1386 lilypond-book.py:140
 #: convert-ly.py:98 etf2ly.py:1202 main.cc:157
 msgid "show this help and exit"
 msgstr ""
@@ -897,12 +907,12 @@ msgid ""
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: musicxml2ly.py:2580 midi2ly.py:917 abc2ly.py:1382 lilypond-book.py:212
+#: musicxml2ly.py:2580 midi2ly.py:1015 abc2ly.py:1382 lilypond-book.py:212
 #: convert-ly.py:94 etf2ly.py:1206 main.cc:168
 msgid "show version number and exit"
 msgstr ""
 
-#: musicxml2ly.py:2585 midi2ly.py:911 lilypond-book.py:204 main.cc:169
+#: musicxml2ly.py:2585 midi2ly.py:1009 lilypond-book.py:204 main.cc:169
 msgid "be verbose"
 msgstr ""
 
@@ -947,7 +957,8 @@ msgid ""
 "do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: musicxml2ly.py:2640 midi2ly.py:899 etf2ly.py:1208 main.cc:161 main.cc:166
+#: musicxml2ly.py:2640 midi2ly.py:992 midi2ly.py:997 etf2ly.py:1208
+#: main.cc:161 main.cc:166
 msgid "FILE"
 msgstr ""
 
@@ -959,7 +970,7 @@ msgstr ""
 #. "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:2648 midi2ly.py:930 abc2ly.py:1395 lilypond-book.py:234
+#: musicxml2ly.py:2648 midi2ly.py:1028 abc2ly.py:1395 lilypond-book.py:234
 #: convert-ly.py:144 etf2ly.py:1216 main.cc:281
 #, c-format, python-format
 msgid "Report bugs via %s"
@@ -1015,7 +1026,7 @@ msgstr ""
 msgid "warning: "
 msgstr ""
 
-#: midi2ly.py:102 midi2ly.py:943
+#: midi2ly.py:102 midi2ly.py:1041
 msgid "error: "
 msgstr ""
 
@@ -1023,79 +1034,83 @@ msgstr ""
 msgid "Exiting... "
 msgstr ""
 
-#: midi2ly.py:867
+#: midi2ly.py:960
 #, python-format
 msgid "%s output to `%s'..."
 msgstr ""
 
-#: midi2ly.py:879 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87
+#: midi2ly.py:972 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr ""
 
-#: midi2ly.py:880
+#: midi2ly.py:973
 #, python-format
 msgid "Convert %s to LilyPond input.\n"
 msgstr ""
 
-#: midi2ly.py:885
+#: midi2ly.py:978
 msgid "print absolute pitches"
 msgstr ""
 
-#: midi2ly.py:887 midi2ly.py:904
+#: midi2ly.py:980 midi2ly.py:1002
 msgid "DUR"
 msgstr ""
 
-#: midi2ly.py:888
+#: midi2ly.py:981
 msgid "quantise note durations on DUR"
 msgstr ""
 
-#: midi2ly.py:891
+#: midi2ly.py:984
 msgid "print explicit durations"
 msgstr ""
 
-#: midi2ly.py:895
+#: midi2ly.py:989
+msgid "prepend FILE to output"
+msgstr ""
+
+#: midi2ly.py:993
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr ""
 
-#: midi2ly.py:896
+#: midi2ly.py:994
 msgid "ALT[:MINOR]"
 msgstr ""
 
-#: midi2ly.py:898 abc2ly.py:1388 etf2ly.py:1207
+#: midi2ly.py:996 abc2ly.py:1388 etf2ly.py:1207
 msgid "write output to FILE"
 msgstr ""
 
-#: midi2ly.py:901
+#: midi2ly.py:999
 msgid "preview of first 4 bars"
 msgstr ""
 
-#: midi2ly.py:903
+#: midi2ly.py:1001
 msgid "quantise note starts on DUR"
 msgstr ""
 
-#: midi2ly.py:906
+#: midi2ly.py:1004
 msgid "DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:909
+#: midi2ly.py:1007
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:918 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210
+#: midi2ly.py:1016 lilypond-book.py:215 convert-ly.py:139 etf2ly.py:1210
 #: main.cc:170
 msgid "show warranty and copyright"
 msgstr ""
 
-#: midi2ly.py:921
+#: midi2ly.py:1019
 msgid "treat every text as a lyric"
 msgstr ""
 
-#: midi2ly.py:924
+#: midi2ly.py:1022
 msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:944
+#: midi2ly.py:1042
 msgid "no files specified on command line."
 msgstr ""
 
@@ -1369,11 +1384,11 @@ msgid ""
 "file.\n"
 msgstr ""
 
-#: website_post.py:115
+#: website_post.py:123
 msgid "English"
 msgstr ""
 
-#: website_post.py:118
+#: website_post.py:126
 msgid "Other languages"
 msgstr ""
 
@@ -1808,6 +1823,24 @@ msgid ""
 "values"
 msgstr ""
 
+#: score-engraver.cc:78
+#, c-format
+msgid "cannot find `%s'"
+msgstr ""
+
+#: score-engraver.cc:80
+msgid "Music font has not been installed properly."
+msgstr ""
+
+#: score-engraver.cc:82
+#, c-format
+msgid "Search path `%s'"
+msgstr ""
+
+#: score-engraver.cc:84
+msgid "Aborting"
+msgstr ""
+
 #: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr ""
@@ -1831,41 +1864,23 @@ msgstr ""
 
 #: page-layout-problem.cc:322
 msgid ""
-"couldn't fit music on page: ragged-spacing was requested, but page was "
+"cannot fit music on page: ragged-spacing was requested, but page was "
 "compressed"
 msgstr ""
 
 #: page-layout-problem.cc:325
 #, c-format
-msgid "couldn't fit music on page: overflow is %f"
+msgid "cannot fit music on page: overflow is %f"
 msgstr ""
 
 #: page-layout-problem.cc:327
 msgid "compressing music to fit"
 msgstr ""
 
-#: page-layout-problem.cc:744
+#: page-layout-problem.cc:765
 msgid "staff-affinities should only decrease"
 msgstr ""
 
-#: score-engraver.cc:78
-#, c-format
-msgid "cannot find `%s'"
-msgstr ""
-
-#: score-engraver.cc:80
-msgid "Music font has not been installed properly."
-msgstr ""
-
-#: score-engraver.cc:82
-#, c-format
-msgid "Search path `%s'"
-msgstr ""
-
-#: score-engraver.cc:84
-msgid "Aborting"
-msgstr ""
-
 #: apply-context-iterator.cc:42
 msgid "\\applycontext argument is not a procedure"
 msgstr ""
@@ -1938,11 +1953,12 @@ msgstr ""
 msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: beam.cc:172
+#: beam.cc:180
 msgid "removing beam with no stems"
 msgstr ""
 
-#: beam.cc:1117
+#. We are completely screwed.
+#: beam.cc:1274
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 
@@ -2026,12 +2042,12 @@ msgstr ""
 msgid "Element count %d"
 msgstr ""
 
-#: system.cc:289
+#: system.cc:303
 #, c-format
 msgid "Grob count %d"
 msgstr ""
 
-#: slur.cc:369
+#: slur.cc:362
 #, c-format
 msgid "Ignoring grob for slur: %s. avoid-slur not set?"
 msgstr ""
@@ -2456,17 +2472,17 @@ msgstr ""
 msgid "unterminated phrasing slur"
 msgstr ""
 
-#: lyric-engraver.cc:175
+#: lyric-engraver.cc:176
 msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
 msgstr ""
 
-#: page-breaking.cc:194
+#: page-breaking.cc:248
 msgid ""
 "ignoring min-systems-per-page and max-systems-per-page because systems-per-"
 "page was set"
 msgstr ""
 
-#: page-breaking.cc:199
+#: page-breaking.cc:253
 msgid ""
 "min-systems-per-page is larger than max-systems-per-page, ignoring both "
 "values"
@@ -2551,7 +2567,7 @@ msgstr ""
 msgid "expected to read %d characters, got %d"
 msgstr ""
 
-#: axis-group-interface.cc:611
+#: axis-group-interface.cc:631
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 
@@ -2560,7 +2576,7 @@ msgstr ""
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
 msgstr ""
 
-#: percent-repeat-engraver.cc:213
+#: percent-repeat-engraver.cc:148
 msgid "unterminated percent repeat"
 msgstr ""
 
@@ -2601,12 +2617,12 @@ msgstr ""
 msgid "weird stem size, check for narrow beams"
 msgstr ""
 
-#: stem.cc:642
+#: stem.cc:657
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: stem.cc:658
+#: stem.cc:673
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
@@ -2770,10 +2786,6 @@ msgstr ""
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr ""
 
-#: open-type-font.cc:250
-msgid "Invalid index for character"
-msgstr ""
-
 #: midi-stream.cc:39
 #, c-format
 msgid "cannot open for write: %s: %s"
@@ -2792,36 +2804,36 @@ msgstr ""
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1369
+#: parser.yy:1363
 msgid "only \\consists takes non-string argument."
 msgstr ""
 
-#: parser.yy:1382
+#: parser.yy:1376
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:1691
+#: parser.yy:1685
 msgid "second argument must be pitch list"
 msgstr ""
 
-#: parser.yy:1722 parser.yy:1727 parser.yy:2200
+#: parser.yy:1716 parser.yy:1721 parser.yy:2194
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:1824
+#: parser.yy:1818
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:1979 parser.yy:2030
+#: parser.yy:1973 parser.yy:2024
 #, c-format
 msgid "not a duration: %d"
 msgstr ""
 
-#: parser.yy:2154
+#: parser.yy:2148
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2215
+#: parser.yy:2209
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
@@ -2900,15 +2912,6 @@ msgstr ""
 msgid "program too old: %s (file requires: %s)"
 msgstr ""
 
-#: ly-syntax-constructors.scm:51
-msgid "Music head function must return Music object"
-msgstr ""
-
-#: ly-syntax-constructors.scm:176
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr ""
-
 #: documentation-lib.scm:59
 #, scheme-format
 msgid "Processing ~S..."
@@ -2980,47 +2983,55 @@ msgstr ""
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
-#: lily.scm:282
+#: lily.scm:225
+msgid "Using (ice-9 curried-definitions) module\n"
+msgstr ""
+
+#: lily.scm:230
+msgid "Guile 1.8\n"
+msgstr ""
+
+#: lily.scm:290
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr ""
 
-#: lily.scm:342
+#: lily.scm:350
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: lily.scm:707
+#: lily.scm:716
 msgid "Compilation successfully completed"
 msgstr ""
 
-#: lily.scm:708
+#: lily.scm:717
 msgid "Compilation completed with warnings or errors"
 msgstr ""
 
-#: lily.scm:770
+#: lily.scm:779
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr ""
 
-#: lily.scm:773
+#: lily.scm:782
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
 "~a"
 msgstr ""
 
-#: lily.scm:795 lily.scm:873
+#: lily.scm:804 lily.scm:882
 #, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:864
+#: lily.scm:873
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr ""
 
-#: lily.scm:883
+#: lily.scm:892
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr ""
@@ -3045,6 +3056,30 @@ msgstr ""
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
+#: modal-transforms.scm:38
+msgid "'from' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:42 modal-transforms.scm:75
+msgid "'to' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:46
+msgid "pitch to be transposed not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:71
+msgid "'around' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:79
+msgid "pitch to be inverted not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:95
+msgid "negative replication count; ignoring"
+msgstr ""
+
 #: backend-library.scm:29 ps-to-png.scm:68
 #, scheme-format
 msgid "Invoking `~a'..."
@@ -3164,50 +3199,50 @@ msgstr ""
 msgid "Could not find language `~a'.  Ignoring."
 msgstr ""
 
-#: define-music-types.scm:725
+#: define-music-types.scm:740
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:728
+#: define-music-types.scm:743
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:747
+#: define-music-types.scm:762
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:748
+#: define-music-types.scm:763
 msgid "See define-music-types.scm for supported repeats"
 msgstr ""
 
-#: translation-functions.scm:337
+#: translation-functions.scm:341
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:381
+#: translation-functions.scm:385
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:396
+#: translation-functions.scm:400
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:397
+#: translation-functions.scm:401
 msgid "Ignoring string request."
 msgstr ""
 
-#: translation-functions.scm:410
+#: translation-functions.scm:414
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr ""
 
-#: translation-functions.scm:511
+#: translation-functions.scm:515
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3259,57 +3294,57 @@ msgstr ""
 msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: music-functions.scm:604
+#: music-functions.scm:618
 #, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:648
+#: music-functions.scm:662
 #, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr ""
 
-#: music-functions.scm:832
+#: music-functions.scm:846
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:968
+#: music-functions.scm:982
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1023
+#: music-functions.scm:1037
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: music-functions.scm:1024
+#: music-functions.scm:1038
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1364
+#: music-functions.scm:1378
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
 
-#: define-event-classes.scm:78
+#: define-event-classes.scm:79
 msgid "All classes must be the last in their matrilineal line."
 msgstr ""
 
-#: define-event-classes.scm:82
+#: define-event-classes.scm:83
 msgid ""
 "All classes must have a well-defined pedigree in the existing class "
 "hierarchy."
 msgstr ""
 
-#: define-event-classes.scm:148
+#: define-event-classes.scm:149
 #, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr ""
 
 #. should be programming-error
-#: define-event-classes.scm:154
+#: define-event-classes.scm:155
 #, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr ""
@@ -3357,3 +3392,12 @@ msgstr ""
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr ""
+
+#: ly-syntax-constructors.scm:51
+msgid "Music head function must return Music object"
+msgstr ""
+
+#: ly-syntax-constructors.scm:177
+#, scheme-format
+msgid "Invalid property operation ~a"
+msgstr ""
index 2526fbeca4b7234395bb0675f29ac108282654a1..b8edb8af4ff403e68c6ceaf4bcd86ebabd2471eb 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
 msgid ""
 msgstr ""
 "Project-Id-Version: lilypond 2.13.10\n"
-"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2010-01-03 16:06+0100\n"
-"PO-Revision-Date: 2009-11-20 09:33+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-03-01 14:40+0100\n"
+"PO-Revision-Date: 2011-03-01 22:52+0100\n"
 "Last-Translator: Jan Nieuwenhuizen <janneke@gnu.org>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -25,6 +26,58 @@ msgstr ""
 "--add-comments --keyword=_\n"
 "Files: bow.cc int.cc\n"
 
+#: book_base.py:24
+#, python-format
+msgid "file not found: %s"
+msgstr "bestand niet gevonden: %s"
+
+#: book_base.py:161
+msgid "Output function not implemented"
+msgstr ""
+
+#: book_latex.py:156
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "kan \\begin{document} niet vinden in LaTeX dokument"
+
+#: book_snippets.py:519
+#, python-format
+msgid "deprecated ly-option used: %s=%s"
+msgstr "verouderde ly-optie gebruikt: %s=%s"
+
+#: book_snippets.py:521
+#, python-format
+msgid "compatibility mode translation: %s=%s"
+msgstr "compatibiliteitsmodus vertaling: %s=%s"
+
+#: book_snippets.py:524
+#, python-format
+msgid "deprecated ly-option used: %s"
+msgstr "verouderde ly-optie gebruikt: %s"
+
+#: book_snippets.py:526
+#, python-format
+msgid "compatibility mode translation: %s"
+msgstr "compatibiliteitsmodus vertaling: %s"
+
+#: book_snippets.py:544
+#, python-format
+msgid "ignoring unknown ly option: %s"
+msgstr "negeren van onbekende ly optie: %s"
+
+#: book_snippets.py:736
+#, python-format
+msgid "Opening filter `%s'\n"
+msgstr "Open filter `%s'\n"
+
+#: book_snippets.py:756
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "`%s' gefaald (%d)"
+
+#: book_snippets.py:757
+msgid "The error log is as follows:"
+msgstr "De foutlog is als volgt:"
+
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
@@ -39,8 +92,8 @@ msgstr "Zie de handleiding voor de details, en actualiseer handmatig."
 msgid "%s has been replaced by %s"
 msgstr "%s is vervangen door %s"
 
-#: convertrules.py:24 musicexp.py:17 convert-ly.py:64 lilypond-book.py:108
-#: warn.cc:59 input.cc:109
+#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66
+#: input.cc:109
 #, c-format, python-format
 msgid "warning: %s"
 msgstr "waarschuwing: %s"
@@ -131,9 +184,9 @@ msgstr ""
 
 #: convertrules.py:963 convertrules.py:1682 convertrules.py:1942
 #: convertrules.py:2189
-#, fuzzy, python-format
+#, python-format
 msgid "remove %s"
-msgstr "Verwijderen van `%s'"
+msgstr "verwijder %s"
 
 #: convertrules.py:1001 convertrules.py:1005
 msgid "cluster syntax"
@@ -240,9 +293,9 @@ msgid "Scheme grob function renaming"
 msgstr ""
 
 #: convertrules.py:1780
-#, fuzzy, python-format
+#, python-format
 msgid "use %s"
-msgstr "Gebruik: %s"
+msgstr "gebruik %s"
 
 #: convertrules.py:1797
 msgid "More Scheme function renaming"
@@ -342,12 +395,15 @@ msgid "edge-text settings for TextSpanner."
 msgstr ""
 
 #: convertrules.py:2652
-#, fuzzy, python-format
+#, python-format
 msgid ""
 "Use\n"
 "\n"
 "%s"
-msgstr "Gebruik: %s"
+msgstr ""
+"Gebruik:\n"
+"\n"
+"%s"
 
 #: convertrules.py:2685
 msgid "Use the `alignment-offsets' sub-property of\n"
@@ -464,9 +520,9 @@ msgstr ""
 #: convertrules.py:2917
 msgid ""
 "Autobeaming rules have changed.  override-auto-beam-setting and\n"
-"revert-auto-beam-setting have been eliminated.  \\overrideBeamSettings has "
-"been\n"
-"added.  beatGrouping has been eliminated.\n"
+"revert-auto-beam-setting have been eliminated.\n"
+"\\overrideBeamSettings has been added.\n"
+"beatGrouping has been eliminated.\n"
 "Different settings for vertical layout.\n"
 "ly:system-start-text::print -> system-start-text::print\n"
 "Beam #'thickness -> Beam #'beam-thickness\n"
@@ -476,36 +532,167 @@ msgid ""
 "template replaced by new `Dynamics' context."
 msgstr ""
 
-#: convertrules.py:2930
+#: convertrules.py:2931
 msgid ""
 "override-auto-beam-setting.\n"
 "   Autobeam settings are now overriden with \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2935
+#: convertrules.py:2936
 msgid ""
 "override-auto-beam-setting.\n"
 "   Autobeam settings are now reverted with \\revertBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2940
+#: convertrules.py:2941
 msgid ""
 "beatGrouping. \n"
 "   beatGrouping with a specified context must now be accomplished with\n"
 "   \\overrideBeamSettings.\n"
 msgstr ""
 
-#: convertrules.py:2946
+#: convertrules.py:2947
 msgid ""
 "alignment-offsets has been changed to alignment-distances: you must now "
 "specify the distances between staves rather than the offset of staves.\n"
 msgstr ""
 
-#: convertrules.py:2957
+#: convertrules.py:2958
 msgid ""
 "Remove obsolete engravers/translators: Note_swallow_translator,\n"
 "Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
-"Swallow_performer and String_number_engraver."
+"Swallow_performer and String_number_engraver.\n"
+"New vertical spacing variables."
+msgstr ""
+
+#: convertrules.py:2989
+msgid ""
+"minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a "
+"VerticalAxisGroup.\n"
+msgstr ""
+
+#: convertrules.py:2995
+msgid "Unify fetaNumber and fetaDynamic encodings"
+msgstr ""
+
+#: convertrules.py:3000
+msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
+msgstr ""
+
+#: convertrules.py:3011
+msgid "\\cresc etc. are now postfix operators"
+msgstr ""
+
+#: convertrules.py:3017
+msgid ""
+"Eliminate beamSettings, beatLength, \\setBeatGrouping, "
+"\\overrideBeamSettings and \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+msgstr ""
+
+#: convertrules.py:3035
+msgid ""
+"\\overrideBeamSettings.  Use \\set beamExceptions or "
+"\\overrideTimeSignatureSettings.\n"
+msgstr ""
+
+#: convertrules.py:3039
+msgid ""
+"\\revertBeamSettings. Use \\set beamExceptions or "
+"\\revertTimeSignatureSettings.\n"
+msgstr ""
+
+#: convertrules.py:3043
+msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n"
+msgstr ""
+
+#: convertrules.py:3047
+msgid "beatLength. Use baseMoment and beatStructure.\n"
+msgstr ""
+
+#: convertrules.py:3051
+msgid "setbeatGrouping. Use baseMoment and beatStructure.\n"
+msgstr ""
+
+#: convertrules.py:3056
+msgid ""
+"Woodwind diagrams: Move size, thickness, and graphic from argument list to "
+"properties.\n"
+"Deprecate negative dash-period for hidden lines: use #'style = #'none "
+"instead."
+msgstr ""
+
+#: convertrules.py:3061
+msgid ""
+"woodwind-diagrams.  Move size, thickness, and graphic to properties.  "
+"Argument should be just the key list.\n"
+msgstr ""
+
+#: convertrules.py:3069
+msgid ""
+"Rename vertical spacing variables.\n"
+"Add fretboard-table argument to savePredefinedFretboard."
+msgstr ""
+
+#: convertrules.py:3087
+msgid "Rename vertical spacing grob properties."
+msgstr ""
+
+#: convertrules.py:3103
+msgid "Remove \\paper variables head-separation and foot-separation."
+msgstr ""
+
+#: convertrules.py:3108
+msgid "Adjust settings for top-system-spacing instead.\n"
+msgstr ""
+
+#: convertrules.py:3113
+msgid "Adjust settings for last-bottom-spacing instead.\n"
+msgstr ""
+
+#: convertrules.py:3119
+msgid ""
+"Rename space to basic-distance in various spacing alists.\n"
+"Remove HarmonicParenthesesItem grob."
+msgstr ""
+
+#: convertrules.py:3127
+msgid "HarmonicParenthesesItem has been eliminated.\n"
+msgstr ""
+
+#: convertrules.py:3128
+msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
+msgstr ""
+
+#: convertrules.py:3133
+msgid ""
+"Remove context from overrideTimeSignatureSettings and "
+"revertTimeSignatureSettings.\n"
+msgstr ""
+
+#: convertrules.py:3140
+msgid ""
+"Change stringTunings from a list of semitones to a list of pitches.\n"
+"Change tenor and baritone ukulele names in string tunings.\n"
+"Generate messages for manual conversion of vertical spacing if required."
+msgstr ""
+
+#: convertrules.py:3180
+msgid "Vertical spacing changes might affect user-defined contexts.  "
+msgstr ""
+
+#: convertrules.py:3185
+msgid "Replace bar-size with bar-extent."
+msgstr ""
+
+#: convertrules.py:3197
+msgid "Woodwind diagrams: Changes to the clarinet diagram."
+msgstr ""
+
+#: convertrules.py:3201
+msgid ""
+"woodwind-diagrams.  Clarinet fingering changed to reflect actual anatomy of "
+"instrument.\n"
 msgstr ""
 
 #: fontextract.py:25
@@ -523,17 +710,23 @@ msgstr "GeĆ«xtraheerd %s"
 msgid "Writing fonts to %s"
 msgstr "Schrijven van fonts naar %s"
 
-#: lilylib.py:101 lilylib.py:152
+#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115
+#: input.cc:123
+#, c-format, python-format
+msgid "error: %s"
+msgstr "fout: %s"
+
+#: lilylib.py:124 lilylib.py:175
 #, python-format
 msgid "Invoking `%s'"
 msgstr "Aanroepen van `%s'"
 
-#: lilylib.py:103 lilylib.py:154
+#: lilylib.py:126 lilylib.py:177
 #, python-format
 msgid "Running %s..."
 msgstr "Draaien van %s..."
 
-#: lilylib.py:219
+#: lilylib.py:253
 #, python-format
 msgid "Usage: %s"
 msgstr "Gebruik: %s"
@@ -571,67 +764,60 @@ msgstr ""
 msgid "Unable to convert alteration %s to a lilypond expression"
 msgstr ""
 
-#: musicxml.py:13 convert-ly.py:67 lilypond-book.py:111 warn.cc:65
-#: input.cc:115 input.cc:123
-#, c-format, python-format
-msgid "error: %s"
-msgstr "fout: %s"
-
 #. TODO: Handle pieces without a time signature!
-#: musicxml.py:357
+#: musicxml.py:358
 msgid "Senza-misura time signatures are not yet supported!"
 msgstr ""
 
-#: musicxml.py:375
+#: musicxml.py:376
 msgid "Unable to interpret time signature! Falling back to 4/4."
 msgstr ""
 
-#: musicxml.py:431
+#: musicxml.py:432
 #, python-format
 msgid ""
 "Key alteration octave given for a non-existing alteration nr. %s, available "
 "numbers: %s!"
 msgstr ""
 
-#: musicxml.py:519
+#: musicxml.py:520
 #, python-format
 msgid "Unable to find instrument for ID=%s\n"
 msgstr ""
 
-#: abc2ly.py:1372 convert-ly.py:87 lilypond-book.py:135 midi2ly.py:860
+#: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:969
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPTIE]... BESTAND"
 
-#: abc2ly.py:1373
-#, fuzzy, python-format
+#: abc2ly.py:1374
+#, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
 "%s) to LilyPond input.\n"
 msgstr ""
 "abc2ly converteert ABC muziekbestanden (zie\n"
-"%s) naar LilyPond invoer."
+"%s) naar LilyPond invoer.\n"
 
-#: abc2ly.py:1381 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:226
-#: midi2ly.py:896 musicxml2ly.py:2622 main.cc:168
+#: abc2ly.py:1382 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:212
+#: midi2ly.py:1011 musicxml2ly.py:2580 main.cc:168
 msgid "show version number and exit"
 msgstr "toon versienummer en sluit af"
 
-#: abc2ly.py:1385 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:152
-#: midi2ly.py:875 musicxml2ly.py:2604 main.cc:157
+#: abc2ly.py:1386 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:140
+#: midi2ly.py:984 musicxml2ly.py:2562 main.cc:157
 msgid "show this help and exit"
 msgstr "toon deze hulp en sluit af"
 
-#: abc2ly.py:1387 etf2ly.py:1207 midi2ly.py:879
+#: abc2ly.py:1388 etf2ly.py:1207 midi2ly.py:992
 msgid "write output to FILE"
 msgstr "schrijf uitvoer naar BESTAND"
 
-#: abc2ly.py:1389
-#, fuzzy
+#: abc2ly.py:1390
 msgid "be strict about success"
 msgstr "wees strikt over succes"
 
-#: abc2ly.py:1391
+#: abc2ly.py:1392
 msgid "preserve ABC's notion of beams"
 msgstr "behoud ABC's notie van waardestrepen"
 
@@ -639,8 +825,8 @@ msgstr "behoud ABC's notie van waardestrepen"
 #. "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:1394 convert-ly.py:138 etf2ly.py:1216 lilypond-book.py:233
-#: midi2ly.py:909 musicxml2ly.py:2690 main.cc:281
+#: abc2ly.py:1395 convert-ly.py:144 etf2ly.py:1216 lilypond-book.py:234
+#: midi2ly.py:1024 musicxml2ly.py:2648 main.cc:281
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
@@ -655,24 +841,24 @@ msgstr ""
 "Actualiseer LilyPond invoer naar nieuwere versie.  Standaard, actualiseer\n"
 "vanaf versie uit het \\version commando, naar de huidige LilyPond versie."
 
-#: convert-ly.py:46 lilypond-book.py:85
+#: convert-ly.py:46 lilypond-book.py:82
 msgid "Examples:"
 msgstr "Voorbeelden:"
 
-#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:129 midi2ly.py:90
+#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:116 midi2ly.py:90
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr "Copyright (c) %s"
 
-#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:131 midi2ly.py:92
+#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:118 midi2ly.py:92
 msgid "Distributed under terms of the GNU General Public License."
 msgstr "Verspreid onder de voorwaarden van de GNU General Public License."
 
-#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:132 midi2ly.py:93
+#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:119 midi2ly.py:93
 msgid "It comes with NO WARRANTY."
 msgstr "Er is GEEN GARANTIE."
 
-#: convert-ly.py:102 convert-ly.py:129
+#: convert-ly.py:102 convert-ly.py:135
 msgid "VERSION"
 msgstr "VERSIE"
 
@@ -694,47 +880,58 @@ msgid "force updating \\version number to %s"
 msgstr ""
 
 #: convert-ly.py:123
-#, fuzzy, python-format
+msgid "only update \\version number if file is modified"
+msgstr ""
+
+#: convert-ly.py:129
+#, python-format
 msgid "show rules [default: -f 0, -t %s]"
-msgstr "toon regels [standaard: --from=0, --to=@TOPLEVEL_VERSION@]"
+msgstr "toon regels [standaard: - 0, -t %s]"
 
-#: convert-ly.py:128
-#, fuzzy, python-format
+#: convert-ly.py:134
+#, python-format
 msgid "convert to VERSION [default: %s]"
-msgstr "converteer naar VERSIE [standaard: @TOPLEVEL_VERSION@]"
+msgstr "converteer naar VERSIE [standaard: %s]"
 
-#: convert-ly.py:133 etf2ly.py:1210 lilypond-book.py:229 midi2ly.py:897
+#: convert-ly.py:139 etf2ly.py:1210 lilypond-book.py:215 midi2ly.py:1012
 #: main.cc:170
 msgid "show warranty and copyright"
 msgstr "toon garantie en auteursrechten"
 
-#: convert-ly.py:178
+#: convert-ly.py:184
 msgid "Applying conversion: "
 msgstr "toepassen van conversie: "
 
-#: convert-ly.py:191
+#: convert-ly.py:197
 msgid "Error while converting"
 msgstr "%s: fout tijdens converteren"
 
-#: convert-ly.py:193
-#, fuzzy
+#: convert-ly.py:199
 msgid "Stopping at last successful rule"
 msgstr "Stop na de laatste succesvolle regel"
 
-#: convert-ly.py:214
+#: convert-ly.py:224
 #, python-format
 msgid "Processing `%s'... "
 msgstr "Verwerken van `%s'..."
 
-#: convert-ly.py:307 relocate.cc:372 source-file.cc:65
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "kan bestand niet openen: `%s'"
+#: convert-ly.py:332
+#, python-format
+msgid "%s: Unable to open file"
+msgstr "%s: Kan bestand niet openen"
 
-#: convert-ly.py:314
+#: convert-ly.py:339
 #, python-format
-msgid "cannot determine version for `%s'.  Skipping"
-msgstr "kan versie niet bepalen voor `%s'.  Overslaan"
+msgid "%s: Unable to determine version.  Skipping"
+msgstr "%s: Kan versie niet bepalen voor.  Overslaan"
+
+#: convert-ly.py:344
+#, python-format
+msgid ""
+"%s: Invalid version string `%s' \n"
+"Valid version strings consist of three numbers, separated by dots, e.g. "
+"`2.8.12'"
+msgstr ""
 
 #: etf2ly.py:1195
 #, python-format
@@ -742,223 +939,187 @@ msgid "%s [OPTION]... ETF-FILE"
 msgstr "%s [OPTIE]... ETF-BESTAND"
 
 #: etf2ly.py:1196
-#, fuzzy
 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"
 msgstr ""
 "Enigma Transport Format is een format dat wordt gebruikt door Coda\n"
-"Music Technology's Finale produkt.  Dit programma converteert een\n"
-"subset van ETF naar een gebruiksklaar lilypondbestand."
+"Music Technology's Finale product.  Dit programma converteert een\n"
+"subset van ETF naar een gebruiksklaar LilyPond-bestand.\n"
 
-#: etf2ly.py:1208 midi2ly.py:880 musicxml2ly.py:2682 main.cc:161 main.cc:166
+#: etf2ly.py:1208 midi2ly.py:988 midi2ly.py:993 musicxml2ly.py:2640
+#: main.cc:161 main.cc:166
 msgid "FILE"
 msgstr "BESTAND"
 
-#: lilypond-book.py:83
+#: lilypond-book.py:80
 msgid ""
 "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
 msgstr ""
 "Verwerk LilyPond snippers in hybride HTML, LaTeX, texinfo of DocBook "
 "document."
 
-#: lilypond-book.py:90
+#: lilypond-book.py:87
 msgid "BOOK"
 msgstr "BOEK"
 
-#: lilypond-book.py:98
+#: lilypond-book.py:95
 #, python-format
 msgid "Exiting (%d)..."
 msgstr "Afsluiten (%d)..."
 
-#: lilypond-book.py:139
+#: lilypond-book.py:127
 msgid "FILTER"
 msgstr "FILTER"
 
-#: lilypond-book.py:142
-#, fuzzy
+#: lilypond-book.py:130
 msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
-msgstr "pijp snippers door FILTER [convert-ly -n -]"
+msgstr "pijp snippers door FILTER [default: `convert-ly -n -']"
 
-#: lilypond-book.py:146
+#: lilypond-book.py:134
 msgid ""
 "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 "gebruik uitvoerformat FORMAT (texi [standaard], texi-html, latex, html, "
 "docbook)"
 
-#: lilypond-book.py:147
-#, fuzzy
+#: lilypond-book.py:135
 msgid "FORMAT"
-msgstr "FORMAATen"
+msgstr "FORMAAT"
 
-#: lilypond-book.py:154
+#: lilypond-book.py:142
 msgid "add DIR to include path"
 msgstr "voeg MAP toe aan zoekpad"
 
-#: lilypond-book.py:155 lilypond-book.py:162 lilypond-book.py:181
-#: lilypond-book.py:186 lilypond-book.py:203 lilypond-book.py:209 main.cc:160
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163
+#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160
 msgid "DIR"
 msgstr "MAP"
 
-#: lilypond-book.py:160
+#: lilypond-book.py:148
 msgid "format Texinfo output so that Info will look for images of music in DIR"
 msgstr ""
 
-#: lilypond-book.py:167
-msgid "run executable PROG instead of latex"
-msgstr ""
-
-#: lilypond-book.py:168
-msgid "PROG"
-msgstr ""
-
-#: lilypond-book.py:173
+#: lilypond-book.py:155
 msgid "PAD"
 msgstr "VUL"
 
-#: lilypond-book.py:175
+#: lilypond-book.py:157
 msgid ""
 "pad left side of music to align music inspite of uneven bar numbers (in mm)"
 msgstr ""
 
-#: lilypond-book.py:180
+#: lilypond-book.py:162
 msgid "write lily-XXX files to DIR, link into --output dir"
 msgstr ""
 
-#: lilypond-book.py:185
+#: lilypond-book.py:167
+msgid ""
+"Load the additional python PACKAGE (containing e.g. a custom output format)"
+msgstr ""
+
+#: lilypond-book.py:168
+msgid "PACKAGE"
+msgstr ""
+
+#: lilypond-book.py:172
 msgid "write output to DIR"
 msgstr "schrijf uitvoer naar MAP"
 
-#: lilypond-book.py:193
-#, fuzzy
-msgid "create PDF files for use with PDFTeX"
-msgstr "Maak PDF bestanden voor gebruik met PDFTeX"
-
-#: lilypond-book.py:196
+#: lilypond-book.py:177
 msgid "COMMAND"
 msgstr "OPDRACHT"
 
-#: lilypond-book.py:197
+#: lilypond-book.py:178
 msgid "process ly_files using COMMAND FILE..."
 msgstr "verwerk ly_bestanden met OPDRACHT BESTAND..."
 
-#: lilypond-book.py:202
+#: lilypond-book.py:182
+msgid "Compile snippets in safe mode"
+msgstr "Samenstellen van snippers in veilige modus"
+
+#: lilypond-book.py:188
 msgid "do not fail if no lilypond output is found"
 msgstr ""
 
-#: lilypond-book.py:208
+#: lilypond-book.py:194
 msgid "do not fail if no PNG images are found for EPS files"
 msgstr ""
 
-#: lilypond-book.py:214
+#: lilypond-book.py:200
 msgid "write snippet output files with the same base name as their source file"
 msgstr ""
 
-#: lilypond-book.py:218 midi2ly.py:890 musicxml2ly.py:2627 main.cc:169
+#: lilypond-book.py:204 midi2ly.py:1005 musicxml2ly.py:2585 main.cc:169
 msgid "be verbose"
 msgstr "wees breedsprakig"
 
-#: lilypond-book.py:933
-#, python-format
-msgid "file not found: %s"
-msgstr "bestand niet gevonden: %s"
-
-#: lilypond-book.py:1224
-#, python-format
-msgid "deprecated ly-option used: %s=%s"
-msgstr "verouderde ly-optie gebruikt: %s=%s"
-
-#: lilypond-book.py:1226
-#, python-format
-msgid "compatibility mode translation: %s=%s"
-msgstr "compatibiliteitsmodus vertaling: %s=%s"
-
-#: lilypond-book.py:1229
-#, python-format
-msgid "deprecated ly-option used: %s"
-msgstr "verouderde ly-optie gebruikt: %s"
-
-#: lilypond-book.py:1231
-#, python-format
-msgid "compatibility mode translation: %s"
-msgstr "compatibiliteitsmodus vertaling: %s"
-
-#: lilypond-book.py:1249
-#, python-format
-msgid "ignoring unknown ly option: %s"
-msgstr "negeren van onbekende ly optie: %s"
-
-#: lilypond-book.py:1728
-#, python-format
-msgid "Opening filter `%s'"
-msgstr "Open filter `%s'"
-
-#: lilypond-book.py:1745
-#, python-format
-msgid "`%s' failed (%d)"
-msgstr "`%s' gefaald (%d)"
+#: lilypond-book.py:220
+msgid ""
+"run executable PROG instead of latex, or in\n"
+"case --pdf option is set instead of pdflatex"
+msgstr ""
 
-#: lilypond-book.py:1746
-msgid "The error log is as follows:"
-msgstr "De foutlog is als volgt:"
+#: lilypond-book.py:222
+msgid "PROG"
+msgstr ""
 
-#: lilypond-book.py:1808
-msgid "cannot find \\begin{document} in LaTeX document"
-msgstr "kan \\begin{document} niet vinden in LaTeX dokument"
+#: lilypond-book.py:228
+msgid "create PDF files for use with PDFTeX"
+msgstr "maak PDF-bestanden voor gebruik met PDFTeX"
 
-#: lilypond-book.py:1908
+#: lilypond-book.py:419
 msgid "Writing snippets..."
 msgstr "Schrijven van snippers..."
 
-#: lilypond-book.py:1914
+#: lilypond-book.py:425
 msgid "Processing..."
 msgstr "Verwerken..."
 
-#: lilypond-book.py:1920
+#: lilypond-book.py:431
 msgid "All snippets are up to date..."
 msgstr "Alle snippers zijn actueel..."
 
-#: lilypond-book.py:1954
+#: lilypond-book.py:452
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr "kan formaat niet bepalen voor: %s"
 
-#: lilypond-book.py:1965
+#: lilypond-book.py:461
 #, python-format
 msgid "%s is up to date."
 msgstr "%s is actueel."
 
-#: lilypond-book.py:1979
+#: lilypond-book.py:475
 #, python-format
 msgid "Writing `%s'..."
 msgstr "Schrijven van `%s'..."
 
-#: lilypond-book.py:2037
+#: lilypond-book.py:537
 msgid "Output would overwrite input file; use --output."
 msgstr "Uitvoer zou invoerbestand overschrijven; gebruik --output."
 
-#: lilypond-book.py:2041
+#: lilypond-book.py:541
 #, python-format
 msgid "Reading %s..."
 msgstr "Lezen %s..."
 
-#: lilypond-book.py:2061
+#: lilypond-book.py:549
 msgid "Dissecting..."
 msgstr "Ontleden..."
 
-#: lilypond-book.py:2077
+#: lilypond-book.py:561
 #, python-format
 msgid "Compiling %s..."
 msgstr "Samenstellen %s..."
 
-#: lilypond-book.py:2086
+#: lilypond-book.py:570
 #, python-format
 msgid "Processing include: %s"
 msgstr "Verwerken van invoegsel: %s"
 
-#: lilypond-book.py:2098
+#: lilypond-book.py:582
 #, python-format
 msgid "Removing `%s'"
 msgstr "Verwijderen van `%s'"
@@ -967,200 +1128,204 @@ msgstr "Verwijderen van `%s'"
 msgid "warning: "
 msgstr "waarschuwing: "
 
-#: midi2ly.py:102 midi2ly.py:922
+#: midi2ly.py:102 midi2ly.py:1037
 msgid "error: "
 msgstr "fout: "
 
 #: midi2ly.py:103
-#, fuzzy
 msgid "Exiting... "
-msgstr "BeĆ«indigen ..."
+msgstr "BeĆ«indigen..."
 
-#: midi2ly.py:848
+#: midi2ly.py:957
 #, python-format
 msgid "%s output to `%s'..."
 msgstr "%s uitvoer naar `%s'..."
 
-#: midi2ly.py:861
-#, fuzzy, python-format
+#: midi2ly.py:970
+#, python-format
 msgid "Convert %s to LilyPond input.\n"
-msgstr "Converteer %s naar LilyPond invoer."
+msgstr "Converteer %s naar LilyPond-invoer.\n"
 
-#: midi2ly.py:866
+#: midi2ly.py:975
 msgid "print absolute pitches"
 msgstr "schrijf absolute toonhoogten"
 
-#: midi2ly.py:868 midi2ly.py:883
+#: midi2ly.py:977 midi2ly.py:998
 msgid "DUR"
 msgstr "DUUR"
 
-#: midi2ly.py:869
+#: midi2ly.py:978
 msgid "quantise note durations on DUR"
 msgstr "kwantiseer nootlengtes op DUUR"
 
-#: midi2ly.py:872
+#: midi2ly.py:981
 msgid "print explicit durations"
 msgstr "schrijf expliciete nootlengtes"
 
-#: midi2ly.py:876
+#: midi2ly.py:986
+msgid "prepend FILE to output"
+msgstr "plak BESTAND aan begin van uitvoer"
+
+#: midi2ly.py:989
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr "zet toonsoort: VER=+kruizen|-mollen; MINEUR=1"
 
-#: midi2ly.py:877
+#: midi2ly.py:990
 msgid "ALT[:MINOR]"
 msgstr "VER[:MINEUR]"
 
-#: midi2ly.py:882
+#: midi2ly.py:995
+msgid "preview of first 4 bars"
+msgstr ""
+
+#: midi2ly.py:997
 msgid "quantise note starts on DUR"
 msgstr "kwantiseer begin van noten op DUUR"
 
-#: midi2ly.py:885
+#: midi2ly.py:1000
 msgid "DUR*NUM/DEN"
 msgstr "DUUR*NOEM/TEL"
 
-#: midi2ly.py:888
+#: midi2ly.py:1003
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr "sta tuplet lengtes DUUR*NOEM/TEL toe"
 
-#: midi2ly.py:900
+#: midi2ly.py:1015
 msgid "treat every text as a lyric"
 msgstr "behandel elke tekst als liedtekst"
 
-#: midi2ly.py:903
+#: midi2ly.py:1018
 msgid "Examples"
 msgstr "Voorbeelden"
 
-#: midi2ly.py:923
+#: midi2ly.py:1038
 msgid "no files specified on command line."
 msgstr "geen bestanden gespecificeerd op de commandoregel."
 
-#: musicxml2ly.py:324
+#: musicxml2ly.py:223
 #, python-format
 msgid ""
 "Encountered file created by %s, containing wrong beaming information. All "
 "beaming information in the MusicXML file will be ignored"
 msgstr ""
 
-#: musicxml2ly.py:340 musicxml2ly.py:342
+#: musicxml2ly.py:239 musicxml2ly.py:241
 #, python-format
 msgid "Unprocessed PartGroupInfo %s encountered"
 msgstr ""
 
-#: musicxml2ly.py:572
+#: musicxml2ly.py:494
 #, python-format
 msgid "Encountered note at %s without type and duration (=%s)"
 msgstr ""
 
-#: musicxml2ly.py:592
+#: musicxml2ly.py:514
 #, python-format
 msgid ""
 "Encountered rational duration with denominator %s, unable to convert to "
 "lilypond duration"
 msgstr ""
 
-#: musicxml2ly.py:841
+#: musicxml2ly.py:761
 msgid "Unable to extract key signature!"
 msgstr ""
 
-#: musicxml2ly.py:868
+#: musicxml2ly.py:788
 #, python-format
 msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
 msgstr ""
 
-#: musicxml2ly.py:965
+#: musicxml2ly.py:926
 #, python-format
 msgid "Encountered unprocessed marker %s\n"
 msgstr ""
 
-#: musicxml2ly.py:1059
-#, fuzzy, python-format
+#: musicxml2ly.py:1020
+#, python-format
 msgid "unknown span event %s"
-msgstr "Onbekende gebeurtenis klasse `%s'"
+msgstr "onbekende span gebeurtenis %s"
 
-#: musicxml2ly.py:1069
-#, fuzzy, python-format
+#: musicxml2ly.py:1030
+#, python-format
 msgid "unknown span type %s for %s"
-msgstr "onbekende ontsnapte string: `\\%s'"
+msgstr "onbekend span-type %s voor %s"
 
-#: musicxml2ly.py:1489
+#: musicxml2ly.py:1450
 msgid "Unknown metronome mark, ignoring"
 msgstr ""
 
 #. TODO: Implement the other (more complex) way for tempo marks!
-#: musicxml2ly.py:1494
+#: musicxml2ly.py:1455
 msgid ""
 "Metronome marks with complex relations (<metronome-note> in MusicXML) are "
 "not yet implemented."
 msgstr ""
 
-#: musicxml2ly.py:1695
+#: musicxml2ly.py:1657
 #, python-format
 msgid "Unable to convert chord type %s to lilypond."
 msgstr ""
 
-#: musicxml2ly.py:1842
+#: musicxml2ly.py:1806
 #, python-format
 msgid "drum %s type unknown, please add to instrument_drumtype_dict"
 msgstr ""
 
-#: musicxml2ly.py:1846
-#, fuzzy
+#: musicxml2ly.py:1810
 msgid "cannot find suitable event"
-msgstr "kan bestand niet vinden: `%s'"
+msgstr "kan geen passende gebeurtenis vinden"
 
-#: musicxml2ly.py:1994
+#: musicxml2ly.py:1958
 #, python-format
 msgid "Negative skip %s (from position %s to %s)"
 msgstr ""
 
-#: musicxml2ly.py:2141
+#: musicxml2ly.py:2099
 #, python-format
 msgid "Negative skip found: from %s to %s, difference is %s"
 msgstr ""
 
-#: musicxml2ly.py:2222
+#: musicxml2ly.py:2180
 #, python-format
 msgid "unexpected %s; expected %s or %s or %s"
 msgstr ""
 
-#: musicxml2ly.py:2328
+#: musicxml2ly.py:2286
 msgid "Encountered closing slur, but no slur is open"
 msgstr ""
 
-#: musicxml2ly.py:2331
+#: musicxml2ly.py:2289
 msgid "Cannot have two simultaneous (closing) slurs"
 msgstr ""
 
-#: musicxml2ly.py:2340
+#: musicxml2ly.py:2298
 msgid "Cannot have a slur inside another slur"
 msgstr ""
 
-#: musicxml2ly.py:2343
+#: musicxml2ly.py:2301
 msgid "Cannot have two simultaneous slurs"
 msgstr ""
 
-#: musicxml2ly.py:2477
+#: musicxml2ly.py:2435
 #, python-format
 msgid "cannot simultaneously have more than one mode: %s"
 msgstr ""
 
-#: musicxml2ly.py:2585
-#, fuzzy
+#: musicxml2ly.py:2543
 msgid "Converting to LilyPond expressions..."
-msgstr "Converteer %s naar LilyPond invoer."
+msgstr "Converteren naar LilyPond-expressies..."
 
-#: musicxml2ly.py:2596
-#, fuzzy
+#: musicxml2ly.py:2554
 msgid "musicxml2ly [OPTION]... FILE.xml"
-msgstr "musicxml2ly BESTAND.xml"
+msgstr "musicxml2ly [OPTIE]... BESTAND.xml"
 
-#: musicxml2ly.py:2598
+#: musicxml2ly.py:2556
 msgid ""
 "Convert MusicXML from FILE.xml to LilyPond input.\n"
 "If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
 
-#: musicxml2ly.py:2608
+#: musicxml2ly.py:2566
 msgid ""
 "Copyright (c) 2005--2011 by\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
@@ -1168,87 +1333,91 @@ msgid ""
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: musicxml2ly.py:2633
-#, fuzzy
+#: musicxml2ly.py:2591
 msgid "use lxml.etree; uses less memory and cpu time"
-msgstr "Gebruik lxml.etree; gebruikt minder geheugen en processortijd."
+msgstr "gebruik lxml.etree; gebruikt minder geheugen en processortijd"
 
-#: musicxml2ly.py:2639
+#: musicxml2ly.py:2597
 msgid "input file is a zip-compressed MusicXML file"
 msgstr ""
 
-#: musicxml2ly.py:2645
+#: musicxml2ly.py:2603
 msgid "convert pitches in relative mode (default)"
 msgstr ""
 
-#: musicxml2ly.py:2650
+#: musicxml2ly.py:2608
 msgid "convert pitches in absolute mode"
 msgstr ""
 
-#: musicxml2ly.py:2653
+#: musicxml2ly.py:2611
 msgid "LANG"
 msgstr ""
 
-#: musicxml2ly.py:2655
-msgid ""
-"use a different language file 'LANG.ly' and corresponding pitch names, e.g. "
-"'deutsch' for deutsch.ly"
+#: musicxml2ly.py:2613
+msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
 msgstr ""
 
-#: musicxml2ly.py:2661
+#: musicxml2ly.py:2619
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
 msgstr ""
 
-#: musicxml2ly.py:2667
+#: musicxml2ly.py:2625
 msgid "do not convert exact vertical positions of rests"
 msgstr ""
 
-#: musicxml2ly.py:2673
+#: musicxml2ly.py:2631
 msgid "do not convert the exact page layout and breaks"
 msgstr ""
 
-#: musicxml2ly.py:2679
+#: musicxml2ly.py:2637
 msgid ""
 "do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: musicxml2ly.py:2687
-#, fuzzy
+#: musicxml2ly.py:2645
 msgid "set output filename to FILE, stdout if -"
-msgstr "zet uitvoerbestandnaam op BESTAND"
+msgstr "zet uitvoerbestandnaam op BESTAND, stdout indien -"
 
-#: musicxml2ly.py:2770
-#, fuzzy, python-format
+#: musicxml2ly.py:2728
+#, python-format
 msgid "unknown part in part-list: %s"
-msgstr "onbekende translator: `%s'"
+msgstr "onbekend deel in deel-lijst: %s"
 
-#: musicxml2ly.py:2832
+#: musicxml2ly.py:2790
 msgid "Input is compressed, extracting raw MusicXML data from stdin"
 msgstr ""
 
-#: musicxml2ly.py:2835
+#: musicxml2ly.py:2793
 #, python-format
 msgid "Input file %s is compressed, extracting raw MusicXML data"
 msgstr ""
 
-#: musicxml2ly.py:2865
+#: musicxml2ly.py:2823
 msgid "Reading MusicXML from Standard input ..."
 msgstr ""
 
-#: musicxml2ly.py:2867
-#, fuzzy, python-format
+#: musicxml2ly.py:2825
+#, python-format
 msgid "Reading MusicXML from %s ..."
-msgstr "Lezen %s..."
+msgstr "MusicXML lezen van %s ..."
 
-#: musicxml2ly.py:2900
-#, fuzzy, python-format
+#: musicxml2ly.py:2858
+#, python-format
 msgid "Output to `%s'"
-msgstr "%s uitvoer naar `%s'..."
+msgstr "Uitvoer naar `%s'"
 
-#: musicxml2ly.py:2967
-#, fuzzy, python-format
+#: musicxml2ly.py:2925
+#, python-format
 msgid "Unable to find input file %s"
-msgstr "kan init bestand niet vinden: `%s'"
+msgstr "Kan invoer-bestand niet vinden %s"
+
+#: website_post.py:123
+msgid "English"
+msgstr "Engels"
+
+#: website_post.py:126
+msgid "Other languages"
+msgstr "Andere talen"
 
 #: getopt-long.cc:153
 #, c-format
@@ -1270,12 +1439,17 @@ msgstr "onbekende optie: `%s'"
 msgid "invalid argument `%s' to option `%s'"
 msgstr "onjuist argument: `%s' voor optie `%s'"
 
-#: warn.cc:79 grob.cc:594 input.cc:97
+#: warn.cc:59
+#, c-format
+msgid "success: %s"
+msgstr "succes: %s"
+
+#: warn.cc:86 grob.cc:617 input.cc:97
 #, c-format
 msgid "programming error: %s"
 msgstr "programmeerfout: %s"
 
-#: warn.cc:80 input.cc:98
+#: warn.cc:87 input.cc:98
 msgid "continuing, cross fingers"
 msgstr "ga verder; duim maar"
 
@@ -1298,7 +1472,7 @@ msgstr "Kan vorm naam niet vinden voor verandering %s"
 msgid "natural alteration glyph not found"
 msgstr "herstellingsteken vorm niet gevonden"
 
-#: all-font-metrics.cc:158
+#: all-font-metrics.cc:156
 #, c-format
 msgid "cannot find font: `%s'"
 msgstr "kan font niet vinden: `%s'"
@@ -1312,19 +1486,19 @@ msgstr "\\applycontext argument is geen procedure"
 msgid "cannot change, already in translator: %s"
 msgstr "kan niet wisselen, al in vertaler: %s"
 
-#: axis-group-engraver.cc:89
+#: axis-group-engraver.cc:94
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: verticale groep heeft al een ouder"
 
-#: axis-group-engraver.cc:90
+#: axis-group-engraver.cc:95
 msgid "are there two Axis_group_engravers?"
 msgstr "zijn er twee Axis_group_engravers?"
 
-#: axis-group-engraver.cc:91
+#: axis-group-engraver.cc:96
 msgid "removing this vertical group"
 msgstr "verwijder deze verticale groep"
 
-#: axis-group-interface.cc:578
+#: axis-group-interface.cc:631
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 "een buiten-notenbalk object moet een richting hebben, gebruik "
@@ -1343,7 +1517,7 @@ msgstr "heb al een waardestreep"
 msgid "unterminated beam"
 msgstr "onbeĆ«indigde waardestreep"
 
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:144
+#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150
 msgid "stem must have Rhythmic structure"
 msgstr "stok moet Ritmische structuur hebben"
 
@@ -1355,15 +1529,12 @@ msgstr "stok past niet in waardestreep"
 msgid "beam was started here"
 msgstr "waardestreep werd hier gestart"
 
-#: beam-quanting.cc:314
-msgid "no feasible beam position"
-msgstr "geen werkbare waardestreeppositie gevonden"
-
-#: beam.cc:171
+#: beam.cc:180
 msgid "removing beam with no stems"
 msgstr "verwijderen van waardestreep zonder stokken"
 
-#: beam.cc:1116
+#. We are completely screwed.
+#: beam.cc:1274
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 "geen werkbare initiĆ«le configuratie gevonden: kan wellicht geen goede "
@@ -1399,19 +1570,14 @@ msgstr "niet wisselen naar zelfde type context: %s"
 msgid "none of these in my family"
 msgstr "geen van deze in mijn gezin"
 
-#: chord-tremolo-engraver.cc:91
+#: chord-tremolo-engraver.cc:88
 msgid "No tremolo to end"
 msgstr "Geen tremolo om te beĆ«indigen"
 
-#: chord-tremolo-engraver.cc:112
+#: chord-tremolo-engraver.cc:109
 msgid "unterminated chord tremolo"
 msgstr "onbeĆ«indigd akkoordtremolo"
 
-#: chord-tremolo-iterator.cc:46
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
-
 #: clef.cc:65
 #, c-format
 msgid "clef `%s' not found"
@@ -1436,11 +1602,6 @@ msgstr "Coherent_ligature_engraver: zet `spacing-increment=0.01': ptr=%ul"
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet"
 
-#: context-def.cc:140
-#, c-format
-msgid "program has no such type: `%s'"
-msgstr "programma heeft geen dergelijk type: `%s'"
-
 #: context-property.cc:42
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "heb symbool-argumenten nodig voor \\override en \\revert"
@@ -1504,16 +1665,28 @@ msgstr "cresc is hier gestart"
 msgid "unterminated (de)crescendo"
 msgstr "onbeĆ«indigd (de)crescendo"
 
-#: extender-engraver.cc:177 extender-engraver.cc:186
+#: episema-engraver.cc:75
+msgid "already have an episema"
+msgstr "heb al een episema"
+
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
+msgstr "kan begin van episema niet vinden"
+
+#: episema-engraver.cc:137
+msgid "unterminated episema"
+msgstr "onbeĆ«indigde episema"
+
+#: extender-engraver.cc:170 extender-engraver.cc:179
 msgid "unterminated extender"
 msgstr "onbeĆ«indigde extender"
 
-#: font-config-scheme.cc:152 font-config.cc:69
+#: font-config-scheme.cc:152 font-config.cc:55
 #, c-format
 msgid "failed adding font directory: %s"
 msgstr "toevoegen van font map-gefaald: %s"
 
-#: font-config-scheme.cc:154 font-config.cc:71
+#: font-config-scheme.cc:154 font-config.cc:57
 #, c-format
 msgid "adding font directory: %s"
 msgstr "toevoegen van font-map: %s"
@@ -1532,24 +1705,19 @@ msgstr "toevoegen van font-bestand: %s"
 msgid "Initializing FontConfig..."
 msgstr "Initialiseren van FontConfig..."
 
-#: font-config.cc:56
-#, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..."
+#: font-config.cc:61
+msgid "Building font database..."
+msgstr "Bouwen van font-database..."
 
-#: font-config.cc:75
-msgid "Building font database."
-msgstr ""
-
-#: general-scheme.cc:240
+#: general-scheme.cc:306
 msgid "infinity or NaN encountered while converting Real number"
 msgstr "oneindig of NaN tegengekomen tijdens converteren van ReĆ«el getal"
 
-#: general-scheme.cc:241
+#: general-scheme.cc:307
 msgid "setting to zero"
 msgstr "zet op nul"
 
-#: general-scheme.cc:476 output-ps.scm:47
+#: general-scheme.cc:543
 msgid "Found infinity or nan in output. Substituting 0.0"
 msgstr "Oneindig of nan gevonden in uitvoer.  Vervangen door 0.0"
 
@@ -1609,10 +1777,10 @@ msgstr "%d: %s"
 #, c-format
 msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
 msgstr ""
-"circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s (%"
-"s)"
+"circulaire afhankelijkheid: calculation-in-progress tegengekomen voor #'%s "
+"(%s)"
 
-#: grob.cc:273
+#: grob.cc:286
 msgid "Infinity or NaN encountered"
 msgstr "Oneindig of NaN tegengekomen"
 
@@ -1628,11 +1796,11 @@ msgstr "zoveel haken heb ik niet"
 msgid "conflicting note group events"
 msgstr "Tegenstrijdige nootgroeperingsgebeurtenissen"
 
-#: hyphen-engraver.cc:108
+#: hyphen-engraver.cc:104
 msgid "removing unterminated hyphen"
 msgstr "verwijderen van onafgesloten streepje"
 
-#: hyphen-engraver.cc:122
+#: hyphen-engraver.cc:118
 msgid "unterminated hyphen; removing"
 msgstr "verwijderen van onafgesloten streepje"
 
@@ -1659,11 +1827,11 @@ msgstr "Geen vorm gevonden voor verandering: %s"
 msgid "alteration not found"
 msgstr "verandering niet gevonden"
 
-#: ligature-bracket-engraver.cc:73 ligature-engraver.cc:104
+#: ligature-bracket-engraver.cc:72 ligature-engraver.cc:104
 msgid "cannot find start of ligature"
 msgstr "kan begin van ligatuur niet vinden"
 
-#: ligature-bracket-engraver.cc:86 ligature-engraver.cc:131
+#: ligature-bracket-engraver.cc:85 ligature-engraver.cc:131
 msgid "already have a ligature"
 msgstr "heb al een ligatuur"
 
@@ -1675,15 +1843,15 @@ msgstr "geen rechterkant"
 msgid "no left bound"
 msgstr "geen linkerkant"
 
-#: ligature-engraver.cc:184
+#: ligature-engraver.cc:185
 msgid "unterminated ligature"
 msgstr "onbeĆ«indigde ligatuur"
 
-#: ligature-engraver.cc:213
+#: ligature-engraver.cc:214
 msgid "ignoring rest: ligature may not contain rest"
 msgstr "negeer rust: ligatuur mag geen rust bevatten"
 
-#: ligature-engraver.cc:214
+#: ligature-engraver.cc:215
 msgid "ligature was started here"
 msgstr "ligatuur werd hier gestart"
 
@@ -1692,34 +1860,34 @@ msgstr "ligatuur werd hier gestart"
 msgid "(load path: `%s')"
 msgstr "(zoekpad: `%s')"
 
-#: lily-guile.cc:439
+#: lily-guile.cc:437
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "kan geen type-controle vinden voor property `%s' (%s)"
 
-#: lily-guile.cc:442
+#: lily-guile.cc:440
 msgid "perhaps a typing error?"
 msgstr "misschien een typefout?"
 
-#: lily-guile.cc:449
+#: lily-guile.cc:447
 msgid "doing assignment anyway"
 msgstr "voer toewijzing toch door"
 
-#: lily-guile.cc:461
+#: lily-guile.cc:459
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "type controle gefaald voor `%s'; waarde `%s' moet type hebben: `%s'"
 
-#: lily-lexer.cc:265
+#: lily-lexer.cc:264
 msgid "include files are not allowed in safe mode"
 msgstr "invoegbestanden zijn niet toegestaan in veilige modus"
 
-#: lily-lexer.cc:284
+#: lily-lexer.cc:291
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "identifier naam is een sleutelwoord: `%s'"
 
-#: lily-lexer.cc:299
+#: lily-lexer.cc:312
 #, c-format
 msgid "error at EOF: %s"
 msgstr "fout bij EOF: %s"
@@ -1739,6 +1907,12 @@ msgstr "kan init bestand niet vinden: `%s'"
 msgid "Processing `%s'"
 msgstr "Verwerken van `%s'"
 
+#: lily-parser-scheme.cc:204
+msgid ""
+"ly:parser-parse-string is only valid with a new parser.  Use ly:parser-"
+"include-string instead."
+msgstr ""
+
 #: lily-parser.cc:106
 msgid "Parsing..."
 msgstr "Ontleden..."
@@ -1747,12 +1921,12 @@ msgstr "Ontleden..."
 msgid "braces do not match"
 msgstr "haakjes paren niet"
 
-#: lyric-combine-music-iterator.cc:338
+#: lyric-combine-music-iterator.cc:337
 #, c-format
 msgid "cannot find Voice `%s'"
 msgstr "kan Voice niet vinden: `%s'"
 
-#: lyric-engraver.cc:174
+#: lyric-engraver.cc:176
 msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
 msgstr ""
 "Liedtekst lettergreep heeft geen noot.  Gebruik \\lyricsto of "
@@ -1884,7 +2058,7 @@ msgstr "schrijf uitvoer naar BESTAND (extensie wordt toegevoegd)"
 msgid "relocate using directory of lilypond program"
 msgstr "verhuis aan de hand van de map van het lilypond programma"
 
-#. Do not update the copyright years here, run grand-replace.sh.
+#. Do not update the copyright years here, run `make grand-replace'
 #: main.cc:238
 #, c-format
 msgid ""
@@ -1988,19 +2162,19 @@ msgstr "kan toonhoogte van primitieve ligatuur niet bepalen -> overslaan"
 msgid "single note ligature - skipping"
 msgstr "enkelnootse ligatuur - overslaan"
 
-#: mensural-ligature-engraver.cc:149
+#: mensural-ligature-engraver.cc:148
 msgid "prime interval within ligature -> skipping"
 msgstr "prieminterval binnen ligatuur -> overslaan"
 
-#: mensural-ligature-engraver.cc:161
+#: mensural-ligature-engraver.cc:159
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
 msgstr "mensurale ligatuur: lengte geen van Mx, L, S -> overslaan"
 
-#: mensural-ligature-engraver.cc:209
+#: mensural-ligature-engraver.cc:202
 msgid "semibrevis must be followed by another one -> skipping"
 msgstr "semibrevis moet worden gevolgd door een andere -> overslaan"
 
-#: mensural-ligature-engraver.cc:220
+#: 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"
@@ -2008,7 +2182,7 @@ msgstr ""
 "semibrevi kunnen alleen aan het begin van een ligatuur voorkomen,\n"
 "en het mogen er uitsluitend een of twee zijn"
 
-#: mensural-ligature-engraver.cc:247
+#: mensural-ligature-engraver.cc:232
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
@@ -2020,15 +2194,15 @@ msgstr ""
 "moet de voorlaatste noot een andere zijn,\n"
 "of de ligatuur moet LB of SSB zijn"
 
-#: mensural-ligature-engraver.cc:367
+#: mensural-ligature-engraver.cc:386
 msgid "unexpected case fall-through"
 msgstr "onverwachte zaakdoorval"
 
-#: mensural-ligature.cc:152
+#: mensural-ligature.cc:171
 msgid "Mensural_ligature: unexpected case fall-through"
 msgstr "Mensural_ligature: onverwachte zaakdoorval"
 
-#: mensural-ligature.cc:203
+#: mensural-ligature.cc:233
 msgid "Mensural_ligature: (join_right == 0)"
 msgstr "Mensural_ligature: (join_right) == 0)"
 
@@ -2047,11 +2221,11 @@ msgstr "kan bestand niet openen om te schrijven: %s: %s"
 msgid "cannot write to file: `%s'"
 msgstr "kan niet naar bestand schrijven: `%s'"
 
-#: minimal-page-breaking.cc:46 paper-score.cc:116
+#: minimal-page-breaking.cc:40 paper-score.cc:122
 msgid "Calculating line breaks..."
 msgstr "Berekenen van regelafbreuken..."
 
-#: minimal-page-breaking.cc:50
+#: minimal-page-breaking.cc:44
 msgid "Calculating page breaks..."
 msgstr "Berekenen van pagina-afbreuken..."
 
@@ -2064,37 +2238,42 @@ msgstr "Zenden van niet-gebeurtenis naar context"
 msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "octaafcontrole gefaald; verwachtte \"%s\", vond: \"%s\""
 
-#: music.cc:214
+#: music.cc:219
+msgid "(normalized pitch)"
+msgstr ""
+
+#: music.cc:223
 #, c-format
-msgid "transposition by %s makes alteration larger than double"
-msgstr "transponering met %s maakt voorteken groter dan dubbel"
+msgid "Transposing %s by %s makes alteration larger than double"
+msgstr "Transponeren van %s met %s maakt voorteken groter dan dubbel"
 
 #: new-dynamic-engraver.cc:142
 #, c-format
 msgid ""
 "unknown crescendo style: %s\n"
 "defaulting to hairpin."
-msgstr "onbekende crescendo stijl: %s\n"
+msgstr ""
+"onbekende crescendo stijl: %s\n"
 "standaard haarspeld wordt gebruikt"
 
-#: new-dynamic-engraver.cc:209
+#: new-dynamic-engraver.cc:200
 #, c-format
 msgid "unterminated %s"
 msgstr "onbeĆ«indigd %s"
 
-#: new-fingering-engraver.cc:107
+#: new-fingering-engraver.cc:106
 msgid "cannot add text scripts to individual note heads"
 msgstr "kan tekstscripts niet toevoegen aan individuele notenbolletjes"
 
-#: new-fingering-engraver.cc:248
+#: new-fingering-engraver.cc:250
 msgid "no placement found for fingerings"
 msgstr "geen plaatsing gevonden voor vingerzetting"
 
-#: new-fingering-engraver.cc:249
+#: new-fingering-engraver.cc:251
 msgid "placing below"
 msgstr "plaats onder"
 
-#: note-collision.cc:495
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
 msgstr "negeren van te veel botsende nootkolommen."
 
@@ -2102,12 +2281,12 @@ msgstr "negeren van te veel botsende nootkolommen."
 msgid "cannot have note heads and rests together on a stem"
 msgstr "kan notenbolletjes en rusten niet samen op een stok zetten"
 
-#: note-head.cc:74
+#: note-head.cc:76
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr "geen van notenbolletjes `%s' of `%s' gevonden"
 
-#: note-heads-engraver.cc:77
+#: note-heads-engraver.cc:76
 msgid "NoteEvent without pitch"
 msgstr "NootGebeurtenis zonder toonhoogte"
 
@@ -2123,7 +2302,7 @@ msgstr "kan fonttabel niet laden: %s"
 
 #: open-type-font.cc:53
 #, c-format
-msgid "Free type error: %s"
+msgid "FreeType error: %s"
 msgstr "FreeType fout: %s"
 
 #: open-type-font.cc:111
@@ -2136,39 +2315,64 @@ msgstr "niet-ondersteund font formaat: %s"
 msgid "error reading font file %s: %s"
 msgstr "fout bij lezen van font bestand %s: %s"
 
-#: open-type-font.cc:187
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "FT_Get_Glyph_Name () Freetype fout: %s"
 
-#: open-type-font.cc:312 pango-font.cc:189
+#: open-type-font.cc:250
+msgid "Invalid index for character"
+msgstr "Ongeldige index voor teken"
+
+#: open-type-font.cc:319 pango-font.cc:187
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "FT_Get_Glyph_Name () fout: %s"
 
-#: optimal-page-breaking.cc:90
+#. find out the ideal number of pages
+#: optimal-page-breaking.cc:62
+msgid "Finding the ideal number of pages..."
+msgstr "Zoeken naar het ideale aantal pagina's..."
+
+#: optimal-page-breaking.cc:85
+msgid ""
+"could not satisfy systems-per-page and page-count at the same time, ignoring "
+"systems-per-page"
+msgstr ""
+
+#: optimal-page-breaking.cc:105
+msgid "Fitting music on 1 page..."
+msgstr "Muziek passend maken op 1 pagina..."
+
+#: optimal-page-breaking.cc:107
 #, c-format
-msgid "[%d: %d pages]"
-msgstr "[%d: %d pagina's]"
+msgid "Fitting music on %d pages..."
+msgstr "Muziek passend maken op %d pagina's..."
 
-#: optimal-page-breaking.cc:92
+#: optimal-page-breaking.cc:109
 #, c-format
-msgid "[%d: %d or %d pages]"
-msgstr "[%d: %d of %d pagina's]"
+msgid "Fitting music on %d or %d pages..."
+msgstr "Muziek passend maken op %d of %d pagina's..."
 
-#: optimal-page-breaking.cc:186
+#: optimal-page-breaking.cc:119 optimal-page-breaking.cc:173
 #, c-format
-msgid "Solving %d page-breaking chunks..."
-msgstr "Berekenen van %d pagina-afbreek brokken..."
+msgid "trying %d systems"
+msgstr "proberen van %d systemen"
 
-#: optimal-page-breaking.cc:193 page-turn-page-breaking.cc:247
-#: paper-score.cc:157
+#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201
+#, c-format
+msgid "best score for this sys-count: %f"
+msgstr ""
+
+#: optimal-page-breaking.cc:208 page-turn-page-breaking.cc:248
+#: paper-score.cc:163
 msgid "Drawing systems..."
 msgstr "Tekenen van systemen..."
 
 #: output-def.cc:235
 msgid "margins do not fit with line-width, setting default values"
-msgstr "kantlijnen passen niet met regellengte, standaardwaarden worden ingesteld"
+msgstr ""
+"kantlijnen passen niet met regellengte, standaardwaarden worden ingesteld"
 
 #: output-def.cc:242
 msgid ""
@@ -2176,33 +2380,45 @@ msgid ""
 "values"
 msgstr ""
 
-#: page-breaking.cc:180
+#: page-breaking.cc:248
 msgid ""
 "ignoring min-systems-per-page and max-systems-per-page because systems-per-"
 "page was set"
 msgstr ""
 
-#: page-breaking.cc:185
+#: page-breaking.cc:253
 msgid ""
 "min-systems-per-page is larger than max-systems-per-page, ignoring both "
 "values"
 msgstr ""
 
-#: page-layout-problem.cc:308
-#, fuzzy
-msgid "couldn't fit music on page"
-msgstr "Muziek passend maken op 1 pagina..."
+#: page-layout-problem.cc:322
+msgid ""
+"couldn't fit music on page: ragged-spacing was requested, but page was "
+"compressed"
+msgstr ""
+"kan muziek niet op pagina passen: ragged-spatiĆ«ring was gevraagd,\n"
+"maar pagina was gecomprimeerd"
+
+#: page-layout-problem.cc:325
+#, c-format
+msgid "couldn't fit music on page: overflow is %f"
+msgstr "kan muziek niet passend maken op 1 pagina: overflow is %f"
+
+#: page-layout-problem.cc:327
+msgid "compressing music to fit"
+msgstr ""
 
-#: page-layout-problem.cc:676
+#: page-layout-problem.cc:765
 msgid "staff-affinities should only decrease"
 msgstr ""
 
-#: page-turn-page-breaking.cc:167
+#: page-turn-page-breaking.cc:168
 #, c-format
 msgid "page-turn-page-breaking: breaking from %d to %d"
 msgstr "page-turn-page-breaking: afbreken van %d naar %d"
 
-#: page-turn-page-breaking.cc:216
+#: 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."
@@ -2210,37 +2426,37 @@ msgstr ""
 "kan de eerste paginaomslag niet op eerste pagina gepast krijgen.  Overweeg\n"
 "first-page-number op een even getal te zetten."
 
-#: page-turn-page-breaking.cc:229
+#: page-turn-page-breaking.cc:230
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr "Berekenen van pagina en regelbreuken (%d mogelijke pagina breuken)..."
 
-#: page-turn-page-breaking.cc:296
+#: page-turn-page-breaking.cc:300
 #, c-format
 msgid "break starting at page %d"
 msgstr "breuk gestart op pagina %d"
 
-#: page-turn-page-breaking.cc:297
+#: page-turn-page-breaking.cc:301
 #, c-format
 msgid "\tdemerits: %f"
 msgstr "\tstrafpunten: %f"
 
-#: page-turn-page-breaking.cc:298
+#: page-turn-page-breaking.cc:302
 #, c-format
 msgid "\tsystem count: %d"
 msgstr "\taantal systemen: %d"
 
-#: page-turn-page-breaking.cc:299
+#: page-turn-page-breaking.cc:303
 #, c-format
 msgid "\tpage count: %d"
 msgstr "\taantal bladzijden: %d"
 
-#: page-turn-page-breaking.cc:300
+#: page-turn-page-breaking.cc:304
 #, c-format
 msgid "\tprevious break: %d"
 msgstr "\tvorige breuk: %d"
 
-#: pango-font.cc:206
+#: pango-font.cc:204
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2249,12 +2465,12 @@ msgstr ""
 "Vorm heeft geen naam, terwijl het font vormnamen ondersteunt<\n"
 "Overslaan van vorm U+%0X, bestand %s"
 
-#: pango-font.cc:243
+#: pango-font.cc:241
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "geen PostScript fontnaam voor font: `%s'"
 
-#: pango-font.cc:292
+#: pango-font.cc:290
 msgid "FreeType face has no PostScript font name"
 msgstr "FreeType gezicht heeft geen PostScript fontnaam"
 
@@ -2268,7 +2484,7 @@ msgstr ""
 msgid "program option -dpreview not supported by backend `%s'"
 msgstr ""
 
-#: paper-column-engraver.cc:233
+#: paper-column-engraver.cc:245
 msgid ""
 "forced break was overridden by some other event, should you be using bar "
 "checks?"
@@ -2281,12 +2497,12 @@ msgstr ""
 msgid "Layout output to `%s'..."
 msgstr "Opmaakuitvoer naar `%s'..."
 
-#: paper-score.cc:129
+#: paper-score.cc:135
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr "Aantal elementen %d (spanners %d)"
 
-#: paper-score.cc:133
+#: paper-score.cc:139
 msgid "Preprocessing graphical objects..."
 msgstr "Voorbewerken van grafische objecten..."
 
@@ -2294,7 +2510,11 @@ msgstr "Voorbewerken van grafische objecten..."
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GUILE signaleerde een fout voor de expressie beginnend alhier"
 
-#: percent-repeat-engraver.cc:213
+#: partial-iterator.cc:45
+msgid "trying to use \\partial after the start of a piece"
+msgstr ""
+
+#: percent-repeat-engraver.cc:148
 msgid "unterminated percent repeat"
 msgstr "onbeĆ«indigde procentherhaling"
 
@@ -2335,7 +2555,7 @@ msgstr "kan start van piano pedaal niet vinden: `%s'"
 msgid "cannot find start of piano pedal bracket: `%s'"
 msgstr "kan start van piano pedaal haak niet vinden: `%s'"
 
-#: program-option-scheme.cc:231
+#: program-option-scheme.cc:237
 #, c-format
 msgid "no such internal option: %s"
 msgstr "onbekende interne optie: %s"
@@ -2394,7 +2614,7 @@ msgstr "Verhuizing: is absoluut: argv0=%s"
 msgid "Relocation: from cwd: argv0=%s"
 msgstr "Verhuizing: van cwd: argv0=%s"
 
-#: relocate.cc:205
+#: relocate.cc:213
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -2403,16 +2623,21 @@ msgstr ""
 "Verhuizing: van PATH=%s\n"
 "argv0=%s"
 
-#: relocate.cc:239
+#: relocate.cc:240
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX is verouderd, gebruik LILYPOND_DATADIR"
 
-#: relocate.cc:366
+#: relocate.cc:367
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Verhuisbestand: %s"
 
-#: relocate.cc:402
+#: relocate.cc:373 source-file.cc:65
+#, c-format
+msgid "cannot open file: `%s'"
+msgstr "kan bestand niet openen: `%s'"
+
+#: relocate.cc:403
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "Onbekend verhuizingscommando %s"
@@ -2421,11 +2646,11 @@ msgstr "Onbekend verhuizingscommando %s"
 msgid "rhythmic head is not part of a rhythmic column"
 msgstr ""
 
-#: rest-collision.cc:157
+#: rest-collision.cc:146
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "kan rust botsing niet oplossen: richting van de rust is niet gezet"
 
-#: rest-collision.cc:171 rest-collision.cc:216
+#: rest-collision.cc:160 rest-collision.cc:205
 msgid "too many colliding rests"
 msgstr "te veel botsende rusten"
 
@@ -2466,11 +2691,11 @@ msgstr "fouten gevonden, negeer muziekexpressie"
 
 #. FIXME:
 #: script-engraver.cc:113
-msgid "do not know how to interpret articulation: "
+msgid "do not know how to interpret articulation:"
 msgstr "weet niet hoe articulatie te vertolken: "
 
 #: script-engraver.cc:114
-msgid "scheme encoding: "
+msgid " scheme encoding: "
 msgstr "scheme codering: "
 
 #: slur-engraver.cc:93
@@ -2486,7 +2711,7 @@ msgstr "onbeĆ«indigde bindingsboog"
 msgid "cannot end slur"
 msgstr "kan legatoboog niet beĆ«indigen"
 
-#: slur.cc:366
+#: slur.cc:362
 #, c-format
 msgid "Ignoring grob for slur: %s. avoid-slur not set?"
 msgstr "Negeren van grob voor boogje: %s.  avoid-slur niet gezet?"
@@ -2501,10 +2726,6 @@ msgstr "verwacht %d karakters te lezen, kreeg %d"
 msgid "No spring between column %d and next one"
 msgstr "Geen veer tussen kolom %d en de volgende"
 
-#: staff-symbol-engraver.cc:73
-msgid "staff-span event has no direction"
-msgstr "notenbalk-span gebeurtenis heeft geen richting"
-
 #: stem-engraver.cc:103
 msgid "tremolo duration is too long"
 msgstr "tremololengte is te lang"
@@ -2523,22 +2744,22 @@ msgstr "misschien moet invoer polyfonische stemmen specificeren"
 msgid "weird stem size, check for narrow beams"
 msgstr "vreemde stoklengte; controleer op krappe waardestrepen"
 
-#: stem.cc:633
+#: stem.cc:657
 #, c-format
 msgid "flag `%s' not found"
 msgstr "vlag `%s' niet gevonden"
 
-#: stem.cc:649
+#: stem.cc:673
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "vlag streep `%s' niet gevonden"
 
 #: system.cc:197
-#, fuzzy, c-format
+#, c-format
 msgid "Element count %d"
-msgstr "Aantal elementen: %d."
+msgstr "Aantal elementen %d"
 
-#: system.cc:289
+#: system.cc:303
 #, c-format
 msgid "Grob count %d"
 msgstr "Aantal grobs %d"
@@ -2555,7 +2776,11 @@ msgstr "heb al een tekst spanner"
 msgid "unterminated text spanner"
 msgstr "onbeĆ«indigde tekst spanner"
 
-#: tie-engraver.cc:273
+#: tie-engraver.cc:116
+msgid "unterminated tie"
+msgstr "onbeĆ«indigde overbinding"
+
+#: tie-engraver.cc:312
 msgid "lonely tie"
 msgstr "eenzame overbinding"
 
@@ -2586,27 +2811,27 @@ msgstr "onbekende translator: `%s'"
 msgid "fatal error. Couldn't find type: %s"
 msgstr "fatale fout.  Kan type niet vinden: %s"
 
-#: translator-group.cc:157
+#: translator-group.cc:188
 #, c-format
 msgid "cannot find: `%s'"
 msgstr "kan niet vinden: `%s'"
 
-#: translator.cc:358
+#: translator.cc:359
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr "Twee gelijktijdige %s gebeurtenissen, verschroot deze"
 
-#: translator.cc:359
+#: translator.cc:360
 #, c-format
 msgid "Previous %s event here"
 msgstr "Vorige %s gebeurtenis hier"
 
-#: ttf.cc:479 ttf.cc:528
+#: ttf.cc:481 ttf.cc:530
 #, c-format
 msgid "font index %d too large for font `%s', using index 0"
 msgstr ""
 
-#: ttf.cc:511 ttf.cc:563
+#: ttf.cc:513 ttf.cc:565
 msgid "font index must be non-negative, using index 0"
 msgstr ""
 
@@ -2617,14 +2842,13 @@ msgstr "Geen tuplet om te beĆ«indigen"
 #: vaticana-ligature-engraver.cc:400
 #, c-format
 msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
+"ignored prefix(es) `%s' of this head according to restrictions of the "
 "selected ligature style"
 msgstr ""
-"negeren van voorvoegsel (es) `%s' van dit bolletje volgens restricties van "
-"de\n"
+"negeren van voorvoegsel(s) `%s' van dit bolletje volgens restricties van de\n"
 "geselecteerde ligatuurstijl"
 
-#: vaticana-ligature-engraver.cc:735
+#: vaticana-ligature-engraver.cc:736
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
@@ -2659,130 +2883,134 @@ msgstr "heb ook al een beĆ«indigde spanner"
 msgid "giving up"
 msgstr "geef op"
 
-#: parser.yy:824
+#: parser.yy:820
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "\\paper kan niet worden gebruikt in \\score, gebruik \\layout"
 
-#: parser.yy:848
+#: parser.yy:844
 msgid "need \\paper for paper block"
 msgstr "heb \\paper nodig voor paper blok"
 
-#: parser.yy:1325
+#: parser.yy:1363
+msgid "only \\consists takes non-string argument."
+msgstr "alleen \\consists neem een niet-string functieargument."
+
+#: parser.yy:1376
 msgid "Grob name should be alphanumeric"
 msgstr "Grob naam zou alfanumeriek moeten zijn"
 
-#: parser.yy:1637
+#: parser.yy:1685
 msgid "second argument must be pitch list"
 msgstr "tweede argument moet een toonhoogtelijst zijn"
 
-#: parser.yy:1664 parser.yy:1669 parser.yy:2141
+#: parser.yy:1716 parser.yy:1721 parser.yy:2194
 msgid "have to be in Lyric mode for lyrics"
 msgstr "moet in Lyric modus zijn voor liedteksten"
 
-#: parser.yy:1766
+#: parser.yy:1818
 msgid "expecting string as script definition"
 msgstr "verwacht string voor script definitie"
 
-#: parser.yy:1921 parser.yy:1971
+#: parser.yy:1973 parser.yy:2024
 #, c-format
 msgid "not a duration: %d"
 msgstr "geen duur: %d"
 
-#: parser.yy:2095
+#: parser.yy:2148
 msgid "have to be in Note mode for notes"
 msgstr "moet in Note modus zijn voor noten"
 
-#: parser.yy:2156
+#: parser.yy:2209
 msgid "have to be in Chord mode for chords"
 msgstr "moet in Chord modus zijn voor akkoorden"
 
-#: lexer.ll:189
+#: lexer.ll:190
 msgid "stray UTF-8 BOM encountered"
 msgstr "losse UTF-8 BOM tegengekomen"
 
-#: lexer.ll:193
+#: lexer.ll:194
 msgid "Skipping UTF-8 BOM"
 msgstr "Overslaan van UTF-8 BOM"
 
-#: lexer.ll:248
+#: lexer.ll:249
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Hernoem invoer naar: `%s'"
 
-#: lexer.ll:265
+#: lexer.ll:266
 msgid "quoted string expected after \\version"
 msgstr "tekst tussen aanhalingstekens verwacht na \\version"
 
-#: lexer.ll:269
+#: lexer.ll:270
 msgid "quoted string expected after \\sourcefilename"
 msgstr "tekst tussen aanhalingstekens verwacht na \\sourcefilename"
 
-#: lexer.ll:273
+#: lexer.ll:274
 msgid "integer expected after \\sourcefileline"
 msgstr "geheel getal verwacht na \\sourcefileline"
 
-#: lexer.ll:286
+#: lexer.ll:287
 msgid "EOF found inside a comment"
 msgstr "EOF gevonden in een commentaar"
 
-#: lexer.ll:301
+#: lexer.ll:302
 msgid "\\maininput not allowed outside init files"
 msgstr "\\maininput niet toegestaan buiten init bestanden"
 
-#: lexer.ll:325
+#: lexer.ll:326
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "verkeerde of ongedefiniĆ«erde identifier: `%s'"
 
 #. backup rule
-#: lexer.ll:334
+#: lexer.ll:335
 msgid "end quote missing"
 msgstr "aanhalingstekens sluiten ontbreekt"
 
-#: lexer.ll:479
+#: lexer.ll:485
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr "Accolade gevonden aan het eind van liedtekst.  Een spatie vergeten?"
 
-#: lexer.ll:594
+#: lexer.ll:595
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr "Accolade gevonden aan het eind van een opmaak.  Een spatie vergeten?"
 
-#: lexer.ll:698
+#: lexer.ll:699
 #, c-format
 msgid "invalid character: `%c'"
 msgstr "ongeldig teken: `%c'"
 
-#: lexer.ll:813 lexer.ll:814
+#: lexer.ll:814 lexer.ll:815
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "onbekende ontsnapte string: `\\%s'"
 
-#: lexer.ll:923 lexer.ll:924
+#: lexer.ll:924 lexer.ll:925
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "bestand te oud: %s (oudste ondersteund: %s)"
 
-#: lexer.ll:924 lexer.ll:925
+#: lexer.ll:925 lexer.ll:926
 msgid "consider updating the input with the convert-ly script"
 msgstr "overweeg het actualiseren van de invoer met het convert-ly script"
 
-#: lexer.ll:930 lexer.ll:931
+#: lexer.ll:931 lexer.ll:932
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "programma te oud: %s (bestand vereist: %s)"
 
-#: backend-library.scm:34 ps-to-png.scm:69
+#: backend-library.scm:29 ps-to-png.scm:68
 #, scheme-format
 msgid "Invoking `~a'..."
 msgstr "Inroepen van `~a'..."
 
-#: backend-library.scm:44
+#: backend-library.scm:34
 #, scheme-format
 msgid "`~a' failed (~a)"
 msgstr "`~a' gefaald (~a)"
 
 # lisp-format
-#: backend-library.scm:131
+#: backend-library.scm:94
 #, scheme-format
 msgid "Converting to `~a'..."
 msgstr "Converteren naar `~a'..."
@@ -2790,81 +3018,109 @@ msgstr "Converteren naar `~a'..."
 # lisp-format
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:141
+#: backend-library.scm:104
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Converteren naar ~a..."
 
-#: backend-library.scm:179
+#: backend-library.scm:142
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Schrijven van header veld `~a' naar `~a'..."
 
-#: backend-library.scm:209
+#: backend-library.scm:192
 #, scheme-format
 msgid "missing stencil expression `~S'"
 msgstr ""
 
+#: chord-entry.scm:49
+#, scheme-format
+msgid "Spurious garbage following chord: ~A"
+msgstr ""
+
 #: define-context-properties.scm:31 define-grob-properties.scm:21
 #: define-music-properties.scm:21
 #, scheme-format
 msgid "symbol ~S redefined"
 msgstr "symbool ~S hergedefiniĆ«erd"
 
-#: define-event-classes.scm:130
+#: define-event-classes.scm:79
+msgid "All classes must be the last in their matrilineal line."
+msgstr ""
+
+#: define-event-classes.scm:83
+msgid ""
+"All classes must have a well-defined pedigree in the existing class "
+"hierarchy."
+msgstr ""
+
+#: define-event-classes.scm:149
 #, scheme-format
 msgid "event class ~A seems to be unused"
 msgstr "gebeurtenisklasse ~A schijnt ongebruikt te zijn"
 
 #. should be programming-error
-#: define-event-classes.scm:136
+#: define-event-classes.scm:155
 #, scheme-format
 msgid "translator listens to nonexisting event class ~A"
 msgstr "vertaler luistert naar nietbestaande gebeurtenisklasse ~A"
 
-#: define-markup-commands.scm:677
+#: define-markup-commands.scm:803
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "geen systemen gevonden in \\score markup, heeft het een \\layout blok?"
 
-#: define-markup-commands.scm:2433
-#, fuzzy, scheme-format
+#: define-markup-commands.scm:2404
+#, scheme-format
 msgid "Cannot find glyph ~a"
-msgstr "kan ~a niet vinden in ~a"
+msgstr "Kan glyph ~a niet vinden"
 
-#: define-markup-commands.scm:2690
-#, fuzzy, scheme-format
+#: define-markup-commands.scm:2830
+#, scheme-format
 msgid "no brace found for point size ~S "
-msgstr "geen plaatsing gevonden voor vingerzetting"
+msgstr "geen accolade gevonden voor puntgrootte ~S"
 
-#: define-markup-commands.scm:2691
+#: define-markup-commands.scm:2831
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr ""
 
-#: define-markup-commands.scm:2844
+#: define-markup-commands.scm:2984
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "geen geldige duurtekst: ~a"
 
-#: define-music-types.scm:698
+#: define-music-types.scm:740
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "symbool verwacht: ~S"
 
-#: define-music-types.scm:701
+#: define-music-types.scm:743
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "kan muziekobject niet vinden: ~S"
 
-#: define-music-types.scm:720
+#: define-music-types.scm:762
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr "onbekend herhaaltype `~S'"
 
-#: define-music-types.scm:721
-#, fuzzy
+#: define-music-types.scm:763
 msgid "See define-music-types.scm for supported repeats"
-msgstr "Zie music-types.scm voor ondersteunde herhalingen"
+msgstr "Zie define-music-types.scm voor ondersteunde herhalingen"
+
+#: define-note-names.scm:962
+msgid "Select note names language."
+msgstr ""
+
+#: define-note-names.scm:969
+#, scheme-format
+msgid "Using `~a' note names..."
+msgstr ""
+
+#: define-note-names.scm:972
+#, scheme-format
+msgid "Could not find language `~a'.  Ignoring."
+msgstr ""
 
 #: document-backend.scm:132
 #, scheme-format
@@ -2896,43 +3152,37 @@ msgstr "Schrijven van ~S..."
 msgid "cannot find description for property ~S (~S)"
 msgstr "kan beschrijving voor eigenschap niet vinden ~S (~S)"
 
-#: flag-styles.scm:157
-#, fuzzy, scheme-format
+#: flag-styles.scm:148
+#, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
-msgstr "vlag streep `%s' niet gevonden"
+msgstr "vlag streep `~a' of `~a' niet gevonden"
 
 #: framework-eps.scm:108
 #, scheme-format
 msgid "Writing ~a..."
 msgstr "Schrijven van ~a..."
 
-#: framework-ps.scm:273
+#: framework-ps.scm:250
 #, scheme-format
 msgid "cannot embed ~S=~S"
 msgstr "kan niet inbedden ~S=~S"
 
-#: framework-ps.scm:314
+#: framework-ps.scm:293
 #, scheme-format
 msgid "cannot extract file matching ~a from ~a"
 msgstr "kan bestand dat past op ~a niet uit ~a extraheren"
 
-#: framework-ps.scm:332
+#: framework-ps.scm:311
 #, scheme-format
 msgid "do not know how to embed ~S=~S"
 msgstr "weet niet hoe ~S=~S in te bedden"
 
-#: framework-ps.scm:357
+#: framework-ps.scm:336
 #, scheme-format
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "weet niet hoe font in te bedden: ~s ~s ~s"
 
-#: framework-ps.scm:663
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
-msgstr "kan <stduit> niet converteren naar ~S"
-
-#: framework-ps.scm:684
-#, fuzzy
+#: framework-ps.scm:669
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -2951,10 +3201,10 @@ msgstr ""
 "Het PostScript backend ondersteund geen system-by-system uitvoer.\n"
 "Gebruik daarvoor het EPS backend\n"
 "\n"
-"  lilypond -eps BESTAND\n"
+"  lilypond -dbackend=eps BESTAND\n"
 "\n"
-"Als LilyPond fragment van een webpagina is gekopiĆ«erd, weet zeker\n"
-"dat alleen alles voorafgaand aan\n"
+"Als LilyPond fragment van een webpagina is gekopiĆ«erd, ga na dat\n"
+"alleen alles voorafgaand aan\n"
 "\n"
 "  %% ****************************************************************\n"
 "  %% Start cut-&-pastable-section\n"
@@ -2962,65 +3212,85 @@ msgstr ""
 "\n"
 "is verwijderd\n"
 
+#: framework-svg.scm:84
+#, scheme-format
+msgid "Updating font into: ~a"
+msgstr "actualiseren van font naar: ~a"
+
 #: graphviz.scm:64
 #, scheme-format
 msgid "Writing graph `~a'..."
 msgstr "Schrijven van graph `~a'..."
 
-#: layout-beam.scm:38
+#: layout-beam.scm:40
 #, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
 msgstr "Fout in waardestreep kwantisering.  Verwacht (~S,~S) gevonden ~S."
 
-#: layout-beam.scm:52
+#: layout-beam.scm:54
 #, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr "Fout in waardestreep kwantisering.  Verwacht ~S 0, gevonden ~S."
 
-#: lily-library.scm:623
+#: lily-library.scm:758
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
-"which will produce the closest match to @var{target-val} when\n"
+"which produces the closest match to @var{target-val} if\n"
 "applied to function @var{getter}."
 msgstr ""
 
-#: lily-library.scm:694
+#: lily-library.scm:832
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "onbekende eenheid: ~S"
 
-#: lily-library.scm:728 lily-library.scm:737
-#, fuzzy
+#: lily-library.scm:858 lily-library.scm:867
 msgid "warning:"
 msgstr "waarschuwing: "
 
-#: lily-library.scm:730
+#: lily-library.scm:860
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 "geen \\version uitdrukking gevonden, voeg~atoe voor toekomstige "
 "compatibiliteit"
 
-#: lily-library.scm:738
+#: lily-library.scm:868
 msgid "old relative compatibility not used"
 msgstr "oude relative compatibiliteit niet gebruikt"
 
-#: lily.scm:259
+#: lily.scm:225
+msgid "Using (ice-9 curried-definitions) module\n"
+msgstr ""
+
+#: lily.scm:230
+msgid "Guile 1.8\n"
+msgstr ""
+
+#: lily.scm:290
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "kan niet vinden: ~A"
 
-#: lily.scm:312
+#: lily.scm:350
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "verkeerd type voor argument ~a.  Verwacht ~a, gevonden ~s"
 
-#: lily.scm:650
+#: lily.scm:716
+msgid "Compilation successfully completed"
+msgstr "Samenstellen met succes voltooid"
+
+#: lily.scm:717
+msgid "Compilation completed with warnings or errors"
+msgstr ""
+
+#: lily.scm:779
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "taak ~a beĆ«indigd met met signaal: ~a"
 
-#: lily.scm:653
+#: lily.scm:782
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3029,146 +3299,179 @@ msgstr ""
 "logfile ~a (exit ~a):\n"
 "~a"
 
-#: lily.scm:674 lily.scm:755
+#: lily.scm:804 lily.scm:882
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "gefaalde bestanden: ~S"
 
 # lisp-format
-#: lily.scm:746
+#: lily.scm:873
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Omleiden van uitvoer naar ~a..."
 
-#: lily.scm:765
-#, fuzzy, scheme-format
+#: lily.scm:892
+#, scheme-format
 msgid "Invoking `~a'...\n"
-msgstr "Inroepen van `~a'..."
+msgstr "Inroepen van `~a'...\n"
 
 #: ly-syntax-constructors.scm:51
 msgid "Music head function must return Music object"
 msgstr "Muziek hoofd functie moet Muziek object teruggeven"
 
-#: ly-syntax-constructors.scm:171
+#: ly-syntax-constructors.scm:177
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr "Ongeldige eigenschap operatie ~a"
 
-#: markup.scm:232
+#: markup.scm:223
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
 msgstr "verkeerd aantal argumenten.  Verwacht: ~A, gevonden ~A: ~S"
 
-#: markup.scm:238
+#: markup.scm:229
 #, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
 msgstr "Ongeldig argument in positie ~A.  Verwacht: ~A, gevonden: ~S."
 
-#: markup.scm:301
+#: markup.scm:292
 #, scheme-format
 msgid "Not a markup command: ~A"
 msgstr ""
 
-#: music-functions.scm:253
+#: modal-transforms.scm:38
+msgid "'from' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:42 modal-transforms.scm:75
+msgid "'to' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:46
+msgid "pitch to be transposed not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:71
+msgid "'around' pitch not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:79
+msgid "pitch to be inverted not in scale; ignoring"
+msgstr ""
+
+#: modal-transforms.scm:95
+msgid "negative replication count; ignoring"
+msgstr ""
+
+#: music-functions.scm:268
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 "Meer alternatieven dan herhalingen.  Verschroten van overtollige "
 "alternatieven"
 
-#: music-functions.scm:271
-#, fuzzy, scheme-format
-msgid "invalid tremolo repeat count: ~a"
-msgstr "Ongeldige eigenschap operatie ~a"
-
-#: music-functions.scm:279
+#: music-functions.scm:297
 #, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden"
+msgid "invalid tremolo repeat count: ~a"
+msgstr "ongeldige tremolo herhaal teller: ~a"
 
-#: music-functions.scm:652
+#: music-functions.scm:618
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "muziek verwacht: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:700
+#: music-functions.scm:662
 #, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
 msgstr "Maat controle gefaald.  Verwacht bij ~a te zijn, maar ben bij ~a"
 
-#: music-functions.scm:879
+#: music-functions.scm:846
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "kan aangehaalde muziek niet vinden: `~S'"
 
-#: music-functions.scm:1021
+#: music-functions.scm:982
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1076
-#, fuzzy, scheme-format
+#: music-functions.scm:1037
+#, scheme-format
 msgid "Unknown octaveness type: ~S "
-msgstr "onbekend herhaaltype `~S'"
+msgstr "Onbekend octaviĆ«ertype: ~S"
 
-#: music-functions.scm:1077
+#: music-functions.scm:1038
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1412
+#: music-functions.scm:1378
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "onbekende toevallig teken stijl: ~S"
 
-#: output-svg.scm:40
+#: output-ps.scm:48
+msgid "Found infinity or nan in output.  Substituting 0.0"
+msgstr "Oneindig of nan gevonden in uitvoer.  Vervangen door 0.0"
+
+#: output-ps.scm:289 output-svg.scm:550
+#, scheme-format
+msgid "unknown line-cap-style: ~S"
+msgstr "onbekende line-cap-stijl: ~S"
+
+#: output-ps.scm:294 output-svg.scm:556
+#, scheme-format
+msgid "unknown line-join-style: ~S"
+msgstr "onbekende line-join-stijl: ~S"
+
+#: output-svg.scm:47
 #, scheme-format
 msgid "undefined: ~S"
 msgstr "ongedefiniĆ«erd: ~S"
 
-#: output-svg.scm:144
+#: output-svg.scm:151
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
 msgstr "kan Pango fontbeschrijving niet ontcijferen: ~a"
 
-#: output-svg.scm:224
+#: output-svg.scm:231
 msgid "Glyph must have a unicode value"
 msgstr ""
 
-#: output-svg.scm:276 output-svg.scm:286
-#, fuzzy, scheme-format
+#: output-svg.scm:283 output-svg.scm:293
+#, scheme-format
 msgid "cannot find SVG font ~S"
-msgstr "kan font niet vinden: `%s'"
+msgstr "kan SVG-font niet vinden: ~S"
 
 #: paper.scm:115
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: niet op topniveau"
 
-#: paper.scm:298
+#: paper.scm:296
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Dit is geen \\layout {} object, ~S"
 
-#: paper.scm:310
-#, fuzzy, scheme-format
+#: paper.scm:308
+#, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Onbekende papiergrootte: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:325
+#: paper.scm:323
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Moet #(set-paper-size .. ) gebruiken in \\paper { ... }"
 
-#: parser-clef.scm:140
+#: parser-clef.scm:141 parser-clef.scm:181
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "onbekend sleuteltype `~a'"
 
-#: parser-clef.scm:141
+#: parser-clef.scm:142 parser-clef.scm:182
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "ondersteunde sleutels: ~a"
 
-#: ps-to-png.scm:75
+#: ps-to-png.scm:74
 #, scheme-format
 msgid "~a exited with status: ~S"
 msgstr "~a sloot af met status: ~S"
@@ -3178,6 +3481,67 @@ msgstr "~a sloot af met status: ~S"
 msgid "assertion failed: ~S"
 msgstr "assertie gefaald: ~S"
 
+#: translation-functions.scm:341
+#, scheme-format
+msgid "Negative fret for pitch ~a on string ~a"
+msgstr ""
+
+#: translation-functions.scm:385
+#, scheme-format
+msgid "No open string for pitch ~a"
+msgstr ""
+
+#: translation-functions.scm:400
+#, scheme-format
+msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
+msgstr ""
+
+#: translation-functions.scm:401
+msgid "Ignoring string request."
+msgstr ""
+
+#: translation-functions.scm:414
+#, scheme-format
+msgid "No string for pitch ~a (given frets ~a)"
+msgstr ""
+
+#: translation-functions.scm:515
+#, scheme-format
+msgid ""
+"No label for fret ~a (on string ~a);\n"
+"only ~a fret labels provided"
+msgstr ""
+
+#~ msgid "no feasible beam position"
+#~ msgstr "geen werkbare waardestreeppositie gevonden"
+
+#~ msgid "expect 2 elements for chord tremolo, found %d"
+#~ msgstr "verwacht 2 elementen voor akkoordtremolo, %d gevonden"
+
+#~ msgid "program has no such type: `%s'"
+#~ msgstr "programma heeft geen dergelijk type: `%s'"
+
+#~ msgid "Rebuilding FontConfig cache %s, this may take a while..."
+#~ msgstr "Herbouwen van FontConfig cache %s, dit kan wel even duren..."
+
+#~ msgid "[%d: %d pages]"
+#~ msgstr "[%d: %d pagina's]"
+
+#~ msgid "[%d: %d or %d pages]"
+#~ msgstr "[%d: %d of %d pagina's]"
+
+#~ msgid "Solving %d page-breaking chunks..."
+#~ msgstr "Berekenen van %d pagina-afbreek brokken..."
+
+#~ msgid "staff-span event has no direction"
+#~ msgstr "notenbalk-span gebeurtenis heeft geen richting"
+
+#~ msgid "cannot convert <stdout> to ~S"
+#~ msgstr "kan <stduit> niet converteren naar ~S"
+
+#~ msgid "expecting 2 elements for chord tremolo, found ~a"
+#~ msgstr "verwacht 2 elementen voor akkoordtremolo, ~a gevonden"
+
 #~ msgid "Report bugs via"
 #~ msgstr ""
 #~ "Meld fouten in het programma via %;\n"
@@ -3200,9 +3564,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "DVIPS usage:"
 #~ msgstr "DVIPS gebruik:"
 
-#~ msgid "Writing fonts to %s..."
-#~ msgstr "Schrijven van fonts naar %s"
-
 #~ msgid ""
 #~ "This program is free software.  It is covered by the GNU General Public\n"
 #~ "License and you are welcome to change it and/or distribute copies of it\n"
@@ -3310,9 +3671,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "write Makefile dependencies for every input file"
 #~ msgstr "schrijf Makefile afhankelijkheden voor elk invoerbestand"
 
-#~ msgid "print even more output"
-#~ msgstr "toon nog meer uitvoer"
-
 #~ msgid "find pfa fonts used in FILE"
 #~ msgstr "zoek pfa fonts gebruikt in BESTAND"
 
@@ -3546,9 +3904,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "prepend DIR to dependencies"
 #~ msgstr "voeg DIR voor aan afhankelijkheden"
 
-#~ msgid "run in safe mode"
-#~ msgstr "draai in veilige modus"
-
 #~ msgid "This option is for developers only."
 #~ msgstr "Deze optie is uitsluitend bestemd voor ontwikkelaars."
 
@@ -3662,9 +4017,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "Identifier should have alphabetic characters only"
 #~ msgstr "Identifier mag uitsluitend alfabetische tekens hebben"
 
-#~ msgid "\\apply takes function argument"
-#~ msgstr "\\apply neemt een functieargument"
-
 #~ msgid "Can't find music"
 #~ msgstr "Kan geen muziek vinden"
 
@@ -3694,9 +4046,6 @@ msgstr "assertie gefaald: ~S"
 #~ "Meld fouten naar <a href=\\\"%(mail_address_url)s\\\">%(mail_address)s</"
 #~ "a>."
 
-#~ msgid "Other languages: %s."
-#~ msgstr "Andere talen: %s."
-
 #~ msgid "About <A HREF=\"%s\">automatic language selection</A>."
 #~ msgstr "Gebruik van <A HREF=\\\"%s\\\">automatische taalkeuze</A>.\n"
 
@@ -3706,9 +4055,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "development-branch"
 #~ msgstr "ontwikkel tak"
 
-#~ msgid "English"
-#~ msgstr "Engels"
-
 #~ msgid "French"
 #~ msgstr "Frans"
 
@@ -3718,12 +4064,6 @@ msgstr "assertie gefaald: ~S"
 #~ msgid "German"
 #~ msgstr "Duits"
 
-#~ msgid "Finding the ideal number of pages..."
-#~ msgstr "Zoeken naar het ideale aantal pagina's..."
-
-#~ msgid "Fitting music on %d or %d pages..."
-#~ msgstr "Muziek passend maken op %d of %d pagina's..."
-
 #~ msgid ""
 #~ "vertical alignment called before line-breaking.\n"
 #~ "Only do cross-staff spanners with PianoStaff."
index a1b1328c575b4be2af6afe92c07d09183b9b1870..b7c3ddf0d67d369acfec84b3db605a54860b4db9 100644 (file)
@@ -53,6 +53,7 @@ NOTIME = 'notime'
 OUTPUT = 'output'
 OUTPUTIMAGE = 'outputimage'
 PAPER = 'paper'
+PAPERSIZE = 'papersize'
 PREAMBLE = 'preamble'
 PRINTFILENAME = 'printfilename'
 QUOTE = 'quote'
@@ -112,6 +113,7 @@ snippet_options = {
 
     ##
     PAPER: {
+        PAPERSIZE: r'''#(set-paper-size "%(papersize)s")''',
         INDENT: r'''indent = %(indent)s''',
         LINE_WIDTH: r'''line-width = %(line-width)s''',
         QUOTE: r'''line-width = %(line-width)s - 2.0 * %(exampleindent)s''',
@@ -553,6 +555,12 @@ left-margin-default right-margin-default)"
         elif relative > 0:
             relative_quotes += "'" * relative
 
+        # put paper-size first, if it exists
+        for i,elem in enumerate(compose_dict[PAPER]):
+            if elem.startswith("#(set-paper-size"):
+                compose_dict[PAPER].insert(0, compose_dict[PAPER].pop(i))
+                break
+
         paper_string = '\n  '.join (compose_dict[PAPER]) % override
         layout_string = '\n  '.join (compose_dict[LAYOUT]) % override
         notes_string = '\n  '.join (compose_dict[NOTES]) % vars ()
index 286490e81beffd11d05169fb2858eeb4b6736e9d..7b2f1c1e87b852c681110a0ecb940c91fb5face3 100644 (file)
            (musical-direction-factor . 400)
            (ideal-slope-factor . 10)
           (collision-penalty . 500)
-          (collision-distance . 0.35)
+          (collision-padding . 0.35)
            (round-to-zero-slope . 0.02)))
        (direction . ,ly:beam::calc-direction)
 
        (skyline-vertical-padding . 0.6)
        ;;                    (stencil . ,ly:paper-column::print)
 
+       (keep-inside-line . #t)
        (line-break-permission . allow)
        (non-musical . #t)
        (page-break-permission . allow)
        (axes . (,X))
        (before-line-breaking . ,ly:paper-column::before-line-breaking)
        (horizontal-skylines . ,ly:separation-item::calc-skylines)
+       (keep-inside-line . #t)
        ;; (stencil . ,ly:paper-column::print)
        (X-extent . ,ly:axis-group-interface::width)
 
index 5dbc5d2f5254b61bd4e3bd4c42b4143807501812..3e7c69429c8be25c07fd736449305201c1492301 100644 (file)
@@ -3396,6 +3396,83 @@ Negative values may be used to produce mirror images.
        (sy (cdr factor-pair)))
     (ly:stencil-scale stil sx sy)))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Repeating
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-markup-command (pattern layout props count axis space pattern)
+  (integer? integer? number? markup?)
+  #:category other
+  "
+Prints @var{count} times a @var{pattern} markup.
+Patterns are spaced apart by @var{space}.
+Patterns are distributed on @var{axis}.
+
+@lilypond[verbatim, quote]
+\\markup \\column {
+  \"Horizontally repeated :\"
+  \\pattern #7 #X #2 \\flat
+  \\null
+  \"Vertically repeated :\"
+  \\pattern #3 #Y #0.5 \\flat
+}
+@end lilypond"
+  (let ((pattern-width (interval-length
+                         (ly:stencil-extent (interpret-markup layout props pattern) X)))
+        (new-props (prepend-alist-chain 'word-space 0 (prepend-alist-chain 'baseline-skip 0 props))))
+    (let loop ((i (1- count)) (patterns (markup)))
+      (if (zero? i)
+          (interpret-markup
+            layout
+            new-props
+            (if (= axis X)
+                (markup patterns pattern)
+                (markup #:column (patterns pattern))))
+          (loop (1- i)
+            (if (= axis X)
+                (markup patterns pattern #:hspace space)
+                (markup #:column (patterns pattern #:vspace space))))))))
+
+(define-markup-command (fill-with-pattern layout props space dir pattern left right)
+  (number? ly:dir? markup? markup? markup?)
+  #:category align
+  #:properties ((word-space)
+                (line-width))
+  "
+Put @var{left} and @var{right} in a horizontal line of width @code{line-width}
+with a line of markups @var{pattern} in between.
+Patterns are spaced apart by @var{space}.
+Patterns are aligned to the @var{dir} markup.
+
+@lilypond[verbatim, quote]
+\\markup \\column {
+  \"right-aligned :\"
+  \\fill-with-pattern #1 #RIGHT . first right
+  \\fill-with-pattern #1 #RIGHT . second right
+  \\null
+  \"center-aligned :\"
+  \\fill-with-pattern #1.5 #CENTER - left right
+  \\null
+  \"left-aligned :\"
+  \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left first
+  \\override #'(line-width . 50) \\fill-with-pattern #2 #LEFT : left second
+}
+@end lilypond"
+  (let* ((pattern-x-extent (ly:stencil-extent (interpret-markup layout props pattern) X))
+         (pattern-width (interval-length pattern-x-extent))
+         (left-width (interval-length (ly:stencil-extent (interpret-markup layout props left) X)))
+         (right-width (interval-length (ly:stencil-extent (interpret-markup layout props right) X)))
+         (middle-width (- line-width (+ (+ left-width right-width) (* word-space 2))))
+         (period (+ space pattern-width))
+         (count (truncate (/ (- middle-width pattern-width) period)))
+         (x-offset (+ (* (- (- middle-width (* count period)) pattern-width) (/ (1+ dir) 2)) (abs (car pattern-x-extent)))))
+    (interpret-markup layout props
+                      (markup left
+                              #:with-dimensions (cons 0 middle-width) '(0 . 0)
+                              #:translate (cons x-offset 0)
+                              #:pattern (1+ count) X space pattern
+                              right))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Markup list commands
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index 574ba04678a4aaae15d77b0c89ce76c5e72df5d5..3ecfce5aaf1cdffce6a962576f3454bb8d996011 100644 (file)
@@ -157,6 +157,7 @@ expression."
     'SlurEvent
     'SostenutoEvent
     'StringNumberEvent
+    'StrokeFingerEvent
     'SustainEvent
     'TextScriptEvent
     'TextSpanEvent
@@ -236,6 +237,9 @@ expression."
 (define-post-event-display-method AbsoluteDynamicEvent (event parser) #f
   (format #f "\\~a" (ly:music-property event 'text)))
 
+(define-post-event-display-method StrokeFingerEvent (event parser) #t
+  (format #f "\\rightHandFinger #~a" (ly:music-property event 'digit)))
+
 (define-span-event-display-method BeamEvent (event parser) #f "[" "]")
 (define-span-event-display-method SlurEvent (event parser) #f "(" ")")
 (define-span-event-display-method CrescendoEvent (event parser) #f "\\<" "\\!")
@@ -457,11 +461,11 @@ Otherwise, return #f."
        (music->lily-string (car elements) parser)
        (if (and (not (null? simple-elements))
                 (null? (cdr simple-elements))
-                ;; special case: if this simple_element has a HarmonicEvent in its
-                ;; 'articulations list, it should be interpreted instead as a
-                ;; note_chord_element, since \harmonic only works inside chords,
-                ;; even for single notes, e.g., < c\harmonic >
-                (null? (filter (make-music-type-predicate 'HarmonicEvent)
+                ;; special case: if this simple_element has any post_events in
+                ;; its 'articulations list, it should be interpreted instead
+                ;; as a note_chord_element to prevent spurious output, e.g.,
+                ;; \displayLilyMusic < c-1\4 >8 -> c-1\48
+                (null? (filter post-event?
                                (ly:music-property (car simple-elements) 'articulations))))
            ;; simple_element : note | figure | rest | mmrest | lyric_element | skip
            (let* ((simple-element (car simple-elements))
index 7f26bea0dcbc013ccb67c87bea63f5f136067151..a3540e60ca3195e2f3f34b4b1a3bfcffa90fd5db 100644 (file)
 (define-public (alterations-in-key pitch-list)
   "Count number of sharps minus number of flats."
 
-  (* (apply + (map cdr pitch-list)) 2))
-
+  (apply + (map (lambda (p) (round (* (cdr p) 2))) pitch-list)) )
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index a32d2aabc3fd672b2f7f381247a7cc0d1ecf0b53..f831123c3e81ba640aa83c8f7b79085ece799b65 100644 (file)
@@ -405,6 +405,10 @@ class Text:
                 or d.compare (reference_note.duration)):
                 s = s + Duration (self.clocks).dump ()
             s = s + ' '
+        elif self.text and self.type == midi.SEQUENCE_TRACK_NAME:
+            text = self.text.replace ('(MIDI)', '').strip ()
+            if text:
+                s = '\n  \\set Staff.instrumentName = "%(text)s"\n  ' % locals ()
         else:
             s = '\n  % [' + self.text_types[self.type] + '] ' + self.text + '\n  '
         return s
@@ -913,10 +917,10 @@ def convert_midi (in_file, out_file):
     tag = '%% Lily was here -- automatically converted by %s from %s' % ( program_name, in_file)
 
 
-    s = ''
-    s = tag + '\n\\version "2.7.38"\n\n'
-    for i in range (len (tracks)):
-        s = s + dump_track (tracks[i], i)
+    s = tag
+    s += r'''
+\version "2.7.38"
+'''
 
     s += r'''
 \layout {
@@ -928,6 +932,16 @@ def convert_midi (in_file, out_file):
 }
 '''
 
+    for i in global_options.include_header:
+        s += '\n%% included from %(i)s\n' % locals ()
+        s += open (i).read ()
+        if s[-1] != '\n':
+            s += '\n'
+        s += '% end\n'
+
+    for i in range (len (tracks)):
+        s = s + dump_track (tracks[i], i)
+
     s += '\n\\score {\n  <<\n'
 
     i = 0
@@ -971,6 +985,11 @@ def get_option_parser ():
     p.add_option('-h', '--help',
                  action='help',
                  help=_ ('show this help and exit'))
+    p.add_option('-i', '--include-header',
+                 help=_ ('prepend FILE to output'),
+                 action='append',
+                 default=[],
+                 metavar=_ ('FILE'))
     p.add_option('-k', '--key', help=_ ('set key: ALT=+sharps|-flats; MINOR=1'),
           metavar=_ ('ALT[:MINOR]'),
           default='0'),