documentation. It would be great if somebody could create
properly-formatted patches for these corrections.
-Technical requirements: ability to run @ref{Lilybuntu}.
+Technical requirements: ability to run @ref{Lilydev}.
@item LSR editor:
LSR contains many useful examples of lilypond, but some snippets
often find them in Ponds of Lilies) and new feature implementors.
Technical requirements: development environment (such as
-@ref{Lilybuntu}), ability to read+write scheme and/or C++ code.
+@ref{Lilydev}), ability to read+write scheme and/or C++ code.
@end itemize
contributors for access will almost always be turned down.
-@subsubheading Creating the @strong{Lilybuntu} respin
+@subsubheading Creating the @strong{Lilydev} respin
@enumerate
@uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel}.
@warning{Contributors on Windows or MacOS X wishing to compile
-code or documentation are strongly advised to use lilybuntu, as
-discussed in @ref{Quick start}.}
+code or documentation are strongly advised to use our Ubuntu
+LilyPond Developer Remix, as discussed in @ref{Quick start}.}
@node Mentors
@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.
+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
helpful users who may have never created a patch before.}
@menu
-* Lilybuntu::
+* Lilydev::
* Using lily-git::
-* Compiling with lilybuntu::
+* Compiling with lilydev::
* Now start work!::
@end menu
-@node Lilybuntu
-@section Lilybuntu
+@node Lilydev
+@section Lilydev
text.
@menu
-* Installing lilybuntu::
-* Configuring lilybuntu in virtualbox::
-* Using lilybuntu::
+* Installing lilydev::
+* Configuring lilydev in virtualbox::
+* Using lilydev::
@end menu
-@node Installing lilybuntu
-@subsection Installing lilybuntu
+@node Installing lilydev
+@subsection Installing lilydev
@enumerate
@item
@end example
In virtualization terminology, your main operating system is the
-@qq{host}, while lilybuntu is the @qq{guest}.
+@qq{host}, while lilydev is the @qq{guest}.
@item
-Download the @file{lilybuntu2.iso} disk image: (approximately 1
-GB)
+Download the Ubuntu LilyPond Developer Remix disk image:
+(approximately 1 GB)
@example
-@uref{http://files.lilynet.net/lilybuntu2.iso}
+@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso}
@end example
-@advanced{There is a md5sum available:
-@uref{http://files.lilynet.net/lilybuntu2.iso.md5}}
+@advanced{Some users might want these files, but if you don't
+recognize what they are, then you don't want them:
+@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.md5}
+@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.torrent}
+}
@item
-Install @file{lilybuntu2.iso} as the @qq{guest} operating system
-on your virtualized system.
-
-@itemize
+Create a new @qq{virtual machine} inside your virtualization
+software.
-@item
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.
@item
-When @file{lilybuntu2.iso} boots, it shows an ISOLINUX
+Install @file{lilydev2.iso} as the @qq{guest} operating system
+on your virtualized system.
+
+@enumerate
+
+@item
+When @file{lilydev2.iso} boots, it shows an ISOLINUX
@code{boot:} prompt. Type:
@example
@item
When prompted to remove the installation CD, go to
@clicksequence{Devices @click{} CD/DVD Devices} and de-select
-@file{lilybuntu2.iso}.
+@file{lilydev2.iso}.
-@end itemize
+@end enumerate
@advanced{
-The latest version of lilybuntu is based on Ubuntu 10.04.1; if you
+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.
Do any extra configuration for your virtualization software.
There are additional instructions for VirtualBox in
-@ref{Configuring lilybuntu in virtualbox}.
+@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.
-@advanced{not all hardware is supported in all virtualization
-tools. In particular, some contributors have reported problems
-with USB devices. 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}.}
-
@end enumerate
+@knownissues
+
+Not all hardware is supported in all virtualization tools. In
+particular, some contributors have reported problems with USB
+devices. 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}.
+
-@node Configuring lilybuntu in virtualbox
-@subsection Configuring lilybuntu in virtualbox
+@node Configuring lilydev in virtualbox
+@subsection Configuring lilydev in virtualbox
VirtualBox has extra @qq{guest additions} which can make the
virtualization easier to use (full-screen, easy file sharing
Terminal}, and enter your password when prompted.
@item
-Once the script is finished, restart Ubuntu to complete the
-installation.
+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}.
+
+@item
+Restart Ubuntu to complete the installation.
@advanced{If you do any kernel upgrades, you may need to re-run
these VBOXADDITIONS instructions.}
networked share folders in Windows. Consult external
documentation for this step.
-TODO: maybe we should just nuke this point? is it easier to do
-networked file sharing in osx, linux, etc, thus making the
-virtualbox "shared folders" not useful?
+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 lilybuntu
-@subsection Using lilybuntu
+@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.
@item
The rest of this manual assumes that you are using the
-command-line; go to @clicksequence{Applications @click{}
-Accessories @click{} Terminal}.
+command-line; double-click on the @q{Terminal} icon on the
+desktop.
@item
Pasting into a terminal is done with @code{Ctrl+Shift+v}.
+@item
+The @qq{Places} top-menu has shortcuts to a graphical
+@qq{navigator} like Windows Explorer or the MacOS X Finder.
+
+@item
+Right-click allows you to edit a file with gedit. We recommend
+using gedit.
+
@item
Some contributors have recommended: (pdf available for free)
@end itemize
-@c if you change this node name, you'll need to change the @ref in
-@c web/ and/or included/, along with all the translations.
@node Using lily-git
@section Using lily-git
@unnumberedsubsec Install and configuration of @command{lily-git.tcl}
@warning{The rest of this manual assumes that you are using the
-command-line; go to @clicksequence{Applications @click{}
-Accessories @click{} Terminal}.}
+command-line; double-click on the @q{Terminal} icon on the
+desktop.}
@enumerate
@item
-@code{lily-git.tcl} has already been installed for you. Simply type
-(or copy&paste):
+Type (or copy&paste) into the Terminal:
@example
-cd
-wish lily-git.tcl
+lily-git.tcl
@end example
@item
@end enumerate
-You should now progress to @ref{Compiling with lilybuntu}.
+You should now progress to @ref{Compiling with lilydev}.
@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}.}
-
-@subsubheading Other operating systems
-
-@enumerate
-@item
-If you haven't already, download and install Git.
-
-@itemize
-
-@item
-Lilybuntu users: git has already been installed for you.
-
-@item Windows users: download the @code{.exe} file labeled
-@qq{Full installer for official Git} from:
-
-@example
-@uref{http://code.google.com/p/msysgit/downloads/list}
-@end example
-
-@item Other operating systems: either install @command{git} with
-your package manager, or download it from the @qq{Binaries}
-section of:
-
-@example
-@uref{http://git-scm.com/download}
-@end example
-
-@end itemize
-
-
-@item
-Download the @command{lily-git.tcl} script from:
-
-@c don't change the cgit link below to gitweb; gitweb uses
-@c long filenames like "scripts_auxiliar_lily-git.tcl"
-
-@example
-@uref{http://git.sv.gnu.org/cgit/lilypond.git/plain/scripts/auxiliar/lily-git.tcl}
-@end example
-
-@item
-To run the program from the command line, navigate to the
-directory containing @command{lily-git.tcl} and enter:
-
-@example
-wish lily-git.tcl
-@end example
-
-@item
-Go read the lilybuntu instructions, starting from the @qq{get
-source} step.
-
-@end enumerate
-
@advanced{the @qq{Get source} button does not fetch the entire
history of the git repository, so utilities like @command{gitk}
will only be able to display the most recent additions. As you
-@node Compiling with lilybuntu
-@section Compiling with lilybuntu
+@node Compiling with lilydev
+@section Compiling with lilydev
-Lilybuntu 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{Lilybuntu}.
+information, see @rcontrib{Lilydev}.
@subsubheading Preparing the build
To prepare the build directory, enter (or copy&paste) the below
text. This should take less than a minute.
+@c we heavily recommend the out-of-tree build; do not change this!
+
@example
cd ~/lilypond-git/
sh autogen.sh --noconfigure
../configure
@end example
-@advanced{this is called an @qq{out-of-tree} build; we heavily
-recommend this build method.}
-
@subsubheading Building @code{lilypond}
Compiling lilypond will likely take between 5 and 30 minutes,
@node Now start work!
@section Now start work!
-Lilybuntu 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
particularly if they are working on major new features.
@menu
+* Manually installing lily-git.tcl::
* Starting with Git::
* Basic Git procedures::
* Advanced Git procedures::
@end menu
+@node Manually installing lily-git.tcl
+@section Manually installing lily-git.tcl
+
+We have created an easy-to-use GUI to simplify git for new
+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}.}
+
+@c there's some duplication in this section with stuff covered in
+@c Quick Start, but moving it into a macro inside included/ would
+@c be getting a bit icky. -gp
+
+@enumerate
+@item
+If you haven't already, download and install Git.
+
+@itemize
+
+@item Windows users: download the @code{.exe} file labeled
+@qq{Full installer for official Git} from:
+
+@example
+@uref{http://code.google.com/p/msysgit/downloads/list}
+@end example
+
+@item Other operating systems: either install @command{git} with
+your package manager, or download it from the @qq{Binaries}
+section of:
+
+@example
+@uref{http://git-scm.com/download}
+@end example
+
+@end itemize
+
+
+@item
+Download the @command{lily-git.tcl} script from:
+
+@c don't change the cgit link below to gitweb; gitweb uses
+@c long filenames like "scripts_auxiliar_lily-git.tcl"
+
+@example
+@uref{http://git.sv.gnu.org/cgit/lilypond.git/plain/scripts/auxiliar/lily-git.tcl}
+@end example
+
+@item
+To run the program from the command line, navigate to the
+directory containing @command{lily-git.tcl} and enter:
+
+@example
+wish lily-git.tcl
+@end example
+
+@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 55Mb). 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}.
+
+@item
+Navigate to the @file{lilypond-git/} directory to view the source
+files.
+
+@end enumerate
+
+@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}.}
+
+Further instructions are in @ref{Daily use of lily-git.tcl}.
+
+@advanced{the @qq{Get source} button does not fetch the entire
+history of the git repository, so utilities like @command{gitk}
+will only be able to display the most recent additions. As you
+continue to work with @command{lily-git.tcl}, the @qq{Update
+source} button will take any new additions and add it to whatever
+is currently in your repository's history.}
+
+
@node Starting with Git
@section Starting with Git
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.13.36"
+@c \version "2.13.44"
@c Translators: Till Paala
\score {
\relative c' {
\overrideTimeSignatureSettings
- #'Score
#'(4 . 4) % time signature fraction
#'(1 . 4) % base moment fraction
#'(3 1) % beatStructure
\relative c' {
\repeat unfold 8 { c8 } |
\overrideTimeSignatureSettings
- #'Score % context
#'(4 . 4) % timeSignatureFraction
#'(1 . 4) % baseMomentFraction
#'(3 1) % beatStructure
#'((end . (((1 . 8) . (3 1))))) % beamExceptions
\time 4/4
\repeat unfold 8 { c8 } |
- \revertTimeSignatureSettings #'Score #'(4 . 4)
+ \revertTimeSignatureSettings #'(4 . 4)
\time 4/4
\repeat unfold 8 { c8 } |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.13.36"
+@c \version "2.13.44"
@node Duraciones
@section Duraciones
\score {
\relative c' {
\overrideTimeSignatureSettings
- #'Score % context
#'(4 . 4) % timeSignatureFraction
#'(1 . 4) % baseMomentFraction
#'(3 1) % beatStructure
\relative c' {
\repeat unfold 8 { c8 } |
\overrideTimeSignatureSettings
- #'Score % context
#'(4 . 4) % timeSignatureFraction
#'(1 . 4) % baseMomentFraction
#'(3 1) % beatStructure
#'((end . (((1 . 8) . (3 1))))) % beamExceptions
\time 4/4
\repeat unfold 8 { c8 } |
- \revertTimeSignatureSettings #'Score #'(4 . 4)
+ \revertTimeSignatureSettings #'(4 . 4)
\time 4/4
\repeat unfold 8 { c8 } |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.13.36"
+@c \version "2.13.44"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, Jean-Charles Malahieude,
\score {
\relative c' {
\overrideTimeSignatureSettings
- #'Score % context
#'(4 . 4) % timeSignatureFraction
#'(1 . 4) % baseMomentFraction
#'(3 1) % beatStructure
\relative c' {
\repeat unfold 8 { c8 } |
\overrideTimeSignatureSettings
- #'Score % context
#'(4 . 4) % timeSignatureFraction
#'(1 . 4) % baseMomentFraction
#'(3 1) % beatStructure
#'((end . (((1 . 8) . (3 1))))) % beamExceptions
\time 4/4
\repeat unfold 8 c8 |
- \revertTimeSignatureSettings #'Score #'(4 . 4)
+ \revertTimeSignatureSettings #'(4 . 4)
\time 4/4
\repeat unfold 8 { c8 } |
}
}
@end lilypond
+@seealso
+Music Glossary:
+@rglos{ligature}.
-@c @seealso
-@c TODO: nothing here yet ...
-
+Notation Reference:
+@ref{Gregorian square neume ligatures},
+@ref{Ligatures}.
@knownissues
-
Horizontal spacing of ligatures is poor.
head style. Still, the note head style can be set, e.g., to
@code{vaticana_punctum} to produce punctum neumes. Similarly, the
@code{Mensural_ligature_engraver} automatically assembles
-mensural ligatures. See @ref{Ligatures}, for how ligature
-engravers work.
+mensural ligatures.
+@seealso
+Music Glossary:
+@rglos{ligature}.
+
+Notation Reference:
+@ref{White mensural ligatures},
+@ref{Ligatures}.
@node Gregorian chant contexts
@unnumberedsubsubsec Gregorian chant contexts
@seealso
+Music Glossary:
+@rglos{clef}.
+
Notation Reference:
@ref{Clef}.
@seealso
+Music Glossary:
+@rglos{accidental},
+@rglos{key signature}.
+
Notation Reference:
-@ref{Pitches}, @ref{Accidentals}, and @ref{Automatic accidentals}, give a
-general introduction of the use of accidentals. @ref{Key signature}, gives
-a general introduction of the use of key signatures.
+@ref{Pitches},
+@ref{Accidentals},
+@ref{Automatic accidentals},
+@ref{Key signature}.
Internals Reference:
@rinternals{KeySignature}.
@code{\finalis}.
@endpredefined
+@seealso
+Music Glossary:
+@rglos{caesura},
+@rglos{divisio}.
+
+Notation Reference:
+@ref{Breath marks}.
+
+Installed Files:
+@file{gregorian.ly}.
+
@node Gregorian articulation signs
@unnumberedsubsubsec Gregorian articulation signs
@end lilypond
+@seealso
+Notation Reference:
+@ref{Articulations and ornamentations}.
+
Snippets:
@rlsr{Ancient notation}.
@knownissues
-
Some articulations are vertically placed too closely to the
corresponding note heads.
@funindex \pes
@funindex \flexa
+
Two adjacent heads can be tied together with the @code{\pes} and
@code{\flexa} infix commands for a rising and falling line of melody,
respectively.
@funindex \augmentum
+
Use the unary music function @code{\augmentum} to add augmentum dots.
+@seealso
+Music Glossary:
+@rglos{ligature}.
-@c @seealso
-@c TODO: nothing here yet ...
+Notation Reference:
+@ref{Gregorian square neume ligatures},
+@ref{White mensural ligatures},
+@ref{Ligatures}.
@knownissues
-
When an @code{\augmentum} dot appears at the end of the last staff
within a ligature, it is sometimes vertically placed wrong. As a
workaround, add an additional skip note (e.g., @code{s8}) as last note
g1\espressivo
@end lilypond
+@funindex \cresc
+@funindex cresc
+@funindex \decresc
+@funindex decresc
+@funindex \dim
+@funindex dim
+Textual crescendo marks begin with @code{\cresc}.
+Textual decrescendos begin with @code{\decresc} or @code{\dim}.
+Extender lines are engraved as required.
+
+@lilypond[verbatim,quote,relative=2]
+g8\cresc a b c b c d e\mf |
+f8\decresc e d c e\> d c b |
+a1\dim ~ |
+a2. r4\! |
+@end lilypond
@funindex \crescTextCresc
@funindex crescTextCresc
@funindex \dimHairpin
@funindex dimHairpin
-Crescendos and decrescendos can be engraved as textual markings
-instead of hairpins. Dashed lines are printed to indicate their
-extent. The built-in commands @code{\crescTextCresc},
-@code{\dimTextDecresc}, @code{\dimTextDecr}, and @code{\dimTextDim}
-will tell LilyPond to use such textual marks instead of hairpins
-for all subsequent @code{\<} and @code{\>} commands. The corresponding
-@code{\crescHairpin} and @code{\dimHairpin} commands will revert
-to hairpins again:
-
+Textual marks for dynamic changes can also replace hairpins:
@lilypond[verbatim,quote,relative=2]
\crescTextCresc
-c2\< d | e f\!
+c4\< d e f\! |
\dimTextDecresc
-e2\> d | c b\!
+g4\> e d c\! |
+\dimTextDecr
+e4\> d c b\! |
+\dimTextDim
+d4\> c b a\! |
\crescHairpin
-c2\< d | e f\!
\dimHairpin
-e2\> d\!
+c4\< d\! e\> d\! |
@end lilypond
@funindex \dynamicNeutral
@funindex dynamicNeutral
+A @code{Dynamics} context is available to engrave dynamics on
+their own horizontal line. Use spacer rests to indicate timing.
+(Notes in a @code{Dynamics} context will also take up
+musical time, but will not be engraved.)
+The @code{Dynamics} context can usefully contain some other
+items such as text scripts, text spanners, and piano pedal marks.
+
+@lilypond[verbatim,quote]
+<<
+ \new Staff \relative c' {
+ c2 d4 e |
+ c4 e e,2 |
+ g'4 a g a |
+ c1 |
+ }
+ \new Dynamics {
+ s1\< |
+ s1\f |
+ s2\dim s2-"rit." |
+ s1\p |
+ }
+>>
+@end lilypond
@predefined
@code{\dynamicUp},
Internals Reference:
@rinternals{DynamicText},
@rinternals{Hairpin},
-@rinternals{DynamicLineSpanner}.
+@rinternals{DynamicLineSpanner},
+@rinternals{Dynamics}.
@node New dynamic marks
@cindex staves, keyed instruments
@cindex keyboard instrument staves
@cindex keyed instrument staves
+@cindex keyboard music, centering dynamics
+@cindex dynamics, centered in keyboard music
+@cindex piano music, centering dynamics
+@cindex centered dynamics in piano music
@funindex PianoStaff
@item Keyboard music can be written in parallel, as described in
@ref{Writing music in parallel}.
+@item Dynamics may be placed in a @code{Dynamics} context,
+between the two @code{Staff} contexts
+to align the dynamic marks on a horizontal line
+centered between the staves; see @ref{Dynamics}.
+
@item Fingerings are indicated with @ref{Fingering instructions}.
@item Organ pedal indications are inserted as articulations, see
Snippets:
@rlsr{Keyboards}.
-
-@knownissues
-
-@cindex keyboard music, centering dynamics
-@cindex dynamics, centered in keyboard music
-@cindex piano music, centering dynamics
-@cindex centered dynamics in piano music
-@funindex staff-padding
-
-Dynamics are not automatically centered, but workarounds do exist. One
-option is the @q{piano centered dynamics} template under
-@rlearning{Piano templates}; another option is to increase the
-@code{staff-padding} of dynamics as discussed in @rlearning{Moving
-objects}.
-
@node Changing staff manually
@unnumberedsubsubsec Changing staff manually
sustain pedal during piano performance. Pedalling to the final bar line
is indicated by omitting the final pedal off command.
+Pedal indications may be placed in a @code{Dynamics} context,
+which aligns them on a horizontal line.
@seealso
Notation Reference:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.13.36"
+@c \version "2.13.44"
@node Rhythms
@section Rhythms
@lilypond[quote,verbatim]
\score {
- \relative c' {
- \overrideTimeSignatureSettings
- #'Score % context
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
- #'(3 1) % beatStructure
- #'() % beamExceptions
- \time 4/4
- \repeat unfold 8 { c8 } |
+ \new Staff {
+ \relative c' {
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 { c8 } |
+ }
}
}
@end lilypond
-@code{\overrideTimeSignatureSettings} takes five arguments:
+@code{\overrideTimeSignatureSettings} takes four arguments:
@enumerate
-@item
-@code{@var{context}}, a Scheme symbol that describes the context
-to which the default setting will apply.
@item
@code{@var{timeSignatureFraction}}, a Scheme pair describing the
described in @ref{Setting automatic beam behavior}.
@end enumerate
+The context containing @code{\overrideTimeSignatureSettings} must
+be instantiated before the @code{\overrideTimeSignatureSettings}
+call is executed. That means it must either be explicitly
+instantiated or there must be music in the context before the
+@code{\overrideTimeSignatureSettings} call:
+
+@lilypond[quote,verbatim]
+\score {
+ \relative c' {
+ % This call will fail because the context isn't yet instantiated
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ c8^\markup {"Beamed (2 2)"}
+ \repeat unfold 7 { c8 } |
+ % This call will succeed
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ c8^\markup {"Beamed (3 1)"}
+ \repeat unfold 7 { c8 } |
+ }
+}
+@end lilypond
+
+
@cindex time signature properties, restoring default values
@cindex restoring default properties for time signatures
@funindex \revertTimeSignatureSettings
\relative c' {
\repeat unfold 8 { c8 } |
\overrideTimeSignatureSettings
- #'Score % context
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
- #'(3 1) % beatStructure
- #'((end . (((1 . 8) . (3 1))))) % beamExceptions
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
\time 4/4
\repeat unfold 8 { c8 } |
- \revertTimeSignatureSettings #'Score #'(4 . 4)
+ \revertTimeSignatureSettings #'(4 . 4)
\time 4/4
\repeat unfold 8 { c8 } |
}
}
@end lilypond
+Different values of default time signature properties can be established
+for different staves by moving the @code{Timing_translator} and the
+@code{Default_bar_line_engraver} from the @code{Score} context to the
+@code{Staff} context.
+
+@lilypond[quote, verbatim]
+\score {
+ \new StaffGroup <<
+ \new Staff {
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 {c''8}
+ }
+ \new Staff {
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(1 3) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 {c''8}
+ }
+ >>
+ \layout {
+ \context {
+ \Score
+ \remove "Timing_translator"
+ \remove "Default_bar_line_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Timing_translator"
+ \consists "Default_bar_line_engraver"
+ }
+ }
+}
+@end lilypond
+
@predefined
@code{\numericTimeSignature},
@code{\defaultTimeSignature}.
@lilypond[verbatim,quote,relative=1]
\tempo 4 = 40 ~ 46
-c4. ees8
-fis g aes c,
-b1
+c4. e8 a4 g
+b,2 d4 r
@end lilypond
Tempo indications with text can be used instead:
The line style, as well as the text string, can be defined as an
object property. This syntax is described in @ref{Line styles}.
-Text spanners are part of the @code{Dynamics} context; see
-@rinternals{Dynamics}.
-
@funindex \textSpannerUp
@funindex textSpannerUp
@rlsr{Expressive marks}.
Internals Reference:
-@rinternals{TextSpanner},
-@rinternals{Dynamics}.
+@rinternals{TextSpanner}.
@node Text marks
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
- texidoc = "The \cresc, \dim and \decresc spanners can now be redefined as
-postfix operators and produce one text spanner. Defining custom spanners is
-also easy. Hairpin and text crescendi can be easily mixed. \< and \> produce
-hairpins by default, \cresc etc. produce text spanners by default.
-"
+ texidoc = "Custom text spanners can be defined and used with hairpin
+ and text crescendos. @code{\<} and @code{\>} produce hairpins by
+ default, @code{\cresc} etc. produce text spanners by default."
doctitle = "Dynamics text spanner postfix"
}
'span-direction START
'span-type 'text
'span-text "cresc. poco a poco")
-% Redefine the existing \cresc, \dim and \decresc commands to use postfix syntax
-cresc =
-#(make-music 'CrescendoEvent
- 'span-direction START
- 'span-type 'text
- 'span-text "cresc.")
-dim =
-#(make-music 'DecrescendoEvent
- 'span-direction START
- 'span-type 'text
- 'span-text "dim.")
-decresc =
-#(make-music 'DecrescendoEvent
- 'span-direction START
- 'span-type 'text
- 'span-text "decresc.")
\relative c' {
c4\cresc d4 e4 f4 |
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading Beta test three of 2.14 -- LilyPond 2.13.44 released! @emph{Dec 25, 2010}
+
+LilyPond 2.13.44 is out; this is the third beta test of the
+upcoming 2.14 stable release. Users are invited to experiment
+with this version. New features since 2.12.3 are listed in the
+@qq{Changes} manual on the website section about
+@ref{Development}.
+
+There is still one Critical problem with this release: in one
+case, the vertical spacing is much too compressed. If you decide
+to test this version, do not be surprised to discover problems;
+just send us polite @ref{Bug reports}.
+
+@newsEnd
+
+
@newsItem
@subsubheading Beta test two of 2.14 -- LilyPond 2.13.43 released! @emph{Dec 14, 2010}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=13
-PATCH_LEVEL=44
+PATCH_LEVEL=45
MY_PATCH_LEVEL=
VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.43
+VERSION_DEVEL=2.13.44
-\version "2.13.33"
+\version "2.13.44"
\header {
texidoc = "
"
}
-\relative c' {
- \overrideTimeSignatureSettings
- #'Score
+\new Staff{
+ \relative c' {
+ \overrideTimeSignatureSettings
#'(4 . 4) % time signature fraction
#'(1 . 4) % base moment fraction
#'(1 1 1 1) % beatStructure
#'() % beamExceptions
- \overrideTimeSignatureSettings
- #'Score
+ \overrideTimeSignatureSettings
#'(3 . 4) % time signature fraction
#'(1 . 4) % base moment fraction
#'(1 1 1) % beatStructure
#'() % beamExceptions
- \time 4/4
- c8^\markup {"Beam by 1/4"} c c c c c c c |
- \time 3/4
- c8^\markup {"Beam by 1/4"} c c c c c |
- \revertTimeSignatureSettings #'Score #'(4 . 4)
- \revertTimeSignatureSettings #'Score #'(3 . 4)
- \time 4/4
- c8^\markup {"Beam by 1/2"} c c c c c c c |
- \time 3/4
- c8^\markup {"Beam by 3/4"} c c c c c |
+ \time 4/4
+ c8^\markup {"Beam by 1/4"} c c c c c c c |
+ \time 3/4
+ c8^\markup {"Beam by 1/4"} c c c c c |
+ \revertTimeSignatureSettings #'(4 . 4)
+ \revertTimeSignatureSettings #'(3 . 4)
+ \time 4/4
+ c8^\markup {"Beam by 1/2"} c c c c c c c |
+ \time 3/4
+ c8^\markup {"Beam by 3/4"} c c c c c |
+ }
}
--- /dev/null
+\version "2.13.44"
+
+\header
+{
+
+ texidoc = "Music functions may be attached to notes;
+in this case they must be introduced by a direction
+indicator. If a non-neutral direction is given (i.e.
+anything else than a dash), then the 'direction property
+of the resulting object is set accordingly."
+
+}
+
+dynScript =
+#(define-music-function (parser location text) (string?)
+ (make-dynamic-script text))
+
+\relative c' {
+ c1-\dynScript "pp"
+ c^\dynScript "fp"
+ c_\dynScript "spz"
+}
"
}
-\version "2.13.36"
<<
{
\time 3/4
--- /dev/null
+\version "2.13.44"
+
+\header {
+ texidoc = "
+Default values for time signature settings can vary by staff if the
+@code{Timing_translator} and @code{Default_bar_line_engraver} are
+moved from @code{Score} to @code{Staff}. In this case, the upper staff
+should be beamed 3/4, 1/4. The lower staff should be beamed 1/4, 3/4.
+"
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff {
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 {c''8}
+ }
+ \new Staff {
+ \overrideTimeSignatureSettings
+ #'(4 . 4) % timeSignatureFraction
+ #'(1 . 4) % baseMomentFraction
+ #'(1 3) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 {c''8}
+ }
+ >>
+ \layout {
+ \context {
+ \Score
+ \remove "Timing_translator"
+ \remove "Default_bar_line_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Timing_translator"
+ \consists "Default_bar_line_engraver"
+ }
+ }
+}
// in an 8th-note triplet with a quarter-note beat, 1/3 of a beat should be
// more important than 1/2.
if (infos_[i].rhythmic_importance_ >= 0)
- infos_[i].rhythmic_importance_ = (dt / options.base_moment_).den ();
+ infos_[i].rhythmic_importance_ = (int) (dt / options.base_moment_).den ();
i++;
}
}
else
{
- left_ = sr[LEFT];
- right_ = sr[RIGHT];
+ left_ = (short) sr[LEFT];
+ right_ = (short) sr[RIGHT];
}
}
Substitution_entry ()
return tallness_;
}
+Real
+Line_details::spring_length (Line_details const &next_line) const
+{
+ // space_ measures the spring which goes from the bottom refpoint
+ // of this to the top refpoint of next_line. We want to return
+ // the stretchable space between the bottom of this's extent to
+ // the top of next_line's extent.
+ Real refpoint_dist = tallness_ + refpoint_extent_[DOWN] - next_line.refpoint_extent_[UP];
+ Real space = next_line.title_ ? title_space_ : space_;
+ return max (0.0, space - refpoint_dist);
+}
+
Line_shape::Line_shape (Interval begin, Interval rest)
{
begin_ = begin;
satisfies the left inequality and is within a factor of 2 of
satistying the right one. Therefore either k = k' or k = k'+1 */
- int p = r.num ();
- int q = r.den ();
+ int p = (int) r.num ();
+ int q = (int) r.den ();
int k = intlog2 (q) - intlog2 (p);
if (shift_left(p, k) < q)
k++;
IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, rest);
void
-Figured_bass_engraver::listen_rest (Stream_event *ev)
+Figured_bass_engraver::listen_rest (Stream_event *)
{
have_rest_ = true;
}
}
Box
-Font_metric::get_indexed_char_dimensions (size_t k) const
+Font_metric::get_indexed_char_dimensions (size_t) const
{
return Box (Interval (0, 0), Interval (0, 0));
}
Line_details (Prob *pb, Output_def *paper);
Real full_height () const;
Real tallness () const;
+ Real spring_length (Line_details const &next_line) const;
};
/*
parse_symbol_list (char const *symbols)
{
while (isspace (*symbols))
- *symbols++;
+ symbols++;
string s = symbols;
replace_all (&s, '\n', ' ');
replace_all (&s, '\t', ' ');
Bezier back_dash, curve_dash;
Real seg_length = (back_segment.control_[3] -
back_segment.control_[0]).length ();
- int pattern_count = seg_length / dash_period;
+ int pattern_count = (int) (seg_length / dash_period);
Real pattern_length = 1.0 / (pattern_count + dash_fraction);
Real start_t, end_t;
for (int p = 0; p <= pattern_count; p++)
SCM program = scm_call_1 (proc, ly_symbol2scm (audio_->str_.c_str ()));
found = (program != SCM_BOOL_F);
if (found)
- program_byte = scm_to_int (program);
+ program_byte = (Byte) scm_to_int (program);
else
warning (_f ("no such MIDI instrument: `%s'", audio_->str_.c_str ()));
int
Page_breaking::max_systems_per_page () const
{
+ if (systems_per_page_)
+ return systems_per_page_;
return max_systems_per_page_;
}
int
Page_breaking::min_systems_per_page () const
{
+ if (systems_per_page_)
+ return systems_per_page_;
return min_systems_per_page_;
}
for (vsize i = 0; i < cached_line_details_.size (); i++)
{
+ Line_details const &cur = cached_line_details_[i];
+ Line_details const *const prev = (i > 0) ? &cached_line_details_[i-1] : 0;
Real ext_len;
if (cur_rod_height > 0)
- ext_len = cached_line_details_[i].tallness_;
+ ext_len = cur.tallness_;
else
- ext_len = cached_line_details_[i].full_height();
+ ext_len = cur.full_height();
+ Real spring_len = (i > 0) ? prev->spring_length (cur) : 0;
Real next_rod_height = cur_rod_height + ext_len;
- Real next_spring_height = cur_spring_height + cached_line_details_[i].space_;
+ Real next_spring_height = cur_spring_height + spring_len;
Real next_height = next_rod_height + (ragged () ? next_spring_height : 0)
- + min_whitespace_at_bottom_of_page (cached_line_details_[i]);
- int next_line_count = line_count + cached_line_details_[i].compressed_nontitle_lines_count_;
+ + min_whitespace_at_bottom_of_page (cur);
+ int next_line_count = line_count + cur.compressed_nontitle_lines_count_;
if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0))
|| too_many_lines (next_line_count)
- || (i > 0
- && cached_line_details_[i-1].page_permission_ == ly_symbol2scm ("force")))
+ || (prev && prev->page_permission_ == ly_symbol2scm ("force")))
{
- line_count = cached_line_details_[i].compressed_nontitle_lines_count_;
- cur_rod_height = cached_line_details_[i].full_height();
- cur_spring_height = cached_line_details_[i].space_;
+ line_count = cur.compressed_nontitle_lines_count_;
+ cur_rod_height = cur.full_height();
+ cur_spring_height = 0;
page_starter = i;
cur_page_height = page_height (first_page_num + ret, false);
- cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[i]);
+ cur_page_height -= min_whitespace_at_top_of_page (cur);
ret++;
}
res.penalty_ += cached_line_details_[line-1].page_penalty_;
if (system_count_on_this_page != systems_per_page_)
{
- res.penalty_ += TERRIBLE_SPACING_PENALTY;
+ res.penalty_ += abs (system_count_on_this_page - systems_per_page_) * TERRIBLE_SPACING_PENALTY;
res.system_count_status_ |= ((system_count_on_this_page < systems_per_page_))
? SYSTEM_COUNT_TOO_FEW : SYSTEM_COUNT_TOO_MANY;
}
{
Real overflow = spacer.configuration_length (spacer.force ())
- page_height_;
- warning (_f ("couldn't fit music on page: overflow is %f",
- overflow));
- warning (_ ("compressing music to fit"));
- vsize space_count = solution_.size ();
- Real spacing_increment = overflow / (space_count - 2);
- for (vsize i = 2; i < space_count; i++)
- solution_[i] -= (i-1) * spacing_increment;
+ if (ragged && overflow < 1e-6)
+ warning (_ ("couldn't fit music on page: ragged-spacing was requested, but page was compressed"));
+ else
+ {
+ warning (_f ("couldn't fit music on page: overflow is %f",
+ overflow));
+ warning (_ ("compressing music to fit"));
+ vsize space_count = solution_.size ();
+ Real spacing_increment = overflow / (space_count - 2);
+ for (vsize i = 2; i < space_count; i++)
+ solution_[i] -= (i-1) * spacing_increment;
+ }
}
}
if (rod_height_)
{
rod_height_ += line.tallness_;
+ spring_len_ += last_line_.spring_length (line);
+
}
else
{
first_line_ = line;
}
- // line.space_ measures the spring which goes from the bottom refpoint
- // of one system to the top refpoint of the next. spring_len_ measures
- // how much of that is stretchable.
- Real refpoint_dist = last_line_.tallness_
- + last_line_.refpoint_extent_[DOWN]
- - line.refpoint_extent_[UP];
- Real space = line.title_ ? last_line_.title_space_ : last_line_.space_;
- spring_len_ += max (0.0, space - refpoint_dist);
inverse_spring_k_ += line.inverse_hooke_;
last_line_ = line;
void
Page_spacing::prepend_system (const Line_details &line)
{
- if (!rod_height_)
+ if (rod_height_)
+ spring_len_ += line.spring_length (first_line_);
+ else
last_line_ = line;
rod_height_ -= first_line_.full_height ();
rod_height_ += first_line_.tallness_;
rod_height_ += line.full_height();
- Real refpoint_dist = line.tallness_
- + line.refpoint_extent_[DOWN]
- - first_line_.refpoint_extent_[UP];
- Real space = first_line_.title_ ? line.title_space_ : line.space_;
- spring_len_ += max (0.0, space - refpoint_dist);
inverse_spring_k_ += line.inverse_hooke_;
first_line_ = line;
extern bool music_strings_to_paths;
Stencil
-Pango_font::text_stencil (Output_def *state,
+Pango_font::text_stencil (Output_def * /* state */,
string str, bool music_string) const
{
/*
direction_less_event {
$$ = $1;
}
- | '-' music_function_event {
+ | script_dir music_function_event {
$$ = run_music_function (PARSER, $2);
+ if ($1)
+ {
+ unsmob_music ($$)->set_property ("direction", scm_from_int ($1));
+ }
}
| HYPHEN {
if (!PARSER->lexer_->is_lyric_state ())
if (n)
return n;
if (a)
- return a;
+ return a > (Rational)0;
return 0;
}
overrideTimeSignatureSettings =
#(define-music-function
- (parser location context time-signature base-moment beat-structure beam-exceptions)
- (symbol? pair? pair? cheap-list? cheap-list?)
+ (parser location time-signature base-moment beat-structure beam-exceptions)
+ (pair? pair? cheap-list? cheap-list?)
- (_i "Override @code{timeSignatureSettings} in @var{context}
+ (_i "Override @code{timeSignatureSettings}
for time signatures of @var{time-signature} to have settings
of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
;; TODO -- add warning if largest value of grouping is
;; greater than time-signature.
(let ((setting (make-setting base-moment beat-structure beam-exceptions)))
- (override-time-signature-setting time-signature setting context)))
+ (override-time-signature-setting time-signature setting)))
overrideProperty =
#(define-music-function (parser location name property value)
revertTimeSignatureSettings =
#(define-music-function
- (parser location context time-signature)
- (symbol? pair?)
+ (parser location time-signature)
+ (pair?)
- (_i "Revert @code{timeSignatureSettings} in @var{context}
+ (_i "Revert @code{timeSignatureSettings}
for time signatures of @var{time-signature}.")
- (revert-time-signature-setting time-signature context))
+ (revert-time-signature-setting time-signature))
rightHandFinger =
#(define-music-function (parser location finger) (number-or-string?)
stderr_write (UPDATE_MANUALLY);
return str
+@rule ((2, 13, 44),
+ _ ("Remove context from overrideTimeSignatureSettings and revertTimeSignatureSettings."))
+def conv(str):
+ str = re.sub (r"\\(override|revert)TimeSignatureSettings(\s+[^#]*)(#[^#]*)#", r"\\\1TimeSignatureSettings\2#", str)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
property
(revert-member current-value setting)))))
-(define-public (override-time-signature-setting time-signature setting . rest)
+(define-public (override-time-signature-setting time-signature setting)
"Override the time signature settings for the context in @var{rest},
with the new setting alist @var{setting}. "
(context-spec-music
'timeSignatureSettings
time-signature
setting)))
- (if (and (pair? rest) (symbol? (car rest)))
- (car rest)
- 'Voice)))
+ 'Timing))
-(define-public (score-override-time-signature-setting
- time-signature setting)
- (override-time-signature-setting
- time-signature setting 'Score))
-
-(define-public (revert-time-signature-setting
- time-signature . rest)
+(define-public (revert-time-signature-setting time-signature)
(context-spec-music
(make-apply-context
(lambda (c)
c
'timeSignatureSettings
time-signature)))
- (if (and (pair? rest) (symbol? (car rest)))
- (car rest)
- 'Voice)))
+ 'Timing))
(let ((this-fret (calc-fret (ly:event-property note 'pitch)
string
tuning)))
+ (if (< this-fret 0)
+ (ly:warning (_ "Negative fret for pitch ~a on string ~a")
+ (note-pitch note) string))
(set! string-fret-fingering-tuples
(cons (list string
this-fret