]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' into staging
authorFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 8 Feb 2012 11:58:13 +0000 (12:58 +0100)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 8 Feb 2012 11:58:13 +0000 (12:58 +0100)
105 files changed:
Documentation/changes.tely
Documentation/contributor/administration.itexi
Documentation/contributor/issues.itexi
Documentation/contributor/source-code.itexi
Documentation/contributor/website-work.itexi
Documentation/hu/learning/fundamental.itely
Documentation/learning/fundamental.itely
Documentation/music-glossary.tely
Documentation/nl/learning/fundamental.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/rhythms.itely
Documentation/notation/simultaneous.itely
Documentation/notation/spacing.itely
Documentation/snippets/accordion-discant-symbols.ly
Documentation/snippets/adding-ambitus-per-voice.ly
Documentation/snippets/adding-bar-lines-to-chordnames-context.ly
Documentation/snippets/adding-drum-parts.ly
Documentation/snippets/adding-indicators-to-staves-which-get-split-after-a-break.ly
Documentation/snippets/ambitus-with-multiple-voices.ly
Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly
Documentation/snippets/arabic-improvisation.ly
Documentation/snippets/center-text-below-hairpin-dynamics.ly
Documentation/snippets/changing-chord-separator.ly
Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly
Documentation/snippets/chord-name-exceptions.ly
Documentation/snippets/chord-name-major7.ly
Documentation/snippets/customizing-fretboard-fret-diagrams.ly
Documentation/snippets/demo-midiinstruments.ly
Documentation/snippets/drawing-boxes-around-grobs.ly
Documentation/snippets/formatting-lyrics-syllables.ly
Documentation/snippets/generating-random-notes.ly
Documentation/snippets/heavily-customized-polymetric-time-signatures.ly
Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly
Documentation/snippets/hymn-template.ly
Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
Documentation/snippets/markup-lines.ly
Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly
Documentation/snippets/ottava-text.ly
Documentation/snippets/partcombine-and-autobeamoff.ly
Documentation/snippets/piano-template-with-melody-and-lyrics.ly
Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly
Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly
Documentation/snippets/recorder-fingering-chart.ly
Documentation/snippets/removing-the-first-empty-line.ly
Documentation/snippets/rhythms.snippet-list
Documentation/snippets/showing-chords-at-changes.ly
Documentation/snippets/table-of-contents.ly
Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Documentation/snippets/tweaking-clef-properties.ly
Documentation/snippets/tweaking-grace-layout-within-music.ly
Documentation/snippets/volta-below-chords.ly
Documentation/web/community.itexi
Documentation/web/news-front.itexi
VERSION
input/regression/ambitus-cue.ly [new file with mode: 0644]
input/regression/chord-repetition-times.ly [new file with mode: 0644]
input/regression/cue-clef.ly
input/regression/display-lily-tests.ly
input/regression/identifier-following-chordmode.ly
input/regression/loglevels.ly
input/regression/option-help.ly
input/regression/page-spacing-nonstaff-lines-between-systems.ly
input/regression/scheme-engraver.ly
input/regression/tablature-chord-repetition-finger.ly [new file with mode: 0644]
input/regression/tablature-chord-repetition.ly
lily/ambitus-engraver.cc
lily/concurrent-hairpin-engraver.cc
lily/dynamic-engraver.cc
lily/general-scheme.cc
lily/hairpin.cc
lily/include/lily-lexer.hh
lily/include/lookup.hh
lily/include/music-sequence.hh
lily/include/page-layout-problem.hh
lily/lexer.ll
lily/lily-lexer.cc
lily/lily-parser-scheme.cc
lily/lookup.cc
lily/music-sequence.cc
lily/page-layout-problem.cc
lily/parser.yy
lily/program-option-scheme.cc
ly/Welcome_to_LilyPond.ly
ly/chord-repetition-init.ly
ly/engraver-init.ly
ly/music-functions-init.ly
make/website.make
po/lilypond.pot
ps/music-drawing-routines.ps
python/musicexp.py
scm/c++.scm
scm/define-grob-properties.scm
scm/define-music-display-methods.scm
scm/define-music-types.scm
scm/define-stencil-commands.scm
scm/fret-diagrams.scm
scm/lily.scm
scm/ly-syntax-constructors.scm
scm/music-functions.scm
scm/output-ps.scm
scm/output-socket.scm
scm/output-svg.scm
scm/safe-lily.scm
scm/stencil.scm

index 8281811608c63ac3b6cf840898e44f43e5c0b298..c07c270ba166035e7c83aa46adaced811face466 100644 (file)
@@ -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?)
index 515763c3523758d3da92ed22d8d6a4f059082533..36886d19cb7acf89195b0850891024b6eb87bb67 100644 (file)
@@ -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
 
index 86976fd3242f450e6f3da96f91e78b2551f0702c..2316f95855d30eebde70d21afd1c44797b7f5640 100644 (file)
@@ -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.
 
index 75363f4d40be7d54eb615b0c66f1fd2e837d8d14..ee20d3e76e1b64891ea463c8b4c28155e3876f54 100644 (file)
@@ -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
index aaced80cff446d2845649a332f49209d3d8c9839..33b13464b64bff7296ccb808f1e178169024fef4 100644 (file)
@@ -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
index 3004a17d0c65183bbdec36144dcfa053ec4341f6..2dc6fd71a966461fa7c9f25e1327313093c17fb6 100644 (file)
@@ -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]
index 33ce20619c71604dfc852a08d46c282728f5e5b1..423f6ee41f5e50a8c764baba1b86ec19dbc30e37 100644 (file)
@@ -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]
index b2df038dc722d5ec91047f054db0d7c9e0ccfe1f..ce41f4ec7d593b1ee11a222191162d3c8c69d8ab 100644 (file)
@@ -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:
 
index 9f33f9a1da8a6d04ac36fa84b829813df72a6a6c..7c4e50896e39ca3a4c415bb51d68ff396e921ade 100644 (file)
@@ -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]
index 98163ce3e832905ababb6389b77f66ff87637a16..1db53e061fdde7efb5039453b770738ea32ec668 100644 (file)
@@ -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
index c4bf631efefd6e190bcd8190eba15bfc9c6c47be..f01e968b13c40a97e87acc3c6bfffaef58836f7f 100644 (file)
@@ -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 <gis\4 cis\3 b\2>~ q4 q8~ q q4
+  r8 <gis-6 cis-6 b-0>~ q4 q8~ q q4
 }
 
 \new StaffGroup <<
   \new Staff {
     \clef "treble_8"
-    \override Voice.StringNumber #'transparent = ##t
     \guitar
   }
   \new TabStaff {
-    \guitar
+    \tabChordRepeats \guitar
   }
 >>
 @end lilypond
@@ -374,9 +377,9 @@ pitches:
 
 @lilypond[verbatim,quote]
 firstHarmonic = {
-  <d'\4\harmonic>4
-  <g'\3\harmonic>4
-  <b'\2\harmonic>2
+  d'4\4\harmonic
+  g'4\3\harmonic
+  b'2\2\harmonic
 }
 \score {
   <<
@@ -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.
index c22f55fb52356cc7c0133af219eb2a3c0ce6fb86..a3707bf42a4d84ff2e53e770e189effd490e9353 100644 (file)
@@ -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
 
index e73eab867ffe7c7d18c32bd7bef05b572e2c7129..00740cdfcef9e5a83f42c0ec261c384877f8f139 100644 (file)
@@ -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]
-<a c e>1 c4 q2 r8 q8
+<a c e>1 c'4 q2 r8 q8 |
+q2 c, |
 @end lilypond
 
 However, the chord repetition symbol does not retain any dynamics,
-articulation or ornamentation within, or attached to the previous chord.
+articulation or ornamentation within, or attached to, the previous
+chord.
 
 @lilypond[verbatim,quote,relative=2]
-<a-. c\prall e>1\sfz c4 q2 r8 q8
+<a-. c\prall e>1\sfz c'4 q2 r8 q8 |
+q2 c, |
 @end lilypond
 
+To have some of them retained, the @code{\chordRepeats} function can be
+be called explicitly with an extra argument specifying a list of
+@var{event types} to keep unless events of that type are already
+present on the @code{q} chord itself.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  \chordRepeats #'(articulation-event)
+  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  q2 c, |
+}
+@end lilypond
+
+Here using @code{\chordRepeats} inside of a @code{\relative} construction
+produces unexpected results: once chord events have been expanded, they
+are indistinguishable from having been entered as regular chords, making
+@code{\relative} assign an octave based on their current context.
+
+Since nested instances of @code{\relative} don't affect one another,
+another @code{\relative} inside of @code{\chordRepeats} can be used for
+establishing the octave relations before expanding the repeat chords.
+In that case, the whole content of the inner @code{\relative} does not
+affect the outer one; hence the different octave entry of the final note
+in this example.
+
+@c Without \new Voice, implicit voice creation does the dumbest thing.
+@lilypond[verbatim,quote]
+\new Voice
+\relative c'' {
+  \chordRepeats #'(articulation-event)
+  \relative c''
+  { <a-. c\prall e>1\sfz c'4 q2 r8 q8-. } |
+  q2 c |
+}
+@end lilypond
+
+Interactions with @code{\relative} occur only with explicit calls of
+@code{\chordRepeats}: the implicit expansion at the start of typesetting
+is done at a time where all instances of @code{\relative} have already
+been processed.
+
 @seealso
 Notation Reference:
 @ref{Chord notation},
@@ -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
index 1724a63439f73ccbb7d83cdae0844f784b2a6ffc..c1603fb22bf03baa99874500c8bbac1fa36e578a 100644 (file)
@@ -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
index 08d32260f604fde20b88afb7f35a39d6c5444c94..eb06bb7fc57aacc015c78b5809e91c8a58bbda2e 100644 (file)
@@ -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"
index aed57c72f4bebdfdd593a4b61615a7174ded2673..0578e2d15824a3b76f0677322fbf743f9a7a3783 100644 (file)
@@ -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
index 6329f4ec82f28ea148ba84ed6e3a975899e5b4f8..dbfd4278cf13017602a7a29a1dd0fe0d3dbd76be 100644 (file)
@@ -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}.
index f0fa3b4c5dbe1bdf930b927cc293956d7fee6448..81cb63c310e09b582874bad032aaf67c661818a0 100644 (file)
@@ -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"
index 7ade8fc15f3e0291cf20227a02a006c41d23d2c3..4bf11a836248105deb2c0277b5bafffce882fd1d 100644 (file)
@@ -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"
index 31b018693cac95a78d52aad16fffcae940c75c75..3e35634b2c0e6c401e383dd7dd39b71a36b77e3a 100644 (file)
@@ -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
index 6171bd2b0a0efb1b9a5bebda36fa07c7fcdf0d5e..c24b94053ea58650465299560ef5f52363b70033 100644 (file)
@@ -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 = "
index 8c636987e369934e9b3e400c736a230cc2b87417..cfdc21c1452b4411826811f04fe1ae277b478134 100644 (file)
@@ -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"
index c0aac5df57403d23d6d8fd40090e5df14dd6da1c..7436726a2f291b4469f5dd0ea7049fb92bf6f283 100644 (file)
@@ -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"
index fa1ed534b3a1d09db09d3e07c4df9f89ef6f3cfb..167b892a783191cb67d2833e86c49bb470336d41 100644 (file)
@@ -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.
index ca1c11758d935786f69272b60fab75f01428a3d5..aa1ec6b0347562bde375b36656d8e05e8144b46c 100644 (file)
@@ -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
index 4e66679db65a3bc18745f4990442df110256a917..058b46d8fa6984f759bcecf9f251c0d52e6c6cdc 100644 (file)
@@ -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.
index 5d2384336900c5ad946b7e4418f0b56235aad4a8..0e2416d638ac5586b7b8317ea1862e83b2b7e846 100644 (file)
@@ -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}.
 
index 4d43b8c7ad362e5e1903f1e95c64b757957167f3..b208a61ca72d9d5bd630cb61363c53ae5c5e2708 100644 (file)
@@ -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"
index fb209c6a40eac799534dc19f21861484a6237fe0..63ae65d2be9a494e7a264403f71361bb3a06bf2f 100644 (file)
@@ -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"
index 1e3ce844466c6465e5879882df5633c7754453ac..539c16f2d1007608fb77c559aaa56f13acea6833 100644 (file)
@@ -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"
index f64e9f012a2123236fc906850b62d53a0a0698d8..fa99151b8e5b7ee8a1c699a04764d54dcd685c18 100644 (file)
@@ -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.
index 606d44f3757bd9b7f795998c9f752932cef370b5..a21dce761228828ef72bbaf7ff69805301a6975f 100644 (file)
@@ -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"
index c13c8c7161677518b8ca0b9436358f6811ea3aea..d1af5200e9f44e89222ed4893c36e9e360c10a68 100644 (file)
@@ -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"
index be90bfe4c4e105f93d422d442128739b19161b68..a65526aa8fc775bdc25f3ea2d48606730d6fd982 100644 (file)
@@ -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"
index b8af195da3061d7efafc9ed554bbdc6866882ef8..d2d680e43dfea62090a156715ec1e9f0c6aa7c6a 100644 (file)
@@ -27,6 +27,7 @@ strofe come testo separato sotto la musica.
 
 "
   doctitleit = "Modello per inno"
+
 %%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
   texidocde = "
index 08c57c7e62551ed3393dadf951be7d8b27a682bf..de954566dcce28089edb136a65c3ed11372d8a58 100644 (file)
@@ -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"
index 8bc11221b088982b9f9f841804a1978f2969ba3d..67ea23606c8cbed216567d7f6e3fdd2bab10ad68 100644 (file)
@@ -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"
index 940536ae18b87b0613d4572ad4f97ae263002637..973d1e5b7e223114d0ad3c653cc8c0ca729e9722 100644 (file)
@@ -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.
 
 "
index f7fa00549f65f4215222a150a38f662833275088..0e79ec24c11541330d19cf6218014794bb7defa7 100644 (file)
@@ -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
index fb3f88f3409a22923d0ebf63d4045387a98a4ba8..bf5fb3e519f6c174cca955b991465fdd9f6d0f31 100644 (file)
@@ -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
index 528ceb3d624e3dbb1c3615e78abf2e00373733ea..b6c568fb35187525f505f3c96488a690b96264d5 100644 (file)
@@ -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"
index 8f02daeb83d741baa6718f3a55ced5bb3e138117..093f11852b1f46c2556e5f2d2f8611993f65050b 100644 (file)
@@ -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"
index fd9bc982e50a109251f945aab6bf6f8d3e97c770..abcb3174e996da7ad56a01cc373c0807e1e60786 100644 (file)
@@ -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"
 
index 1c6bdb7f8dcf23cb872bfc4f795f908cc90ed7b2..60bb305945e6c63479540fca142a13883108d8df 100644 (file)
@@ -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"
index 754518f074d9d40fc28be4ed0237398ff4860977..d95cf59d3d523987c3ba3373cc42d64344afb3d0 100644 (file)
@@ -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"
index ac62483cda784228975b35cec82a21977997e77b..c4ed36b3baf90fad147b5a3a9e86926c9dc1a452 100644 (file)
@@ -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
index 461241720d234164ac9c267f4eb202d0da69a291..ceee85907fb36359f2615ec117b4b4781fa271bd 100644 (file)
@@ -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.
index bea4576ff141c8f5305e53ebfa0d7c4764af92a3..1aef0291f13f03c17e522359db19653ba370bf0a 100644 (file)
@@ -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"
index 77573440b80e2e442d06730617c03e7808b7d62b..9735ef2f1eed1d491ab339835bdd335b0f59736e 100644 (file)
@@ -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
index 953f1df35eed6528048ba58287f47ada9c4b2620..09e42925233a2a30c478beafbd9faf799a293f24 100644 (file)
@@ -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 = "
index 08c8ca17a9aaccb350a0a12c4831ff1936cde9a5..b16d338a41bf5e179a868f7f4949562b126ca8a9 100644 (file)
@@ -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"
index 48c3efed48e5e887d061127720b02a498688c7a9..68c703e7265e3a5037caaebd1f226ed6604cd3cd 100644 (file)
@@ -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.
index 62ba8c47a3dfd2878c49316fad23ece8f4b417fc..b48776f19a3612be1d5ca8251edea86137eb93dd 100644 (file)
@@ -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.
index 27118448cc3e3e2093a0e78dadbfda6f5ec07e3b..77141c73b0d3c95eb07b438d5e33a48275a4fa98 100644 (file)
@@ -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 11c4cdefde1ea1a7c12b8af3e3acd5ee2716e0ac..4d34a38b40ee6cd115b31274e0d66c8a8eee2243 100644 (file)
--- 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 (file)
index 0000000..6bb87b9
--- /dev/null
@@ -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 (file)
index 0000000..339d7cf
--- /dev/null
@@ -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' {
+  <c e g>4 r <c e g>2 ~ |
+  \times 2/3 { <c e g>4 q q } \times 2/3 { q q q } |
+}
index 1b5ee627d484e39bca036c4fbf7864d05f82e175..936009b3fcb75b454b449ced5d5aab01de7c00d1 100644 (file)
@@ -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 }
index 76bfc420c629a0eef4cca54e48818fedcb8934da..22eaf893d3c2b8dc0c364aad924b061b04985961 100644 (file)
@@ -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 } } #]
index bec19ea680e0eca5f0f79903825e122db2d42b34..9735f4310691971256aa5c82073ed6da1bc776d7 100644 (file)
@@ -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 }
index 705ed3299d974e101b7ef843cecb9184bbc3afa5..93abbf00b217697c9b36cc9adce10e6b222de252 100644 (file)
@@ -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))
index a377279c3e223d1728160d5e2b067e7b66af1661..704351941f0fcbe1229112095c2c9975b705af5d 100644 (file)
@@ -5,5 +5,5 @@
   previous releases."
 }
 
-#(ly:option-usage)
+#(ly:option-usage (current-error-port))
 
index b1d161bb8da084e038d30cd97b298d89254ad87b..fd9009bfc99c350f9f49a4d3bb0190d47f6f4e61 100644 (file)
@@ -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
 }
 
index d5fefc6507cfbf7f23fcc735d65ae2ad4edff9b5..115429f90cc4a5fb98c534dc5cfbeb421c82a223 100644 (file)
        (lambda (trans)
        (display (list "initialize"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
       (cons 'start-translation-timestep
        (lambda (trans)
        (display (list "start-trans"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
       (cons 'listeners
        (list
        (cons 'rest-event (lambda (engraver event)
                           (let*
                            ((x (ly:engraver-make-grob engraver 'TextScript event)))
-                           (display (list "caught event" event "\ncreate:\n" x "\n"))
+                           (display (list "caught event" event "\ncreate:\n" x "\n") (current-error-port))
                            (ly:grob-set-property! x 'text "hi"))
                           ))
        ))
        (list
        (cons 'note-head-interface
         (lambda (engraver grob source-engraver)
-         (display (list "saw head: " grob " coming from " source-engraver))
+         (display (list "saw head: " grob " coming from " source-engraver) (current-error-port))
          ))
        ))
       (cons 'end-acknowledgers
        (list
        (cons 'beam-interface
         (lambda (engraver grob source-engraver)
-         (display (list "saw end of beam: " grob " coming from " source-engraver))
+         (display (list "saw end of beam: " grob " coming from " source-engraver) (current-error-port))
          ))
        ))
       (cons 'process-music
        (lambda (trans)
        (display (list "process-music"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
       (cons 'process-acknowledged
        (lambda (trans)
        (display (list "process-acknowledged"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
       (cons 'stop-translation-timestep
        (lambda (trans)
        (display (list "stop-trans"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
       (cons 'finalize
        (lambda (trans)
        (display (list "finalize"
                  (ly:context-current-moment
-                  (ly:translator-context trans)) "\n"))))
+                  (ly:translator-context trans)) "\n") (current-error-port))))
     )
 
                }}
diff --git a/input/regression/tablature-chord-repetition-finger.ly b/input/regression/tablature-chord-repetition-finger.ly
new file mode 100644 (file)
index 0000000..035128f
--- /dev/null
@@ -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
+      }
+    }
+  >>
+}
index e89b1c52f1401095606058f376eac8df685add69..5b10f19a94d6fb2d08b83c8a5e6c14301a50a563 100644 (file)
@@ -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
index dfd23f1724c4633efaae681f6e0efa187f7523ca..8690b01f80b4dedab341344fb3e8ff8485fcfe00 100644 (file)
@@ -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 */
                 ""
index 873e8b5994e01d9ca908bc800b365649f4656b89..5d04d258fe8fab77519367679f0544edd0561b38 100644 (file)
@@ -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]);
index 0dec856cb08073553c83b89b1012613e73af87d3..a3cb7795212c98da8bdd25a68c13e826064f5a82 100644 (file)
@@ -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);
 }
index a930d1b527ac21cbbeddb7d9d7ae30c0ae8a1884..b9507766894df7216cdfa1de7eb65026114a1879 100644 (file)
@@ -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),
index 4ccce328b856f15f8f2c18ce352f3ef778f4afe7..bf590a564bbbf9d0f1b742bdfeebd2ac6338081d 100644 (file)
@@ -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++)
                 {
index 3fe836277f1ef10a08dcaf94764fafb139ea7ec0..a10d89cee31465a6f7bffd3acfecd627f96e4abc 100644 (file)
@@ -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_;
 
index 0d13b037a3da8e01c0a9815a80d598af074a1191..f95a7e2a407981456551a51788163e1da8f7a95b 100644 (file)
@@ -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<Offset> const &points, Real blotdiameter);
   static Stencil frame (Box b, Real thick, Real blot);
index 0f82ba0f76084db29d090b95f22da4b0a86254cf..590b48b22d94c46bd8c2ad241fe61d172caf7af6 100644 (file)
@@ -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);
 
index fc7e105510be95c4ae1056e029da1be251eb1bbe..12455c6fe76d494352372a0b41c30e655e5f24e5 100644 (file)
@@ -95,6 +95,7 @@ protected:
   vector<Real> solution_;
   Real force_;
   Skyline bottom_skyline_;
+  Real bottom_loose_baseline_;
   Real page_height_;
   Real header_height_;
   Real footer_height_;
index 3b88982e8825b8f96b39cad6182a4a229a07f6a7..8c016f6405da0c1227162d3ccbe5d53484d6645f 100644 (file)
@@ -399,6 +399,10 @@ BOM_UTF8   \357\273\277
        yylval.scm = scm_from_locale_string (s);
        return RESTNAME;
 }
+<chords,notes,figures>q        {
+       return CHORD_REPETITION;
+}
+
 <chords,notes,figures>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;
 }
index 19ed8e41af73bcad259a62a9977a30d0e1610b65..7f017a437bb8874b15b77b73e3741e07e090db2c 100644 (file)
@@ -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_;
index d8b9265e4d21297911e499c5073d52d1725610f9..5281f7e2a741c3b8867816ea0ec995afcbb0606a 100644 (file)
@@ -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.")
index f19e4d2703885095a3eecf42e974a95e6c7489fa..f55e2f2a1e84767b1fc9dbcad15aaf92406fa72a 100644 (file)
@@ -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<Offset> 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<Offset> points;
-  Real blotdiameter = 0.0;
-
-  Offset p1 (0, 0);
-  Offset p2 (w, w * s);
-
-  return Lookup::round_filled_polygon (points, blotdiameter);
-#endif
 
-  SCM wid = scm_from_double (w);
-  SCM sl = scm_from_double (s);
-  SCM thick = scm_from_double (t);
-  SCM slashnodot = scm_list_n (ly_symbol2scm ("repeat-slash"),
-                               wid, sl, thick, SCM_UNDEFINED);
+  Real x_width = sqrt ((t * t) + ((t / s) * (t / s)));
+  Real height = w * s;
+
+  SCM controls = scm_list_n (ly_symbol2scm ("moveto"),
+                             scm_from_double (0),
+                             scm_from_double (0),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (x_width),
+                             scm_from_double (0),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (w),
+                             scm_from_double (height),
+                             ly_symbol2scm ("rlineto"),
+                             scm_from_double (-x_width),
+                             scm_from_double (0),
+                             ly_symbol2scm ("closepath"),
+                             SCM_UNDEFINED);
+
+  SCM slashnodot = scm_list_n (ly_symbol2scm ("path"),
+                               scm_from_double (0),
+                               ly_quote_scm (controls),
+                               ly_quote_scm (ly_symbol2scm ("round")),
+                               ly_quote_scm (ly_symbol2scm ("round")),
+                               SCM_BOOL_T,
+                               SCM_UNDEFINED);
 
   Box b (Interval (0, w + sqrt (sqr (t / s) + sqr (t))),
          Interval (0, w * s));
index db5bdb95f6ca83cac5fffc18b7d2532e0bd6d06a..dde9b653c9a3b6d84542b2de321f61e41b9c66ab 100644 (file)
@@ -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;
-}
index 39260b4173edc98845cee4d038bf0a8e1d2b51fc..6320827c767a74b07078d328eb7041d7649f6179 100644 (file)
@@ -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.
index 22a45b279786e62e8fc0d5156d4b5647634fcc2e..da164e48c4fe2ef46337ef55b09afad2bec762b8 100644 (file)
@@ -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
index cf5416ae8b3325ea89fce6c890e5e7a7b7e2ebea..820faf5bfea907bc0f2870001261a036ad12b79e 100644 (file)
@@ -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;
 }
index f90f3bce9f5e121032389df1f06096e34d5739bb..941ceaacfe2bf35a6239c2a3290312be0444e3a1 100644 (file)
@@ -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' {
index 209e2676e0ba970131c48ed28b03e0fbb9dfd26e..0ff0498f58af04f868031a08802f897ef26ce97d 100644 (file)
@@ -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)))
index 31c0edbc848417c399ae74fbec903ae46bcb1f11..67c3522a1506d6d86d4f90ed8d3b050a5d217f7a 100644 (file)
@@ -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."
 
index 59c452065c3a03cc33fda0e489908c5f15faff69..5afd8e44acaef03cb6e0e68d160e9090868aea6b 100644 (file)
@@ -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?)
 
index 4fed1939851c7d962615eb102b9c645fc5a90a51..59ac71d8184cb555a4911aea631898320eea0aae 100644 (file)
@@ -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
index 888f9207f34fb5f16eb99f330123f0b0af619b3f..09b1697f6b7d6bacaf12376f3f16a0a0119dffbe 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 (<metronome-note> in MusicXML) are "
 "not yet implemented."
 msgstr ""
 
-#: musicxml2ly.py:1658
+#: musicxml2ly.py:1665
 #, python-format
 msgid "Unable to convert chord type %s to lilypond."
 msgstr ""
 
-#: musicxml2ly.py:1807
+#: musicxml2ly.py:1814
 #, python-format
 msgid "drum %s type unknown, please add to instrument_drumtype_dict"
 msgstr ""
 
-#: musicxml2ly.py:1811
+#: musicxml2ly.py:1818
 msgid "cannot find suitable event"
 msgstr ""
 
-#: musicxml2ly.py:1959
+#: musicxml2ly.py:1966
 #, python-format
 msgid "Negative skip %s (from position %s to %s)"
 msgstr ""
 
-#: musicxml2ly.py:2100
+#: musicxml2ly.py:2107
 #, python-format
 msgid "Negative skip found: from %s to %s, difference is %s"
 msgstr ""
 
-#: musicxml2ly.py:2181
+#: musicxml2ly.py:2188
 #, python-format
 msgid "unexpected %s; expected %s or %s or %s"
 msgstr ""
 
-#: musicxml2ly.py:2287
+#: musicxml2ly.py:2294
 msgid "Encountered closing slur, but no slur is open"
 msgstr ""
 
-#: musicxml2ly.py:2290
+#: musicxml2ly.py:2297
 msgid "Cannot have two simultaneous (closing) slurs"
 msgstr ""
 
-#: musicxml2ly.py:2299
+#: musicxml2ly.py:2306
 msgid "Cannot have a slur inside another slur"
 msgstr ""
 
-#: musicxml2ly.py:2302
+#: musicxml2ly.py:2309
 msgid "Cannot have two simultaneous slurs"
 msgstr ""
 
-#: musicxml2ly.py:2436
+#: musicxml2ly.py:2443
 #, python-format
 msgid "cannot simultaneously have more than one mode: %s"
 msgstr ""
 
-#: musicxml2ly.py:2544
+#: musicxml2ly.py:2551
 msgid "Converting to LilyPond expressions..."
 msgstr ""
 
-#: musicxml2ly.py:2555
+#: musicxml2ly.py:2562
 msgid "musicxml2ly [OPTION]... FILE.xml"
 msgstr ""
 
-#: musicxml2ly.py:2557
+#: musicxml2ly.py:2564
 msgid ""
 "Convert MusicXML from FILE.xml to LilyPond input.\n"
 "If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
 
-#: musicxml2ly.py:2563 midi2ly.py:1060 abc2ly.py:1386 lilypond-book.py:140
-#: convert-ly.py:98 etf2ly.py:1202 main.cc:159
+#: musicxml2ly.py:2570 midi2ly.py:1060 abc2ly.py:1387 lilypond-book.py:141
+#: convert-ly.py:92 etf2ly.py:1204 main.cc:153
 msgid "show this help and exit"
 msgstr ""
 
-#: musicxml2ly.py:2567
+#: musicxml2ly.py:2574
 msgid ""
 "Copyright (c) 2005--2012 by\n"
 "    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
@@ -933,118 +994,133 @@ msgid ""
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: musicxml2ly.py:2581 midi2ly.py:1091 abc2ly.py:1382 lilypond-book.py:217
-#: convert-ly.py:94 etf2ly.py:1206 main.cc:174
+#: musicxml2ly.py:2588 midi2ly.py:1091 abc2ly.py:1383 lilypond-book.py:232
+#: convert-ly.py:88 etf2ly.py:1208 main.cc:174
 msgid "show version number and exit"
 msgstr ""
 
-#: musicxml2ly.py:2586 midi2ly.py:1085 lilypond-book.py:209 main.cc:175
+#: musicxml2ly.py:2594 midi2ly.py:1085 lilypond-book.py:224
 msgid "be verbose"
 msgstr ""
 
-#: musicxml2ly.py:2592
+#: musicxml2ly.py:2600
 msgid "use lxml.etree; uses less memory and cpu time"
 msgstr ""
 
-#: musicxml2ly.py:2598
+#: musicxml2ly.py:2606
 msgid "input file is a zip-compressed MusicXML file"
 msgstr ""
 
-#: musicxml2ly.py:2604
+#: musicxml2ly.py:2612
 msgid "convert pitches in relative mode (default)"
 msgstr ""
 
-#: musicxml2ly.py:2609
+#: musicxml2ly.py:2617
 msgid "convert pitches in absolute mode"
 msgstr ""
 
-#: musicxml2ly.py:2612
+#: musicxml2ly.py:2620
 msgid "LANG"
 msgstr ""
 
-#: musicxml2ly.py:2614
+#: musicxml2ly.py:2622
 msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
 msgstr ""
 
-#: musicxml2ly.py:2620
+#: musicxml2ly.py:2625 lilypond-book.py:180 convert-ly.py:105
+msgid ""
+"Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS "
+"(default), DEBUG)"
+msgstr ""
+
+#: musicxml2ly.py:2627 lilypond-book.py:164 lilypond-book.py:182
+#: convert-ly.py:107 main.cc:167
+msgid "LOGLEVEL"
+msgstr ""
+
+#: musicxml2ly.py:2636
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
 msgstr ""
 
-#: musicxml2ly.py:2626
+#: musicxml2ly.py:2642
 msgid "do not convert exact vertical positions of rests"
 msgstr ""
 
-#: musicxml2ly.py:2632
+#: musicxml2ly.py:2648
 msgid "do not convert the exact page layout and breaks"
 msgstr ""
 
-#: musicxml2ly.py:2638
+#: musicxml2ly.py:2654
 msgid ""
 "do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: musicxml2ly.py:2641 midi2ly.py:1065 midi2ly.py:1070 etf2ly.py:1208
-#: main.cc:165 main.cc:172
+#: musicxml2ly.py:2657 midi2ly.py:1065 midi2ly.py:1070 etf2ly.py:1210
+#: main.cc:159 main.cc:171
 msgid "FILE"
 msgstr ""
 
-#: musicxml2ly.py:2646
+#: musicxml2ly.py:2662
 msgid "set output filename to FILE, stdout if -"
 msgstr ""
 
+#: musicxml2ly.py:2668
+msgid "add midi-block to .ly file"
+msgstr ""
+
 #. Translators, please translate this string as
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: musicxml2ly.py:2649 midi2ly.py:1104 abc2ly.py:1395 lilypond-book.py:239
-#: convert-ly.py:144 etf2ly.py:1216 main.cc:285
+#: musicxml2ly.py:2672 midi2ly.py:1104 abc2ly.py:1396 lilypond-book.py:259
+#: convert-ly.py:146 etf2ly.py:1218 main.cc:285
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
 
-#: musicxml2ly.py:2729
+#: musicxml2ly.py:2752
 #, python-format
 msgid "unknown part in part-list: %s"
 msgstr ""
 
-#: musicxml2ly.py:2791
+#: musicxml2ly.py:2814
 msgid "Input is compressed, extracting raw MusicXML data from stdin"
 msgstr ""
 
-#: musicxml2ly.py:2804
+#: musicxml2ly.py:2827
 #, python-format
 msgid "Input file %s is compressed, extracting raw MusicXML data"
 msgstr ""
 
-#: musicxml2ly.py:2834
+#: musicxml2ly.py:2857
 msgid "Reading MusicXML from Standard input ..."
 msgstr ""
 
-#: musicxml2ly.py:2836
+#: musicxml2ly.py:2859
 #, python-format
 msgid "Reading MusicXML from %s ..."
 msgstr ""
 
-#: musicxml2ly.py:2869
+#: musicxml2ly.py:2892
 #, python-format
 msgid "Output to `%s'"
 msgstr ""
 
-#: musicxml2ly.py:2936
+#: musicxml2ly.py:2962
 #, python-format
 msgid "Unable to find input file %s"
 msgstr ""
 
-#: midi2ly.py:81 lilypond-book.py:116 convert-ly.py:81 etf2ly.py:1189
+#: midi2ly.py:81 lilypond-book.py:116 convert-ly.py:75 etf2ly.py:1191
 #, python-format
 msgid "Copyright (c) %s by"
 msgstr ""
 
-#: midi2ly.py:83 lilypond-book.py:118 convert-ly.py:83 etf2ly.py:1191
+#: midi2ly.py:83 lilypond-book.py:118 convert-ly.py:77 etf2ly.py:1193
 msgid "Distributed under terms of the GNU General Public License."
 msgstr ""
 
-#: midi2ly.py:84 lilypond-book.py:119 convert-ly.py:84 etf2ly.py:1192
+#: midi2ly.py:84 lilypond-book.py:119 convert-ly.py:78 etf2ly.py:1194
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
@@ -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 ""
index 06c13648738254d3b5f60438eed59655a1c92a94..d7450e452bee0c239f10fca06e70f4f40a5c40b4 100644 (file)
@@ -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
 {
        {
index d105ef333d2bfb8f50f2dba428b4fbb00caf29e0..8610f8aa44f138886c5a1bed5cb4963a3f43a34f 100644 (file)
@@ -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)
index 7d5c85a8bee6ee8e3df34c4e722840c283bb2b50..ded5e9b1209bc0c0be4627db018962d7196eb0f1 100644 (file)
@@ -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))))
index 28443694a686e457542c77af7d9f9db74acf46d7..107518d531c002e3859759f99f060a3913bbad69 100644 (file)
@@ -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.")
index db21afda90aacfb9aa62b0f45e169582c9762213..3e87b4a8a8bab722ac34ac4846fccbaacd3c27ed 100644 (file)
@@ -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)))
index 7b60887bd698a8de035b0d73751fb1218c093d41..0f1b1e619e412f75e1ef6ce9cb27b2349db2d1f8 100644 (file)
@@ -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))
index c8a6b179622d6b071064edb6a3e3afbb5d9bfa9a..fddd6855b2f0a2b22a99527ae89e28be060a9237 100644 (file)
 (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:
index 46af7edb01ca5a7beb4ce9ae05867cfa182dace9..cd734b2ecf34616ac1e8aa4983fb78f531f1a031 100644 (file)
@@ -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)))
 
index 21c9599b66170838d0ac7b961a9b6a5e574fa451..ab9e73dbf0b7e5500b025246db806d15d3e362f3 100644 (file)
@@ -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")
     ))
 
 
index 40a1c05907aded52786ec5ceff61344653a7baf8..45d308c4a92b9097b995dad731124a7a72a8e22c 100644 (file)
@@ -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)
index 6114e144d6bc8e6b5d8400fd7b5b2d3bd04ed132..1666084735b997db40fb812d1f4d26a76712775b 100644 (file)
@@ -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)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
index 0b4405072ea2a6edc370e8ca140a327c59cf4dfe..7c8a6ed39474fa5560002fb71f3744d4bf614047 100644 (file)
 ;;; Lily output interface, PostScript implementation --- cleanup and docme
 ;;;
 
-;; two beziers
-(define (bezier-sandwich lst thick)
-  (ly:format "~l ~4f draw_bezier_sandwich"
-            (map number-pair->string4 lst)
-         thick))
-
 (define (char font i)
   (ly:format "~a (\\~a) show"
    (ps-font-command font)
    off
    phase))
 
-;; what the heck is this interface ?
-(define (dashed-slur thick on off l)
-  (ly:format "~l ~4f [ ~4f ~4f ] 0 draw_dashed_slur"
-         (let ((control-points (append (cddr l) (list (car l) (cadr l)))))
-           (map number-pair->string4 control-points))
-         thick
-         on
-         off))
-
-(define (dot x y radius)
-  (ly:format " ~4l draw_dot" (list radius x y)))
-
 (define (draw-line thick x1 y1 x2 y2)
   (ly:format "~4f ~4f ~4f ~4f ~4f draw_line"
          (- x2 x1) (- y2 y1)
 (define (no-origin)
   "")
 
-(define (oval x-radius y-radius thick fill)
-  (ly:format
-   "~a ~4f ~4f ~4f draw_oval"
-   (if fill
-     "true"
-     "false")
-   x-radius y-radius thick))
-
 (define (placebox x y s)
   (if (not (string-null? s))
       (ly:format "~4f ~4f moveto ~a\n" x y s)
             (- (/ (length points) 2) 1)
             blot-diameter))
 
-(define (repeat-slash width slope beam-thickness)
-  (define (euclidean-length x y)
-    (sqrt (+ (* x x) (* y y))))
-
-  (let ((x-width (euclidean-length beam-thickness (/ beam-thickness slope)))
-       (height (* width slope)))
-    (ly:format "~4l draw_repeat_slash"
-            (list x-width width height))))
-
-
 (define (round-filled-box left right bottom top blotdiam)
   (let* ((halfblot (/ blotdiam 2))
         (x (- halfblot left))
index 28e22f72a3c3ba3733d290b443e8b1a47d804a91..352ff2989dfbbed5ee8d02245d48d94972e322fd 100644 (file)
 ;;; 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))
index 27b6118483ccdb05cfcb1fce79e805a037637d2f..9f10629eacf7a6f2a3f4fc913aaa5ff3ee9a65a3 100644 (file)
 ;;; stencil outputters
 ;;;
 
-(define (bezier-sandwich lst thick)
-  (let* ((first (list-tail lst 4))
-        (second (list-head lst 4)))
-    (entity 'path ""
-           '(stroke-linejoin . "round")
-           '(stroke-linecap . "round")
-           '(stroke . "currentColor")
-           '(fill . "currentColor")
-           `(stroke-width . ,thick)
-           `(d . ,(string-append (svg-bezier first #f)
-                                 (svg-bezier second #t))))))
-
 (define (char font i)
   (dispatch
    `(fontify ,font ,(entity 'tspan (char->entity (integer->char i))))))
 (define (no-origin)
   "")
 
-(define (oval x-radius y-radius thick is-filled)
-  (let ((x-max x-radius)
-       (x-min (- x-radius))
-       (y-max y-radius)
-       (y-min (- y-radius)))
-    (entity
-      'path ""
-      '(stroke-linejoin . "round")
-      '(stroke-linecap . "round")
-      `(fill . ,(if is-filled "currentColor" "none"))
-      `(stroke . "currentColor")
-      `(stroke-width . ,thick)
-      `(d . ,(ly:format "M~4f ~4fC~4f ~4f ~4f ~4f ~4f ~4fS~4f ~4f ~4f ~4fz"
-                       x-max 0
-                       x-max y-max
-                       x-min y-max
-                       x-min 0
-                       x-max y-min
-                       x-max 0)))))
-
 (define* (path thick commands #:optional (cap 'round) (join 'round) (fill? #f))
   (define (convert-path-exps exps)
     (if (pair? exps)
     `(points . ,(string-join
                  (map offset->point (ly:list->offsets '() coords))))))
 
-(define (repeat-slash width slope thickness)
-  (define (euclidean-length x y)
-    (sqrt (+ (* x x) (* y y))))
-  (let* ((x-width (euclidean-length thickness (/ thickness slope)))
-        (height (* width slope)))
-    (entity
-      'path ""
-      '(fill . "currentColor")
-      `(d . ,(ly:format "M0 0l~4f 0 ~4f ~4f ~4f 0z"
-                       x-width width (- height) (- x-width))))))
-
 (define (resetcolor)
   "</g>\n")
 
index 010c8d507c349645a9951cbcf2ff152b7cdef045..d70c2b7d4cb9254fff467dd260786e20b6eb3140 100644 (file)
    ly:unit
    ly:usage
    ly:version
-   ly:vsize?
    ly:warning
 
    ;; FIXME: cannot change staff size in --safe-mode
index 1b0cb480c6814e085e48921d683014d2c93c8236..0ecc9abe8ed4f4206f351b822d5973497b612013 100644 (file)
 ;;;; You should have received a copy of the GNU General Public License
 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 
+(define (make-bezier-sandwich-stencil coords thick xext yext)
+  (let* ((command-list `(moveto
+                         ,(car (list-ref coords 3))
+                         ,(cdr (list-ref coords 3))
+                         curveto
+                         ,(car (list-ref coords 0))
+                         ,(cdr (list-ref coords 0))
+                         ,(car (list-ref coords 1))
+                         ,(cdr (list-ref coords 1))
+                         ,(car (list-ref coords 2))
+                         ,(cdr (list-ref coords 2))
+                         curveto
+                         ,(car (list-ref coords 4))
+                         ,(cdr (list-ref coords 4))
+                         ,(car (list-ref coords 5))
+                         ,(cdr (list-ref coords 5))
+                         ,(car (list-ref coords 6))
+                         ,(cdr (list-ref coords 6))
+                         closepath)))
+  (ly:make-stencil
+    `(path ,thick `(,@' ,command-list) 'round 'round #t)
+    xext
+    yext)))
+
 (define-public (stack-stencils axis dir padding stils)
   "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
 @var{padding}."
@@ -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)