@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
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})
@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}
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::
@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
@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
@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
@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
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
@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
@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
@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.
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
@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:
@item
@strong{Separate branch}: (complicated option)
-Ensure your changes are committed in a separate branch, which
-should differ from the reference branch to be used by just the
-changes to be uploaded. If the reference branch is to be
-origin/master, ensure this is up-to-date. If necessary, use git
-rebase to rebase the branch containing the changes to the head of
-origin/master. Finally, check out branch with the changes and
-enter the command:
+Ensure your changes are committed in a separate branch, which should
+differ from the reference branch to be used (usually
+@code{origin/master}) by just the changes to be uploaded. Checkout the
+branch with the changes:
+
+@example
+git checkout some-branch-with-changes
+@end example
+
+If the reference branch is to be @code{origin/master}, ensure that the
+branch containing the changes is up-to-date with it. Use
+@command{git rebase} or @command{git pull -r} to rebase the branch to
+the head of @code{origin/master}. For example:
+
+@example
+git pull -r origin master
+@end example
+
+Finally, start the upload by entering:
@example
git cl upload <reference SHA1 ID>
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
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
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
@lilypond[verbatim,quote]
\relative {
- c''4
- \mark "Allegro"
- c c c
+ \mark "Verse"
+ c'2 g'
+ \bar "||"
+ \mark "Chorus"
+ g2 c,
+ \bar "|."
}
@end lilypond
%% 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"
-%% 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 {
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))
0.5
0)
(/ thickness 2)))))
- $music
+ #music
\revert NoteHead.stencil
\revert NoteHead.stem-attachment
#})
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
--- /dev/null
+%% 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
+ }
+>>
--- /dev/null
+\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
+}
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
% 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 {
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
@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,
@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
* 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}
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
-\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 }
--- /dev/null
+\version "2.19.34"
+
+\header {
+ texidoc = "Whether simultaneous notes are identified as
+ vertically colliding or not depends on the value of the
+ @code{note-collision-threshold} property of the @code{Stem}
+ grob (for notes in the same voice) and the @code{NoteCollision}
+ grob (for notes in different voices)."
+}
+
+music = <<
+ \new Voice \relative {
+ \voiceOne
+ <c' d>4 <d e> <f g> <g a>
+ e g g a
+
+ }
+ \new Voice \relative {
+ \voiceTwo
+ s4 s s s
+ d' f a b
+ }
+>>
+
+customizations = \with {
+ staffLineLayoutFunction = #ly:pitch-semitones
+ \override StaffSymbol.staff-space = #0.7
+ \override StaffSymbol.line-positions = #'(-4 0 4)
+}
+
+
+\markup "collisions"
+
+\new Staff \with {
+ \customizations
+}
+\music
+
+\markup "collisions prevented"
+
+\new Staff \with {
+ \customizations
+ \override Stem.note-collision-threshold = #2
+ \override NoteCollision.note-collision-threshold = #2
+}
+\music
\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
}
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"
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
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 ();
// 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_;
};
#include "std-vector.hh"
#include "protected-scm.hh"
-#define TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \
+#define TRANSLATOR_FAMILY_DECLARATIONS(NAME) \
public: \
- NAME (); \
VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME); \
- static SCM static_description_; \
static Drul_array<vector<Acknowledge_information> > acknowledge_static_array_drul_; \
- virtual void fetch_precomputable_methods (Callback methods[]); \
- virtual SCM static_translator_description () const; \
- virtual SCM translator_description () const; \
+ virtual void fetch_precomputable_methods (Callback methods[]); \
static Grob_info_callback static_get_acknowledger (SCM sym); \
static Grob_info_callback static_get_end_acknowledger(SCM); \
virtual Grob_info_callback get_acknowledger (SCM sym) \
virtual Grob_info_callback get_end_acknowledger (SCM sym) \
{ \
return static_get_end_acknowledger (sym); \
- } \
+ } \
/* end #define */
/*
*/
#define TRANSLATOR_DECLARATIONS(NAME) \
- TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \
-private: \
+ TRANSLATOR_FAMILY_DECLARATIONS(NAME) \
+ static SCM static_description_; \
static Protected_scm listener_list_; \
public: \
+ NAME (); \
+ virtual SCM static_translator_description () const; \
+ virtual SCM translator_description () const; \
virtual SCM get_listener_list () const \
{ \
return listener_list_; \
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 \
vector<int> ups = Stem::note_head_positions (stems[UP]);
vector<int> dps = Stem::note_head_positions (stems[DOWN]);
+ int threshold = robust_scm2int (me->get_property ("note-collision-threshold"), 1);
+
/* Too far apart to collide. */
- if (ups[0] > dps.back () + 1)
+ if (ups[0] > dps.back () + threshold)
return 0.0;
/* If the chords just 'touch' their extreme noteheads,
*/
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
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])
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 ())
/* properties */
"merge-differently-dotted "
"merge-differently-headed "
+ "note-collision-threshold "
"positioning-done "
"prefer-dotted-right "
);
;
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 ();
}
;
+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));
#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;
must_be_last_ = false;
per_instance_listeners_ = SCM_EOL;
+
+ init_from_scheme (definition);
}
Scheme_engraver::~Scheme_engraver ()
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);
}
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]);
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)
{
"neutral-direction "
"no-stem-extend "
"note-heads "
+ "note-collision-threshold "
"positioning-done "
"rests "
"stem-begin-position "
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))
// an argument and evaluates to an a-list scheme engraver
// definition.
definition = scm_call_1 (definition, cs);
- type = get_translator (ly_symbol2scm ("Scheme_engraver"));
is_scheme = true;
}
- if (!type)
+ if (!is_scheme && !type)
warning (_f ("cannot find: `%s'", ly_symbol2string (scm_car (s)).c_str ()));
else
{
- Translator *instance = type->clone ();
- if (is_scheme)
- dynamic_cast<Scheme_engraver *> (instance)->init_from_scheme (definition);
+ Translator *instance = is_scheme ? new Scheme_engraver (definition)
+ : type->clone ();
SCM str = instance->self_scm ();
%}
-\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"
%}
-\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"
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.19.32\n"
+"Project-Id-Version: lilypond 2.19.33\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2015-11-22 12:43+0000\n"
+"POT-Creation-Date: 2015-12-06 15:25+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "fatal error. Couldn't find type: %s"
msgstr ""
-#: translator-group.cc:187
+#: translator-group.cc:185
#, c-format
msgid "cannot find: `%s'"
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 ""
"Project-Id-Version: lilypond 2.19.26\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
"POT-Creation-Date: 2015-08-27 10:48+0100\n"
-"PO-Revision-Date: 2015-11-01 21:40+0100\n"
+"PO-Revision-Date: 2015-12-10 21:02+0100\n"
"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: book_base.py:26
"* 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"
#: 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"
"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"
"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"
#: 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
#: lilylib.py:196 lilylib.py:257
#, python-format
msgid "Running %s..."
-msgstr "Draaien van %s..."
+msgstr "Uitvoeren van %s..."
#: lilylib.py:333
#, python-format
#: 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
#: 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
"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."
#: 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
#: 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
"%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
#: 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"
#: 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)"
#: 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"
#: 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"
#: 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"
"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..."
#: 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..."
#: 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
#: 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: "
#: midi2ly.py:1050
msgid "print absolute pitches"
-msgstr "absolute toonhoogten printen"
+msgstr "absolute toonhoogten afdrukken"
#: midi2ly.py:1052 midi2ly.py:1080
msgid "DUR"
#: 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"
#: 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"
#: 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"
#: midi2ly.py:1125
msgid "no files specified on command line."
-msgstr "geen bestanden gegeven op de opdrachtregel"
+msgstr "geen bestanden vermeld op de opdrachtregel"
#: musicxml2ly.py:228
#, python-format
msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
-msgstr ""
+msgstr "Een door %s gemaakt bestand gevonden met foutieve informatie over waardestrepen. Alle informatie in verband met waardestrepen uit het MusicXML-bestand zal overgeslagen worden."
#: musicxml2ly.py:247 musicxml2ly.py:249
#, python-format
msgid "Unprocessed PartGroupInfo %s encountered"
-msgstr ""
+msgstr "Niet-verwerkte PartGroupInfo %s gevonden"
#: musicxml2ly.py:500
#, python-format
msgid "Encountered note at %s without type and duration (=%s)"
-msgstr ""
+msgstr "Op %s is een noot zonder type en lengte gevonden (=%s)"
#: musicxml2ly.py:520
#, python-format
msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
-msgstr ""
+msgstr "Rationele duur met noemer %s gevonden; kan niet naar lilypond-duur omgezet worden"
#: musicxml2ly.py:767
msgid "Unable to extract key signature!"
-msgstr ""
+msgstr "Kan de voortekening niet afleiden."
#: musicxml2ly.py:794
#, python-format
msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
-msgstr ""
+msgstr "onbekende toonladder %s; verwachtte 'major' of 'minor' of een kerktoonladder"
#: musicxml2ly.py:932
#, python-format
msgid "Encountered unprocessed marker %s\n"
-msgstr ""
+msgstr "Een niet-verwerkt merkteken %s gevonden\n"
#: musicxml2ly.py:1026
#, python-format
msgid "unknown span event %s"
-msgstr "onbekende span-gebeurtenis %s"
+msgstr "onbekende tijdspannegebeurtenis %s"
#: musicxml2ly.py:1036
#, python-format
msgid "unknown span type %s for %s"
-msgstr "onbekend span-type %s voor %s"
+msgstr "onbekend tijdspannetype %s voor %s"
#: musicxml2ly.py:1456
msgid "Unknown metronome mark, ignoring"
-msgstr "Onbekende metronoommarkering; genegeerd"
+msgstr "Onbekende metronoomaanduiding; genegeerd"
#. TODO: Implement the other (more complex) way for tempo marks!
#: musicxml2ly.py:1461
msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
-msgstr ""
+msgstr "Metronoomaanduidingen met complexe relaties (<metronome-note> in MusicXML) zijn nog niet geïmplementeerd."
#: musicxml2ly.py:1663
#, python-format
msgid "Unable to convert chord type %s to lilypond."
-msgstr ""
+msgstr "Kan akkoordtype %s niet naar lilypond converteren."
#: musicxml2ly.py:1816
#, python-format
msgid "drum %s type unknown, please add to instrument_drumtype_dict"
-msgstr ""
+msgstr "slagwerktype %s is onbekend; voeg het toe aan instrument_drumtype_dict"
#: musicxml2ly.py:1820
msgid "cannot find suitable event"
#: 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
#: 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..."
" Jan Nieuwenhuizen <janneke@gnu.org> and\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
+"Copyright (c) 2005--2015\n"
+" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+" Jan Nieuwenhuizen <janneke@gnu.org> en\n"
+" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
#: musicxml2ly.py:2602
msgid "use lxml.etree; uses less memory and cpu time"
#: 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 -"
#: 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
#: 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
#: 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"
#: 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"
#, 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
#: 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"
#: 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
#: 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
#: 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"
#: 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
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"
#: 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
"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
#. 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"
#: 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"
#: 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
#: 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
#: 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"
#: 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
#: 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"
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
#. 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"
#: 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
#: 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
#: 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..."
#: 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
"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"
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
"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
"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)"
#: 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
#: 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
#: 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
#: 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
#: 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"
# 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"
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""")
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}.")
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
(space-alist . (
(time-signature . (extra-space . 0.75))
(custos . (minimum-space . 2.0))
- (clef . (minimum-space . 1.0))
+ (clef . (extra-space . 1.0))
(key-signature . (extra-space . 1.0))
(key-cancellation . (extra-space . 1.0))
(first-note . (fixed-space . 1.3))
(NoteCollision
. (
(axes . (,X ,Y))
+ (note-collision-threshold . 1)
(positioning-done . ,ly:note-collision-interface::calc-positioning-done)
(prefer-dotted-right . #t)
(X-extent . ,ly:axis-group-interface::width)
(duration-log . ,stem::calc-duration-log)
(length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
(neutral-direction . ,DOWN)
+ (note-collision-threshold . 1)
(positioning-done . ,ly:stem::calc-positioning-done)
(stem-info . ,ly:stem::calc-stem-info)
(stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
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 {
\\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
(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)
@var{space} before them and don't avoid overlapping other stencils."
(stack-stencils X RIGHT space (filter ly:stencil? stencils)))
-;;; convert a full markup object to an approximate pure string representation
+;;;; convert a full markup object to an approximate pure string representation
+
+;; We ignore `page-ref-markup', because we don't want to get the
+;; `gauge'- and `default'-string
+;;
+;; TODO:
+;; - we would be interested in the computed result of `replace-markup' and
+;; `first-visible-markup', don't know how to get this, though
+;; For now all (not computed) arguments are caught.
+;; - Other markup-commands to ignore?
+(define markup-commands-to-ignore
+ '(page-ref-markup))
(define-public (markup->string m . argscopes)
(let* ((scopes (if (pair? argscopes) (car argscopes) '())))
- ;; markup commands with one markup argument, formatting ignored
- (define markups-first-argument '(list
- bold-markup box-markup caps-markup dynamic-markup finger-markup
- fontCaps-markup huge-markup italic-markup large-markup larger-markup
- medium-markup normal-size-sub-markup normal-size-super-markup
- normal-text-markup normalsize-markup number-markup roman-markup
- sans-markup simple-markup small-markup smallCaps-markup smaller-markup
- sub-markup super-markup teeny-markup text-markup tiny-markup
- typewriter-markup underline-markup upright-markup bracket-markup
- circle-markup hbracket-markup parenthesize-markup rounded-box-markup
-
- center-align-markup center-column-markup column-markup dir-column-markup
- fill-line-markup justify-markup justify-string-markup left-align-markup
- left-column-markup line-markup right-align-markup right-column-markup
- vcenter-markup wordwrap-markup wordwrap-string-markup ))
-
- ;; markup commands with markup as second argument, first argument
- ;; specifies some formatting and is ignored
- (define markups-second-argument '(list
- abs-fontsize-markup fontsize-markup magnify-markup lower-markup
- pad-around-markup pad-markup-markup pad-x-markup raise-markup
- halign-markup hcenter-in-markup rotate-markup translate-markup
- translate-scaled-markup with-url-markup scale-markup ))
+
+ (define all-relevant-markup-commands
+ ;; Returns a list containing the names of all markup-commands and
+ ;; markup-list-commands with predicate @code{cheap-markup?} or
+ ;; @code{markup-list?} in their @code{markup-command-signature}.
+ ;; @code{table-of-contents} is not caught, same for user-defined commands.
+ ;; markup-commands from @code{markup-commands-to-ignore} are removed.
+ (lset-difference eq?
+ (map car
+ (filter
+ (lambda (x)
+ (let* ((predicates (markup-command-signature (cdr x))))
+ (and predicates
+ (not
+ (null?
+ (lset-intersection eq?
+ '(cheap-markup? markup-list?)
+ (map procedure-name predicates)))))))
+ (ly:module->alist (resolve-module '(lily)))))
+ markup-commands-to-ignore))
;; helper functions to handle string cons like string lists
(define (markup-cons->string-cons c scopes)
(if (not (pair? c)) (markup->string c scopes)
- (cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
+ (cons
+ (markup->string (car c) scopes)
+ (markup-cons->string-cons (cdr c) scopes))))
(define (string-cons-join c)
(if (not (pair? c)) c
(string-join (list (car c) (string-cons-join (cdr c))) "")))
+ ;; We let the following line in for future debugging
+ (display-scheme-music (sort all-relevant-markup-commands symbol<?))
+
+
+ ;;;; Remark: below only works, if markup?- or markup-list? arguments are the
+ ;;;; last listed arguments in the commands definition
+ ;;;; TODO: which other markup-(list)-commands should be special cased or
+ ;;;; completely excluded?
(cond
((string? m) m)
((null? m) "")
((not (pair? m)) "")
+ ;;;; special cases: \concat, \put-adjacent, \fill-with-pattern and
+ ;;;; \fromproperty-markup
+ ;;;;
+ ;;;; TODO do we really want a string-joined return-value for \concat and
+ ;;;; \put-adjacent?
+ ;;;; \overlay or \combine will return a string with spaces
+
;; handle \concat (string-join without spaces)
((and (pair? m) (equal? (car m) concat-markup))
- (string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
+ (string-cons-join (markup-cons->string-cons (cadr m) scopes)))
- ;; markup functions with the markup as first arg
- ((member (car m) (primitive-eval markups-first-argument))
- (markup->string (cadr m) scopes))
+ ;; handle \put-adjacent (string-join without spaces)
+ ((and (pair? m) (equal? (car m) put-adjacent-markup))
+ (string-cons-join (markup-cons->string-cons (take-right m 2) scopes)))
- ;; markup functions with markup as second arg
- ((member (car m) (primitive-eval markups-second-argument))
- (markup->string (cddr m) scopes))
+ ;; handle \fill-with-pattern (ignore the filling markup)
+ ((and (pair? m) (equal? (car m) fill-with-pattern-markup))
+ (markup->string (take-right m 2) scopes))
;; fromproperty-markup reads property values from the header block:
((equal? (car m) fromproperty-markup)
(let* ((varname (symbol->string (cadr m)))
;; cut off the header: prefix from the variable name:
- (newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
+ (newvarname (if (string-prefix? "header:" varname)
+ (substring varname 7)
+ varname))
(var (string->symbol newvarname))
(mod (make-module 1)))
;; Prevent loops by temporarily clearing the variable we have just looked up
(module-define! mod var "")
(markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
+ ((member (car m)
+ (primitive-eval (cons 'list all-relevant-markup-commands)))
+ (markup->string
+ (if (> (length (last-pair m)) 1)
+ (last-pair m)
+ (car (last-pair m)))
+ scopes))
+
;; ignore all other markup functions
((markup-function? (car m)) "")
(ly:stencil-aligned-to
(make-parenthesis-stencil y-extent
half-thickness
- (- width)
- angularity)
+ width
+ angularity
+ -1)
Y CENTER)
X RIGHT))
(lp-x-extent
(make-parenthesis-stencil y-extent
half-thickness
width
- angularity)
+ angularity
+ 1)
Y CENTER)
X LEFT))
(rp-x-extent
(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)))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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))
(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},
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 ())