when used inside or outside of chords. Now they are the same, including
all the possibilities of argument parsing. You can now use music
variables inside of chords: a construct like
-@lilypond[quote,ragged-right]
+@lilypond[verbatim,quote,ragged-right]
tonic=fis'
{ <\tonic \transpose c g \tonic> }
@end lilypond
@code{#@{@dots{}#@}} for constructing chord constituents. Music
functions inside of chords are no longer specially treated and thus
accept the same arguments as outside of chords. @code{\tweak} now works
-on single notes without needing to wrap them in a chord. String number
-indications like @code{\1} can be used on single notes. If you need to
-suppress them in some context, override their @code{stencil} with
-@code{##f}.
+on single notes without needing to wrap them in a chord. In theory, it
+can also work on command events and lyrics now. Since that was not
+possible before, it depends on luck on a case-by-case basis whether the
+tweak internals are already receiving the necessary information. Users
+are asked to report those cases where they find @code{\tweak} not
+working according to reasonable expectations.
+
+@item
+As one consequence, it was possible to reimplement the repetitive chord
+entry aid @code{q}. Repeated chords are now replaced right before
+interpreting a music expression. In case the user wants to retain
+some events of the original chord, he can run the repeat chord
+replacement function @code{\chordRepeats} manually.
@item
Scheme expressions inside of embedded Lilypond (@code{#@{@dots{}#@}})
@item
There is a new @code{define-event-function} command in analogy to
@code{define-music-function} that can be used for defining music
-functions acting as events without requiring a direction specifier
+functions acting as post events without requiring a direction specifier
(@code{-}, @code{^}, or @code{_}) placed before them.
@lilypond[quote,verbatim,ragged-right]
dyn=#(define-event-function (parser location arg) (markup?)
@menu
* Meta-policy for this document::
* Meisters::
+* Patchy::
* Administrative mailing list::
* Grand Organization Project (GOP)::
* Grand LilyPond Input Syntax Standardization (GLISS)::
@end itemize
+@node Patchy
+@section Patchy
+
+@subheading Introduction
+
+Patchy is a set of Python scripts to automate two administrative
+tasks:
+
+@itemize
+@item
+@code{lilypond-patchy-staging.py}: checks that new commits in
+@code{staging} can compile the regtests and documentation before
+merging @code{staging} into @code{master}.
+
+(completely automatic)
+
+@item
+@code{test-patches.py}: checks that patches apply to git master,
+compile, and lets a human check that there are no big unintended
+changes to the regtests.
+
+(requires some human input)
+
+@end itemize
+
+@subheading Installing patchy
+
+To install patchy, you should run do the following:
+
+@enumerate
+@item
+Create a new user on your box to to run patchy; this is a security
+step for your own protection. It is recommended that this should
+not be an administrator. New users are created from System;
+Administration; Users and Groups.
+
+@item
+Get the patchy scripts from
+@example
+https://github.com/gperciva/lilypond-extra/
+@end example
+Patchy is in the @file{patches/} directory.
+
+@item
+Put the scripts in a sensible place on your system
+
+@item
+Create a new git repository with
+@example
+git clone git://git.sv.gnu.org/lilypond.git
+@end example
+This will create a directory called lilypond with the repo in it.
+Make sure it's where you want it and name it lilypond-git
+(assuming you want to follow the standard naming conventions).
+
+@item
+Create an environment variable called LILYPOND_GIT and make it
+equal to the location of your new git repo. You can do this by
+editing @file{$HOME/.profile} and adding the line:
+@example
+export LILYPOND_GIT=~/lilypond-git
+@end example
+then logging out and in.
+
+@item
+Run patchy once to set up config files. Cancel this build
+(ctrl-c).
+
+@item
+Edit @file{$HOME/.lilypond-patchy-config} to provide working
+directories for your build directory, your results directory,
+compiler options and notification method. If you don't want to
+use email notification, then delete everything after
+@code{smtp_command:}.
+
+@item
+Ensure that your new user has git push access. Follow the
+instructions in the CG at @ref{Commit access}. Do not set
+password protection for the key - if you do you will not be able
+to run patchy unattended.
+
+@end enumerate
+
+@subheading lilypond-patchy-staging.py
+
+lilypond-patchy-staging.py is run with
+@example
+python lilypond-patchy-staging.py
+@end example
+Not much appears to happen except you can see a lot of CPU gets
+used if you open System Monitor. There's not much point running
+@code{lilypond-patchy-staging.py} unless there something in
+staging to be merged to master, however, if there's nothing in
+staging then the script won't waste resources by compiling
+anything.
+
+The script fetches the current patches in staging and runs
+@code{make}, @code{make test} and @code{make doc} to ensure that all of
+these complete error-free. If you have set patchy up to use email,
+it emails its results to you. If you haven't, then you can view
+them in a logfile. It also merges staging into master.
+
+@subheading test-patches.py
+test-patches prepares a regtest comparison for a human to quickly
+glance at, to determine if the patch is ready for a review. After
+looking at the comparison (or the lack of a comparison in the case
+of problems), run @code{accept-patch.py} or
+@code{reject-patch.py}.
+
+Once a patch has gotten a "LGTM" from Patchy, it should be
+reviewed by relevant developers, and if it passes this, it can be
+considered for countdown (see @ref{Commits and patches}) and
+pushing to staging (see @ref{Pushing to staging}).
+
+
@node Administrative mailing list
@section Administrative mailing list
If you particularly want to add a label not in the list, go
ahead, but this is not recommended, except when an issue is marked
-as fixed. In this case it should be labelled fixed_mm_MM_ss,
+as fixed. In this case it should be labeled fixed_mm_MM_ss,
where mm is major version, MM minor version and ss current
release.
@menu
* Setting up::
* Git for the impatient::
+* Other repositories::
* Downloading remote branches::
@end menu
a @code{-D}.
+@node Other repositories
+@subsection Other repositories
+
+There is a separate repository for general administrative scripts,
+as well as pictures and media files for the website. People
+interested in working on the website should download this
+repository, and set their @code{$LILYPOND_WEB_MEDIA_GIT}
+environment variable to point to that repository.
+
+@example
+@uref{https://github.com/gperciva/lilypond-extra}
+@end example
+
+To configure an environment variable in bash (the default for most
+Linux distributions),
+
+@example
+export LILYPOND_WEB_MEDIA_GIT=$HOME/dir/of/lilypond-extra/
+@end example
+
+
+There are a few other repositories floating around, which will
+hopefully be documented in the near future.
+
+
@node Downloading remote branches
@subsection Downloading remote branches
+@warning{contains obsolete + misleading info}
@menu
* Organization of remote branches::
@node Downloading individual branches
@unnumberedsubsubsec Downloading individual branches
+@warning{obsolete, should be deleted!}
+
Once you have initialized an empty Git repository on your system
(see @ref{Initializing a repository}), you can download a remote
will include a @q{From} line that shows @q{ssh} as the protocol:
@example
-From ssh://@var{user}@@git.sv.gnu.org/srv/git/lilypond
+From ssh://git.sv.gnu.org/srv/git/lilypond
@end example
If the protocol shown is not @q{ssh}, check that you configured
@node Uploading and security
@section Uploading and security
-@subheading Building the website from scratch for local checking
-
-Initial setup:
-
-Create directories:
-
-@example
-mkdir $HOME/lilypond/
-mkdir $HOME/lilypond/media/
-mkdir $HOME/lilypond/trusted-scripts/
-@end example
+@subheading Overall idea
To reduce the CPU burden on the shared host (as well as some
-security concerns), the 'Documentation/pictures/' and
-'Documentation/ly-examples/' directories are **not** compiled.
-We will do this ourselves right now.
-
-Go to your lilypond build directory. make doc.
+security concerns), we do not compile all of LilyPond. The
+website build process runs @code{texi2html}, but all media files
+(be they graphical @code{lilypond} output, photos of people, or
+pdfs) are copied from the @code{$LILYPOND_WEB_MEDIA_GIT}
+repository.
-Set up some variables (you'll only do this once:)
+All scripts and makefiles used for the website build are run from
+a @qq{trusted} copy. Any modification to those files in git needs
+a human to review the changes (after they have been made in git)
+before they are used on the server.
-@example
-BUILD_DIR=$HOME/lilypond-git
-PICS=$BUILD_DIR/Documentation/pictures/
-EXAMPLES=$BUILD_DIR/Documentation/ly-examples/
-@end example
-Copy files over:
+@subheading Building the website (quick local)
-@example
-cp -r $PICS $HOME/lilypond/media/pictures
-cp -r $EXAMPLES $HOME/lilypond/media/ly-examples
-@end example
+Initial setup: make sure that you have the environment variables
+@code{$LILYPOND_GIT} and @code{$LILYPOND_WEB_MEDIA_GIT} set up
+correctly. For more information, see @ref{Other repositories}.
-Get the scripts you need. First define these variables:
+Once that is done,
@example
-GIT=$HOME/lilypond-git
-DEST=$HOME/lilypond/trusted-scripts
-@end example
-
-Then do the copying:
-
-@smallexample
-cp $GIT/make/website.make $DEST/website.make
-cp $GIT/Documentation/lilypond-texi2html.init $DEST/lilypond-texi2html.init
-cp $GIT/scripts/build/extract_texi_filenames.py $DEST/extract_texi_filenames.py
-cp $GIT/scripts/build/create-version-itexi.py $DEST/create-version-itexi.py
-cp $GIT/scripts/build/create-weblinks-itexi.py $DEST/create-weblinks-itexi.py
-cp $GIT/scripts/build/mass-link.py $DEST/mass-link.py
-cp $GIT/scripts/build/website_post.py $DEST/website_post.py
-cp $GIT/scripts/build/bib2texi.py $DEST/bib2texi.py
-cp $GIT/Documentation/web/server/lilypond.org.htaccess $DEST/lilypond.org.htaccess
-cp $GIT/Documentation/web/server/website-dir.htaccess $DEST/website-dir.htaccess
-@end smallexample
-
-For a complete build you will need a copy of @code{lilypond-extra} git repository.
-You can checkout a fresh copy easily:
-
-@example
-export LILYPOND_WEB_MEDIA_GIT=$HOME/lilypond-extra
-git clone git://github.com/gperciva/lilypond-extra.git $LILYPOND_WEB_MEDIA_GIT
-@end example
-
-Just note that the example above expects a bash environment. If you are using another shell
-you might need to use a different keyword, other than @code{export}.
-
-Delete your build directory (or maybe just rename your build
-directory to build-old).
-
-@example
-cd $HOME/lilypond
-@end example
-
-Run
-
-@example
-make -f ../lilypond-git/make/website.make WEBSITE_ONLY_BUILD=1 \
- TOP_SRC_DIR=$HOME/lilypond-git/ \
- PYTHONPATH=$HOME/lilypond-git/python \
- TEXI2HTML_PROGRAM=texi2html \
- website
+cd $LILYPOND_GIT/build/
+make website
@end example
-The website should be at:
+The website is in @file{out-website/website/index.html}.
-@example
-$HOME/lilypond/out-website/website/index.html
-@end example
-@subheading Building the online website
+@subheading Building the website (exactly as on the server)
-The website is generated hourly by user @code{graham} the host
-@code{lilypond.org}. For security reasons, we do not use the
-makefiles and scripts directly from git; copies of the relevant
-scripts are examined and copied to
-@code{~graham/lilypond/trusted-scripts/}
+@subsubheading Setting up (exactly as on the server)
-@subheading Initial setup
-
-You should symlink your own @file{~/lilypond/} to
-@file{~graham/lilypond/}
-
-If this directory does not exist, make it. Git master should go
-in @file{~/lilypond/lilypond-git/} but make sure you enable:
-
-@example
-git config core.filemode false
-@end example
+Initial setup: you still need @code{$LILYPOND_GIT} and
+@code{$LILYPOND_WEB_MEDIA_GIT}.
-If you have created any files in @file{~graham/lilypond/} then
-please run:
+Once that's done, create:
@example
-chgrp lilypond ~graham/lilypond/ -R
-chmod 775 ~graham/lilypond/ -R
+mkdir -p $HOME/lilypond/
+mkdir -p $HOME/lilypond/bin/
+mkdir -p $HOME/lilypond/cron/
+mkdir -p $HOME/lilypond/trusted-scripts/
@end example
-To reduce the CPU burden on the shared host (as well as some
-security concerns), the @file{Documentation/pictures/} and
-@file{Documentation/ly-examples/} directories are
-@strong{not} compiled. You need to upload them, and if they ever
-change, a user in the @code{lilypond} group must upload them to
-@file{~graham/lilypond/media} on the host.
-
-Upload latest pictures/ and ly-examples/ (local script):
+The add these files to @file{$HOME/lilypond/bin/}:
-@warning{You may need to change a number of items in the below
-script.}
-
-@verbatim
-### upload-lily-web-media.sh
-#!/bin/sh
-BUILD_DIR=$HOME/src/build-lilypond
-
-PICS=$BUILD_DIR/Documentation/pictures/out-www/
-EXAMPLES=$BUILD_DIR/Documentation/ly-examples/out-www/
-
-cd $BUILD_DIR
-rsync -a $PICS graham@lilypond.org:lilypond/media/pictures
-rsync -a $EXAMPLES graham@lilypond.org:lilypond/media/ly-examples
-@end verbatim
-
-
-
-@subheading Normal maintenance
-
-Get latest source code:
+Update git repositories:
+@smallexample
@verbatim
### update-git.sh
#!/bin/sh
-cd $HOME/lilypond/lilypond-git
+cd $LILYPOND_GIT
+git fetch origin
+git merge origin/master
+cd $LILYPOND_WEB_MEDIA_GIT
git fetch origin
git merge origin/master
@end verbatim
+@end smallexample
Check for any updates to trusted scripts / files:
+
@smallexample
@verbatim
### check-git.sh
#!/bin/sh
-GIT=$HOME/lilypond/lilypond-git
DEST=$HOME/lilypond/trusted-scripts
-diff -u $DEST/website.make $GIT/make/website.make
-diff -u $DEST/lilypond-texi2html.init $GIT/Documentation/lilypond-texi2html.init
-diff -u $DEST/extract_texi_filenames.py $GIT/scripts/build/extract_texi_filenames.py
-diff -u $DEST/create-version-itexi.py $GIT/scripts/build/create-version-itexi.py
-diff -u $DEST/create-weblinks-itexi.py $GIT/scripts/build/create-weblinks-itexi.py
-diff -u $DEST/mass-link.py $GIT/scripts/build/mass-link.py
-diff -u $DEST/website_post.py $GIT/scripts/build/website_post.py
-diff -u $DEST/bib2texi.py $GIT/scripts/build/bib2texi.py
-diff -u $DEST/langdefs.py $GIT/python/langdefs.py
-diff -u $DEST/lilypond.org.htaccess $GIT/Documentation/web/server/lilypond.org.htaccess
-diff -u $DEST/website-dir.htaccess $GIT/Documentation/web/server/website-dir.htaccess
+diff -u $DEST/website.make \
+ $LILYPOND_GIT/make/website.make
+diff -u $DEST/lilypond-texi2html.init \
+ $LILYPOND_GIT/Documentation/lilypond-texi2html.init
+diff -u $DEST/extract_texi_filenames.py \
+ $LILYPOND_GIT/scripts/build/extract_texi_filenames.py
+diff -u $DEST/create-version-itexi.py \
+ $LILYPOND_GIT/scripts/build/create-version-itexi.py
+diff -u $DEST/create-weblinks-itexi.py \
+ $LILYPOND_GIT/scripts/build/create-weblinks-itexi.py
+diff -u $DEST/mass-link.py \
+ $LILYPOND_GIT/scripts/build/mass-link.py
+diff -u $DEST/website_post.py \
+ $LILYPOND_GIT/scripts/build/website_post.py
+diff -u $DEST/bib2texi.py \
+ $LILYPOND_GIT/scripts/build/bib2texi.py
+diff -u $DEST/langdefs.py \
+ $LILYPOND_GIT/python/langdefs.py
+diff -u $DEST/lilypond.org.htaccess \
+ $LILYPOND_GIT/Documentation/web/server/lilypond.org.htaccess
+diff -u $DEST/website-dir.htaccess \
+ $LILYPOND_GIT/Documentation/web/server/website-dir.htaccess
@end verbatim
+@end smallexample
If the changes look ok, make them trusted:
+@smallexample
@verbatim
### copy-from-git.sh
#!/bin/sh
-GIT=$HOME/lilypond/lilypond-git
DEST=$HOME/lilypond/trusted-scripts
-cp $GIT/make/website.make $DEST/website.make
-cp $GIT/Documentation/lilypond-texi2html.init $DEST/lilypond-texi2html.init
-cp $GIT/scripts/build/extract_texi_filenames.py $DEST/extract_texi_filenames.py
-cp $GIT/scripts/build/create-version-itexi.py $DEST/create-version-itexi.py
-cp $GIT/scripts/build/create-weblinks-itexi.py $DEST/create-weblinks-itexi.py
-cp $GIT/scripts/build/mass-link.py $DEST/mass-link.py
-cp $GIT/scripts/build/website_post.py $DEST/website_post.py
-cp $GIT/scripts/build/bib2texi.py $DEST/bib2texi.py
-cp $GIT/python/langdefs.py $DEST/langdefs.py
-cp $GIT/Documentation/web/server/lilypond.org.htaccess $DEST/lilypond.org.htaccess
-cp $GIT/Documentation/web/server/website-dir.htaccess $DEST/website-dir.htaccess
+cp $LILYPOND_GIT/make/website.make \
+ $DEST/website.make
+cp $LILYPOND_GIT/Documentation/lilypond-texi2html.init \
+ $DEST/lilypond-texi2html.init
+cp $LILYPOND_GIT/scripts/build/extract_texi_filenames.py \
+ $DEST/extract_texi_filenames.py
+cp $LILYPOND_GIT/scripts/build/create-version-itexi.py \
+ $DEST/create-version-itexi.py
+cp $LILYPOND_GIT/scripts/build/create-weblinks-itexi.py \
+ $DEST/create-weblinks-itexi.py
+cp $LILYPOND_GIT/scripts/build/mass-link.py \
+ $DEST/mass-link.py
+cp $LILYPOND_GIT/scripts/build/website_post.py \
+ $DEST/website_post.py
+cp $LILYPOND_GIT/scripts/build/bib2texi.py \
+ $DEST/bib2texi.py
+cp $LILYPOND_GIT/python/langdefs.py \
+ $DEST/langdefs.py
+cp $LILYPOND_GIT/Documentation/web/server/lilypond.org.htaccess \
+ $DEST/lilypond.org.htaccess
+cp $LILYPOND_GIT/Documentation/web/server/website-dir.htaccess \
+ $DEST/website-dir.htaccess
@end verbatim
@end smallexample
Build the website:
+@smallexample
@verbatim
### make-website.sh
#!/bin/sh
cd $BUILD
cp $HOME/lilypond/trusted-scripts/website.make .
-make -f website.make WEBSITE_ONLY_BUILD=1 -B website
+make -f website.make WEBSITE_ONLY_BUILD=1 website
rsync -raO $BUILD/out-website/website/ $DEST/website/
cp $BUILD/out-website/pictures $DEST
cp $BUILD/out-website/.htaccess $DEST
@end verbatim
+@end smallexample
-Cronjob to automate the trusted portions:
+Then in the @file{cronjob/} directory, put the cronjob to automate
+the trusted portions:
+@warning{@code{cron} will not inherit environment variables from
+your main setup, so you must re-define any variables inside your
+@code{crontab}.}
+
+@smallexample
@verbatim
# website-rebuild.cron
+LILYPOND_GIT= ... fill this in
+LILYPOND_WEB_MEDIA_GIT= ... fill this in
+
11 * * * * $HOME/lilypond/trusted-scripts/update-git.sh >/dev/null 2>&1
22 * * * * $HOME/lilypond/trusted-scripts/make-website.sh >/dev/null 2>&1
@end verbatim
+@end smallexample
+
+As the final stage of the setup, run your @code{copy-from-git.sh}
+script, assuming that you trust the current state of scripts in
+lilypond git.
+
+@subsubheading Normal maintenance
+
+When there is a change to the build scripts and/or website
+makefile, log in to the server (or your own home machine if you're
+testing this there), and do
+
+@example
+update-git.sh
+check-git.sh
+@end example
+
+After reviewing the changes carefully, you can update the trusted
+scripts with @code{copy-from-git.sh}.
+
+
+@subsubheading Building the website (exactly as on the server)
+
+Run @code{make-website.sh}; the final version ends up in
+@file{$HOME/web/}.
+
+On the actual server, the website is generated hourly by user
+@code{graham} the host @code{lilypond.org}. You can set up the
+cronjob by doing:
+
+@example
+crontab $HOME/lilypond/website-rebuild.cron
+@end example
+
+
+@subheading Initial setup for new users on actual serve
+
+You should symlink your own @file{~/lilypond/} to
+@file{~graham/lilypond/}
+
+If this directory does not exist, make it. Git master should go
+in @file{~/lilypond/lilypond-git/} but make sure you enable:
+
+@example
+git config core.filemode false
+@end example
+
+If you have created any files in @file{~graham/lilypond/} then
+please run:
+
+@example
+chgrp lilypond ~graham/lilypond/ -R
+chmod 775 ~graham/lilypond/ -R
+@end example
+
@subsubheading Additional information
action will not take place. For example, the
@code{instrumentName} clearly lives in the @code{Staff} context, since
it is the staff that is to be named.
-In this example the first staff is labelled, but not the second,
+In this example the first staff is labeled, but not the second,
because we omitted the context name.
@lilypond[quote,verbatim,ragged-right]
later section --- see the @code{force-hshift} property in
@ref{Fixing overlapping notation}.
+@warning{Lyrics, spanners (such as slurs, ties, hairpins etc.) cannot be
+created @q{across} voices.}
+
@seealso
Notation Reference: @ruser{Multiple voices}.
action will not take place. For example, the
@code{instrumentName} clearly lives in the @code{Staff} context, since
it is the staff that is to be named.
-In this example the first staff is labelled, but not the second,
+In this example the first staff is labeled, but not the second,
because we omitted the context name.
@lilypond[quote,verbatim,ragged-right]
For longer passages, it may be more practical to mark the octave change at the
beginning with a phrase (see the list below for examples), but without a bracket
or extender line. Then, when the music returns to the written pitch, the octave
-change is cancelled with the word @notation{loco} (q.v.).
+change is canceled with the word @notation{loco} (q.v.).
To parallel the list above:
action will not take place. For example, the
@code{instrumentName} clearly lives in the @code{Staff} context, since
it is the staff that is to be named.
-In this example the first staff is labelled, but not the second,
+In this example the first staff is labeled, but not the second,
because we omitted the context name.
@lilypond[quote,verbatim,ragged-right]
TrillPitchGroup - not tried
@end ignore
-These indications affect all notes until they are cancelled.
+These indications affect all notes until they are canceled.
@lilypond[verbatim,quote,relative=2]
c2( c)
* Vertical grouping of grobs::
* Modifying stencils::
* Modifying shapes::
+* Unpure-pure containers::
@end menu
Internals Reference:
@rinternals{TieColumn}.
+@cindex Scheme, pure containers
+@cindex Scheme, unpure containers
+@cindex pure containers, Scheme
+@cindex unpure containers, Scheme
+@cindex horizontal spacing, overriding
+
+@node Unpure-pure containers
+@subsection Unpure-pure containers
+
+Unpure-pure containers are useful for overriding @emph{Y-axis} spacing
+calculations - specifically @code{Y-offset} and @code{Y-extent} - with a
+Scheme function instead of a literal (i.e. a number or pair).
+
+For certain grobs, the @code{Y-extent} is based on the @code{stencil}
+property, overriding the stencil property of one of these will
+require an additional @code{Y-extent} override with an unpure-pure
+container. When a function overrides a @code{Y-offset} and/or
+@code{Y-extent} it is assumed that this will trigger line breaking
+calculations too early during compilation. So the function is not
+evaluated at all (usually returning a value of @var{0} or
+@var{'(0 . 0)}) which can result in collisions. A @q{pure} function
+will not affect properties, objects or grob suicides and therefore will
+always have its Y-axis-related evaluated correctly.
+
+Currently, there are about thirty functions that are already considered
+@q{pure} and Unpure-pure containers are a way to set functions not on
+this list as @q{pure}. The @q{pure} function is evaluated @emph{before}
+any line-breaking and so the horizontal spacing can be adjusted
+@q{in time}. The @q{unpure} function is then evaluated @emph{after}
+line breaking.
+
+@warning{As it is difficult to always know which functions are on this
+list we recommend that any @q{pure} functions you create do not use
+@code{Beam} or @code{VerticalAlignment} grobs.}
+
+An unpure-pure container is constructed as follows;
+
+@code{(ly:make-unpure-pure-container f0 f1)}
+
+where @code{f0} is a function taking @var{n} arguments (@var{n >= 1})
+and the first argument must always be the grob. This is the function
+that gives the actual result. @var{f1} is the function being labeled
+as @q{pure} that takes @var{n + 2} arguments. Again, the first argument
+must always still be the grob but the second and third are @q{start}
+and @q{end} arguments.
+
+@var{start} and @var{end} are, for all intents and purposes, dummy
+values that only matter for @code{Spanners} (i.e @code{Hairpin} or
+@code{Beam}), that can return different height estimations based on a
+starting and ending column.
+
+The rest are the other arguments to the first function (which
+may be none if @var{n = 1}).
+
+The results of the second function are used as an approximation of the
+value needed which is then used by the first function to get the real
+value which is then used for fine-tuning much later during the spacing
+process.
+
+@lilypond[verbatim,quote,ragged-right]
+#(define (square-line-circle-space grob)
+(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
+ (notename (ly:pitch-notename pitch)))
+ (if (= 0 (modulo notename 2))
+ (make-circle-stencil 0.5 0.0 #t)
+ (make-filled-box-stencil '(0 . 1.0)
+ '(-0.5 . 0.5)))))
+
+squareLineCircleSpace = {
+ \override NoteHead #'stencil = #square-line-circle-space
+}
+
+smartSquareLineCircleSpace = {
+ \squareLineCircleSpace
+ \override NoteHead #'Y-extent =
+ #(ly:make-unpure-pure-container
+ ly:grob::stencil-height
+ (lambda (grob start end) (ly:grob::stencil-height grob)))
+}
+
+\new Voice \with { \remove "Stem_engraver" }
+\relative c'' {
+ \squareLineCircleSpace
+ cis4 ces cisis c
+ \smartSquareLineCircleSpace
+ cis4 ces cisis c
+}
+@end lilypond
+
+In the first measure, without the unpure-pure container, the spacing
+engine does not know the width of the note head and lets it collide with
+the accidentals. In the second measure, with unpure-pure containers,
+the spacing engine knows the width of the note heads and avoids the
+collision by lengthening the line accordingly.
+
+Usually for simple calculations nearly-identical functions for both the
+@q{unpure} and @q{pure} parts can be used, by only changing the number
+of arguments passed to, and the scope of, the function.
+
+@warning{If a function is labeled as @q{pure} and it turns out not to
+be, the results can be unexpected.}
+
@node Using music functions
@section Using music functions
>>
@end lilypond
-@funindex \tabChordRepetition
+@funindex \tabChordRepeats
+@funindex \chordRepeats
@cindex Chord, repetition
@cindex repetition, using @code{q}
Chord constructs can be repeated by the chord repetition symbol
-@code{q}. To use this feature in combination with tablature,
-@code{\tabChordRepetition} is provided. It preserves the string
-information explicitly given within chord constructs so repeated chords
-get identical tablature representations.
+@code{q}. In combination with tabulatures, its behavior of removing
+string and finger numbers alongside with other events is cumbersome, so
+you'll want to run
+@example
+\chordRepeats #'(string-number-event fingering-event)
+@end example
+explicitly on music expressions in tabulature using @ref{Chord
+repetition}. This particular command is so common that it is available
+as @code{\tabChordRepeats}.
@lilypond[quote,verbatim]
-\tabChordRepetition
-
guitar = \relative c' {
- r8 <gis\4 cis\3 b\2>~ q4 q8~ q q4
+ r8 <gis-6 cis-6 b-0>~ q4 q8~ q q4
}
\new StaffGroup <<
\new Staff {
\clef "treble_8"
- \override Voice.StringNumber #'transparent = ##t
\guitar
}
\new TabStaff {
- \guitar
+ \tabChordRepeats \guitar
}
>>
@end lilypond
@lilypond[verbatim,quote]
firstHarmonic = {
- <d'\4\harmonic>4
- <g'\3\harmonic>4
- <b'\2\harmonic>2
+ d'4\4\harmonic
+ g'4\3\harmonic
+ b'2\2\harmonic
}
\score {
<<
}
@end lilypond
-Note that the command @code{\harmonic} must always be defined
-inside a chord construct. It only makes sense for open-string harmonics
+Note that the command @code{\harmonic} must always be attached to single
+notes (possibly inside of a chord) instead of whole chords.
+It only makes sense for open-string harmonics
in the 12th fret. All other harmonics should be calculated by LilyPond.
This can be achieved by indicating the fret where a finger of the
fretting hand should touch a string.
@cindex upbeat
@cindex partial measure
@cindex measure, partial
+@cindex measure, pickup
@cindex pickup measure
-@cindex measure, change length
@funindex measurePosition
@funindex \partial
@funindex partial
-Partial or pick-up measures, such as an anacrusis or upbeat, are
-entered using the @code{\partial} command, with the syntax
+Partial or pick-up measures, such as an @emph{anacrusis} or an
+@emph{upbeat}, are entered using the @code{\partial} command,
@example
\partial @var{duration}
@end example
@noindent
-where @code{@var{duration}} is the rhythmic length of the
-remaining interval of the current measure before the start of the
-next.
+where @code{@var{duration}} is the @emph{remaining} length of the
+partial measure @emph{before} the start of the next full measure.
-@lilypond[quote,verbatim,relative=2]
-\partial 4 e4 |
-a2. c,4 |
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\partial 8
+e8 | a4 c8 b c4 |
@end lilypond
-The partial measure can be any duration less than the full measure:
+The @var{duration} can be any value less than a full measure:
-@lilypond[quote,verbatim,relative=2]
-\partial 8*3 c8 d e |
-a2. c,4 |
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\partial 4.
+r4 e8 | a4 c8 b c4 |
@end lilypond
-Internally, @code{\partial @var{duration}} is translated into:
+The @code{\partial @var{duration}} can also be written as;
@example
\set Timing.measurePosition -@var{duration}
@end example
-For example, @code{\partial 8*3} becomes:
+So @code{\partial 8} becomes:
-@example
-\set Timing.measurePosition = #(ly:make-moment -3 8)
-@end example
+@lilypond[quote,verbatim,relative=1]
+\time 3/4
+\set Timing.measurePosition = #(ly:make-moment -1 8)
+e8 | a4 c8 b c4 |
+@end lilypond
The property @code{measurePosition} contains a rational number
indicating how much of the measure has passed at this point. Note
that this is set to a negative number by the @code{\partial} command:
-i.e., @code{\partial 4} is internally translated to @w{@code{-4}}, meaning
-@qq{there is a quarter note left in the measure.}
+i.e., @code{\partial 4} is internally translated to @w{@code{-4}},
+meaning @qq{there is a quarter note left in the measure.}
@seealso
Music Glossary:
@rinternals{Timing_translator}.
@knownissues
+The @code{\partial} command should be used only at the beginning of a
+piece. If you use it after the beginning, warnings or problems may
+occur, so use @code{\set Timing.measurePosition} instead.
-The @code{\partial} command is intended to be used only at the
-beginning of a piece. If you use it after the beginning, some
-odd warnings or effects may occur, in this case use
-@code{\set Timing.measurePosition} instead.
+@lilypond[quote,verbatim,relative=1]
+\time 6/8
+\partial 8
+e8 | a4 c8 b[ c b] |
+\set Timing.measurePosition = #(ly:make-moment -1 4)
+r8 e,8 | a4 c8 b[ c b] |
+@end lilypond
@node Unmetered music
@unnumberedsubsubsec Unmetered music
@warning{If beams are used to indicate melismata in songs, then
automatic beaming should be switched off with @code{\autoBeamOff}
-and the beams indicated manually.}
-
-@warning{Using @code{@bs{}partcombine} with @code{@bs{}autoBeamOff} can
-produce unintended results. See the snippet below for more information.}
+and the beams indicated manually. Using @code{@bs{}partcombine} with
+@code{@bs{}autoBeamOff} can produce unintended results. See the
+snippets for more information.}
Beaming patterns that differ from the automatic defaults can be
created; see @ref{Setting automatic beam behavior}.
@rinternals{beam-interface},
@rinternals{unbreakable-spanner-interface}.
+@knownissues
+The properties of a beam are determined at the @emph{start} of its
+construction and any additional beam-property changes that occur before
+the beam has been completed will not take effect until the @emph{next},
+new beam starts.
+
+
@node Setting automatic beam behavior
@unnumberedsubsubsec Setting automatic beam behavior
other non-chorded notes or rests have been added since.
@lilypond[verbatim,quote,relative=2]
-<a c e>1 c4 q2 r8 q8
+<a c e>1 c'4 q2 r8 q8 |
+q2 c, |
@end lilypond
However, the chord repetition symbol does not retain any dynamics,
-articulation or ornamentation within, or attached to the previous chord.
+articulation or ornamentation within, or attached to, the previous
+chord.
@lilypond[verbatim,quote,relative=2]
-<a-. c\prall e>1\sfz c4 q2 r8 q8
+<a-. c\prall e>1\sfz c'4 q2 r8 q8 |
+q2 c, |
@end lilypond
+To have some of them retained, the @code{\chordRepeats} function can be
+be called explicitly with an extra argument specifying a list of
+@var{event types} to keep unless events of that type are already
+present on the @code{q} chord itself.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+ \chordRepeats #'(articulation-event)
+ { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ q2 c, |
+}
+@end lilypond
+
+Here using @code{\chordRepeats} inside of a @code{\relative} construction
+produces unexpected results: once chord events have been expanded, they
+are indistinguishable from having been entered as regular chords, making
+@code{\relative} assign an octave based on their current context.
+
+Since nested instances of @code{\relative} don't affect one another,
+another @code{\relative} inside of @code{\chordRepeats} can be used for
+establishing the octave relations before expanding the repeat chords.
+In that case, the whole content of the inner @code{\relative} does not
+affect the outer one; hence the different octave entry of the final note
+in this example.
+
+@c Without \new Voice, implicit voice creation does the dumbest thing.
+@lilypond[verbatim,quote]
+\new Voice
+\relative c'' {
+ \chordRepeats #'(articulation-event)
+ \relative c''
+ { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+ q2 c |
+}
+@end lilypond
+
+Interactions with @code{\relative} occur only with explicit calls of
+@code{\chordRepeats}: the implicit expansion at the start of typesetting
+is done at a time where all instances of @code{\relative} have already
+been processed.
+
@seealso
Notation Reference:
@ref{Chord notation},
>>
@end lilypond
+@warning{Lyrics, spanners (such as slurs, ties, hairpins etc.) cannot be
+created @q{across} voices.}
+
@strong{@i{Identical rhythms}}
In the special case that we want to typeset parallel pieces of music
@code{\oneVoice}.
@endpredefined
+Snippets:
+@rlsr{Simultaneous notes}.
@seealso
Learning Manual:
@ref{Invisible rests},
@ref{Stems}.
-Snippets:
-@rlsr{Simultaneous notes}.
-
@node Voice styles
@unnumberedsubsubsec Voice styles
system, so @code{ragged-bottom} and @code{ragged-last-bottom} will
add space between the titles and the first system of the score.
+Explicitly defined paper-sizes will override any user-defined top or
+bottom margin settings.
+
@node Flexible vertical spacing \paper variables
@subsection Flexible vertical spacing @code{\paper} variables
Installed Files:
@file{ly/paper-defaults-init.ly}.
+@knownissues
+
+Explicitly defined paper-sizes will override any user-defined left or
+right margin settings.
+
@node \paper variables for two-sided mode
@unnumberedsubsubsec @code{\paper} variables for two-sided mode
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "keyboards"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-L'ambitus può essere specificato per voce. In tal caso occorre
-spostarlo manualmente per evitare collisioni.
-
-"
- doctitleit = "Un ambitus per voce"
-
lsrtags = "pitches, staff-notation, vocal-music"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Añadir un ámbito por voz"
texidoces = "
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+L'ambitus può essere specificato per voce. In tal caso occorre
+spostarlo manualmente per evitare collisioni.
+
+"
+ doctitleit = "Un ambitus per voce"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-L'ajout du graveur @code{Bar_engraver} à un contexte @code{ChordNames}
-permet d'imprimer les barres de mesure entre les chiffrages.
-
-"
- doctitlefr = "Chiffrages et barres de mesure"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Para añadir indicaciones de línea divisoria dentro del contexto de
"
doctitlede = "Tatkstriche in einen ChordNames-Kontext hinzufügen"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+L'ajout du graveur @code{Bar_engraver} à un contexte @code{ChordNames}
+permet d'imprimer les barres de mesure entre les chiffrages.
+
+"
+ doctitlefr = "Chiffrages et barres de mesure"
+
texidoc = "
To add bar line indications in the @code{ChordNames} context, add the
@code{Bar_engraver}.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "rhythms, percussion"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "staff-notation, vocal-music"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Se si aggiunge l'incisore @code{Ambitus_engraver} al contesto @code{Staff} viene
-creato un solo ambitus per il rigo, anche nel caso di righi che hanno più
-voci.
-
-"
- doctitleit = "Ambitus su più voci"
-
lsrtags = "pitches, vocal-music"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Ámbitos con varias voces"
texidoces = "
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Se si aggiunge l'incisore @code{Ambitus_engraver} al contesto @code{Staff} viene
+creato un solo ambitus per il rigo, anche nel caso di righi che hanno più
+voci.
+
+"
+ doctitleit = "Ambitus su più voci"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-La proprietà @code{shapeNoteStyles} può essere usata per definire vari
-stili di teste di nota per ogni grado della scala (definita dall'armatura
-di chiave o dalla proprietà @code{tonic}). Questa proprietà richiede un
-insieme di simboli, che può essere puramente arbitrario (sono permesse
-espressioni geometriche come @code{triangle}, @code{cross} e @code{xcircle})
-o basato sull'antica tradizione tipografica americana (sono consentiti
-anche alcuni nomi di nota latini).
-
-Detto questo, per imitare gli antichi canzionieri americani, ci sono vari
-stili predefiniti disponibili attraverso dei comodi comandi come
-@code{\\aikenHeads} o @code{\\sacredHarpHeads}.
-
-Questo esempio mostra modi diversi di ottenere teste di nota di varie
-forme e illustra la possibilità di trasporre una melodia senza
-perdere la corrispondenza tra le funzioni armoniche e gli stili delle
-teste.
-
-"
- doctitleit = "Applicazione degli stili delle teste di nota in base al grado della scala"
-
lsrtags = "pitches, editorial-annotations"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
texidoces = "
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+La proprietà @code{shapeNoteStyles} può essere usata per definire vari
+stili di teste di nota per ogni grado della scala (definita dall'armatura
+di chiave o dalla proprietà @code{tonic}). Questa proprietà richiede un
+insieme di simboli, che può essere puramente arbitrario (sono permesse
+espressioni geometriche come @code{triangle}, @code{cross} e @code{xcircle})
+o basato sull'antica tradizione tipografica americana (sono consentiti
+anche alcuni nomi di nota latini).
+
+Detto questo, per imitare gli antichi canzionieri americani, ci sono vari
+stili predefiniti disponibili attraverso dei comodi comandi come
+@code{\\aikenHeads} o @code{\\sacredHarpHeads}.
+
+Questo esempio mostra modi diversi di ottenere teste di nota di varie
+forme e illustra la possibilità di trasporre una melodia senza
+perdere la corrispondenza tra le funzioni armoniche e gli stili delle
+teste.
+
+"
+ doctitleit = "Applicazione degli stili delle teste di nota in base al grado della scala"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen"
texidocde = "
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "world-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "expressive-marks, text"
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-Le séparateur de termes d'un chiffrage peut adopter n'importe quelle
-forme à l'aide d'un @emph{markup}.
-
-"
- doctitlefr = "Personnalisation du séparateur d'accords"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Se puede establecer el separador entre las distintas partes del
"
doctitlede = "Akkordsymboltrenner verändern"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+Le séparateur de termes d'un chiffrage peut adopter n'importe quelle
+forme à l'aide d'un @emph{markup}.
+
+"
+ doctitlefr = "Personnalisation du séparateur d'accords"
+
texidoc = "
The separator between different parts of a chord name can be set to any
markup.
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-On peut choisir d'imprimer les altérations et signes plus aussi bien
-avant qu'après les chiffres, en réglant les propriétés
-@code{figuredBassAlterationDirection} et
-@code{figuredBassPlusDirection}.
-
-"
- doctitlefr = "Emplacement des altération en basse continue"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Las alteraciones y los signos «más» pueden aparecer antes o
"
doctitlede = "Positionen von Generalbass-Alterationszeichen verändern"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+On peut choisir d'imprimer les altérations et signes plus aussi bien
+avant qu'après les chiffres, en réglant les propriétés
+@code{figuredBassAlterationDirection} et
+@code{figuredBassPlusDirection}.
+
+"
+ doctitlefr = "Emplacement des altération en basse continue"
+
texidoc = "
Accidentals and plus signs can appear before or after the numbers,
depending on the @code{figuredBassAlterationDirection} and
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-Il est possible de créer votre propre modèle de chiffrages en
-réglant la propriété @code{chordNameExceptions}.
-
-"
- doctitlefr = "Modèles de chiffrage d'accords"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Se puede usar la propiedad @code{chordNameExceptions} para
"
doctitlede = "Akkordsymbolausnahmen"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+Il est possible de créer votre propre modèle de chiffrages en
+réglant la propriété @code{chordNameExceptions}.
+
+"
+ doctitlefr = "Modèles de chiffrage d'accords"
+
texidoc = "
The property @code{chordNameExceptions} can be used to store a list of
special notations for specific chords.
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-La représentation d'un accord de septième majeure se gère par le
-@code{majorSevenSymbol}.
-
-"
- doctitlefr = "Chiffrage d'un maj7"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
La presentación del acorde de séptima mayor se
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+La représentation d'un accord de septième majeure se gère par le
+@code{majorSevenSymbol}.
+
+"
+ doctitlefr = "Chiffrage d'un maj7"
+
texidoc = "
The layout of the major 7 can be tuned with @code{majorSevenSymbol}.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "midi"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
"
doctitlede = "Silben im Gesangstext formatieren"
+
%% Translation of GIT committish: d9d1da30361a0bcaea1ae058eb1bc8dd3a5b2e4c
texidocfr = "
Le mode markup permet d'individualiser la mise en forme de certaines syllabes.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "pitches"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "rhythms, percussion"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "expressive-marks"
"
doctitleit = "Modello per inno"
+
%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
texidocde = "
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "editorial-annotations, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "text"
texidocfr = "
En musique mensurale, les barres de mesure ne traversent pas les
portées. Pour obtenir ce résultat avec un @code{StaffGroup} plutôt
-qu'en utilisant un @code{ChoirStaff}, il faudra rendre
+qu'en utilisant un @code{ChoirStaff}, il faudra rendre
@qq{transparentes} les portions de barre qui recouvrent les portées.
"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Internamente, @code{\\ottava} imposta le proprietà @code{ottavation} (ad
-esempio, su @code{8va} o @code{8vb}) e @code{middleCPosition}. Per
-sovrascrivere il testo della parentesi, occorre specificare @code{ottavation}
-dopo il comando @code{\\ottava}.
-
-"
- doctitleit = "Testo dell'ottava"
-
lsrtags = "pitches, text"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
doctitlees = "Texto de octava alta y baja"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Internamente, @code{\\ottava} imposta le proprietà @code{ottavation} (ad
+esempio, su @code{8va} o @code{8vb}) e @code{middleCPosition}. Per
+sovrascrivere il testo della parentesi, occorre specificare @code{ottavation}
+dopo il comando @code{\\ottava}.
+
+"
+ doctitleit = "Testo dell'ottava"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Intern setzt die @code{set-octavation}-Funktion die Eigenschaften
"
doctitlees = "Partcombine y autoBeamOff"
+
%% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
texidocde = "
"
doctitlede = "Partcombine und autoBeamOff"
+
%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
texidocfr = "
La fonction @code{\\autoBeamOff} dans le cadre d'un
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "vocal-music, keyboards, template"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Secondo le norme tipografiche standard, un segno di bequadro viene
-inserito prima di un diesis o di un bemolle se un'alterazione
-precedente sulla stessa nota deve essere cancellata. Per cambiare
-questo comportamento si imposta la proprietà @code{extraNatural} su
-@code{f} (falso) nel contesto @code{Staff}.
-
-"
- doctitleit = "Impedire l'inserimento automatico dei bequadri supplementari"
-
lsrtags = "pitches"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Secondo le norme tipografiche standard, un segno di bequadro viene
+inserito prima di un diesis o di un bemolle se un'alterazione
+precedente sulla stessa nota deve essere cancellata. Per cambiare
+questo comportamento si imposta la proprietà @code{extraNatural} su
+@code{f} (falso) nel contesto @code{Staff}.
+
+"
+ doctitleit = "Impedire l'inserimento automatico dei bequadri supplementari"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch
hinzugefügt werden"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Quando l'armatura di chiave cambia, vengono inseriti automaticamente i
-segni di bequadro per annulare le alterazioni di precedenti armature. Si
-può evitare questo comportamento impostando su @code{f} (falso) la proprietà
-@code{printKeyCancellation} nel contesto @code{Staff}.
-
-"
- doctitleit = "Impedire l'inserimento dei segni di bequadro quando cambia l'armatura di chiave"
-
lsrtags = "pitches"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Quando l'armatura di chiave cambia, vengono inseriti automaticamente i
+segni di bequadro per annulare le alterazioni di precedenti armature. Si
+può evitare questo comportamento impostando su @code{f} (falso) la proprietà
+@code{printKeyCancellation} nel contesto @code{Staff}.
+
+"
+ doctitleit = "Impedire l'inserimento dei segni di bequadro quando cambia l'armatura di chiave"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Auflösungzeichen nicht setzen wenn die Tonart wechselt"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "staff-notation, tweaks-and-overrides, breaks"
skips-in-lyric-mode-2.ly
skips-in-lyric-mode.ly
stemlets.ly
+strict-beat-beaming.ly
subdividing-beams.ly
three-sided-box.ly
time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-Vous pouvez faire ressortir les chiffrages d'accords s'ils ne sont
-imprimés qu'aux changements d'accord ou en début de ligne.
-
-"
- doctitlefr = "Impression des accords si changement"
-
lsrtags = "chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Se pueden imprimir los acordes exclusivamente al comienzo de las
"
doctitlede = "Akkordsymbole bei Wechsel anzeigen"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+Vous pouvez faire ressortir les chiffrages d'accords s'ils ne sont
+imprimés qu'aux changements d'accord ou en début de ligne.
+
+"
+ doctitlefr = "Impression des accords si changement"
+
texidoc = "
Chord names can be displayed only at the start of lines and when the
chord changes.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "paper-and-layout"
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Questo esempio usa del codice Scheme per imporre delle modifiche
-enarmoniche alle note che permettano di avere il numero minimo di
-alterazioni. In questo caso si applica la seguente regola:
-
-Le doppie alterazioni devono essere eliminate
-
-
-Si diesis -> Do
-
-
-Mi diesis -> Fa
-
-
-Do bemolle -> Si
-
-
-Fa bemolle -> Mi
-
-
-In questo modo vengono scelti i suoni enarmonici più semplici.
-
-"
- doctitleit = "Trasposizione delle altezze con numero minimo di alterazioni"
-
lsrtags = "pitches"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Transportar música con el menor número de alteraciones"
texidoces = "
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Questo esempio usa del codice Scheme per imporre delle modifiche
+enarmoniche alle note che permettano di avere il numero minimo di
+alterazioni. In questo caso si applica la seguente regola:
+
+Le doppie alterazioni devono essere eliminate
+
+
+Si diesis -> Do
+
+
+Mi diesis -> Fa
+
+
+Do bemolle -> Si
+
+
+Fa bemolle -> Mi
+
+
+In questo modo vengono scelti i suoni enarmonici più semplici.
+
+"
+ doctitleit = "Trasposizione delle altezze con numero minimo di alterazioni"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
\version "2.14.0"
\header {
-%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
- texidocit = "
-Il comando @code{\\clef \"treble_8\"} equivale a impostare
-@code{clefGlyph}, @code{clefPosition} (che regola la posizione
-verticale della chiave), @code{middleCPosition} e
-@code{clefOctavation}. Viene stampata una chiave quando cambia una
-di queste proprietà, eccetto @code{middleCPosition}.
-
-
-La modifica del glifo, della posizione della chiave o
-dell'ottavazione non è sufficiente per cambiare la posizione delle
-note che seguono sul rigo: bisogna anche specificare la posizione
-del Do centrale (middle C). I parametri di posizione sono relativi
-alla linea centrale del rigo, con i numeri positivi che indicano
-la parte superiore: ogni linea e spazio valgono uno. Il valore
-@code{clefOctavation} di norma è impostato su 7, -7, 15
-o -15, ma altri valori sono considerati validi.
-
-
-Quando un cambio di chiave avviene in corrispondenza di un'interruzione di
-linea, di norma il simbolo della nuova chiave viene inserito sia alla fine
-del rigo precedente sia all'inizio di quello successivo. Se la
-chiave di avvertimento a fine rigo non fosse necessaria,
-può essere nascosta impostando la proprietà @code{explicitClefVisibility}
-del contesto @code{Staff} su @code{end-of-line-invisible}. Il comportamento
-predefinito può essere ripristinato con @code{\\unset Staff.explicitClefVisibility}.
-
-Gli esempi seguenti mostrano le possibilità date dall'impostazione
-manuale di tali proprietà. Sulla prima linea le modifiche manuali preservano
-il posizionamento relativo standard di chiavi e note, mentre sulla seconda
-linea non lo fanno.
-
-
-"
- doctitleit = "Modifiche manuali della proprietà della chiave"
-
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
doctitlees = "Trucaje de las propiedades de clave"
texidoces = "
"
+%% Translation of GIT committish: bbf8fd2b5a3ebf20a1fdc91613dc49045a53a270
+ texidocit = "
+Il comando @code{\\clef \"treble_8\"} equivale a impostare
+@code{clefGlyph}, @code{clefPosition} (che regola la posizione
+verticale della chiave), @code{middleCPosition} e
+@code{clefOctavation}. Viene stampata una chiave quando cambia una
+di queste proprietà, eccetto @code{middleCPosition}.
+
+
+La modifica del glifo, della posizione della chiave o
+dell'ottavazione non è sufficiente per cambiare la posizione delle
+note che seguono sul rigo: bisogna anche specificare la posizione
+del Do centrale (middle C). I parametri di posizione sono relativi
+alla linea centrale del rigo, con i numeri positivi che indicano
+la parte superiore: ogni linea e spazio valgono uno. Il valore
+@code{clefOctavation} di norma è impostato su 7, -7, 15
+o -15, ma altri valori sono considerati validi.
+
+
+Quando un cambio di chiave avviene in corrispondenza di un'interruzione di
+linea, di norma il simbolo della nuova chiave viene inserito sia alla fine
+del rigo precedente sia all'inizio di quello successivo. Se la
+chiave di avvertimento a fine rigo non fosse necessaria,
+può essere nascosta impostando la proprietà @code{explicitClefVisibility}
+del contesto @code{Staff} su @code{end-of-line-invisible}. Il comportamento
+predefinito può essere ripristinato con @code{\\unset Staff.explicitClefVisibility}.
+
+Gli esempi seguenti mostrano le possibilità date dall'impostazione
+manuale di tali proprietà. Sulla prima linea le modifiche manuali preservano
+il posizionamento relativo standard di chiavi e note, mentre sulla seconda
+linea non lo fanno.
+
+
+"
+ doctitleit = "Modifiche manuali della proprietà della chiave"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Eigenschaften des Schlüssels optimieren"
texidocde = "
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.15.20"
+\version "2.15.25"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
\version "2.14.0"
\header {
-%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
- texidocfr = "
-L'ajout du @code{Volta_engraver} à la bonne portée permet d'imprimer les
-crochets de reprise entre les chiffrages et la portée.
-
-"
- doctitlefr = "Crochet de reprise sous les chiffrages d'accord"
-
lsrtags = "repeats, staff-notation, chords"
-
-
-
-
-
%% Translation of GIT committish: 6977ddc9a3b63ea810eaecb864269c7d847ccf98
texidoces = "
Mediante la adición del grabador @code{Volta_engraver} al
"
doctitlede = "Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole"
+%% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
+ texidocfr = "
+L'ajout du @code{Volta_engraver} à la bonne portée permet d'imprimer les
+crochets de reprise entre les chiffrages et la portée.
+
+"
+ doctitlefr = "Crochet de reprise sous les chiffrages d'accord"
+
texidoc = "
By adding the @code{Volta_engraver} to the relevant staff, volte can be
put under chords.
@subheading Step 4: Wait for a response
Once your bug has been sent to the list, our Bug Squad will
-examine the report. Please allow up to 24 hours, as we have a
+examine the report. Please allow up to 4 days, as we have a
limited number of volunteers for this task. They may ask you for
more information, or may add the report to the tracker and let you
know what the issue number is.
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading LilyPond 2.15.28 released! @emph{Feb 3, 2012}
+
+We are happy to announce the release of LilyPond 2.15.28. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version. Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
+
+@newsEnd
+
+
@newsItem
@subsubheading LilyPond 2.15.27 released! @emph{Jan 24, 2012}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=15
-PATCH_LEVEL=28
+PATCH_LEVEL=29
MY_PATCH_LEVEL=
VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.27
+VERSION_DEVEL=2.15.28
--- /dev/null
+\version "2.14.2"
+
+\header {
+ texidoc = "Ambitus for pieces beginning with @code{\\cueDuringWithClef}.
+
+Cues are often used at or near the beginning of a piece. Furthermore,
+a cue is frequently in a different clef, so the
+@code{\\cueDuringWithClef} command is handy. Using this command at
+the beginning of a piece should leave the ambitus displayed based
+on the main clef.
+"
+}
+
+\addQuote "other" \relative c { r4 c e g }
+
+\new Staff \new Voice \relative c'
+{
+ \cueDuringWithClef #"other" #UP #"bass" { R1 } |
+ e4 b c2
+}
+
+\layout {
+ \context {
+ \Voice
+ \consists "Ambitus_engraver"
+ }
+}
--- /dev/null
+\version "2.15.28"
+
+
+\header {
+ texidoc = "
+Chord repetitions are expanded late in the processing order and get
+their note events only then. Check that @code{\\times} still works
+correctly on them.
+"
+}
+
+\relative c' {
+ <c e g>4 r <c e g>2 ~ |
+ \times 2/3 { <c e g>4 q q } \times 2/3 { q q q } |
+}
\header {
texidoc = "Clefs for cue notes: Print a cue clef at the begin of the cue
-notes and a cancelling clef after the cue notes."
+notes and a canceling clef after the cue notes."
}
vI = \relative c'' { \clef "treble" \repeat unfold 16 g4 }
\test ##[ \skip 2.*3/4 #] % SkipMusic
\test ##[ < c\1 e\3 >4.*3/4-. #] % EventChord, NoteEvent, StringNumberEvent, ArticulationEvent
\test ##[ < c-1\4 >8 #]
-\test "NOT A BUG" ##[ { < c e g c' > q8-. } #] % RepeatedChord
+\test ##[ { < c e g c' >4 q8-. } #] % RepeatedChord
%% tags
\test ##[ { \tag #'foo { c4 d } } #]
myDisplayMusic =
#(define-music-function (parser location music)
(ly:music?)
- (display-scheme-music music)
+ (display-scheme-music music (current-error-port))
(make-music 'SequentialMusic 'void #t))
\myDisplayMusic \chordmode { c }
}
%%%% message functions of the Input class:
-#(display "\nMessage functions of the Input class:\n")
+#(display "\nMessage functions of the Input class:\n" (current-error-port))
messageTest = #(define-music-function (parser location) ()
(ly:input-message location "Test ly:input-message" )
(make-music 'Music))
{
-% #(display "-) Testing message\n")
+% #(display "-) Testing message\n" (current-error-port))
\messageTest % message
-% #(display "-) Testing warning\n")
+% #(display "-) Testing warning\n" (current-error-port))
c4( c( c) % warning
-% #(display "-) Testing error\n")
+% #(display "-) Testing error\n" (current-error-port))
% sr % error
}
%%%% message functions in the warn.hh file:
-#(display "Message functions in the warn.hh file:\n")
+#(display "Message functions in the warn.hh file:\n" (current-error-port))
-% #(display "-) Testing debug\n")
+% #(display "-) Testing debug\n" (current-error-port))
#(ly:debug "Test debug\n")
-% #(display "-) Testing progress\n")
+% #(display "-) Testing progress\n" (current-error-port))
#(ly:progress "Test progress\n")
-% #(display "-) Testing message\n")
+% #(display "-) Testing message\n" (current-error-port))
#(ly:message "Test message\n")
-% #(display "-) Testing warning\n")
+% #(display "-) Testing warning\n" (current-error-port))
#(ly:warning "Test warning\n")
-% #(display "-) Testing error\n")
-% #(ly:error "Test error\n")
+% #(display "-) Testing error\n" (current-error-port))
+% #(ly:error "Test error\n" (current-error-port))
previous releases."
}
-#(ly:option-usage)
+#(ly:option-usage (current-error-port))
\header {
texidoc = "The vertical spacing engine is not confused by a
non-staff line below a system followed by a loose line above the
-next system."
+next system. Systems are spaced far enough that loose lines
+are not interleaved, even if gaps would allow interleaving."
}
\paper {
- indent = 0
ragged-right = ##t
}
(lambda (trans)
(display (list "initialize"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
(cons 'start-translation-timestep
(lambda (trans)
(display (list "start-trans"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
(cons 'listeners
(list
(cons 'rest-event (lambda (engraver event)
(let*
((x (ly:engraver-make-grob engraver 'TextScript event)))
- (display (list "caught event" event "\ncreate:\n" x "\n"))
+ (display (list "caught event" event "\ncreate:\n" x "\n") (current-error-port))
(ly:grob-set-property! x 'text "hi"))
))
))
(list
(cons 'note-head-interface
(lambda (engraver grob source-engraver)
- (display (list "saw head: " grob " coming from " source-engraver))
+ (display (list "saw head: " grob " coming from " source-engraver) (current-error-port))
))
))
(cons 'end-acknowledgers
(list
(cons 'beam-interface
(lambda (engraver grob source-engraver)
- (display (list "saw end of beam: " grob " coming from " source-engraver))
+ (display (list "saw end of beam: " grob " coming from " source-engraver) (current-error-port))
))
))
(cons 'process-music
(lambda (trans)
(display (list "process-music"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
(cons 'process-acknowledged
(lambda (trans)
(display (list "process-acknowledged"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
(cons 'stop-translation-timestep
(lambda (trans)
(display (list "stop-trans"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
(cons 'finalize
(lambda (trans)
(display (list "finalize"
(ly:context-current-moment
- (ly:translator-context trans)) "\n"))))
+ (ly:translator-context trans)) "\n") (current-error-port))))
)
}}
--- /dev/null
+\version "2.15.28"
+
+\header {
+ texidoc = "In a TabStaff, the chord repetition function needs
+to retain string and fingering information. Using
+@code{\\tabChordRepeats} achieves that, in contrast to the music
+on the main staff."
+}
+
+Guitar = \relative c' {
+ r8 < gis-6 cis-6 b-0 > ~ q4 q8 ~ q q4
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff {
+ \new Voice {
+ \clef "treble_8"
+ \Guitar
+ }
+ }
+ \new TabStaff {
+ \new TabVoice {
+ \tabChordRepeats \Guitar
+ }
+ }
+ >>
+}
\header {
texidoc = "In a TabStaff, the chord repetition function needs
-to save the string information. This is handled by
-@code{\\tabChordRepetition}."
+to save the string information. The obsolete function
+@code{\\tabChordRepetition} establishes this setting score-wide.
+Nowadays, you would rather use just @code{\\tabChordRepeat} on the
+music in the tabstaff, not affecting other contexts."
}
\tabChordRepetition
* may then oversee a clef that is defined in a staff context if
* we are in a voice context; middleCPosition would then be
* assumed to be 0.
+
+ * Don't use middleCPosition as this may be thwarted by a cue
+ * starting here. middleCOffset is not affected by cue clefs.
*/
- start_c0_ = robust_scm2int (get_property ("middleCPosition"), 0);
+ int clef_pos = robust_scm2int (get_property ("middleCClefPosition"), 0);
+ int offset = robust_scm2int (get_property ("middleCOffset"), 0);
+
+ start_c0_ = clef_pos + offset;
start_key_sig_ = get_property ("keySignature");
is_typeset_ = true;
/* read */
"keySignature "
- "middleCPosition ",
+ "middleCClefPosition "
+ "middleCOffset ",
/* write */
""
if (arriving_hairpins_.size ())
{
if (arriving_hairpins_.size () > 1)
- for (vsize i = 0; i < arriving_hairpins_.size (); i++)
- for (vsize j = i; j < arriving_hairpins_.size (); j++)
+ for (vsize i = 0; i < arriving_hairpins_.size () - 1; i++)
+ for (vsize j = i + 1; j < arriving_hairpins_.size (); j++)
{
Pointer_group_interface::add_grob (arriving_hairpins_[i], ly_symbol2scm ("concurrent-hairpins"), arriving_hairpins_[j]);
Pointer_group_interface::add_grob (arriving_hairpins_[j], ly_symbol2scm ("concurrent-hairpins"), arriving_hairpins_[i]);
/* Cancel any ongoing crescendo, either explicitly by \! or
implicitly by a new crescendo. Also avoid warning if cresc is
- cancelled both implicitly and explicitly. */
+ canceled both implicitly and explicitly. */
if ((d == STOP || current_cresc_ev_) && !accepted_spanevents_drul_[STOP])
ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[STOP], ev);
}
return SCM_BOOL_F;
}
-LY_DEFINE (ly_vsize_p, "ly:vsize?",
- 1, 0, 0, (SCM s),
- "Is @var{s} a vsize?")
-{
- if (scm_is_integer (s))
- {
- int i = scm_to_int (s);
- return i >= 0 ? SCM_BOOL_T : SCM_BOOL_F;
- }
- return SCM_BOOL_F;
-}
-
LY_DEFINE (ly_assoc_get, "ly:assoc-get",
2, 2, 0,
(SCM key, SCM alist, SCM default_value, SCM strict_checking),
x_points[d] = e[-d];
else
{
- Real broken_bound_padding = 0.0;
+ Real broken_bound_padding
+ = robust_scm2double (me->get_property ("broken-bound-padding"), 0.0);
extract_grob_set (me, "concurrent-hairpins", chp);
for (vsize i = 0; i < chp.size (); i++)
{
void kill_lexer ();
void set_lexer ();
-struct Chord_repetition
-{
- Chord_repetition ()
- {
- last_chord_ = SCM_EOL;
- repetition_function_ = SCM_EOL;
- repetition_symbol_ = SCM_EOL;
- }
-
- SCM repetition_symbol_;
- SCM repetition_function_;
- SCM last_chord_;
-};
-
class Lily_lexer : public Includable_lexer
{
DECLARE_SMOBS (Lily_lexer);
SCM chordmodifier_tab_;
SCM pitchname_tab_stack_;
- Chord_repetition chord_repetition_;
-
int error_level_;
Input last_input_;
struct Lookup
{
- static Stencil dot (Offset p, Real radius);
static Stencil bracket (Axis a, Interval iv, Real thick, Real protrude, Real blot);
+ static Stencil circle (Real rad, Real thick, bool filled);
static Stencil rotated_box (Real slope, Real width, Real thick, Real blot);
static Stencil round_filled_polygon (vector<Offset> const &points, Real blotdiameter);
static Stencil frame (Box b, Real thick, Real blot);
public:
DECLARE_SCHEME_CALLBACK (cumulative_length_callback, (SCM));
DECLARE_SCHEME_CALLBACK (maximum_length_callback, (SCM));
+ DECLARE_SCHEME_CALLBACK (event_chord_length_callback, (SCM));
DECLARE_SCHEME_CALLBACK (minimum_start_callback, (SCM));
DECLARE_SCHEME_CALLBACK (first_start_callback, (SCM));
DECLARE_SCHEME_CALLBACK (simultaneous_relative_callback, (SCM, SCM));
DECLARE_SCHEME_CALLBACK (event_chord_relative_callback, (SCM, SCM));
- DECLARE_SCHEME_CALLBACK (repeated_chord_relative_callback, (SCM, SCM));
Pitch do_relative_octave (Pitch p, bool b);
vector<Real> solution_;
Real force_;
Skyline bottom_skyline_;
+ Real bottom_loose_baseline_;
Real page_height_;
Real header_height_;
Real footer_height_;
yylval.scm = scm_from_locale_string (s);
return RESTNAME;
}
+<chords,notes,figures>q {
+ return CHORD_REPETITION;
+}
+
<chords,notes,figures>R {
return MULTI_MEASURE_REST;
}
yylval.scm = scm_cdr (handle);
return CHORD_MODIFIER;
}
- if ((chord_repetition_.repetition_symbol_ != SCM_EOL)
- && to_boolean (scm_equal_p (chord_repetition_.repetition_symbol_, sym)))
- return CHORD_REPETITION;
}
-
yylval.scm = ly_string2scm (str);
return STRING;
}
error_level_ = 0;
is_main_input_ = false;
start_module_ = SCM_EOL;
- chord_repetition_ = Chord_repetition ();
extra_tokens_ = SCM_EOL;
smobify_self ();
pitchname_tab_stack_ = src.pitchname_tab_stack_;
sources_ = src.sources_;
start_module_ = SCM_EOL;
- chord_repetition_ = src.chord_repetition_;
error_level_ = 0;
is_main_input_ = src.is_main_input_;
return SCM_UNSPECIFIED;
}
-LY_DEFINE (ly_parser_set_repetition_symbol, "ly:parser-set-repetition-symbol",
- 2, 0, 0, (SCM parser, SCM sym),
- "Replace the current repetition symbol in @var{parser}."
- " @var{sym} is the new repetition symbol.")
-{
- LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = unsmob_lily_parser (parser);
-
- p->lexer_->chord_repetition_.repetition_symbol_ = sym;
-
- return SCM_UNSPECIFIED;
-}
-
-LY_DEFINE (ly_parser_set_repetition_function, "ly:parser-set-repetition-function",
- 2, 0, 0, (SCM parser, SCM fun),
- "Replace the current repetition function in @var{parser}."
- " @var{fun} is the new repetition function.")
-{
- LY_ASSERT_SMOB (Lily_parser, parser, 1);
- Lily_parser *p = unsmob_lily_parser (parser);
-
- p->lexer_->chord_repetition_.repetition_function_ = fun;
-
- return SCM_UNSPECIFIED;
-}
-
LY_DEFINE (ly_parser_output_name, "ly:parser-output-name",
1, 0, 0, (SCM parser),
"Return the base name of the output file.")
#include "main.hh"
#include "lily-guile.hh"
-Stencil
-Lookup::dot (Offset p, Real radius)
-{
- SCM at = (scm_list_n (ly_symbol2scm ("dot"),
- scm_from_double (p[X_AXIS]),
- scm_from_double (p[Y_AXIS]),
- scm_from_double (radius),
- SCM_UNDEFINED));
- Box box;
- box.add_point (p - Offset (radius, radius));
- box.add_point (p + Offset (radius, radius));
- return Stencil (box, at);
-}
-
Stencil
Lookup::beam (Real slope, Real width, Real thick, Real blot)
{
return Stencil (b, scm_from_locale_string (""));
}
+Stencil
+Lookup::circle (Real rad, Real thick, bool filled)
+{
+ Box b (Interval (-rad, rad), Interval (-rad, rad));
+ return Stencil (b, scm_list_4 (ly_symbol2scm ("circle"),
+ scm_from_double (rad),
+ scm_from_double (thick),
+ scm_from_bool (filled)));
+}
+
Stencil
Lookup::filled_box (Box b)
{
if (points.size () == 0)
return Stencil ();
if (points.size () == 1)
- return dot (points[0], 0.5 * blotdiameter);
+ {
+ Stencil circ = circle (0.5 * blotdiameter, 0, true);
+ circ.translate (points[0]);
+ return circ;
+ }
if (points.size () == 2)
return Line_interface::make_line (blotdiameter, points[0], points[1]);
Stencil
Lookup::bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real thickness)
{
- /*
- Need the weird order b.o. the way PS want its arguments
- */
- SCM list = SCM_EOL;
- list = scm_cons (ly_offset2scm (bottom_curve.control_[3]), list);
- list = scm_cons (ly_offset2scm (bottom_curve.control_[0]), list);
- list = scm_cons (ly_offset2scm (bottom_curve.control_[1]), list);
- list = scm_cons (ly_offset2scm (bottom_curve.control_[2]), list);
- list = scm_cons (ly_offset2scm (top_curve.control_[0]), list);
- list = scm_cons (ly_offset2scm (top_curve.control_[3]), list);
- list = scm_cons (ly_offset2scm (top_curve.control_[2]), list);
- list = scm_cons (ly_offset2scm (top_curve.control_[1]), list);
-
- SCM horizontal_bend = scm_list_n (ly_symbol2scm ("bezier-sandwich"),
- ly_quote_scm (list),
+ SCM commands = scm_list_n (ly_symbol2scm ("moveto"),
+ scm_from_double (top_curve.control_[0][X_AXIS]),
+ scm_from_double (top_curve.control_[0][Y_AXIS]),
+ ly_symbol2scm ("curveto"),
+ scm_from_double (top_curve.control_[1][X_AXIS]),
+ scm_from_double (top_curve.control_[1][Y_AXIS]),
+ scm_from_double (top_curve.control_[2][X_AXIS]),
+ scm_from_double (top_curve.control_[2][Y_AXIS]),
+ scm_from_double (top_curve.control_[3][X_AXIS]),
+ scm_from_double (top_curve.control_[3][Y_AXIS]),
+ ly_symbol2scm ("curveto"),
+ scm_from_double (bottom_curve.control_[2][X_AXIS]),
+ scm_from_double (bottom_curve.control_[2][Y_AXIS]),
+ scm_from_double (bottom_curve.control_[1][X_AXIS]),
+ scm_from_double (bottom_curve.control_[1][Y_AXIS]),
+ scm_from_double (bottom_curve.control_[0][X_AXIS]),
+ scm_from_double (bottom_curve.control_[0][Y_AXIS]),
+ ly_symbol2scm ("closepath"),
+ SCM_UNDEFINED);
+
+ SCM horizontal_bend = scm_list_n (ly_symbol2scm ("path"),
scm_from_double (thickness),
+ ly_quote_scm (commands),
+ ly_quote_scm (ly_symbol2scm ("round")),
+ ly_quote_scm (ly_symbol2scm ("round")),
+ SCM_BOOL_T,
SCM_UNDEFINED);
Interval x_extent = top_curve.extent (X_AXIS);
Stencil
Lookup::repeat_slash (Real w, Real s, Real t)
{
-#if 0 /* TODO */
- vector<Offset> points;
- Real blotdiameter = 0.0;
-
- Offset p1 (0, 0);
- Offset p2 (w, w * s);
-
- return Lookup::round_filled_polygon (points, blotdiameter);
-#endif
- SCM wid = scm_from_double (w);
- SCM sl = scm_from_double (s);
- SCM thick = scm_from_double (t);
- SCM slashnodot = scm_list_n (ly_symbol2scm ("repeat-slash"),
- wid, sl, thick, SCM_UNDEFINED);
+ Real x_width = sqrt ((t * t) + ((t / s) * (t / s)));
+ Real height = w * s;
+
+ SCM controls = scm_list_n (ly_symbol2scm ("moveto"),
+ scm_from_double (0),
+ scm_from_double (0),
+ ly_symbol2scm ("rlineto"),
+ scm_from_double (x_width),
+ scm_from_double (0),
+ ly_symbol2scm ("rlineto"),
+ scm_from_double (w),
+ scm_from_double (height),
+ ly_symbol2scm ("rlineto"),
+ scm_from_double (-x_width),
+ scm_from_double (0),
+ ly_symbol2scm ("closepath"),
+ SCM_UNDEFINED);
+
+ SCM slashnodot = scm_list_n (ly_symbol2scm ("path"),
+ scm_from_double (0),
+ ly_quote_scm (controls),
+ ly_quote_scm (ly_symbol2scm ("round")),
+ ly_quote_scm (ly_symbol2scm ("round")),
+ SCM_BOOL_T,
+ SCM_UNDEFINED);
Box b (Interval (0, w + sqrt (sqr (t / s) + sqr (t))),
Interval (0, w * s));
#include "warn.hh"
#include "program-option.hh"
+#include "duration.hh"
+#include "moment.hh"
#include "music.hh"
#include "input.hh"
return maximum_length (me->get_property ("elements")).smobbed_copy ();
}
+MAKE_SCHEME_CALLBACK (Music_sequence, event_chord_length_callback, 1);
+SCM
+Music_sequence::event_chord_length_callback (SCM m)
+{
+ Music *me = unsmob_music (m);
+ Duration *d = unsmob_duration (me->get_property ("duration"));
+ // Preset duration is used in chord repetitions.
+ if (d) {
+ Moment mom = d->get_length ();
+ return mom.smobbed_copy ();
+ }
+ return maximum_length (me->get_property ("elements")).smobbed_copy ();
+}
+
MAKE_SCHEME_CALLBACK (Music_sequence, cumulative_length_callback, 1);
SCM
Music_sequence::cumulative_length_callback (SCM m)
return music_list_to_relative (me->get_property ("elements"),
p, true).smobbed_copy ();
}
-
-MAKE_SCHEME_CALLBACK (Music_sequence, repeated_chord_relative_callback, 2);
-SCM
-Music_sequence::repeated_chord_relative_callback (SCM music, SCM pitch)
-{
- Music *me = unsmob_music (music);
- Music *repeated_chord = unsmob_music (me->get_property ("element"));
- Music *original_chord = unsmob_music (me->get_property ("original-chord"));
-
- /* A repeated chord octave is not computed from the previous pitch,
- * (this function `pitch' argument), but from the original chord, so
- * that repeated chords have the same octave have the original chord,
- * even though other simple notes have been entered meanwhile.
- */
- assert (repeated_chord);
- Pitch *p = 0;
- /* Get the original chord first pitch */
- if (original_chord)
- {
- for (SCM s = original_chord->get_property ("elements"); scm_is_pair (s); s = scm_cdr (s))
- {
- if (Music *m = unsmob_music (scm_car (s)))
- {
- p = unsmob_pitch (m->get_property ("pitch"));
- if (p)
- break;
- }
- }
- }
- /* Use the `pitch' argument if no pitch found in original chord. */
- if (! p)
- p = unsmob_pitch (pitch);
-
- /* Change the first note pitch to -1, to avoid octaviation. Indeed,
- * the first pitch should be the same as the original chord first
- * pitch. */
- for (SCM s = repeated_chord->get_property ("elements"); scm_is_pair (s); s = scm_cdr (s))
- {
- if (Music *m = unsmob_music (scm_car (s)))
- {
- Pitch *first_pitch = unsmob_pitch (m->get_property ("pitch"));
- if (first_pitch)
- {
- Pitch new_pitch = Pitch (-1,
- first_pitch->get_notename (),
- first_pitch->get_alteration ());
- m->set_property ("pitch", new_pitch.smobbed_copy ());
- break;
- }
- }
- }
- music_list_to_relative (repeated_chord->get_property ("elements"), *p, true).smobbed_copy ();
- /* Return `pitch' instead of the repeated chord first pitch,
- * because `pitch' is the last explicitly entered pitch */
- return pitch;
-}
: bottom_skyline_ (DOWN)
{
Prob *page = unsmob_prob (page_scm);
+ bottom_loose_baseline_ = 0;
header_height_ = 0;
footer_height_ = 0;
header_padding_ = 0;
{
if (is_spaceable (elts[i]))
{
- // We don't add a spring for the first staff, since
- // we are only adding springs _between_ staves here.
if (!found_spaceable_staff)
{
+ // Ensure space for any loose lines above this system
+ if (i > 0)
+ springs_.back ().ensure_min_distance (bottom_loose_baseline_
+ - minimum_offsets_with_min_dist[i]
+ + padding);
found_spaceable_staff = true;
last_spaceable_staff = i;
+ // We don't add a spring for the first staff, since
+ // we are only adding springs _between_ staves here.
continue;
}
}
}
+ bottom_loose_baseline_ = found_spaceable_staff
+ ? ( minimum_offsets_with_min_dist[last_spaceable_staff]
+ - minimum_offsets_with_min_dist.back ())
+ : 0;
+
// Corner case: there was only one staff, and it wasn't spaceable.
// Mark it spaceable, because we do not allow non-spaceable staves
// to be at the top or bottom of a system.
SCM check_scheme_arg (Lily_parser *parser, Input loc,
SCM arg, SCM args, SCM pred);
SCM loc_on_music (Input loc, SCM arg);
-SCM make_chord_elements (SCM pitch, SCM dur, SCM modification_list);
+SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list);
SCM make_chord_step (int step, Rational alter);
SCM make_simple_markup (SCM a);
bool is_duration (int t);
Input i;
i.set_location (@1, @3);
$$ = MAKE_SYNTAX ("repetition-chord", i,
- parser->lexer_->chord_repetition_.last_chord_,
- parser->lexer_->chord_repetition_.repetition_function_,
$2, scm_reverse_x ($3, SCM_EOL));
}
| MULTI_MEASURE_REST optional_notemode_duration post_events {
scm_reverse_x ($3, SCM_EOL));
}
| command_element
- /* note chord elements are memorized into
- parser->lexer_->chord_repetition_ so that the chord repetition
- mechanism copy them when a chord repetition symbol is found
- */
- | note_chord_element {
- parser->lexer_->chord_repetition_.last_chord_ = $$;
- }
+ | note_chord_element
;
new_chord:
steno_tonic_pitch optional_notemode_duration {
- $$ = make_chord_elements ($1, $2, SCM_EOL);
+ $$ = make_chord_elements (@$, $1, $2, SCM_EOL);
}
| steno_tonic_pitch optional_notemode_duration chord_separator chord_items {
SCM its = scm_reverse_x ($4, SCM_EOL);
- $$ = make_chord_elements ($1, $2, scm_cons ($3, its));
+ $$ = make_chord_elements (@$, $1, $2, scm_cons ($3, its));
}
;
SCM
-make_chord_elements (SCM pitch, SCM dur, SCM modification_list)
+make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list)
{
SCM chord_ctor = ly_lily_module_constant ("construct-chord-elements");
- return scm_call_3 (chord_ctor, pitch, dur, modification_list);
+ SCM res = scm_call_3 (chord_ctor, pitch, dur, modification_list);
+ for (SCM s = res; scm_is_pair (s); s = scm_cdr (s))
+ {
+ unsmob_music (scm_car (s))->set_spot (loc);
+ }
+ return res;
}
int
return help;
}
-LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 0, 0, (),
- "Print @code{ly:set-option} usage.")
+LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 1, 0, (SCM port),
+ "Print @code{ly:set-option} usage. Optional @var{port} argument"
+ "for the destination defaults to current output port.")
{
- string help = get_help_string ();
- puts (help.c_str ());
- fflush (stdout);
+ SCM str = scm_from_locale_string (get_help_string ().c_str ());
+ scm_write_line (str, port);
return SCM_UNSPECIFIED;
}
need to learn about using LilyPond.
LilyPond's interface is text-based, rather than graphical. Please visit the
- help page at http://lilypond.org/web/help. This will point you to a quick
- tutorial and extensive documentation.
+ help page at http://lilypond.org/introduction.html. This will
+ point you to a quick tutorial and extensive documentation.
Good luck with LilyPond! Happy engraving.
\header{
title = "A scale in LilyPond"
subtitle = "For more information on using LilyPond, please see
-http://lilypond.org/web/help/"
+http://lilypond.org/introduction.html"
}
\relative c' {
%%% -*- Mode: Scheme -*-
-\version "2.14.0"
+\version "2.15.28"
%{
-
-The following functions define the chord repetition behavior, and may
-be invoked by the user to customize it.
-
-ly:parser-set-repetition-symbol
- set the chord repetition shortcut.
- `q' is the default value set in this file.
-
-ly:parser-set-repetition-function
-
- set the function that is invoked when a chord repetition symbol
- is encountered by the parser: a four argument function
- (previous-chord, location, duration, list of articulations) which is
- supposed to return a new chord.
- `default-repeat-chord' is the default function set in this file.
- `tab-repeat-chord' may be used in tablatures to preserve the string information.
+ Chord repetition behavior is not customizable in the parser. That
+ is due to it usually being done by the toplevel music handler
+ affecting every bit of music at the same time, not closely related
+ to music input. Customized behavior is instead accomplished by
+ calling \chordRepeats explicitly on some music list with a list of
+ event types you wish to keep by default (if any events of that kind
+ are found already on the repeat chord, however, they still get
+ removed from the original).
+
+ The default behavior is straightforward: don't keep anything but the
+ rhythmic events themselves.
%}
-#(define-public ((make-repeat-chord-function chord-element-types note-articulation-types)
- previous-chord location duration articulations)
- "Make a chord repetition function.
-The returned functions copies the notes from @var{previous-chord} into a new chord.
-Chord elements, which type is found in @var{chord-element-types}, are copied into
-the new chord. Note articulations, which type is found in @var{note-articulation-types},
-are also copied. All other events are not copied into the new chord."
- (define (filter-events events event-types)
- (filter (lambda (event)
- (and (memq (ly:music-property event 'name) event-types) event))
- events))
- ;; If previous-chord has an length property, then it means that it
- ;; has been processed by a music iterator. In other words, the chord
- ;; has been memorized from an other music block, which is certainly not
- ;; what the user has intended, as anywy the result will be buggy.
- ;; In that case, raise a warning.
- (if (not (and (ly:music? previous-chord)
- (null? (ly:music-property previous-chord 'length))))
- (ly:input-message location
- (_ "No memorized chord in music block before chord repetition")))
- ;; Instead of copying the previous chord, then removing the
- ;; undesired elements (like articulations), a new empty chord is built.
- ;; Then, the pitch found in the previous chord are added to the new
- ;; chord, without any "decoration" (e.g. cautionary accidentals,
- ;; fingerings, text scripts, articulations). Only the events of types
- ;; given in `chord-elements-types' and `note-articulation-types' are
- ;; copied from the original chord elements and note articulations,
- ;; respectively.
- (let ((elements (ly:music-property (ly:music-deep-copy previous-chord) 'elements)))
- (make-music
- 'EventChord
- 'origin location
- 'elements (append!
- (map (lambda (note)
- (let ((new-note (make-music 'NoteEvent
- 'origin location
- 'pitch (ly:music-property note 'pitch)
- 'duration duration))
- (articulations
- (filter-events (ly:music-property note 'articulations)
- note-articulation-types)))
- (if (not (null? articulations))
- (set! (ly:music-property new-note 'articulations)
- articulations))
- new-note))
- (filter-events elements '(NoteEvent)))
- (filter-events elements chord-element-types)
- articulations))))
-
-#(define-public default-repeat-chord
- (make-repeat-chord-function '() '()))
-
-#(define-public tab-repeat-chord
- (make-repeat-chord-function '(StringNumberEvent) '(StringNumberEvent)))
-
-% default settings
-#(ly:parser-set-repetition-symbol parser 'q)
-#(ly:parser-set-repetition-function parser default-repeat-chord)
+chordRepeats =
+#(define-music-function (parser location event-types music)
+ ((list? '()) ly:music?)
+ "Walk through @var{music} putting the notes of the previous chord
+into repeat chords, as well as an optional list of @var{event-types}
+such as @code{#'(string-number-event)}."
+ (expand-repeat-chords! (cons 'rhythmic-event event-types) music))
+
+tabChordRepeats =
+#(define-music-function (parser location event-types music)
+ ((list? '()) ly:music?)
+ "Walk through @var{music} putting the notes, fingerings and string
+numbers of the previous chord into repeat chords, as well as an
+optional list of @var{event-types} such as @code{#'(articulation-event)}."
+ #{ \chordRepeats
+ #(append '(string-number-event fingering-event) event-types)
+ #music
+ #})
+
+tabChordRepetition =
+#(define-void-function (parser location) ()
+ (_i "Include the string and fingering information in a chord repetition.
+This function is deprecated; try using @code{\tabChordRepeats} instead.")
+ (ly:parser-define! parser '$chord-repeat-events
+ '(string-number-event fingering-event)))
\remove "Note_heads_engraver"
\remove "Fingering_engraver"
\remove "New_fingering_engraver"
+ \remove "Pitched_trill_engraver"
\description "Context for drawing notes in a Tab staff."
")
(let* ((voices (apply circular-list (make-list (length voice-ids) (list))))
(current-voices voices)
- (current-sequence (list)))
+ (current-sequence (list))
+ (original music)
+ (wrapper #f))
;;
;; utilities
(define (push-music m)
(let ((origins (remove not (map music-origin
(ly:music-property music 'elements)))))
(and (not (null? origins)) (car origins)))))))
+ (while (music-is-of-type? music 'music-wrapper-music)
+ (set! wrapper music)
+ (set! music (ly:music-property wrapper 'element)))
+ (if wrapper
+ (set! (ly:music-property wrapper 'element)
+ (make-music 'SequentialMusic
+ 'origin location))
+ (set! original
+ (make-music 'SequentialMusic
+ 'origin location)))
;;
;; first, split the music and fill in voices
;; We flatten direct layers of SequentialMusic since they are
;; bind voice identifiers to the voices
(for-each (lambda (voice-id voice)
(ly:parser-define! parser voice-id
- (make-music 'SequentialMusic
- 'origin location
- 'elements voice)))
+ (let ((v (ly:music-deep-copy original)))
+ (set! (ly:music-property
+ (car (extract-named-music
+ v 'SequentialMusic))
+ 'elements) voice)
+ v)))
voice-ids voices)))
parenthesize =
(_i "Set @var{heads} in @var{music} to @var{style}.")
(style-note-heads heads style music))
-
-
-tabChordRepetition =
-#(define-music-function (parser location) ()
- (_i "Include the string information in a chord repetition.")
- (ly:parser-set-repetition-function parser tab-repeat-chord)
- (make-music 'SequentialMusic 'void #t))
-
tag =
#(define-music-function (parser location tag arg) (symbol? ly:music?)
ifeq ($(WEBSITE_ONLY_BUILD),1)
### for lilypond.org
- TOP_SRC_DIR=$(HOME)/lilypond/lilypond-git
+ TOP_SRC_DIR=$(LILYPOND_GIT)
TRUSTED_DIR=$(HOME)/lilypond/trusted-scripts
top-src-dir=$(TOP_SRC_DIR)
depth=.
texi2html-init-file=$(trusted-dir)/lilypond-texi2html.init
top-htaccess=$(trusted-dir)/lilypond.org.htaccess
dir-htaccess=$(trusted-dir)/website-dir.htaccess
- TEXI2HTML_PROGRAM=$(HOME)/usr/bin/texi2html
+ # grab it from PATH
+ TEXI2HTML_PROGRAM=texi2html
PYTHON=python
PYTHONPATH=$(TRUSTED_DIR)
else
# Translation of LilyPond.
-# Copyright (C) 998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
+# Copyright (C) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
# This file is distributed under the same license as the PACKAGE package.
#
msgid ""
msgstr ""
-"Project-Id-Version: 2.15.8\n"
+"Project-Id-Version: 2.15.28\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2011-08-02 19:43+0200\n"
+"POT-Creation-Date: 2012-02-04 15:42+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Writing fonts to %s"
msgstr ""
-#: book_snippets.py:519
+#: book_snippets.py:409
#, python-format
msgid "deprecated ly-option used: %s=%s"
msgstr ""
-#: book_snippets.py:521
+#: book_snippets.py:411
#, python-format
msgid "compatibility mode translation: %s=%s"
msgstr ""
-#: book_snippets.py:524
+#: book_snippets.py:414
#, python-format
msgid "deprecated ly-option used: %s"
msgstr ""
-#: book_snippets.py:526
+#: book_snippets.py:416
#, python-format
msgid "compatibility mode translation: %s"
msgstr ""
-#: book_snippets.py:544
+#: book_snippets.py:533
#, python-format
msgid "ignoring unknown ly option: %s"
msgstr ""
-#: book_snippets.py:736
+#: book_snippets.py:741
#, python-format
-msgid "Opening filter `%s'\n"
+msgid "Running through filter `%s'"
msgstr ""
-#: book_snippets.py:756
+#: book_snippets.py:761
#, python-format
msgid "`%s' failed (%d)"
msgstr ""
-#: book_snippets.py:757
+#: book_snippets.py:762
msgid "The error log is as follows:"
msgstr ""
+#: book_snippets.py:882
+#, python-format
+msgid "Converting MusicXML file `%s'...\n"
+msgstr ""
+
+#: book_snippets.py:909
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of original file,\n"
+"printing diff against existing file."
+msgstr ""
+
+#: book_snippets.py:922
+#, python-format
+msgid ""
+"%s: duplicate filename but different contents of converted lilypond file,\n"
+"printing diff against existing file."
+msgstr ""
+
#: convertrules.py:12
#, python-format
-msgid "Not smart enough to convert %s"
+msgid "Not smart enough to convert %s."
msgstr ""
#: convertrules.py:13
msgid "%s has been replaced by %s"
msgstr ""
-#: convertrules.py:24 lilylib.py:85 musicexp.py:17 convert-ly.py:64 warn.cc:66
-#: input.cc:108
+#: convertrules.py:24 lilylib.py:131 warn.cc:223
#, c-format, python-format
msgid "warning: %s"
msgstr ""
-#: convertrules.py:49 convertrules.py:99
+#: convertrules.py:49 convertrules.py:94
msgid "\\header { key = concat + with + operator }"
msgstr ""
-#: convertrules.py:58
+#: convertrules.py:56
#, python-format
msgid "deprecated %s"
msgstr ""
-#: convertrules.py:70
+#: convertrules.py:65
msgid "deprecated \\textstyle, new \\key syntax"
msgstr ""
-#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084
-#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862
-#: convertrules.py:3206
+#: convertrules.py:81 convertrules.py:1855 convertrules.py:2031
+#: convertrules.py:2174 convertrules.py:2505 convertrules.py:2800
+#: convertrules.py:3150
msgid "bump version for release"
msgstr ""
-#: convertrules.py:103
+#: convertrules.py:97
msgid "new \\header format"
msgstr ""
-#: convertrules.py:132
+#: convertrules.py:124
msgid "\\translator syntax"
msgstr ""
-#: convertrules.py:184
+#: convertrules.py:175
msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
msgstr ""
-#: convertrules.py:216 convertrules.py:699 convertrules.py:1383
-#: convertrules.py:2378
+#: convertrules.py:205 convertrules.py:678 convertrules.py:1350
+#: convertrules.py:2317
#, python-format
msgid "deprecate %s"
msgstr ""
-#: convertrules.py:290
+#: convertrules.py:279
#, python-format
msgid "deprecate %s "
msgstr ""
-#: convertrules.py:319
+#: convertrules.py:305
msgid "new \\notenames format"
msgstr ""
-#: convertrules.py:337
+#: convertrules.py:321
msgid "new tremolo format"
msgstr ""
-#: convertrules.py:342
+#: convertrules.py:325
msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
msgstr ""
-#: convertrules.py:395
-msgid "change property definiton case (eg. onevoice -> oneVoice)"
+#: convertrules.py:376
+msgid "change property definition case (eg. onevoice -> oneVoice)"
msgstr ""
-#: convertrules.py:457
+#: convertrules.py:437
msgid "new \\textscript markup text"
msgstr ""
-#: convertrules.py:530
+#: convertrules.py:509
#, python-format
msgid "identifier names: %s"
msgstr ""
-#: convertrules.py:569
+#: convertrules.py:548
msgid "point-and-click argument changed to procedure."
msgstr ""
-#: convertrules.py:611
+#: convertrules.py:590
msgid "semicolons removed"
msgstr ""
#. 40 ?
-#: convertrules.py:654
+#: convertrules.py:633
#, python-format
msgid "%s property names"
msgstr ""
-#: convertrules.py:724
+#: convertrules.py:703
msgid "automaticMelismata turned on by default"
msgstr ""
-#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942
-#: convertrules.py:2189
+#: convertrules.py:708
+msgid "automaticMelismata is turned on by default since 1.5.67."
+msgstr ""
+
+#: convertrules.py:942 convertrules.py:1635 convertrules.py:1889
+#: convertrules.py:2134
#, python-format
msgid "remove %s"
msgstr ""
-#: convertrules.py:1001 convertrules.py:1005
+#: convertrules.py:977 convertrules.py:980
msgid "cluster syntax"
msgstr ""
-#: convertrules.py:1014
+#: convertrules.py:987
msgid "new Pedal style syntax"
msgstr ""
-#: convertrules.py:1273
+#: convertrules.py:1246
msgid ""
"New relative mode,\n"
"Postfix articulations, new text markup syntax, new chord syntax."
msgstr ""
-#: convertrules.py:1286
+#: convertrules.py:1259
msgid "Remove - before articulation"
msgstr ""
-#: convertrules.py:1324
+#: convertrules.py:1294
#, python-format
msgid "%s misspelling"
msgstr ""
-#: convertrules.py:1346
+#: convertrules.py:1313
msgid "Swap < > and << >>"
msgstr ""
-#: convertrules.py:1349
+#: convertrules.py:1316
msgid "attempting automatic \\figures conversion. Check results!"
msgstr ""
-#: convertrules.py:1400
+#: convertrules.py:1362
msgid "Use Scheme code to construct arbitrary note events."
msgstr ""
-#: convertrules.py:1407
+#: convertrules.py:1369
msgid ""
"use symbolic constants for alterations,\n"
"remove \\outputproperty, move ly:verbose into ly:get-option"
msgstr ""
-#: convertrules.py:1432
+#: convertrules.py:1394
#, python-format
msgid ""
"\\outputproperty found,\n"
"as a substitution text."
msgstr ""
-#: convertrules.py:1446
+#: convertrules.py:1406
msgid ""
"The alteration field of Scheme pitches was multiplied by 2\n"
"to support quarter tone accidentals. You must update the following "
"* keySignature settings made with \\property\n"
msgstr ""
-#: convertrules.py:1493
+#: convertrules.py:1449
msgid "removal of automaticMelismata; use melismaBusyProperties instead."
msgstr ""
-#: convertrules.py:1600
+#: convertrules.py:1556
msgid "\\partcombine syntax change to \\newpartcombine"
msgstr ""
-#: convertrules.py:1628
+#: convertrules.py:1581
msgid ""
"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
"Harmonic notes. Thread context removed. Lyrics context removed."
msgstr ""
-#: convertrules.py:1632
+#: convertrules.py:1585
msgid "Drums found. Enclose drum notes in \\drummode"
msgstr ""
-#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661
+#: convertrules.py:1596 convertrules.py:1603 convertrules.py:1614
#, python-format
msgid ""
"\n"
"%s found. Check file manually!\n"
msgstr ""
-#: convertrules.py:1643
+#: convertrules.py:1596
msgid "Drum notation"
msgstr ""
-#: convertrules.py:1702
+#: convertrules.py:1655
msgid "new syntax for property settings:"
msgstr ""
-#: convertrules.py:1728
+#: convertrules.py:1681
msgid "Property setting syntax in \\translator{ }"
msgstr ""
-#: convertrules.py:1767
+#: convertrules.py:1720
msgid "Scheme grob function renaming"
msgstr ""
-#: convertrules.py:1780
+#: convertrules.py:1731 convertrules.py:2138 convertrules.py:2142
+#: convertrules.py:2708
#, python-format
-msgid "use %s"
+msgid "Use %s\n"
msgstr ""
-#: convertrules.py:1797
+#: convertrules.py:1747
msgid "More Scheme function renaming"
msgstr ""
-#: convertrules.py:1924
+#: convertrules.py:1871
msgid ""
"Page layout has been changed, using paper size and margins.\n"
"textheight is no longer used.\n"
msgstr ""
-#: convertrules.py:2010
+#: convertrules.py:1957
msgid ""
"\\foo -> \\foomode (for chords, notes, etc.)\n"
"fold \\new FooContext \\foomode into \\foo."
msgstr ""
-#: convertrules.py:2048
+#: convertrules.py:1995
msgid ""
"staff size should be changed at top-level\n"
"with\n"
"\n"
msgstr ""
-#: convertrules.py:2068
+#: convertrules.py:2015
msgid "regularize other identifiers"
msgstr ""
-#: convertrules.py:2136
+#: convertrules.py:2083
msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
msgstr ""
-#: convertrules.py:2149
+#: convertrules.py:2094
msgid "LilyPond source must be UTF-8"
msgstr ""
-#: convertrules.py:2152
+#: convertrules.py:2097
msgid "Try the texstrings backend"
msgstr ""
-#: convertrules.py:2155
+#: convertrules.py:2100
#, python-format
msgid "Do something like: %s"
msgstr ""
-#: convertrules.py:2158
+#: convertrules.py:2103
msgid "Or save as UTF-8 in your editor"
msgstr ""
-#: convertrules.py:2212
+#: convertrules.py:2153
msgid "warn about auto beam settings"
msgstr ""
-#: convertrules.py:2217
+#: convertrules.py:2157
msgid "auto beam settings"
msgstr ""
-#: convertrules.py:2219
+#: convertrules.py:2158
msgid ""
"\n"
"Auto beam settings must now specify each interesting moment in a measure\n"
"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
msgstr ""
-#: convertrules.py:2333
+#: convertrules.py:2271
msgid "verticalAlignmentChildCallback has been deprecated"
msgstr ""
-#: convertrules.py:2337
+#: convertrules.py:2276
msgid "Remove callbacks property, deprecate XY-extent-callback."
msgstr ""
-#: convertrules.py:2358
+#: convertrules.py:2297
msgid "Use grob closures iso. XY-offset-callbacks."
msgstr ""
-#: convertrules.py:2420
+#: convertrules.py:2359
msgid "foobar -> foo-bar for \\paper, \\layout"
msgstr ""
-#: convertrules.py:2530
+#: convertrules.py:2469
msgid "deprecate \\tempo in \\midi"
msgstr ""
-#: convertrules.py:2583
+#: convertrules.py:2522
msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
msgstr ""
-#: convertrules.py:2596
+#: convertrules.py:2535
msgid "Rename accidental glyphs, use glyph-name-alist."
msgstr ""
-#: convertrules.py:2651
-msgid "edge-text settings for TextSpanner."
+#: convertrules.py:2590
+msgid "edge-text settings for TextSpanner"
msgstr ""
-#: convertrules.py:2652
+#: convertrules.py:2591
#, python-format
msgid ""
"Use\n"
"%s"
msgstr ""
-#: convertrules.py:2685
+#: convertrules.py:2624
msgid "Use the `alignment-offsets' sub-property of\n"
msgstr ""
-#: convertrules.py:2686
+#: convertrules.py:2625
msgid "NonMusicalPaperColumn #'line-break-system-details\n"
msgstr ""
-#: convertrules.py:2687
+#: convertrules.py:2626
msgid "to set fixed distances between staves.\n"
msgstr ""
-#: convertrules.py:2699
+#: convertrules.py:2638
msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
msgstr ""
-#: convertrules.py:2705
-msgid "all settings related to dashed lines.\n"
+#: convertrules.py:2644
+msgid "all settings related to dashed lines"
msgstr ""
-#: convertrules.py:2706
+#: convertrules.py:2645
msgid "Use \\override ... #'style = #'line for solid lines and\n"
msgstr ""
-#: convertrules.py:2707
+#: convertrules.py:2646
msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
msgstr ""
-#: convertrules.py:2743
+#: convertrules.py:2682
msgid ""
"metronomeMarkFormatter uses text markup as second argument,\n"
"fret diagram properties moved to fret-diagram-details."
msgstr ""
-#: convertrules.py:2748
+#: convertrules.py:2688
msgid "metronomeMarkFormatter got an additional text argument.\n"
msgstr ""
-#: convertrules.py:2749
+#: convertrules.py:2689
#, python-format
msgid ""
"The function assigned to Score.metronomeMarkFunction now uses the signature\n"
"%s"
msgstr ""
-#: convertrules.py:2812
-msgid "\\put-adjacent argument order.\n"
+#: convertrules.py:2707
+#, python-format
+msgid "%s in fret-diagram properties"
+msgstr ""
+
+#: convertrules.py:2751
+msgid "\\put-adjacent argument order"
msgstr ""
-#: convertrules.py:2813
+#: convertrules.py:2752
msgid "Axis and direction now come before markups:\n"
msgstr ""
-#: convertrules.py:2814
+#: convertrules.py:2753
msgid "\\put-adjacent axis dir markup markup."
msgstr ""
-#: convertrules.py:2845
-msgid "re-definition of InnerStaffGroup.\n"
+#: convertrules.py:2784
+msgid "re-definition of InnerStaffGroup"
msgstr ""
-#: convertrules.py:2851
-msgid "re-definition of InnerChoirStaff.\n"
+#: convertrules.py:2789
+msgid "re-definition of InnerChoirStaff"
msgstr ""
-#: convertrules.py:2861
+#: convertrules.py:2799
msgid "Syntax changes for \\addChordShape and \\chord-shape"
msgstr ""
-#: convertrules.py:2866
+#: convertrules.py:2804
msgid "stringTuning must be added to addChordShape call.\n"
msgstr ""
-#: convertrules.py:2872
+#: convertrules.py:2809
msgid "stringTuning must be added to chord-shape call.\n"
msgstr ""
-#: convertrules.py:2879
+#: convertrules.py:2815
msgid "Remove oldaddlyrics"
msgstr ""
-#: convertrules.py:2883
+#: convertrules.py:2819
msgid ""
"oldaddlyrics is no longer supported. \n"
" Use addlyrics or lyrsicsto instead.\n"
msgstr ""
-#: convertrules.py:2889
+#: convertrules.py:2825
msgid ""
"keySignature property not reversed any more\n"
"MIDI 47: orchestral strings -> orchestral harp"
msgstr ""
-#: convertrules.py:2894
+#: convertrules.py:2830
msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
msgstr ""
-#: convertrules.py:2900
+#: convertrules.py:2836
msgid ""
"\\bar \".\" now produces a thick barline\n"
"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
"Dash parameters for slurs and ties are now in dash-definition"
msgstr ""
-#: convertrules.py:2906
+#: convertrules.py:2842
msgid "\\bar \".\" now produces a thick barline.\n"
msgstr ""
-#: convertrules.py:2912
+#: convertrules.py:2848
msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
msgstr ""
-#: convertrules.py:2917
+#: convertrules.py:2853
msgid ""
"Autobeaming rules have changed. override-auto-beam-setting and\n"
"revert-auto-beam-setting have been eliminated.\n"
"template replaced by new `Dynamics' context."
msgstr ""
-#: convertrules.py:2931
-msgid ""
-"override-auto-beam-setting.\n"
-" Autobeam settings are now overriden with \\overrideBeamSettings.\n"
+#: convertrules.py:2867
+msgid " Autobeam settings are now overriden with \\overrideBeamSettings.\n"
msgstr ""
-#: convertrules.py:2936
-msgid ""
-"override-auto-beam-setting.\n"
-" Autobeam settings are now reverted with \\revertBeamSettings.\n"
+#: convertrules.py:2872
+msgid " Autobeam settings are now reverted with \\revertBeamSettings.\n"
msgstr ""
-#: convertrules.py:2941
+#: convertrules.py:2878
msgid ""
-"beatGrouping. \n"
-" beatGrouping with a specified context must now be accomplished with\n"
+" beatGrouping with a specified context must now be accomplished with\n"
" \\overrideBeamSettings.\n"
msgstr ""
-#: convertrules.py:2947
+#: convertrules.py:2884
msgid ""
"alignment-offsets has been changed to alignment-distances: you must now "
"specify the distances between staves rather than the offset of staves.\n"
msgstr ""
-#: convertrules.py:2958
+#: convertrules.py:2895
msgid ""
"Remove obsolete engravers/translators: Note_swallow_translator,\n"
"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
"New vertical spacing variables."
msgstr ""
-#: convertrules.py:2989
+#: convertrules.py:2926
msgid ""
-"minimum-Y-extent; vertical spacing no longer depends on the Y-extent of a "
-"VerticalAxisGroup.\n"
+"Vertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.\n"
msgstr ""
-#: convertrules.py:2995
+#: convertrules.py:2932
msgid "Unify fetaNumber and fetaDynamic encodings"
msgstr ""
-#: convertrules.py:3000
+#: convertrules.py:2937
msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
msgstr ""
-#: convertrules.py:3011
+#: convertrules.py:2948
msgid "\\cresc etc. are now postfix operators"
msgstr ""
-#: convertrules.py:3017
+#: convertrules.py:2960
msgid ""
"Eliminate beamSettings, beatLength, \\setBeatGrouping, "
"\\overrideBeamSettings and \\revertBeamSettings.\n"
"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
msgstr ""
-#: convertrules.py:3035
-msgid ""
-"\\overrideBeamSettings. Use \\set beamExceptions or "
-"\\overrideTimeSignatureSettings.\n"
-msgstr ""
-
-#: convertrules.py:3039
-msgid ""
-"\\revertBeamSettings. Use \\set beamExceptions or "
-"\\revertTimeSignatureSettings.\n"
+#: convertrules.py:2978
+msgid "Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
msgstr ""
-#: convertrules.py:3043
-msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n"
+#: convertrules.py:2982
+msgid "Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
msgstr ""
-#: convertrules.py:3047
-msgid "beatLength. Use baseMoment and beatStructure.\n"
+#: convertrules.py:2986
+msgid "Use baseMoment, beatStructure, and beamExceptions.\n"
msgstr ""
-#: convertrules.py:3051
-msgid "setbeatGrouping. Use baseMoment and beatStructure.\n"
+#: convertrules.py:2990 convertrules.py:2994
+msgid "Use baseMoment and beatStructure.\n"
msgstr ""
-#: convertrules.py:3056
+#: convertrules.py:2999
msgid ""
"Woodwind diagrams: Move size, thickness, and graphic from argument list to "
"properties.\n"
"instead."
msgstr ""
-#: convertrules.py:3061
+#: convertrules.py:3004
msgid ""
-"woodwind-diagrams. Move size, thickness, and graphic to properties. "
-"Argument should be just the key list.\n"
+"Move size, thickness, and graphic to properties. Argument should be just "
+"the key list.\n"
msgstr ""
-#: convertrules.py:3069
+#: convertrules.py:3012
msgid ""
"Rename vertical spacing variables.\n"
"Add fretboard-table argument to savePredefinedFretboard."
msgstr ""
-#: convertrules.py:3087
+#: convertrules.py:3030
msgid "Rename vertical spacing grob properties."
msgstr ""
-#: convertrules.py:3103
+#: convertrules.py:3046
msgid "Remove \\paper variables head-separation and foot-separation."
msgstr ""
-#: convertrules.py:3108
+#: convertrules.py:3050
msgid "Adjust settings for top-system-spacing instead.\n"
msgstr ""
-#: convertrules.py:3113
+#: convertrules.py:3054
msgid "Adjust settings for last-bottom-spacing instead.\n"
msgstr ""
-#: convertrules.py:3119
+#: convertrules.py:3060
msgid ""
"Rename space to basic-distance in various spacing alists.\n"
"Remove HarmonicParenthesesItem grob."
msgstr ""
-#: convertrules.py:3127
+#: convertrules.py:3067
msgid "HarmonicParenthesesItem has been eliminated.\n"
msgstr ""
-#: convertrules.py:3128
+#: convertrules.py:3068
msgid "Harmonic parentheses are part of the TabNoteHead grob.\n"
msgstr ""
-#: convertrules.py:3133
+#: convertrules.py:3073
msgid ""
"Remove context from overrideTimeSignatureSettings and "
"revertTimeSignatureSettings.\n"
msgstr ""
-#: convertrules.py:3140
+#: convertrules.py:3080
msgid ""
"Change stringTunings from a list of semitones to a list of pitches.\n"
"Change tenor and baritone ukulele names in string tunings.\n"
"Generate messages for manual conversion of vertical spacing if required."
msgstr ""
-#: convertrules.py:3180
-msgid "Vertical spacing changes might affect user-defined contexts. "
+#: convertrules.py:3123
+msgid "Vertical spacing changes might affect user-defined contexts."
msgstr ""
-#: convertrules.py:3185
+#: convertrules.py:3129
msgid "Replace bar-size with bar-extent."
msgstr ""
-#: convertrules.py:3197
+#: convertrules.py:3141
msgid "Woodwind diagrams: Changes to the clarinet diagram."
msgstr ""
-#: convertrules.py:3201
+#: convertrules.py:3145
+msgid "Clarinet fingering changed to reflect actual anatomy of instrument.\n"
+msgstr ""
+
+#: convertrules.py:3155
+msgid "Handling of non-automatic footnotes."
+msgstr ""
+
+#: convertrules.py:3159
msgid ""
-"woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of "
-"instrument.\n"
+"If you are using non-automatic footnotes, make sure to set footnote-auto-"
+"numbering = ##f in the paper block.\n"
msgstr ""
-#: convertrules.py:3211
+#: convertrules.py:3164
msgid "Change in internal property for MultiMeasureRest"
msgstr ""
-#: convertrules.py:3214
+#: convertrules.py:3168
msgid ""
-"use-breve-rest. This internal property has been replaced by round-to-longer-"
-"rest and usable-duration-logs.\n"
+"This internal property has been replaced by round-up-to-longer-rest, round-"
+"up-exceptions and usable-duration-logs.\n"
msgstr ""
-#: convertrules.py:3219
-msgid "Handling of non-automatic footnotes."
+#: convertrules.py:3173
+msgid ""
+"Creation of a Flag grob and moving of certain Stem properties to this grob"
msgstr ""
-#: convertrules.py:3223
+#: convertrules.py:3209
msgid ""
-"If you are using non-automatic footnotes, make sure to set footnote-auto-"
-"numbering = ##f in the paper block.\n"
+"consistent-broken-slope is now handled through the positions callback.\n"
+msgstr ""
+
+#: convertrules.py:3210
+msgid ""
+"input/regression/beam-broken-classic.ly shows how broken beams are now "
+"handled.\n"
msgstr ""
-#: book_base.py:24
+#: book_base.py:26
#, python-format
msgid "file not found: %s"
msgstr ""
-#: book_base.py:161
+#: book_base.py:164
msgid "Output function not implemented"
msgstr ""
-#: lilylib.py:88 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:114
-#: input.cc:122
+#: lilylib.py:96
+#, python-format
+msgid "Setting loglevel to %s"
+msgstr ""
+
+#: lilylib.py:99
+#, python-format
+msgid "Unknown or invalid loglevel '%s'"
+msgstr ""
+
+#: lilylib.py:128 warn.cc:211
#, c-format, python-format
msgid "error: %s"
msgstr ""
-#: lilylib.py:131
+#: lilylib.py:185
#, python-format
msgid "Processing %s.ly"
msgstr ""
-#: lilylib.py:135 lilylib.py:198
+#: lilylib.py:189 lilylib.py:250
#, python-format
msgid "Invoking `%s'"
msgstr ""
-#: lilylib.py:137 lilylib.py:200
+#: lilylib.py:191 lilylib.py:252
#, python-format
msgid "Running %s..."
msgstr ""
-#: lilylib.py:276
+#: lilylib.py:328
#, python-format
msgid "Usage: %s"
msgstr ""
-#: musicexp.py:216 musicexp.py:221
+#: musicexp.py:224 musicexp.py:229
msgid "Language does not support microtones contained in the piece"
msgstr ""
-#: musicexp.py:483
+#: musicexp.py:491
msgid "Tuplet brackets of curved shape are not correctly implemented"
msgstr ""
-#: musicexp.py:669
+#: musicexp.py:677
#, python-format
msgid "unable to set the music %(music)s for the repeat %(repeat)s"
msgstr ""
-#: musicexp.py:678
+#: musicexp.py:686
msgid "encountered repeat without body"
msgstr ""
#. no self.elements!
-#: musicexp.py:848
+#: musicexp.py:856
#, python-format
msgid "Grace note with no following music: %s"
msgstr ""
-#: musicexp.py:1010
+#: musicexp.py:1018
#, python-format
msgid "Invalid octave shift size found: %s. Using no shift."
msgstr ""
-#: musicexp.py:1468
+#: musicexp.py:1476
#, python-format
msgid "Unable to convert alteration %s to a lilypond expression"
msgstr ""
#. TODO: Handle pieces without a time signature!
-#: musicxml.py:358
+#: musicxml.py:361
msgid "Senza-misura time signatures are not yet supported!"
msgstr ""
-#: musicxml.py:376
+#: musicxml.py:379
msgid "Unable to interpret time signature! Falling back to 4/4."
msgstr ""
-#: musicxml.py:432
+#: musicxml.py:435
#, python-format
msgid ""
"Key alteration octave given for a non-existing alteration nr. %s, available "
"numbers: %s!"
msgstr ""
-#: musicxml.py:520
+#: musicxml.py:523
#, python-format
msgid "Unable to find instrument for ID=%s\n"
msgstr ""
-#: book_latex.py:156
+#. Work around a texi2pdf bug: if LANG=C is not given, a broken regexp is
+#. used to detect relative/absolute paths, so the absolute path is not
+#. detected as such and this command fails:
+#: book_texinfo.py:206
+#, python-format
+msgid "Running texi2pdf on file %s to detect default page settings.\n"
+msgstr ""
+
+#: book_texinfo.py:228 book_latex.py:209
+msgid "Unable to auto-detect default settings:\n"
+msgstr ""
+
+#: book_texinfo.py:240 book_latex.py:221
+#, python-format
+msgid ""
+"Unable to auto-detect default settings:\n"
+"%s"
+msgstr ""
+
+#: book_latex.py:170
msgid "cannot find \\begin{document} in LaTeX document"
msgstr ""
-#: musicxml2ly.py:224
+#: book_latex.py:188
+#, python-format
+msgid "Running `%s' on file `%s' to detect default page settings.\n"
+msgstr ""
+
+#: musicxml2ly.py:228
#, python-format
msgid ""
"Encountered file created by %s, containing wrong beaming information. All "
"beaming information in the MusicXML file will be ignored"
msgstr ""
-#: musicxml2ly.py:240 musicxml2ly.py:242
+#: musicxml2ly.py:247 musicxml2ly.py:249
#, python-format
msgid "Unprocessed PartGroupInfo %s encountered"
msgstr ""
-#: musicxml2ly.py:495
+#: musicxml2ly.py:502
#, python-format
msgid "Encountered note at %s without type and duration (=%s)"
msgstr ""
-#: musicxml2ly.py:515
+#: musicxml2ly.py:522
#, python-format
msgid ""
"Encountered rational duration with denominator %s, unable to convert to "
"lilypond duration"
msgstr ""
-#: musicxml2ly.py:762
+#: musicxml2ly.py:769
msgid "Unable to extract key signature!"
msgstr ""
-#: musicxml2ly.py:789
+#: musicxml2ly.py:796
#, python-format
msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
msgstr ""
-#: musicxml2ly.py:927
+#: musicxml2ly.py:934
#, python-format
msgid "Encountered unprocessed marker %s\n"
msgstr ""
-#: musicxml2ly.py:1021
+#: musicxml2ly.py:1028
#, python-format
msgid "unknown span event %s"
msgstr ""
-#: musicxml2ly.py:1031
+#: musicxml2ly.py:1038
#, python-format
msgid "unknown span type %s for %s"
msgstr ""
-#: musicxml2ly.py:1451
+#: musicxml2ly.py:1458
msgid "Unknown metronome mark, ignoring"
msgstr ""
#. TODO: Implement the other (more complex) way for tempo marks!
-#: musicxml2ly.py:1456
+#: musicxml2ly.py:1463
msgid ""
"Metronome marks with complex relations (<metronome-note> in MusicXML) are "
"not yet implemented."
msgstr ""
-#: musicxml2ly.py:1658
+#: musicxml2ly.py:1665
#, python-format
msgid "Unable to convert chord type %s to lilypond."
msgstr ""
-#: musicxml2ly.py:1807
+#: musicxml2ly.py:1814
#, python-format
msgid "drum %s type unknown, please add to instrument_drumtype_dict"
msgstr ""
-#: musicxml2ly.py:1811
+#: musicxml2ly.py:1818
msgid "cannot find suitable event"
msgstr ""
-#: musicxml2ly.py:1959
+#: musicxml2ly.py:1966
#, python-format
msgid "Negative skip %s (from position %s to %s)"
msgstr ""
-#: musicxml2ly.py:2100
+#: musicxml2ly.py:2107
#, python-format
msgid "Negative skip found: from %s to %s, difference is %s"
msgstr ""
-#: musicxml2ly.py:2181
+#: musicxml2ly.py:2188
#, python-format
msgid "unexpected %s; expected %s or %s or %s"
msgstr ""
-#: musicxml2ly.py:2287
+#: musicxml2ly.py:2294
msgid "Encountered closing slur, but no slur is open"
msgstr ""
-#: musicxml2ly.py:2290
+#: musicxml2ly.py:2297
msgid "Cannot have two simultaneous (closing) slurs"
msgstr ""
-#: musicxml2ly.py:2299
+#: musicxml2ly.py:2306
msgid "Cannot have a slur inside another slur"
msgstr ""
-#: musicxml2ly.py:2302
+#: musicxml2ly.py:2309
msgid "Cannot have two simultaneous slurs"
msgstr ""
-#: musicxml2ly.py:2436
+#: musicxml2ly.py:2443
#, python-format
msgid "cannot simultaneously have more than one mode: %s"
msgstr ""
-#: musicxml2ly.py:2544
+#: musicxml2ly.py:2551
msgid "Converting to LilyPond expressions..."
msgstr ""
-#: musicxml2ly.py:2555
+#: musicxml2ly.py:2562
msgid "musicxml2ly [OPTION]... FILE.xml"
msgstr ""
-#: musicxml2ly.py:2557
+#: musicxml2ly.py:2564
msgid ""
"Convert MusicXML from FILE.xml to LilyPond input.\n"
"If the given filename is -, musicxml2ly reads from the command line.\n"
msgstr ""
-#: musicxml2ly.py:2563 midi2ly.py:1060 abc2ly.py:1386 lilypond-book.py:140
-#: convert-ly.py:98 etf2ly.py:1202 main.cc:159
+#: musicxml2ly.py:2570 midi2ly.py:1060 abc2ly.py:1387 lilypond-book.py:141
+#: convert-ly.py:92 etf2ly.py:1204 main.cc:153
msgid "show this help and exit"
msgstr ""
-#: musicxml2ly.py:2567
+#: musicxml2ly.py:2574
msgid ""
"Copyright (c) 2005--2012 by\n"
" Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
" Reinhold Kainhofer <reinhold@kainhofer.com>\n"
msgstr ""
-#: musicxml2ly.py:2581 midi2ly.py:1091 abc2ly.py:1382 lilypond-book.py:217
-#: convert-ly.py:94 etf2ly.py:1206 main.cc:174
+#: musicxml2ly.py:2588 midi2ly.py:1091 abc2ly.py:1383 lilypond-book.py:232
+#: convert-ly.py:88 etf2ly.py:1208 main.cc:174
msgid "show version number and exit"
msgstr ""
-#: musicxml2ly.py:2586 midi2ly.py:1085 lilypond-book.py:209 main.cc:175
+#: musicxml2ly.py:2594 midi2ly.py:1085 lilypond-book.py:224
msgid "be verbose"
msgstr ""
-#: musicxml2ly.py:2592
+#: musicxml2ly.py:2600
msgid "use lxml.etree; uses less memory and cpu time"
msgstr ""
-#: musicxml2ly.py:2598
+#: musicxml2ly.py:2606
msgid "input file is a zip-compressed MusicXML file"
msgstr ""
-#: musicxml2ly.py:2604
+#: musicxml2ly.py:2612
msgid "convert pitches in relative mode (default)"
msgstr ""
-#: musicxml2ly.py:2609
+#: musicxml2ly.py:2617
msgid "convert pitches in absolute mode"
msgstr ""
-#: musicxml2ly.py:2612
+#: musicxml2ly.py:2620
msgid "LANG"
msgstr ""
-#: musicxml2ly.py:2614
+#: musicxml2ly.py:2622
msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
msgstr ""
-#: musicxml2ly.py:2620
+#: musicxml2ly.py:2625 lilypond-book.py:180 convert-ly.py:105
+msgid ""
+"Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
+"(default), DEBUG)"
+msgstr ""
+
+#: musicxml2ly.py:2627 lilypond-book.py:164 lilypond-book.py:182
+#: convert-ly.py:107 main.cc:167
+msgid "LOGLEVEL"
+msgstr ""
+
+#: musicxml2ly.py:2636
msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
msgstr ""
-#: musicxml2ly.py:2626
+#: musicxml2ly.py:2642
msgid "do not convert exact vertical positions of rests"
msgstr ""
-#: musicxml2ly.py:2632
+#: musicxml2ly.py:2648
msgid "do not convert the exact page layout and breaks"
msgstr ""
-#: musicxml2ly.py:2638
+#: musicxml2ly.py:2654
msgid ""
"do not convert beaming information, use lilypond's automatic beaming instead"
msgstr ""
-#: musicxml2ly.py:2641 midi2ly.py:1065 midi2ly.py:1070 etf2ly.py:1208
-#: main.cc:165 main.cc:172
+#: musicxml2ly.py:2657 midi2ly.py:1065 midi2ly.py:1070 etf2ly.py:1210
+#: main.cc:159 main.cc:171
msgid "FILE"
msgstr ""
-#: musicxml2ly.py:2646
+#: musicxml2ly.py:2662
msgid "set output filename to FILE, stdout if -"
msgstr ""
+#: musicxml2ly.py:2668
+msgid "add midi-block to .ly file"
+msgstr ""
+
#. Translators, please translate this string as
#. "Report bugs in English via %s",
#. or if there is a LilyPond users list or forum in your language
#. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: musicxml2ly.py:2649 midi2ly.py:1104 abc2ly.py:1395 lilypond-book.py:239
-#: convert-ly.py:144 etf2ly.py:1216 main.cc:285
+#: musicxml2ly.py:2672 midi2ly.py:1104 abc2ly.py:1396 lilypond-book.py:259
+#: convert-ly.py:146 etf2ly.py:1218 main.cc:285
#, c-format, python-format
msgid "Report bugs via %s"
msgstr ""
-#: musicxml2ly.py:2729
+#: musicxml2ly.py:2752
#, python-format
msgid "unknown part in part-list: %s"
msgstr ""
-#: musicxml2ly.py:2791
+#: musicxml2ly.py:2814
msgid "Input is compressed, extracting raw MusicXML data from stdin"
msgstr ""
-#: musicxml2ly.py:2804
+#: musicxml2ly.py:2827
#, python-format
msgid "Input file %s is compressed, extracting raw MusicXML data"
msgstr ""
-#: musicxml2ly.py:2834
+#: musicxml2ly.py:2857
msgid "Reading MusicXML from Standard input ..."
msgstr ""
-#: musicxml2ly.py:2836
+#: musicxml2ly.py:2859
#, python-format
msgid "Reading MusicXML from %s ..."
msgstr ""
-#: musicxml2ly.py:2869
+#: musicxml2ly.py:2892
#, python-format
msgid "Output to `%s'"
msgstr ""
-#: musicxml2ly.py:2936
+#: musicxml2ly.py:2962
#, python-format
msgid "Unable to find input file %s"
msgstr ""
-#: midi2ly.py:81 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189
+#: midi2ly.py:81 lilypond-book.py:116 convert-ly.py:75 etf2ly.py:1191
#, python-format
msgid "Copyright (c) %s by"
msgstr ""
-#: midi2ly.py:83 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191
+#: midi2ly.py:83 lilypond-book.py:118 convert-ly.py:77 etf2ly.py:1193
msgid "Distributed under terms of the GNU General Public License."
msgstr ""
-#: midi2ly.py:84 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192
+#: midi2ly.py:84 lilypond-book.py:119 convert-ly.py:78 etf2ly.py:1194
msgid "It comes with NO WARRANTY."
msgstr ""
msgid "%s output to `%s'..."
msgstr ""
-#: midi2ly.py:1042 abc2ly.py:1373 lilypond-book.py:122 convert-ly.py:87
+#: midi2ly.py:1042 abc2ly.py:1374 lilypond-book.py:123 convert-ly.py:81
#, python-format
msgid "%s [OPTION]... FILE"
msgstr ""
msgid "ALT[:MINOR]"
msgstr ""
-#: midi2ly.py:1069 abc2ly.py:1388 etf2ly.py:1207
+#: midi2ly.py:1069 abc2ly.py:1389 etf2ly.py:1209
msgid "write output to FILE"
msgstr ""
msgid "allow tuplet durations DUR*NUM/DEN"
msgstr ""
-#: midi2ly.py:1092 lilypond-book.py:220 convert-ly.py:139 etf2ly.py:1210
+#: midi2ly.py:1092 lilypond-book.py:235 convert-ly.py:141 etf2ly.py:1212
#: main.cc:176
msgid "show warranty and copyright"
msgstr ""
msgid "no files specified on command line."
msgstr ""
-#: abc2ly.py:1374
+#: abc2ly.py:1375
#, python-format
msgid ""
"abc2ly converts ABC music files (see\n"
"%s) to LilyPond input.\n"
msgstr ""
-#: abc2ly.py:1390
+#: abc2ly.py:1391
msgid "be strict about success"
msgstr ""
-#: abc2ly.py:1392
+#: abc2ly.py:1393
msgid "preserve ABC's notion of beams"
msgstr ""
"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
msgstr ""
-#: lilypond-book.py:82 convert-ly.py:46
+#: lilypond-book.py:82 convert-ly.py:48
msgid "Examples:"
msgstr ""
msgid "Exiting (%d)..."
msgstr ""
-#: lilypond-book.py:127
+#: lilypond-book.py:128
msgid "FILTER"
msgstr ""
-#: lilypond-book.py:130
+#: lilypond-book.py:131
msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
msgstr ""
-#: lilypond-book.py:134
+#: lilypond-book.py:135
msgid ""
"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
msgstr ""
-#: lilypond-book.py:135
+#: lilypond-book.py:136
msgid "FORMAT"
msgstr ""
-#: lilypond-book.py:142
+#: lilypond-book.py:143
msgid "add DIR to include path"
msgstr ""
-#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163
-#: lilypond-book.py:173 lilypond-book.py:194 lilypond-book.py:200 main.cc:164
+#: lilypond-book.py:144 lilypond-book.py:151 lilypond-book.py:170
+#: lilypond-book.py:188 lilypond-book.py:209 lilypond-book.py:215 main.cc:158
msgid "DIR"
msgstr ""
-#: lilypond-book.py:148
+#: lilypond-book.py:149
msgid "format Texinfo output so that Info will look for images of music in DIR"
msgstr ""
-#: lilypond-book.py:155
+#: lilypond-book.py:156
msgid "PAD"
msgstr ""
-#: lilypond-book.py:157
+#: lilypond-book.py:158
msgid ""
"pad left side of music to align music inspite of uneven bar numbers (in mm)"
msgstr ""
-#: lilypond-book.py:162
+#: lilypond-book.py:163
+msgid "Print lilypond log messages according to LOGLEVEL"
+msgstr ""
+
+#: lilypond-book.py:169
msgid "write lily-XXX files to DIR, link into --output dir"
msgstr ""
-#: lilypond-book.py:167
+#: lilypond-book.py:174
msgid ""
"Load the additional python PACKAGE (containing e.g. a custom output format)"
msgstr ""
-#: lilypond-book.py:168
+#: lilypond-book.py:175
msgid "PACKAGE"
msgstr ""
-#: lilypond-book.py:172
+#: lilypond-book.py:187
msgid "write output to DIR"
msgstr ""
-#: lilypond-book.py:177
+#: lilypond-book.py:192
msgid "COMMAND"
msgstr ""
-#: lilypond-book.py:178
+#: lilypond-book.py:193
msgid "process ly_files using COMMAND FILE..."
msgstr ""
-#: lilypond-book.py:183
+#: lilypond-book.py:198
msgid "Redirect the lilypond output"
msgstr ""
-#: lilypond-book.py:187
+#: lilypond-book.py:202
msgid "Compile snippets in safe mode"
msgstr ""
-#: lilypond-book.py:193
+#: lilypond-book.py:208
msgid "do not fail if no lilypond output is found"
msgstr ""
-#: lilypond-book.py:199
+#: lilypond-book.py:214
msgid "do not fail if no PNG images are found for EPS files"
msgstr ""
-#: lilypond-book.py:205
+#: lilypond-book.py:220
msgid "write snippet output files with the same base name as their source file"
msgstr ""
-#: lilypond-book.py:225
+#: lilypond-book.py:240
msgid ""
"run executable PROG instead of latex, or in\n"
"case --pdf option is set instead of pdflatex"
msgstr ""
-#: lilypond-book.py:227
+#: lilypond-book.py:242 lilypond-book.py:247
msgid "PROG"
msgstr ""
-#: lilypond-book.py:233
+#: lilypond-book.py:246
+msgid "run executable PROG instead of texi2pdf"
+msgstr ""
+
+#: lilypond-book.py:253
msgid "create PDF files for use with PDFTeX"
msgstr ""
-#: lilypond-book.py:428
+#: lilypond-book.py:456
msgid "Writing snippets..."
msgstr ""
-#: lilypond-book.py:434
+#: lilypond-book.py:461
msgid "Processing..."
msgstr ""
-#: lilypond-book.py:440
+#: lilypond-book.py:466
msgid "All snippets are up to date..."
msgstr ""
-#: lilypond-book.py:461
+#: lilypond-book.py:485
#, python-format
msgid "cannot determine format for: %s"
msgstr ""
-#: lilypond-book.py:470
+#: lilypond-book.py:494
#, python-format
msgid "%s is up to date."
msgstr ""
-#: lilypond-book.py:484
+#: lilypond-book.py:507
#, python-format
msgid "Writing `%s'..."
msgstr ""
-#: lilypond-book.py:546
+#: lilypond-book.py:568
msgid "Output would overwrite input file; use --output."
msgstr ""
-#: lilypond-book.py:550
+#: lilypond-book.py:572
#, python-format
msgid "Reading %s..."
msgstr ""
-#: lilypond-book.py:558
+#: lilypond-book.py:579
msgid "Dissecting..."
msgstr ""
-#: lilypond-book.py:570
+#: lilypond-book.py:590
#, python-format
msgid "Compiling %s..."
msgstr ""
-#: lilypond-book.py:579
+#: lilypond-book.py:598
#, python-format
msgid "Processing include: %s"
msgstr ""
-#: lilypond-book.py:591
+#: lilypond-book.py:609
#, python-format
msgid "Removing `%s'"
msgstr ""
-#: convert-ly.py:44
+#: lilypond-book.py:676
+#, python-format
+msgid "Setting LilyPond's loglevel to %s"
+msgstr ""
+
+#: lilypond-book.py:680
+#, python-format
+msgid ""
+"Setting LilyPond's loglevel to %s (from environment variable "
+"LILYPOND_LOGLEVEL)"
+msgstr ""
+
+#: lilypond-book.py:683
+msgid ""
+"Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
+msgstr ""
+
+#: convert-ly.py:46
msgid ""
"Update LilyPond input to newer version. By default, update from the\n"
"version taken from the \\version command, to the current LilyPond version."
msgstr ""
-#: convert-ly.py:102 convert-ly.py:135
+#: convert-ly.py:96 convert-ly.py:137
msgid "VERSION"
msgstr ""
-#: convert-ly.py:104
+#: convert-ly.py:98
msgid "start from VERSION [default: \\version found in file]"
msgstr ""
-#: convert-ly.py:107
+#: convert-ly.py:101
msgid "edit in place"
msgstr ""
-#: convert-ly.py:111
+#: convert-ly.py:113
msgid "do not add \\version command if missing"
msgstr ""
-#: convert-ly.py:117
+#: convert-ly.py:119
#, python-format
msgid "force updating \\version number to %s"
msgstr ""
-#: convert-ly.py:123
+#: convert-ly.py:125
msgid "only update \\version number if file is modified"
msgstr ""
-#: convert-ly.py:129
+#: convert-ly.py:131
#, python-format
msgid "show rules [default: -f 0, -t %s]"
msgstr ""
-#: convert-ly.py:134
+#: convert-ly.py:136
#, python-format
msgid "convert to VERSION [default: %s]"
msgstr ""
-#: convert-ly.py:184
+#: convert-ly.py:186
msgid "Applying conversion: "
msgstr ""
-#: convert-ly.py:197
+#: convert-ly.py:202
msgid "Error while converting"
msgstr ""
-#: convert-ly.py:199
+#: convert-ly.py:204
msgid "Stopping at last successful rule"
msgstr ""
-#: convert-ly.py:224
+#: convert-ly.py:231
#, python-format
msgid "Processing `%s'... "
msgstr ""
-#: convert-ly.py:332
+#: convert-ly.py:338
#, python-format
msgid "%s: Unable to open file"
msgstr ""
-#: convert-ly.py:339
+#: convert-ly.py:345
#, python-format
msgid "%s: Unable to determine version. Skipping"
msgstr ""
-#: convert-ly.py:344
+#: convert-ly.py:350
#, python-format
msgid ""
"%s: Invalid version string `%s' \n"
"`2.8.12'"
msgstr ""
-#: etf2ly.py:1195
+#: etf2ly.py:1197
#, python-format
msgid "%s [OPTION]... ETF-FILE"
msgstr ""
-#: etf2ly.py:1196
+#: etf2ly.py:1198
msgid ""
"Enigma Transport Format is a format used by Coda Music Technology's\n"
"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond "
msgid "Other languages"
msgstr ""
-#: warn.cc:59
+#: warn.cc:56
#, c-format
-msgid "success: %s"
+msgid "Log level set to %d\n"
msgstr ""
-#: warn.cc:86 grob.cc:613 input.cc:97
+#: warn.cc:89
+#, c-format
+msgid "unknown log level `%s', using default (INFO)"
+msgstr ""
+
+#. Some expected warning was not triggered, so print out a warning.
+#: warn.cc:112
+#, c-format
+msgid "%d expected warning(s) not encountered: "
+msgstr ""
+
+#: warn.cc:183
+#, c-format
+msgid "fatal error: %s"
+msgstr ""
+
+#: warn.cc:192
+#, c-format
+msgid "suppressed programming error: %s"
+msgstr ""
+
+#: warn.cc:197
#, c-format
msgid "programming error: %s"
msgstr ""
-#: warn.cc:87 input.cc:98
+#: warn.cc:198
msgid "continuing, cross fingers"
msgstr ""
+#: warn.cc:207
+#, c-format
+msgid "suppressed error: %s"
+msgstr ""
+
+#: warn.cc:219
+#, c-format
+msgid "suppressed warning: %s"
+msgstr ""
+
#: getopt-long.cc:153
#, c-format
msgid "option `%s' requires an argument"
msgid "invalid argument `%s' to option `%s'"
msgstr ""
-#: grob.cc:286
-msgid "Infinity or NaN encountered"
+#: flag.cc:110
+#, c-format
+msgid "flag `%s' not found"
msgstr ""
-#: vaticana-ligature.cc:95
-msgid "flexa-height undefined; assuming 0"
+#: flag.cc:130
+#, c-format
+msgid "flag stroke `%s' not found"
msgstr ""
-#: vaticana-ligature.cc:100
-msgid "ascending vaticana style flexa"
+#: parse-scm.cc:112
+msgid "GUILE signaled an error for the expression beginning here"
msgstr ""
-#: vaticana-ligature.cc:188
-msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
+#: lily-lexer.cc:255
+msgid "include files are not allowed in safe mode"
msgstr ""
-#: parse-scm.cc:100
-msgid "GUILE signaled an error for the expression beginning here"
+#: lily-lexer.cc:282
+#, c-format
+msgid "identifier name is a keyword: `%s'"
msgstr ""
-#: rest-collision-engraver.cc:70
-msgid "rhythmic head is not part of a rhythmic column"
+#: lily-lexer.cc:303 lily-lexer.cc:316
+#, c-format
+msgid "%s:EOF"
msgstr ""
#. if we get to here, just put everything on one line
msgid "cannot find line breaking that satisfies constraints"
msgstr ""
+#: context-property.cc:43
+msgid "need symbol arguments for \\override and \\revert"
+msgstr ""
+
#: horizontal-bracket-engraver.cc:62
msgid "do not have that many brackets"
msgstr ""
msgid "conflicting note group events"
msgstr ""
-#: hyphen-engraver.cc:104
-msgid "removing unterminated hyphen"
+#: new-fingering-engraver.cc:113
+msgid "cannot add text scripts to individual note heads"
msgstr ""
-#: hyphen-engraver.cc:118
-msgid "unterminated hyphen; removing"
+#: new-fingering-engraver.cc:265
+msgid "no placement found for fingerings"
+msgstr ""
+
+#: new-fingering-engraver.cc:266
+msgid "placing below"
msgstr ""
-#: pango-font.cc:189 open-type-font.cc:318
+#: translator-group.cc:188
#, c-format
-msgid "FT_Get_Glyph_Name () error: %s"
+msgid "cannot find: `%s'"
msgstr ""
-#: pango-font.cc:205
+#: glissando-engraver.cc:158
+msgid "unterminated glissando"
+msgstr ""
+
+#: midi-item.cc:89
#, c-format
-msgid ""
-"Glyph has no name, but font supports glyph naming.\n"
-"Skipping glyph U+%0X, file %s"
+msgid "no such MIDI instrument: `%s'"
msgstr ""
-#: pango-font.cc:242
+#: open-type-font.cc:44
#, c-format
-msgid "no PostScript font name for font `%s'"
+msgid "cannot allocate %lu bytes"
msgstr ""
-#: pango-font.cc:291
-msgid "FreeType face has no PostScript font name"
+#: open-type-font.cc:48
+#, c-format
+msgid "cannot load font table: %s"
msgstr ""
-#: midi-item.cc:89
+#: open-type-font.cc:53
#, c-format
-msgid "no such MIDI instrument: `%s'"
+msgid "FreeType error: %s"
msgstr ""
-#: note-heads-engraver.cc:76
-msgid "NoteEvent without pitch"
+#: open-type-font.cc:110
+#, c-format
+msgid "unsupported font format: %s"
msgstr ""
-#: rest.cc:160
+#: open-type-font.cc:112
#, c-format
-msgid "rest `%s' not found"
+msgid "error reading font file %s: %s"
msgstr ""
-#: spaceable-grob.cc:94
+#: open-type-font.cc:187
#, c-format
-msgid "No spring between column %d and next one"
+msgid "FT_Get_Glyph_Name () Freetype error: %s"
msgstr ""
-#: beam-engraver.cc:147
-msgid "already have a beam"
+#: open-type-font.cc:318 pango-font.cc:189
+#, c-format
+msgid "FT_Get_Glyph_Name () error: %s"
msgstr ""
-#: beam-engraver.cc:230
-msgid "unterminated beam"
+#: note-heads-engraver.cc:76
+msgid "NoteEvent without pitch"
msgstr ""
-#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
-msgid "stem must have Rhythmic structure"
+#: skyline-pair.cc:131
+msgid "direction must not be CENTER in ly:skyline-pair::skyline"
msgstr ""
-#: beam-engraver.cc:274
-msgid "stem does not fit in beam"
+#: hyphen-engraver.cc:104
+msgid "removing unterminated hyphen"
msgstr ""
-#: beam-engraver.cc:275
-msgid "beam was started here"
+#: hyphen-engraver.cc:118
+msgid "unterminated hyphen; removing"
+msgstr ""
+
+#: output-def.cc:235
+msgid "margins do not fit with line-width, setting default values"
+msgstr ""
+
+#: output-def.cc:242
+msgid ""
+"systems run off the page due to improper paper settings, setting default "
+"values"
+msgstr ""
+
+#: accidental.cc:200
+#, c-format
+msgid "Could not find glyph-name for alteration %s"
msgstr ""
-#: music-iterator.cc:181
-msgid "Sending non-event to context"
+#: accidental.cc:215
+msgid "natural alteration glyph not found"
+msgstr ""
+
+#: lyric-combine-music-iterator.cc:337
+#, c-format
+msgid "cannot find Voice `%s'"
msgstr ""
#: context.cc:148
msgid "cannot find or create `%s' called `%s'"
msgstr ""
-#: context.cc:268
-#, c-format
-msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
-
#: context.cc:399
#, c-format
msgid "cannot find or create: `%s'"
msgid "Unknown event class %s"
msgstr ""
-#: paper-column-engraver.cc:245
-msgid ""
-"forced break was overridden by some other event, should you be using bar "
-"checks?"
+#: dispatcher.cc:171
+#, c-format
+msgid "Junking event: %s"
+msgstr ""
+
+#: auto-change-iterator.cc:74 change-iterator.cc:72
+#, c-format
+msgid "cannot change, already in translator: %s"
msgstr ""
#: tie-engraver.cc:117
msgid "lonely tie"
msgstr ""
-#: dynamic-engraver.cc:197
+#: dynamic-engraver.cc:193
msgid "cannot find start of (de)crescendo"
msgstr ""
-#: dynamic-engraver.cc:206
+#: dynamic-engraver.cc:200
msgid "already have a decrescendo"
msgstr ""
-#: dynamic-engraver.cc:208
+#: dynamic-engraver.cc:202
msgid "already have a crescendo"
msgstr ""
-#: dynamic-engraver.cc:211
+#: dynamic-engraver.cc:205
msgid "cresc starts here"
msgstr ""
-#: dynamic-engraver.cc:339
+#: dynamic-engraver.cc:333
msgid "unterminated (de)crescendo"
msgstr ""
msgid "Calculating line breaks..."
msgstr ""
-#: paper-score.cc:135
+#: paper-score.cc:134
#, c-format
msgid "Element count %d (spanners %d) "
msgstr ""
-#: paper-score.cc:139
+#: paper-score.cc:138
msgid "Preprocessing graphical objects..."
msgstr ""
-#: paper-score.cc:163 optimal-page-breaking.cc:208
+#: paper-score.cc:162 optimal-page-breaking.cc:208
#: page-turn-page-breaking.cc:248
msgid "Drawing systems..."
msgstr ""
msgid "unexpected case fall-through"
msgstr ""
-#: piano-pedal-engraver.cc:296
+#: piano-pedal-engraver.cc:279
#, c-format
msgid "expect 3 strings for piano pedals, found: %ld"
msgstr ""
-#: piano-pedal-engraver.cc:311 piano-pedal-engraver.cc:322
+#: piano-pedal-engraver.cc:294 piano-pedal-engraver.cc:305
#: piano-pedal-performer.cc:104
#, c-format
msgid "cannot find start of piano pedal: `%s'"
msgstr ""
-#: piano-pedal-engraver.cc:357
+#: piano-pedal-engraver.cc:340
#, c-format
msgid "cannot find start of piano pedal bracket: `%s'"
msgstr ""
-#: input.cc:130 source-file.cc:178 source-file.cc:193
+#: input.cc:138 source-file.cc:178 source-file.cc:193
msgid "position unknown"
msgstr ""
-#: paper-outputter-scheme.cc:41
-#, c-format
-msgid "Layout output to `%s'..."
+#: stem.cc:128
+msgid "weird stem size, check for narrow beams"
msgstr ""
-#: general-scheme.cc:305
-msgid "infinity or NaN encountered while converting Real number"
+#: relative-octave-check.cc:49
+msgid "Failed octave check, got: "
msgstr ""
-#: general-scheme.cc:306
-msgid "setting to zero"
+#: translator-ctors.cc:65
+#, c-format
+msgid "unknown translator: `%s'"
msgstr ""
-#: general-scheme.cc:540
-msgid "Found infinity or nan in output. Substituting 0.0"
+#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72
+msgid "cannot find start of ligature"
msgstr ""
-#: music.cc:150
-#, c-format
-msgid "octave check failed; expected \"%s\", found: \"%s\""
+#: ligature-engraver.cc:109
+msgid "no right bound"
msgstr ""
-#: music.cc:218
-msgid "(normalized pitch)"
+#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85
+msgid "already have a ligature"
msgstr ""
-#: music.cc:222
-#, c-format
-msgid "Transposing %s by %s makes alteration larger than double"
+#: ligature-engraver.cc:140
+msgid "no left bound"
msgstr ""
-#: translator-ctors.cc:65
-#, c-format
-msgid "unknown translator: `%s'"
-msgstr ""
-
-#: partial-iterator.cc:45
-msgid "trying to use \\partial after the start of a piece"
-msgstr ""
-
-#: new-fingering-engraver.cc:105
-msgid "cannot add text scripts to individual note heads"
-msgstr ""
-
-#: new-fingering-engraver.cc:249
-msgid "no placement found for fingerings"
-msgstr ""
-
-#: new-fingering-engraver.cc:250
-msgid "placing below"
-msgstr ""
-
-#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72
-msgid "cannot find start of ligature"
-msgstr ""
-
-#: ligature-engraver.cc:109
-msgid "no right bound"
-msgstr ""
-
-#: ligature-engraver.cc:131 ligature-bracket-engraver.cc:85
-msgid "already have a ligature"
-msgstr ""
-
-#: ligature-engraver.cc:140
-msgid "no left bound"
-msgstr ""
-
-#: ligature-engraver.cc:184
-msgid "unterminated ligature"
+#: ligature-engraver.cc:184
+msgid "unterminated ligature"
msgstr ""
#: ligature-engraver.cc:211
msgid "ligature was started here"
msgstr ""
-#: auto-change-iterator.cc:74 change-iterator.cc:72
-#, c-format
-msgid "cannot change, already in translator: %s"
-msgstr ""
-
-#: accidental-engraver.cc:179
-#, c-format
-msgid "accidental typesetting list must begin with context-name: %s"
-msgstr ""
-
-#: accidental-engraver.cc:209
-#, c-format
-msgid "procedure or context-name expected for accidental rule, found %s"
+#: tuplet-engraver.cc:110
+msgid "No tuplet to end"
msgstr ""
-#: ttf.cc:480 ttf.cc:529
+#: ttf.cc:480 ttf.cc:528
#, c-format
msgid "font index %d too large for font `%s', using index 0"
msgstr ""
-#: ttf.cc:512 ttf.cc:564
+#: ttf.cc:512 ttf.cc:562
msgid "font index must be non-negative, using index 0"
msgstr ""
-#: break-alignment-interface.cc:199
-#, c-format
-msgid "No spacing entry from %s to `%s'"
+#: multi-measure-rest.cc:140
+msgid ""
+"usable-duration-logs must be a non-empty list. Falling back to whole rests."
+msgstr ""
+
+#: partial-iterator.cc:45
+msgid "trying to use \\partial after the start of a piece"
msgstr ""
#: minimal-page-breaking.cc:44
msgid "program option -dpreview not supported by backend `%s'"
msgstr ""
-#: output-def.cc:235
-msgid "margins do not fit with line-width, setting default values"
+#: episema-engraver.cc:75
+msgid "already have an episema"
msgstr ""
-#: output-def.cc:242
-msgid ""
-"systems run off the page due to improper paper settings, setting default "
-"values"
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
+msgstr ""
+
+#: episema-engraver.cc:137
+msgid "unterminated episema"
msgstr ""
#: score-engraver.cc:78
msgid "Aborting"
msgstr ""
-#: note-collision.cc:494
+#: performance.cc:54
+msgid "Track..."
+msgstr ""
+
+#: performance.cc:82
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr ""
+
+#: note-collision.cc:504
msgid "ignoring too many clashing note columns"
msgstr ""
msgid "giving up"
msgstr ""
-#: page-layout-problem.cc:603
+#: page-layout-problem.cc:709
msgid ""
"cannot fit music on page: ragged-spacing was requested, but page was "
"compressed"
msgstr ""
-#: page-layout-problem.cc:606
+#: page-layout-problem.cc:712
#, c-format
msgid "cannot fit music on page: overflow is %f"
msgstr ""
-#: page-layout-problem.cc:608
+#: page-layout-problem.cc:714
msgid "compressing music to fit"
msgstr ""
-#: page-layout-problem.cc:1047
+#: page-layout-problem.cc:1176
msgid "staff-affinities should only decrease"
msgstr ""
msgid "mark label must be a markup object"
msgstr ""
-#: new-dynamic-engraver.cc:168
+#: stem-engraver.cc:105
+msgid "tremolo duration is too long"
+msgstr ""
+
+#: stem-engraver.cc:157
#, c-format
-msgid ""
-"unknown crescendo style: %s\n"
-"defaulting to hairpin."
+msgid "adding note head to incompatible stem (type = %d/%d)"
msgstr ""
-#: new-dynamic-engraver.cc:233
+#: stem-engraver.cc:160
+msgid "maybe input should specify polyphonic voices"
+msgstr ""
+
+#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
#, c-format
-msgid "unterminated %s"
+msgid "cannot find file: `%s'"
msgstr ""
-#: stem-engraver.cc:102
-msgid "tremolo duration is too long"
+#: includable-lexer.cc:73 lily-parser-scheme.cc:100
+#, c-format
+msgid "(search path: `%s')"
msgstr ""
-#: stem-engraver.cc:154
+#: relocate.cc:52
#, c-format
-msgid "adding note head to incompatible stem (type = %d/%d)"
+msgid "Setting %s to %s"
msgstr ""
-#: stem-engraver.cc:157
-msgid "maybe input should specify polyphonic voices"
+#. this warning should only be printed in debug mode!
+#: relocate.cc:73
+#, c-format
+msgid "no such file: %s for %s"
msgstr ""
-#: lily-lexer.cc:265
-msgid "include files are not allowed in safe mode"
+#. this warning should only be printed in debug mode!
+#. this warning should only be printed in debug mode
+#: relocate.cc:84 relocate.cc:102
+#, c-format
+msgid "no such directory: %s for %s"
msgstr ""
-#: lily-lexer.cc:292
+#: relocate.cc:93
#, c-format
-msgid "identifier name is a keyword: `%s'"
+msgid "%s=%s (prepend)\n"
msgstr ""
-#: lily-lexer.cc:313
+#: relocate.cc:124
#, c-format
-msgid "error at EOF: %s"
+msgid "not relocating, no %s/ or current/ found under %s"
msgstr ""
-#: lyric-combine-music-iterator.cc:337
+#: relocate.cc:134
#, c-format
-msgid "cannot find Voice `%s'"
+msgid "Relocation: compile datadir=%s, new datadir=%s"
msgstr ""
-#: includable-lexer.cc:71 lily-guile.cc:86 lily-parser-scheme.cc:109
+#: relocate.cc:146
#, c-format
-msgid "cannot find file: `%s'"
+msgid "Relocation: framework_prefix=%s"
msgstr ""
-#: includable-lexer.cc:73 lily-parser-scheme.cc:101
+#: relocate.cc:186
#, c-format
-msgid "(search path: `%s')"
+msgid "Relocation: is absolute: argv0=%s\n"
+msgstr ""
+
+#: relocate.cc:192
+#, c-format
+msgid "Relocation: from cwd: argv0=%s\n"
+msgstr ""
+
+#: relocate.cc:208
+#, c-format
+msgid ""
+"Relocation: from PATH=%s\n"
+"argv0=%s"
+msgstr ""
+
+#: relocate.cc:235
+msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+msgstr ""
+
+#: relocate.cc:360
+#, c-format
+msgid "Relocation file: %s"
+msgstr ""
+
+#: relocate.cc:364 source-file.cc:65
+#, c-format
+msgid "cannot open file: `%s'"
+msgstr ""
+
+#: relocate.cc:394
+#, c-format
+msgid "Unknown relocation command %s"
msgstr ""
#: note-column.cc:135
msgid "removing beam with no stems"
msgstr ""
-#. We are completely screwed.
-#: beam.cc:1350
-msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
-
#: staff-performer.cc:257
msgid "MIDI channel wrapped around"
msgstr ""
msgid "remapping modulo 16"
msgstr ""
-#: slur-engraver.cc:90 phrasing-slur-engraver.cc:89
+#: dots.cc:48
#, c-format
-msgid "direction of %s invalid: %d"
+msgid "dot `%s' not found"
msgstr ""
-#: slur-engraver.cc:158
-msgid "unterminated slur"
+#: font-config.cc:38
+msgid "Initializing FontConfig..."
msgstr ""
-#: slur-engraver.cc:183
-msgid "cannot end slur"
+#: font-config.cc:53 font-config-scheme.cc:151
+#, c-format
+msgid "failed adding font directory: %s"
msgstr ""
-#. We already have a slur, so give a warning and completely ignore
-#. the new slur.
-#: slur-engraver.cc:200
-msgid "already have slur"
+#: font-config.cc:55 font-config-scheme.cc:153
+#, c-format
+msgid "Adding font directory: %s"
msgstr ""
-#: font-config.cc:39
-msgid "Initializing FontConfig..."
+#: font-config.cc:58
+msgid "Building font database..."
msgstr ""
-#: font-config.cc:54 font-config-scheme.cc:151
+#: change-iterator.cc:34
#, c-format
-msgid "failed adding font directory: %s"
+msgid "cannot change `%s' to `%s'"
+msgstr ""
+
+#. FIXME: constant error message.
+#: change-iterator.cc:93
+msgid "cannot find context to switch to"
msgstr ""
-#: font-config.cc:56 font-config-scheme.cc:153
+#. We could change the current translator's id, but that would make
+#. errors hard to catch.
+#.
+#. last->translator_id_string () = get_change
+#. ()->change_to_id_string ();
+#: change-iterator.cc:102
#, c-format
-msgid "adding font directory: %s"
+msgid "not changing to same context type: %s"
msgstr ""
-#: font-config.cc:60
-msgid "Building font database..."
+#. FIXME: uncomprehensable message
+#: change-iterator.cc:106
+msgid "none of these in my family"
+msgstr ""
+
+#: slur.cc:438
+#, c-format
+msgid "Ignoring grob for slur: %s. avoid-slur not set?"
+msgstr ""
+
+#: source-file.cc:85
+#, c-format
+msgid "expected to read %d characters, got %d"
msgstr ""
#. find out the ideal number of pages
msgid "best score for this sys-count: %f"
msgstr ""
-#: accidental.cc:200
-#, c-format
-msgid "Could not find glyph-name for alteration %s"
-msgstr ""
-
-#: accidental.cc:215
-msgid "natural alteration glyph not found"
-msgstr ""
-
-#: system.cc:201
-#, c-format
-msgid "Element count %d"
-msgstr ""
-
-#: system.cc:402
-#, c-format
-msgid "Grob count %d"
-msgstr ""
-
-#: slur.cc:359
-#, c-format
-msgid "Ignoring grob for slur: %s. avoid-slur not set?"
-msgstr ""
-
-#: font-config-scheme.cc:167
+#: new-dynamic-engraver.cc:168
#, c-format
-msgid "failed adding font file: %s"
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
msgstr ""
-#: font-config-scheme.cc:169
+#: new-dynamic-engraver.cc:233
#, c-format
-msgid "adding font file: %s"
+msgid "unterminated %s"
msgstr ""
-#: hairpin.cc:186
+#: hairpin.cc:263
msgid "decrescendo too small"
msgstr ""
msgid "unterminated extender"
msgstr ""
-#: lily-guile.cc:88
-#, c-format
-msgid "(load path: `%s')"
-msgstr ""
-
-#: lily-guile.cc:431
-#, c-format
-msgid "cannot find property type-check for `%s' (%s)."
-msgstr ""
-
-#: lily-guile.cc:434
-msgid "perhaps a typing error?"
-msgstr ""
-
-#: lily-guile.cc:441
-msgid "doing assignment anyway"
-msgstr ""
-
-#: lily-guile.cc:453
-#, c-format
-msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
-
-#: main.cc:107
+#: main.cc:101
#, c-format
msgid ""
"This program is free software. It is covered by the GNU General Public\n"
"information.\n"
msgstr ""
-#: main.cc:113
+#: main.cc:107
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"
"Boston, MA 02111-1307, USA.\n"
msgstr ""
-#: main.cc:147
+#: main.cc:141
msgid "SYM[=VAL]"
msgstr ""
-#: main.cc:148
+#: main.cc:142
msgid ""
"set Scheme option SYM to VAL (default: #t).\n"
"Use -dhelp for help."
msgstr ""
-#: main.cc:152
+#: main.cc:146
msgid "EXPR"
msgstr ""
-#: main.cc:152
+#: main.cc:146
msgid "evaluate scheme code"
msgstr ""
#. Bug in option parser: --output =foe is taken as an abbreviation
#. for --output-format.
-#: main.cc:155
+#: main.cc:149
msgid "FORMATs"
msgstr ""
-#: main.cc:155
+#: main.cc:149
msgid "dump FORMAT,... Also as separate options:"
msgstr ""
-#: main.cc:156
+#: main.cc:150
msgid "generate PDF (default)"
msgstr ""
-#: main.cc:157
+#: main.cc:151
msgid "generate PNG"
msgstr ""
-#: main.cc:158
+#: main.cc:152
msgid "generate PostScript"
msgstr ""
-#: main.cc:161
+#: main.cc:155
msgid "FIELD"
msgstr ""
-#: main.cc:161
+#: main.cc:155
msgid ""
"dump header field FIELD to file\n"
"named BASENAME.FIELD"
msgstr ""
-#: main.cc:164
+#: main.cc:158
msgid "add DIR to search path"
msgstr ""
-#: main.cc:165
+#: main.cc:159
msgid "use FILE as init file"
msgstr ""
-#: main.cc:168
+#: main.cc:162
msgid "USER, GROUP, JAIL, DIR"
msgstr ""
-#: main.cc:168
+#: main.cc:162
msgid ""
"chroot to JAIL, become USER:GROUP\n"
"and cd into DIR"
msgstr ""
-#: main.cc:172
+#: main.cc:167
+msgid ""
+"print log messages according to LOGLEVEL. Possible values are:\n"
+"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
+msgstr ""
+
+#: main.cc:171
msgid "write output to FILE (suffix will be added)"
msgstr ""
-#: main.cc:173
+#: main.cc:172
msgid "relocate using directory of lilypond program"
msgstr ""
+#: main.cc:173
+msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
+msgstr ""
+
+#: main.cc:175
+msgid "be verbose (equivalent to loglevel=DEBUG)"
+msgstr ""
+
#. Do not update the copyright years here, run `make grand-replace'
#: main.cc:242
#, c-format
msgid "cannot change working directory to: %s: %s"
msgstr ""
-#: main.cc:631
+#: main.cc:639
#, c-format
msgid "exception caught: %s"
msgstr ""
-#: key-signature-interface.cc:77
+#: page-turn-page-breaking.cc:168
#, c-format
-msgid "No glyph found for alteration: %s"
+msgid "page-turn-page-breaking: breaking from %d to %d"
msgstr ""
-#: key-signature-interface.cc:87
-msgid "alteration not found"
+#: page-turn-page-breaking.cc:217
+msgid ""
+"cannot fit the first page turn onto a single page. Consider setting first-"
+"page-number to an even number."
msgstr ""
-#: dots.cc:48
+#: page-turn-page-breaking.cc:230
#, c-format
-msgid "dot `%s' not found"
+msgid "Calculating page and line breaks (%d possible page breaks)..."
msgstr ""
-#: translator.cc:356
+#: page-turn-page-breaking.cc:300
#, c-format
-msgid "Two simultaneous %s events, junking this one"
+msgid "break starting at page %d"
msgstr ""
-#: translator.cc:357
+#: page-turn-page-breaking.cc:301
#, c-format
-msgid "Previous %s event here"
+msgid "\tdemerits: %f"
msgstr ""
-#: glissando-engraver.cc:156
-msgid "unterminated glissando"
+#: page-turn-page-breaking.cc:302
+#, c-format
+msgid "\tsystem count: %d"
msgstr ""
-#: text-spanner-engraver.cc:72
-msgid "cannot find start of text spanner"
+#: page-turn-page-breaking.cc:303
+#, c-format
+msgid "\tpage count: %d"
msgstr ""
-#: text-spanner-engraver.cc:85
-msgid "already have a text spanner"
+#: page-turn-page-breaking.cc:304
+#, c-format
+msgid "\tprevious break: %d"
msgstr ""
-#: text-spanner-engraver.cc:130
-msgid "unterminated text spanner"
+#: key-signature-interface.cc:77
+#, c-format
+msgid "No glyph found for alteration: %s"
msgstr ""
-#: clef.cc:65
-#, c-format
-msgid "clef `%s' not found"
+#: key-signature-interface.cc:87
+msgid "alteration not found"
msgstr ""
-#.
-#. Todo: should make typecheck?
-#.
-#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
-#.
-#: time-signature-engraver.cc:75
+#: music.cc:150
#, c-format
-msgid "strange time signature found: %d/%d"
+msgid "octave check failed; expected \"%s\", found: \"%s\""
msgstr ""
-#: lily-parser-scheme.cc:83
-#, c-format
-msgid "Changing working directory to: `%s'"
+#: music.cc:219
+msgid "(normalized pitch)"
msgstr ""
-#: lily-parser-scheme.cc:100
+#: music.cc:223
#, c-format
-msgid "cannot find init file: `%s'"
+msgid "Transposing %s by %s makes alteration larger than double"
+msgstr ""
+
+#: vaticana-ligature.cc:95
+msgid "flexa-height undefined; assuming 0"
msgstr ""
-#: lily-parser-scheme.cc:118
+#: vaticana-ligature.cc:100
+msgid "ascending vaticana style flexa"
+msgstr ""
+
+#: translator.cc:356
#, c-format
-msgid "Processing `%s'"
+msgid "Two simultaneous %s events, junking this one"
msgstr ""
-#: lily-parser-scheme.cc:203
-msgid ""
-"ly:parser-parse-string is only valid with a new parser. Use ly:parser-"
-"include-string instead."
+#: translator.cc:357
+#, c-format
+msgid "Previous %s event here"
msgstr ""
-#: custos.cc:88
+#: lily-guile.cc:93
#, c-format
-msgid "custos `%s' not found"
+msgid "(load path: `%s')"
msgstr ""
-#: program-option-scheme.cc:232
+#: lily-guile.cc:416
#, c-format
-msgid "no such internal option: %s"
+msgid "cannot find property type-check for `%s' (%s)."
msgstr ""
-#: rest-collision.cc:146
-msgid "cannot resolve rest collision: rest direction not set"
+#: lily-guile.cc:419
+msgid "perhaps a typing error?"
msgstr ""
-#: rest-collision.cc:160 rest-collision.cc:275
-msgid "too many colliding rests"
+#: lily-guile.cc:426
+msgid "doing assignment anyway"
msgstr ""
-#: pdf-scheme.cc:50
+#: lily-guile.cc:438
#, c-format
-msgid "Conversion of string `%s' to UTF-16be failed: %s"
+msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr ""
-#: episema-engraver.cc:75
-msgid "already have an episema"
+#: text-spanner-engraver.cc:72
+msgid "cannot find start of text spanner"
msgstr ""
-#: episema-engraver.cc:88
-msgid "cannot find start of episema"
+#: text-spanner-engraver.cc:85
+msgid "already have a text spanner"
msgstr ""
-#: episema-engraver.cc:137
-msgid "unterminated episema"
+#: text-spanner-engraver.cc:130
+msgid "unterminated text spanner"
msgstr ""
-#: grob-property.cc:34
+#: clef.cc:65
#, c-format
-msgid "%d: %s"
+msgid "clef `%s' not found"
msgstr ""
-#: grob-property.cc:169
-#, c-format
-msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
+#: beam-engraver.cc:147
+msgid "already have a beam"
msgstr ""
-#: relocate.cc:53
-#, c-format
-msgid "Setting %s to %s"
+#: beam-engraver.cc:230
+msgid "unterminated beam"
msgstr ""
-#: relocate.cc:73
-#, c-format
-msgid "no such file: %s for %s"
+#: beam-engraver.cc:266 chord-tremolo-engraver.cc:149
+msgid "stem must have Rhythmic structure"
msgstr ""
-#: relocate.cc:83 relocate.cc:101
-#, c-format
-msgid "no such directory: %s for %s"
+#: beam-engraver.cc:277
+msgid "stem does not fit in beam"
msgstr ""
-#: relocate.cc:93
-#, c-format
-msgid "%s=%s (prepend)\n"
+#: beam-engraver.cc:278
+msgid "beam was started here"
msgstr ""
-#: relocate.cc:123
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:75
#, c-format
-msgid "not relocating, no %s/ or current/ found under %s"
+msgid "strange time signature found: %d/%d"
msgstr ""
-#: relocate.cc:134
-#, c-format
-msgid "Relocation: compile datadir=%s, new datadir=%s"
+#: paper-column-engraver.cc:261
+msgid ""
+"forced break was overridden by some other event, should you be using bar "
+"checks?"
msgstr ""
-#: relocate.cc:147
+#: lily-parser-scheme.cc:80
#, c-format
-msgid "Relocation: framework_prefix=%s"
+msgid "Changing working directory to: `%s'"
msgstr ""
-#: relocate.cc:188
+#: lily-parser-scheme.cc:84
#, c-format
-msgid "Relocation: is absolute: argv0=%s"
+msgid "unable to change directory to: `%s'"
msgstr ""
-#: relocate.cc:195
+#: lily-parser-scheme.cc:99
#, c-format
-msgid "Relocation: from cwd: argv0=%s"
+msgid "cannot find init file: `%s'"
msgstr ""
-#: relocate.cc:212
+#: lily-parser-scheme.cc:117
#, c-format
+msgid "Processing `%s'"
+msgstr ""
+
+#: lily-parser-scheme.cc:208
msgid ""
-"Relocation: from PATH=%s\n"
-"argv0=%s"
+"ly:parser-parse-string is only valid with a new parser. Use ly:parser-"
+"include-string instead."
msgstr ""
-#: relocate.cc:239
-msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+#: lily-parser-scheme.cc:239
+msgid ""
+"ly:parse-string-expression is only valid with a new parser. Use ly:parser-"
+"include-string instead."
msgstr ""
-#: relocate.cc:365
+#: font-config-scheme.cc:167
#, c-format
-msgid "Relocation file: %s"
+msgid "failed adding font file: %s"
msgstr ""
-#: relocate.cc:371 source-file.cc:65
+#: font-config-scheme.cc:169
#, c-format
-msgid "cannot open file: `%s'"
+msgid "Adding font file: %s"
msgstr ""
-#: relocate.cc:401
+#: custos.cc:88
#, c-format
-msgid "Unknown relocation command %s"
+msgid "custos `%s' not found"
msgstr ""
-#: gregorian-ligature-engraver.cc:70
+#: accidental-engraver.cc:179
#, c-format
-msgid "\\%s ignored"
+msgid "accidental typesetting list must begin with context-name: %s"
msgstr ""
-#: gregorian-ligature-engraver.cc:75
+#: accidental-engraver.cc:209
#, c-format
-msgid "implied \\%s added"
+msgid "procedure or context-name expected for accidental rule, found %s"
msgstr ""
-#. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:224
-msgid "cannot apply `\\~' on first head of ligature"
+#: rest-collision.cc:146
+msgid "cannot resolve rest collision: rest direction not set"
msgstr ""
-#. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:236
-msgid "cannot apply `\\~' on heads with identical pitch"
+#: rest-collision.cc:160 rest-collision.cc:276
+msgid "too many colliding rests"
msgstr ""
-#: translator-group.cc:188
+#: pango-font.cc:205
#, c-format
-msgid "cannot find: `%s'"
-msgstr ""
-
-#: phrasing-slur-engraver.cc:157
-msgid "unterminated phrasing slur"
+msgid ""
+"Glyph has no name, but font supports glyph naming.\n"
+"Skipping glyph U+%0X, file %s"
msgstr ""
-#: phrasing-slur-engraver.cc:182
-msgid "cannot end phrasing slur"
+#: pango-font.cc:242
+#, c-format
+msgid "no PostScript font name for font `%s'"
msgstr ""
-#: phrasing-slur-engraver.cc:196
-msgid "already have phrasing slur"
+#: pango-font.cc:291
+msgid "FreeType face has no PostScript font name"
msgstr ""
#: lyric-engraver.cc:186
msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
msgstr ""
-#: page-breaking.cc:274
+#: page-breaking.cc:277
msgid ""
"ignoring min-systems-per-page and max-systems-per-page because systems-per-"
"page was set"
msgstr ""
-#: page-breaking.cc:279
+#: page-breaking.cc:282
msgid ""
"min-systems-per-page is larger than max-systems-per-page, ignoring both "
"values"
msgstr ""
-#: performance.cc:55
-msgid "Track..."
+#: paper-outputter-scheme.cc:41
+#, c-format
+msgid "Layout output to `%s'..."
msgstr ""
-#: performance.cc:85
+#: gregorian-ligature-engraver.cc:70
#, c-format
-msgid "MIDI output to `%s'..."
+msgid "\\%s ignored"
msgstr ""
-#: tuplet-engraver.cc:107
-msgid "No tuplet to end"
+#: gregorian-ligature-engraver.cc:75
+#, c-format
+msgid "implied \\%s added"
+msgstr ""
+
+#. ligature may not start with 2nd head of pes or flexa
+#: gregorian-ligature-engraver.cc:224
+msgid "cannot apply `\\~' on first head of ligature"
+msgstr ""
+
+#. (pitch == prev_pitch)
+#: gregorian-ligature-engraver.cc:236
+msgid "cannot apply `\\~' on heads with identical pitch"
msgstr ""
#: chord-tremolo-engraver.cc:88
msgid "unterminated chord tremolo"
msgstr ""
+#: general-scheme.cc:390
+#, c-format
+msgid "failed redirecting stderr to `%s'"
+msgstr ""
+
+#: general-scheme.cc:469
+msgid "Found infinity or nan in output. Substituting 0.0"
+msgstr ""
+
+#: system.cc:200
+#, c-format
+msgid "Element count %d"
+msgstr ""
+
+#: system.cc:466
+#, c-format
+msgid "Grob count %d"
+msgstr ""
+
#: axis-group-engraver.cc:94
msgid "Axis_group_engraver: vertical group already has a parent"
msgstr ""
msgid "junking empty cluster"
msgstr ""
-#: context-property.cc:42
-msgid "need symbol arguments for \\override and \\revert"
+#: grob-property.cc:35
+#, c-format
+msgid "%d: %s"
msgstr ""
-#: source-file.cc:85
-#, c-format
-msgid "expected to read %d characters, got %d"
+#: rest-collision-engraver.cc:70
+msgid "rhythmic head is not part of a rhythmic column"
msgstr ""
-#: axis-group-interface.cc:627
+#: axis-group-interface.cc:670
msgid "an outside-staff object should have a direction, defaulting to up"
msgstr ""
msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
msgstr ""
+#. We are completely screwed.
+#: beam-quanting.cc:853
+msgid "no viable initial configuration found: may not find good beam slope"
+msgstr ""
+
#: percent-repeat-engraver.cc:147
msgid "unterminated percent repeat"
msgstr ""
-#: note-head.cc:75
+#: note-head.cc:85
#, c-format
msgid "none of note heads `%s' or `%s' found"
msgstr ""
-#: relative-octave-check.cc:49
-msgid "Failed octave check, got: "
-msgstr ""
-
#. FIXME:
#: script-engraver.cc:113
msgid "do not know how to interpret articulation:"
msgid " scheme encoding: "
msgstr ""
-#: all-font-metrics.cc:153
+#: program-option-scheme.cc:235
#, c-format
-msgid "cannot find font: `%s'"
+msgid "no such internal option: %s"
msgstr ""
#: property-iterator.cc:93
msgid "not a grob name, `%s'"
msgstr ""
-#: bar-check-iterator.cc:84
+#: all-font-metrics.cc:149
#, c-format
-msgid "barcheck failed at: %s"
-msgstr ""
-
-#: stem.cc:114
-msgid "weird stem size, check for narrow beams"
+msgid "cannot find font: `%s'"
msgstr ""
-#: stem.cc:652
+#: pdf-scheme.cc:50
#, c-format
-msgid "flag `%s' not found"
+msgid "Conversion of string `%s' to UTF-16be failed: %s"
msgstr ""
-#: stem.cc:668
+#: rest.cc:171
#, c-format
-msgid "flag stroke `%s' not found"
-msgstr ""
-
-#: global-context-scheme.cc:96 global-context-scheme.cc:114
-msgid "no music found in score"
-msgstr ""
-
-#: global-context-scheme.cc:104
-msgid "Interpreting music... "
+msgid "rest `%s' not found"
msgstr ""
-#: global-context-scheme.cc:127
+#: bar-check-iterator.cc:84
#, c-format
-msgid "elapsed time: %.2f seconds"
+msgid "barcheck failed at: %s"
msgstr ""
-#: translator-group-ctors.cc:40
+#: slur-engraver.cc:92 phrasing-slur-engraver.cc:91
#, c-format
-msgid "fatal error. Couldn't find type: %s"
+msgid "direction of %s invalid: %d"
msgstr ""
-#: mensural-ligature.cc:171
-msgid "Mensural_ligature: unexpected case fall-through"
+#: slur-engraver.cc:166
+msgid "unterminated slur"
msgstr ""
-#: mensural-ligature.cc:233
-msgid "Mensural_ligature: (join_right == 0)"
+#: slur-engraver.cc:191
+msgid "cannot end slur"
msgstr ""
-#: page-turn-page-breaking.cc:168
-#, c-format
-msgid "page-turn-page-breaking: breaking from %d to %d"
+#. We already have a slur, so give a warning and completely ignore
+#. the new slur.
+#: slur-engraver.cc:208
+msgid "already have slur"
msgstr ""
-#: page-turn-page-breaking.cc:217
-msgid ""
-"cannot fit the first page turn onto a single page. Consider setting first-"
-"page-number to an even number."
+#: global-context-scheme.cc:96 global-context-scheme.cc:114
+msgid "no music found in score"
msgstr ""
-#: page-turn-page-breaking.cc:230
-#, c-format
-msgid "Calculating page and line breaks (%d possible page breaks)..."
+#: global-context-scheme.cc:104
+msgid "Interpreting music... "
msgstr ""
-#: page-turn-page-breaking.cc:300
+#: global-context-scheme.cc:126
#, c-format
-msgid "break starting at page %d"
+msgid "elapsed time: %.2f seconds"
msgstr ""
-#: page-turn-page-breaking.cc:301
+#: translator-group-ctors.cc:40
#, c-format
-msgid "\tdemerits: %f"
+msgid "fatal error. Couldn't find type: %s"
msgstr ""
-#: page-turn-page-breaking.cc:302
-#, c-format
-msgid "\tsystem count: %d"
+#: phrasing-slur-engraver.cc:165
+msgid "unterminated phrasing slur"
msgstr ""
-#: page-turn-page-breaking.cc:303
-#, c-format
-msgid "\tpage count: %d"
+#: phrasing-slur-engraver.cc:190
+msgid "cannot end phrasing slur"
msgstr ""
-#: page-turn-page-breaking.cc:304
-#, c-format
-msgid "\tprevious break: %d"
+#: phrasing-slur-engraver.cc:204
+msgid "already have phrasing slur"
msgstr ""
-#: lily-parser.cc:105
+#: lily-parser.cc:109
msgid "Parsing..."
msgstr ""
-#: lily-parser.cc:133
-msgid "braces do not match"
-msgstr ""
-
#: score.cc:176
msgid "already have music in score"
msgstr ""
msgid "errors found, ignoring music expression"
msgstr ""
-#: change-iterator.cc:34
-#, c-format
-msgid "cannot change `%s' to `%s'"
-msgstr ""
-
-#. FIXME: constant error message.
-#: change-iterator.cc:93
-msgid "cannot find context to switch to"
-msgstr ""
-
-#. We could change the current translator's id, but that would make
-#. errors hard to catch.
-#.
-#. last->translator_id_string () = get_change
-#. ()->change_to_id_string ();
-#: change-iterator.cc:102
-#, c-format
-msgid "not changing to same context type: %s"
-msgstr ""
-
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:106
-msgid "none of these in my family"
-msgstr ""
-
#. If there is no such symbol, we default to the numbered style.
#. (Here really with a warning!)
#: time-signature.cc:94
msgid "Grob `%s' has no interface for property `%s'"
msgstr ""
-#: open-type-font.cc:44
-#, c-format
-msgid "cannot allocate %lu bytes"
-msgstr ""
-
-#: open-type-font.cc:48
-#, c-format
-msgid "cannot load font table: %s"
-msgstr ""
-
-#: open-type-font.cc:53
+#: midi-stream.cc:39
#, c-format
-msgid "FreeType error: %s"
+msgid "cannot open for write: %s: %s"
msgstr ""
-#: open-type-font.cc:110
+#: midi-stream.cc:55
#, c-format
-msgid "unsupported font format: %s"
+msgid "cannot write to file: `%s'"
msgstr ""
-#: open-type-font.cc:112
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:129
#, c-format
-msgid "error reading font file %s: %s"
+msgid "Cyclic markup detected: %s"
msgstr ""
-#: open-type-font.cc:187
+#. TODO: Also print the arguments of the markup!
+#: text-interface.cc:142
#, c-format
-msgid "FT_Get_Glyph_Name () Freetype error: %s"
+msgid "Markup depth exceeds maximal value of %d; Markup: %s"
msgstr ""
-#: midi-stream.cc:39
-#, c-format
-msgid "cannot open for write: %s: %s"
+#: parser.yy:162 parser.yy:176
+msgid "Too much lookahead"
msgstr ""
-#: midi-stream.cc:55
-#, c-format
-msgid "cannot write to file: `%s'"
+#: parser.yy:827 parser.yy:1193 parser.yy:1226
+msgid "not a context mod"
msgstr ""
-#: parser.yy:825
+#: parser.yy:995
msgid "\\paper cannot be used in \\score, use \\layout instead"
msgstr ""
-#: parser.yy:849
+#: parser.yy:1019
msgid "need \\paper for paper block"
msgstr ""
-#: parser.yy:1369
+#: parser.yy:1943
msgid "only \\consists takes non-string argument."
msgstr ""
-#: parser.yy:1382
+#: parser.yy:1956
msgid "Grob name should be alphanumeric"
msgstr ""
-#: parser.yy:1697
-msgid "second argument must be pitch list"
+#: parser.yy:2150
+msgid "not a rhythmic event"
msgstr ""
-#: parser.yy:1728 parser.yy:1733 parser.yy:2206
+#: parser.yy:2246 parser.yy:2251
msgid "have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:1830
+#: parser.yy:2366
msgid "expecting string as script definition"
msgstr ""
-#: parser.yy:1985 parser.yy:2036
+#: parser.yy:2518 parser.yy:2569
#, c-format
msgid "not a duration: %d"
msgstr ""
-#: parser.yy:2160
+#: parser.yy:2688
msgid "have to be in Note mode for notes"
msgstr ""
-#: parser.yy:2221
+#: parser.yy:2737
msgid "have to be in Chord mode for chords"
msgstr ""
-#: lexer.ll:192
+#: parser.yy:2997
+msgid "not a markup"
+msgstr ""
+
+#: lexer.ll:225
msgid "stray UTF-8 BOM encountered"
msgstr ""
-#: lexer.ll:196
+#: lexer.ll:228
msgid "Skipping UTF-8 BOM"
msgstr ""
-#: lexer.ll:251
+#: lexer.ll:286
#, c-format
msgid "Renaming input to: `%s'"
msgstr ""
-#: lexer.ll:268
+#: lexer.ll:303
msgid "quoted string expected after \\version"
msgstr ""
-#: lexer.ll:272
+#: lexer.ll:307
msgid "quoted string expected after \\sourcefilename"
msgstr ""
-#: lexer.ll:276
+#: lexer.ll:311
msgid "integer expected after \\sourcefileline"
msgstr ""
-#: lexer.ll:289
-msgid "EOF found inside a comment"
-msgstr ""
-
-#: lexer.ll:304
+#: lexer.ll:334
msgid "\\maininput not allowed outside init files"
msgstr ""
-#: lexer.ll:328
+#: lexer.ll:358
#, c-format
msgid "wrong or undefined identifier: `%s'"
msgstr ""
+#: lexer.ll:384
+msgid "string expected after \\include"
+msgstr ""
+
#. backup rule
-#: lexer.ll:337
+#: lexer.ll:394
msgid "end quote missing"
msgstr ""
-#: lexer.ll:487
+#: lexer.ll:556
msgid "Brace found at end of lyric. Did you forget a space?"
msgstr ""
-#: lexer.ll:597
+#: lexer.ll:671
msgid "Brace found at end of markup. Did you forget a space?"
msgstr ""
-#: lexer.ll:701
+#: lexer.ll:683
+msgid "EOF found inside a comment"
+msgstr ""
+
+#: lexer.ll:775
#, c-format
-msgid "invalid character: `%c'"
+msgid "invalid character: `%s'"
msgstr ""
-#: lexer.ll:822 lexer.ll:823
+#: lexer.ll:868 lexer.ll:869
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:932 lexer.ll:933
+#: lexer.ll:1117 lexer.ll:1118
+msgid "non-UTF-8 input"
+msgstr ""
+
+#: lexer.ll:1161 lexer.ll:1162
#, c-format
msgid "file too old: %s (oldest supported: %s)"
msgstr ""
-#: lexer.ll:933 lexer.ll:934
+#: lexer.ll:1162 lexer.ll:1163
msgid "consider updating the input with the convert-ly script"
msgstr ""
-#: lexer.ll:939 lexer.ll:940
+#: lexer.ll:1168 lexer.ll:1169
#, c-format
msgid "program too old: %s (file requires: %s)"
msgstr ""
-#: documentation-lib.scm:59
-#, scheme-format
-msgid "Processing ~S..."
-msgstr ""
-
-#: documentation-lib.scm:176
-#, scheme-format
-msgid "Writing ~S..."
-msgstr ""
-
-#: documentation-lib.scm:184
-#, scheme-format
-msgid "cannot find description for property `~S' (~S)"
-msgstr ""
-
-#: documentation-lib.scm:205
-#, scheme-format
-msgid "cannot find description for property ~S (~S)"
-msgstr ""
-
#: parser-clef.scm:141 parser-clef.scm:181
#, scheme-format
msgid "unknown clef type `~a'"
msgid "unknown Grob interface: ~S"
msgstr ""
+#: graphviz.scm:64
+#, scheme-format
+msgid "Writing graph `~a'..."
+msgstr ""
+
+#: parser-ly-from-scheme.scm:71
+msgid "error in #{ ... #}"
+msgstr ""
+
#: framework-eps.scm:108
#, scheme-format
msgid "Writing ~a..."
msgstr ""
-#: define-music-properties.scm:21 define-grob-properties.scm:21
-#: define-context-properties.scm:31
+#: output-ps.scm:48
+msgid "Found infinity or nan in output. Substituting 0.0"
+msgstr ""
+
+#: output-ps.scm:313 output-svg.scm:556
#, scheme-format
-msgid "symbol ~S redefined"
+msgid "unknown line-cap-style: ~S"
+msgstr ""
+
+#: output-ps.scm:318 output-svg.scm:562
+#, scheme-format
+msgid "unknown line-join-style: ~S"
msgstr ""
-#: paper.scm:117
+#: paper.scm:120
msgid "set-global-staff-size: not in toplevel scope"
msgstr ""
-#: paper.scm:301
+#: paper.scm:304
#, scheme-format
msgid "This is not a \\layout {} object, ~S"
msgstr ""
-#: paper.scm:313
+#: paper.scm:316
#, scheme-format
msgid "Unknown paper size: ~a"
msgstr ""
#. TODO: should raise (generic) exception with throw, and catch
#. that in parse-scm.cc
-#: paper.scm:328
+#: paper.scm:331
msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
msgstr ""
-#: lily.scm:225
-msgid "Using (ice-9 curried-definitions) module\n"
-msgstr ""
-
-#: lily.scm:230
-msgid "Guile 1.8\n"
-msgstr ""
-
-#: lily.scm:290
+#: backend-library.scm:27
#, scheme-format
-msgid "cannot find: ~A"
+msgid "Invoking `~a'..."
msgstr ""
-#: lily.scm:350
+#: backend-library.scm:31
#, scheme-format
-msgid "wrong type for argument ~a. Expecting ~a, found ~s"
+msgid "`~a' failed (~a)\n"
msgstr ""
-#: lily.scm:710
-msgid "Compilation successfully completed"
-msgstr ""
-
-#: lily.scm:711
-msgid "Compilation completed with warnings or errors"
-msgstr ""
-
-#: lily.scm:773
+#: backend-library.scm:90
#, scheme-format
-msgid "job ~a terminated with signal: ~a"
+msgid "Converting to `~a'...\n"
msgstr ""
-#: lily.scm:776
+#. Do not try to guess the name of the png file,
+#. GS produces PNG files like BASE-page%d.png.
+#: backend-library.scm:99
#, scheme-format
-msgid ""
-"logfile ~a (exit ~a):\n"
-"~a"
+msgid "Converting to ~a..."
msgstr ""
-#: lily.scm:798 lily.scm:876
+#: backend-library.scm:137
#, scheme-format
-msgid "failed files: ~S"
+msgid "Writing header field `~a' to `~a'..."
msgstr ""
-#: lily.scm:867
+#: backend-library.scm:187
#, scheme-format
-msgid "Redirecting output to ~a..."
+msgid "missing stencil expression `~S'"
msgstr ""
-#: lily.scm:886
+#: output-svg.scm:47
#, scheme-format
-msgid "Invoking `~a'...\n"
+msgid "undefined: ~S"
msgstr ""
-#: graphviz.scm:64
+#: output-svg.scm:157
#, scheme-format
-msgid "Writing graph `~a'..."
+msgid "cannot decypher Pango description: ~a"
msgstr ""
-#: framework-svg.scm:84
-#, scheme-format
-msgid "Updating font into: ~a"
+#: output-svg.scm:237
+msgid "Glyph must have a unicode value"
msgstr ""
-#: layout-beam.scm:40
+#: output-svg.scm:289 output-svg.scm:299
#, scheme-format
-msgid "Error in beam quanting. Expected (~S,~S) found ~S."
+msgid "cannot find SVG font ~S"
msgstr ""
-#: layout-beam.scm:54
+#: flag-styles.scm:151
#, scheme-format
-msgid "Error in beam quanting. Expected ~S 0, found ~S."
+msgid "flag stroke `~a' or `~a' not found"
msgstr ""
#: modal-transforms.scm:38
msgid "negative replication count; ignoring"
msgstr ""
-#: backend-library.scm:29 ps-to-png.scm:68
+#: to-xml.scm:191
#, scheme-format
-msgid "Invoking `~a'..."
+msgid "assertion failed: ~S"
msgstr ""
-#: backend-library.scm:34
+#: define-grob-properties.scm:21 define-context-properties.scm:31
+#: define-music-properties.scm:21
#, scheme-format
-msgid "`~a' failed (~a)"
+msgid "symbol ~S redefined"
msgstr ""
-#: backend-library.scm:94
+#: chord-entry.scm:52
#, scheme-format
-msgid "Converting to `~a'..."
+msgid "Spurious garbage following chord: ~A"
msgstr ""
-#. Do not try to guess the name of the png file,
-#. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:104
+#: lily.scm:234
+msgid "Using (ice-9 curried-definitions) module\n"
+msgstr ""
+
+#: lily.scm:237
+msgid "Guile 1.8\n"
+msgstr ""
+
+#: lily.scm:297
#, scheme-format
-msgid "Converting to ~a..."
+msgid "cannot find: ~A"
+msgstr ""
+
+#: lily.scm:701
+msgid "Success: compilation successfully completed"
+msgstr ""
+
+#: lily.scm:702
+msgid "Compilation completed with warnings or errors"
msgstr ""
-#: backend-library.scm:142
+#: lily.scm:764
#, scheme-format
-msgid "Writing header field `~a' to `~a'..."
+msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: backend-library.scm:192
+#: lily.scm:767
#, scheme-format
-msgid "missing stencil expression `~S'"
+msgid ""
+"logfile ~a (exit ~a):\n"
+"~a"
msgstr ""
-#: to-xml.scm:191
+#: lily.scm:789 lily.scm:869
#, scheme-format
-msgid "assertion failed: ~S"
+msgid "failed files: ~S"
msgstr ""
-#: chord-entry.scm:49
+#: lily.scm:860
#, scheme-format
-msgid "Spurious garbage following chord: ~A"
+msgid "Redirecting output to ~a..."
+msgstr ""
+
+#: lily.scm:879 ps-to-png.scm:66
+#, scheme-format
+msgid "Invoking `~a'...\n"
msgstr ""
-#: lily-library.scm:758
+#: lily-library.scm:761
msgid ""
"Find the index between @var{start} and @var{end} (an integer)\n"
"which produces the closest match to @var{target-val} if\n"
"applied to function @var{getter}."
msgstr ""
-#: lily-library.scm:832
+#: lily-library.scm:835
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:858 lily-library.scm:867
-msgid "warning:"
-msgstr ""
-
#: lily-library.scm:860
#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
msgstr ""
-#: lily-library.scm:868
+#: lily-library.scm:866
msgid "old relative compatibility not used"
msgstr ""
-#: output-ps.scm:48
-msgid "Found infinity or nan in output. Substituting 0.0"
-msgstr ""
-
-#: output-ps.scm:299 output-svg.scm:550
+#: framework-svg.scm:84
#, scheme-format
-msgid "unknown line-cap-style: ~S"
+msgid "Updating font into: ~a"
msgstr ""
-#: output-ps.scm:304 output-svg.scm:556
+#: part-combiner.scm:598
#, scheme-format
-msgid "unknown line-join-style: ~S"
+msgid "quoted music `~a' is empty"
msgstr ""
-#: output-svg.scm:47
-#, scheme-format
-msgid "undefined: ~S"
+#: music-functions.scm:273
+msgid "More alternatives than repeats. Junking excess alternatives"
msgstr ""
-#: output-svg.scm:151
+#: music-functions.scm:302
#, scheme-format
-msgid "cannot decypher Pango description: ~a"
+msgid "invalid tremolo repeat count: ~a"
msgstr ""
-#: output-svg.scm:231
-msgid "Glyph must have a unicode value"
+#: music-functions.scm:634
+msgid "Bad chord repetition"
msgstr ""
-#: output-svg.scm:283 output-svg.scm:293
+#: music-functions.scm:669
#, scheme-format
-msgid "cannot find SVG font ~S"
+msgid "music expected: ~S"
msgstr ""
-#: flag-styles.scm:148
+#: music-functions.scm:985
#, scheme-format
-msgid "flag stroke `~a' or `~a' not found"
+msgid "cannot find quoted music: `~S'"
msgstr ""
-#: define-note-names.scm:962
-msgid "Select note names language."
+#: music-functions.scm:1123
+msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: define-note-names.scm:969
+#: music-functions.scm:1183
#, scheme-format
-msgid "Using `~a' note names..."
+msgid "Unknown octaveness type: ~S "
msgstr ""
-#: define-note-names.scm:972
-#, scheme-format
-msgid "Could not find language `~a'. Ignoring."
+#: music-functions.scm:1184
+msgid "Defaulting to 'any-octave."
msgstr ""
-#: define-music-types.scm:747
+#: music-functions.scm:1521
#, scheme-format
-msgid "symbol expected: ~S"
+msgid "unknown accidental style: ~S"
msgstr ""
-#: define-music-types.scm:750
-#, scheme-format
-msgid "cannot find music object: ~S"
+#: define-event-classes.scm:80
+msgid "All classes must be the last in their matrilineal line."
msgstr ""
-#: define-music-types.scm:769
-#, scheme-format
-msgid "unknown repeat type `~S'"
+#: define-event-classes.scm:84
+msgid ""
+"All classes must have a well-defined pedigree in the existing class "
+"hierarchy."
msgstr ""
-#: define-music-types.scm:770
-msgid "See define-music-types.scm for supported repeats"
+#: define-event-classes.scm:151
+#, scheme-format
+msgid "event class ~A seems to be unused"
msgstr ""
-#: translation-functions.scm:350
+#. should be programming-error
+#: define-event-classes.scm:157
#, scheme-format
-msgid "Negative fret for pitch ~a on string ~a"
+msgid "translator listens to nonexisting event class ~A"
msgstr ""
-#: translation-functions.scm:401
+#: markup-macros.scm:331
#, scheme-format
-msgid "No open string for pitch ~a"
+msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S"
msgstr ""
-#: translation-functions.scm:416 translation-functions.scm:428
+#: markup-macros.scm:337
#, scheme-format
-msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
+msgid "Invalid argument in position ~A. Expect: ~A, found: ~S."
msgstr ""
-#: translation-functions.scm:419
-msgid "Ignoring string request and recalculating."
+#: markup-macros.scm:373
+#, scheme-format
+msgid "Not a markup command: ~A"
msgstr ""
-#: translation-functions.scm:431
-msgid "Ignoring note in tablature."
+#: define-note-names.scm:962
+msgid "Select note names language."
msgstr ""
-#: translation-functions.scm:454
+#: define-note-names.scm:968
#, scheme-format
-msgid "No string for pitch ~a (given frets ~a)"
+msgid "Using `~a' note names..."
msgstr ""
-#: translation-functions.scm:559
+#: define-note-names.scm:971
#, scheme-format
-msgid ""
-"No label for fret ~a (on string ~a);\n"
-"only ~a fret labels provided"
+msgid "Could not find language `~a'. Ignoring."
msgstr ""
#: framework-ps.scm:250
" %% ****************************************************************\n"
msgstr ""
-#: music-functions.scm:268
-msgid "More alternatives than repeats. Junking excess alternatives"
+#: layout-beam.scm:40
+#, scheme-format
+msgid "Error in beam quanting. Expected (~S,~S) found ~S."
msgstr ""
-#: music-functions.scm:297
+#: layout-beam.scm:54
#, scheme-format
-msgid "invalid tremolo repeat count: ~a"
+msgid "Error in beam quanting. Expected ~S 0, found ~S."
msgstr ""
-#: music-functions.scm:619
+#: define-music-types.scm:752
#, scheme-format
-msgid "music expected: ~S"
+msgid "symbol expected: ~S"
msgstr ""
-#. FIXME: uncomprehensable message
-#: music-functions.scm:662
+#: define-music-types.scm:755
#, scheme-format
-msgid "Bar check failed. Expect to be at ~a, instead at ~a"
+msgid "cannot find music object: ~S"
msgstr ""
-#: music-functions.scm:845
+#: define-music-types.scm:774
#, scheme-format
-msgid "cannot find quoted music: `~S'"
+msgid "unknown repeat type `~S'"
msgstr ""
-#: music-functions.scm:979
-msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+#: define-music-types.scm:775
+msgid "See define-music-types.scm for supported repeats"
msgstr ""
-#: music-functions.scm:1039
+#: translation-functions.scm:351
#, scheme-format
-msgid "Unknown octaveness type: ~S "
+msgid "Negative fret for pitch ~a on string ~a"
msgstr ""
-#: music-functions.scm:1040
-msgid "Defaulting to 'any-octave."
+#: translation-functions.scm:402
+#, scheme-format
+msgid "No open string for pitch ~a"
msgstr ""
-#: music-functions.scm:1378
+#: translation-functions.scm:417 translation-functions.scm:429
#, scheme-format
-msgid "unknown accidental style: ~S"
+msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
msgstr ""
-#: define-event-classes.scm:79
-msgid "All classes must be the last in their matrilineal line."
+#: translation-functions.scm:420
+msgid "Ignoring string request and recalculating."
msgstr ""
-#: define-event-classes.scm:83
-msgid ""
-"All classes must have a well-defined pedigree in the existing class "
-"hierarchy."
+#: translation-functions.scm:432
+msgid "Ignoring note in tablature."
msgstr ""
-#: define-event-classes.scm:149
+#: translation-functions.scm:455
#, scheme-format
-msgid "event class ~A seems to be unused"
+msgid "No string for pitch ~a (given frets ~a)"
msgstr ""
-#. should be programming-error
-#: define-event-classes.scm:155
+#: translation-functions.scm:560
#, scheme-format
-msgid "translator listens to nonexisting event class ~A"
+msgid ""
+"No label for fret ~a (on string ~a);\n"
+"only ~a fret labels provided"
msgstr ""
-#: markup.scm:223
+#: ps-to-png.scm:70
#, scheme-format
-msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S"
+msgid "~a exited with status: ~S"
+msgstr ""
+
+#: define-markup-commands.scm:887
+msgid "no systems found in \\score markup, does it have a \\layout block?"
msgstr ""
-#: markup.scm:229
+#: define-markup-commands.scm:2614
#, scheme-format
-msgid "Invalid argument in position ~A. Expect: ~A, found: ~S."
+msgid "Cannot find glyph ~a"
msgstr ""
-#: markup.scm:292
+#: define-markup-commands.scm:3040
#, scheme-format
-msgid "Not a markup command: ~A"
+msgid "no brace found for point size ~S "
msgstr ""
-#: ps-to-png.scm:74
+#: define-markup-commands.scm:3041
#, scheme-format
-msgid "~a exited with status: ~S"
+msgid "defaulting to ~S pt"
msgstr ""
-#: define-markup-commands.scm:883
-msgid "no systems found in \\score markup, does it have a \\layout block?"
+#: define-markup-commands.scm:3194
+#, scheme-format
+msgid "not a valid duration string: ~a"
msgstr ""
-#: define-markup-commands.scm:2561
+#: documentation-lib.scm:59
#, scheme-format
-msgid "Cannot find glyph ~a"
+msgid "Processing ~S..."
msgstr ""
-#: define-markup-commands.scm:2987
+#: documentation-lib.scm:176
#, scheme-format
-msgid "no brace found for point size ~S "
+msgid "Writing ~S..."
msgstr ""
-#: define-markup-commands.scm:2988
+#: documentation-lib.scm:188
#, scheme-format
-msgid "defaulting to ~S pt"
+msgid "cannot find description for property `~S' (~S)"
msgstr ""
-#: define-markup-commands.scm:3141
+#: documentation-lib.scm:209
#, scheme-format
-msgid "not a valid duration string: ~a"
+msgid "cannot find description for property ~S (~S)"
+msgstr ""
+
+#: ly-syntax-constructors.scm:65
+#, scheme-format
+msgid "~a function cannot return ~a"
msgstr ""
-#: ly-syntax-constructors.scm:51
-msgid "Music head function must return Music object"
+#: ly-syntax-constructors.scm:74
+#, scheme-format
+msgid "wrong type for argument ~a. Expecting ~a, found ~s"
msgstr ""
-#: ly-syntax-constructors.scm:177
+#: ly-syntax-constructors.scm:187
#, scheme-format
msgid "Invalid property operation ~a"
msgstr ""
} ifelse
} bind def
-/draw_repeat_slash % x-width width height draw_repeat_slash
-{
- 2 index % duplicate x-width
- 1 setlinecap
- 1 setlinejoin
-
- 0 rlineto % x-width 0
- rlineto % width height
- neg 0 rlineto % -x-width 0
- closepath fill
-} bind def
-
-% this is for drawing slurs and barre-indicators.
-/draw_bezier_sandwich % x5 y5 x6 y6 x7 y7
- % x4 y4
- % x1 y1 x2 y2 x3 y3
- % x0 y0
- % linewidth draw_bezier_sandwich
-{
- gsave
- currentpoint translate
- % round ending and round beginning
- 1 setlinejoin 1 setlinecap
- setlinewidth
- moveto
- curveto
- lineto
- curveto
- closepath
- stroke_and_fill
- grestore
-} bind def
-
-/draw_dot % radius x y draw_dot
-{
- rmoveto
- currentpoint
- 3 2 roll
- 0 360 arc closepath stroke_and_fill
-} bind def
-
/draw_circle % filled? radius thickness draw_circle
{
setlinewidth % f? r
ifelse
} bind def
-/draw_oval % filled? x-radius y-radius thickness draw_ellipse
-{
- setlinewidth % f? x-r y-r
- /yrad exch def
- /xrad exch def
- xrad 0 rmoveto
- 0 yrad -2 xrad mul dup yrad exch 0 rcurveto
- 0 yrad neg dup 2 xrad mul dup 3 1 roll 0 rcurveto
- closepath
- { stroke_and_fill}
- { stroke }
- ifelse
-} bind def
-
/draw_ellipse % filled? x-radius y-radius thickness draw_ellipse
{
setlinewidth % f? x-r y-r
[] 0 setdash % reset dash pattern
} bind def
-/draw_dashed_slur % controls thickness dash
-{
-gsave
- currentpoint translate
- 1 setlinecap
- 1 setlinejoin
- setdash
- setlinewidth
- 8 2 roll
- moveto
- curveto
- stroke
-grestore
-} bind def
-
/print_glyphs % w dx dy glyph print_glyphs
{
{
if self.spanbar == "no":
printer.dump ("\\override SpanBar #'transparent = ##t")
brack = {"brace": "SystemStartBrace",
- "none": "f",
+ "none": "SystemStartBar",
"line": "SystemStartSquare"}.get (self.symbol, None)
if brack:
printer.dump ("systemStartDelimiter = #'%s" % brack)
(define-public (fraction? x)
(and (pair? x)
- (integer? (car x)) (integer? (cdr x))
- (>= (car x) 0) (>= (cdr x) 0)))
+ (index? (car x)) (index? (cdr x))))
(define-public (number-or-grob? x)
(or (ly:grob? x) (number? x)))
(define-public (number-list? x)
(and (list? x) (every number? x)))
+(define-public (index? x)
+ (and (integer? x) (>= x 0)))
+
(define-public (moment-pair? x)
(and (pair? x)
(ly:moment? (car x)) (ly:moment? (cdr x))))
(side-support-elements ,ly:grob-array? "The side support, an array of
grobs.")
- (skyline-quantizing ,ly:vsize? "The number of boxes to break a
+ (skyline-quantizing ,index? "The number of boxes to break a
slur into when calculating its skyline.")
(slur ,ly:grob? "A pointer to a @code{Slur} object.")
(spacing ,ly:grob? "The spacing spanner governing this section.")
;;;
(define-display-method EventChord (chord parser)
- ;; event_chord : simple_element post_events
- ;; | command_element
+ ;; event_chord : command_element
;; | note_chord_element
;; TODO : tagged post_events
;; tagged_post_event: '-' \tag embedded_scm post_event
(let* ((elements (ly:music-property chord 'elements))
- (simple-elements (filter (make-music-type-predicate
- 'NoteEvent 'ClusterNoteEvent 'RestEvent
- 'SkipEvent 'LyricEvent)
- elements)))
- (let ((chord-elements (filter (make-music-type-predicate
- 'NoteEvent 'ClusterNoteEvent 'BassFigureEvent)
- elements))
- (post-events (filter post-event? elements)))
- (if (not (null? chord-elements))
- ;; note_chord_element : '<' (notepitch | drumpitch)* '>" duration post_events
- (let* ((duration (duration->lily-string
- (ly:music-property (car chord-elements) 'duration)
- #:remember #t)))
- (format #f "< ~{~a ~}>~a~{~a~^ ~}"
- (map-in-order (lambda (music)
- (music->lily-string music parser))
- chord-elements)
- duration
- (map-in-order (lambda (music)
- (music->lily-string music parser))
- post-events)))
- ;; command_element
- (format #f "~{~a~^ ~}" (map-in-order (lambda (music)
- (music->lily-string music parser))
- elements))))))
-
-(define-display-method MultiMeasureRestMusic (mmrest parser)
- (let* ((dur (ly:music-property mmrest 'duration))
- (ly (format #f "R~a~{~a~^ ~}"
- (duration->lily-string dur)
+ (chord-elements (filter (lambda (m)
+ (music-is-of-type? m 'rhythmic-event))
+ elements))
+ (post-events (filter post-event? elements))
+ (chord-repeat (ly:music-property chord 'duration)))
+ (cond ((ly:duration? chord-repeat)
+ (let ((duration (duration->lily-string chord-repeat #:remember #t)))
+ (format #f "q~a~{~a~^ ~}"
+ duration
+ (map-in-order (lambda (music)
+ (music->lily-string music parser))
+ post-events))))
+ ((pair? chord-elements)
+ ;; note_chord_element : '<' (notepitch | drumpitch)* '>" duration post_events
+ (let ((duration (duration->lily-string (ly:music-property
+ (car chord-elements)
+ 'duration) #:remember #t)))
+ ;; Format duration first so that it does not appear on chord elements
+ (format #f "< ~{~a ~}>~a~{~a~^ ~}"
+ (map-in-order (lambda (music)
+ (music->lily-string music parser))
+ chord-elements)
+ duration
(map-in-order (lambda (music)
(music->lily-string music parser))
- (ly:music-property mmrest 'articulations)))))
- (*previous-duration* dur)
- ly))
+ post-events))))
+ (else
+ ;; command_element
+ (format #f "~{~a~^ ~}" (map-in-order (lambda (music)
+ (music->lily-string music parser))
+ elements))))))
+
+(define-display-method MultiMeasureRestMusic (mmrest parser)
+ (format #f "R~a~{~a~^ ~}"
+ (duration->lily-string (ly:music-property mmrest 'duration)
+ #:remember #t)
+ (map-in-order (lambda (music)
+ (music->lily-string music parser))
+ (ly:music-property mmrest 'articulations))))
(define-display-method SkipMusic (skip parser)
(format #f "\\skip ~a" (duration->lily-string (ly:music-property skip 'duration) #:force-duration #t)))
(EventChord
. ((description . "Internally used to group a set of events.")
(iterator-ctor . ,ly:event-chord-iterator::constructor)
- (length-callback . ,ly:music-sequence::maximum-length-callback)
+ (length-callback . ,ly:music-sequence::event-chord-length-callback)
(to-relative-callback .
,ly:music-sequence::event-chord-relative-callback)
(types . (general-music event-chord simultaneous-music))
(types . (music-wrapper-music general-music relative-octave-music))
))
- (RepeatedChord
- . ((description . "A chord repetition")
- (to-relative-callback . ,ly:music-sequence::repeated-chord-relative-callback)
- (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
- (start-callback . ,ly:music-wrapper::start-callback)
- (length-callback . ,ly:music-wrapper::length-callback)
- (types . (general-music music-wrapper-music))
- ))
-
(RepeatedMusic
. ((description . "Repeat music in different ways.")
(types . (general-music repeated-music))
(define-public (ly:all-stencil-commands)
"Return the list of stencil commands that can be
defined in the output modules (@file{output-*.scm})."
- '(beam
- bezier-sandwich
- blank
- bracket
+ '(blank
char
circle
dashed-line
- dashed-slur
- dot
draw-line
ellipse
embedded-ps
grob-cause
named-glyph
no-origin
- oval
page-link
path
partial-ellipse
placebox
polygon
- repeat-slash
resetcolor
resetrotation
resetscale
unknown
url-link
utf-8-string
- zigzag-line
))
;; TODO:
(+ (* size end-string-coordinate) half-thickness)))
(x-extent (cons (car box-lower-left) (car box-upper-right)))
(y-extent (cons (cdr box-lower-left) (cdr box-upper-right))))
- (ly:make-stencil
- (list 'bezier-sandwich
- `(quote ,bezier-list)
- (* size bezier-thick))
+ (make-bezier-sandwich-stencil
+ bezier-list
+ (* size bezier-thick)
x-extent
y-extent)))
(,cheap-list? . "list")
(,fraction? . "fraction, as pair")
(,grob-list? . "list of grobs")
+ (,index? . "non-negative integer")
;; this is built on cheap-list
(,list-or-symbol? . "list or symbol")
(,markup? . "markup")
(,ly:translator? . "translator")
(,ly:translator-group? . "translator group")
(,ly:unpure-pure-container? . "unpure/pure container")
- (,ly:vsize? . "vsize")
))
'duration duration
'origin location))
-(define-ly-syntax (repetition-chord parser location previous-chord repetition-function duration articulations)
- (make-music 'RepeatedChord
- 'original-chord previous-chord
- 'element (repetition-function previous-chord location duration articulations)
+(define-ly-syntax (repetition-chord parser location duration articulations)
+ (make-music 'EventChord
+ 'duration duration
+ 'elements articulations
'origin location))
(define-ly-syntax-simple (context-specification type id ops create-new mus)
(define (first-note-duration music)
"Finds the duration of the first NoteEvent by searching depth-first
through MUSIC."
- (if (memq 'note-event (ly:music-property music 'types))
+ ;; NoteEvent or a non-expanded chord-repetition
+ ;; We just take anything that actually sports an announced duration.
+ (if (ly:duration? (ly:music-property music 'duration))
(ly:music-property music 'duration)
(let loop ((elts (if (ly:music? (ly:music-property music 'element))
(list (ly:music-property music 'element))
(set! (ly:music-property r 'repeat-count) (max times 1))
(set! (ly:music-property r 'elements) talts)
(if (and (equal? name "tremolo")
- (pair? (extract-named-music main 'NoteEvent)))
+ (pair? (extract-named-music main '(EventChord NoteEvent))))
;; This works for single-note and multi-note tremolos!
(let* ((children (if (music-is-of-type? main 'sequential-music)
;; \repeat tremolo n { ... }
beats to be distinguished."
(let* ((durs (map (lambda (elt)
(duration-of-note elt))
- (extract-named-music music '(EventChord NoteEvent))))
+ (extract-named-music music '(EventChord NoteEvent
+ RestEvent SkipEvent))))
(first-dur (car durs)))
(if (every (lambda (d) (equal? d first-dur)) durs)
(let ((ts (ly:music-property m 'types)))
(memq 'separator ts)))
+;;; expanding repeat chords
+(define-public (copy-repeat-chord original-chord repeat-chord duration
+ event-types)
+ "Copies all events in @var{event-types} (be sure to include
+@code{rhythmic-events}) from @var{original-chord} over to
+@var{repeat-chord} with their articulations filtered as well. Any
+duration is replaced with the specified @var{duration}."
+ ;; First remove everything from event-types that can already be
+ ;; found in the repeated chord. We don't need to look for
+ ;; articulations on individual events since they can't actually get
+ ;; into a repeat chord given its input syntax.
+ (for-each (lambda (e)
+ (for-each (lambda (x)
+ (set! event-types (delq x event-types)))
+ (ly:music-property e 'types)))
+ (ly:music-property repeat-chord 'elements))
+ ;; now treat the elements
+ (set! (ly:music-property repeat-chord 'elements)
+ (append!
+ (filter-map
+ (lambda (m)
+ (and (any (lambda (t) (music-is-of-type? m t)) event-types)
+ (begin
+ (set! m (ly:music-deep-copy m))
+ (if (pair? (ly:music-property m 'articulations))
+ (set! (ly:music-property m 'articulations)
+ (filter
+ (lambda (a)
+ (any (lambda (t) (music-is-of-type? a t))
+ event-types))
+ (ly:music-property m 'articulations))))
+ (if (ly:duration? (ly:music-property m 'duration))
+ (set! (ly:music-property m 'duration) duration))
+ m)))
+ (ly:music-property original-chord 'elements))
+ (ly:music-property repeat-chord 'elements))))
+
+(define-public (expand-repeat-chords! event-types music)
+ "Walks through @var{music} and fills repeated chords (notable by
+having a duration in @code{duration}) with the notes from their
+respective predecessor chord."
+ (let loop ((music music) (last-chord #f))
+ (if (music-is-of-type? music 'event-chord)
+ (let ((chord-repeat (ly:music-property music 'duration)))
+ (cond
+ ((not (ly:duration? chord-repeat))
+ music)
+ (last-chord
+ (set! (ly:music-property music 'duration) '())
+ (copy-repeat-chord last-chord music chord-repeat event-types)
+ music)
+ (else
+ (ly:music-warning music (_ "Bad chord repetition"))
+ #f)))
+ (let ((elt (ly:music-property music 'element)))
+ (fold loop (if (ly:music? elt) (loop elt last-chord) last-chord)
+ (ly:music-property music 'elements)))))
+ music)
+
;;; splitting chords into voices.
(define (voicify-list lst number)
"Make a list of Musics.
(define-public toplevel-music-functions
(list
+ (lambda (music parser) (expand-repeat-chords!
+ (cons 'rhythmic-event
+ (ly:parser-lookup parser '$chord-repeat-events))
+ music))
(lambda (music parser) (voicify-music music))
(lambda (x parser) (music-map music-check-error x))
(lambda (x parser) (music-map precompute-music-length x))
`(Staff ,(make-accidental-rule 'same-octave 0))
'()
context))
- ;; accidentals from one voice do NOT get cancelled in other voices
+ ;; accidentals from one voice do NOT get canceled in other voices
((equal? style 'voice)
(set-accidentals-properties #t
`(Voice ,(make-accidental-rule 'same-octave 0))
'()
context))
;; accidentals as suggested by Kurt Stone, Music Notation in the 20th century.
- ;; This includes all the default accidentals, but accidentals also needs cancelling
+ ;; This includes all the default accidentals, but accidentals also needs canceling
;; in other octaves and in the next measure.
((equal? style 'modern)
(set-accidentals-properties #f
context))
;; Multivoice accidentals to be read both by musicians playing one voice
;; and musicians playing all voices.
- ;; Accidentals are typeset for each voice, but they ARE cancelled across voices.
+ ;; Accidentals are typeset for each voice, but they ARE canceled across voices.
((equal? style 'modern-voice)
(set-accidentals-properties #f
`(Voice ,(make-accidental-rule 'same-octave 0)
,(make-accidental-rule 'same-octave 1))
context))
;; stone's suggestions for accidentals on grand staff.
- ;; Accidentals are cancelled across the staves in the same grand staff as well
+ ;; Accidentals are canceled across the staves in the same grand staff as well
((equal? style 'piano)
(set-accidentals-properties #f
`(Staff ,(make-accidental-rule 'same-octave 0)
(ly:music-property (car evs) 'pitch))))
(define-public (duration-of-note event-chord)
- (let ((evs (filter (lambda (x)
- (music-has-type x 'rhythmic-event))
- (cons event-chord
- (ly:music-property event-chord 'elements)))))
-
- (and (pair? evs)
- (ly:music-property (car evs) 'duration))))
+ (cond
+ ((pair? event-chord)
+ (or (duration-of-note (car event-chord))
+ (duration-of-note (cdr event-chord))))
+ ((ly:music? event-chord)
+ (let ((dur (ly:music-property event-chord 'duration)))
+ (if (ly:duration? dur)
+ dur
+ (duration-of-note (ly:music-property event-chord 'elements)))))
+ (else #f)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Lily output interface, PostScript implementation --- cleanup and docme
;;;
-;; two beziers
-(define (bezier-sandwich lst thick)
- (ly:format "~l ~4f draw_bezier_sandwich"
- (map number-pair->string4 lst)
- thick))
-
(define (char font i)
(ly:format "~a (\\~a) show"
(ps-font-command font)
off
phase))
-;; what the heck is this interface ?
-(define (dashed-slur thick on off l)
- (ly:format "~l ~4f [ ~4f ~4f ] 0 draw_dashed_slur"
- (let ((control-points (append (cddr l) (list (car l) (cadr l)))))
- (map number-pair->string4 control-points))
- thick
- on
- off))
-
-(define (dot x y radius)
- (ly:format " ~4l draw_dot" (list radius x y)))
-
(define (draw-line thick x1 y1 x2 y2)
(ly:format "~4f ~4f ~4f ~4f ~4f draw_line"
(- x2 x1) (- y2 y1)
(define (no-origin)
"")
-(define (oval x-radius y-radius thick fill)
- (ly:format
- "~a ~4f ~4f ~4f draw_oval"
- (if fill
- "true"
- "false")
- x-radius y-radius thick))
-
(define (placebox x y s)
(if (not (string-null? s))
(ly:format "~4f ~4f moveto ~a\n" x y s)
(- (/ (length points) 2) 1)
blot-diameter))
-(define (repeat-slash width slope beam-thickness)
- (define (euclidean-length x y)
- (sqrt (+ (* x x) (* y y))))
-
- (let ((x-width (euclidean-length beam-thickness (/ beam-thickness slope)))
- (height (* width slope)))
- (ly:format "~4l draw_repeat_slash"
- (list x-width width height))))
-
-
(define (round-filled-box left right bottom top blotdiam)
(let* ((halfblot (/ blotdiam 2))
(x (- halfblot left))
;;; stencil commands
;;;
-(define (bezier-sandwich lst thick)
- (format #f "bezier_sandwich ~a [~a]"
- thick
- (string-append
- (string-join (map
- (lambda (x)
- (format #f "(~a,~a)" (car x) (cdr x)))
- lst)
- ","))))
-
(define (draw-line thick x1 y1 x2 y2)
(format #f "drawline ~a ~a ~a ~a ~a"
thick x1 y2 x2 y2))
;;; stencil outputters
;;;
-(define (bezier-sandwich lst thick)
- (let* ((first (list-tail lst 4))
- (second (list-head lst 4)))
- (entity 'path ""
- '(stroke-linejoin . "round")
- '(stroke-linecap . "round")
- '(stroke . "currentColor")
- '(fill . "currentColor")
- `(stroke-width . ,thick)
- `(d . ,(string-append (svg-bezier first #f)
- (svg-bezier second #t))))))
-
(define (char font i)
(dispatch
`(fontify ,font ,(entity 'tspan (char->entity (integer->char i))))))
(define (no-origin)
"")
-(define (oval x-radius y-radius thick is-filled)
- (let ((x-max x-radius)
- (x-min (- x-radius))
- (y-max y-radius)
- (y-min (- y-radius)))
- (entity
- 'path ""
- '(stroke-linejoin . "round")
- '(stroke-linecap . "round")
- `(fill . ,(if is-filled "currentColor" "none"))
- `(stroke . "currentColor")
- `(stroke-width . ,thick)
- `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz"
- x-max 0
- x-max y-max
- x-min y-max
- x-min 0
- x-max y-min
- x-max 0)))))
-
(define* (path thick commands #:optional (cap 'round) (join 'round) (fill? #f))
(define (convert-path-exps exps)
(if (pair? exps)
`(points . ,(string-join
(map offset->point (ly:list->offsets '() coords))))))
-(define (repeat-slash width slope thickness)
- (define (euclidean-length x y)
- (sqrt (+ (* x x) (* y y))))
- (let* ((x-width (euclidean-length thickness (/ thickness slope)))
- (height (* width slope)))
- (entity
- 'path ""
- '(fill . "currentColor")
- `(d . ,(ly:format "M0 0l~4f 0 ~4f ~4f ~4f 0z"
- x-width width (- height) (- x-width))))))
-
(define (resetcolor)
"</g>\n")
ly:unit
ly:usage
ly:version
- ly:vsize?
ly:warning
;; FIXME: cannot change staff size in --safe-mode
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+(define (make-bezier-sandwich-stencil coords thick xext yext)
+ (let* ((command-list `(moveto
+ ,(car (list-ref coords 3))
+ ,(cdr (list-ref coords 3))
+ curveto
+ ,(car (list-ref coords 0))
+ ,(cdr (list-ref coords 0))
+ ,(car (list-ref coords 1))
+ ,(cdr (list-ref coords 1))
+ ,(car (list-ref coords 2))
+ ,(cdr (list-ref coords 2))
+ curveto
+ ,(car (list-ref coords 4))
+ ,(cdr (list-ref coords 4))
+ ,(car (list-ref coords 5))
+ ,(cdr (list-ref coords 5))
+ ,(car (list-ref coords 6))
+ ,(cdr (list-ref coords 6))
+ closepath)))
+ (ly:make-stencil
+ `(path ,thick `(,@' ,command-list) 'round 'round #t)
+ xext
+ yext)))
+
(define-public (stack-stencils axis dir padding stils)
"Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
@var{padding}."
(lower-inner-control-point
(cons inner-control-x lower-control-y)))
- (ly:make-stencil
- (list 'bezier-sandwich
- `(quote ,(list
- ;; Step 4: curve through inner control points
- ;; to lower end point.
- upper-inner-control-point
- lower-inner-control-point
- lower-end-point
- ;; Step 3: move to upper end point.
- upper-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 1: move to lower end point.
- lower-end-point))
- line-width)
- (interval-widen x-extent (/ line-width 2))
- (interval-widen y-extent (/ line-width 2)))))
+ (make-bezier-sandwich-stencil
+ (list
+ ;; Step 4: curve through inner control points
+ ;; to lower end point.
+ upper-inner-control-point
+ lower-inner-control-point
+ lower-end-point
+ ;; Step 3: move to upper end point.
+ upper-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 1: move to lower end point.
+ lower-end-point)
+ line-width
+ (interval-widen x-extent (/ line-width 2))
+ (interval-widen y-extent (/ line-width 2)))))
(define-public (parenthesize-stencil
stencil half-thickness width angularity padding)
defined by @code{fill}."
(let*
((x-out-radius (+ x-radius (/ thickness 2.0)))
- (y-out-radius (+ y-radius (/ thickness 2.0))) )
-
+ (y-out-radius (+ y-radius (/ thickness 2.0)))
+ (x-max x-radius)
+ (x-min (- x-radius))
+ (y-max y-radius)
+ (y-min (- y-radius))
+ (commands `(,(list 'moveto x-max 0)
+ ,(list 'curveto x-max y-max x-min y-max x-min 0)
+ ,(list 'curveto x-min y-min x-max y-min x-max 0)
+ ,(list 'closepath)))
+ (command-list (fold-right append '() commands)))
(ly:make-stencil
- (list 'oval x-radius y-radius thickness fill)
- (cons (- x-out-radius) x-out-radius)
- (cons (- y-out-radius) y-out-radius))))
+ `(path ,thickness `(,@',command-list) 'round 'round ,fill)
+ (cons (- x-out-radius) x-out-radius)
+ (cons (- y-out-radius) y-out-radius))))
(define-public
(make-partial-ellipse-stencil
(append prepend-origin (list 'closepath))
prepend-origin))
(command-list (fold-right append '() final-path)))
-
(ly:make-stencil
`(path ,thickness
`(,@',command-list)