]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' into staging
authorFrancisco Vila <francisco.vila@hispalinux.es>
Sun, 22 Apr 2012 17:50:30 +0000 (19:50 +0200)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Sun, 22 Apr 2012 17:50:30 +0000 (19:50 +0200)
23 files changed:
Documentation/contributor/administration.itexi
Documentation/contributor/quick-start.itexi
Documentation/contributor/source-code.itexi
Documentation/notation/pitches.itely
Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly
Documentation/snippets/dynamics-custom-text-spanner-postfix.ly
Documentation/snippets/dynamics-text-spanner-postfix.ly
Documentation/snippets/formatting-lyrics-syllables.ly
Documentation/snippets/graphical-and-text-woodwind-diagrams.ly
Documentation/snippets/hymn-template.ly
Documentation/snippets/new/stem-cross-staff-engraver.ly [new file with mode: 0644]
Documentation/snippets/partcombine-and-autobeamoff.ly
Documentation/snippets/stem-cross-staff-engraver.ly [new file with mode: 0644]
Documentation/snippets/woodwind-diagrams-listing.ly
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
VERSION
lily/bar-line.cc
lily/music.cc
lily/part-combine-iterator.cc
mf/parmesan-scripts.mf
po/lilypond.pot
scripts/auxiliar/makelsr.py

index a9b32decab0bcbb220e902a0e8fc6f1fbe0e5622..aeb0ebfc23dd7d36c4a5c6fde5c520a2e63a5e1a 100644 (file)
@@ -394,7 +394,7 @@ We often receive reports of typos and minor text updates to the
 documentation. It would be great if somebody could create
 properly-formatted patches for these corrections.
 
-Technical requirements: ability to run @ref{Lilydev}.
+Technical requirements: ability to run @ref{LilyDev}.
 
 @item LSR editor:
 LSR contains many useful examples of lilypond, but some snippets
@@ -411,7 +411,7 @@ chapters 1 and 2 (or be willing to read the docs to find out).
 often find them in Ponds of Lilies) and new feature implementors.
 
 Technical requirements: development environment (such as
-@ref{Lilydev}), ability to read+write scheme and/or C++ code.
+@ref{LilyDev}), ability to read+write scheme and/or C++ code.
 
 @end itemize
 
@@ -958,11 +958,11 @@ area}, reason to move this to a different type.
 @item
 anything which stops contributors from helping out (e.g.
 lily-git.tcl not working, source tree(s) not being available,
-lilydev being unable to compile git master, inaccurate
+LilyDev being unable to compile git master, inaccurate
 instructions in the Contributor's Guide 2 Quick start).
 
 To limit this scope of this point, we will assume that the
-contributor is using the latest lilydev and has read the relevant
+contributor is using the latest LilyDev and has read the relevant
 part(s) of the Contributor's Guide.  Problems in other chapters of
 the CG are not sufficient to qualify as Type-Critical.
 
index 903cb3862e68b0783d83a881a3710d8c7d3b573c..a549c4ef5747156a4b2730b0965c50994f26b0c2 100644 (file)
 @node Quick start
 @chapter Quick start
 
-Want to submit a patch for LilyPond?  Great!  This chapter is
-designed to let you do this as quickly and easily as possible.
-
-It is not possible to compile LilyPond on Windows, and extremely
-difficulty to compile it on MacOS X.  We have therefore made a
-@q{remix} of Ubuntu which includes all necessary dependencies to
-compile both LilyPond and the documentation.  This can be run
-inside a virtual machine without disturbing your main operating
-system.  The full name is @qq{Ubuntu LilyPond Developer Remix},
-but we refer to it as @qq{lilydev} for short.
-
-@advanced{experienced developers may prefer to use their own
-development environment.  It may be instructive to skim over these
-instructions, but be aware that this chapter is intended for
-helpful users who may have never created a patch before.}
+Want to submit a patch for LilyPond?  Great!  Never created a patch
+before? Never compiled software before? No problem!  This chapter is
+for you and will help you do this as quickly and easily as possible.
 
 @menu
-* Lilydev::
-* Using lily-git::
-* Compiling with lilydev::
+* LilyDev::
+* lily-git::
+* Compiling with LilyDev::
 * Now start work!::
 @end menu
 
-@node Lilydev
-@section Lilydev
+@node LilyDev
+@section LilyDev
 
-This section discusses how to install and use the Ubuntu LilyPond
-Development Remix.
+There is a disk image of a @q{remix} of Ubuntu Linux available for
+download which includes all the necessary software and tools to compile
+both LilyPond and the documentation.  Called the
+@qq{Ubuntu LilyPond Developer Remix}, but known simply as @qq{LilyDev}
+for short.  Although it is not possible to compile LilyPond on Windows
+and extremely difficult on MacOS, LilyDev can be installed and run
+inside a @q{virtual machine} on any of these operating systems without
+disturbing your main operating system.  The LilyDev disk image can also
+be burnt to a DVD and installed like any other Ubuntu Linux
+distribution.
+
+Most virtualization software can be used but we recommend VirtualBox as
+it is available for all major operating systems and is easy to install
+& configure.
+
+If you are not familiar with Linux, it may be beneficial to read a
+couple of @qq{introduction to Ubuntu} web pages.
+
+Some contributors have recommended a free PDF:
+
+@example
+@uref{http://www.ubuntupocketguide.com/}
+@end example
+
+For those interested, the LilyDev remix is currently based on a 32bit
+version of 10.04 LTS Ubuntu (Lucid Lynx).
+
+@warning{Apart from installing and configuring LilyDev in VirtualBox,
+the rest of the chapter on assumes that you are comfortable using the
+command-line.  While this chapter is intended for users who may have
+never created a patch or compiled software before, experienced
+developers (who prefer to use their own development environment) may
+still find it instructive to skim over this section.}
 
 @menu
-* Installing lilydev::
-* Configuring lilydev in virtualbox::
-* Using lilydev::
+* Where to get LilyDev::
+* Installing LilyDev in VirtualBox::
+* Configuring LilyDev in VirtualBox::
 @end menu
 
-@node Installing lilydev
-@subsection Installing lilydev
+
+@node Where to get LilyDev
+@unnumberedsubsec Where to get LilyDev
+
+Download the Ubuntu LilyPond Developer Remix CD image file
+(approximately 1 GB) from here:
+
+@smallexample
+@uref{http://www.philholmes.net/lilypond/LilyDev/ubuntu-LilyDev-remix-2.6.iso}
+@end smallexample
+
+Some advanced users might want this file too:
+@smallexample
+@uref{http://www.philholmes.net/lilypond/LilyDev/ubuntu-LilyDev-remix-2.6.iso.md5}
+@end smallexample
+(If you don't recognize what this file is, then you don't need it.)
+
+
+@node Installing LilyDev in VirtualBox
+@unnumberedsubsec Installing LilyDev in VirtualBox
+
+This section discusses how to install and use LilyDev with VirtualBox.
+
+@warning{If you already know how to install a virtual machine using a
+disc image inside VirtualBox (or your own virtualization software) then
+you can skip this section and go straight to @ref{lily-git}.}
 
 @enumerate
 @item
-Install some virtualization software.
-
-Any virtualization tool can be used, but we recommend VirtualBox:
+Download Virtualbox from here:
 
 @example
 @uref{http://@/www.virtualbox.org/@/wiki/@/Downloads}
 @end example
 
-In virtualization terminology, your main operating system is the
-@strong{host}, while lilydev is the @strong{guest}.
+@warning{In virtualization terminology, the operating system where
+Virtualbox is installed, is the known as the @strong{host}.  LilyDev
+will be installed @q{inside} Virtualbox as a @strong{guest}.}
 
 @item
-Download the Ubuntu LilyPond Developer Remix disk image (approximately
-1 GB) from here:
+Start the VirtualBox software and click @q{New} to create a new
+@qq{virtual machine}.
 
-@example
-@uref{http://www.philholmes.net/lilypond/lilydev/ubuntu-lilydev-remix-2.6.iso}
-@end example
+The @q{New Virtual Machine Wizard} will walk you through setting up your
+guest virtual machine.  Choose an appropriate name for your LilyDev
+installation and select the @q{Linux} operating system.  When selecting
+the @q{version} use @q{Ubuntu} if available (but not the @q{64 bit}
+option).  If you do not have that specific option choose @q{Linux 2.6}
+(again do not choose any option that has 64 bit next to it).
 
 @item
-Create a new @qq{virtual machine} inside your virtualization
-software.
-
-If possible, use at least 700 MB of RAM (1GB would be better) for
-the virtual machine, and use @qq{dynamically expanding storage}
-for the virtual hard drive.  A complete compile of everything
-(code, docs, regression tests) can reach 10 GB.
+Select the amount of RAM you will allow the LilyDev guest to use from
+your host operating system when it is running.  If possible, use at
+least 700 MB of RAM; the more RAM you can spare from your host the
+better, although LilyDev will currently use no more than 4 GB (4096 MB)
+even if you are able to assign more.
 
 @item
-Install @file{ubuntu-lilydev-remix-2.6.iso} as the @strong{guest}
-operating system on your virtualized system.
+For your @q{Virtual Hard Disk}, leave the @q{Create new hard disk}
+option checked, use the default @q{VDI} and
+@qq{Dynamically allocated} options for the virtual hard drive.  A
+complete compile of everything (code, docs, regression tests) can reach
+10 GB so size your virtual disk and its location accordingly.
 
-@enumerate
+@item
+Verify the summary details and click @q{Create}, when you are satisfied.
+Your new guest will be displayed in the Virtualbox window.  Click the
+@q{Start} button and the @q{First Run Wizard} will prompt you for
+the installation media.  Click the browse icon and locate the LilyDev
+disk image and click through the wizard to start the installation
+process.
 
 @item
-When @file{ubuntu-lilydev-remix-2.6.iso} boots, it shows an
-ISOLINUX @code{boot:} prompt.  Type:
+When the LilyDev disk image boots, it shows a prompt:
 
 @example
-install
+ISOLINUX @code{boot:}
 @end example
 
+Hit the Return key (or wait 30 seconds) and then when the installer
+screen loads, using the arrow keys select
+@q{Install - start the installer directly} to begin the install process
+of LilyDev on your virtual hard disk.  The Ubuntu software will walk you
+through the complete installation process.
+
 @item
 At the @qq{Prepare disk space} stage, do not be afraid to select
 @qq{Erase and use the entire disk}, since this refers to your
 @strong{@emph{virtual disk}}, not your machine's actual hard
-drive.
+disk.
 
 @item
-When prompted to remove the installation CD, go to
-@clicksequence{Devices @click{} CD/DVD Devices} and de-select
-@file{ubuntu-lilydev-remix-2.6.iso}.
+Click through the rest of the wizard, filling in any appropriate details
+when asked and wait for the install to complete.
 
-@end enumerate
-
-@advanced{
-The latest version of lilydev is based on Ubuntu 10.04.1; if you
-encounter any difficulties installing it, search for one of the
-many tutorials for installing that particular version of Ubuntu as
-a guest operating system.
-}
+@warning{This will take anywhere from 10 minutes to up to an hour
+depending on the speed of your computer and if Ubuntu detects you are
+connected to the internet and needs to download any additional
+security updates or patches, although these updates are not required to
+compile LilyPond and it is possible to skip the additional downloads to
+speed up the install process.}
 
 @item
-Do any extra configuration for your virtualization software.
-
-There are additional instructions for VirtualBox in
-@ref{Configuring lilydev in virtualbox}.
-
-If you use other virtualization software, then follow the normal
-procedures for your virtualization software with Ubuntu as the
-client.
+When prompted by the Ubuntu installer wizard, restart the virtual
+machine and then when prompted to @q{eject the CD} by virtual box, just
+click inside the virtual machine window and hit the return key to
+reboot the virtual machine.  It will not try to restart the installer
+but start the virtual machine proper. LilyDev is now installed and
+running!
 
 @end enumerate
 
 @knownissues
-
 Not all hardware is supported in all virtualization tools.  In
-particular, some contributors have reported problems with USB
-devices, for example USB network adapters.  If you have problems
-with network connection (for example internet connection in the
-host system is lost when you launch virtual system), try installing
-and running Lilydev with your computer's built-in network adapter
-used to connect to the network.
-If you would like to investigate further, then look for
-help for your virtualization tool using your normal OS as the
-@qq{host} and Ubuntu as the @qq{client}.
+particular, some contributors have reported problems with USB network
+adapters.  If you have problems with network connection (for example
+Internet connection in the host system is lost when you launch virtual
+system), try installing and running LilyDev with your computer's
+built-in network adapter used to connect to the network.  Refer to the
+help documentation that comes with your virtualization software.
 
 
-@node Configuring lilydev in virtualbox
-@subsection Configuring lilydev in virtualbox
+@node Configuring LilyDev in VirtualBox
+@unnumberedsubsec Configuring LilyDev in VirtualBox
 
-VirtualBox has extra @qq{guest additions} which can make the
-virtualization easier to use (full-screen, easy file sharing
-between host and guest operating systems, shared clipboards, etc).
+VirtualBox has extra @q{guest additions} which although are not
+necessary to use LilyDev or compile Lilypond, do provide some additional
+features to your Virtual Machine to make it easier to work with.  Such
+as being able to dynamically resize the LilyDev window, allow seamless
+interaction with your mouse pointer on both the host and guest and let
+you copy/paste between your host and guest if needed.
 
 @enumerate
 
 @item
-In @emph{VirtualBox}, select @clicksequence{Devices @click{}
-Install Guest Additions...}.
+Select the @q{Devices} menu from the virtual machine window and choose
+@q{Install Guest Additions...}.  This will automount a CD which will
+prompt you to autorun it.  Click OK and follow the instructions.  It is
+recommended to reboot the guest when the installation is complete.
 
-@item
-In @emph{Ubuntu}, select @clicksequence{Places @click{}
-VBOXADDITIONS_}.  A file-system window will open.
+Other virtualization software will also have their own @q{guest}
+additions, follow the normal procedures for your virtualization software
+with Ubuntu as the client.
 
 @item
-Double-click on the @file{autorun.sh} file, then select @qq{Run in
-Terminal}, and enter your password when prompted.
+Restart Ubuntu to complete the installation of the guest additions.
 
-@item
-Once the script is finished, @qq{eject} the virtual CD, and then
-go to @clicksequence{Devices @click{} CD/DVD Devices} and
-de-select @file{VBoxGuestAdditions.iso}.
+@advanced{If you do any kernel upgrades, you may need to reinstall
+the additional software.  Just follow the step above again and reboot
+when the reinstallation is complete.}
 
-@item
-Restart Ubuntu to complete the installation.
-
-@advanced{If you do any kernel upgrades, you may need to re-run
-these VBOXADDITIONS instructions.}
 @end enumerate
 
-Some other steps may be helpful:
+@noindent
+Other items that may be helpful:
 
 @itemize
+
 @item
 In the settings for the virtual machine, set the network to
-Bridged mode to allow you to access shared folders on your Windows
-host.
+Bridged mode to allow you to access shared folders when using Windows
+hosts.
 
 @item
 Set up any additional features, such as @q{Shared Folders} between
-your main operating system and ubuntu.  This is distinct from the
-networked share folders in Windows.  Consult external
-documentation for this step.
+your main operating system and Ubuntu.  This is distinct from the
+networked share folders in Windows.  Consult the external
+documentation for this.
 
 Some longtime contributors have reported that @q{shared folders}
 are rarely useful and not worth the fuss, particularly since files
 can be shared over a network instead.
 
-@end itemize
-
-
-@node Using lilydev
-@subsection Using lilydev
-
-If you are not familiar with Linux, it may be beneficial to read a
-couple of @qq{introduction to Ubuntu} webpages.
-
-@itemize
-@item
-One particular change from Windows and MacOS X is that most
-software should be installed with your @qq{package manager}; this
-vastly simplifies the process of installing and configuring
-software.  Go to @clicksequence{Applications @click{} Ubuntu
-Software Center}.
-
-@item
-The rest of this manual assumes that you are using the
-command-line; double-click on the @q{Terminal} icon on the
-desktop.
-
 @item
 Pasting into a terminal is done with @code{Ctrl+Shift+v}.
 
@@ -216,32 +242,56 @@ Right-click allows you to edit a file with gedit.  We recommend
 using gedit.
 
 @item
-Some contributors have recommended a free pdf:
-
-@example
-@uref{http://www.ubuntupocketguide.com/}
-@end example
+One particular change from Windows and MacOS X is that most
+software should be installed with your @qq{package manager}; this
+vastly simplifies the process of installing and configuring
+software.  Go to @clicksequence{Applications @click{} Ubuntu
+Software Center}.
 
 @end itemize
 
 
-@node Using lily-git
-@section Using lily-git
+@node lily-git
+@section lily-git
 
-@command{lily-git.tcl} is a graphical tool to help you access and
-share changes to the lilypond source code.
+The @q{LilyPond Contributor's Git Interface} (otherwise known as
+@command{lily-git.tcl}) is a simple-to-use GUI to help you download and
+update the LilyPond source code as well as an aid to making software
+patches.
 
 @menu
-* Install and configuration of lily-git.tcl::
-* Daily use of lily-git.tcl::
+* Where to get lily-git::
+* Configuring lily-git and downloading the source code::
+* How to use lily-git::
 @end menu
 
-@node Install and configuration of lily-git.tcl
-@unnumberedsubsec Install and configuration of @command{lily-git.tcl}
+@node Where to get lily-git
+@unnumberedsubsec Where to get lily-git
+
+Depending on your development environment, lily-git may already be
+installed on your computer.
+
+@itemize
+@item
+If you are using LilyDev (see @ref{LilyDev}) then lily-git is already
+installed and ready to run.
+
+@item
+For those not using LilyDev then lily-git can be obtained by downloading
+the software directly. See @ref{Manually installing lily-git.tcl}.
+
+@item
+Finally, lily-git is always part of the LilyPond source code and is
+located in @file{~/lilypond-git/scripts/auxillar/lily-git.tcl}.
+
+@end itemize
+
+
+@node Configuring lily-git and downloading the source code
+@unnumberedsubsec Configuring lily-git and downloading the source code
 
 @warning{The rest of this manual assumes that you are using the
-command-line; double-click on the @q{Terminal} icon on the
-desktop.}
+command-line within a terminal.}
 
 @enumerate
 @item
@@ -251,35 +301,50 @@ Type (or copy&paste) into the Terminal:
 lily-git.tcl
 @end example
 
+@noindent
+You will be prompted to enter your name and your email address.  This
+information is used only to identify and label any patches you create.
+This information can be edited if required later.  See
+@ref{Configuring Git}.  Click on the @emph{Submit} button to update
+lily-git with this information.
+
 @item
 Click on the @qq{Get source} button.
 
-This will create a directory called @file{lilypond-git/} within
-your home directory, and will download the source code into that
-directory (around 150@tie{}Mb).  When the process is finished, the
-@qq{Command output} window will display @qq{Done}, and the button
-label will change to say @qq{Update source}.
+A directory called @file{lilypond-git/} is now created within
+your home directory and the complete source code will start to be
+downloaded into it.
+
+@warning{Be patient! The complete source is around 150@tie{}Mb.}
+
+@noindent
+When the source code has been downloaded, the @qq{Command output} window
+in lily-git will update and display @qq{Done} on the very last line.
+The button label will change to say @qq{Update source}.
 
-@warning{Some contributors have reported that nothing happens at
-this step.  If this occurs, then try again in a few minutes -- we
-suspect that this is an intermittant network problem.  If the
+@warning{Some contributors have reported that occasionally nothing
+happens at this step at all.  If this occurs, then try again in a few
+minutes -- it could be an intermittant network problem.  If the
 problem persists, please ask for help.}
 
 @item
-Navigate to the @file{lilypond-git/} directory to view the source
-files.
+Close the lily-git GUI and navigate to the @file{lilypond-git/}
+directory to view and edit the source files.
 
 @end enumerate
 
-You should now progress to @ref{Compiling with lilydev}.
+@noindent
+If this is the first time you have compiled LilyPond then please go
+to @ref{Compiling with LilyDev} before reading on.
 
-@warning{Throughout the rest of this manual, most command-line
-input should be entered from @file{~/lilypond-git/}.  This is
-referred to as the @emph{top source directory}.}
 
+@node How to use lily-git
+@unnumberedsubsec How to use lily-git
 
-@node Daily use of lily-git.tcl
-@unnumberedsubsec Daily use of @command{lily-git.tcl}
+@warning{Throughout the rest of this manual, most command-line
+input should be entered from @file{~/lilypond-git/}.  This is
+known as the @emph{top source directory} and is often referred to as
+@var{$LILYPOND_GIT}}.
 
 @warning{Only work on one set of changes at once.  Do not start
 work on any new changes until your first set has been accepted.}
@@ -385,12 +450,12 @@ current state of the remote repository (at @code{git.sv.gnu.org}).
 
 
 
-@node Compiling with lilydev
-@section Compiling with lilydev
+@node Compiling with LilyDev
+@section Compiling with LilyDev
 
-Lilydev is our @q{remix} of Ubuntu which contains all the
+LilyDev is our @q{remix} of Ubuntu which contains all the
 necessary dependencies to do lilypond development; for more
-information, see @rcontrib{Lilydev}.
+information, see @rcontrib{LilyDev}.
 
 @subsubheading Preparing the build
 
@@ -448,7 +513,7 @@ firefox ~/lilypond-git/build/out-www/offline-root/index.html
 
 @subsubheading Installing
 
-Don't.  There is no reason to install lilypond within lilydev.
+Don't.  There is no reason to install lilypond within LilyDev.
 All development work can (and should) stay within the
 @file{$HOME/lilypond-git/} directory, and any personal composition
 or typesetting work should be done with an official GUB release.
@@ -468,7 +533,7 @@ workarounds in @ref{Generating documentation}.
 @node Now start work!
 @section Now start work!
 
-Lilydev users may now skip to the chapter which is aimed at
+LilyDev users may now skip to the chapter which is aimed at
 their intended contributions:
 
 @itemize
index 84779698997b387d85f9beec5779ac0e1c9d2f28..73385511023f7eab213904c3513ed622049ffacb 100644 (file)
@@ -5,7 +5,7 @@
 @chapter Working with source code
 
 @warning{New contributors should read @ref{Quick start}, and in
-particular @ref{Using lily-git}, instead of this chapter.}
+particular @ref{lily-git}, instead of this chapter.}
 
 Advanced contributors will find this material quite useful,
 particularly if they are working on major new features.
@@ -29,7 +29,7 @@ contributors.  If you are comfortable with the command-line, then
 skip ahead to @ref{Starting with Git}.
 
 @warning{These instructions are only for people who are @emph{not}
-using @ref{Lilydev}.}
+using @ref{LilyDev}.}
 
 @c there's some duplication in this section with stuff covered in
 @c Quick Start, but moving it into a macro inside included/ would
@@ -96,7 +96,7 @@ files.
 input should be entered from @file{~/lilypond-git/}.  This is
 referred to as the @emph{top source directory}.}
 
-Further instructions are in @ref{Daily use of lily-git.tcl}.
+Further instructions are in @ref{How to use lily-git}.
 
 
 @node Starting with Git
@@ -209,14 +209,14 @@ git config --global core.editor @var{nano}
 @end example
 
 Finally, and in some ways most importantly, let's make sure that
-we know what branch we're on.  If you're not using lilydev, add
+we know what branch we're on.  If you're not using LilyDev, add
 this to your @file{~/.bashrc}:
 
 @verbatim
 export PS1="\u@\h \w\$(__git_ps1)$ "
 @end verbatim
 
-If you are not using lilydev, you may need to install the
+If you are not using LilyDev, you may need to install the
 additional @code{git-completion} package, but it is definitely
 worth it.
 
@@ -312,7 +312,7 @@ git checkout dev/cg
 Your prompt now shows you that you're on the other branch:
 
 @example
-gperciva@@lilydev:~/lilypond-git (dev/cg)$ 
+gperciva@@LilyDev:~/lilypond-git (dev/cg)$
 @end example
 
 To be able to manage multiple lilypond issues at once, you'll need to switch
@@ -1263,7 +1263,7 @@ or create a symbolic link to the @command{git-cl}
 and @command{upload.py} scripts in one of your PATH
 directories (such as @file{$HOME/bin}).
 
-In Ubuntu (and Lilydev), you can add directories to PATH
+In Ubuntu (and LilyDev), you can add directories to PATH
 by adding this line to a hidden file @file{.bashrc},
 located in your home directory:
 
@@ -2083,7 +2083,7 @@ later on.  You should see that @code{staging} is only ahead of
 @section Git on Windows
 
 @warning{We heavily recommend that development be done with our
-virtual machine @ref{Lilydev}.}
+virtual machine @ref{LilyDev}.}
 
 @c Some of this may duplicate stuff in other sections
 @c But it is probably best for windows users to have it all together
index 4bc237094ac9061cb3d0a60978cda36b86bdc02f..20e56de28fed1e31e5b973031782fb53dcc4bb04 100644 (file)
@@ -1477,11 +1477,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1560,11 +1560,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1633,11 +1633,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1699,11 +1699,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1763,11 +1763,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1830,11 +1830,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1891,11 +1891,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -1956,11 +1956,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2016,11 +2016,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2075,11 +2075,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2132,11 +2132,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2192,11 +2192,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2249,11 +2249,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2309,11 +2309,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2370,11 +2370,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2431,11 +2431,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
@@ -2490,11 +2490,11 @@ musicB = {
   \clef bass
   \new Voice {
     \voiceTwo \relative c' {
-      <fis, a cis>8 <fis a cis>
+      <fis, a cis>8[ <fis a cis>
       \change Staff = up
       cis' cis
       \change Staff = down
-      <fis, a> <fis a>
+      <fis, a> <fis a>]
       \showStaffSwitch
       \change Staff = up
       dis'4 |
index 9fc2ae5e8d45e93c64c852d8502d7cb796158a24..0f239f50b6ba817260cd2f625224c0ea398e893e 100644 (file)
@@ -19,7 +19,12 @@ posiciones para instrumentos de viento madera.
 "
 
   doctitlees = "Modificar el tamaño de los diagramas de viento madera"
+%%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
+
 
+  texidocde="
+Die Größe und Dicke der Holzbläserdiagramme kann geändert werden.
+"
 %%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
 
@@ -29,7 +34,6 @@ Die Größe und Dicke der Holzbläserdiagramme kann geändert werden.
 
   doctitlede = "Größe von Holzbläserdiagrammen Ã¤ndern"
 
-
 %% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
   texidocfr = "
 La taille et l'épaisseur des diagrammes de doigté pour bois est modifiable
index 4d313e95c3feaae91ba099d6db175c2a544605c8..74d36a9c5c156b186c643f55de409b6e6cf8aaa1 100644 (file)
@@ -20,7 +20,6 @@ comienzo del eobjeto de extensión se asignará a la nota siguiente.
 "
 
   doctitlees = "Objeto personalizado de extensión de texto de matices dinámicos postfijo"
-
 %%   Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
 
index 51a0c4420d897d1f3d65a718d1c1a7a03c0c880c..94a407fb5ea033fa60ae07d1781e5fd9c11d07e9 100644 (file)
@@ -23,7 +23,6 @@ extensores de texto de forma predeterminada.
 "
 
   doctitlees = "Objetos extensores de texto postfijos para dinámica"
-
 %%   Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
 
index bbd2c35c0b5dca2a9b1245e076253d8dd56c337b..487e6aa567df2c57308376a4f59501424b1caaf9 100644 (file)
@@ -16,7 +16,6 @@ individuales dentro de la letra.
 
 "
   doctitlees = "Dar formato a sílabas de la letra"
-
 %%%    Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
   texidocde = "
 Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext
@@ -24,7 +23,6 @@ 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 0eb43f4de15df088c117da7cf937a1997ad6d1e3..6a70ea23d3dfa1aa558440003804a89fac60ed8a 100644 (file)
@@ -18,7 +18,15 @@ pueden presentar por el nombre de la llave así como de forma gráfica.
 "
 
   doctitlees = "Diagramas para viento madera gráficos y textuales"
+%%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
+
 
+  texidocde="
+In vielen Fällen können die nicht in der mittleren Reihe befindlichen
+Löcher dargestellt werden, indem man die Lochbezeichnung oder
+graphische Zeichen benutzt.
+
+"
 %%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
 
@@ -31,7 +39,6 @@ graphische Zeichen benutzt.
 
   doctitlede = "Graphische und Text-Holzbläserdiagramme"
 
-
 %% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d
   texidocfr = "
 Dans certains cas, vous pouvez opter pour l'affichage textuel d'une clé
index 22af0c489af0e9943e8feda021b79a6c388aecb0..a5f9d5e37a20a80a5223ff06b412493d22c1c939 100644 (file)
@@ -27,7 +27,6 @@ strofe come testo separato sotto la musica.
 
 "
   doctitleit = "Modello per inno"
-
 %%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
   texidocde = "
diff --git a/Documentation/snippets/new/stem-cross-staff-engraver.ly b/Documentation/snippets/new/stem-cross-staff-engraver.ly
new file mode 100644 (file)
index 0000000..ba21195
--- /dev/null
@@ -0,0 +1,168 @@
+\version "2.15.35"
+
+\header {
+  lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
+  texidoc = "This file defines and demonstrates a scheme engraver that
+connects stems across staves.  The stem length need not be specified, as
+the code takes care of the variable distance between noteheads and staves."
+  doctitle = "Stem cross staff engraver"
+}
+
+%{
+  A new stem (referred to as span in the code) is created to connect the
+  original stems.  The original stems are made transparent.
+
+  The span is created as a child of the "root" stem, that is the stem
+  connected to a notehead with the end that is not to be extended.
+
+  Both stem directions are supported.  Connecting more than two stems is
+  possible.
+%}
+
+% Values are close enough to ignore the difference
+#(define (close-enough? x y)
+   (< (abs (- x y)) 0.0001))
+
+% Combine a list of extents
+#(define (extent-combine extents)
+   (if (pair? (cdr extents))
+       (interval-union (car extents) (extent-combine (cdr extents)))
+       (car extents)))
+
+% Check if the stem is connectable to the root
+#(define ((stem-connectable? ref root) stem)
+   ; The root is always connectable to itself
+   (or (eq? root stem)
+       (and
+        ; Horizontal positions of the stems must be almost the same
+        (close-enough? (car (ly:grob-extent root ref X))
+          (car (ly:grob-extent stem ref X)))
+        ; The stem must be in the direction away from the root's notehead
+        (positive? (* (ly:grob-property root 'direction)
+                     (- (car (ly:grob-extent stem ref Y))
+                       (car (ly:grob-extent root ref Y))))))))
+
+% Connect stems if we have at least one stems connectable to the root
+#(define (stem-span-stencil span)
+   (let* ((system (ly:grob-system span))
+          (root (ly:grob-parent span X))
+          (stems (filter (stem-connectable? system root)
+                         (ly:grob-object span 'stems))))
+     (if (<= 2 (length stems))
+         (let* ((yextents (map (lambda (st)
+                                 (ly:grob-extent st system Y)) stems))
+                (yextent (extent-combine yextents))
+                (layout (ly:grob-layout root))
+                (blot (ly:output-def-lookup layout 'blot-diameter)))
+           ; Hide spanned stems
+           (map (lambda (st)
+                  (set! (ly:grob-property st 'transparent) #t))
+             stems)
+           ; Draw a nice looking stem with rounded corners
+           (ly:round-filled-box (ly:grob-extent root root X) yextent blot))
+         ; Nothing to connect, don't draw the span
+         #f)))
+
+% Create a stem span as a child of the cross-staff stem (the root)
+#(define ((make-stem-span! stems trans) root)
+   (let ((span (ly:engraver-make-grob trans 'Stem '())))
+     (ly:grob-set-parent! span X root)
+     (set! (ly:grob-object span 'stems) stems)
+     ; Suppress positioning, the stem code is confused by this weird stem
+     (set! (ly:grob-property span 'X-offset) 0)
+     (set! (ly:grob-property span 'stencil) stem-span-stencil)))
+
+% Set cross-staff property of the stem to this function to connect it to
+% other stems automatically
+#(define (cross-staff-connect stem)
+   #t)
+
+% Check if automatic connecting of the stem was requested.  Stems connected
+% to cross-staff beams are cross-staff, but they should not be connected to
+% other stems just because of that.
+#(define (stem-is-root? stem)
+   (eq? cross-staff-connect (ly:grob-property-data stem 'cross-staff)))
+
+% Create stem spans for cross-staff stems
+#(define (make-stem-spans! ctx stems trans)
+   ; Cannot do extensive checks here, just make sure there are at least
+   ; two stems at this musical moment
+   (if (<= 2 (length stems))
+       (let ((roots (filter stem-is-root? stems)))
+         (map (make-stem-span! stems trans) roots))))
+
+% Connect cross-staff stems to the stems above in the system
+#(define (Span_stem_engraver ctx)
+   (let ((stems '()))
+     (make-engraver
+      ; Record all stems for the given moment
+      (acknowledgers
+       ((stem-interface trans grob source)
+        (set! stems (cons grob stems))))
+      ; Process stems and reset the stem list to empty
+      ((process-acknowledged trans)
+       (make-stem-spans! ctx stems trans)
+       (set! stems '())))))
+
+crossStaff =
+#(define-music-function (parser location notes) (ly:music?) #{
+  \override Stem #'cross-staff = #cross-staff-connect
+  $notes
+  \revert Stem #'cross-staff
+#})
+
+\layout {
+  \context {
+    \StaffGroup
+    \consists #Span_stem_engraver
+  }
+}
+
+\parallelMusic #'(voiceA voiceB voiceC) {
+  % Bar 1 - durations, beams, flags
+  g'2 g'4 g'8 [ g'16 ] g'16 |
+  \crossStaff { c'2 c'4 c'8 [ c'16 ] c'16 } |
+  R1 |
+
+  % Bar 2 - direction
+  g'8 \stemDown g'8 \crossStaff g'8 \stemNeutral g'8 g'4 r4 |
+  \crossStaff { c'8 \stemDown c'8 } c'8 \stemNeutral c'8 r4 r4 |
+  c8 \stemDown c8 c8 \stemNeutral \crossStaff { c8 c4 c4 } |
+
+  % Bar 3 - multiple voice styles
+  << c''2 \\ \crossStaff d'2 \\ a'2 \\ \crossStaff f'2 >> g'2 |
+  << b'2 \\ c'2 \\ g'2 \\ e'2 >> << e'2 \\ \\ \crossStaff c'2 >> |
+  << \crossStaff b2 \\ c2 \\ \crossStaff g2 \\ e2 >> r2 |
+
+  % Bar 4 - grace notes
+  \grace g'8 a'2 \stemDown \crossStaff { \grace g'8 a'2 } \stemNeutral |
+  \grace c'8 d'2 \stemDown \grace c'8 d'2 \stemNeutral |
+  \crossStaff { \grace c8 d2 } \stemDown \grace c8 d2 \stemNeutral |
+
+  % Bar 5 - cross-staff beams
+  g'8 g'8 g'8 g'8 r2 |
+  s1 |
+  \crossStaff { c8 [ \change Staff=stafftwo c''8 ] }
+    \change Staff=staffthree c8 [ \change Staff=stafftwo c''8 ] r2 |
+}
+
+\score {
+  \new StaffGroup <<
+    \new Staff = "staffone" <<
+      \new Voice {
+        \autoBeamOff \voiceA
+      }
+    >>
+    \new Staff = "stafftwo" <<
+      \new Voice {
+        \autoBeamOff \voiceB
+      }
+    >>
+    \new Staff = "staffthree" <<
+      \new Voice {
+        \autoBeamOff \clef bass \voiceC
+      }
+    >>
+  >>
+  \layout { }
+}
index d80d9abd2d1d73cfdf4e412d0cac047531bb2142..5820440506c93532f73b6742db05f9d7d2fb428d 100644 (file)
@@ -47,7 +47,6 @@ necesario hacer tres llamadas a @code{\\autoBeamOff}.
 
 "
   doctitlees = "Partcombine y autoBeamOff"
-
 %%   Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
   texidocde = "
@@ -79,7 +78,6 @@ wenn man es mit @code{\\partcombine} verwendet, muss @code{\\autoBeamOff}
 "
 doctitlede = "Partcombine und autoBeamOff"
 
-
 %% Translation of GIT committish: 3b125956b08d27ef39cd48bfa3a2f1e1bb2ae8b4
   texidocfr = "
 La fonction @code{\\autoBeamOff} dans le cadre d'un
diff --git a/Documentation/snippets/stem-cross-staff-engraver.ly b/Documentation/snippets/stem-cross-staff-engraver.ly
new file mode 100644 (file)
index 0000000..e04cae5
--- /dev/null
@@ -0,0 +1,176 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.15.35
+\version "2.15.35"
+
+\header {
+  lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
+  texidoc = "This file defines and demonstrates a scheme engraver that
+connects stems across staves.  The stem length need not be specified, as
+the code takes care of the variable distance between noteheads and staves."
+  doctitle = "Stem cross staff engraver"
+} % begin verbatim
+
+
+%{
+  A new stem (referred to as span in the code) is created to connect the
+  original stems.  The original stems are made transparent.
+
+  The span is created as a child of the "root" stem, that is the stem
+  connected to a notehead with the end that is not to be extended.
+
+  Both stem directions are supported.  Connecting more than two stems is
+  possible.
+%}
+
+% Values are close enough to ignore the difference
+#(define (close-enough? x y)
+   (< (abs (- x y)) 0.0001))
+
+% Combine a list of extents
+#(define (extent-combine extents)
+   (if (pair? (cdr extents))
+       (interval-union (car extents) (extent-combine (cdr extents)))
+       (car extents)))
+
+% Check if the stem is connectable to the root
+#(define ((stem-connectable? ref root) stem)
+   ; The root is always connectable to itself
+   (or (eq? root stem)
+       (and
+        ; Horizontal positions of the stems must be almost the same
+        (close-enough? (car (ly:grob-extent root ref X))
+          (car (ly:grob-extent stem ref X)))
+        ; The stem must be in the direction away from the root's notehead
+        (positive? (* (ly:grob-property root 'direction)
+                     (- (car (ly:grob-extent stem ref Y))
+                       (car (ly:grob-extent root ref Y))))))))
+
+% Connect stems if we have at least one stems connectable to the root
+#(define (stem-span-stencil span)
+   (let* ((system (ly:grob-system span))
+          (root (ly:grob-parent span X))
+          (stems (filter (stem-connectable? system root)
+                         (ly:grob-object span 'stems))))
+     (if (<= 2 (length stems))
+         (let* ((yextents (map (lambda (st)
+                                 (ly:grob-extent st system Y)) stems))
+                (yextent (extent-combine yextents))
+                (layout (ly:grob-layout root))
+                (blot (ly:output-def-lookup layout 'blot-diameter)))
+           ; Hide spanned stems
+           (map (lambda (st)
+                  (set! (ly:grob-property st 'transparent) #t))
+             stems)
+           ; Draw a nice looking stem with rounded corners
+           (ly:round-filled-box (ly:grob-extent root root X) yextent blot))
+         ; Nothing to connect, don't draw the span
+         #f)))
+
+% Create a stem span as a child of the cross-staff stem (the root)
+#(define ((make-stem-span! stems trans) root)
+   (let ((span (ly:engraver-make-grob trans 'Stem '())))
+     (ly:grob-set-parent! span X root)
+     (set! (ly:grob-object span 'stems) stems)
+     ; Suppress positioning, the stem code is confused by this weird stem
+     (set! (ly:grob-property span 'X-offset) 0)
+     (set! (ly:grob-property span 'stencil) stem-span-stencil)))
+
+% Set cross-staff property of the stem to this function to connect it to
+% other stems automatically
+#(define (cross-staff-connect stem)
+   #t)
+
+% Check if automatic connecting of the stem was requested.  Stems connected
+% to cross-staff beams are cross-staff, but they should not be connected to
+% other stems just because of that.
+#(define (stem-is-root? stem)
+   (eq? cross-staff-connect (ly:grob-property-data stem 'cross-staff)))
+
+% Create stem spans for cross-staff stems
+#(define (make-stem-spans! ctx stems trans)
+   ; Cannot do extensive checks here, just make sure there are at least
+   ; two stems at this musical moment
+   (if (<= 2 (length stems))
+       (let ((roots (filter stem-is-root? stems)))
+         (map (make-stem-span! stems trans) roots))))
+
+% Connect cross-staff stems to the stems above in the system
+#(define (Span_stem_engraver ctx)
+   (let ((stems '()))
+     (make-engraver
+      ; Record all stems for the given moment
+      (acknowledgers
+       ((stem-interface trans grob source)
+        (set! stems (cons grob stems))))
+      ; Process stems and reset the stem list to empty
+      ((process-acknowledged trans)
+       (make-stem-spans! ctx stems trans)
+       (set! stems '())))))
+
+crossStaff =
+#(define-music-function (parser location notes) (ly:music?) #{
+  \override Stem #'cross-staff = #cross-staff-connect
+  $notes
+  \revert Stem #'cross-staff
+#})
+
+\layout {
+  \context {
+    \StaffGroup
+    \consists #Span_stem_engraver
+  }
+}
+
+\parallelMusic #'(voiceA voiceB voiceC) {
+  % Bar 1 - durations, beams, flags
+  g'2 g'4 g'8 [ g'16 ] g'16 |
+  \crossStaff { c'2 c'4 c'8 [ c'16 ] c'16 } |
+  R1 |
+
+  % Bar 2 - direction
+  g'8 \stemDown g'8 \crossStaff g'8 \stemNeutral g'8 g'4 r4 |
+  \crossStaff { c'8 \stemDown c'8 } c'8 \stemNeutral c'8 r4 r4 |
+  c8 \stemDown c8 c8 \stemNeutral \crossStaff { c8 c4 c4 } |
+
+  % Bar 3 - multiple voice styles
+  << c''2 \\ \crossStaff d'2 \\ a'2 \\ \crossStaff f'2 >> g'2 |
+  << b'2 \\ c'2 \\ g'2 \\ e'2 >> << e'2 \\ \\ \crossStaff c'2 >> |
+  << \crossStaff b2 \\ c2 \\ \crossStaff g2 \\ e2 >> r2 |
+
+  % Bar 4 - grace notes
+  \grace g'8 a'2 \stemDown \crossStaff { \grace g'8 a'2 } \stemNeutral |
+  \grace c'8 d'2 \stemDown \grace c'8 d'2 \stemNeutral |
+  \crossStaff { \grace c8 d2 } \stemDown \grace c8 d2 \stemNeutral |
+
+  % Bar 5 - cross-staff beams
+  g'8 g'8 g'8 g'8 r2 |
+  s1 |
+  \crossStaff { c8 [ \change Staff=stafftwo c''8 ] }
+    \change Staff=staffthree c8 [ \change Staff=stafftwo c''8 ] r2 |
+}
+
+\score {
+  \new StaffGroup <<
+    \new Staff = "staffone" <<
+      \new Voice {
+        \autoBeamOff \voiceA
+      }
+    >>
+    \new Staff = "stafftwo" <<
+      \new Voice {
+        \autoBeamOff \voiceB
+      }
+    >>
+    \new Staff = "staffthree" <<
+      \new Voice {
+        \autoBeamOff \clef bass \voiceC
+      }
+    >>
+  >>
+  \layout { }
+}
index 9e4830830a360e2d550217db47ae59f48365ef24..b3cd25b6d45ef0b56dd836c6508da1e0445dc7b6 100644 (file)
@@ -17,7 +17,14 @@ el momento.
 
 "
   doctitlees = "Listado de los diagramas para viento madera"
+%%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
+
+
+  texidocde="
+Folgende Noten zeige alle Holzbläserdiagramme, die für LilyPond
+definiert sind.
 
+"
 %%%    Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
 
 
@@ -28,7 +35,6 @@ definiert sind.
 "
   doctitlede = "Liste der Holzbläserdiagramme"
 
-
 %% Translation of GIT committish: 496c48f1f2e4d345ae3637b2c38ec748a55cda1d
   texidocfr = "
 Voici la liste des différents instruments Ã  vent de la section des bois
index f6d19d07ec8f4dbe43727ac346cfaae0f0092065..a65b97ea42d5382e119073ffd99d445500bce4b6 100644 (file)
@@ -498,13 +498,40 @@ Some highlights:
 @itemize
 
 @item
-@emph{Affaire Ã©trangère}, an opera by
-@uref{http://valentin.villenave.net/,Valentin Villenave}
-to a French libretto by
-@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis
-Trondheim}, premiered February 1, 2009 at
-@uref{http://www.orchestre-montpellier.com/, L'Opéra National de
-Montpellier}, France.
+Mussorgsky's @emph{Pictures at an exhibition}, re-orchestrated and
+conducted by @uref{http://www.aurelienbello.com/,Aurélien Bello} with
+the @uref{http://www.junge-philharmonie-brandenburg.de/,
+Junge Philharmonie Brandenburg}
+on Oct 10 2011 and again on Apr 15-16 2012.
+
+@item
+@uref{http://www.kierenmacmillan.info/, Kieren MacMillan}, composer and
+musical director.  His many, recent works include; @emph{Go Thy Way},
+performed by the @uref{http://www.saltlakechoralartists.org/,
+Salt Lake Choral Artists} in March 2012; The
+@emph{Just Out of Reach Suite} performed
+by the
+@uref{http://www.herald-dispatch.com/news/marshall/x1883873762/Music-duo-Chrysalis-to-perform-at-Marshall-University-on-Jan-19,
+Chrysalis Duo} ; @emph{thrafsmata} performed in July 2011 by the
+@uref{http://www.pnme.org/CurrentSeason/PreviousSeasons.html, Pittsburgh
+New Music Ensemble}.
+
+
+@item
+@emph{Anonymous Student Compliment or Complaint}, by
+@uref{http://www.mikesolomon.org, Mike Solomon}, winner chosen from among
+172 entries from 22 countries of the
+@uref{http://leftcoastensemble.org/contest, 2011 Left Coast Composition Contest}.
+Other works include, Norman (age 1) for clarinet solo, performed at the
+@uref{emu.music.ufl.edu/fems_concerts.html, University of Florida}'s
+Electroacoustic Music Festival (FEMF), October 2010.
+
+@item
+A modern edition of the @emph{Serenata Erminia} by Alessandro Scarlatti,
+edited by Thomas Griffin, Musicologist (Rome, Italy).  Performed on 22
+October 2010 in the Galleria of the Palazzo Zevallos Stigliano, Naples,
+Italy.  @uref{http://www.ascarlatti2010.net, Alessandro Scarlatti 2010},
+in celebration of the composer's 350th birthday.
 
 @item
 @uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}'s
@@ -519,10 +546,13 @@ and his ensemble @uref{http://www.earlymusicny.org/, Early Music
 New York} (engraving by Nicolas Sceaux).
 
 @item
-Mussorgsky's @emph{Pictures at an exhibition}, re-orchestrated and
-conducted by @uref{http://www.aurelienbello.com/,Aurélien Bello} with
-the @uref{http://www.junge-philharmonie-brandenburg.de/,Junge Philharmonie Brandenburg}
-on Oct 10 2011 and again on Apr 15-16 2012.
+@emph{Affaire Ã©trangère}, an opera by
+@uref{http://valentin.villenave.net/,Valentin Villenave}
+to a French libretto by
+@uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis
+Trondheim}, premiered February 1, 2009 at
+@uref{http://www.orchestre-montpellier.com/, L'Opéra National de
+Montpellier}, France.
 
 @end itemize
 @divEnd
index 7caf449e20cb2f34b9b8d4b3f17a2d6a34cfd3c4..98a26577096d5b4ef96fff0594efcb3d6c4c6a7b 100644 (file)
@@ -9,6 +9,23 @@
 @c used for news about the upcoming release; see CG 10.2
 
 
+@newsItem
+@subsubheading Release candidate 5 of 2.16 - LilyPond 2.15.37 released!  @emph{April 19, 2012}
+
+LilyPond 2.15.37 is out; this is the fifth release candidate of
+the upcoming 2.16 stable release.  All users are invited to
+experiment with this version.  New features since 2.14.2 are
+listed in the @qq{Changes} manual on the website section about
+@ref{Development}.
+
+There are no known Critical issues with this release.  If no
+Critical bugs are found, then the official 2.16.0 release will be
+on 03 May 2012.  If you discover any problems, please send us
+@ref{Bug reports}.
+
+@newsEnd
+
+
 @newsItem
 @subsubheading Release candidate 4 of 2.16 - LilyPond 2.15.36 released!  @emph{April 6, 2012}
 
diff --git a/VERSION b/VERSION
index 403c48ab4cf9f62b9b47b4ea39673bc6d0c55ab0..5f564d5c95128f3cbdc0a0891c10f4a2bf868cb8 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=15
-PATCH_LEVEL=37
+PATCH_LEVEL=38
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.36
+VERSION_DEVEL=2.15.37
index cee5f222430220f906f1120dfb6ff7660673406d..0cd0339235b41c307459670210ea35c27f69d66d 100644 (file)
@@ -287,7 +287,11 @@ Bar_line::compound_barline (Grob *me, string str, Interval const &extent,
   else if (str == "'")
     m = tick_bar_line (me, extent.at (UP), rounded);
   else if (str == "kievan")
+   {
+    me->set_property ("layer", scm_from_int (1));
     m.add_stencil (Font_interface::get_default_font (me)->find_by_name ("scripts.barline.kievan"));
+    m = *unsmob_stencil (scm_call_1 (ly_lily_module_constant ("stencil-whiteout"), m.smobbed_copy ()));
+   }
   return m;
 }
 
index 45944511359fb3fe9f0f2137feb7fe76f4188ad9..7927fe3067cc8b855743e6e5c5ad06ae5c1b18a9 100644 (file)
@@ -233,7 +233,8 @@ transpose_mutable (SCM alist, Pitch delta)
           if (Music *m = unsmob_music (val))
             m->transpose (delta);
         }
-      else if (prop == ly_symbol2scm ("elements"))
+      else if (prop == ly_symbol2scm ("elements")
+              || prop == ly_symbol2scm ("articulations"))
         transpose_music_list (val, delta);
       else if (prop == ly_symbol2scm ("pitch-alist")
                && scm_is_pair (val))
index eb1cca43e57092ed886f3166c6ae739d97c03970..db6b77cbc614f1b7146aa5b925e1eea9d2cde0a8 100644 (file)
@@ -158,19 +158,14 @@ Part_combine_iterator::derived_mark () const
     scm_gc_mark (first_iter_->self_scm ());
   if (second_iter_)
     scm_gc_mark (second_iter_->self_scm ());
-
-  Stream_event *ptrs[]
-  =
-  {
-    unisono_event_,
-    mmrest_event_,
-    solo_two_event_,
-    solo_one_event_,
-    0
-  };
-  for (int i = 0; ptrs[i]; i++)
-    if (ptrs[i])
-      scm_gc_mark (ptrs[i]->self_scm ());
+  if (unisono_event_)
+    scm_gc_mark (unisono_event_->self_scm ());
+  if (mmrest_event_)
+    scm_gc_mark (mmrest_event_->self_scm ());
+  if (solo_one_event_)
+    scm_gc_mark (solo_one_event_->self_scm ());
+  if (solo_two_event_)
+    scm_gc_mark (solo_two_event_->self_scm ());
 }
 
 void
index 284aa45f5c163b7bebcf22ee621c2adebbf7142c..7899fcba428f01c8e26b1fdf48f8d1ab65aca58d 100644 (file)
@@ -254,16 +254,16 @@ fet_beginchar ("Kievan end of piece (slash)", "barline.kievan");
        save hair_thickness, thick_thickness, width, depth, height, padding;
        hair# = 1.9 linethickness#;
        thick# = 6.0 linethickness#;
-       width = .8 staff_space;
+       width# = 1.0 staff_space#;
        height# + depth# = 4 staff_space#;
-       depth# = height# + hair# / 2;
-       padding = .2 staff_space;
+       depth# = height# + hair#;
+       padding# = .2 staff_space#;
 
-       set_char_box (0, 0, depth#, height#);
-       define_pixels (hair, thick);
+       set_char_box (0, width# + 3 padding#, depth#, height# + staff_space#);
+       define_pixels (hair, thick, width, padding, depth, height);
 
-       x1r - x2l = width;
-       y1 - y3r = d + h + linethickness / 2;
+       x7r - x2l = width;
+       y1 - y3r = depth + height + linethickness / 2;
        z3 = z2;
        z4 = .5 [z1, z2]
           = (width / 2 + padding, hair / 8);
index 09b1697f6b7d6bacaf12376f3f16a0a0119dffbe..c444323cf749f8c924fac4ee1a894853f88f844b 100644 (file)
@@ -1,12 +1,14 @@
 # Translation of LilyPond.
 # Copyright (C) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen
 # This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: 2.15.28\n"
+"Project-Id-Version: 2.15.37\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2012-02-04 15:42+0100\n"
+"POT-Creation-Date: 2012-04-19 20:35+0200\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"
@@ -981,7 +983,7 @@ msgid ""
 "If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
 
-#: musicxml2ly.py:2570 midi2ly.py:1060 abc2ly.py:1387 lilypond-book.py:141
+#: musicxml2ly.py:2570 midi2ly.py:1062 abc2ly.py:1388 lilypond-book.py:140
 #: convert-ly.py:92 etf2ly.py:1204 main.cc:153
 msgid "show this help and exit"
 msgstr ""
@@ -994,12 +996,12 @@ msgid ""
 "    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
 
-#: musicxml2ly.py:2588 midi2ly.py:1091 abc2ly.py:1383 lilypond-book.py:232
+#: musicxml2ly.py:2588 midi2ly.py:1095 abc2ly.py:1385 lilypond-book.py:231
 #: convert-ly.py:88 etf2ly.py:1208 main.cc:174
 msgid "show version number and exit"
 msgstr ""
 
-#: musicxml2ly.py:2594 midi2ly.py:1085 lilypond-book.py:224
+#: musicxml2ly.py:2594 midi2ly.py:1090 lilypond-book.py:223
 msgid "be verbose"
 msgstr ""
 
@@ -1027,13 +1029,13 @@ msgstr ""
 msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
 msgstr ""
 
-#: musicxml2ly.py:2625 lilypond-book.py:180 convert-ly.py:105
+#: musicxml2ly.py:2625 lilypond-book.py:179 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
+#: musicxml2ly.py:2627 lilypond-book.py:163 lilypond-book.py:181
 #: convert-ly.py:107 main.cc:167
 msgid "LOGLEVEL"
 msgstr ""
@@ -1055,7 +1057,7 @@ msgid ""
 "do not convert beaming information, use lilypond's automatic beaming instead"
 msgstr ""
 
-#: musicxml2ly.py:2657 midi2ly.py:1065 midi2ly.py:1070 etf2ly.py:1210
+#: musicxml2ly.py:2657 midi2ly.py:1067 midi2ly.py:1072 etf2ly.py:1210
 #: main.cc:159 main.cc:171
 msgid "FILE"
 msgstr ""
@@ -1072,7 +1074,7 @@ msgstr ""
 #. "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:2672 midi2ly.py:1104 abc2ly.py:1396 lilypond-book.py:259
+#: musicxml2ly.py:2672 midi2ly.py:1107 abc2ly.py:1403 lilypond-book.py:258
 #: convert-ly.py:146 etf2ly.py:1218 main.cc:285
 #, c-format, python-format
 msgid "Report bugs via %s"
@@ -1111,16 +1113,16 @@ msgstr ""
 msgid "Unable to find input file %s"
 msgstr ""
 
-#: midi2ly.py:81 lilypond-book.py:116 convert-ly.py:75 etf2ly.py:1191
+#: midi2ly.py:81 lilypond-book.py:115 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:77 etf2ly.py:1193
+#: midi2ly.py:83 lilypond-book.py:117 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:78 etf2ly.py:1194
+#: midi2ly.py:84 lilypond-book.py:118 convert-ly.py:78 etf2ly.py:1194
 msgid "It comes with NO WARRANTY."
 msgstr ""
 
@@ -1128,7 +1130,7 @@ msgstr ""
 msgid "warning: "
 msgstr ""
 
-#: midi2ly.py:93 midi2ly.py:1121
+#: midi2ly.py:93 midi2ly.py:1124
 msgid "error: "
 msgstr ""
 
@@ -1136,113 +1138,121 @@ msgstr ""
 msgid "Exiting... "
 msgstr ""
 
-#: midi2ly.py:834
+#: midi2ly.py:835
 msgid "found more than 5 voices on a staff, expect bad output"
 msgstr ""
 
-#: midi2ly.py:1030
+#: midi2ly.py:1032
 #, python-format
 msgid "%s output to `%s'..."
 msgstr ""
 
-#: midi2ly.py:1042 abc2ly.py:1374 lilypond-book.py:123 convert-ly.py:81
+#: midi2ly.py:1044 abc2ly.py:1376 lilypond-book.py:122 convert-ly.py:81
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr ""
 
-#: midi2ly.py:1043
+#: midi2ly.py:1045
 #, python-format
 msgid "Convert %s to LilyPond input.\n"
 msgstr ""
 
-#: midi2ly.py:1048
+#: midi2ly.py:1050
 msgid "print absolute pitches"
 msgstr ""
 
-#: midi2ly.py:1050 midi2ly.py:1075
+#: midi2ly.py:1052 midi2ly.py:1080
 msgid "DUR"
 msgstr ""
 
-#: midi2ly.py:1051
+#: midi2ly.py:1053
 msgid "quantise note durations on DUR"
 msgstr ""
 
-#: midi2ly.py:1054
+#: midi2ly.py:1056
 msgid "debug printing"
 msgstr ""
 
-#: midi2ly.py:1057
+#: midi2ly.py:1059
 msgid "print explicit durations"
 msgstr ""
 
-#: midi2ly.py:1062
+#: midi2ly.py:1064
 msgid "prepend FILE to output"
 msgstr ""
 
-#: midi2ly.py:1066
+#: midi2ly.py:1068
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
 msgstr ""
 
-#: midi2ly.py:1067
+#: midi2ly.py:1069
 msgid "ALT[:MINOR]"
 msgstr ""
 
-#: midi2ly.py:1069 abc2ly.py:1389 etf2ly.py:1209
+#: midi2ly.py:1071 abc2ly.py:1391 etf2ly.py:1209
 msgid "write output to FILE"
 msgstr ""
 
-#: midi2ly.py:1072
+#: midi2ly.py:1074
 msgid "preview of first 4 bars"
 msgstr ""
 
-#: midi2ly.py:1074
+#: midi2ly.py:1078
+msgid "suppress progress messages and warnings about excess voices"
+msgstr ""
+
+#: midi2ly.py:1079
 msgid "quantise note starts on DUR"
 msgstr ""
 
-#: midi2ly.py:1078
+#: midi2ly.py:1083
 msgid "use s instead of r for rests"
 msgstr ""
 
-#: midi2ly.py:1080
+#: midi2ly.py:1085
 msgid "DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:1083
+#: midi2ly.py:1088
 msgid "allow tuplet durations DUR*NUM/DEN"
 msgstr ""
 
-#: midi2ly.py:1092 lilypond-book.py:235 convert-ly.py:141 etf2ly.py:1212
+#: midi2ly.py:1096 lilypond-book.py:234 convert-ly.py:141 etf2ly.py:1212
 #: main.cc:176
 msgid "show warranty and copyright"
 msgstr ""
 
-#: midi2ly.py:1095
+#: midi2ly.py:1098
 msgid "treat every text as a lyric"
 msgstr ""
 
-#: midi2ly.py:1098
+#: midi2ly.py:1101
 msgid "Examples"
 msgstr ""
 
-#: midi2ly.py:1122
+#: midi2ly.py:1125
 msgid "no files specified on command line."
 msgstr ""
 
-#: abc2ly.py:1375
+#: abc2ly.py:1377
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
 "%s) to LilyPond input.\n"
 msgstr ""
 
-#: abc2ly.py:1391
+#: abc2ly.py:1394
 msgid "be strict about success"
 msgstr ""
 
-#: abc2ly.py:1393
+#: abc2ly.py:1397
 msgid "preserve ABC's notion of beams"
 msgstr ""
 
+#: abc2ly.py:1400
+msgid "suppress progress messages"
+msgstr ""
+
 #: lilypond-book.py:80
 msgid ""
 "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
@@ -1261,180 +1271,180 @@ msgstr ""
 msgid "Exiting (%d)..."
 msgstr ""
 
-#: lilypond-book.py:128
+#: lilypond-book.py:127
 msgid "FILTER"
 msgstr ""
 
-#: lilypond-book.py:131
+#: lilypond-book.py:130
 msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
 msgstr ""
 
-#: lilypond-book.py:135
+#: lilypond-book.py:134
 msgid ""
 "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
 msgstr ""
 
-#: lilypond-book.py:136
+#: lilypond-book.py:135
 msgid "FORMAT"
 msgstr ""
 
-#: lilypond-book.py:143
+#: lilypond-book.py:142
 msgid "add DIR to include path"
 msgstr ""
 
-#: 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
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:158
 msgid "DIR"
 msgstr ""
 
-#: lilypond-book.py:149
+#: lilypond-book.py:148
 msgid "format Texinfo output so that Info will look for images of music in DIR"
 msgstr ""
 
-#: lilypond-book.py:156
+#: lilypond-book.py:155
 msgid "PAD"
 msgstr ""
 
-#: lilypond-book.py:158
+#: lilypond-book.py:157
 msgid ""
 "pad left side of music to align music inspite of uneven bar numbers (in mm)"
 msgstr ""
 
-#: lilypond-book.py:163
+#: lilypond-book.py:162
 msgid "Print lilypond log messages according to LOGLEVEL"
 msgstr ""
 
-#: lilypond-book.py:169
+#: lilypond-book.py:168
 msgid "write lily-XXX files to DIR, link into --output dir"
 msgstr ""
 
-#: lilypond-book.py:174
+#: lilypond-book.py:173
 msgid ""
 "Load the additional python PACKAGE (containing e.g. a custom output format)"
 msgstr ""
 
-#: lilypond-book.py:175
+#: lilypond-book.py:174
 msgid "PACKAGE"
 msgstr ""
 
-#: lilypond-book.py:187
+#: lilypond-book.py:186
 msgid "write output to DIR"
 msgstr ""
 
-#: lilypond-book.py:192
+#: lilypond-book.py:191
 msgid "COMMAND"
 msgstr ""
 
-#: lilypond-book.py:193
+#: lilypond-book.py:192
 msgid "process ly_files using COMMAND FILE..."
 msgstr ""
 
-#: lilypond-book.py:198
+#: lilypond-book.py:197
 msgid "Redirect the lilypond output"
 msgstr ""
 
-#: lilypond-book.py:202
+#: lilypond-book.py:201
 msgid "Compile snippets in safe mode"
 msgstr ""
 
-#: lilypond-book.py:208
+#: lilypond-book.py:207
 msgid "do not fail if no lilypond output is found"
 msgstr ""
 
-#: lilypond-book.py:214
+#: lilypond-book.py:213
 msgid "do not fail if no PNG images are found for EPS files"
 msgstr ""
 
-#: lilypond-book.py:220
+#: lilypond-book.py:219
 msgid "write snippet output files with the same base name as their source file"
 msgstr ""
 
-#: lilypond-book.py:240
+#: lilypond-book.py:239
 msgid ""
 "run executable PROG instead of latex, or in\n"
 "case --pdf option is set instead of pdflatex"
 msgstr ""
 
-#: lilypond-book.py:242 lilypond-book.py:247
+#: lilypond-book.py:241 lilypond-book.py:246
 msgid "PROG"
 msgstr ""
 
-#: lilypond-book.py:246
+#: lilypond-book.py:245
 msgid "run executable PROG instead of texi2pdf"
 msgstr ""
 
-#: lilypond-book.py:253
+#: lilypond-book.py:252
 msgid "create PDF files for use with PDFTeX"
 msgstr ""
 
-#: lilypond-book.py:456
+#: lilypond-book.py:455
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:461
+#: lilypond-book.py:460
 msgid "Processing..."
 msgstr ""
 
-#: lilypond-book.py:466
+#: lilypond-book.py:465
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:485
+#: lilypond-book.py:484
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr ""
 
-#: lilypond-book.py:494
+#: lilypond-book.py:493
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:507
+#: lilypond-book.py:506
 #, python-format
 msgid "Writing `%s'..."
 msgstr ""
 
-#: lilypond-book.py:568
+#: lilypond-book.py:567
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:572
+#: lilypond-book.py:571
 #, python-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lilypond-book.py:579
+#: lilypond-book.py:578
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:590
+#: lilypond-book.py:589
 #, python-format
 msgid "Compiling %s..."
 msgstr ""
 
-#: lilypond-book.py:598
+#: lilypond-book.py:597
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:609
+#: lilypond-book.py:608
 #, python-format
 msgid "Removing `%s'"
 msgstr ""
 
-#: lilypond-book.py:676
+#: lilypond-book.py:699
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr ""
 
-#: lilypond-book.py:680
+#: lilypond-book.py:703
 #, python-format
 msgid ""
 "Setting LilyPond's loglevel to %s (from environment variable "
 "LILYPOND_LOGLEVEL)"
 msgstr ""
 
-#: lilypond-book.py:683
+#: lilypond-book.py:706
 msgid ""
 "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr ""
@@ -1535,6 +1545,11 @@ msgstr ""
 msgid "Other languages"
 msgstr ""
 
+#: website_post.py:127
+#, python-format
+msgid "About <a href=\"%s\">automatic language selection</a>."
+msgstr ""
+
 #: warn.cc:56
 #, c-format
 msgid "Log level set to %d\n"
@@ -1600,12 +1615,12 @@ msgstr ""
 msgid "invalid argument `%s' to option `%s'"
 msgstr ""
 
-#: flag.cc:110
+#: flag.cc:113
 #, c-format
 msgid "flag `%s' not found"
 msgstr ""
 
-#: flag.cc:130
+#: flag.cc:133
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr ""
@@ -1761,16 +1776,16 @@ msgstr ""
 msgid "cannot find or create: `%s'"
 msgstr ""
 
-#: dispatcher.cc:82
+#: dispatcher.cc:83
 msgid "Event class should be a symbol"
 msgstr ""
 
-#: dispatcher.cc:89
+#: dispatcher.cc:90
 #, c-format
 msgid "Unknown event class %s"
 msgstr ""
 
-#: dispatcher.cc:171
+#: dispatcher.cc:172
 #, c-format
 msgid "Junking event: %s"
 msgstr ""
@@ -2016,7 +2031,7 @@ msgstr ""
 msgid "MIDI output to `%s'..."
 msgstr ""
 
-#: note-collision.cc:504
+#: note-collision.cc:506
 msgid "ignoring too many clashing note columns"
 msgstr ""
 
@@ -2037,22 +2052,22 @@ msgstr ""
 msgid "giving up"
 msgstr ""
 
-#: page-layout-problem.cc:709
+#: page-layout-problem.cc:721
 msgid ""
 "cannot fit music on page: ragged-spacing was requested, but page was "
 "compressed"
 msgstr ""
 
-#: page-layout-problem.cc:712
+#: page-layout-problem.cc:724
 #, c-format
 msgid "cannot fit music on page: overflow is %f"
 msgstr ""
 
-#: page-layout-problem.cc:714
+#: page-layout-problem.cc:726
 msgid "compressing music to fit"
 msgstr ""
 
-#: page-layout-problem.cc:1176
+#: page-layout-problem.cc:1188
 msgid "staff-affinities should only decrease"
 msgstr ""
 
@@ -2069,16 +2084,16 @@ msgstr ""
 msgid "mark label must be a markup object"
 msgstr ""
 
-#: stem-engraver.cc:105
+#: stem-engraver.cc:110
 msgid "tremolo duration is too long"
 msgstr ""
 
-#: stem-engraver.cc:157
+#: stem-engraver.cc:162
 #, c-format
 msgid "adding note head to incompatible stem (type = %d/%d)"
 msgstr ""
 
-#: stem-engraver.cc:160
+#: stem-engraver.cc:165
 msgid "maybe input should specify polyphonic voices"
 msgstr ""
 
@@ -2170,7 +2185,7 @@ msgstr ""
 msgid "cannot have note heads and rests together on a stem"
 msgstr ""
 
-#: beam.cc:180
+#: beam.cc:181
 msgid "removing beam with no stems"
 msgstr ""
 
@@ -2848,7 +2863,7 @@ msgstr ""
 msgid "unterminated percent repeat"
 msgstr ""
 
-#: note-head.cc:85
+#: note-head.cc:86
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
 msgstr ""
@@ -2882,7 +2897,7 @@ msgstr ""
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
 msgstr ""
 
-#: rest.cc:171
+#: rest.cc:193
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
@@ -2901,13 +2916,13 @@ msgstr ""
 msgid "unterminated slur"
 msgstr ""
 
-#: slur-engraver.cc:191
+#: slur-engraver.cc:199
 msgid "cannot end slur"
 msgstr ""
 
 #. We already have a slur, so give a warning and completely ignore
 #. the new slur.
-#: slur-engraver.cc:208
+#: slur-engraver.cc:216
 msgid "already have slur"
 msgstr ""
 
@@ -2945,15 +2960,15 @@ msgstr ""
 msgid "Parsing..."
 msgstr ""
 
-#: score.cc:176
+#: score.cc:172
 msgid "already have music in score"
 msgstr ""
 
-#: score.cc:177
+#: score.cc:173
 msgid "this is the previous music"
 msgstr ""
 
-#: score.cc:182
+#: score.cc:178
 msgid "errors found, ignoring music expression"
 msgstr ""
 
@@ -3000,52 +3015,52 @@ msgstr ""
 msgid "Too much lookahead"
 msgstr ""
 
-#: parser.yy:827 parser.yy:1193 parser.yy:1226
+#: parser.yy:828 parser.yy:1229
 msgid "not a context mod"
 msgstr ""
 
-#: parser.yy:995
+#: parser.yy:1013
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:1019
+#: parser.yy:1037
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1943
-msgid "only \\consists takes non-string argument."
+#: parser.yy:1979
+msgid "only \\consists and \\remove take non-string argument."
 msgstr ""
 
-#: parser.yy:1956
+#: parser.yy:1992
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:2150
+#: parser.yy:2194
 msgid "not a rhythmic event"
 msgstr ""
 
-#: parser.yy:2246 parser.yy:2251
+#: parser.yy:2290 parser.yy:2295
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:2366
+#: parser.yy:2410
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:2518 parser.yy:2569
+#: parser.yy:2570 parser.yy:2621
 #, c-format
 msgid "not a duration: %d"
 msgstr ""
 
-#: parser.yy:2688
+#: parser.yy:2740
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2737
+#: parser.yy:2795
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: parser.yy:2997
+#: parser.yy:3055
 msgid "not a markup"
 msgstr ""
 
@@ -3109,35 +3124,35 @@ msgstr ""
 msgid "invalid character: `%s'"
 msgstr ""
 
-#: lexer.ll:868 lexer.ll:869
+#: lexer.ll:878 lexer.ll:879
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:1117 lexer.ll:1118
+#: lexer.ll:1127 lexer.ll:1128
 msgid "non-UTF-8 input"
 msgstr ""
 
-#: lexer.ll:1161 lexer.ll:1162
+#: lexer.ll:1171 lexer.ll:1172
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 
-#: lexer.ll:1162 lexer.ll:1163
+#: lexer.ll:1172 lexer.ll:1173
 msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: lexer.ll:1168 lexer.ll:1169
+#: lexer.ll:1178 lexer.ll:1179
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr ""
 
-#: parser-clef.scm:141 parser-clef.scm:181
+#: parser-clef.scm:143 parser-clef.scm:183
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr ""
 
-#: parser-clef.scm:142 parser-clef.scm:182
+#: parser-clef.scm:144 parser-clef.scm:184
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr ""
@@ -3175,12 +3190,12 @@ msgstr ""
 msgid "Found infinity or nan in output.  Substituting 0.0"
 msgstr ""
 
-#: output-ps.scm:313 output-svg.scm:556
+#: output-ps.scm:277 output-svg.scm:524
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr ""
 
-#: output-ps.scm:318 output-svg.scm:562
+#: output-ps.scm:282 output-svg.scm:530
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr ""
@@ -3189,19 +3204,19 @@ msgstr ""
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr ""
 
-#: paper.scm:304
+#: paper.scm:314
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr ""
 
-#: paper.scm:316
+#: paper.scm:326
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr ""
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:331
+#: paper.scm:341
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr ""
 
@@ -3314,59 +3329,72 @@ msgstr ""
 msgid "cannot find: ~A"
 msgstr ""
 
-#: lily.scm:701
+#: lily.scm:707
 msgid "Success: compilation successfully completed"
 msgstr ""
 
-#: lily.scm:702
+#: lily.scm:708
 msgid "Compilation completed with warnings or errors"
 msgstr ""
 
-#: lily.scm:764
+#: lily.scm:770
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr ""
 
-#: lily.scm:767
+#: lily.scm:773
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
 "~a"
 msgstr ""
 
-#: lily.scm:789 lily.scm:869
+#: lily.scm:795 lily.scm:881
 #, scheme-format
 msgid "failed files: ~S"
 msgstr ""
 
-#: lily.scm:860
+#: lily.scm:872
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr ""
 
-#: lily.scm:879 ps-to-png.scm:66
+#: lily.scm:891 ps-to-png.scm:66
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr ""
 
-#: lily-library.scm:761
+#: lily-library.scm:299
+msgid "Music unsuitable for context-mod"
+msgstr ""
+
+#: lily-library.scm:349
+#, scheme-format
+msgid "Cannot find context-def \\~a"
+msgstr ""
+
+#: lily-library.scm:365
+msgid "Music unsuitable for output-def"
+msgstr ""
+
+#: lily-library.scm:888
 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:835
+#: lily-library.scm:962
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr ""
 
-#: lily-library.scm:860
+#: lily-library.scm:987
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr ""
 
-#: lily-library.scm:866
+#: lily-library.scm:993
 msgid "old relative compatibility not used"
 msgstr ""
 
@@ -3380,43 +3408,43 @@ msgstr ""
 msgid "quoted music `~a' is empty"
 msgstr ""
 
-#: music-functions.scm:273
+#: music-functions.scm:274
 msgid "More alternatives than repeats.  Junking excess alternatives"
 msgstr ""
 
-#: music-functions.scm:302
+#: music-functions.scm:303
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
 msgstr ""
 
-#: music-functions.scm:634
+#: music-functions.scm:662
 msgid "Bad chord repetition"
 msgstr ""
 
-#: music-functions.scm:669
+#: music-functions.scm:697
 #, scheme-format
 msgid "music expected: ~S"
 msgstr ""
 
-#: music-functions.scm:985
+#: music-functions.scm:1013
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr ""
 
-#: music-functions.scm:1123
+#: music-functions.scm:1151
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr ""
 
-#: music-functions.scm:1183
+#: music-functions.scm:1211
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr ""
 
-#: music-functions.scm:1184
+#: music-functions.scm:1212
 msgid "Defaulting to 'any-octave."
 msgstr ""
 
-#: music-functions.scm:1521
+#: music-functions.scm:1549
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr ""
@@ -3517,54 +3545,54 @@ msgstr ""
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
 msgstr ""
 
-#: define-music-types.scm:752
+#: define-music-types.scm:765
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr ""
 
-#: define-music-types.scm:755
+#: define-music-types.scm:768
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr ""
 
-#: define-music-types.scm:774
+#: define-music-types.scm:787
 #, scheme-format
 msgid "unknown repeat type `~S'"
 msgstr ""
 
-#: define-music-types.scm:775
+#: define-music-types.scm:788
 msgid "See define-music-types.scm for supported repeats"
 msgstr ""
 
-#: translation-functions.scm:351
+#: translation-functions.scm:358
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:402
+#: translation-functions.scm:409
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:417 translation-functions.scm:429
+#: translation-functions.scm:424 translation-functions.scm:436
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:420
+#: translation-functions.scm:427
 msgid "Ignoring string request and recalculating."
 msgstr ""
 
-#: translation-functions.scm:432
+#: translation-functions.scm:439
 msgid "Ignoring note in tablature."
 msgstr ""
 
-#: translation-functions.scm:455
+#: translation-functions.scm:462
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr ""
 
-#: translation-functions.scm:560
+#: translation-functions.scm:567
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3620,17 +3648,17 @@ msgstr ""
 msgid "cannot find description for property ~S (~S)"
 msgstr ""
 
-#: ly-syntax-constructors.scm:65
+#: ly-syntax-constructors.scm:66
 #, scheme-format
 msgid "~a function cannot return ~a"
 msgstr ""
 
-#: ly-syntax-constructors.scm:74
+#: ly-syntax-constructors.scm:75
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr ""
 
-#: ly-syntax-constructors.scm:187
+#: ly-syntax-constructors.scm:188
 #, scheme-format
 msgid "Invalid property operation ~a"
 msgstr ""
index 3d088b526981748ddd7d7f2d8bdc9ee348fec97b..6927476be928b4c249761300bc550b3959751a1e 100755 (executable)
@@ -41,6 +41,8 @@ def exit_with_usage (n=0):
     sys.stderr.write (USAGE)
     sys.exit (n)
 
+TAGS = []
+
 if len (sys.argv) >= 2:
     in_dir = sys.argv[1]
     if not (os.path.isdir (in_dir)):
@@ -50,11 +52,10 @@ if len (sys.argv) >= 2:
         exit_with_usage (2)
     if not (os.path.isdir (DEST) and os.path.isdir (NEW_LYS)):
         exit_with_usage (3)
+    TAGS = os.listdir (in_dir)
 else:
     in_dir = ''
 
-TAGS = os.listdir (in_dir)
-
 # which convert-ly to use
 if os.path.isfile("out/bin/convert-ly"):
     conv_path='out/bin/'