]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Mon, 21 Dec 2015 14:23:21 +0000 (15:23 +0100)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Mon, 21 Dec 2015 14:23:21 +0000 (15:23 +0100)
42 files changed:
Documentation/changes.tely
Documentation/contributor/quick-start.itexi
Documentation/contributor/source-code.itexi
Documentation/learning/tweaks.itely
Documentation/notation/simultaneous.itely
Documentation/notation/text.itely
Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly
Documentation/snippets/flute-slap-notation.ly
Documentation/snippets/fretted-strings.snippet-list
Documentation/snippets/let-tabstaff-print-the-topmost-string-at-bottom.ly [new file with mode: 0644]
Documentation/snippets/new/flute-slap-notation.ly [new file with mode: 0644]
Documentation/snippets/staff-notation.snippet-list
Documentation/snippets/using-the-whiteout-property.ly
Documentation/topdocs/README.texi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
input/regression/markup-partial.ly
input/regression/note-collision-threshold.ly [new file with mode: 0644]
input/regression/whiteout-lower-layers.ly
input/regression/whiteout.ly
lily/include/scheme-engraver.hh
lily/include/translator.hh
lily/include/translator.icc
lily/note-collision.cc
lily/parser.yy
lily/scheme-engraver.cc
lily/stem.cc
lily/translator-group.cc
ly/Welcome-to-LilyPond-MacOS.ly
ly/Welcome_to_LilyPond.ly
po/lilypond.pot
po/nl.po
python/convertrules.py
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/ly-syntax-constructors.scm
scm/markup.scm
scm/output-lib.scm
scm/stencil.scm
scripts/musicxml2ly.py

index bc0807624b36f11ceefc38ec9f3f99a3f94f8bc8..24e973e4fd4c89d5ac438acf377c8376593eb5c0 100644 (file)
@@ -96,19 +96,28 @@ mus = \relative { c'4 cih d dih }
 @end lilypond
 
 @item
-A new style of whiteout that approximates the contours of a glyph's
-outline is now available using @code{whiteout-style}.  The shape of the
-white background is produced from multiple displaced copies of the
-glyph.  The @code{thickness} of both the new @code{outline} style and
-the default @code{box} style, as a multiple of staff-line thickness, can
-be customized.
+Two new styles of whiteout are now available.  The @code{outline} style
+approximates the contours of a glyph's outline, and its shape is
+produced from multiple displaced copies of the glyph.  The
+@code{rounded-box} style produces a rounded rectangle shape.  For all
+three styles, including the default @code{box} style, the whiteout
+shape's @code{thickness}, as a multiple of staff-line thickness, can be
+customized.
+
 @lilypond[verbatim,quote]
 \markup {
   \combine
     \filled-box #'(-1 . 15) #'(-3 . 4) #1
-    \override #'(thickness . 2)
+    \override #'(thickness . 3)
     \whiteout whiteout-box
 }
+\markup {
+  \combine
+    \filled-box #'(-1 . 24) #'(-3 . 4) #1
+    \override #'(style . rounded-box)
+    \override #'(thickness . 3)
+    \whiteout whiteout-rounded-box
+}
 \markup {
   \combine
     \filled-box #'(-1 . 18) #'(-3 . 4) #1
index ba4340dfd9cfea2a06ce722318ded4c35d547aab..b515eff1de82a67b950e473a83fc238a7c9afbca 100644 (file)
@@ -36,7 +36,7 @@ software.  We recommend using VirtualBox as it is available for all
 major operating systems and is very easy to install & configure.
 
 The LilyDev disk image can also be written to a USB device or @q{burnt}
-to a DVD -- it is approximately 900 GB in size -- and installed just
+to a DVD -- it is approximately 900 MB in size -- and installed just
 like any standard GNU/Linux distribution.
 
 The current image is based on a 32bit version of Debian 8 (@q{Jessie})
@@ -44,7 +44,7 @@ and the Disk image was generated using Debian
 @uref{http://live.debian.net/, live-build 4}.
 
 @noindent
-Download the LilyDev disk image file from here:
+Download the LilyDev disk image file (a @code{.iso} file) from here:
 
 @example
 @uref{https://github.com/fedelibre/LilyDev/releases/latest}
@@ -58,7 +58,7 @@ prefer to use their own development environment) may still find it
 instructive to skim over the following information.}
 
 If you are not familiar with GNU/Linux, it may be beneficial to read a
-few @qq{introduction to Linux} type web pages.
+few @qq{introduction to Linux} type web pages.
 
 @menu
 * Installing LilyDev in VirtualBox::
@@ -77,15 +77,15 @@ you can skip this section and go straight to @ref{lily-git}.}
 
 @enumerate
 @item
-Download Virtualbox from here:
+Download VirtualBox from here:
 
 @example
 @uref{http://www.virtualbox.org/wiki/Downloads}
 @end example
 
 @warning{In virtualization terminology, the operating system where
-Virtualbox is installed is known as the @strong{host}.  LilyDev
-will be installed @q{inside} Virtualbox as a @strong{guest}.}
+VirtualBox is installed is known as the @strong{host}.  LilyDev
+will be installed @q{inside} VirtualBox as a @strong{guest}.}
 
 @item
 Start the VirtualBox software and click @q{New} to create a new
@@ -114,7 +114,7 @@ and its location accordingly.
 
 @item
 Verify the summary details and click @q{Create}, when you are satisfied.
-Your new guest will be displayed in the Virtualbox window.
+Your new guest will be displayed in the VirtualBox window.
 
 @warning{The image contains a @q{686-pae} kernel, so you must enable
 @code{PAE} within the virtual machine's settings -- click on
@@ -124,8 +124,8 @@ Your new guest will be displayed in the Virtualbox window.
 @item
 Click the @q{Start} button and the @q{First Run Wizard} will prompt you
 for the installation media.  Click the browse icon, locate the LilyDev
-disk image and click through the wizard to begin the installation
-process.
+disk image file that you downloaded (the @code{.iso} file) and click
+through the wizard to begin the installation process.
 
 @item
 When the LilyDev disk image boots for the first time, choose either the
@@ -158,7 +158,7 @@ LilyDev should now be installed and running!
 @unnumberedsubsec Configuring LilyDev in VirtualBox
 
 VirtualBox has extra @q{guest additions} which although are not
-necessary to use LilyDev or compile Lilypond, do provide some additional
+necessary to use LilyDev or compile LilyPond, do provide some additional
 features to your Virtual Machine to make it easier to work with.  Such
 as being able to dynamically resize the LilyDev window, allow seamless
 interaction with your mouse pointer on both the host and guest and let
@@ -593,7 +593,7 @@ Allura bearer token (see https://sourceforge.net/auth/oauth/) [fdbfca60801533465
 example. Do not use this value.}
 
 @item
-Finally, when prompted for the @code{CC list} entry, add the Lilypond
+Finally, when prompted for the @code{CC list} entry, add the LilyPond
 Developer's group email.
 
 @example
@@ -609,7 +609,7 @@ The @code{git-cl} script should now be correctly configured for use.
 @section Compiling with LilyDev
 
 LilyDev is our @q{remix} of Debian which contains all the
-necessary dependencies to do lilypond development; for more
+necessary dependencies to do LilyPond development; for more
 information, see @ref{LilyDev}.
 
 @subsubheading Preparing the build
@@ -629,17 +629,20 @@ cd build/
 
 @subsubheading Building @code{lilypond}
 
-Compiling lilypond will likely take between 5 and 60 minutes,
-depending on your computer's speed and available RAM.  We
-recommend that you minimize the terminal window while it is
-building; this can have a non-negligible effect on compilation
-speed.
+Compiling LilyPond will take anywhere between 1 and 15 minutes on most
+@q{modern} computers -- depending on CPU and available RAM.  We also
+recommend that you minimize the terminal window while it is building;
+this can help speed up on compilation times.
 
 @example
 cd $LILYPOND_GIT/build/
 make
 @end example
 
+@noindent
+It is possible to run @code{make} with the @code{-j} option to help
+speed up compilation times even more.  See @ref{Compiling LilyPond}
+
 You may run the compiled @code{lilypond} with:
 
 @example
@@ -668,7 +671,7 @@ firefox $LILYPOND_GIT/build/out-www/offline-root/index.html
 
 @subsubheading Installing
 
-Don't.  There is no reason to install lilypond within LilyDev.
+Don't.  There is no reason to install LilyPond within LilyDev.
 All development work can (and should) stay within the
 @file{$LILYPOND_GIT} directory, and any personal composition
 or typesetting work should be done with an official GUB release.
index 7d3c04e2aecf49193edb73195903528ff3f4acf5..20077e6891c50a69bfc672b152f52b8a5a27e082 100644 (file)
@@ -1355,10 +1355,6 @@ Account Settings must have the @q{Access for less secure apps} set to
 Move into the top source directory and then configure @command{git
 cl} with the following commands:
 
-@item
-Move into the top source directory and then configure @command{git
-cl} with the following commands:
-
 @example
 cd $LILYPOND_GIT
 git cl config
@@ -1393,7 +1389,7 @@ There are two methods, depending on your git setup.
 
 @itemize
 @item
-@strong{Master branch}: (easy option, and used in @command{lily-git.tcl})
+@strong{Master branch}: (easy option)
 
 If you added your patch to @code{master}, then:
 
@@ -1417,13 +1413,25 @@ option.
 @item
 @strong{Separate branch}: (complicated option)
 
-Ensure your changes are committed in a separate branch, which
-should differ from the reference branch to be used by just the
-changes to be uploaded.  If the reference branch is to be
-origin/master, ensure this is up-to-date.  If necessary, use git
-rebase to rebase the branch containing the changes to the head of
-origin/master.  Finally, check out branch with the changes and
-enter the command:
+Ensure your changes are committed in a separate branch, which should
+differ from the reference branch to be used (usually
+@code{origin/master}) by just the changes to be uploaded.  Checkout the
+branch with the changes:
+
+@example
+git checkout some-branch-with-changes
+@end example
+
+If the reference branch is to be @code{origin/master}, ensure that the
+branch containing the changes is up-to-date with it.  Use
+@command{git rebase} or @command{git pull -r} to rebase the branch to
+the head of @code{origin/master}.  For example:
+
+@example
+git pull -r origin master
+@end example
+
+Finally, start the upload by entering:
 
 @example
 git cl upload <reference SHA1 ID>
index cd8df5c91289d2a5b44f7f88b2f15661ea5eea7d..d5d5951b1255d811a58b441252088d33ebba2bc3 100644 (file)
@@ -107,6 +107,12 @@ ending point, and maybe other properties concerned with their
 shape.  Objects with an extended shape like these are called
 @q{Spanners}.
 
+Spanners cannot be tweaked after their creation.  This includes both
+@code{StaffSymbol} and @code{LedgerLineSpanner} which continue
+throughout the score (except if they are terminated by the
+@code{\stopStaff} command and then recreated using @code{\startStaff}
+command.
+
 What is more, there are @q{abstract} grobs which do not print
 anything of their own, but rather collect, position and manage
 other grobs.  Common examples for this are
@@ -175,6 +181,10 @@ As we shall see shortly, the properties of different types of object are
 modified by different commands, so it is useful to be able to recognize
 the types of objects and properties from their names.
 
+@seealso
+Notation Reference:
+@ruser{Modifying properties}.
+
 
 @node Tweaking methods
 @subsection Tweaking methods
index c96837e5224cb5593e6f6ef281bf8ebe44d10a3d..b7b2f3e7ea228203142d76591c57e428d7dea481 100644 (file)
@@ -1027,37 +1027,36 @@ long passages of music even if some of the notes are the same in both
 voices, and could just as easily be printed as unison. Combining notes
 into a chord, or showing one voice as solo is, therefore, not ideal as
 the @code{\partcombine} function considers each note separately. In this
-case the @code{\partcombine} function can be overriden with the
-following commands:
-
-Commands ending in @code{@dots{}Once} apply only to the next note in the
-music expression.
+case the @code{\partcombine} function can be overridden with one of the
+following commands.  All of the commands may be preceded with
+@code{\once} in order to have them only apply to the next note in
+the music expression.
 
 @itemize
 @item
-@code{\partcombineApart} and @code{\once \partcombineApart} keep the
+@code{\partcombineApart} keeps the
 notes as two separate voices, even if they can be combined into a chord
 or unison.
 
 @item
-@code{\partcombineChords} and @code{\once \partcombineChords} combine the
+@code{\partcombineChords} combines the
 notes into a chord.
 
 @item
-@code{\partcombineUnisono} and @code{\once \partcombineUnisono} combine
+@code{\partcombineUnisono} combines
 both voices as @qq{unison}.
 
 @item
-@code{\partcombineSoloI} and @code{\once \partcombineSoloI} print only
-voice one, and mark it as a @qq{Solo}.
+@code{\partcombineSoloI} prints only
+voice one, and marks it as a @qq{Solo}.
 
 @item
-@code{\partcombineSoloII} or @code{\once \partcombineSoloII} print only
-voice two and mark it as a @qq{Solo}.
+@code{\partcombineSoloII} prints only
+voice two and marks it as a @qq{Solo}.
 
 @item
-@code{\partcombineAutomatic} and @code{\once \partcombineAutomatic} end
-the functions of the commands above, and revert back to the standard
+@code{\partcombineAutomatic} ends
+the functions of the commands above, and reverts back to the standard
 @code{\partcombine} functionality.
 @end itemize
 
index e708d3a097e8149a740ae07874ec6917853889ac..3a9cdbd6d2d9bb27893bc417405cfc4b0423b7bd 100644 (file)
@@ -235,9 +235,12 @@ in @ref{Rehearsal marks}:
 
 @lilypond[verbatim,quote]
 \relative {
-  c''4
-  \mark "Allegro"
-  c c c
+  \mark "Verse"
+  c'2 g'
+  \bar "||"
+  \mark "Chorus"
+  g2 c,
+  \bar "|."
 }
 @end lilypond
 
index c7379c3b297c010fafe9b18e5bb1728dd2d21a71..6e49f9e5ec90e29810e6bf640ba2fe2b998302fc 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.19.32"
+\version "2.18.0"
 
 \header {
   lsrtags = "editorial-annotations, really-cool, text"
index cdbe9fa6c2cb626089d4cb58826901936ab17f6e..0f1627b3242cac8ed3d167fe999eab14a9cd19f7 100644 (file)
@@ -1,9 +1,10 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.di.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.
+% 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.19.22
 \version "2.19.22"
 
 \header {
@@ -21,11 +22,11 @@ glyph.
 slap =
 #(define-music-function (music) (ly:music?)
 #{
-  \override NoteHead.stencil =
+  \temporary \override NoteHead.stencil =
   #(lambda (grob)
      (grob-interpret-markup grob
       (markup #:musicglyph "scripts.sforzato")))
-  \override NoteHead.stem-attachment =
+  \temporary \override NoteHead.stem-attachment =
   #(lambda (grob)
      (let* ((thickness (ly:staff-symbol-line-thickness grob))
             (stem (ly:grob-object grob 'stem))
@@ -34,7 +35,7 @@ slap =
                       0.5
                       0)
                   (/ thickness 2)))))
-  $music
+  #music
   \revert NoteHead.stencil
   \revert NoteHead.stem-attachment
 #})
index 782578103984e1c16f2c5a11200207e23fef8e00..36db6ac1eacc62b028422c2ee1a774ef601d7e71 100644 (file)
@@ -24,6 +24,7 @@ hammer-on-and-pull-off.ly
 how-to-change-fret-diagram-position.ly
 jazz-combo-template.ly
 laissez-vibrer-ties.ly
+let-tabstaff-print-the-topmost-string-at-bottom.ly
 letter-tablature-formatting.ly
 open-string-harmonics-in-tablature.ly
 placement-of-right-hand-fingerings.ly
diff --git a/Documentation/snippets/let-tabstaff-print-the-topmost-string-at-bottom.ly b/Documentation/snippets/let-tabstaff-print-the-topmost-string-at-bottom.ly
new file mode 100644 (file)
index 0000000..691fad4
--- /dev/null
@@ -0,0 +1,49 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+  lsrtags = "fretted-strings, staff-notation"
+
+  texidoc = "
+In tablatures usually the first string is printed topmost. If you want
+to have it at the bottom change the
+@code{stringOneTopmost}-context-property. For a context-wide setting
+this could be done in @code{layout} as well.
+
+"
+  doctitle = "Let TabStaff print the topmost string at bottom"
+} % begin verbatim
+
+%
+%\layout {
+%  \context {
+%    \Score
+%    stringOneTopmost = ##f
+%  }
+%  \context {
+%    \TabStaff
+%    tablatureFormat = #fret-letter-tablature-format
+%  }
+%}
+
+m = {
+  \cadenzaOn
+  e, b, e gis! b e'
+  \bar "||"
+}
+
+<<
+  \new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m }
+  \new TabStaff
+  {
+    \m
+    \set Score.stringOneTopmost = ##f
+    \set TabStaff.tablatureFormat = #fret-letter-tablature-format
+    \m
+  }
+>>
diff --git a/Documentation/snippets/new/flute-slap-notation.ly b/Documentation/snippets/new/flute-slap-notation.ly
new file mode 100644 (file)
index 0000000..b18de49
--- /dev/null
@@ -0,0 +1,38 @@
+\version "2.19.22"
+
+\header {
+  lsrtags = "contemporary-notation, winds"
+
+  texidoc = "
+It is possible to indicate special articulation techniques such as a
+flute @qq{tongue slap} by replacing the note head with the appropriate
+glyph.
+
+"
+  doctitle = "Flute slap notation"
+}
+slap =
+#(define-music-function (music) (ly:music?)
+#{
+  \temporary \override NoteHead.stencil =
+  #(lambda (grob)
+     (grob-interpret-markup grob
+      (markup #:musicglyph "scripts.sforzato")))
+  \temporary \override NoteHead.stem-attachment =
+  #(lambda (grob)
+     (let* ((thickness (ly:staff-symbol-line-thickness grob))
+            (stem (ly:grob-object grob 'stem))
+            (dir (ly:grob-property stem 'direction UP)))
+       (cons 1 (+ (if (= dir DOWN)
+                      0.5
+                      0)
+                  (/ thickness 2)))))
+  #music
+  \revert NoteHead.stencil
+  \revert NoteHead.stem-attachment
+#})
+
+\relative c' {
+  c4 \slap c d r
+  \slap { g4 a } b r
+}
index 038ba0bd15bc92b4f52c998ffd3d01e207a2a4de..0322a423b049fc0f76149c9d0682a6a62e8d47b2 100644 (file)
@@ -22,6 +22,7 @@ how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-1.ly
 how-to-print-two-rehearsal-marks-above-and-below-the-same-barline-method-2.ly
 incipit.ly
 inserting-score-fragments-above-a-staff,-as-markups.ly
+let-tabstaff-print-the-topmost-string-at-bottom.ly
 letter-tablature-formatting.ly
 making-glissandi-breakable.ly
 making-some-staff-lines-thicker-than-the-others.ly
index f5210b7ed76d86a8f4971127101421df2728ced1..77bc141d219a36d1ae2f934925f39670574606e9 100644 (file)
@@ -4,7 +4,7 @@
 % and then run scripts/auxiliar/makelsr.py
 %
 % This file is in the public domain.
-%% Note: this file works from version 2.19.22
+%% Note: this file works from version 2.19.32
 \version "2.19.32"
 
 \header {
@@ -20,7 +20,7 @@ background.
 
 In this example the collision of the tie with the time signature is
 improved by masking out the part of the tie that crosses the time
-signature by setting the @code{whiteout-box} property of
+signature by setting the @code{whiteout} property of
 @code{TimeSignature}. To do this @code{TimeSignature} is moved to a
 layer above @code{Tie}, which is left in the default layer of 1, and
 @code{StaffSymbol} is moved to a layer above @code{TimeSignature} so it
index 6bb28b3e087f60f79e936a57b39bdd844bcc1008..e282c32fba41326ebbb1a7e86bdd536857a23dfa 100644 (file)
@@ -72,9 +72,8 @@ list.
 @item @uref{http://lists.gnu.org/mailman/listinfo/bug-lilypond,bug-lilypond@@gnu.org}
 for sending bugreports.
 
-@item @uref{http://lists.gnu.org/mailman/listinfo/lilypond-cvs,lilypond-cvs@@gnu.org}
- for log files from the
-autobuild.
+@item @uref{http://lists.gnu.org/mailman/listinfo/lilypond-auto,lilypond-auto@@gnu.org}
+ for notifications from the issue tracking systems of LilyPond.
 @end itemize
 
 You can search the lists from our @uref{http://lilypond.org/search,
index 6ac8ff1b99e0035d1f4257e740b14917fa3ec8eb..488059b3f3adccf961dd488610161a78a1b42139 100644 (file)
@@ -9,10 +9,10 @@
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subheading LilyPond 2.19.32 released  @emph{November 22, 2015}
+@subheading LilyPond 2.19.33 released  @emph{December 6, 2015}
 
 We are happy to announce the release of LilyPond
-2.19.32.  This release includes a number of enhancements, and contains some
+2.19.33.  This release includes a number of enhancements, and contains some
 work in progress.  You will have access to the very latest features, but
 some may be incomplete, and you may encounter bugs and crashes.  If you
 require a stable version of Lilypond, we recommend using the 2.18
index 543a79522885359488335701f22d3c44868f82dc..406e782aec3448482f5b75c27942c1f36f7546e1 100644 (file)
@@ -26,6 +26,18 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subheading LilyPond 2.19.32 released  @emph{November 22, 2015}
+
+We are happy to announce the release of LilyPond
+2.19.32.  This release includes a number of enhancements, and contains some
+work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you
+require a stable version of Lilypond, we recommend using the 2.18
+version.
+
+@newsEnd
+
 @newsItem
 @subheading LilyPond 2.19.31 released  @emph{November 8, 2015}
 
diff --git a/VERSION b/VERSION
index ec405ad892b1bf7419e85760616b4bc56122eaef..bff012e72bc7fc14072be635ef3984b8de7dac8a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=19
-PATCH_LEVEL=33
+PATCH_LEVEL=34
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.32
+VERSION_DEVEL=2.19.33
index 37d2255cd9dc9b5cec44dc80c3274980a0daf8d6..f0759d26edab8b60f4603af9b8684fdb2d762c56 100644 (file)
@@ -1,14 +1,19 @@
-\version "2.19.24"
+\version "2.19.34"
 
-\header
-{ texidoc = "Partial markups acts as a chain of markup
-  commands where everything but the final markup has already been
-  supplied."
+\header {
+  texidoc = "Partial markups acts as a chain of markup
+commands where everything but some arguments of the final markup
+command has already been supplied."
 }
 
 \layout { ragged-right = ##t }
 
 bold-red-markup = \markup \bold \with-color #red \etc
+italic-color-markup = \markup \italic \with-color \etc
+quarter-markup = \markup \note-by-number #2 \etc
 
-\markup \bold-red "Single markup"
-\markuplist \column-lines \bold-red { Markups in a list. }
+\markup \bold-red "Bold red."
+\markuplist \column-lines \bold-red { Bold red in a list. }
+\markup \italic-color #green "Italic green."
+\markuplist \column-lines \italic-color #green { Italic green in a list. }
+\markup { 3/8: \quarter #1 #UP }
diff --git a/input/regression/note-collision-threshold.ly b/input/regression/note-collision-threshold.ly
new file mode 100644 (file)
index 0000000..e01a2e1
--- /dev/null
@@ -0,0 +1,46 @@
+\version "2.19.34"
+
+\header {
+  texidoc = "Whether simultaneous notes are identified as
+  vertically colliding or not depends on the value of the
+  @code{note-collision-threshold} property of the @code{Stem}
+  grob (for notes in the same voice) and the @code{NoteCollision}
+  grob (for notes in different voices)."
+}
+
+music = <<
+  \new Voice \relative {
+    \voiceOne
+    <c' d>4 <d e> <f g> <g a>
+    e g g a
+
+  }
+  \new Voice \relative {
+    \voiceTwo
+    s4 s s s
+    d' f a b
+  }
+>>
+
+customizations = \with {
+  staffLineLayoutFunction = #ly:pitch-semitones
+  \override StaffSymbol.staff-space = #0.7
+  \override StaffSymbol.line-positions = #'(-4 0 4)
+}
+
+
+\markup "collisions"
+
+\new Staff \with {
+  \customizations
+}
+\music
+
+\markup "collisions prevented"
+
+\new Staff \with {
+  \customizations
+  \override Stem.note-collision-threshold = #2
+  \override NoteCollision.note-collision-threshold = #2
+}
+\music
index 8549cbc783cde5c2ded54ea5550cc04749ca04ab..15c59e5770b04eee6afea06de97cfcbfec19078b 100644 (file)
@@ -10,23 +10,35 @@ TimeSignature whites out the Tie but not the StaffSymbol.
 
 \relative {
   \time 3/4
-  \override Staff.StaffSymbol.layer = #4
-  \once \override Tie.layer = #2
+  \override Staff.StaffSymbol.layer = 4
+  \once \override Tie.layer = 2
   b'2.~
   \once \override Staff.TimeSignature.whiteout = ##t
-  \once \override Staff.TimeSignature.layer = #3
+  \once \override Staff.TimeSignature.layer = 3
   \time 5/4
   b4
 }
 
 \relative c' {
   \time 3/4
-  \override Staff.StaffSymbol.layer = #4
-  \once \override Tie.layer = #2
+  \override Staff.StaffSymbol.layer = 4
+  \once \override Tie.layer = 2
+  b'2.~
+  \once \override Staff.TimeSignature.whiteout-style = #'rounded-box
+  \once \override Staff.TimeSignature.whiteout = 3
+  \once \override Staff.TimeSignature.layer = 3
+  \time 5/4
+  b4
+}
+
+\relative c' {
+  \time 3/4
+  \override Staff.StaffSymbol.layer = 4
+  \once \override Tie.layer = 2
   b'2.~
   \once \override Staff.TimeSignature.whiteout-style = #'outline
-  \once \override Staff.TimeSignature.whiteout = #3
-  \once \override Staff.TimeSignature.layer = #3
+  \once \override Staff.TimeSignature.whiteout = 3
+  \once \override Staff.TimeSignature.layer = 3
   \time 5/4
   b4
 }
index 7e10de9727be00498a693859cd563d77fe025808..543d94f369da04536a8fc13c3a88a0466871fac4 100644 (file)
@@ -2,8 +2,9 @@
 
   texidoc = "The whiteout command underlays a white background under a
 markup.  The shape is determined by @code{whiteout-style}. The default
-is @code{box} which produces a white rectangle.  @code{outline}
-approximates the outline of the markup."
+is @code{box} which produces a rectangle.  @code{rounded-box} produces
+a rounded rectangle.  @code{outline} approximates the outline of the
+markup."
 
 }
 \version "2.19.32"
@@ -25,7 +26,13 @@ approximates the outline of the markup."
   c
   c-\markup {
     \override #'(thickness . 3)
-    \override #'(whiteout-style . outline)
+    \override #'(style . rounded-box)
+    \whiteout foo
+  }
+  c
+  c-\markup {
+    \override #'(thickness . 3)
+    \override #'(style . outline)
     \whiteout foo
   }
   c
index c7d16d76e9c10145d090472de46688384279f6dd..e22e572c7fe6ec15c07d2728b55970e25b19096a 100644 (file)
 
 class Scheme_engraver : public Engraver
 {
-public:
   void init_from_scheme (SCM definition);
-  TRANSLATOR_DECLARATIONS_NO_LISTENER (Scheme_engraver);
+public:
+  TRANSLATOR_FAMILY_DECLARATIONS (Scheme_engraver);
+  Scheme_engraver (SCM definition);
 
 protected:
   ~Scheme_engraver ();
@@ -68,8 +69,6 @@ private:
   // Alist of listened-symbol . scheme-function
   SCM listeners_alist_;
 
-  // We dont use this, but need it for the documentation boilerplate.
-  static Protected_scm listener_list_;
   SCM per_instance_listeners_;
 };
 
index 8154409efced3e763e13a6bd5862a371d8f7ae81..a4cf192ffffa47c9787b66d5cdd6cb3f38329811 100644 (file)
 #include "std-vector.hh"
 #include "protected-scm.hh"
 
-#define TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME)                       \
+#define TRANSLATOR_FAMILY_DECLARATIONS(NAME)                            \
   public:                                                               \
-  NAME ();                                                              \
   VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME);                          \
-  static SCM static_description_;                                       \
   static Drul_array<vector<Acknowledge_information> > acknowledge_static_array_drul_; \
-  virtual void fetch_precomputable_methods (Callback methods[]); \
-  virtual SCM static_translator_description () const;                   \
-  virtual SCM translator_description () const;                          \
+  virtual void fetch_precomputable_methods (Callback methods[]);        \
   static Grob_info_callback static_get_acknowledger (SCM sym);          \
   static Grob_info_callback static_get_end_acknowledger(SCM);           \
   virtual Grob_info_callback get_acknowledger (SCM sym)                 \
@@ -46,7 +42,7 @@
   virtual Grob_info_callback get_end_acknowledger (SCM sym)             \
   {                                                                     \
     return static_get_end_acknowledger (sym);                           \
-  } \
+  }                                                                     \
   /* end #define */
 
 /*
 */
 
 #define TRANSLATOR_DECLARATIONS(NAME)                                   \
-  TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME)                             \
-private:                                                                \
+  TRANSLATOR_FAMILY_DECLARATIONS(NAME)                                  \
+  static SCM static_description_;                                       \
   static Protected_scm listener_list_;                                  \
 public:                                                                 \
+  NAME ();                                                              \
+  virtual SCM static_translator_description () const;                   \
+  virtual SCM translator_description () const;                          \
   virtual SCM get_listener_list () const                                \
   {                                                                     \
     return listener_list_;                                              \
index 7fc128fe72f68d732fa448f9a42d4755fc17e7c3..d5057021362c398b4418c2c4d1b5e9e3ecc2d9ea 100644 (file)
     return Translator::static_translator_description (grobs, desc, listener_list_, read, write); \
   }
 
-#define ADD_TRANSLATOR(classname, desc, grobs, read, write)             \
+#define ADD_TRANSLATOR_FAMILY(classname)                                \
   IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS (classname);                    \
+  DEFINE_ACKNOWLEDGERS(classname)                                       \
+
+#define ADD_TRANSLATOR(classname, desc, grobs, read, write)             \
+  ADD_TRANSLATOR_FAMILY (classname)                                     \
   ADD_THIS_TRANSLATOR (classname);                                      \
   DEFINE_TRANSLATOR_DOC(classname, desc, grobs, read, write)            \
-  DEFINE_ACKNOWLEDGERS(classname) \
-  DEFINE_TRANSLATOR_LISTENER_LIST(classname) \
+  DEFINE_TRANSLATOR_LISTENER_LIST(classname)                            \
 
 #define IMPLEMENT_FETCH_PRECOMPUTABLE_METHODS(T)                        \
   void                                                                  \
index f98cb5a3a037d279c5234b314638432a5252737f..664ce234a7ea92fc1aa06ae3d2800cac70c74932 100644 (file)
@@ -55,8 +55,10 @@ check_meshing_chords (Grob *me,
   vector<int> ups = Stem::note_head_positions (stems[UP]);
   vector<int> dps = Stem::note_head_positions (stems[DOWN]);
 
+  int threshold = robust_scm2int (me->get_property ("note-collision-threshold"), 1);
+
   /* Too far apart to collide. */
-  if (ups[0] > dps.back () + 1)
+  if (ups[0] > dps.back () + threshold)
     return 0.0;
 
   /* If the chords just 'touch' their extreme noteheads,
@@ -64,8 +66,8 @@ check_meshing_chords (Grob *me,
   */
   bool touch = false;
   if (ups[0] >= dps.back ()
-      && (dps.size () < 2 || ups[0] >= dps[dps.size () - 2] + 2)
-      && (ups.size () < 2 || ups[1] >= dps.back () + 2))
+      && (dps.size () < 2 || ups[0] >= dps[dps.size () - 2] + threshold + 1)
+      && (ups.size () < 2 || ups[1] >= dps.back () + threshold + 1))
     touch = true;
 
   /* Filter out the 'o's in this configuration, since they're no
@@ -141,7 +143,9 @@ check_meshing_chords (Grob *me,
 
   for (vsize i = 0, j = 0; i < ups.size () && j < dps.size ();)
     {
-      if (abs (ups[i] - dps[j]) == 1)
+      if (ups[i] == dps[j])
+        full_collide = true;
+      else if (abs (ups[i] - dps[j]) <= threshold)
         {
           merge_possible = false;
           if (ups[i] > dps[j])
@@ -149,8 +153,6 @@ check_meshing_chords (Grob *me,
           else
             distant_half_collide = true;
         }
-      else if (ups[i] == dps[j])
-        full_collide = true;
       else if (ups[i] > dps[0] && ups[i] < dps.back ())
         merge_possible = false;
       else if (dps[j] > ups[0] && dps[j] < ups.back ())
@@ -607,6 +609,7 @@ ADD_INTERFACE (Note_collision_interface,
                /* properties */
                "merge-differently-dotted "
                "merge-differently-headed "
+               "note-collision-threshold "
                "positioning-done "
                "prefer-dotted-right "
               );
index 35d0aa48dc40cd46df5961780c6f8f2fab2d822e..c60c6ed64c1157fa00e516efdcd98b8cb9e9eb0b 100644 (file)
@@ -3671,7 +3671,7 @@ full_markup:
        ;
 
 partial_markup:
-       markup_mode markup_head_1_list ETC
+       markup_mode markup_partial_function ETC
        {
                $$ = MAKE_SYNTAX (partial_markup, @2, $2);
                parser->lexer_->pop_state ();
@@ -3789,6 +3789,37 @@ markup_command_list_arguments:
        }
        ;
 
+markup_partial_function:
+       MARKUP_FUNCTION markup_arglist_partial
+       {
+               $$ = scm_list_1 (scm_cons ($1, scm_reverse_x ($2, SCM_EOL)));
+       }
+       | markup_head_1_list MARKUP_FUNCTION markup_arglist_partial
+       {
+               $$ = scm_cons (scm_cons ($2, scm_reverse_x ($3, SCM_EOL)),
+                              $1);
+       }
+       ;
+
+markup_arglist_partial:
+       EXPECT_MARKUP markup_arglist_partial
+       {
+               $$ = $2;
+       }
+       | EXPECT_SCM markup_arglist_partial
+       {
+               $$= $2;
+       }
+       | EXPECT_MARKUP markup_command_list_arguments
+       {
+               $$ = $2;
+       }
+       | EXPECT_SCM markup_command_list_arguments
+       {
+               $$ = $2;
+       }
+       ;
+
 markup_head_1_item:
        MARKUP_FUNCTION EXPECT_MARKUP markup_command_list_arguments {
          $$ = scm_cons ($1, scm_reverse_x ($3, SCM_EOL));
index 7e601f8db7563014ad81b18a02981f6bf811780e..ec4197641bfcba78386ee3b11c9becd6e24cf762 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "translator.icc"
 
-Scheme_engraver::Scheme_engraver ()
+Scheme_engraver::Scheme_engraver (SCM definition)
 {
   stop_translation_timestep_function_ = SCM_EOL;
   start_translation_timestep_function_ = SCM_EOL;
@@ -39,6 +39,8 @@ Scheme_engraver::Scheme_engraver ()
 
   must_be_last_ = false;
   per_instance_listeners_ = SCM_EOL;
+
+  init_from_scheme (definition);
 }
 
 Scheme_engraver::~Scheme_engraver ()
@@ -194,17 +196,4 @@ Scheme_engraver::derived_mark () const
 ADD_ACKNOWLEDGER (Scheme_engraver, grob);
 ADD_END_ACKNOWLEDGER (Scheme_engraver, grob);
 
-ADD_TRANSLATOR (Scheme_engraver,
-                /* doc */
-                "Implement engravers in Scheme.  Interprets arguments to"
-                " @code{\\consists} as callbacks.",
-
-                /* create */
-                "",
-
-                /* read */
-                "",
-
-                /* write */
-                ""
-               );
+ADD_TRANSLATOR_FAMILY (Scheme_engraver);
index f0335c58d2efe34bf06ce608a651f8f272c5f67f..947a429c23f472770474dd10c9fb8abb8a4053e6 100644 (file)
@@ -552,6 +552,7 @@ Stem::calc_positioning_done (SCM smob)
     }
   bool parity = true;
   Real lastpos = Real (Staff_symbol_referencer::get_position (heads[0]));
+  int threshold = robust_scm2int (me->get_property ("note-collision-threshold"), 1);
   for (vsize i = 1; i < heads.size (); i++)
     {
       Real p = Staff_symbol_referencer::get_position (heads[i]);
@@ -561,7 +562,7 @@ Stem::calc_positioning_done (SCM smob)
         dy should always be 0.5, 0.0, 1.0, but provide safety margin
         for rounding errors.
       */
-      if (dy < 1.1)
+      if (dy < 0.1 + threshold)
         {
           if (parity)
             {
@@ -1184,6 +1185,7 @@ ADD_INTERFACE (Stem,
                "neutral-direction "
                "no-stem-extend "
                "note-heads "
+               "note-collision-threshold "
                "positioning-done "
                "rests "
                "stem-begin-position "
index 831a4790b08da67363a9106c7c4ff24ebe7aa4e1..e3f8cba3e8c7393b6a0ed493164c231842fb2541 100644 (file)
@@ -170,7 +170,6 @@ Translator_group::create_child_translator (SCM sev)
         type = get_translator (definition);
       else if (ly_is_pair (definition))
         {
-          type = get_translator (ly_symbol2scm ("Scheme_engraver"));
           is_scheme = true;
         }
       else if (ly_is_procedure (definition))
@@ -179,17 +178,15 @@ Translator_group::create_child_translator (SCM sev)
           // an argument and evaluates to an a-list scheme engraver
           // definition.
           definition = scm_call_1 (definition, cs);
-          type = get_translator (ly_symbol2scm ("Scheme_engraver"));
           is_scheme = true;
         }
 
-      if (!type)
+      if (!is_scheme && !type)
         warning (_f ("cannot find: `%s'", ly_symbol2string (scm_car (s)).c_str ()));
       else
         {
-          Translator *instance = type->clone ();
-          if (is_scheme)
-            dynamic_cast<Scheme_engraver *> (instance)->init_from_scheme (definition);
+          Translator *instance = is_scheme ? new Scheme_engraver (definition)
+            : type->clone ();
 
           SCM str = instance->self_scm ();
 
index 9e6f8618f0698d12195bc03cf2ed4ad096df4521..24007889f41f818793652c66165c83556f1537a4 100644 (file)
@@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
 
 %}
 
-\version "2.19.32"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.33"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index d65a798b1fd60b9e44a77afdfe130065401e4981..9937a5c633e5d7205dc878e75b0ae9f9508b9b62 100644 (file)
@@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
 
 %}
 
-\version "2.19.32"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.33"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index fcf712a1ee51c7f262a2f40e2fc98e4266049af8..7657ef016615e20b91f6f2cceffd3a0f911af079 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.32\n"
+"Project-Id-Version: lilypond 2.19.33\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2015-11-22 12:43+0000\n"
+"POT-Creation-Date: 2015-12-06 15:25+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3022,7 +3022,7 @@ msgstr ""
 msgid "fatal error.  Couldn't find type: %s"
 msgstr ""
 
-#: translator-group.cc:187
+#: translator-group.cc:185
 #, c-format
 msgid "cannot find: `%s'"
 msgstr ""
@@ -3413,31 +3413,31 @@ msgstr ""
 msgid "Undefined parent event class `~S'"
 msgstr ""
 
-#: define-markup-commands.scm:1094
+#: define-markup-commands.scm:1191
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:2937
+#: define-markup-commands.scm:3031
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr ""
 
-#: define-markup-commands.scm:3413
+#: define-markup-commands.scm:3507
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr ""
 
-#: define-markup-commands.scm:3414
+#: define-markup-commands.scm:3508
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr ""
 
-#: define-markup-commands.scm:3659
+#: define-markup-commands.scm:3753
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr ""
 
-#: define-markup-commands.scm:3872
+#: define-markup-commands.scm:3966
 #, scheme-format
 msgid "not a valid duration string: ~a - ignoring"
 msgstr ""
index 90068663d4176205273fc9ccd618a031fc0f228e..51cb9adf11e5577a22768a946daffba8573a3958 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -13,14 +13,14 @@ msgstr ""
 "Project-Id-Version: lilypond 2.19.26\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2015-08-27 10:48+0100\n"
-"PO-Revision-Date: 2015-11-01 21:40+0100\n"
+"PO-Revision-Date: 2015-12-10 21:02+0100\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\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"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: book_base.py:26
@@ -326,7 +326,7 @@ msgid ""
 "* keySignature settings made with \\property\n"
 msgstr ""
 "Het alteraties-veld van de Scheme-toonhoogtes werd met 2 vermenigvuldigd\n"
-"om alteraties van een kwarttoon te ondersteunen. U dient de volgende constructies handmatig bij te werken:\n"
+"om accidenten van een kwarttoon te ondersteunen. U dient de volgende constructies handmatig bij te werken:\n"
 "\n"
 "* aanroepen van ly:make-pitch en ly:pitch-alteration\n"
 "* met \\property aangemaakte instellingen voor keySignature\n"
@@ -486,7 +486,7 @@ msgstr "cautionary-style als verouderd aanmerken; eigenschappen van AccidentalCa
 
 #: convertrules.py:2536
 msgid "Rename accidental glyphs, use glyph-name-alist."
-msgstr "Hernoem alteratiesymbolen; gebruik glyph-name-alist."
+msgstr "Hernoem accidentsymbolen; gebruik glyph-name-alist."
 
 #: convertrules.py:2591
 msgid "edge-text settings for TextSpanner"
@@ -621,7 +621,7 @@ msgid ""
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Dash parameters for slurs and ties are now in dash-definition"
 msgstr ""
-"\\bar \".\" heeft nu een dikke verticale streep als resultaat\n"
+"\\bar \".\" produceert nu een dikke verticale streep\n"
 "ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
 "Streepparameters voor legatobogen en overbindingen zitten nu bij dash-definition"
 
@@ -648,16 +648,16 @@ msgid ""
 "template replaced by new `Dynamics' context."
 msgstr ""
 "De regels in verband met automatische waardestrepen zijn veranderd.\n"
-"override-auto-beam-setting en revert-auto-beam-setting werden weggewerkt.\n"
+"override-auto-beam-setting en revert-auto-beam-setting werden verwijderd.\n"
 "\\overrideBeamSettings werd toegevoegd.\n"
-"beatGrouping werd weggewerkt.\n"
-"Verschillende instellingen voor verticale lay-out.\n"
+"beatGrouping werd verwijderd.\n"
+"Andere instellingen voor verticale lay-out.\n"
 "ly:system-start-text::print -> system-start-text::print\n"
 "Beam #'thickness -> Beam #'beam-thickness\n"
 "ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
 "ly:ambitus::print -> ambitus::print\n"
 "De expliciete definitie van de dynamische context uit het sjabloon\n"
-"'Gecentreerde pianodynamiek' werd vervangen door de nieuwe context 'Dynamiek'."
+"'Gecentreerde pianodynamiek' werd vervangen door de nieuwe context 'Dynamics'."
 
 #: convertrules.py:2868
 msgid "    Autobeam settings are now overriden with \\overrideBeamSettings.\n"
@@ -831,42 +831,42 @@ msgstr "Deze interne eigenschap werd vervangen door round-up-to-longer-rest, rou
 
 #: convertrules.py:3174
 msgid "Creation of a Flag grob and moving of certain Stem properties to this grob"
-msgstr "Aanmaken van een grob Flag en ernaartoe overplaatsen van sommige eigenschappen van Stem"
+msgstr "Aanmaken van een Flag-grob en ernaartoe overplaatsen van sommige eigenschappen van Stem"
 
 #: convertrules.py:3210
 msgid "consistent-broken-slope is now handled through the positions callback.\n"
-msgstr ""
+msgstr "consistent-broken-slope wordt nu behandeld door de terugaanroep-functie positions.\n"
 
 #: convertrules.py:3211
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
-msgstr ""
+msgstr "input/regression/beam-broken-classic.ly laat zien hoe defecte waardestrepen nu behandeld worden.\n"
 
 #: convertrules.py:3372
 msgid "beamExceptions controls whole-measure beaming."
-msgstr ""
+msgstr "beamExceptions regelt het plaatsen van waardestrepen over de hele maat."
 
 #: convertrules.py:3609
 msgid "Flag.transparent and Flag.color inherit from Stem"
-msgstr ""
+msgstr "Flag.transparent en Flag.color erven over van Stem"
 
 #: convertrules.py:3675
 msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
-msgstr ""
+msgstr "Staff-padding regelt nu de afstand tot de basislijn, niet tot het dichtstbijzijnde punt."
 
 #: fontextract.py:25
 #, python-format
 msgid "Scanning %s"
-msgstr "Scannen %s"
+msgstr "Scannen van %s"
 
 #: fontextract.py:70
 #, python-format
 msgid "Extracted %s"
-msgstr "Geëxtraheerd %s"
+msgstr " %s is geëxtraheerd"
 
 #: fontextract.py:85
 #, python-format
 msgid "Writing fonts to %s"
-msgstr "Schrijven van fonts naar %s"
+msgstr "Schrijven van lettertypes naar %s"
 
 #: lilylib.py:101
 #, python-format
@@ -896,7 +896,7 @@ msgstr "Aanroepen van '%s'"
 #: lilylib.py:196 lilylib.py:257
 #, python-format
 msgid "Running %s..."
-msgstr "Draaien van %s..."
+msgstr "Uitvoeren van %s..."
 
 #: lilylib.py:333
 #, python-format
@@ -905,36 +905,36 @@ msgstr "Gebruik:  %s"
 
 #: musicexp.py:224 musicexp.py:229
 msgid "Language does not support microtones contained in the piece"
-msgstr ""
+msgstr "De taal ondersteunt de microtonen uit dit stuk niet."
 
 #: musicexp.py:491
 msgid "Tuplet brackets of curved shape are not correctly implemented"
-msgstr ""
+msgstr "Antimetrische-figuurboogjes zijn niet correct geïmplementeerd"
 
 #: musicexp.py:677
 #, python-format
 msgid "unable to set the music %(music)s for the repeat %(repeat)s"
-msgstr ""
+msgstr "kan de muziek %(music)s niet instellen op de herhaling %(repeat)s"
 
 #: musicexp.py:686
 msgid "encountered repeat without body"
-msgstr "herhaling gevonden zonder inhoud"
+msgstr "herhaling zonder inhoud gevonden"
 
 #. no self.elements!
 #: musicexp.py:856
 #, python-format
 msgid "Grace note with no following music: %s"
-msgstr ""
+msgstr "Voorslag zonder dat er muziek op volgt: %s"
 
 #: musicexp.py:1018
 #, python-format
 msgid "Invalid octave shift size found: %s. Using no shift."
-msgstr ""
+msgstr "Ongeldige grootte van octaafverschuiving gevonden: %s. Geen verschuiving toegepast."
 
 #: musicexp.py:1476
 #, python-format
 msgid "Unable to convert alteration %s to a lilypond expression"
-msgstr "Kan verandering %s niet naar een Lilypond-expressie converteren"
+msgstr "Kan alteratie %s niet naar een Lilypond-expressie converteren"
 
 #. TODO: Handle pieces without a time signature!
 #: musicxml.py:361
@@ -948,7 +948,7 @@ msgstr "Kan maatsoort niet begrijpen.  Teruggevallen op 4/4."
 #: musicxml.py:435
 #, python-format
 msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!"
-msgstr ""
+msgstr "Er werd een toonsoort-alteratie-octaaf opgegeven voor een niet-bestaand alteratienummer %s; beschikbare nummers: %s."
 
 #: musicxml.py:523
 #, python-format
@@ -1014,8 +1014,8 @@ msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
 msgstr ""
-"Actualiseert LilyPond-invoer naar nieuwere versie.  Standaard actualiseert het\n"
-"vanaf de versie uit de \\version opdracht, naar de huidige LilyPond-versie."
+"Waardeert LilyPond-invoer op naar een nieuwere versie.  Standaard wordt van de\n"
+"versie uit de opdracht \\version naar de huidige LilyPond-versie opgewaardeerd."
 
 #: convert-ly.py:50
 msgid "If FILE is `-', read from standard input."
@@ -1048,11 +1048,11 @@ msgstr "beginnen bij VERSIE (standaard: de \\version gevonden in bestand)"
 
 #: convert-ly.py:105
 msgid "edit in place"
-msgstr "bestand ter plekke bewerken"
+msgstr "ter plekke bewerken"
 
 #: convert-ly.py:109 lilypond-book.py:179 musicxml2ly.py:2627
 msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
-msgstr "Print log-berichten volgens LOG-NIVEAU (NONE, ERROR, WARNING, PROGRESS (standaard), DEBUG)."
+msgstr "Log-berichten weergeven volgens LOG-NIVEAU (NONE, ERROR, WARNING, PROGRESS (standaard), DEBUG)."
 
 #: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
 #: musicxml2ly.py:2629 main.cc:177
@@ -1061,16 +1061,16 @@ msgstr "LOG-NIVEAU"
 
 #: convert-ly.py:117
 msgid "do not add \\version command if missing"
-msgstr "geen commando \\version toevoegen als deze ontbreekt"
+msgstr "commando \\version niet toevoegen als deze ontbreekt"
 
 #: convert-ly.py:123
 #, python-format
 msgid "force updating \\version number to %s"
-msgstr "bijwerken van \\version number naar %s afdwingen"
+msgstr "bijwerken van \\version naar versienummer %s afdwingen"
 
 #: convert-ly.py:129
 msgid "only update \\version number if file is modified"
-msgstr "\\version number alleen bijwerken wanneer bestand gewijzigd is"
+msgstr "\\version alleen naar nieuw versienummer bijwerken wanneer bestand gewijzigd is"
 
 #: convert-ly.py:135
 #, python-format
@@ -1125,6 +1125,8 @@ msgid ""
 "%s: Invalid version string `%s' \n"
 "Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'"
 msgstr ""
+"%s: Ongeldig versienummer '%s';\n"
+"een geldig versienummer bestaat uit drie getallen, gescheiden door punten, bijv. '2.8.12'"
 
 #: convert-ly.py:384
 #, python-format
@@ -1154,7 +1156,7 @@ msgstr "BESTAND"
 
 #: 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 dokument."
+msgstr "Verwerkt LilyPond-fragmenten uit een hybride HTML-, LaTeX-, texinfo- of DocBook-document."
 
 #: lilypond-book.py:87
 msgid "BOOK"
@@ -1171,7 +1173,7 @@ msgstr "FILTER"
 
 #: lilypond-book.py:130
 msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
-msgstr "snippers door FILTER sluizen (standaard: 'convert-ly -n -')"
+msgstr "fragmenten door FILTER sluizen (standaard: 'convert-ly -n -')"
 
 #: lilypond-book.py:134
 msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
@@ -1204,7 +1206,7 @@ msgstr "linkerkant van muziek opvullen (in mm) om muziek uit te lijnen ondanks o
 
 #: lilypond-book.py:162
 msgid "Print lilypond log messages according to LOGLEVEL"
-msgstr "Lilypond-log-berichten volgens LOG-NIVEAU printen"
+msgstr "Lilypond-logberichten volgens LOGNIVEAU printen"
 
 #: lilypond-book.py:168
 msgid "write lily-XXX files to DIR, link into --output dir"
@@ -1212,11 +1214,11 @@ msgstr "lily-XXX-bestanden naar MAP schrijven, linken naar de --output map"
 
 #: lilypond-book.py:173
 msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
-msgstr ""
+msgstr "Het extra pythonpakket PAKKET laden (met bijv. een aangepaste uitvoeropmaak)"
 
 #: lilypond-book.py:174
 msgid "PACKAGE"
-msgstr ""
+msgstr "PAKKET"
 
 #: lilypond-book.py:186
 msgid "write output to DIR"
@@ -1237,19 +1239,19 @@ msgstr "Lilypond-uitvoer omleiden"
 
 #: lilypond-book.py:201
 msgid "Compile snippets in safe mode"
-msgstr "snippers compileren in veilige modus"
+msgstr "Fragmenten compileren in veilige modus"
 
 #: lilypond-book.py:207
 msgid "do not fail if no lilypond output is found"
-msgstr ""
+msgstr "niet afbreken als er geen lilypond-uitvoer gevonden wordt"
 
 #: lilypond-book.py:213
 msgid "do not fail if no PNG images are found for EPS files"
-msgstr ""
+msgstr "niet afbreken als er geen PNG-afbeeldingen gevonden worden voor EPS-bestanden"
 
 #: lilypond-book.py:219
 msgid "write snippet output files with the same base name as their source file"
-msgstr ""
+msgstr "aan uitvoerbestanden met fragmenten eenzelfde basisbestandsnaam geven als het oorspronkelijke bestand"
 
 #: lilypond-book.py:223 midi2ly.py:1090 musicxml2ly.py:2596
 msgid "be verbose"
@@ -1260,22 +1262,24 @@ msgid ""
 "run executable PROG instead of latex, or in\n"
 "case --pdf option is set instead of pdflatex"
 msgstr ""
+"het programma PROG uitvoeren in plaats van latex, of in\n"
+"plaats van pdflatex als de optie --pdf gebruikt werd"
 
 #: lilypond-book.py:241 lilypond-book.py:246
 msgid "PROG"
-msgstr ""
+msgstr "PROG"
 
 #: lilypond-book.py:245
 msgid "run executable PROG instead of texi2pdf"
-msgstr ""
+msgstr "het programma PROG uitvoeren in plaats van texi2pdf"
 
 #: lilypond-book.py:252
 msgid "create PDF files for use with PDFTeX"
-msgstr "PDF-bestanden maken voor gebruik met PDFTeX"
+msgstr "PDF-bestanden maken om met PDFTeX te gebruiken"
 
 #: lilypond-book.py:463
 msgid "Writing snippets..."
-msgstr "Schrijven van snippers..."
+msgstr "Schrijven van fragmenten..."
 
 #: lilypond-book.py:468
 msgid "Processing..."
@@ -1283,7 +1287,7 @@ msgstr "Verwerken..."
 
 #: lilypond-book.py:473
 msgid "All snippets are up to date..."
-msgstr "Alle snippers zijn up-to-date..."
+msgstr "Alle fragmenten zijn up-to-date..."
 
 #: lilypond-book.py:475
 msgid "Linking files..."
@@ -1292,7 +1296,7 @@ msgstr "Linken van bestanden..."
 #: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
-msgstr "kan formaat niet bepalen voor: %s"
+msgstr "kan opmaak niet bepalen voor: %s"
 
 #: lilypond-book.py:504
 #, python-format
@@ -1335,16 +1339,16 @@ msgstr "Verwijderen van '%s'"
 #: lilypond-book.py:727
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
-msgstr "Instellen van Lilypond-log-niveau op %s"
+msgstr "Instellen van logniveau van Lilypond op %s"
 
 #: lilypond-book.py:731
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
-msgstr "Instellen van Lilypond-log-niveau op %s (uit omgevingsvariabele LILYPOND_LOGLEVEL)"
+msgstr "Instellen van logniveau van Lilypond op %s (uit omgevingsvariabele LILYPOND_LOGLEVEL)"
 
 #: lilypond-book.py:734
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
-msgstr "Instellen van Lilyponds uitvoer op '--verbose', geïmpliceerd door Lilypond-books instelling"
+msgstr "Instellen van uitvoer van Lilypond op '--verbose', als gevolg van de instellingen van Lilypond-book"
 
 #: midi2ly.py:90
 msgid "warning: "
@@ -1374,7 +1378,7 @@ msgstr "Converteren van %s naar LilyPond-invoer.\n"
 
 #: midi2ly.py:1050
 msgid "print absolute pitches"
-msgstr "absolute toonhoogten printen"
+msgstr "absolute toonhoogten afdrukken"
 
 #: midi2ly.py:1052 midi2ly.py:1080
 msgid "DUR"
@@ -1382,31 +1386,31 @@ msgstr "DUUR"
 
 #: midi2ly.py:1053
 msgid "quantise note durations on DUR"
-msgstr "nootlengtes op DUUR kwantiseren"
+msgstr "nootlengtes op DUUR quantizen"
 
 #: midi2ly.py:1056
 msgid "debug printing"
-msgstr ""
+msgstr "afdrukken op fouten onderzoeken"
 
 #: midi2ly.py:1059
 msgid "print explicit durations"
-msgstr "expliciete nootlengtes printen"
+msgstr "expliciete nootlengtes afdrukken"
 
 #: midi2ly.py:1064
 msgid "prepend FILE to output"
-msgstr "BESTAND voorvoegen aan uitvoer"
+msgstr "uitvoer laten voorafgaan door BESTAND"
 
 #: midi2ly.py:1068
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr "toonsoort zetten: VER=+kruizen|-mollen; MINEUR=1"
+msgstr "toonsoort zetten: ALT=+kruisen|-mollen; MINEUR=1"
 
 #: midi2ly.py:1069
 msgid "ALT[:MINOR]"
-msgstr "VER[:MINEUR]"
+msgstr "ALT[:MINEUR]"
 
 #: midi2ly.py:1074
 msgid "preview of first 4 bars"
-msgstr "voorproefje van eerste vier maten"
+msgstr "voorbeeldweergave van eerste vier maten"
 
 #: midi2ly.py:1078
 msgid "suppress progress messages and warnings about excess voices"
@@ -1414,7 +1418,7 @@ msgstr "voortgangsberichten en waarschuwingen over te veel stemmen onderdrukken"
 
 #: midi2ly.py:1079
 msgid "quantise note starts on DUR"
-msgstr "het begin van noten op DUUR kwantiseren"
+msgstr "het begin van noten op DUUR quantizen"
 
 #: midi2ly.py:1083
 msgid "use s instead of r for rests"
@@ -1426,7 +1430,7 @@ msgstr "DUUR*NOEM/TEL"
 
 #: midi2ly.py:1088
 msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "tuplet-lengtes van DUUR*NOEM/TEL toestaan"
+msgstr "een lengte van DUUR*NOEMER/TELLER toestaan voor een antimetrische figuur"
 
 #: midi2ly.py:1098
 msgid "treat every text as a lyric"
@@ -1438,70 +1442,70 @@ msgstr "Voorbeelden"
 
 #: midi2ly.py:1125
 msgid "no files specified on command line."
-msgstr "geen bestanden gegeven op de opdrachtregel"
+msgstr "geen bestanden vermeld op de opdrachtregel"
 
 #: musicxml2ly.py:228
 #, python-format
 msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
-msgstr ""
+msgstr "Een door %s gemaakt bestand gevonden met foutieve informatie over waardestrepen. Alle informatie in verband met waardestrepen uit het MusicXML-bestand zal overgeslagen worden."
 
 #: musicxml2ly.py:247 musicxml2ly.py:249
 #, python-format
 msgid "Unprocessed PartGroupInfo %s encountered"
-msgstr ""
+msgstr "Niet-verwerkte PartGroupInfo %s gevonden"
 
 #: musicxml2ly.py:500
 #, python-format
 msgid "Encountered note at %s without type and duration (=%s)"
-msgstr ""
+msgstr "Op %s is een noot zonder type en lengte gevonden (=%s)"
 
 #: musicxml2ly.py:520
 #, python-format
 msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
-msgstr ""
+msgstr "Rationele duur met noemer %s gevonden; kan niet naar lilypond-duur omgezet worden"
 
 #: musicxml2ly.py:767
 msgid "Unable to extract key signature!"
-msgstr ""
+msgstr "Kan de voortekening niet afleiden."
 
 #: musicxml2ly.py:794
 #, python-format
 msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
-msgstr ""
+msgstr "onbekende toonladder %s; verwachtte 'major' of 'minor' of een kerktoonladder"
 
 #: musicxml2ly.py:932
 #, python-format
 msgid "Encountered unprocessed marker %s\n"
-msgstr ""
+msgstr "Een niet-verwerkt merkteken %s gevonden\n"
 
 #: musicxml2ly.py:1026
 #, python-format
 msgid "unknown span event %s"
-msgstr "onbekende span-gebeurtenis %s"
+msgstr "onbekende tijdspannegebeurtenis %s"
 
 #: musicxml2ly.py:1036
 #, python-format
 msgid "unknown span type %s for %s"
-msgstr "onbekend span-type %s voor %s"
+msgstr "onbekend tijdspannetype %s voor %s"
 
 #: musicxml2ly.py:1456
 msgid "Unknown metronome mark, ignoring"
-msgstr "Onbekende metronoommarkering;  genegeerd"
+msgstr "Onbekende metronoomaanduiding;  genegeerd"
 
 #. TODO: Implement the other (more complex) way for tempo marks!
 #: musicxml2ly.py:1461
 msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
-msgstr ""
+msgstr "Metronoomaanduidingen met complexe relaties (<metronome-note> in MusicXML) zijn nog niet geïmplementeerd."
 
 #: musicxml2ly.py:1663
 #, python-format
 msgid "Unable to convert chord type %s to lilypond."
-msgstr ""
+msgstr "Kan akkoordtype %s niet naar lilypond converteren."
 
 #: musicxml2ly.py:1816
 #, python-format
 msgid "drum %s type unknown, please add to instrument_drumtype_dict"
-msgstr ""
+msgstr "slagwerktype %s is onbekend; voeg het toe aan instrument_drumtype_dict"
 
 #: musicxml2ly.py:1820
 msgid "cannot find suitable event"
@@ -1510,12 +1514,12 @@ msgstr "kan geen geschikte gebeurtenis vinden"
 #: musicxml2ly.py:1968
 #, python-format
 msgid "Negative skip %s (from position %s to %s)"
-msgstr ""
+msgstr "Terugsprong %s (van positie %s naar %s)"
 
 #: musicxml2ly.py:2109
 #, python-format
 msgid "Negative skip found: from %s to %s, difference is %s"
-msgstr ""
+msgstr "Terugsprong gevonden: van %s naar %s, verschil is %s"
 
 #: musicxml2ly.py:2190
 #, python-format
@@ -1524,24 +1528,24 @@ msgstr "onverwachte %s;  verwachtte %s of %s of %s"
 
 #: musicxml2ly.py:2296
 msgid "Encountered closing slur, but no slur is open"
-msgstr ""
+msgstr "Einde van een legatoboog gevonden, maar geen begin"
 
 #: musicxml2ly.py:2299
 msgid "Cannot have two simultaneous (closing) slurs"
-msgstr ""
+msgstr "Twee gelijktijdige (eindes van) legatobogen is onmogelijk"
 
 #: musicxml2ly.py:2308
 msgid "Cannot have a slur inside another slur"
-msgstr ""
+msgstr "Een legatoboog binnenin een andere is onmogelijk"
 
 #: musicxml2ly.py:2311
 msgid "Cannot have two simultaneous slurs"
-msgstr ""
+msgstr "Twee gelijktijdige legatobogen is onmogelijk"
 
 #: musicxml2ly.py:2445
 #, python-format
 msgid "cannot simultaneously have more than one mode: %s"
-msgstr ""
+msgstr "Meer dan Ã©Ã©n toonladder tegelijkertijd is onmogelijk: %s"
 
 #: musicxml2ly.py:2553
 msgid "Converting to LilyPond expressions..."
@@ -1569,6 +1573,10 @@ msgid ""
 "    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
+"Copyright (c) 2005--2015\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> en\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 
 #: musicxml2ly.py:2602
 msgid "use lxml.etree; uses less memory and cpu time"
@@ -1596,19 +1604,19 @@ msgstr "deze TAAL gebruiken voor toonhoogtenamen; b.v. 'deutsch' voor nootnamen
 
 #: musicxml2ly.py:2638
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
-msgstr ""
+msgstr "de aanwijzingen (^, _ of -) voor articulatie, dynamiek en dergelijke niet converteren"
 
 #: musicxml2ly.py:2644
 msgid "do not convert exact vertical positions of rests"
-msgstr ""
+msgstr "de exacte verticale plaatsing van rusten niet converteren"
 
 #: musicxml2ly.py:2650
 msgid "do not convert the exact page layout and breaks"
-msgstr ""
+msgstr "de exacte paginaopmaak en pagina-eindes niet converteren"
 
 #: musicxml2ly.py:2656
 msgid "do not convert beaming information, use lilypond's automatic beaming instead"
-msgstr ""
+msgstr "geen informatie i.v.m. waardestrepen converteren; lilypond in de plaats daarvan automatisch waardestrepen laten plaatsen"
 
 #: musicxml2ly.py:2664
 msgid "set output filename to FILE, stdout if -"
@@ -1616,21 +1624,21 @@ msgstr "uitvoer opslaan in BESTAND (standaarduitvoer indien '-')"
 
 #: musicxml2ly.py:2670
 msgid "activate midi-block"
-msgstr ""
+msgstr "midi-blok activeren"
 
 #: musicxml2ly.py:2754
 #, python-format
 msgid "unknown part in part-list: %s"
-msgstr ""
+msgstr "onbekende stem in part-list (stemmenlijst): %s"
 
 #: musicxml2ly.py:2816
 msgid "Input is compressed, extracting raw MusicXML data from stdin"
-msgstr ""
+msgstr "de invoer is gecomprimeerd; van standaardinvoer worden ruwe MusicXML data uitgepakt"
 
 #: musicxml2ly.py:2829
 #, python-format
 msgid "Input file %s is compressed, extracting raw MusicXML data"
-msgstr ""
+msgstr "invoerbestand %s is gecomprimeerd; ruwe MusicXML data worden uitgepakt"
 
 # FIXME: uncapitalize Standard
 #: musicxml2ly.py:2859
@@ -1699,7 +1707,7 @@ msgstr "onbekend log-niveau '%s';  standaard wordt gebruikt (INFO)"
 #: warn.cc:112
 #, c-format
 msgid "%d expected warning(s) not encountered: "
-msgstr ""
+msgstr "%d verwachte waarschuwing(en) niet aangetroffen: "
 
 #: warn.cc:183
 #, c-format
@@ -1733,27 +1741,26 @@ msgstr "waarschuwing wordt onderdrukt: %s"
 #: accidental-engraver.cc:180
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
-msgstr "voorteken zetlijst moet beginnen met context-naam: %s"
+msgstr "zetlijst van accidenten moet beginnen met context-naam: %s"
 
 #: accidental-engraver.cc:207
 #, c-format
 msgid "procedure or context-name expected for accidental rule, found %s"
-msgstr "procedure of context-naam werd verwacht voor toevallige regel, gevonden: %s"
+msgstr "procedure of context-naam werd verwacht voor accidentregel; gevonden: %s"
 
 #: accidental.cc:141
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
-msgstr "Kan gliefnaam niet vinden voor verandering %s"
+msgstr "Kan symboolnaam niet vinden voor alteratie %s"
 
 #: accidental.cc:157
-#, fuzzy
 msgid "natural alteration glyph not found"
-msgstr "glief voor herstelteken niet gevonden"
+msgstr "stamtoonalteratiesymbool niet gevonden"
 
 #: all-font-metrics.cc:159
 #, c-format
 msgid "cannot find font: `%s'"
-msgstr "kan font niet vinden: '%s'"
+msgstr "kan lettertype niet vinden: '%s'"
 
 #: apply-context-iterator.cc:42
 msgid "\\applycontext argument is not a procedure"
@@ -1761,7 +1768,7 @@ msgstr "argument van \\applycontext is geen procedure"
 
 #: arpeggio.cc:138
 msgid "no heads for arpeggio found?"
-msgstr ""
+msgstr "geen nootkoppen voor arpeggio gevonden?"
 
 #: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
@@ -1779,10 +1786,12 @@ msgstr "verwijderen van deze verticale groep"
 #, c-format
 msgid "\"%s\" is not a valid outside-staff-placement-directive"
 msgstr ""
+"\"%s\" is geen juist outside-staff-placement-directive\n"
+"(aanwijzing voor plaatsing buiten de notenbalk)"
 
 #: axis-group-interface.cc:788
 msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr "een buiten-notenbalk object moet een richting hebben, gebruik standaardwaarde omhoog"
+msgstr "een object buiten de notenbalk moet een richting hebben; de standaardwaarde is erboven"
 
 #: bar-check-iterator.cc:84
 #, c-format
@@ -1799,11 +1808,11 @@ msgstr "onbeëindigde waardestreep"
 
 #: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
 msgid "stem must have Rhythmic structure"
-msgstr "stok moet Ritmische structuur hebben"
+msgstr "nootstok moet ritmische structuur hebben"
 
 #: beam-engraver.cc:293
 msgid "stem does not fit in beam"
-msgstr "stok past niet in waardestreep"
+msgstr "nootstok past niet in waardestreep"
 
 #: beam-engraver.cc:294
 msgid "beam was started here"
@@ -1816,7 +1825,7 @@ msgstr "geen werkbare initiële configuratie gevonden: kan wellicht geen goede w
 
 #: beam.cc:183
 msgid "removing beam with no stems"
-msgstr "verwijderen van waardestreep zonder stokken"
+msgstr "verwijderen van waardestreep zonder nootstokken"
 
 #: change-iterator.cc:34
 #, c-format
@@ -1838,7 +1847,7 @@ msgstr "kan context om naar over te schakelen niet vinden"
 #: change-iterator.cc:78
 #, c-format
 msgid "not changing to same context type: %s"
-msgstr "niet wisselen naar zelfde type context: %s"
+msgstr "er wordt niet gewisseld naar eenzelfde type context: %s"
 
 #. FIXME: incomprehensible message
 #: change-iterator.cc:82
@@ -1856,25 +1865,25 @@ msgstr "onbeëindigd akkoordtremolo"
 #: clef.cc:65
 #, c-format
 msgid "clef `%s' not found"
-msgstr "sleutel `%s' niet gevonden"
+msgstr "sleutel '%s' niet gevonden"
 
 #: cluster.cc:120
 #, c-format
 msgid "unknown cluster style `%s'"
-msgstr "onbekende klusterstijl `%s'"
+msgstr "onbekende clusterstijl '%s'"
 
 #: cluster.cc:157
 msgid "junking empty cluster"
-msgstr "verschroot lege cluster"
+msgstr "lege cluster wordt weggegooid"
 
 #: coherent-ligature-engraver.cc:110
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr "Coherent_ligature_engraver: zet `spacing-increment=0.01': ptr=%ul"
+msgstr "Coherent_ligature_engraver: instellen van 'spacing-increment=0.01': ptr=%ul"
 
 #: constrained-breaking.cc:187 constrained-breaking.cc:206
 msgid "cannot find line breaking that satisfies constraints"
-msgstr "kan geen regelbreuk vinden die aan voorwaarden voldoet"
+msgstr "kan geen regelafbreking vinden die beantwoordt aan de beperkingen"
 
 #: context-property.cc:46
 msgid "need symbol arguments for \\override and \\revert"
@@ -1883,12 +1892,12 @@ msgstr "heb symbool-argumenten nodig voor \\override en \\revert"
 #: context.cc:144
 #, c-format
 msgid "cannot find or create new `%s'"
-msgstr "kan '%s' niet vinden of nieuw maken"
+msgstr "kan '%s' niet vinden of aanmaken"
 
 #: context.cc:223
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
-msgstr "kan '%s' genaamd '%s' niet vinden of aanmaken"
+msgstr "kan '%s', genaamd '%s', niet vinden of aanmaken"
 
 #: context.cc:416
 #, c-format
@@ -1896,14 +1905,14 @@ msgid "cannot find or create: `%s'"
 msgstr "kan '%s' niet vinden of aanmaken"
 
 #: context.cc:430
-#, fuzzy, c-format
+#, c-format
 msgid "cannot find or create new Bottom = \"%s\""
-msgstr "kan niet vinden of nieuw maken `%s'"
+msgstr "kan geen nieuwe Bottom = \"%s\" vinden of aanmaken"
 
 #: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
-msgstr "custode `%s' niet gevonden"
+msgstr "custos '%s' niet gevonden"
 
 #: dispatcher.cc:82
 msgid "Event class should be a list"
@@ -1912,20 +1921,20 @@ msgstr "Gebeurtenisklasse hoort een lijst te zijn"
 #: dispatcher.cc:165
 #, c-format
 msgid "Junking event: %s"
-msgstr "Gebeurtenis %s wordt weggegooid"
+msgstr "Gebeurtenis wordt weggegooid: %s"
 
 #: dispatcher.cc:279
 msgid "Attempting to remove nonexisting listener."
-msgstr ""
+msgstr "Poging om onbestaande luisteraar te verwijderen."
 
 #: dispatcher.cc:305
 msgid "Already listening to dispatcher, ignoring request"
-msgstr ""
+msgstr "Er wordt reeds op de dispatcher geluisterd; verzoek wordt genegeerd"
 
 #: dots.cc:48
 #, c-format
 msgid "dot `%s' not found"
-msgstr "punt `%s' niet gevonden"
+msgstr "punt '%s' niet gevonden"
 
 #: dynamic-engraver.cc:169
 #, c-format
@@ -1933,6 +1942,8 @@ msgid ""
 "unknown crescendo style: %s\n"
 "defaulting to hairpin."
 msgstr ""
+"onbekende crescendostijl: %s\n"
+"het standaardsymbool vogelbek wordt gebruikt."
 
 #: dynamic-engraver.cc:234 slur-proto-engraver.cc:119
 #, c-format
@@ -1944,22 +1955,19 @@ msgstr "onbeëindigde %s"
 #. value within the available range.
 #: dynamic-performer.cc:129
 msgid "(De)crescendo with unspecified starting volume in MIDI."
-msgstr ""
+msgstr "(De)crescendo met een niet-gespecificeerd beginvolume in MIDI."
 
 #: episema-engraver.cc:75
-#, fuzzy
 msgid "already have an episema"
-msgstr "heb al een waardestreep"
+msgstr "heb al een episema"
 
 #: episema-engraver.cc:88
-#, fuzzy
 msgid "cannot find start of episema"
-msgstr "kan begin van ligatuur niet vinden"
+msgstr "kan begin van episema niet vinden"
 
 #: episema-engraver.cc:137
-#, fuzzy
 msgid "unterminated episema"
-msgstr "onbeëindigde waardestreep"
+msgstr "onbeëindigd episema"
 
 #: extender-engraver.cc:169 extender-engraver.cc:178
 msgid "unterminated extender"
@@ -1968,64 +1976,63 @@ msgstr "onbeëindigde extender"
 #: flag.cc:133
 #, c-format
 msgid "flag `%s' not found"
-msgstr "vlag '%s' is niet gevonden"
+msgstr "vlag '%s' niet gevonden"
 
 #: flag.cc:153
 #, c-format
 msgid "flag stroke `%s' not found"
-msgstr "vlagstreep '%s' is niet gevonden"
+msgstr "vlagstreep '%s' niet gevonden"
 
 #: font-config-scheme.cc:151 font-config.cc:82
 #, c-format
 msgid "failed adding font directory: %s"
-msgstr "toevoegen van font-map is mislukt: %s"
+msgstr "toevoegen van lettertypemap is mislukt: %s"
 
 #: font-config-scheme.cc:153 font-config.cc:84
 #, c-format
 msgid "Adding font directory: %s"
-msgstr "Toevoegen van font-map: %s"
+msgstr "Toevoegen van lettertypemap: %s"
 
 #: font-config-scheme.cc:167
 #, c-format
 msgid "failed adding font file: %s"
-msgstr "toevoegen van font-bestand is mislukt: %s"
+msgstr "toevoegen van lettertypebestand is mislukt: %s"
 
 #: font-config-scheme.cc:169
 #, c-format
 msgid "Adding font file: %s"
-msgstr "Toevoegen van font-bestand: %s"
+msgstr "Toevoegen van lettertypebestand: %s"
 
 #: font-config.cc:38
 msgid "Initializing FontConfig..."
 msgstr "Initialiseren van FontConfig..."
 
 #: font-config.cc:70
-#, fuzzy, c-format
+#, c-format
 msgid "failed to add fontconfig configuration file `%s'"
-msgstr "toevoegen van font-bestand is mislukt: %s"
+msgstr "toevoegen van configuratiebestand '%s' voor fontconfig is mislukt"
 
 #: font-config.cc:73
-#, fuzzy, c-format
+#, c-format
 msgid "Adding fontconfig configuration file: %s"
-msgstr "Toevoegen van font-bestand: %s"
+msgstr "Toevoegen van configuratiebestand voor fontconfig: %s"
 
 #: font-config.cc:86
 msgid "Building font database..."
-msgstr "Opbouwen van font-gegevensbank..."
+msgstr "Opbouwen van lettertypegegevensbank..."
 
 #: footnote-engraver.cc:87
 msgid "Must be footnote-event."
-msgstr ""
+msgstr "Moet een voetnootgebeurtenis zijn."
 
 #: general-scheme.cc:403
 #, c-format
 msgid "failed redirecting stderr to `%s'"
-msgstr ""
+msgstr "omleiden van standaardfoutuitvoer naar '%s' is mislukt"
 
 #: general-scheme.cc:482 output-ps.scm:48
-#, fuzzy
 msgid "Found infinity or nan in output.  Substituting 0.0"
-msgstr "Oneindig of nan gevonden in uitvoer.  Vervangen door 0.0"
+msgstr "Oneindige of niet-numerieke waarde gevonden in uitvoer. Vervangen door 0.0"
 
 #: glissando-engraver.cc:158
 msgid "unterminated glissando"
@@ -2042,7 +2049,7 @@ msgstr "Vertolken van muziek..."
 #: global-context-scheme.cc:125
 #, c-format
 msgid "elapsed time: %.2f seconds"
-msgstr "duur: %.2f seconden"
+msgstr "verstreken tijd: %.2f seconden"
 
 #: gregorian-ligature-engraver.cc:70
 #, c-format
@@ -2052,22 +2059,22 @@ msgstr "\\%s genegeerd"
 #: gregorian-ligature-engraver.cc:75
 #, c-format
 msgid "implied \\%s added"
-msgstr "impliciede \\%s toegevoeg"
+msgstr "impliciete \\%s is toegevoegd"
 
 #. ligature may not start with 2nd head of pes or flexa
 #: gregorian-ligature-engraver.cc:224
 msgid "cannot apply `\\~' on first head of ligature"
-msgstr "Kan `\\~' niet op eerste noot van ligatuur toepassen"
+msgstr "kan '\\~' niet op eerste nootkop van ligatuur toepassen"
 
 #. (pitch == prev_pitch)
 #: gregorian-ligature-engraver.cc:236
 msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr "kan `\\~' niet toepassen op noten met identieke toonhoogte"
+msgstr "kan '\\~' niet toepassen op nootkoppen met identieke toonhoogte"
 
 #: grob-interface.cc:68
 #, c-format
 msgid "Unknown interface `%s'"
-msgstr "onbekende interface `%s'"
+msgstr "Onbekende interface '%s'"
 
 #: grob-interface.cc:79
 #, c-format
@@ -2082,11 +2089,11 @@ msgstr "%d: %s"
 #: grob.cc:492
 #, c-format
 msgid "ignored infinite %s-offset"
-msgstr ""
+msgstr "oneindige %s-offset is genegeerd"
 
 #: hairpin.cc:60
 msgid "Asking for broken bound padding at a non-broken bound."
-msgstr ""
+msgstr "Verzoek om een doorbroken kant aan te vullen waar die niet doorbroken is."
 
 #: hairpin.cc:257
 msgid "decrescendo too small"
@@ -2106,7 +2113,7 @@ msgstr "verwijderen van onafgesloten streepje"
 
 #: hyphen-engraver.cc:118
 msgid "unterminated hyphen; removing"
-msgstr "verwijderen van onafgesloten streepje"
+msgstr "niet-afgesloten streepje; wordt verwijderd"
 
 #: includable-lexer.cc:71 lily-guile.cc:92 lily-parser-scheme.cc:108
 #, c-format
@@ -2124,16 +2131,16 @@ msgstr "positie onbekend"
 
 #: key-engraver.cc:197
 msgid "Incomplete keyAlterationOrder for key signature"
-msgstr ""
+msgstr "Onvolledige keyAlterationOrder voor de voortekening"
 
 #: key-signature-interface.cc:77
 #, c-format
 msgid "No glyph found for alteration: %s"
-msgstr "Geen glief gevonden voor verandering: %s"
+msgstr "Geen symbool gevonden voor alteratie: %s"
 
 #: key-signature-interface.cc:87
 msgid "alteration not found"
-msgstr "verandering niet gevonden"
+msgstr "alteratie is niet gevonden"
 
 #: ligature-bracket-engraver.cc:72 ligature-engraver.cc:109
 msgid "cannot find start of ligature"
@@ -2178,9 +2185,8 @@ msgid "perhaps a typing error?"
 msgstr "misschien een typefout?"
 
 #: lily-guile.cc:423
-#, fuzzy
 msgid "skipping assignment"
-msgstr "voer toewijzing toch door"
+msgstr "toewijzing wordt overgeslagen"
 
 #: lily-guile.cc:442
 #, c-format
@@ -2193,7 +2199,7 @@ msgstr "typecontrole is mislukt voor '%s'; waarde '%s' moet van type '%s' zijn"
 #. incompatible derived type.
 #: lily-guile.cc:462
 msgid "Wrong kind of "
-msgstr ""
+msgstr "Foutief soort "
 
 #: lily-lexer.cc:251
 msgid "include files are not allowed in safe mode"
@@ -2202,12 +2208,12 @@ msgstr "invoegbestanden zijn niet toegestaan in veilige modus"
 #: lily-lexer.cc:278
 #, c-format
 msgid "identifier name is a keyword: `%s'"
-msgstr "identifier-naam is een sleutelwoord: '%s'"
+msgstr "variabelenaam is een sleutelwoord: '%s'"
 
 #: lily-lexer.cc:299 lily-lexer.cc:312
 #, c-format
 msgid "%s:EOF"
-msgstr ""
+msgstr "%s:EOF (bestandseinde)"
 
 #: lily-modules.cc:81
 #, c-format
@@ -2222,12 +2228,12 @@ msgstr "Veranderen van werkmap naar: '%s'"
 #: lily-parser-scheme.cc:84
 #, c-format
 msgid "unable to change directory to: `%s'"
-msgstr "kan werkmap niet veranderen naar: '%s'"
+msgstr "kan niet van werkmap veranderen naar '%s'"
 
 #: lily-parser-scheme.cc:99
 #, c-format
 msgid "cannot find init file: `%s'"
-msgstr "kan init-bestand '%s' niet vinden"
+msgstr "kan initialisatiebestand '%s' niet vinden"
 
 #: lily-parser-scheme.cc:117
 #, c-format
@@ -2236,11 +2242,11 @@ msgstr "Verwerken van '%s'"
 
 #: lily-parser-scheme.cc:210
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
-msgstr ""
+msgstr "ly:parser-parse-string mag enkel bij een nieuwe ontleder gebruikt worden. Gebruik ly:parser-include-string ervoor in de plaats."
 
 #: lily-parser-scheme.cc:241
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
-msgstr ""
+msgstr "ly:parse-string-expression mag enkel bij een nieuwe ontleder gebruikt worden. Gebruik ly:parser-include-string ervoor in de plaats."
 
 #: lily-parser.cc:106
 msgid "Parsing..."
@@ -2249,16 +2255,16 @@ msgstr "Ontleden..."
 #: lookup.cc:178
 #, c-format
 msgid "Not drawing a box with negative dimension, %.2f by %.2f."
-msgstr ""
+msgstr "Er wordt geen vakje getekend met de negatieve afmetingen %.2f bij %.2f."
 
 #: lyric-combine-music-iterator.cc:204
 msgid "argument of \\lyricsto should contain Lyrics context"
-msgstr ""
+msgstr "argument van \\lyricsto moet een context van het type Lyrics bevatten"
 
 #: lyric-combine-music-iterator.cc:344
-#, fuzzy, c-format
+#, c-format
 msgid "cannot find %s `%s'"
-msgstr "kan niet vinden `%s'"
+msgstr "kan %s '%s' niet vinden"
 
 #: main.cc:106
 #, c-format
@@ -2268,13 +2274,12 @@ msgid ""
 "under certain conditions.  Invoke as `%s --warranty' for more\n"
 "information.\n"
 msgstr ""
-"Dit is vrije programmatuur.  Het valt onder de GNU Algemene Openbare\n"
-"Licentie (General Public Licence), en u wordt uitgenodigd het te\n"
-"veranderen en/of te verspreiden onder bepaalde voorwaarden.  Roep aan\n"
-"als `%s --warranty' voor meer informatie.\n"
+"Dit is vrije programmatuur.  Ze valt onder de GNU Algemene Openbare\n"
+"Licentie (General Public Licence), en u wordt uitgenodigd ze te\n"
+"veranderen en/of te verspreiden onder bepaalde voorwaarden.\n"
+"Zie '%s --warranty' voor meer informatie.\n"
 
 #: main.cc:112
-#, fuzzy
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2293,17 +2298,17 @@ msgid ""
 msgstr ""
 "    Dit programma is vrije programmatuur; u kunt het verspreiden en/of\n"
 "veranderen onder de voorwaarden van de GNU Algemene Openbare Licentie\n"
-"(General Public Licence) versie 2, zoals gepubliceerd door de Free\n"
-"Software Foundation.\n"
+"(General Public License) versie 3 of (naar uw keuze) een latere versie,\n"
+"zoals gepubliceerd door de Free Software Foundation.\n"
 "\n"
 "    Dit programma wordt verspreid in de hoop dat het nuttig zal zijn,\n"
-"maar ZONDER ENIGE GARANTIE; zelfs zonder impliciete garantie voor\n"
-"UITBATING of als zijnde GESCHIKT VOOR EEN BEPAALD DOEL.  Zie de GNU\n"
-"Algemene Openbare Licentie voor details.\n"
+"maar ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garantie dat het\n"
+"VERHANDELBAAR of GESCHIKT VOOR EEN BEPAALD DOEL zou zijn.\n"
+"Zie de GNU Algemene Openbare Licentie voor details.\n"
 "\n"
-"    Als het goed is, heeft u bij dit programma een exemplaar (zie het\n"
+"    Normaal heeft u bij dit programma een exemplaar (zie het\n"
 "bestand COPYING) ontvangen van de GNU Algemene Openbare Licentie;\n"
-"zoniet, schrijf dan naar de Free Software Foundation, Inc.,\n"
+"indien niet, schrijf dan naar de Free Software Foundation, Inc.,\n"
 "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
 #: main.cc:150
@@ -2315,7 +2320,7 @@ msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
 msgstr ""
-"scheme-optie SYM omzetten naar WAARDE\n"
+"Scheme-optie SYM instellen op WAARDE\n"
 "(standaard: #t);  '-dhelp' voor hulp"
 
 #: main.cc:155
@@ -2391,6 +2396,8 @@ msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
 msgstr ""
+"logberichten weergeven volgens LOGNIVEAU; waarden kunnen zijn:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (standaard) en DEBUG"
 
 #: main.cc:181
 msgid "write output to FILE (suffix will be added)"
@@ -2401,20 +2408,20 @@ msgstr ""
 #: main.cc:182
 msgid "relocate using directory of lilypond program"
 msgstr ""
-"verhuizen aan de hand van de map van\n"
-"het lilypond-programma"
+"de map van het lilypond-programma\n"
+"als de nieuwe werkmap gebruiken"
 
 #: main.cc:183
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr ""
 "geen voortgang tonen, alleen foutmeldingen\n"
-"(equivalent aan loglevel=ERROR)"
+"(het equivalent van loglevel=ERROR)"
 
 #: main.cc:185
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr ""
 "gedetailleerde informatie produceren\n"
-"(equivalent aan loglevel=DEBUG)"
+"(het equivalent van loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
 #: main.cc:264
@@ -2462,7 +2469,7 @@ msgstr "onbekende gebruiker: %s"
 #: main.cc:393
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
-msgstr "kan gebruikers id niet krijgen van gebruikersnaam: %s: %s"
+msgstr "kan geen gebruikers-ID achterhalen voor gebruikersnaam: %s: %s"
 
 #: main.cc:408
 #, c-format
@@ -2472,7 +2479,7 @@ msgstr "onbekende groep: %s"
 #: main.cc:410
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
-msgstr "kan groep id niet krijgen van groepnaam: %s: %s"
+msgstr "kan geen groeps-ID achterhalen voor groepsnaam: %s: %s"
 
 #: main.cc:418
 #, c-format
@@ -2497,7 +2504,7 @@ msgstr "kan werkmap niet veranderen naar: %s: %s"
 #: main.cc:826
 #, c-format
 msgid "exception caught: %s"
-msgstr "exceptie gevangen: %s"
+msgstr "uitzondering opgevangen: %s"
 
 #. FIXME: constant error message.
 #: mark-engraver.cc:150
@@ -2506,7 +2513,7 @@ msgstr "rehearsalMark moet een natuurlijk getal zijn"
 
 #: mark-engraver.cc:156
 msgid "mark label must be a markup object"
-msgstr "mark etiket moet een markup zijn"
+msgstr "markeringslabel moet van het type markup zijn"
 
 #: mensural-ligature-engraver.cc:100
 msgid "ligature with less than 2 heads -> skipping"
@@ -3879,9 +3886,9 @@ msgstr ""
 
 # FIXME: what does accidental mean?
 #: music-functions.scm:1888
-#, fuzzy, scheme-format
+#, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "onbekende toevallige stijl: ~S"
+msgstr "onbekende stijl voor accident: ~S"
 
 #: music-functions.scm:2098
 msgid "Missing duration"
index 444d04d46162debd75d34b922e012849b1b1d31a..3c9caad397a8e72d65b80279172b71fcc8b691ee 100644 (file)
@@ -3824,7 +3824,16 @@ def conv(str):
                       r'(?=\s|[()]))(' + paren_matcher (20) + ")"
                       r"(?:\s+parser(?=\s|[()])|\s*\(\*parser\*\))", repl, str)
         return str
-    return inner (str)
+    str = inner (str)
+    # This is the simplest case, resulting from one music function
+    # trying to call another one via Scheme.  The caller is supposed
+    # to have its uses of parser/location converted to
+    # (*parser*)/(*location*) already.  Other uses of
+    # ly:music-function-extract are harder to convert but unlikely.
+    str = re.sub (r'(\(\s*\(ly:music-function-extract\s+' + wordsyntax +
+                  r'\s*\)\s+)\(\*parser\*\)\s*\(\*location\*\)', r'\1',
+                  str)
+    return str
 
 @rule ((2, 19, 24), r"""music-has-type -> music-is-of-type?
 \applyOutput #'Context -> \applyOutput Context""")
index db5b2e1d7bec55f5dc93a7d0183144327481ddd2..d2e74a96a94473ecdb6bc8837bb43963f5662af1 100644 (file)
@@ -706,6 +706,11 @@ over the total spanner, where the width of the spanner is normalized
 between 0 and 1.")
      (note-names ,vector? "Vector of strings containing names for
 easy-notation note heads.")
+     (note-collision-threshold ,ly:dimension? "Simultaneous notes that
+are this close or closer in units of @code{staff-space} will be
+identified as vertically colliding. Used by @code{Stem} grobs for notes
+in the same voice, and @code{NoteCollision} grobs for notes in
+different voices. Default value@tie{}1.")
      (number-type ,symbol? "Numbering style. Choices include
 @code{roman-lower}, @code{roman-upper} and @code{arabic}.")
 
@@ -1148,8 +1153,8 @@ extends beyond the bounding box of the grob as a multiple of the
 staff-line thickness.  The shape of the background is determined by
 @code{whiteout-style}.  Usually @code{#f} by default.")
      (whiteout-style ,symbol? "Determines the shape of the
-@code{whiteout} background.  Available are @code{'outline} and the
-default @code{'box}.")
+@code{whiteout} background.  Available are @code{'outline},
+@code{'rounded-box}, and the default @code{'box}.")
      (width ,ly:dimension? "The width of a grob measured in staff
 space.")
      (word-space ,ly:dimension? "Space to insert between words in
index 3528933f6836ac4f50d47234fb17c9fdeefc4884..c874eae7b9e82f15248a1c4d4ffe4e630029a7df 100644 (file)
         (space-alist . (
                         (time-signature . (extra-space . 0.75))
                         (custos . (minimum-space . 2.0))
-                        (clef . (minimum-space . 1.0))
+                        (clef . (extra-space . 1.0))
                         (key-signature . (extra-space . 1.0))
                         (key-cancellation . (extra-space . 1.0))
                         (first-note . (fixed-space . 1.3))
     (NoteCollision
      . (
         (axes . (,X ,Y))
+        (note-collision-threshold . 1)
         (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
         (prefer-dotted-right . #t)
         (X-extent . ,ly:axis-group-interface::width)
         (duration-log . ,stem::calc-duration-log)
         (length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
         (neutral-direction . ,DOWN)
+        (note-collision-threshold . 1)
         (positioning-done . ,ly:stem::calc-positioning-done)
         (stem-info . ,ly:stem::calc-stem-info)
         (stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
index 67bc76c3a044104d087f549d8302b900869de969..362080ed9b8d72a1ede07d5d13911296b6823e9a 100644 (file)
@@ -818,8 +818,9 @@ Rotate object with @var{ang} degrees around its center.
 
 Provide a white background for @var{arg}.  The shape of the white
 background is determined by @code{style}.  The default
-is @code{box} which produces a white rectangle.  @code{outline}
-approximates the outline of the markup.
+is @code{box} which produces a rectangle.  @code{rounded-box}
+produces a rounded rectangle.  @code{outline} approximates the
+outline of the markup.
 
 @lilypond[verbatim,quote]
 \\markup {
@@ -828,6 +829,13 @@ approximates the outline of the markup.
     \\override #'(thickness . 1.5)
     \\whiteout whiteout-box
 }
+\\markup {
+  \\combine
+    \\filled-box #'(-1 . 24) #'(-3 . 4) #1
+    \\override #'(style . rounded-box)
+    \\override #'(thickness . 3)
+    \\whiteout whiteout-rounded-box
+}
 \\markup {
   \\combine
     \\filled-box #'(-1 . 18) #'(-3 . 4) #1
index 810a30b333e2f63852bf89c96ca06b3f6010c28d..0a12672095701cf1844cef2ba881010afe2be0de 100644 (file)
@@ -203,14 +203,17 @@ into a @code{MultiMeasureTextEvent}."
 (define-public (partial-markup commands)
   ;; Like composed-markup-list, except that the result is a single
   ;; markup command that can be applied to one markup
-  (define (compose arg)
+  (define (compose rest)
     (fold
      (lambda (cmd prev) (append cmd (list prev)))
-     arg
-     commands))
-  (let ((chain (lambda (layout props arg)
-                 (interpret-markup layout props (compose arg)))))
-    (set-object-property! chain 'markup-signature (list markup?))
+     (append (car commands) rest)
+     (cdr commands)))
+  (let ((chain (lambda (layout props . rest)
+                 (interpret-markup layout props (compose rest)))))
+    (set! (markup-command-signature chain)
+          (list-tail
+           (markup-command-signature (caar commands))
+           (length (cdar commands))))
     chain))
 
 (define-public (property-set context property value)
index b3b7b34c30a9b0f33e077cf11cbed2200d181469..5c38ae9ea503015b9217b994ee1cc72d8fa5dace 100644 (file)
@@ -66,70 +66,105 @@ following stencil.  Stencils with empty Y extent are not given
 @var{space} before them and don't avoid overlapping other stencils."
   (stack-stencils X RIGHT space (filter ly:stencil? stencils)))
 
-;;; convert a full markup object to an approximate pure string representation
+;;;; convert a full markup object to an approximate pure string representation
+
+;; We ignore `page-ref-markup', because we don't want to get the
+;; `gauge'- and `default'-string
+;;
+;; TODO:
+;; - we would be interested in the computed result of `replace-markup' and
+;;   `first-visible-markup', don't know how to get this, though
+;;   For now all (not computed) arguments are caught.
+;; - Other markup-commands to ignore?
+(define markup-commands-to-ignore
+  '(page-ref-markup))
 
 (define-public (markup->string m . argscopes)
   (let* ((scopes (if (pair? argscopes) (car argscopes) '())))
-    ;; markup commands with one markup argument, formatting ignored
-    (define markups-first-argument '(list
-                                     bold-markup box-markup caps-markup dynamic-markup finger-markup
-                                     fontCaps-markup huge-markup italic-markup large-markup larger-markup
-                                     medium-markup normal-size-sub-markup normal-size-super-markup
-                                     normal-text-markup normalsize-markup number-markup roman-markup
-                                     sans-markup simple-markup small-markup smallCaps-markup smaller-markup
-                                     sub-markup super-markup teeny-markup text-markup tiny-markup
-                                     typewriter-markup underline-markup upright-markup bracket-markup
-                                     circle-markup hbracket-markup parenthesize-markup rounded-box-markup
-
-                                     center-align-markup center-column-markup column-markup dir-column-markup
-                                     fill-line-markup justify-markup justify-string-markup left-align-markup
-                                     left-column-markup line-markup right-align-markup right-column-markup
-                                     vcenter-markup wordwrap-markup wordwrap-string-markup ))
-
-    ;; markup commands with markup as second argument, first argument
-    ;; specifies some formatting and is ignored
-    (define markups-second-argument '(list
-                                      abs-fontsize-markup fontsize-markup magnify-markup lower-markup
-                                      pad-around-markup pad-markup-markup pad-x-markup raise-markup
-                                      halign-markup hcenter-in-markup rotate-markup translate-markup
-                                      translate-scaled-markup with-url-markup scale-markup ))
+
+    (define all-relevant-markup-commands
+      ;; Returns a list containing the names of all markup-commands and
+      ;; markup-list-commands with predicate @code{cheap-markup?} or
+      ;; @code{markup-list?} in their @code{markup-command-signature}.
+      ;; @code{table-of-contents} is not caught, same for user-defined commands.
+      ;; markup-commands from @code{markup-commands-to-ignore} are removed.
+      (lset-difference eq?
+        (map car
+          (filter
+            (lambda (x)
+              (let* ((predicates (markup-command-signature (cdr x))))
+                (and predicates
+                     (not
+                       (null?
+                         (lset-intersection eq?
+                           '(cheap-markup? markup-list?)
+                           (map procedure-name predicates)))))))
+            (ly:module->alist (resolve-module '(lily)))))
+        markup-commands-to-ignore))
 
     ;; helper functions to handle string cons like string lists
     (define (markup-cons->string-cons c scopes)
       (if (not (pair? c)) (markup->string c scopes)
-          (cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
+          (cons
+            (markup->string (car c) scopes)
+            (markup-cons->string-cons (cdr c) scopes))))
     (define (string-cons-join c)
       (if (not (pair? c)) c
           (string-join (list (car c) (string-cons-join (cdr c))) "")))
 
+    ;; We let the following line in for future debugging
+    (display-scheme-music (sort all-relevant-markup-commands symbol<?))
+
+
+    ;;;; Remark: below only works, if markup?- or markup-list? arguments are the
+    ;;;;         last listed arguments in the commands definition
+    ;;;; TODO: which other markup-(list)-commands should be special cased or
+    ;;;;       completely excluded?
     (cond
      ((string? m) m)
      ((null? m) "")
      ((not (pair? m)) "")
 
+     ;;;; special cases: \concat, \put-adjacent, \fill-with-pattern and
+     ;;;;                \fromproperty-markup
+     ;;;;
+     ;;;; TODO do we really want a string-joined return-value for \concat and
+     ;;;; \put-adjacent?
+     ;;;; \overlay or \combine will return a string with spaces
+
      ;; handle \concat (string-join without spaces)
      ((and (pair? m) (equal? (car m) concat-markup))
-      (string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
+      (string-cons-join (markup-cons->string-cons (cadr m) scopes)))
 
-     ;; markup functions with the markup as first arg
-     ((member (car m) (primitive-eval markups-first-argument))
-      (markup->string (cadr m) scopes))
+     ;; handle \put-adjacent (string-join without spaces)
+     ((and (pair? m) (equal? (car m) put-adjacent-markup))
+      (string-cons-join (markup-cons->string-cons (take-right m 2) scopes)))
 
-     ;; markup functions with markup as second arg
-     ((member (car m) (primitive-eval markups-second-argument))
-      (markup->string (cddr m) scopes))
+     ;; handle \fill-with-pattern (ignore the filling markup)
+     ((and (pair? m) (equal? (car m) fill-with-pattern-markup))
+      (markup->string (take-right m 2) scopes))
 
      ;; fromproperty-markup reads property values from the header block:
      ((equal? (car m) fromproperty-markup)
       (let* ((varname (symbol->string (cadr m)))
              ;; cut off the header: prefix from the variable name:
-             (newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
+             (newvarname (if (string-prefix? "header:" varname)
+                             (substring varname 7)
+                             varname))
              (var (string->symbol newvarname))
              (mod (make-module 1)))
         ;; Prevent loops by temporarily clearing the variable we have just looked up
         (module-define! mod var "")
         (markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
 
+     ((member (car m)
+              (primitive-eval (cons 'list all-relevant-markup-commands)))
+      (markup->string
+        (if (> (length (last-pair m)) 1)
+            (last-pair m)
+            (car (last-pair m)))
+        scopes))
+
      ;; ignore all other markup functions
      ((markup-function? (car m)) "")
 
index 0921cdd36f00b20d54442206d3a063ed2e9d0d05..dcec6ae939b162c26c7c0734de5b5095b852d81a 100644 (file)
@@ -880,8 +880,9 @@ and duration-log @var{log}."
               (ly:stencil-aligned-to
                (make-parenthesis-stencil y-extent
                                          half-thickness
-                                         (- width)
-                                         angularity)
+                                         width
+                                         angularity
+                                         -1)
                Y CENTER)
               X RIGHT))
          (lp-x-extent
@@ -891,7 +892,8 @@ and duration-log @var{log}."
                (make-parenthesis-stencil y-extent
                                          half-thickness
                                          width
-                                         angularity)
+                                         angularity
+                                         1)
                Y CENTER)
               X LEFT))
          (rp-x-extent
@@ -1119,9 +1121,11 @@ If @var{data} is @code{#f} or @code{'()}, it is not included in the sum."
 (define-public (stroke-finger::calc-text grob)
   (let ((event (event-cause grob)))
     (or (ly:event-property event 'text #f)
-        (vector-ref (ly:grob-property grob 'digit-names)
-                    (1- (max 1
-                             (min 5 (ly:event-property event 'digit))))))))
+        (let ((digit-names (ly:grob-property grob 'digit-names)))
+          (vector-ref digit-names
+                      (1- (max 1
+                               (min (vector-length digit-names)
+                                    (ly:event-property event 'digit)))))))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index d2fad841cbd589d70297b49bc414e479a4a53381..bec03016505e4cc5317061f08d2b80f5e416e53f 100644 (file)
@@ -195,76 +195,34 @@ a list of @var{paddings}."
     stil))
 
 (define (make-parenthesis-stencil
-         y-extent half-thickness width angularity)
+         y-extent thickness width angularity orientation)
   "Create a parenthesis stencil.
 @var{y-extent} is the Y extent of the markup inside the parenthesis.
 @var{half-thickness} is the half thickness of the parenthesis.
 @var{width} is the width of a parenthesis.
+@var{orientation} is the orientation of a parenthesis.
 The higher the value of number @var{angularity},
 the more angular the shape of the parenthesis."
-  (let* ((line-width 0.1)
-         ;; Horizontal position of baseline that end points run through.
-         (base-x
-          (if (< width 0)
-              (- width)
-              0))
-         ;; X value farthest from baseline on outside  of curve
-         (outer-x (+ base-x width))
-         ;; X extent of bezier sandwich centerline curves
-         (x-extent (ordered-cons base-x outer-x))
-         (bottom-y (interval-start y-extent))
-         (top-y (interval-end y-extent))
-
-         (lower-end-point (cons base-x bottom-y))
-         (upper-end-point (cons base-x top-y))
-
-         (outer-control-x (+ base-x (* 4/3 width)))
-         (inner-control-x (+ outer-control-x
-                             (if (< width 0)
-                                 half-thickness
-                                 (- half-thickness))))
-
-         ;; Vertical distance between a control point
-         ;; and the end point it connects to.
-         (offset-index (- (* 0.6 angularity) 0.8))
-         (lower-control-y (interval-index y-extent offset-index))
-         (upper-control-y (interval-index y-extent (- offset-index)))
-
-         (lower-outer-control-point
-          (cons outer-control-x lower-control-y))
-         (upper-outer-control-point
-          (cons outer-control-x upper-control-y))
-         (upper-inner-control-point
-          (cons inner-control-x upper-control-y))
-         (lower-inner-control-point
-          (cons inner-control-x lower-control-y)))
-  (ly:make-stencil
-    (ly:stencil-expr
-      (make-bezier-sandwich-stencil
-       (list
-        ;; Step 1: move to lower end point.
-        lower-end-point
-        ;; Step 2: curve through outer control points
-        ;; to upper end point.
-        lower-outer-control-point
-        upper-outer-control-point
-        upper-end-point
-        ;; Step 3: curve through inner control points
-        ;; to lower end point.
-        upper-inner-control-point
-        lower-inner-control-point)
-       (min (* 2 half-thickness) line-width)))
-    (interval-widen x-extent (/ line-width 2))
-    (interval-widen y-extent (/ line-width 2)))))
+  (let* ((start (cons 0 (car y-extent)))
+         (stop (cons 0 (cdr y-extent)))
+         (line-width 0.1)
+         (bow-stil
+           (make-bow-stencil
+             start stop thickness angularity width orientation))
+         (x-extent (ly:stencil-extent bow-stil X)))
+    (ly:make-stencil
+      (ly:stencil-expr bow-stil)
+      (interval-widen x-extent (/ line-width 2))
+      (interval-widen y-extent (/ line-width 2)))))
 
 (define-public (parenthesize-stencil
                 stencil half-thickness width angularity padding)
   "Add parentheses around @var{stencil}, returning a new stencil."
   (let* ((y-extent (ly:stencil-extent stencil Y))
          (lp (make-parenthesis-stencil
-              y-extent half-thickness (- width) angularity))
+              y-extent half-thickness width angularity 1))
          (rp (make-parenthesis-stencil
-              y-extent half-thickness width angularity)))
+              y-extent half-thickness width angularity -1)))
     (set! stencil (ly:stencil-combine-at-edge stencil X LEFT lp padding))
     (set! stencil (ly:stencil-combine-at-edge stencil X RIGHT rp padding))
     stencil))
@@ -852,10 +810,14 @@ by the user, an appropriate default is chosen based on @var{style}."
   (let ((thick (* line-thickness
                  (if (number? thickness)
                      thickness
-                     (if (eq? style 'outline) 3 0)))))
-    (if (eq? style 'outline)
-        (stencil-whiteout-outline stil thick)
-        (stencil-whiteout-box stil thick))))
+                     (cond
+                      ((eq? style 'outline) 3)
+                      ((eq? style 'rounded-box) 3)
+                      (else 0))))))
+    (cond
+     ((eq? style 'outline) (stencil-whiteout-outline stil thick))
+     ((eq? style 'rounded-box) (stencil-whiteout-box stil thick (* 2 thick)))
+     (else (stencil-whiteout-box stil thick)))))
 
 (define-public (arrow-stencil-maker start? end?)
   "Return a function drawing a line from current point to @code{destination},
index dda374d84e9f33562721b31dd70e0133e13f03cd..5cf53339a4159ad4fdbff77979907636d85b16e1 100644 (file)
@@ -178,7 +178,7 @@ def extract_score_information (tree):
     if work:
         work_title = work.get_work_title ()
         set_if_exists ('title', work_title)
-        if work_title == '':
+        if work_title == '' and movement_title :
             set_if_exists ('title', movement_title.get_text ())
         elif movement_title:
             set_if_exists ('subtitle', movement_title.get_text ())