From: Francisco Vila Date: Wed, 8 Feb 2012 11:58:13 +0000 (+0100) Subject: Merge branch 'lilypond/translation' into staging X-Git-Tag: release/2.15.29-1~2 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=cf039a0cae992c1437514440478e136c5051e653;hp=04e5933b140b475d2177f68383c0cbe4a52d22a7;p=lilypond.git Merge branch 'lilypond/translation' into staging --- diff --git a/Documentation/changes.tely b/Documentation/changes.tely index 8281811608..c07c270ba1 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -104,7 +104,7 @@ more closely are numerous: music functions previously worked differently 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 @@ -113,10 +113,19 @@ would have been unthinkable previously. You can use @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{}#@}}) @@ -184,7 +193,7 @@ For defining commands executed only for their side-effects, @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?) diff --git a/Documentation/contributor/administration.itexi b/Documentation/contributor/administration.itexi index 515763c352..36886d19cb 100644 --- a/Documentation/contributor/administration.itexi +++ b/Documentation/contributor/administration.itexi @@ -8,6 +8,7 @@ don't fit anywhere else. @menu * Meta-policy for this document:: * Meisters:: +* Patchy:: * Administrative mailing list:: * Grand Organization Project (GOP):: * Grand LilyPond Input Syntax Standardization (GLISS):: @@ -122,6 +123,121 @@ Currently: Carl @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 diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi index 86976fd324..2316f95855 100644 --- a/Documentation/contributor/issues.itexi +++ b/Documentation/contributor/issues.itexi @@ -672,7 +672,7 @@ Performance: performance issue. 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. diff --git a/Documentation/contributor/source-code.itexi b/Documentation/contributor/source-code.itexi index 75363f4d40..ee20d3e76e 100644 --- a/Documentation/contributor/source-code.itexi +++ b/Documentation/contributor/source-code.itexi @@ -112,6 +112,7 @@ multiple projects concurrently. @menu * Setting up:: * Git for the impatient:: +* Other repositories:: * Downloading remote branches:: @end menu @@ -522,9 +523,35 @@ your branch (safe)}, but replace the @code{-d} on the final line with 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:: @@ -589,6 +616,8 @@ only be used as a last resort. @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 @@ -1846,7 +1875,7 @@ If @command{git@tie{}pull@tie{}--verbose} succeeds, the output 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 diff --git a/Documentation/contributor/website-work.itexi b/Documentation/contributor/website-work.itexi index aaced80cff..33b13464b6 100644 --- a/Documentation/contributor/website-work.itexi +++ b/Documentation/contributor/website-work.itexi @@ -58,206 +58,137 @@ existing website texinfo files. @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 @@ -267,19 +198,84 @@ mkdir -p $BUILD 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 diff --git a/Documentation/hu/learning/fundamental.itely b/Documentation/hu/learning/fundamental.itely index 3004a17d0c..2dc6fd71a9 100644 --- a/Documentation/hu/learning/fundamental.itely +++ b/Documentation/hu/learning/fundamental.itely @@ -1864,7 +1864,7 @@ is specified, no error message is produced, but the expected 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] diff --git a/Documentation/learning/fundamental.itely b/Documentation/learning/fundamental.itely index 33ce20619c..423f6ee41f 100644 --- a/Documentation/learning/fundamental.itely +++ b/Documentation/learning/fundamental.itely @@ -920,6 +920,9 @@ to see how to correct this, so we shall leave this problem until a 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}. @@ -1711,7 +1714,7 @@ is specified, no error message is produced, but the expected 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] diff --git a/Documentation/music-glossary.tely b/Documentation/music-glossary.tely index b2df038dc7..ce41f4ec7d 100644 --- a/Documentation/music-glossary.tely +++ b/Documentation/music-glossary.tely @@ -5882,7 +5882,7 @@ or bracket) to indicate that the music is to be played in a different octave: 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: diff --git a/Documentation/nl/learning/fundamental.itely b/Documentation/nl/learning/fundamental.itely index 9f33f9a1da..7c4e50896e 100644 --- a/Documentation/nl/learning/fundamental.itely +++ b/Documentation/nl/learning/fundamental.itely @@ -1736,7 +1736,7 @@ is specified, no error message is produced, but the expected 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] diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely index 98163ce3e8..1db53e061f 100644 --- a/Documentation/notation/changing-defaults.itely +++ b/Documentation/notation/changing-defaults.itely @@ -2309,7 +2309,7 @@ TrillPitchAccidental - not tried 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) @@ -3177,6 +3177,7 @@ appearance of the printed score. * Vertical grouping of grobs:: * Modifying stencils:: * Modifying shapes:: +* Unpure-pure containers:: @end menu @@ -3691,6 +3692,108 @@ required. 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 diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely index c4bf631efe..f01e968b13 100644 --- a/Documentation/notation/fretted-strings.itely +++ b/Documentation/notation/fretted-strings.itely @@ -253,31 +253,34 @@ minimumFret is 0. >> @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 ~ q4 q8~ q q4 + r8 ~ q4 q8~ q q4 } \new StaffGroup << \new Staff { \clef "treble_8" - \override Voice.StringNumber #'transparent = ##t \guitar } \new TabStaff { - \guitar + \tabChordRepeats \guitar } >> @end lilypond @@ -374,9 +377,9 @@ pitches: @lilypond[verbatim,quote] firstHarmonic = { - 4 - 4 - 2 + d'4\4\harmonic + g'4\3\harmonic + b'2\2\harmonic } \score { << @@ -386,8 +389,9 @@ firstHarmonic = { } @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. diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index c22f55fb52..a3707bf42a 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -1331,54 +1331,57 @@ Internals Reference: @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: @@ -1394,11 +1397,17 @@ Internal Reference: @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 @@ -1899,10 +1908,9 @@ c16 c8 @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}. @@ -1951,6 +1959,13 @@ Internals Reference: @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 diff --git a/Documentation/notation/simultaneous.itely b/Documentation/notation/simultaneous.itely index e73eab867f..00740cdfce 100644 --- a/Documentation/notation/simultaneous.itely +++ b/Documentation/notation/simultaneous.itely @@ -156,16 +156,60 @@ a chord so it is possible to repeat the most recent chord even if other non-chorded notes or rests have been added since. @lilypond[verbatim,quote,relative=2] -1 c4 q2 r8 q8 +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] -1\sfz c4 q2 r8 q8 +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) + { 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'' + { 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}, @@ -465,6 +509,9 @@ upstems, and the even-numbered voices are given downstems: >> @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 @@ -491,6 +538,8 @@ music do not have the same rhythm. @code{\oneVoice}. @endpredefined +Snippets: +@rlsr{Simultaneous notes}. @seealso Learning Manual: @@ -502,9 +551,6 @@ Notation Reference: @ref{Invisible rests}, @ref{Stems}. -Snippets: -@rlsr{Simultaneous notes}. - @node Voice styles @unnumberedsubsubsec Voice styles diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely index 1724a63439..c1603fb22b 100644 --- a/Documentation/notation/spacing.itely +++ b/Documentation/notation/spacing.itely @@ -370,6 +370,9 @@ The titles (from the @code{\header} block) are treated as a 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 @@ -672,6 +675,11 @@ Notation Reference: 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 diff --git a/Documentation/snippets/accordion-discant-symbols.ly b/Documentation/snippets/accordion-discant-symbols.ly index 08d32260f6..eb06bb7fc5 100644 --- a/Documentation/snippets/accordion-discant-symbols.ly +++ b/Documentation/snippets/accordion-discant-symbols.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/adding-ambitus-per-voice.ly b/Documentation/snippets/adding-ambitus-per-voice.ly index aed57c72f4..0578e2d158 100644 --- a/Documentation/snippets/adding-ambitus-per-voice.ly +++ b/Documentation/snippets/adding-ambitus-per-voice.ly @@ -7,18 +7,8 @@ \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 = " @@ -27,6 +17,14 @@ debe desplazar manualmente para evitar colisiones. " +%% 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 diff --git a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly index 6329f4ec82..dbfd4278cf 100644 --- a/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly +++ b/Documentation/snippets/adding-bar-lines-to-chordnames-context.ly @@ -4,24 +4,11 @@ %% 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 @@ -40,6 +27,14 @@ Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der " 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}. diff --git a/Documentation/snippets/adding-drum-parts.ly b/Documentation/snippets/adding-drum-parts.ly index f0fa3b4c5d..81cb63c310 100644 --- a/Documentation/snippets/adding-drum-parts.ly +++ b/Documentation/snippets/adding-drum-parts.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly index 7ade8fc15f..4bf11a8362 100644 --- a/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly +++ b/Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/ambitus-with-multiple-voices.ly b/Documentation/snippets/ambitus-with-multiple-voices.ly index 31b018693c..3e35634b2c 100644 --- a/Documentation/snippets/ambitus-with-multiple-voices.ly +++ b/Documentation/snippets/ambitus-with-multiple-voices.ly @@ -7,19 +7,8 @@ \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 = " @@ -30,6 +19,15 @@ pentagramas con varias voces. " +%% 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 diff --git a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly index 6171bd2b0a..c24b94053e 100644 --- a/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly +++ b/Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly @@ -7,32 +7,8 @@ \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 = " @@ -58,6 +34,28 @@ nota. " +%% 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 = " diff --git a/Documentation/snippets/arabic-improvisation.ly b/Documentation/snippets/arabic-improvisation.ly index 8c636987e3..cfdc21c145 100644 --- a/Documentation/snippets/arabic-improvisation.ly +++ b/Documentation/snippets/arabic-improvisation.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/center-text-below-hairpin-dynamics.ly b/Documentation/snippets/center-text-below-hairpin-dynamics.ly index c0aac5df57..7436726a2f 100644 --- a/Documentation/snippets/center-text-below-hairpin-dynamics.ly +++ b/Documentation/snippets/center-text-below-hairpin-dynamics.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/changing-chord-separator.ly b/Documentation/snippets/changing-chord-separator.ly index fa1ed534b3..167b892a78 100644 --- a/Documentation/snippets/changing-chord-separator.ly +++ b/Documentation/snippets/changing-chord-separator.ly @@ -7,21 +7,8 @@ \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 @@ -39,6 +26,14 @@ beliebiger Text sein. " 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. diff --git a/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly index ca1c11758d..aa1ec6b034 100644 --- a/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly +++ b/Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly @@ -7,23 +7,8 @@ \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 @@ -44,6 +29,16 @@ je nach den Einstellungen der @code{figuredBassAlterationDirection} und " 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 diff --git a/Documentation/snippets/chord-name-exceptions.ly b/Documentation/snippets/chord-name-exceptions.ly index 4e66679db6..058b46d8fa 100644 --- a/Documentation/snippets/chord-name-exceptions.ly +++ b/Documentation/snippets/chord-name-exceptions.ly @@ -7,21 +7,8 @@ \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 @@ -40,6 +27,14 @@ Liste an besonderen Notationen für bestimmte Akkorde zu speichern. " 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. diff --git a/Documentation/snippets/chord-name-major7.ly b/Documentation/snippets/chord-name-major7.ly index 5d23843369..0e2416d638 100644 --- a/Documentation/snippets/chord-name-major7.ly +++ b/Documentation/snippets/chord-name-major7.ly @@ -7,21 +7,8 @@ \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 @@ -41,6 +28,14 @@ Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert +%% 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}. diff --git a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly index 4d43b8c7ad..b208a61ca7 100644 --- a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/demo-midiinstruments.ly b/Documentation/snippets/demo-midiinstruments.ly index fb209c6a40..63ae65d2be 100644 --- a/Documentation/snippets/demo-midiinstruments.ly +++ b/Documentation/snippets/demo-midiinstruments.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/drawing-boxes-around-grobs.ly b/Documentation/snippets/drawing-boxes-around-grobs.ly index 1e3ce84446..539c16f2d1 100644 --- a/Documentation/snippets/drawing-boxes-around-grobs.ly +++ b/Documentation/snippets/drawing-boxes-around-grobs.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/formatting-lyrics-syllables.ly b/Documentation/snippets/formatting-lyrics-syllables.ly index f64e9f012a..fa99151b8e 100644 --- a/Documentation/snippets/formatting-lyrics-syllables.ly +++ b/Documentation/snippets/formatting-lyrics-syllables.ly @@ -16,6 +16,7 @@ zu formatieren. " doctitlede = "Silben im Gesangstext formatieren" + %% Translation of GIT committish: d9d1da30361a0bcaea1ae058eb1bc8dd3a5b2e4c texidocfr = " Le mode markup permet d'individualiser la mise en forme de certaines syllabes. diff --git a/Documentation/snippets/generating-random-notes.ly b/Documentation/snippets/generating-random-notes.ly index 606d44f375..a21dce7612 100644 --- a/Documentation/snippets/generating-random-notes.ly +++ b/Documentation/snippets/generating-random-notes.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly index c13c8c7161..d1af5200e9 100644 --- a/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly +++ b/Documentation/snippets/heavily-customized-polymetric-time-signatures.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly index be90bfe4c4..a65526aa8f 100644 --- a/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly +++ b/Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/hymn-template.ly b/Documentation/snippets/hymn-template.ly index b8af195da3..d2d680e43d 100644 --- a/Documentation/snippets/hymn-template.ly +++ b/Documentation/snippets/hymn-template.ly @@ -27,6 +27,7 @@ strofe come testo separato sotto la musica. " doctitleit = "Modello per inno" + %% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 texidocde = " diff --git a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly index 08c57c7e62..de954566dc 100644 --- a/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly +++ b/Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/markup-lines.ly b/Documentation/snippets/markup-lines.ly index 8bc11221b0..67ea23606c 100644 --- a/Documentation/snippets/markup-lines.ly +++ b/Documentation/snippets/markup-lines.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly index 940536ae18..973d1e5b7e 100644 --- a/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly +++ b/Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly @@ -36,7 +36,7 @@ Systemen werden mit der @code{transparent}-Eigenschaft ausgelöscht. 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. " diff --git a/Documentation/snippets/ottava-text.ly b/Documentation/snippets/ottava-text.ly index f7fa00549f..0e79ec24c1 100644 --- a/Documentation/snippets/ottava-text.ly +++ b/Documentation/snippets/ottava-text.ly @@ -7,20 +7,8 @@ \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 = " @@ -35,6 +23,16 @@ ajuste @code{ottavation} después de invocar la instrucción 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 diff --git a/Documentation/snippets/partcombine-and-autobeamoff.ly b/Documentation/snippets/partcombine-and-autobeamoff.ly index fb3f88f340..bf5fb3e519 100644 --- a/Documentation/snippets/partcombine-and-autobeamoff.ly +++ b/Documentation/snippets/partcombine-and-autobeamoff.ly @@ -47,6 +47,7 @@ necesario hacer tres llamadas a @code{\\autoBeamOff}. " doctitlees = "Partcombine y autoBeamOff" + %% Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 texidocde = " @@ -78,6 +79,7 @@ wenn man es mit @code{\\partcombine} verwendet, muss @code{\\autoBeamOff} " doctitlede = "Partcombine und autoBeamOff" + %% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4 texidocfr = " La fonction @code{\\autoBeamOff} dans le cadre d'un diff --git a/Documentation/snippets/piano-template-with-melody-and-lyrics.ly b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly index 528ceb3d62..b6c568fb35 100644 --- a/Documentation/snippets/piano-template-with-melody-and-lyrics.ly +++ b/Documentation/snippets/piano-template-with-melody-and-lyrics.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly index 8f02daeb83..093f11852b 100644 --- a/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly +++ b/Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly @@ -7,21 +7,8 @@ \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" @@ -36,6 +23,17 @@ dentro del contexto de @code{Staff}. " +%% 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" diff --git a/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly index fd9bc982e5..abcb3174e9 100644 --- a/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly +++ b/Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly @@ -7,20 +7,8 @@ \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" @@ -34,6 +22,16 @@ propiedad @code{printKeyCancellation} del contexto @code{Staff}. " +%% 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" diff --git a/Documentation/snippets/recorder-fingering-chart.ly b/Documentation/snippets/recorder-fingering-chart.ly index 1c6bdb7f8d..60bb305945 100644 --- a/Documentation/snippets/recorder-fingering-chart.ly +++ b/Documentation/snippets/recorder-fingering-chart.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/removing-the-first-empty-line.ly b/Documentation/snippets/removing-the-first-empty-line.ly index 754518f074..d95cf59d3d 100644 --- a/Documentation/snippets/removing-the-first-empty-line.ly +++ b/Documentation/snippets/removing-the-first-empty-line.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/rhythms.snippet-list b/Documentation/snippets/rhythms.snippet-list index ac62483cda..c4ed36b3ba 100644 --- a/Documentation/snippets/rhythms.snippet-list +++ b/Documentation/snippets/rhythms.snippet-list @@ -58,6 +58,7 @@ rhythmic-slashes.ly 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 diff --git a/Documentation/snippets/showing-chords-at-changes.ly b/Documentation/snippets/showing-chords-at-changes.ly index 461241720d..ceee85907f 100644 --- a/Documentation/snippets/showing-chords-at-changes.ly +++ b/Documentation/snippets/showing-chords-at-changes.ly @@ -7,21 +7,8 @@ \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 @@ -39,6 +26,14 @@ und bei Akkordwechseln angezeigt werden. " 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. diff --git a/Documentation/snippets/table-of-contents.ly b/Documentation/snippets/table-of-contents.ly index bea4576ff1..1aef0291f1 100644 --- a/Documentation/snippets/table-of-contents.ly +++ b/Documentation/snippets/table-of-contents.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly index 77573440b8..9735ef2f1e 100644 --- a/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly +++ b/Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly @@ -7,36 +7,8 @@ \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 = " @@ -69,6 +41,32 @@ naturales. " +%% 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 diff --git a/Documentation/snippets/tweaking-clef-properties.ly b/Documentation/snippets/tweaking-clef-properties.ly index 953f1df35e..09e4292523 100644 --- a/Documentation/snippets/tweaking-clef-properties.ly +++ b/Documentation/snippets/tweaking-clef-properties.ly @@ -7,46 +7,8 @@ \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 = " @@ -83,6 +45,42 @@ las claves y las notas, pero no lo hacen en la segunda línea. " +%% 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 = " diff --git a/Documentation/snippets/tweaking-grace-layout-within-music.ly b/Documentation/snippets/tweaking-grace-layout-within-music.ly index 08c8ca17a9..b16d338a41 100644 --- a/Documentation/snippets/tweaking-grace-layout-within-music.ly +++ b/Documentation/snippets/tweaking-grace-layout-within-music.ly @@ -4,7 +4,7 @@ %% 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" diff --git a/Documentation/snippets/volta-below-chords.ly b/Documentation/snippets/volta-below-chords.ly index 48c3efed48..68c703e726 100644 --- a/Documentation/snippets/volta-below-chords.ly +++ b/Documentation/snippets/volta-below-chords.ly @@ -7,21 +7,8 @@ \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 @@ -42,6 +29,14 @@ werden. " 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. diff --git a/Documentation/web/community.itexi b/Documentation/web/community.itexi index 62ba8c47a3..b48776f19a 100644 --- a/Documentation/web/community.itexi +++ b/Documentation/web/community.itexi @@ -474,7 +474,7 @@ report. @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. diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 27118448cc..77141c73b0 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -9,6 +9,20 @@ @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} diff --git a/VERSION b/VERSION index 11c4cdefde..4d34a38b40 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ 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 diff --git a/input/regression/ambitus-cue.ly b/input/regression/ambitus-cue.ly new file mode 100644 index 0000000000..6bb87b9ba3 --- /dev/null +++ b/input/regression/ambitus-cue.ly @@ -0,0 +1,27 @@ +\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" + } +} diff --git a/input/regression/chord-repetition-times.ly b/input/regression/chord-repetition-times.ly new file mode 100644 index 0000000000..339d7cfc70 --- /dev/null +++ b/input/regression/chord-repetition-times.ly @@ -0,0 +1,15 @@ +\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' { + 4 r 2 ~ | + \times 2/3 { 4 q q } \times 2/3 { q q q } | +} diff --git a/input/regression/cue-clef.ly b/input/regression/cue-clef.ly index 1b5ee627d4..936009b3fc 100644 --- a/input/regression/cue-clef.ly +++ b/input/regression/cue-clef.ly @@ -2,7 +2,7 @@ \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 } diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index 76bfc420c6..22eaf893d3 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -70,7 +70,7 @@ stderr of this run." \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 } } #] diff --git a/input/regression/identifier-following-chordmode.ly b/input/regression/identifier-following-chordmode.ly index bec19ea680..9735f43106 100644 --- a/input/regression/identifier-following-chordmode.ly +++ b/input/regression/identifier-following-chordmode.ly @@ -12,7 +12,7 @@ modifier." 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 } diff --git a/input/regression/loglevels.ly b/input/regression/loglevels.ly index 705ed3299d..93abbf00b2 100644 --- a/input/regression/loglevels.ly +++ b/input/regression/loglevels.ly @@ -13,31 +13,31 @@ are commented out. Comment them in to check the output manually. } %%%% 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)) diff --git a/input/regression/option-help.ly b/input/regression/option-help.ly index a377279c3e..704351941f 100644 --- a/input/regression/option-help.ly +++ b/input/regression/option-help.ly @@ -5,5 +5,5 @@ previous releases." } -#(ly:option-usage) +#(ly:option-usage (current-error-port)) diff --git a/input/regression/page-spacing-nonstaff-lines-between-systems.ly b/input/regression/page-spacing-nonstaff-lines-between-systems.ly index b1d161bb8d..fd9009bfc9 100644 --- a/input/regression/page-spacing-nonstaff-lines-between-systems.ly +++ b/input/regression/page-spacing-nonstaff-lines-between-systems.ly @@ -3,11 +3,11 @@ \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 } diff --git a/input/regression/scheme-engraver.ly b/input/regression/scheme-engraver.ly index d5fefc6507..115429f90c 100644 --- a/input/regression/scheme-engraver.ly +++ b/input/regression/scheme-engraver.ly @@ -16,18 +16,18 @@ (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")) )) )) @@ -35,36 +35,36 @@ (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)))) ) }} diff --git a/input/regression/tablature-chord-repetition-finger.ly b/input/regression/tablature-chord-repetition-finger.ly new file mode 100644 index 0000000000..035128facf --- /dev/null +++ b/input/regression/tablature-chord-repetition-finger.ly @@ -0,0 +1,28 @@ +\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 + } + } + >> +} diff --git a/input/regression/tablature-chord-repetition.ly b/input/regression/tablature-chord-repetition.ly index e89b1c52f1..5b10f19a94 100644 --- a/input/regression/tablature-chord-repetition.ly +++ b/input/regression/tablature-chord-repetition.ly @@ -2,8 +2,10 @@ \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 diff --git a/lily/ambitus-engraver.cc b/lily/ambitus-engraver.cc index dfd23f1724..8690b01f80 100644 --- a/lily/ambitus-engraver.cc +++ b/lily/ambitus-engraver.cc @@ -120,8 +120,14 @@ Ambitus_engraver::stop_translation_timestep () * 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; @@ -231,7 +237,8 @@ ADD_TRANSLATOR (Ambitus_engraver, /* read */ "keySignature " - "middleCPosition ", + "middleCClefPosition " + "middleCOffset ", /* write */ "" diff --git a/lily/concurrent-hairpin-engraver.cc b/lily/concurrent-hairpin-engraver.cc index 873e8b5994..5d04d258fe 100644 --- a/lily/concurrent-hairpin-engraver.cc +++ b/lily/concurrent-hairpin-engraver.cc @@ -75,8 +75,8 @@ Concurrent_hairpin_engraver::stop_translation_timestep () 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]); diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 0dec856cb0..a3cb779521 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -121,7 +121,7 @@ Dynamic_engraver::listen_span_dynamic (Stream_event *ev) /* 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); } diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index a930d1b527..b950776689 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -114,18 +114,6 @@ LY_DEFINE (ly_dir_p, "ly:dir?", 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), diff --git a/lily/hairpin.cc b/lily/hairpin.cc index 4ccce328b8..bf590a564b 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -176,7 +176,8 @@ Hairpin::print (SCM smob) 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++) { diff --git a/lily/include/lily-lexer.hh b/lily/include/lily-lexer.hh index 3fe836277f..a10d89cee3 100644 --- a/lily/include/lily-lexer.hh +++ b/lily/include/lily-lexer.hh @@ -31,20 +31,6 @@ bool busy_parsing (); 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); @@ -77,8 +63,6 @@ public: SCM chordmodifier_tab_; SCM pitchname_tab_stack_; - Chord_repetition chord_repetition_; - int error_level_; Input last_input_; diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 0d13b037a3..f95a7e2a40 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -26,8 +26,8 @@ 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 const &points, Real blotdiameter); static Stencil frame (Box b, Real thick, Real blot); diff --git a/lily/include/music-sequence.hh b/lily/include/music-sequence.hh index 0f82ba0f76..590b48b22d 100644 --- a/lily/include/music-sequence.hh +++ b/lily/include/music-sequence.hh @@ -29,11 +29,11 @@ struct Music_sequence 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); diff --git a/lily/include/page-layout-problem.hh b/lily/include/page-layout-problem.hh index fc7e105510..12455c6fe7 100644 --- a/lily/include/page-layout-problem.hh +++ b/lily/include/page-layout-problem.hh @@ -95,6 +95,7 @@ protected: vector solution_; Real force_; Skyline bottom_skyline_; + Real bottom_loose_baseline_; Real page_height_; Real header_height_; Real footer_height_; diff --git a/lily/lexer.ll b/lily/lexer.ll index 3b88982e88..8c016f6405 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -399,6 +399,10 @@ BOM_UTF8 \357\273\277 yylval.scm = scm_from_locale_string (s); return RESTNAME; } +q { + return CHORD_REPETITION; +} + R { return MULTI_MEASURE_REST; } @@ -948,11 +952,7 @@ Lily_lexer::scan_bare_word (string str) 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; } diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 19ed8e41af..7f017a437b 100644 --- a/lily/lily-lexer.cc +++ b/lily/lily-lexer.cc @@ -97,7 +97,6 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) error_level_ = 0; is_main_input_ = false; start_module_ = SCM_EOL; - chord_repetition_ = Chord_repetition (); extra_tokens_ = SCM_EOL; smobify_self (); @@ -115,7 +114,6 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) 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_; diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index d8b9265e4d..5281f7e2a7 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -278,32 +278,6 @@ LY_DEFINE (ly_parser_set_note_names, "ly:parser-set-note-names", 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.") diff --git a/lily/lookup.cc b/lily/lookup.cc index f19e4d2703..f55e2f2a1e 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -33,20 +33,6 @@ using namespace std; #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) { @@ -137,6 +123,16 @@ Lookup::blank (Box b) 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) { @@ -254,7 +250,11 @@ Lookup::round_filled_polygon (vector const &points, 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]); @@ -449,22 +449,32 @@ Lookup::slur (Bezier curve, Real curvethick, Real linethick, 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); @@ -480,21 +490,32 @@ Lookup::bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real thickness) Stencil Lookup::repeat_slash (Real w, Real s, Real t) { -#if 0 /* TODO */ - vector 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)); diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc index db5bdb95f6..dde9b653c9 100644 --- a/lily/music-sequence.cc +++ b/lily/music-sequence.cc @@ -21,6 +21,8 @@ #include "warn.hh" #include "program-option.hh" +#include "duration.hh" +#include "moment.hh" #include "music.hh" #include "input.hh" @@ -79,6 +81,20 @@ Music_sequence::maximum_length_callback (SCM m) 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) @@ -190,59 +206,3 @@ Music_sequence::event_chord_relative_callback (SCM music, SCM pitch) 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; -} diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index 39260b4173..6320827c76 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -380,6 +380,7 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst : bottom_skyline_ (DOWN) { Prob *page = unsmob_prob (page_scm); + bottom_loose_baseline_ = 0; header_height_ = 0; footer_height_ = 0; header_padding_ = 0; @@ -596,12 +597,17 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde { 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; } @@ -629,6 +635,11 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde } } + 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. diff --git a/lily/parser.yy b/lily/parser.yy index 22a45b2797..da164e48c4 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -223,7 +223,7 @@ static Music *make_music_with_input (SCM name, Input where); 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); @@ -2054,8 +2054,6 @@ event_chord: 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 { @@ -2065,13 +2063,7 @@ event_chord: 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 ; @@ -2797,11 +2789,11 @@ lyric_element_music: 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)); } ; @@ -3323,10 +3315,15 @@ make_chord_step (int step, Rational alter) 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 diff --git a/lily/program-option-scheme.cc b/lily/program-option-scheme.cc index cf5416ae8b..820faf5bfe 100644 --- a/lily/program-option-scheme.cc +++ b/lily/program-option-scheme.cc @@ -187,12 +187,12 @@ get_help_string () 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; } diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index f90f3bce9f..941ceaacfe 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -25,8 +25,8 @@ Next, you'll want to get started on your own scores. To do this you'll 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. @@ -37,7 +37,7 @@ 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' { diff --git a/ly/chord-repetition-init.ly b/ly/chord-repetition-init.ly index 209e2676e0..0ff0498f58 100644 --- a/ly/chord-repetition-init.ly +++ b/ly/chord-repetition-init.ly @@ -1,79 +1,41 @@ %%% -*- 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))) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 31c0edbc84..67c3522a15 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -779,6 +779,7 @@ context." \remove "Note_heads_engraver" \remove "Fingering_engraver" \remove "New_fingering_engraver" + \remove "Pitched_trill_engraver" \description "Context for drawing notes in a Tab staff." diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 59c452065c..5afd8e44ac 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -692,7 +692,9 @@ Example: ") (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) @@ -718,6 +720,16 @@ Example: (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 @@ -758,9 +770,12 @@ Example: ;; 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 = @@ -1019,14 +1034,6 @@ styledNoteHeads = (_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?) diff --git a/make/website.make b/make/website.make index 4fed193985..59ac71d818 100644 --- a/make/website.make +++ b/make/website.make @@ -7,7 +7,7 @@ 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=. @@ -16,7 +16,8 @@ ifeq ($(WEBSITE_ONLY_BUILD),1) 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 diff --git a/po/lilypond.pot b/po/lilypond.pot index 888f9207f3..09b1697f6b 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -1,12 +1,12 @@ # 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 \n" "Language-Team: LANGUAGE \n" @@ -30,48 +30,67 @@ msgstr "" 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 @@ -83,145 +102,148 @@ msgstr "" 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" @@ -233,7 +255,7 @@ msgid "" "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 " @@ -243,69 +265,70 @@ msgid "" "* 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" @@ -314,79 +337,79 @@ msgid "" "\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" @@ -394,119 +417,124 @@ msgid "" "%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" @@ -521,32 +549,27 @@ msgid "" "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" @@ -554,56 +577,47 @@ msgid "" "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" @@ -611,321 +625,368 @@ msgid "" "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 ( 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 ,\n" @@ -933,118 +994,133 @@ msgid "" " Reinhold Kainhofer \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 "" @@ -1069,7 +1145,7 @@ 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 "" @@ -1111,7 +1187,7 @@ 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 "" @@ -1135,7 +1211,7 @@ 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 "" @@ -1152,18 +1228,18 @@ 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 "" @@ -1172,7 +1248,7 @@ msgid "" "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 "" @@ -1185,228 +1261,253 @@ 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" @@ -1414,12 +1515,12 @@ msgid "" "`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 " @@ -1434,20 +1535,51 @@ msgstr "" 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" @@ -1468,28 +1600,32 @@ msgstr "" 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 @@ -1497,6 +1633,10 @@ msgstr "" 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 "" @@ -1505,76 +1645,105 @@ 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 @@ -1587,11 +1756,6 @@ msgstr "" 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'" @@ -1606,10 +1770,14 @@ msgstr "" 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 @@ -1620,23 +1788,23 @@ msgstr "" 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 "" @@ -1644,16 +1812,16 @@ 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 "" @@ -1700,96 +1868,57 @@ 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 @@ -1800,33 +1929,26 @@ msgstr "" 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 @@ -1855,14 +1977,16 @@ msgstr "" 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 @@ -1883,7 +2007,16 @@ msgstr "" 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 "" @@ -1904,22 +2037,22 @@ 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 "" @@ -1936,58 +2069,101 @@ 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 @@ -1998,11 +2174,6 @@ msgstr "" 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 "" @@ -2011,41 +2182,62 @@ 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 @@ -2083,41 +2275,19 @@ msgstr "" 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 "" @@ -2125,30 +2295,7 @@ 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" @@ -2157,7 +2304,7 @@ msgid "" "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" @@ -2175,82 +2322,96 @@ msgid "" "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 @@ -2327,267 +2488,289 @@ msgstr "" 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 @@ -2598,6 +2781,25 @@ msgstr "" 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 "" @@ -2619,16 +2821,16 @@ 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 "" @@ -2637,19 +2839,20 @@ 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:" @@ -2659,9 +2862,9 @@ msgstr "" 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 @@ -2669,100 +2872,79 @@ msgstr "" 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 "" @@ -2775,31 +2957,6 @@ 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 @@ -2817,182 +2974,164 @@ msgstr "" 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'" @@ -3018,108 +3157,108 @@ msgstr "" 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 @@ -3146,177 +3285,190 @@ msgstr "" 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 @@ -3355,119 +3507,130 @@ msgid "" " %% ****************************************************************\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 "" diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 06c1364873..d7450e452b 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -138,47 +138,6 @@ bind def } 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 @@ -191,20 +150,6 @@ bind def 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 @@ -280,21 +225,6 @@ bind def [] 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 { { diff --git a/python/musicexp.py b/python/musicexp.py index d105ef333d..8610f8aa44 100644 --- a/python/musicexp.py +++ b/python/musicexp.py @@ -1793,7 +1793,7 @@ class StaffGroup: 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) diff --git a/scm/c++.scm b/scm/c++.scm index 7d5c85a8be..ded5e9b120 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -27,8 +27,7 @@ (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))) @@ -39,6 +38,9 @@ (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)))) diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 28443694a6..107518d531 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -1107,7 +1107,7 @@ relevant for finding the @code{pure-Y-extent}.") (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.") diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index db21afda90..3e87b4a8a8 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -419,8 +419,7 @@ Otherwise, return #f." ;;; (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 @@ -428,41 +427,45 @@ Otherwise, return #f." ;; 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))) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 7b60887bd6..0f1b1e619e 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -202,7 +202,7 @@ An alternative syntax is @var{note}@code{\\decr} @dots{} (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)) @@ -458,15 +458,6 @@ Syntax: @code{\\unset @var{context}.@var{prop}}") (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)) diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm index c8a6b17962..fddd6855b2 100644 --- a/scm/define-stencil-commands.scm +++ b/scm/define-stencil-commands.scm @@ -21,15 +21,10 @@ (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 @@ -39,13 +34,11 @@ defined in the output modules (@file{output-*.scm})." grob-cause named-glyph no-origin - oval page-link path partial-ellipse placebox polygon - repeat-slash resetcolor resetrotation resetscale @@ -58,7 +51,6 @@ defined in the output modules (@file{output-*.scm})." unknown url-link utf-8-string - zigzag-line )) ;; TODO: diff --git a/scm/fret-diagrams.scm b/scm/fret-diagrams.scm index 46af7edb01..cd734b2ecf 100644 --- a/scm/fret-diagrams.scm +++ b/scm/fret-diagrams.scm @@ -528,10 +528,9 @@ fret-diagram overall parameters." (+ (* 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))) diff --git a/scm/lily.scm b/scm/lily.scm index 21c9599b66..ab9e73dbf0 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -490,6 +490,7 @@ messages into errors.") (,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") @@ -551,7 +552,6 @@ messages into errors.") (,ly:translator? . "translator") (,ly:translator-group? . "translator group") (,ly:unpure-pure-container? . "unpure/pure container") - (,ly:vsize? . "vsize") )) diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index 40a1c05907..45d308c4a9 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -158,10 +158,10 @@ into a @code{MultiMeasureTextEvent}." '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) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 6114e144d6..1666084735 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -255,7 +255,9 @@ properly." (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)) @@ -276,7 +278,7 @@ through MUSIC." (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 { ... } @@ -311,7 +313,8 @@ if durations in @var{music} vary, allowing slash beats and double-percent 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) @@ -577,6 +580,65 @@ inside of and outside of chord construct." (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. @@ -1037,6 +1099,10 @@ then revert skipTypesetting." (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)) @@ -1308,14 +1374,14 @@ as a context." `(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 @@ -1380,7 +1446,7 @@ as a context." 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) @@ -1403,7 +1469,7 @@ as a context." ,(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) @@ -1515,13 +1581,16 @@ Entries that conform with the current key signature are not invalidated." (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))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/output-ps.scm b/scm/output-ps.scm index 0b4405072e..7c8a6ed394 100644 --- a/scm/output-ps.scm +++ b/scm/output-ps.scm @@ -58,12 +58,6 @@ ;;; 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) @@ -92,18 +86,6 @@ 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) @@ -207,14 +189,6 @@ (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) @@ -227,16 +201,6 @@ (- (/ (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)) diff --git a/scm/output-socket.scm b/scm/output-socket.scm index 28e22f72a3..352ff2989d 100644 --- a/scm/output-socket.scm +++ b/scm/output-socket.scm @@ -48,16 +48,6 @@ ;;; 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)) diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 27b6118483..9f10629eac 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -329,18 +329,6 @@ ;;; 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)))))) @@ -503,26 +491,6 @@ (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) @@ -604,17 +572,6 @@ `(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) "\n") diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index 010c8d507c..d70c2b7d4c 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -144,7 +144,6 @@ ly:unit ly:usage ly:version - ly:vsize? ly:warning ;; FIXME: cannot change staff size in --safe-mode diff --git a/scm/stencil.scm b/scm/stencil.scm index 1b0cb480c6..0ecc9abe8e 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -15,6 +15,30 @@ ;;;; You should have received a copy of the GNU General Public License ;;;; along with LilyPond. If not, see . +(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}." @@ -128,26 +152,25 @@ the more angular the shape of the parenthesis." (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) @@ -197,12 +220,20 @@ y@tie{}radius @code{y-radius}, and thickness @var{thickness} with fill 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 @@ -394,7 +425,6 @@ respectively." (append prepend-origin (list 'closepath)) prepend-origin)) (command-list (fold-right append '() final-path))) - (ly:make-stencil `(path ,thickness `(,@',command-list)