From: Jean-Charles Malahieude Date: Mon, 21 Dec 2015 14:23:21 +0000 (+0100) Subject: Merge branch 'master' into translation X-Git-Tag: release/2.19.34-1~5 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=3c0f38115857598db730782b1d2ff0a19fd833af;hp=4a91e5818686d6d5e49d32666dcd67020a21cff7;p=lilypond.git Merge branch 'master' into translation --- diff --git a/Documentation/changes.tely b/Documentation/changes.tely index bc0807624b..24e973e4fd 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -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 diff --git a/Documentation/contributor/quick-start.itexi b/Documentation/contributor/quick-start.itexi index ba4340dfd9..b515eff1de 100644 --- a/Documentation/contributor/quick-start.itexi +++ b/Documentation/contributor/quick-start.itexi @@ -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 -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. diff --git a/Documentation/contributor/source-code.itexi b/Documentation/contributor/source-code.itexi index 7d3c04e2ae..20077e6891 100644 --- a/Documentation/contributor/source-code.itexi +++ b/Documentation/contributor/source-code.itexi @@ -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 diff --git a/Documentation/learning/tweaks.itely b/Documentation/learning/tweaks.itely index cd8df5c912..d5d5951b12 100644 --- a/Documentation/learning/tweaks.itely +++ b/Documentation/learning/tweaks.itely @@ -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 diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely index c96837e522..b7b2f3e7ea 100644 --- a/Documentation/notation/simultaneous.itely +++ b/Documentation/notation/simultaneous.itely @@ -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 diff --git a/Documentation/notation/text.itely b/Documentation/notation/text.itely index e708d3a097..3a9cdbd6d2 100644 --- a/Documentation/notation/text.itely +++ b/Documentation/notation/text.itely @@ -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 diff --git a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly index c7379c3b29..6e49f9e5ec 100644 --- a/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly +++ b/Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly @@ -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" diff --git a/Documentation/snippets/flute-slap-notation.ly b/Documentation/snippets/flute-slap-notation.ly index cdbe9fa6c2..0f1627b324 100644 --- a/Documentation/snippets/flute-slap-notation.ly +++ b/Documentation/snippets/flute-slap-notation.ly @@ -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 #}) diff --git a/Documentation/snippets/fretted-strings.snippet-list b/Documentation/snippets/fretted-strings.snippet-list index 7825781039..36db6ac1ea 100644 --- a/Documentation/snippets/fretted-strings.snippet-list +++ b/Documentation/snippets/fretted-strings.snippet-list @@ -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 index 0000000000..691fad451a --- /dev/null +++ b/Documentation/snippets/let-tabstaff-print-the-topmost-string-at-bottom.ly @@ -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 index 0000000000..b18de49510 --- /dev/null +++ b/Documentation/snippets/new/flute-slap-notation.ly @@ -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 +} diff --git a/Documentation/snippets/staff-notation.snippet-list b/Documentation/snippets/staff-notation.snippet-list index 038ba0bd15..0322a423b0 100644 --- a/Documentation/snippets/staff-notation.snippet-list +++ b/Documentation/snippets/staff-notation.snippet-list @@ -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 diff --git a/Documentation/snippets/using-the-whiteout-property.ly b/Documentation/snippets/using-the-whiteout-property.ly index f5210b7ed7..77bc141d21 100644 --- a/Documentation/snippets/using-the-whiteout-property.ly +++ b/Documentation/snippets/using-the-whiteout-property.ly @@ -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 diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi index 6bb28b3e08..e282c32fba 100644 --- a/Documentation/topdocs/README.texi +++ b/Documentation/topdocs/README.texi @@ -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, diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 6ac8ff1b99..488059b3f3 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -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 diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi index 543a795228..406e782aec 100644 --- a/Documentation/web/news.itexi +++ b/Documentation/web/news.itexi @@ -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 ec405ad892..bff012e72b 100644 --- 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 diff --git a/input/regression/markup-partial.ly b/input/regression/markup-partial.ly index 37d2255cd9..f0759d26ed 100644 --- a/input/regression/markup-partial.ly +++ b/input/regression/markup-partial.ly @@ -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 index 0000000000..e01a2e168b --- /dev/null +++ b/input/regression/note-collision-threshold.ly @@ -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 + 4 + 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 diff --git a/input/regression/whiteout-lower-layers.ly b/input/regression/whiteout-lower-layers.ly index 8549cbc783..15c59e5770 100644 --- a/input/regression/whiteout-lower-layers.ly +++ b/input/regression/whiteout-lower-layers.ly @@ -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 } diff --git a/input/regression/whiteout.ly b/input/regression/whiteout.ly index 7e10de9727..543d94f369 100644 --- a/input/regression/whiteout.ly +++ b/input/regression/whiteout.ly @@ -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 diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh index c7d16d76e9..e22e572c7f 100644 --- a/lily/include/scheme-engraver.hh +++ b/lily/include/scheme-engraver.hh @@ -26,9 +26,10 @@ 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_; }; diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 8154409efc..a4cf192fff 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -28,15 +28,11 @@ #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 > 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 */ /* @@ -57,10 +53,13 @@ */ #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_; \ diff --git a/lily/include/translator.icc b/lily/include/translator.icc index 7fc128fe72..d505702136 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -72,12 +72,15 @@ 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 \ diff --git a/lily/note-collision.cc b/lily/note-collision.cc index f98cb5a3a0..664ce234a7 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -55,8 +55,10 @@ check_meshing_chords (Grob *me, vector ups = Stem::note_head_positions (stems[UP]); vector 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 " ); diff --git a/lily/parser.yy b/lily/parser.yy index 35d0aa48dc..c60c6ed64c 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -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)); diff --git a/lily/scheme-engraver.cc b/lily/scheme-engraver.cc index 7e601f8db7..ec4197641b 100644 --- a/lily/scheme-engraver.cc +++ b/lily/scheme-engraver.cc @@ -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); diff --git a/lily/stem.cc b/lily/stem.cc index f0335c58d2..947a429c23 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -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 " diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 831a4790b0..e3f8cba3e8 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -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 (instance)->init_from_scheme (definition); + Translator *instance = is_scheme ? new Scheme_engraver (definition) + : type->clone (); SCM str = instance->self_scm (); diff --git a/ly/Welcome-to-LilyPond-MacOS.ly b/ly/Welcome-to-LilyPond-MacOS.ly index 9e6f8618f0..24007889f4 100644 --- a/ly/Welcome-to-LilyPond-MacOS.ly +++ b/ly/Welcome-to-LilyPond-MacOS.ly @@ -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" diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index d65a798b1f..9937a5c633 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -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" diff --git a/po/lilypond.pot b/po/lilypond.pot index fcf712a1ee..7657ef0166 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -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 \n" "Language-Team: LANGUAGE \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 "" diff --git a/po/nl.po b/po/nl.po index 90068663d4..51cb9adf11 100644 --- 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 \n" "Language-Team: Dutch \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 ( in MusicXML) are not yet implemented." -msgstr "" +msgstr "Metronoomaanduidingen met complexe relaties ( 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 and\n" " Reinhold Kainhofer \n" msgstr "" +"Copyright (c) 2005--2015\n" +" Han-Wen Nienhuys ,\n" +" Jan Nieuwenhuizen en\n" +" Reinhold Kainhofer \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" diff --git a/python/convertrules.py b/python/convertrules.py index 444d04d461..3c9caad397 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -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""") diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index db5b2e1d7b..d2e74a96a9 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -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 diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 3528933f68..c874eae7b9 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -232,7 +232,7 @@ (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)) @@ -1605,6 +1605,7 @@ (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) @@ -2137,6 +2138,7 @@ (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)) diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index 67bc76c3a0..362080ed9b 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -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 diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index 810a30b333..0a12672095 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -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) diff --git a/scm/markup.scm b/scm/markup.scm index b3b7b34c30..5c38ae9ea5 100644 --- a/scm/markup.scm +++ b/scm/markup.scm @@ -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 symbolstring-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)) "") diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 0921cdd36f..dcec6ae939 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -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))))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/stencil.scm b/scm/stencil.scm index d2fad841cb..bec0301650 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -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}, diff --git a/scripts/musicxml2ly.py b/scripts/musicxml2ly.py index dda374d84e..5cf53339a4 100644 --- a/scripts/musicxml2ly.py +++ b/scripts/musicxml2ly.py @@ -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 ())