Andrew Hawryluk <andrew@obi-wan.(none)>
Andrew Wilson <andrew@rivendale.net>
Arjan Bos <arjan.bos@hetnet.nl>
+Benkő Pál <benko.pal@gmail.com>
Boris Shingarov <b1@shingarov.com>
Boris Shingarov <shingarov@gmail.com>
Carl D. Sorensen <carldsorensen>
Carl D. Sorensen <c_sorensen@byu.edu>
+Carl D. Sorensen <carl.d.sorensen@gmail.com>
+Colin Campbell <colinpkcampbell@gmail.com>
Chris Snyder <csnyder@adoromusicpub.com>
Damien Heurtebise <famille.heurtebise@free.fr>
Daniel Johnson <il.basso.buffo@gmail.com>
James Lowe <james@james-lily.(none)>
James Lowe <james.lowe@datacore.com>
James Lowe <jlowe@james-ubuntu.(none)>
+Janek Warchoł <janek.lilypond@gmail.com>
+Janek Warchoł <lemniskata.bernoullego@gmail.com>
+Janek Warchoł <lemniskata.bernoulliego@gmail.com>
Jan Nieuwenhuizen <jan>
Jan Nieuwenhuizen <janneke>
Jan Nieuwenhuizen <janneke@gnu.org>
* Doc build::
* Website build::
* Building an Ubuntu distro::
+* Building GUB::
@end menu
getting source files and building lp and docs.
@end enumerate
+
+@node Building GUB
+@section Building GUB
+
+GUB - the Grand Unified Builder - is used to build the release
+versions of LilyPond. For background information, see
+@ref{Grand Unified Builder (GUB)}. The simplest way to set up a
+GUB build environment is to use a virtual machine with LilyDev
+(@ref{LilyDev}). Follow the instructions on that page to set this
+up. Make sure that your virtual machine has enough disk space -
+a GUB installation takes over 30 GBytes of disk space, and if you
+allocate too little, it will fail during the setting up stage and
+you will have to start again. 64 GBytes should be sufficient.
+
+While GUB is being built, any interruptions are likely to make it
+almost impossible to restart. If at all possible, leave the build
+to continue uniterrupted.
+
+Download GUB and start the set up:
+
+@example
+git clone git://github.com/gperciva/gub/gub.git
+cd gub
+make bootstrap
+@end example
+
+This downloads and installs a number of packages. You may find
+some fail during download and you will need to download them
+manually. For example, the perl archive. If this happens,
+download it from
+@uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
+archive to @file{gub/downloads/perl/}. Continue the set up with:
+
+@example
+make bootstrap
+@end example
+
+Once this has completed successfully, you can build the LilyPond
+release package. However, this uses an archived version of the
+regression tests, so it is better to download this first.
+Download the test output from lilypond.org:
+
+@smallexample
+@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
+@end smallexample
+
+Copy the tarball into @file{gub/regtests/}, and tell the build
+system that you have done this:
+
+@example
+touch regtests/ignore
+@end example
+
+Now start the GUB build:
+
+@example
+make lilypond
+@end example
+
+That's it. This will build LilyPond from current master. To build
+the current unstable release, run:
+
+@example
+make LILYPOND_BRANCH=release/unstable lilypond
+@end example
git fetch
git checkout origin/release/unstable
git merge origin
+make po-replace
vi Documentation/web/news-front.itexi Documentation/web/news.itexi
@end example
Commit, push, switch back to master (or wherever else):
@example
+git commit -m "PO: update template." po/lilypond.pot
git commit -m "Release: update news." Documentation/web/
git push origin HEAD:release/unstable
git checkout master
@item
Run convert-ly on all files, bump parser minimum version.
+@item
+Update lilypond.pot:
+
+@example
+make po-replace
+@end example
+
@item
Make directories on lilypond.org:
@itemize
@item
-submit pots for translation: send url of tarball to
-translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot
+submit po template for translation: send url of tarball to
+coordinator@@translationproject.org, mentioning lilypond-VERSION.pot
@item
update links to distros providing lilypond packages? link in:
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.15.32"
+@c \version "2.15.39"
@c Translators: Till Paala
\book {
\header { tagline = ##f }
\relative c' {
- \footnote #'(0.5 . -2) #'NoteHead
+ <>\footnote #'(0.5 . -2) #'NoteHead
\markup { Die erste Note }
a'4 b8
- \footnote #'(0.5 . 1) #'NoteHead
+ <>\footnote #'(0.5 . 1) #'NoteHead
\markup { Die dritte Note }
e c4 d4
}
\header { tagline = ##f }
\relative c' {
<
- c-\footnote #'(1 . -1.25) "Hier ein C"
- es-\footnote #'(2 . -0.25) \markup { \italic "Ein Es" }
- g-\footnote #'(2 . 3) \markup { \bold "Das ist ein G" }
+ c\footnote #'(1 . -1.25) "Hier ein C"
+ es\footnote #'(2 . -0.25) \markup { \italic "Ein Es" }
+ g\footnote #'(2 . 3) \markup { \bold "Das ist ein G" }
>1
}
}
\book {
\header { copyright = \markup { "Copyright 1970" } }
\relative c' {
- \footnote #'(-3 . 0) #'DynamicText
+ <>\footnote #'(-3 . 0) #'DynamicText
\markup { \bold Forte }
- \footnote #'(0 . 1.5) #'Slur
+ <>\footnote #'(0 . 1.5) #'Slur
\markup { Ein Bogen }
a'4\f(
- \footnote #'(0 . -2) #'Beam
+ <>\footnote #'(0 . -2) #'Beam
\markup { Balken }
b8)[ e]
- \footnote #'(1 . -1) #'Stem
+ <>\footnote #'(1 . -1) #'Stem
\markup { \teeny { Das ist ein Hals } }
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
+ <>\footnote #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { Ein Warnungsversetzungszeichen }
- \footnote #'(0.5 . -0.5) #'TextScript
+ <>\footnote #'(0.5 . -0.5) #'TextScript
\markup \italic { Langsamer hier }
dis?4_"rit."
}
\book {
\header { tagline = ##f }
\relative c' {
- a'4-\footnote
+ a'4\footnote
"1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. Die erste Note" }
b8
- e-\footnote
+ e\footnote
\markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. Die zweite Note"
c4
- d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
+ d\p\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
}
}
@end lilypond
\header { tagline = ##f }
\relative c' {
<
- c-\footnote "1" #'(1 . -1.25) "1. C"
- es-\footnote
+ c\footnote "1" #'(1 . -1.25) "1. C"
+ es\footnote
\markup { \bold "b" } #'(2 . -0.25) "b. E-flat"
- g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
+ g\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
>1
}
}
\book {
\header { tagline = ##f }
\relative c' {
- \footnote
+ <>\footnote
\markup { \teeny 1 } #'(-3 . 0) #'DynamicText
\markup { 1. \bold Forte }
- \footnote
+ <>\footnote
\markup { \teeny b } #'(0 . 1.5) #'Slur
\markup { b. Ein Bogen }
a'4\f(
- \footnote
+ <>\footnote
\markup { \teeny 3 } #'(0 . -2) #'Beam
\markup { 3. Balken }
b8)[ e]
- \footnote
+ <>\footnote
\markup { 4 } #'(1 . -1) #'Stem
\markup { \bold 4. { Das ist ein Hals } }
c4
- \footnote
+ <>\footnote
\markup \concat \teeny { "sharp (v)" } #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { v. Ein Warnungsversetzungszeichen }
- \footnote
+ <>\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
\markup \italic { a. Langsamer hier }
dis?4_"rit."
\breathe
- \footnote
+ <>\footnote
\markup { \teeny \musicglyph #"rests.4" } #'(1.5 . -0.25) #'BreathingSign
\markup { \null }
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.15.32"
+@c \version "2.15.39"
@node Entrada y salida generales
@chapter Entrada y salida generales
\book {
\header { tagline = ##f }
\relative c' {
- \footnote #'(0.5 . -2) #'NoteHead
+ <>\footnote #'(0.5 . -2) #'NoteHead
\markup { The first note }
a'4 b8
- \footnote #'(0.5 . 1) #'NoteHead
+ <>\footnote #'(0.5 . 1) #'NoteHead
\markup { The third note }
e c4 d4
}
\header { tagline = ##f }
\relative c' {
<
- c-\footnote #'(1 . -1.25) "Here is a C"
- es-\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
- g-\footnote #'(2 . 3) \markup { \bold "This is a G" }
+ c\footnote #'(1 . -1.25) "Here is a C"
+ es\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
+ g\footnote #'(2 . 3) \markup { \bold "This is a G" }
>1
}
}
\book {
\header { copyright = \markup { "Copyright 1970" } }
\relative c' {
- \footnote #'(-3 . 0) #'DynamicText
+ <>\footnote #'(-3 . 0) #'DynamicText
\markup { \bold Forte }
- \footnote #'(0 . 1.5) #'Slur
+ <>\footnote #'(0 . 1.5) #'Slur
\markup { A slur }
a'4\f(
- \footnote #'(0 . -2) #'Beam
+ <>\footnote #'(0 . -2) #'Beam
\markup { Beam }
b8)[ e]
- \footnote #'(1 . -1) #'Stem
+ <>\footnote #'(1 . -1) #'Stem
\markup { \teeny { This is a stem } }
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
+ <>\footnote #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { A cautionary accidental }
- \footnote #'(0.5 . -0.5) #'TextScript
+ <>\footnote #'(0.5 . -0.5) #'TextScript
\markup \italic { Slow Down }
dis?4_"rit."
}
\book {
\header { tagline = ##f }
\relative c' {
- a'4-\footnote
+ a'4\footnote
"1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
b8
- e-\footnote
+ e\footnote
\markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
c4
- d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
+ d\p\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
}
}
@end lilypond
\header { tagline = ##f }
\relative c' {
<
- c-\footnote "1" #'(1 . -1.25) "1. C"
- es-\footnote
+ c\footnote "1" #'(1 . -1.25) "1. C"
+ es\footnote
\markup { \bold "b" } #'(2 . -0.25) "b. E-flat"
- g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
+ g\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
>1
}
}
\book {
\header { tagline = ##f }
\relative c' {
- \footnote
+ <>\footnote
\markup { \teeny 1 } #'(-3 . 0) #'DynamicText
\markup { 1. \bold Forte }
- \footnote
+ <>\footnote
\markup { \teeny b } #'(0 . 1.5) #'Slur
\markup { b. A slur }
a'4\f(
- \footnote
+ <>\footnote
\markup { \teeny 3 } #'(0 . -2) #'Beam
\markup { 3. Beam }
b8)[ e]
- \footnote
+ <>\footnote
\markup { 4 } #'(1 . -1) #'Stem
\markup { \bold 4. { This is a stem } }
c4
- \footnote
+ <>\footnote
\markup \concat \teeny { "sharp (v)" }
#'(0 . 0.5) #'AccidentalCautionary
\markup \italic { v. A cautionary accidental }
- \footnote
+ <>\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
\markup \italic { a. Slow Down }
dis?4_"rit."
\breathe
- \footnote
+ <>\footnote
\markup { \teeny \musicglyph #"rests.4" }
#'(1.5 . -0.25) #'BreathingSign
\markup { \null }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.15.32"
+@c \version "2.15.39"
@c Translators: Jean-Charles Malahieude, Valentin Villenave
\book {
\header { tagline = ##f }
\relative c' {
- \footnote #'(0.5 . -2) #'NoteHead
+ <>\footnote #'(0.5 . -2) #'NoteHead
\markup { La première note }
a'4 b8
- \footnote #'(0.5 . 1) #'NoteHead
+ <>\footnote #'(0.5 . 1) #'NoteHead
\markup { La troisième note }
e c4 d4
}
\header { tagline = ##f }
\relative c' {
<
- c-\footnote #'(1 . -1.25) "Voici un do"
- es-\footnote #'(2 . -0.25) \markup { \italic "Un mi bémol" }
- g-\footnote #'(2 . 3) \markup { \bold "Ceci est un sol" }
+ c\footnote #'(1 . -1.25) "Voici un do"
+ es\footnote #'(2 . -0.25) \markup { \italic "Un mi bémol" }
+ g\footnote #'(2 . 3) \markup { \bold "Ceci est un sol" }
>1
}
}
\book {
\header { copyright = \markup { "Copyright 1970" } }
\relative c' {
- \footnote #'(-3 . 0) #'DynamicText
+ <>\footnote #'(-3 . 0) #'DynamicText
\markup { \bold Forte }
- \footnote #'(0 . 1.5) #'Slur
+ <>\footnote #'(0 . 1.5) #'Slur
\markup { A slur }
a'4\f(
- \footnote #'(0 . -2) #'Beam
+ <>\footnote #'(0 . -2) #'Beam
\markup { Beam }
b8)[ e]
- \footnote #'(1 . -1) #'Stem
+ <>\footnote #'(1 . -1) #'Stem
\markup { \teeny { This is a stem } }
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
+ <>\footnote #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { A cautionary accidental }
- \footnote #'(0.5 . -0.5) #'TextScript
+ <>\footnote #'(0.5 . -0.5) #'TextScript
\markup \italic { Slow Down }
dis?4_"rit."
}
\book {
\header { tagline = ##f }
\relative c' {
- a'4-\footnote
+ a'4\footnote
"1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
b8
- e-\footnote
+ e\footnote
\markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
c4
- d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
+ d\p\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
}
}
@end lilypond
\header { tagline = ##f }
\relative c' {
<
- c-\footnote "1" #'(1 . -1.25) "1. C"
- es-\footnote
+ c\footnote "1" #'(1 . -1.25) "1. C"
+ es\footnote
\markup { \bold "b" } #'(2 . -0.25) "b. E-flat"
- g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
+ g\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
>1
}
}
\book {
\header { tagline = ##f }
\relative c' {
- \footnote
+ <>\footnote
\markup { \teeny 1 } #'(-3 . 0) #'DynamicText
\markup { 1. \bold Forte }
- \footnote
+ <>\footnote
\markup { \teeny b } #'(0 . 1.5) #'Slur
\markup { b. A slur }
a'4\f(
- \footnote
+ <>\footnote
\markup { \teeny 3 } #'(0 . -2) #'Beam
\markup { 3. Beam }
b8)[ e]
- \footnote
+ <>\footnote
\markup { 4 } #'(1 . -1) #'Stem
\markup { \bold 4. { This is a stem } }
c4
- \footnote
+ <>\footnote
\markup \concat \teeny { "sharp (v)" }
#'(0 . 0.5) #'AccidentalCautionary
\markup \italic { v. A cautionary accidental }
- \footnote
+ <>\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
\markup \italic { a. Slow Down }
dis?4_"rit."
\breathe
- \footnote
+ <>\footnote
\markup { \teeny \musicglyph #"rests.4" }
#'(1.5 . -0.25) #'BreathingSign
\markup { \null }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.15.32"
+@c \version "2.15.39"
@c Translators: Yoshiki Sawada
\book {
\header { tagline = ##f }
\relative c' {
- \footnote #'(0.5 . -2) #'NoteHead
+ <>\footnote #'(0.5 . -2) #'NoteHead
\markup { The first note }
a'4 b8
- \footnote #'(0.5 . 1) #'NoteHead
+ <>\footnote #'(0.5 . 1) #'NoteHead
\markup { The third note }
e c4 d4
}
\header { tagline = ##f }
\relative c' {
<
- c-\footnote #'(1 . -1.25) "Here is a C"
- es-\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
- g-\footnote #'(2 . 3) \markup { \bold "This is a G" }
+ c\footnote #'(1 . -1.25) "Here is a C"
+ es\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
+ g\footnote #'(2 . 3) \markup { \bold "This is a G" }
>1
}
}
\book {
\header { copyright = \markup { "Copyright 1970" } }
\relative c' {
- \footnote #'(-3 . 0) #'DynamicText
+ <>\footnote #'(-3 . 0) #'DynamicText
\markup { \bold Forte }
- \footnote #'(0 . 1.5) #'Slur
+ <>\footnote #'(0 . 1.5) #'Slur
\markup { A slur }
a'4\f(
- \footnote #'(0 . -2) #'Beam
+ <>\footnote #'(0 . -2) #'Beam
\markup { Beam }
b8)[ e]
- \footnote #'(1 . -1) #'Stem
+ <>\footnote #'(1 . -1) #'Stem
\markup { \teeny { This is a stem } }
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
+ <>\footnote #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { A cautionary accidental }
- \footnote #'(0.5 . -0.5) #'TextScript
+ <>\footnote #'(0.5 . -0.5) #'TextScript
\markup \italic { Slow Down }
dis?4_"rit."
}
\book {
\header { tagline = ##f }
\relative c' {
- a'4-\footnote
+ a'4\footnote
"1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
b8
- e-\footnote
+ e\footnote
\markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
c4
- d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
+ d\p\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
}
}
@end lilypond
\header { tagline = ##f }
\relative c' {
<
- c-\footnote "1" #'(1 . -1.25) "1. C"
- es-\footnote
+ c\footnote "1" #'(1 . -1.25) "1. C"
+ es\footnote
\markup { \bold "b" } #'(2 . -0.25) "b. E-flat"
- g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
+ g\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
>1
}
}
\book {
\header { tagline = ##f }
\relative c' {
- \footnote
+ <>\footnote
\markup { \teeny 1 } #'(-3 . 0) #'DynamicText
\markup { 1. \bold Forte }
- \footnote
+ <>\footnote
\markup { \teeny b } #'(0 . 1.5) #'Slur
\markup { b. A slur }
a'4\f(
- \footnote
+ <>\footnote
\markup { \teeny 3 } #'(0 . -2) #'Beam
\markup { 3. Beam }
b8)[ e]
- \footnote
+ <>\footnote
\markup { 4 } #'(1 . -1) #'Stem
\markup { \bold 4. { This is a stem } }
c4
- \footnote
+ <>\footnote
\markup \concat \teeny { "sharp (v)" }
#'(0 . 0.5) #'AccidentalCautionary
\markup \italic { v. A cautionary accidental }
- \footnote
+ <>\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
\markup \italic { a. Slow Down }
dis?4_"rit."
\breathe
- \footnote
+ <>\footnote
\markup { \teeny \musicglyph #"rests.4" }
#'(1.5 . -0.25) #'BreathingSign
\markup { \null }
-\version "2.15.18"
+\version "2.15.39"
\include "example-header.ily"
\paper {
f8 f4 e8 d c f f f | % 1
% the \scaleDurations command below makes 5 notes last the
% duration of a dotted quarter
- e8 c4 \scaleDurations #'(3 . 2) { \times 4/5{e16[ d e d e]} } e8 f4 | % 2
+ e8 c4 \scaleDurations 3/2 { \times 4/5{e16[ d e d e]} } e8 f4 | % 2
g2. ~ g4. | % 3
- f8 d4 f4. \scaleDurations #'(3 . 2) { \times 4/6{ g16[ f e f e f]}} % 4
+ f8 d4 f4. \scaleDurations 3/2 { \times 4/6{ g16[ f e f e f]}} % 4
g8 g4 g4. e4. | % 5
fis8 d4 e8\startGroup g4\stopGroup f8[ e d] | % 6
c2. r4. | % 7
%\set Staff.instrumentName = "Triplum"
\set Staff.instrumentName = \incipitTriplum
\set Staff.shortInstrumentName = "Tr."
- \set Staff.timeSignatureFraction = #'(9 . 8)
- \scaleDurations #'(2 . 3)
+ \set Staff.timeSignatureFraction = 9/8
+ \scaleDurations 2/3
\context Voice = "triplum" { \global \triplumNotes }
-% \scaleDurations #'(2 . 3)
+% \scaleDurations 2/3
% \context Voice = "slashes" { \triplumSkips }
\new Lyrics { \lyricsto "triplum" { \triplumWords }}
>>
%\set Staff.instrumentName = "Motetus"
\set Staff.instrumentName = \incipitMotetus
\set Staff.shortInstrumentName = "M."
- \set Staff.timeSignatureFraction = #'(9 . 8)
- \scaleDurations #'(2 . 3)
+ \set Staff.timeSignatureFraction = 9/8
+ \scaleDurations 2/3
\context Voice = "motetus" { \global \motetusNotes }
\new Lyrics { \lyricsto "motetus" { \motetusWords }}
>>
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.15.32"
+@c \version "2.15.39"
@node General input and output
@chapter General input and output
\book {
\header { tagline = ##f }
\relative c' {
- \footnote #'(0.5 . -2) #'NoteHead
+ <>\footnote #'(0.5 . -2) #'NoteHead
\markup { The first note }
a'4 b8
- \footnote #'(0.5 . 1) #'NoteHead
+ <>\footnote #'(0.5 . 1) #'NoteHead
\markup { The third note }
e c4 d4
}
\header { tagline = ##f }
\relative c' {
<
- c-\footnote #'(1 . -1.25) "Here is a C"
- es-\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
- g-\footnote #'(2 . 3) \markup { \bold "This is a G" }
+ c\footnote #'(1 . -1.25) "Here is a C"
+ es\footnote #'(2 . -0.25) \markup { \italic "An E-flat" }
+ g\footnote #'(2 . 3) \markup { \bold "This is a G" }
>1
}
}
\book {
\header { copyright = \markup { "Copyright 1970" } }
\relative c' {
- \footnote #'(-3 . 0) #'DynamicText
+ <>\footnote #'(-3 . 0) #'DynamicText
\markup { \bold Forte }
- \footnote #'(0 . 1.5) #'Slur
+ <>\footnote #'(0 . 1.5) #'Slur
\markup { A slur }
a'4\f(
- \footnote #'(0 . -2) #'Beam
+ <>\footnote #'(0 . -2) #'Beam
\markup { Beam }
b8)[ e]
- \footnote #'(1 . -1) #'Stem
+ <>\footnote #'(1 . -1) #'Stem
\markup { \teeny { This is a stem } }
c4
- \footnote #'(0 . 0.5) #'AccidentalCautionary
+ <>\footnote #'(0 . 0.5) #'AccidentalCautionary
\markup \italic { A cautionary accidental }
- \footnote #'(0.5 . -0.5) #'TextScript
+ <>\footnote #'(0.5 . -0.5) #'TextScript
\markup \italic { Slow Down }
dis?4_"rit."
}
\book {
\header { tagline = ##f }
\relative c' {
- a'4-\footnote
+ a'4\footnote
"1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
b8
- e-\footnote
+ e\footnote
\markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
c4
- d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
+ d\p\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
}
}
@end lilypond
\header { tagline = ##f }
\relative c' {
<
- c-\footnote "1" #'(1 . -1.25) "1. C"
- es-\footnote
+ c\footnote "1" #'(1 . -1.25) "1. C"
+ es\footnote
\markup { \bold "b" } #'(2 . -0.25) "b. E-flat"
- g-\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
+ g\footnote "3" #'(2 . 3) \markup { \italic "iii. G" }
>1
}
}
\book {
\header { tagline = ##f }
\relative c' {
- \footnote
+ <>\footnote
\markup { \teeny 1 } #'(-3 . 0) #'DynamicText
\markup { 1. \bold Forte }
- \footnote
+ <>\footnote
\markup { \teeny b } #'(0 . 1.5) #'Slur
\markup { b. A slur }
a'4\f(
- \footnote
+ <>\footnote
\markup { \teeny 3 } #'(0 . -2) #'Beam
\markup { 3. Beam }
b8)[ e]
- \footnote
+ <>\footnote
\markup { 4 } #'(1 . -1) #'Stem
\markup { \bold 4. { This is a stem } }
c4
- \footnote
+ <>\footnote
\markup \concat \teeny { "sharp (v)" }
#'(0 . 0.5) #'AccidentalCautionary
\markup \italic { v. A cautionary accidental }
- \footnote
+ <>\footnote
\markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
\markup \italic { a. Slow Down }
dis?4_"rit."
\breathe
- \footnote
+ <>\footnote
\markup { \teeny \musicglyph #"rests.4" }
#'(1.5 . -0.25) #'BreathingSign
\markup { \null }
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.15.18"
+@c \version "2.15.39"
@node Rhythms
@section Rhythms
is 1) to the duration. This will not affect the appearance of the
notes or rests produced, but the altered duration will be used in
calculating the position within the measure and setting the duration
-in the MIDI output. Multiplying factors may be combined such as
-@code{*L*M/N}.
+in the MIDI output. Multiplying factors may be combined like
+@code{*L*M/N}. Factors are part of the duration: if
+you don't specify a duration for subsequent notes, the default
+duration taken from the preceding note includes any scaling factor.
In the following example, the first three notes take up exactly
two beats, but no triplet bracket is printed.
@lilypond[quote,relative=2,verbatim]
\time 2/4
% Alter durations to triplets
-a4*2/3 gis4*2/3 a4*2/3
+a4*2/3 gis a
% Normal durations
-a4 a4
+a4 a
% Double the duration of chord
<a d>4*2
% Duration of quarter, appears like sixteenth
b16*4 c4
@end lilypond
-The duration of spacing notes may also be modified by
+The duration of spacer rests may also be modified by
a multiplier. This is useful for skipping many measures, e.g.,
@code{s1*23}.
same way, as if every note, chord or rest had the fraction as a
multiplier. This leaves the appearance of the music unchanged but
the internal duration of the notes will be multiplied by the
-fraction @emph{num}/@emph{den}. The spaces around the dot are
-required. Here is an example showing how music can be compressed
-and expanded:
+fraction @emph{num}/@emph{den}. Here is an example showing how music
+can be compressed and expanded:
@lilypond[quote,relative=2,verbatim]
\time 2/4
% Normal durations
<c a>4 c8 a
% Scale music by *2/3
-\scaleDurations #'(2 . 3) {
+\scaleDurations 2/3 {
<c a f>4. c8 a f
}
% Scale music by *2
-\scaleDurations #'(2 . 1) {
+\scaleDurations 2/1 {
<c' a>4 c8 b
}
@end lilypond
\new Staff {
\relative c' {
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
@enumerate
@item
-@code{@var{timeSignatureFraction}}, a Scheme pair describing the
+@code{@var{timeSignatureFraction}}, a fraction describing the
time signature.
@item
-@code{@var{baseMomentFraction}}, a Scheme pair containing the numerator
+@code{@var{baseMomentFraction}}, a fraction containing the numerator
and denominator of the basic timing unit for the time signature.
@item
\relative c' {
% This call will fail because the context isn't yet instantiated
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
\repeat unfold 7 { c8 } |
% This call will succeed
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
\relative c' {
\repeat unfold 8 { c8 } |
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
\repeat unfold 8 { c8 } |
- \revertTimeSignatureSettings #'(4 . 4)
+ \revertTimeSignatureSettings 4/4
\time 4/4
\repeat unfold 8 { c8 } |
}
\new StaffGroup <<
\new Staff {
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
}
\new Staff {
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(1 3) % beatStructure
#'() % beamExceptions
\time 4/4
}
\new Staff {
\time 3/4
- \set Staff.timeSignatureFraction = #'(9 . 8)
- \scaleDurations #'(2 . 3)
+ \set Staff.timeSignatureFraction = 9/8
+ \scaleDurations 2/3
\repeat unfold 6 { c8[ c c] }
}
\new Staff {
\time 3/4
- \set Staff.timeSignatureFraction = #'(10 . 8)
- \scaleDurations #'(3 . 5) {
+ \set Staff.timeSignatureFraction = 10/8
+ \scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
c4. c \times 2/3 { c8[ c c] } c4
<<
\new Staff {
\overrideTimeSignatureSettings
- #'(3 . 4) % timeSignatureFraction
- #'(1 . 8) % baseMomentFraction
+ 3/4 % timeSignatureFraction
+ 1/8 % baseMomentFraction
#'(1 5) % beatStructure
#'() % beamExceptions
\time 3/4
Or explicitly change the musical duration:
@example
-\acciaccatura @{ \scaleDurations #' (1 . 2) @{ c'8[ d' e' f' g'] @} @}
+\acciaccatura @{ \scaleDurations 1/2 @{ c'8[ d' e' f' g'] @} @}
@end example
See @ref{Scaling durations}.
@lilypond[ragged-right,quote,verbatim]
melody = \relative c' {
- c c c c | d d d d
+ c4 c c c | d d d d
}
text = \lyricmode {
\markup {
\fill-line {
\hspace #0.1 % moves the column off the left margin;
- % can be removed if space on the page is tight
+ % can be removed if space on the page is tight
\column {
\line { \bold "2."
\column {
"It has two lines."
}
}
- \hspace #0.1 % adds vertical spacing between verses
+ \vspace #0.1 % adds vertical spacing between verses
\line { \bold "3."
\column {
"This is verse three."
}
}
}
- \hspace #0.1 % adds horizontal spacing between columns;
- % if they are still too close, add more " " pairs
- % until the result looks good
- \column {
+ \hspace #0.1 % adds horizontal spacing between columns;
+ \column {
\line { \bold "4."
\column {
"This is verse four."
"It has two lines."
}
}
- \hspace #0.1 % adds vertical spacing between verses
+ \vspace #0.1 % adds vertical spacing between verses
\line { \bold "5."
\column {
"This is verse five."
}
}
\hspace #0.1 % gives some extra space on the right margin;
- % can be removed if page space is tight
+ % can be removed if page space is tight
}
}
@end lilypond
--- /dev/null
+\version "2.15.17"
+
+\header {
+ lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
+
+ doctitle = "Changing time signatures inside a polymetric section using \\scaleDurations"
+}
+
+
+\layout {
+ \context {
+ \Score
+ \remove "Timing_translator"
+ \remove "Default_bar_line_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Timing_translator"
+ \consists "Default_bar_line_engraver"
+ }
+}
+
+<<
+ \new Staff {
+ \scaleDurations 8/5 {
+ \time 6/8
+ \set Timing.measureLength = #(ly:make-moment 6 5)
+ b8 b b b b b
+ \time 2/4
+ \set Timing.measureLength = #(ly:make-moment 4 5)
+ b4 b
+ }
+ }
+ \new Staff {
+ \clef bass
+ \time 2/4
+ c2 d e f
+ }
+>>
achieve our goal with only a fraction of the individual effort.
@item
-@qq{Gift culture}: the Free Software (or @qq{Open Source})
+@qq{Gift culture}: the Free Software
movement has created many great software projects, such as
@uref{http://kernel.org/, GNU/Linux},
@uref{http://www.getfirefox.com/, Mozilla Firefox}, and
back} to the community.
@item
-Work experience: contributing to open-source projects is a great way to
+Work experience: contributing to free software projects is a great way to
practice programming, documentation writing, documentation translation,
or design. This experience has helped some developers gain job offers
or scholarships.
@uref{http://www.frescobaldi.org}
-Frescobaldi is a dedicated LilyPond music and text editor with a
-built-in PDF previewer, a powerful score wizard and many editing
-features. It is built on top of the KDE4 libraries and runs
-currently on all flavours of Linux and other UNIX-like operating
-systems.
+Frescobaldi is lightweight, yet powerful LilyPond music and text editor
+with a built-in PDF viewer. It is easy to use and will run on all major
+operating systems (Linux, Mac OS X and Windows).
@divEnd
Project</a> in adiutorium provides chants to the catholic Divine
Office in the Czech language. We use LilyPond for the typesetting.
</tweet>
+<tweet>
+28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
+de Lully au
+<a
+href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
+target="_blank"
+>
+festival
+de Beaune</a>,
+en utilisant un <a
+href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
+target="_blank"
+>
+matériel créé avec LilyPond.
+</a>
+</tweet>
+<tweet>
+28/07/2012 : Christophe Rousset et les Talens Lyriques interprètent Phaëton
+de Lully au
+<a
+href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
+target="_blank"
+>
+festival
+de Beaune</a>,
+en utilisant un <a
+href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
+target="_blank"
+>
+matériel créé avec LilyPond</a>.
+</tweet>
+<tweet>
+2012.07.28: Christophe Rousset and Les Talens Lyriques play Phaëton by Lully
+at the
+<a
+href="http://festivalbeaune.pagesperso-orange.fr/2012/o120728.htm"
+target="_blank"
+>
+Beaune festival</a>, using
+<a
+href="http://nicolas.sceaux.free.fr/index.php/2009/05/03/39"
+target="_blank"
+>
+music typeset with LilyPond</a>.
+</tweet>
+<tweet>
+Schumann - <a target="_blank"
+href="http://superbonus.project.free.fr/spip.php?article50">
+Album pour la Jeunesse</a>, Op. 68.
+Currently in French or German, with or without
+fingering. LilyPond typeset and freely downloadable!
+</tweet>
</tweets>
-\version "2.14.0"
+\version "2.15.17"
\header {
texidoc = "Don't allow scaled durations to confuse the tremolo beaming.
{
\time 3/4
\repeat tremolo 12 {e'32 f'}
- \scaleDurations #'(3 . 4) {
+ \scaleDurations 3/4 {
\repeat tremolo 12 {e'32 f'} r4
}
}
-\version "2.13.34"
+\version "2.14.0"
\header {
texidoc = "Seconds do not confuse the collision algorithm.
(make-column-markup (string-split str #\NewLine)))
test =
-#(let ((test-number 0))
- (define-void-function (parser location result-info strings)
- ((string? "BUG") pair?)
- (let ((input (car strings))
- (output (cdr strings)))
- (set! test-number (1+ test-number))
- (if (not (equal? input output))
- (ly:progress "Test ~a unequal: ~a. \nin = ~a\nout = ~a\n"
- test-number
- result-info
+#(define-void-function (parser location harmless strings)
+ ((string?) pair?)
+ (let ((input (car strings))
+ (output (cdr strings))
+ (result-info (or harmless "BUG")))
+ (if (not (equal? input output))
+ (if harmless
+ (ly:progress "Test unequal: ~a.\nin = ~a\nout = ~a\n"
+ harmless input output)
+ (ly:input-warning location "Test unequal: BUG.\nin = ~a\nout = ~a\n"
input output)))))
%%%
\test ##[ { c-> c^> c_> } #]
\test ##[ { c-. c^. c_. } #]
\test ##[ { c-_ c^_ c__ } #]
-\test ##[ { c-\trill c^\trill c_\trill } #]
+\test ##[ { c\trill c^\trill c_\trill } #]
\test ##[ { c-1 c^2 c_3 } #] % FingerEvent
\test ##[ { c-"foo" c^"foo" c_"foo" } #] % TextScriptEvent
\test ##[ { R1*4-"foo" R^"foo" R_"foo" } #] % MultiMeasureTextEvent
\test ##[ { < c\harmonic >4 < c e\harmonic > } #] % HarmonicEvent
-\test ##[ { c-\glissando c^\glissando c_\glissando } #] % GlissandoEvent
-\test ##[ { c-\arpeggio c^\arpeggio c_\arpeggio } #] % ArpeggioEvent
+\test ##[ { c\glissando c^\glissando c_\glissando } #] % GlissandoEvent
+\test ##[ { c\arpeggio c^\arpeggio c_\arpeggio } #] % ArpeggioEvent
\test ##[ { c\p c^\ff c_\sfz } #] % AbsoluteDynamicEvent
\test ##[ { c[ c] c^[ c^] c_[ c_] } #] % BeamEvent
\test ##[ { c( c) c^( c^) c_( c_) } #] % SlurEvent
\test ##[ \breathe #]
\test ##[ { c \[ c \] } #] % LigatureEvent
\test ##[ \~ #] % PesOrFlexaEvent
-\test ##[ { c-\bendAfter #3 } #] % BendAfterEvent
-\test ##[ < c-\rightHandFinger #1 > #] % StrokeFingerEvent
+\test ##[ c\bendAfter #3 #] % BendAfterEvent
+\test ##[ c\rightHandFinger #1 #] % StrokeFingerEvent
\test ##[ \break #]
\test ##[ \noBreak #]
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "This is an example of automatic footnote numbering
where the number is reset on each page. It uses the symbol-footnotes
\markup { h i }
\relative c' {
-\footnote #'(1 . -1) #'NoteHead \markup { j }
+<>\footnote #'(1 . -1) #'NoteHead \markup { j }
a b c d }
\pageBreak
\relative c' {
d4 e
- < f a-\footnote #'(1 . -1) \markup { n } c >
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ < f a\footnote #'(1 . -1) \markup { n } c >
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c |
d a b c |
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "This regtest makes sure that footnote numbers are laid out
in the correct vertical order.
d4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 0))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 2 4)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c\f |
d a b c |\break
d,4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 6))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 8 10)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c\f |\pageBreak
d,4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 12))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 14 16)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c\! |\break
}
d4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 1))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 3 5)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c\f |
d a b c |\break
d,4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 7))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 9 11)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c\f |\pageBreak
d,4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 13))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 15 17)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c\! |\break
}
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "This is an example of automatic footnote numbering
where the number is not reset on each page. It uses the default
\relative c' {
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 3))
- \footnote #'(1 . -1) #'NoteHead \markup { j }
+ <>\footnote #'(1 . -1) #'NoteHead \markup { j }
a b c d
}
d4 e
\once \override FootnoteItem #'numbering-assertion-function =
#(lambda (grob) (make-footnote-numbering-assertion-function 5))
- < f a-\footnote #'(1 . -1) \markup { n } c >
+ < f a\footnote #'(1 . -1) \markup { n } c >
\once \override FootnoteSpanner #'numbering-assertion-function =
#(simultaneous-footnote-numbering-assertion-function 6 7)
- \footnote #'(1 . 1) #'Beam \markup { o }
- \footnote #'(1 . 1) #'Hairpin \markup { p }
+ <>\footnote #'(1 . 1) #'Beam \markup { o }
+ <>\footnote #'(1 . 1) #'Hairpin \markup { p }
a8\< [ b c d ] a4 b c |
d a b c |
d a b c |
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "With grobs that have break visibility, footnotes will
automatically take the break visibility of the grob being footnoted.
{
\relative c' {
c1
- \footnote "foo" #'(0 . 2) #'TimeSignature "bar"
+ <>\footnote "foo" #'(0 . 2) #'TimeSignature "bar"
\time 3/4
\break \pageBreak
c2.
\once \override Staff . FootnoteItem #'break-visibility = ##(#f #f #t)
- \footnote "foo" #'(0 . 2) #'TimeSignature "bar"
+ <>\footnote "foo" #'(0 . 2) #'TimeSignature "bar"
\time 4/4
\break \pageBreak
c1 \bar "|."
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "The padding between a footnote and the footer can be tweaked."
}
\book {
\relative c' {
- \footnote
+ <>\footnote
\markup { \tiny 1 }
#'(1 . -1) #'NoteHead
\markup { 1. Tiny space below. }
e1
- \footnote
+ <>\footnote
\markup { \tiny 2 }
#'(1 . -1) #'NoteHead
\markup { 2. Tiny space below. }
e1
- \footnote
+ <>\footnote
\markup { \tiny 3 }
#'(1 . -1) #'NoteHead
\markup { 3. Big space below. }
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "Footnotes are annotated at the correct place, and the
annotation goes to the correct page."
\book {
\relative c'' {
-\footnote
+<>\footnote
\markup { \tiny "1." }
#'(0.5 . 0.5) #'Hairpin
\markup { 1. \justify { Goes to the first broken spanner. } }
b c d a\!
\once \override FootnoteSpanner #'spanner-placement = #RIGHT
-\footnote
+<>\footnote
\markup { \tiny "2." }
#'(0.5 . 0.5) #'Hairpin
\markup { 2. \justify { Goes to the last broken spanner. } }
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "Lilypond does footnotes."
}
\markup { h i }
\relative c' {
-\footnote \markup { \tiny 4 } #'(1 . -1) #'NoteHead \markup { 4. j }
+<>\footnote \markup { \tiny 4 } #'(1 . -1) #'NoteHead \markup { 4. j }
a b c d }
\pageBreak
\relative c' {
d4 e
- < f a-\footnote \markup { \tiny 6 } #'(1 . -1) \markup { 6. n } c >
- \footnote \markup { \tiny 7 } #'(1 . 1) #'Beam \markup { 7. o }
- \footnote \markup { \tiny 8 } #'(1 . 1) #'Hairpin \markup { 8. p }
+ < f a\footnote \markup { \tiny 6 } #'(1 . -1) \markup { 6. n } c >
+ <>\footnote \markup { \tiny 7 } #'(1 . 1) #'Beam \markup { 7. o }
+ <>\footnote \markup { \tiny 8 } #'(1 . 1) #'Hairpin \markup { 8. p }
a8\< [ b c d\f ] r2. |
}}
-\version "2.15.25"
+\version "2.15.39"
\header {
texidoc = "LilyPond does in-notes.
\relative c' {
\repeat unfold 5 {
\once \override FootnoteItem #'footnote = ##f
- \footnote
+ <>\footnote
"" #'(0 . 0) #'NoteHead \markup { \box \fill-line { "this is a test" } }
\repeat unfold 5 { a\< b c d\! }
- \footnote #'(-1 . 1) #'NoteHead "foobar"
+ <>\footnote #'(-1 . 1) #'NoteHead "foobar"
\repeat unfold 5 { a\< b c d\! }
}
}
-\version "2.14.0"
+\version "2.15.17"
\header {
texidoc = "
\new StaffGroup <<
\new Staff {
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(3 1) % beatStructure
#'() % beamExceptions
\time 4/4
}
\new Staff {
\overrideTimeSignatureSettings
- #'(4 . 4) % timeSignatureFraction
- #'(1 . 4) % baseMomentFraction
+ 4/4 % timeSignatureFraction
+ 1/4 % baseMomentFraction
#'(1 3) % beatStructure
#'() % beamExceptions
\time 4/4
static int line_count (Grob *);
static Real get_position (Grob *);
static Real pure_get_position (Grob *);
+
+ /**
+ Interval of staff lines.
+ */
+ static Interval staff_span (Grob *);
+
+ /**
+ Half of the height, in staff space, i.e. 2.0 for a normal staff.
+ */
static Real staff_radius (Grob *);
+
static int get_rounded_position (Grob *);
static int pure_get_rounded_position (Grob *);
static Interval extent_in_staff (Grob *);
}
}
+{FRACTION} {
+ yylval.scm = scan_fraction (YYText ());
+ return FRACTION;
+}
+
-{UNSIGNED} | // backup rule
{REAL} {
yylval.scm = scm_c_read_string (YYText ());
return REAL;
}
+{UNSIGNED}/\/ | // backup rule
{UNSIGNED} {
yylval.scm = scm_c_read_string (YYText ());
return UNSIGNED;
| number_expression {
$$ = $1;
}
+ | FRACTION {
+ $$ = $1;
+ }
| string {
$$ = $1;
}
scalar:
embedded_scm_arg
| bare_number
+ | FRACTION
| lyric_element
;
scalar_closed:
embedded_scm_arg_closed
| bare_number
+ | FRACTION
| lyric_element
;
Real rounded = directed_round (position, dir);
Grob *head = me->get_parent (X_AXIS);
- if (fabs (position) <= 2 * Staff_symbol_referencer::staff_radius (me) + 1
+ Interval staff_span = Staff_symbol::line_span (staff);
+ staff_span.widen (1);
+ if (staff_span.contains (position)
/* In case of a ledger lines, quantize even if we're outside the staff. */
|| (Note_head::has_interface (head)
Real p = 2 * (y - staff->relative_coordinate (state.common_[Y_AXIS], Y_AXIS))
/ state.staff_space_;
- Real distance = fabs (my_round (p) - p); // in halfspaces
- if (distance < 4 * state.thickness_
- && (int) fabs (my_round (p))
- <= 2 * Staff_symbol_referencer::staff_radius (staff) + 0.1
- && (int (fabs (my_round (p))) % 2
- != Staff_symbol_referencer::line_count (staff) % 2))
+ Real const round = my_round (p);
+ Real const frac = p - round;
+ if (fabs (frac) < 4 * state.thickness_
+ && Staff_symbol_referencer::on_staff_line (staff, int (round)))
{
- Direction resolution_dir
- = (distance ? state.dir_ : Direction (sign (p - my_round (p))));
+ Direction resolution_dir = frac ? state.dir_ : CENTER;
// TODO: parameter
- Real newp = my_round (p) + resolution_dir
- * 5 * state.thickness_;
+ Real newp = round + resolution_dir * 5 * state.thickness_;
Real dy = (newp - p) * state.staff_space_ / 2.0;
}
add_score (demerit, "encompass");
- if (convex_head_distances.size ())
+ if (vsize n = convex_head_distances.size ())
{
Real avg_distance = 0.0;
Real min_dist = infinity_f;
- for (vsize j = 0; j < convex_head_distances.size (); j++)
+
+ for (vsize j = 0; j < n; j++)
{
min_dist = min (min_dist, convex_head_distances[j]);
avg_distance += convex_head_distances[j];
For slurs over 3 or 4 heads, the average distance is not a
good normalizer.
*/
- Real n = convex_head_distances.size ();
if (n <= 2)
{
Real fact = 1.0;
avg_distance += height_ * fact;
- n += fact;
+ ++n;
}
/*
me->translate_axis ((p - oldpos) * ss * 0.5, Y_AXIS);
}
-/* Half of the height, in staff space, i.e. 2.0 for a normal staff. */
+Interval
+Staff_symbol_referencer::staff_span (Grob *me)
+{
+ Interval result;
+ if (me)
+ if (Grob *symb = get_staff_symbol (me))
+ result = Staff_symbol::line_span (symb);
+ return result;
+}
+
Real
Staff_symbol_referencer::staff_radius (Grob *me)
{
- return (line_count (me) - 1) / 2.0;
+ /*
+ line_span is measured in pitch steps, not in staff spaces
+ */
+ return staff_span (me).length () / 4.0;
}
int
size.
*/
+ Interval staff_span =
+ Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
+ staff_span.widen (-1);
+ bool const within_staff = staff_span.contains(pos);
if (head_positions_slice (columns[LEFT]).contains (pos)
|| head_positions_slice (columns[RIGHT]).contains (pos)
- || abs (pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
+ || within_staff)
{
if (h < details_.intra_space_threshold_ * 0.5 * details_.staff_space_)
{
- if (!Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos)
- && abs (pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
- {
- conf->center_tie_vertically (details_);
- }
- else if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos))
+ if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, pos))
{
conf->delta_y_ += dir *
details_.tip_staff_line_clearance_ * 0.5 * details_.staff_space_;
}
+ else if (within_staff)
+ {
+ conf->center_tie_vertically (details_);
+ }
}
else
{
Real top_y = tip_y + conf->dir_ * height;
Real top_pos = 2 * top_y / details_.staff_space_;
Real round_top_pos = rint (top_pos);
+ Interval staff_span =
+ Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_,
int (round_top_pos))
- && Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_) > top_y)
+ && staff_span[UP] * 0.5 > top_y)
{
conf->add_score (details_.staff_line_collision_penalty_
* peak_around (0.1 * details_.center_staff_line_clearance_,
}
int rounded_tip_pos = int (rint (tip_pos));
+ staff_span.widen (-1);
if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_, rounded_tip_pos)
&& (head_positions_slice (conf->column_ranks_[LEFT]).contains (rounded_tip_pos)
|| head_positions_slice (conf->column_ranks_[RIGHT]).contains (rounded_tip_pos)
- || abs (rounded_tip_pos) < 2 * Staff_symbol_referencer::staff_radius (details_.staff_symbol_referencer_))
+ || staff_span.contains (rounded_tip_pos))
)
{
conf->add_score (details_.staff_line_collision_penalty_
/*
horizontal brackets should not collide with staff lines.
- Kind of pointless since we put them outside the staff anyway, but
- let's leave code for the future when possibly allow them to move
- into the staff once again.
-
This doesn't seem to support cross-staff tuplets atm.
*/
- if (*dy == 0
- && fabs (*offset) < ss * Staff_symbol_referencer::staff_radius (me))
+ if (*dy == 0)
{
// quantize, then do collision check.
- *offset *= 2 / ss;
+ *offset /= 0.5 * ss;
- *offset = rint (*offset);
- if (Staff_symbol_referencer::on_line (me, (int) rint (*offset)))
- *offset += dir;
+ Interval staff_span = Staff_symbol_referencer::staff_span (me);
+ if (staff_span.contains (*offset))
+ {
+ *offset = rint (*offset);
+ if (Staff_symbol_referencer::on_line (me, int (*offset)))
+ *offset += dir;
+ }
*offset *= 0.5 * ss;
}
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.15.20"
+\version "2.15.39"
\context {
\name "Global"
repeatCountVisibility = #all-repeat-counts-visible
timeSignatureSettings = #default-time-signature-settings
- timeSignatureFraction = #'(4 . 4)
+ timeSignatureFraction = 4/4
%% These defaults should be the same as the rules established in
%% scm/time-signature-settings.scm for 4/4 time
argument))
footnote =
-#(define-music-function (parser location text offset grob-name footnote)
+#(define-event-function (parser location text offset grob-name footnote)
((markup?) number-pair? (symbol? '()) markup?)
(_i "Attach @var{text} at @var{offset} with @var{text} referring to
@var{footnote}. If @var{text} is given as @code{\\default}, use
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.14.0"
+\version "2.15.39"
%%
%% setup for Request->Element conversion.
%% Timing variables in layout definitions before any
%% Timing_translator has been run.
- timeSignatureFraction = #'(4 . 4)
+ timeSignatureFraction = 4/4
%% These defaults should be the same as the rules established in
%% scm/time-signature-settings.scm for 4/4 time
%% ukulele tunings
\makeDefaultStringTuning #'ukulele-tuning \stringTuning <g' c' e' a'>
\makeDefaultStringTuning #'ukulele-d-tuning \stringTuning <a' d' fis' b'>
-\makeDefaultStringTuning #'tenor-ukulele-tuning \stringTuning <a' e' c' g>
-\makeDefaultStringTuning #'baritone-ukulele-tuning \stringTuning <e' b g d>
+\makeDefaultStringTuning #'tenor-ukulele-tuning \stringTuning <g c' e' a'>
+\makeDefaultStringTuning #'baritone-ukulele-tuning \stringTuning <d g b e'>
%% orchestral strings
\makeDefaultStringTuning #'violin-tuning \stringTuning <g d' a' e''>
robot; you can also see LilyPond page on FTP.
-2) updating lilypond.pot: run 'make po-replace' at toplevel, clean up
-lilypond.pot header to make it look like its previous state, commit
-only lilypond.pot to Git and reset all .po files, roll a tarball with
-'make dist', upload it somewhere on the web (or wait for the release),
-and send a notification to FTP coordinator with a link to the tarball.
-
+2) updating lilypond.pot: run 'make po-replace' at toplevel, commit
+lilypond.pot to Git, roll a tarball with 'make dist', upload it
+somewhere on the web (or wait for the release), and send a notification
+to FTP coordinator with a link to the tarball.
+Running 'po-update' at top-level and opening either po/out/fr.po or
+po/out/es.po gives you an idea of the changes that have affected
+the sources (number of fuzzy and untranslated stings).
Rationale
=========
"Project-Id-Version: lilypond 2.15.37\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-21 20:51+0200\n"
-"PO-Revision-Date: 2012-04-29 14:00+0200\n"
+"PO-Revision-Date: 2012-05-12 11:37+0200\n"
"Last-Translator: Jean-Charles Malahieude <lilyfan@orange.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
#: book_snippets.py:741
#, python-format
msgid "Running through filter `%s'"
-msgstr "Passage par le filtre « %s »"
+msgstr "Passage par le filtre « %s »"
#: book_snippets.py:761
#, python-format
msgid "`%s' failed (%d)"
-msgstr "« %s » a échoué (%d)"
+msgstr "« %s » a échoué (%d)"
#: book_snippets.py:762
msgid "The error log is as follows:"
#: convertrules.py:12
#, python-format
msgid "Not smart enough to convert %s."
-msgstr "Pas assez intelligent pour convertir « %s »."
+msgstr "Pas assez intelligent pour convertir « %s »."
#: convertrules.py:13
msgid "Please refer to the manual for details, and update manually."
"textheight is no longer used.\n"
msgstr ""
"La mise en page a été modifiée, utilisant la taille du papier et les marges.\n"
-"« textheight » n'est plus utilisé.\n"
+"« textheight » n'est plus utilisé.\n"
#: convertrules.py:1957
msgid ""
"fold \\new FooContext \\foomode into \\foo."
msgstr ""
"\\toto -> \\totomode (pour accords, notes, etc.)\n"
-"transforme « \\new TotoContext \\totomode » en \\toto."
+"transforme « \\new TotoContext \\totomode » en \\toto."
#: convertrules.py:1995
msgid ""
"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
"ly:ambitus::print -> ambitus::print\n"
"La définition du contexte de nuances explicites du canevas\n"
-"« Piano et nuances entre les portées » est remplacée par le nouveau\n"
+"« Piano et nuances entre les portées » est remplacée par le nouveau\n"
"contexte `Dynamics'."
#: convertrules.py:2867
#: lilylib.py:99
#, python-format
msgid "Unknown or invalid loglevel '%s'"
-msgstr "« %s » n'est pas un niveau de journalisation reconnu."
+msgstr "« %s » n'est pas un niveau de journalisation reconnu."
#: lilylib.py:128 warn.cc:211
#, c-format, python-format
#: lilylib.py:185
#, python-format
msgid "Processing %s.ly"
-msgstr "Traitement de « %s.ly »"
+msgstr "Traitement de « %s.ly »"
#: lilylib.py:189 lilylib.py:250
#, python-format
msgid "Invoking `%s'"
-msgstr "Appel de « %s »"
+msgstr "Appel de « %s »"
#: lilylib.py:191 lilylib.py:252
#, python-format
#. TODO: Handle pieces without a time signature!
#: musicxml.py:361
msgid "Senza-misura time signatures are not yet supported!"
-msgstr "Les métriques « senza-misura » ne sont pas prises en charge."
+msgstr "Les métriques « senza-misura » ne sont pas prises en charge."
#: musicxml.py:379
msgid "Unable to interpret time signature! Falling back to 4/4."
#, python-format
msgid "Running `%s' on file `%s' to detect default page settings.\n"
msgstr ""
-"Traitement par %s du fichier « %s »\n"
+"Traitement par %s du fichier « %s »\n"
"pour déterminer la mise en page par défaut.\n"
#: musicxml2ly.py:228
msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
msgstr ""
"%s : mode inconnu.\n"
-"Devrait être « majeur », « mineur » ou « mode d'église »."
+"Devrait être « majeur », « mineur » ou « mode d'église »."
#: musicxml2ly.py:934
#, python-format
#: musicxml2ly.py:1028
#, python-format
msgid "unknown span event %s"
-msgstr "Événement de prolongation inconnu : « %s »"
+msgstr "Événement de prolongation inconnu : « %s »"
#: musicxml2ly.py:1038
#, python-format
"If the given filename is -, musicxml2ly reads from the command line.\n"
msgstr ""
"Convertit FICHIER.xml (MusicXML) au format LilyPond.\n"
-"Si le nom du fichier est « - », musicxml2ly lira la ligne de commande.\n"
+"Si le nom du fichier est « - », musicxml2ly lira la ligne de commande.\n"
#: musicxml2ly.py:2570 midi2ly.py:1062 abc2ly.py:1388 lilypond-book.py:140
#: convert-ly.py:92 etf2ly.py:1204 main.cc:153
#: musicxml2ly.py:2892
#, python-format
msgid "Output to `%s'"
-msgstr "Fichier de sortie : « %s »"
+msgstr "Fichier de sortie : « %s »"
#: musicxml2ly.py:2962
#, python-format
msgid "Unable to find input file %s"
-msgstr "Impossible de trouver le fichier d'entrée : « %s »"
+msgstr "Impossible de trouver le fichier d'entrée : « %s »"
#: midi2ly.py:81 lilypond-book.py:115 convert-ly.py:75 etf2ly.py:1191
#, python-format
#: midi2ly.py:1032
#, python-format
msgid "%s output to `%s'..."
-msgstr "%s reproduit dans « %s »..."
+msgstr "%s reproduit dans « %s »..."
#: midi2ly.py:1044 abc2ly.py:1376 lilypond-book.py:122 convert-ly.py:81
#, python-format
#: midi2ly.py:1083
msgid "use s instead of r for rests"
-msgstr "traduit les silences en « s », non en « r »"
+msgstr "traduit les silences en « s », non en « r »"
#: midi2ly.py:1085
msgid "DUR*NUM/DEN"
#: lilypond-book.py:506
#, python-format
msgid "Writing `%s'..."
-msgstr "Écriture de « %s »..."
+msgstr "Écriture de « %s »..."
#: lilypond-book.py:567
msgid "Output would overwrite input file; use --output."
#: lilypond-book.py:608
#, python-format
msgid "Removing `%s'"
-msgstr "Suppression de « %s »"
+msgstr "Suppression de « %s »"
#: lilypond-book.py:699
#, python-format
#: convert-ly.py:231
#, python-format
msgid "Processing `%s'... "
-msgstr "Traitement de « %s »..."
+msgstr "Traitement de « %s »..."
#: convert-ly.py:338
#, python-format
msgid "%s: Unable to open file"
-msgstr "impossible d'ouvrir le fichier « %s »"
+msgstr "impossible d'ouvrir le fichier « %s »"
#: convert-ly.py:345
#, python-format
msgid "%s: Unable to determine version. Skipping"
msgstr ""
-"impossible de déterminer la version de « %s ».\n"
+"impossible de déterminer la version de « %s ».\n"
" Au suivant !"
#: convert-ly.py:350
msgstr ""
"%s porte un numéro de version invalide : %s \n"
"Un numéro de version valide est formé de trois nombres séparés par un point,\n"
-"comme par exemple « 2.8.12 »"
+"comme par exemple « 2.8.12 »"
#: etf2ly.py:1197
#, python-format
#: warn.cc:89
#, c-format
msgid "unknown log level `%s', using default (INFO)"
-msgstr "« %s » n'est pas un niveau de journalisation reconnu ; utilisation de INFO"
+msgstr "« %s » n'est pas un niveau de journalisation reconnu ; utilisation de INFO"
#. Some expected warning was not triggered, so print out a warning.
#: warn.cc:112
#: getopt-long.cc:153
#, c-format
msgid "option `%s' requires an argument"
-msgstr "L'option « %s » requiert un argument"
+msgstr "L'option « %s » requiert un argument"
#: getopt-long.cc:157
#, c-format
msgid "option `%s' does not allow an argument"
-msgstr "L'option « %s » s'emploie sans argument"
+msgstr "L'option « %s » s'emploie sans argument"
#: getopt-long.cc:161
#, c-format
msgid "unrecognized option: `%s'"
-msgstr "option non reconnue : « %s »"
+msgstr "option non reconnue : « %s »"
#: getopt-long.cc:167
#, c-format
msgid "invalid argument `%s' to option `%s'"
-msgstr "argument « %s » invalide pour l'option « %s »"
+msgstr "argument « %s » invalide pour l'option « %s »"
#: flag.cc:113
#, c-format
msgid "flag `%s' not found"
-msgstr "crochet inconnu : « %s »"
+msgstr "crochet inconnu : « %s »"
#: flag.cc:133
#, c-format
msgid "flag stroke `%s' not found"
-msgstr "type de crochet inconnu : « %s »"
+msgstr "type de crochet inconnu : « %s »"
#: parse-scm.cc:112
msgid "GUILE signaled an error for the expression beginning here"
#: lily-lexer.cc:282
#, c-format
msgid "identifier name is a keyword: `%s'"
-msgstr "Le nom de l'identificateur est un mot clé : « %s »"
+msgstr "Le nom de l'identificateur est un mot clé : « %s »"
#: lily-lexer.cc:303 lily-lexer.cc:316
#, c-format
#: translator-group.cc:188
#, c-format
msgid "cannot find: `%s'"
-msgstr " « %s » inconnu(e)"
+msgstr " « %s » inconnu(e)"
#: glissando-engraver.cc:158
msgid "unterminated glissando"
#: midi-item.cc:89
#, c-format
msgid "no such MIDI instrument: `%s'"
-msgstr "instrument MIDI non répertorié : « %s »"
+msgstr "instrument MIDI non répertorié : « %s »"
#: open-type-font.cc:44
#, c-format
#: lyric-combine-music-iterator.cc:337
#, c-format
msgid "cannot find Voice `%s'"
-msgstr "impossible de repérer la voix (Voice) « %s »"
+msgstr "impossible de repérer la voix (Voice) « %s »"
#: context.cc:148
#, c-format
msgid "cannot find or create new `%s'"
-msgstr "impossible de trouver ou créer un nouveau « %s »"
+msgstr "impossible de trouver ou créer un nouveau « %s »"
#: context.cc:206
#, c-format
msgid "cannot find or create `%s' called `%s'"
-msgstr "impossible de trouver ou créer « %s » dénommé « %s »"
+msgstr "impossible de trouver ou créer « %s » dénommé « %s »"
#: context.cc:399
#, c-format
msgid "cannot find or create: `%s'"
-msgstr "impossible de trouver ou créer « %s »"
+msgstr "impossible de trouver ou créer « %s »"
#: dispatcher.cc:83
msgid "Event class should be a symbol"
#: dispatcher.cc:90
#, c-format
msgid "Unknown event class %s"
-msgstr "Classe d'événement inconnue : « %s »"
+msgstr "Classe d'événement inconnue : « %s »"
#: dispatcher.cc:172
#, c-format
msgid "Junking event: %s"
-msgstr "Événement escamoté : « %s »"
+msgstr "Événement escamoté : « %s »"
#: auto-change-iterator.cc:74 change-iterator.cc:72
#, c-format
#: piano-pedal-performer.cc:104
#, c-format
msgid "cannot find start of piano pedal: `%s'"
-msgstr "début de la pédale de piano indéterminé : « %s »"
+msgstr "début de la pédale de piano indéterminé : « %s »"
#: piano-pedal-engraver.cc:340
#, c-format
msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "début du crochet de la pédale de piano indéterminé : « %s »"
+msgstr "début du crochet de la pédale de piano indéterminé : « %s »"
#: input.cc:138 source-file.cc:178 source-file.cc:193
msgid "position unknown"
#: translator-ctors.cc:65
#, c-format
msgid "unknown translator: `%s'"
-msgstr "translateur inconnu : « %s »"
+msgstr "translateur inconnu : « %s »"
#: ligature-engraver.cc:104 ligature-bracket-engraver.cc:72
msgid "cannot find start of ligature"
#, c-format
msgid "font index %d too large for font `%s', using index 0"
msgstr ""
-"index %d trop grand pour la fonte « %s » ;\n"
+"index %d trop grand pour la fonte « %s » ;\n"
"réindexé sur 0"
#: ttf.cc:512 ttf.cc:562
#, c-format
msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
msgstr ""
-"préfixe(s) « %s » ignoré(s) pour la tête de note, \n"
+"préfixe(s) « %s » ignoré(s) pour la tête de note, \n"
"selon les restrictions du style de ligature sélectionné"
#: vaticana-ligature-engraver.cc:736
#: score-engraver.cc:78
#, c-format
msgid "cannot find `%s'"
-msgstr "impossible de trouver « %s »"
+msgstr "impossible de trouver « %s »"
#: score-engraver.cc:80
msgid "Music font has not been installed properly."
#: score-engraver.cc:82
#, c-format
msgid "Search path `%s'"
-msgstr "Chemin de recherche : « %s »"
+msgstr "Chemin de recherche : « %s »"
#: score-engraver.cc:84
msgid "Aborting"
#: performance.cc:82
#, c-format
msgid "MIDI output to `%s'..."
-msgstr "Sortie MIDI vers « %s »..."
+msgstr "Sortie MIDI vers « %s »..."
#: note-collision.cc:506
msgid "ignoring too many clashing note columns"
#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
#, c-format
msgid "cannot find file: `%s'"
-msgstr "fichier non trouvé : « %s »"
+msgstr "fichier non trouvé : « %s »"
#: includable-lexer.cc:73 lily-parser-scheme.cc:100
#, c-format
msgid "(search path: `%s')"
-msgstr "(chemin de recherche : « %s »)"
+msgstr "(chemin de recherche : « %s »)"
#: relocate.cc:52
#, c-format
#: relocate.cc:364 source-file.cc:65
#, c-format
msgid "cannot open file: `%s'"
-msgstr "Impossible d'ouvrir le fichier « %s »"
+msgstr "Impossible d'ouvrir le fichier « %s »"
#: relocate.cc:394
#, c-format
#: dots.cc:48
#, c-format
msgid "dot `%s' not found"
-msgstr "point « %s » introuvable"
+msgstr "point « %s » introuvable"
#: font-config.cc:38
msgid "Initializing FontConfig..."
#: font-config.cc:53 font-config-scheme.cc:151
#, c-format
msgid "failed adding font directory: %s"
-msgstr "échec lors de l'ajout d'un répertoire de fontes : « %s »"
+msgstr "échec lors de l'ajout d'un répertoire de fontes : « %s »"
#: font-config.cc:55 font-config-scheme.cc:153
#, c-format
msgid "Adding font directory: %s"
-msgstr "Ajout d'un répertoire de fontes : « %s »"
+msgstr "Ajout d'un répertoire de fontes : « %s »"
#: font-config.cc:58
msgid "Building font database..."
#: change-iterator.cc:34
#, c-format
msgid "cannot change `%s' to `%s'"
-msgstr "impossible de changer « %s » en « %s »"
+msgstr "impossible de changer « %s » en « %s »"
#. FIXME: constant error message.
#: change-iterator.cc:93
#: optimal-page-breaking.cc:138 optimal-page-breaking.cc:201
#, c-format
msgid "best score for this sys-count: %f"
-msgstr "meilleur résultat pour cette configuration « sys-count » : %f"
+msgstr "meilleur résultat pour cette configuration « sys-count » : %f"
#: new-dynamic-engraver.cc:168
#, c-format
"Ce logiciel est libre. Il est couvert par la licence GNU General Public\n"
"License, et vous êtes libre de le modifier et/ou d'en distribuer des copies\n"
"sous certaines conditions.\n"
-"Invoquez « %s --warranty » pour plus d'informations.\n"
+"Invoquez « %s --warranty » pour plus d'informations.\n"
#: main.cc:107
msgid ""
#: main.cc:345
#, c-format
msgid "no such user: %s"
-msgstr "utilisateur inconnu : « %s »"
+msgstr "utilisateur inconnu : « %s »"
#: main.cc:347
#, c-format
#: key-signature-interface.cc:77
#, c-format
msgid "No glyph found for alteration: %s"
-msgstr "Pas de glyphe pour l'altération « %s »"
+msgstr "Pas de glyphe pour l'altération « %s »"
#: key-signature-interface.cc:87
msgid "alteration not found"
#: lily-guile.cc:93
#, c-format
msgid "(load path: `%s')"
-msgstr "(chemin de chargement : « %s »)"
+msgstr "(chemin de chargement : « %s »)"
#: lily-guile.cc:416
#, c-format
msgid "cannot find property type-check for `%s' (%s)."
-msgstr "vérification du type de propriété pour « %s » (%s) non trouvée"
+msgstr "vérification du type de propriété pour « %s » (%s) non trouvée"
#: lily-guile.cc:419
msgid "perhaps a typing error?"
#, c-format
msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr ""
-"la vérification du type de « %s » a échoué ; \n"
-" la valeur « %s » doit être du type « %s »"
+"la vérification du type de « %s » a échoué ; \n"
+" la valeur « %s » doit être du type « %s »"
#: text-spanner-engraver.cc:72
msgid "cannot find start of text spanner"
#: clef.cc:65
#, c-format
msgid "clef `%s' not found"
-msgstr "clé « %s » introuvable"
+msgstr "clé « %s » introuvable"
#: beam-engraver.cc:147
msgid "already have a beam"
msgid "Changing working directory to: `%s'"
msgstr ""
"Modification du répertoire de travail pour\n"
-" « %s »"
+" « %s »"
#: lily-parser-scheme.cc:84
#, c-format
msgid "unable to change directory to: `%s'"
msgstr ""
"impossible d'accéder au répertoire\n"
-" « %s »"
+" « %s »"
#: lily-parser-scheme.cc:99
#, c-format
msgid "cannot find init file: `%s'"
-msgstr "impossible de trouver le fichier d'initialisation « %s »"
+msgstr "impossible de trouver le fichier d'initialisation « %s »"
#: lily-parser-scheme.cc:117
#, c-format
msgid "Processing `%s'"
-msgstr "Traitement de « %s »"
+msgstr "Traitement de « %s »"
#: lily-parser-scheme.cc:208
msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead."
#: font-config-scheme.cc:167
#, c-format
msgid "failed adding font file: %s"
-msgstr "échec lors de l'ajout d'un fichier de fontes : « %s »"
+msgstr "échec lors de l'ajout d'un fichier de fontes : « %s »"
#: font-config-scheme.cc:169
#, c-format
msgid "Adding font file: %s"
-msgstr "Ajout d'un fichier de fontes : « %s »"
+msgstr "Ajout d'un fichier de fontes : « %s »"
#: custos.cc:88
#, c-format
msgid "custos `%s' not found"
-msgstr "custode « %s » introuvable"
+msgstr "custode « %s » introuvable"
#: accidental-engraver.cc:179
#, c-format
#: pango-font.cc:242
#, c-format
msgid "no PostScript font name for font `%s'"
-msgstr "« %s » n'est pas un fichier de fonte PostScript"
+msgstr "« %s » n'est pas un fichier de fonte PostScript"
#: pango-font.cc:291
msgid "FreeType face has no PostScript font name"
#: paper-outputter-scheme.cc:41
#, c-format
msgid "Layout output to `%s'..."
-msgstr "Sortie mise en page vers « %s »..."
+msgstr "Sortie mise en page vers « %s »..."
#: gregorian-ligature-engraver.cc:70
#, c-format
#. ligature may not start with 2nd head of pes or flexa
#: gregorian-ligature-engraver.cc:224
msgid "cannot apply `\\~' on first head of ligature"
-msgstr "Impossible d'appliquer « \\~ » à la première tête de ligature"
+msgstr "Impossible d'appliquer « \\~ » à la première tête de ligature"
#. (pitch == prev_pitch)
#: gregorian-ligature-engraver.cc:236
msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr "Impossible d'appliquer « \\~ » à des têtes ayant la même hauteur"
+msgstr "Impossible d'appliquer « \\~ » à des têtes ayant la même hauteur"
#: chord-tremolo-engraver.cc:88
msgid "No tremolo to end"
#: general-scheme.cc:390
#, c-format
msgid "failed redirecting stderr to `%s'"
-msgstr "échec lors de la redirection de stderr vers « %s »"
+msgstr "échec lors de la redirection de stderr vers « %s »"
#: general-scheme.cc:469
msgid "Found infinity or nan in output. Substituting 0.0"
#: cluster.cc:120
#, c-format
msgid "unknown cluster style `%s'"
-msgstr "style de cluster inconnu : « %s »"
+msgstr "style de cluster inconnu : « %s »"
#: cluster.cc:157
msgid "junking empty cluster"
#: note-head.cc:86
#, c-format
msgid "none of note heads `%s' or `%s' found"
-msgstr "tête de note « %s » ou « %s » non trouvée"
+msgstr "tête de note « %s » ou « %s » non trouvée"
#. FIXME:
#: script-engraver.cc:113
#: property-iterator.cc:93
#, c-format
msgid "not a grob name, `%s'"
-msgstr " « %s » n'est pas un nom d'objet graphique (grob)"
+msgstr " « %s » n'est pas un nom d'objet graphique (grob)"
#: all-font-metrics.cc:149
#, c-format
msgid "cannot find font: `%s'"
-msgstr "fonte « %s » introuvable"
+msgstr "fonte « %s » introuvable"
#: pdf-scheme.cc:50
#, c-format
msgid "Conversion of string `%s' to UTF-16be failed: %s"
msgstr ""
-"La conversion de la chaîne « %s » en UTF-16be a échoué :\n"
+"La conversion de la chaîne « %s » en UTF-16be a échoué :\n"
" %s"
#: rest.cc:193
#, c-format
msgid "rest `%s' not found"
-msgstr "silence « %s » inconnu"
+msgstr "silence « %s » inconnu"
#: bar-check-iterator.cc:84
#, c-format
#, c-format
msgid "time signature symbol `%s' not found; reverting to numbered style"
msgstr ""
-"symbole de chiffrage de mesure « %s » inconnu ;\n"
+"symbole de chiffrage de mesure « %s » inconnu ;\n"
"retour à un style numérique"
#: grob-interface.cc:68
#, c-format
msgid "Unknown interface `%s'"
-msgstr "Interface inconnue : « %s »"
+msgstr "Interface inconnue : « %s »"
#: grob-interface.cc:79
#, c-format
msgid "Grob `%s' has no interface for property `%s'"
msgstr ""
-"L'objet graphique (Grob) « %s »\n"
-" n'a pas d'interface pour la propriété « %s »"
+"L'objet graphique (Grob) « %s »\n"
+" n'a pas d'interface pour la propriété « %s »"
#: midi-stream.cc:39
#, c-format
#: midi-stream.cc:55
#, c-format
msgid "cannot write to file: `%s'"
-msgstr "impossible d'écrire dans le fichier « %s »"
+msgstr "impossible d'écrire dans le fichier « %s »"
#. TODO: Also print the arguments of the markup!
#: text-interface.cc:129
#: parser.yy:3055
msgid "not a markup"
-msgstr "n'est pas un « markup »"
+msgstr "n'est pas un « markup »"
#: lexer.ll:225
msgid "stray UTF-8 BOM encountered"
#: lexer.ll:286
#, c-format
msgid "Renaming input to: `%s'"
-msgstr "L'entrée a été renommée en « %s »"
+msgstr "L'entrée a été renommée en « %s »"
#: lexer.ll:303
msgid "quoted string expected after \\version"
#: lexer.ll:358
#, c-format
msgid "wrong or undefined identifier: `%s'"
-msgstr "identificateur erroné ou non défini : « %s »"
+msgstr "identificateur erroné ou non défini : « %s »"
#: lexer.ll:384
msgid "string expected after \\include"
#: lexer.ll:775
#, c-format
msgid "invalid character: `%s'"
-msgstr "caractère invalide : « %s »"
+msgstr "caractère invalide : « %s »"
#: lexer.ll:878 lexer.ll:879
#, c-format
msgid "unknown escaped string: `\\%s'"
-msgstr "chaîne d'échappement inconnue : « \\%s »"
+msgstr "chaîne d'échappement inconnue : « \\%s »"
#: lexer.ll:1127 lexer.ll:1128
msgid "non-UTF-8 input"
#: parser-clef.scm:143 parser-clef.scm:183
#, scheme-format
msgid "unknown clef type `~a'"
-msgstr "type de clef inconnu : « ~a »"
+msgstr "type de clef inconnu : « ~a »"
#: parser-clef.scm:144 parser-clef.scm:184
#, scheme-format
#: graphviz.scm:64
#, scheme-format
msgid "Writing graph `~a'..."
-msgstr "Écriture du graphique « ~a »..."
+msgstr "Écriture du graphique « ~a »..."
#: parser-ly-from-scheme.scm:71
msgid "error in #{ ... #}"
#: backend-library.scm:27
#, scheme-format
msgid "Invoking `~a'..."
-msgstr "Appel de « ~a »..."
+msgstr "Appel de « ~a »..."
#: backend-library.scm:31
#, scheme-format
msgid "`~a' failed (~a)\n"
-msgstr "échec de « ~a » (~a)\n"
+msgstr "échec de « ~a » (~a)\n"
#: backend-library.scm:90
#, scheme-format
msgid "Converting to `~a'...\n"
-msgstr "Conversion à « ~a »...\n"
+msgstr "Conversion à « ~a »...\n"
#. Do not try to guess the name of the png file,
#. GS produces PNG files like BASE-page%d.png.
#: backend-library.scm:137
#, scheme-format
msgid "Writing header field `~a' to `~a'..."
-msgstr "écriture du champ d'entête « ~a » dans « ~a »..."
+msgstr "écriture du champ d'entête « ~a » dans « ~a »..."
#: backend-library.scm:187
#, scheme-format
msgid "missing stencil expression `~S'"
-msgstr "absence d'expression stencil « ~S »"
+msgstr "absence d'expression stencil « ~S »"
#: output-svg.scm:47
#, scheme-format
#: flag-styles.scm:151
#, scheme-format
msgid "flag stroke `~a' or `~a' not found"
-msgstr "type de crochet inconnu : « ~a » ou « ~a »"
+msgstr "type de crochet inconnu : « ~a » ou « ~a »"
#: modal-transforms.scm:38
msgid "'from' pitch not in scale; ignoring"
#: define-music-properties.scm:21
#, scheme-format
msgid "symbol ~S redefined"
-msgstr "symbole « ~S » redéfini"
+msgstr "symbole « ~S » redéfini"
#: chord-entry.scm:52
#, scheme-format
msgid "Spurious garbage following chord: ~A"
-msgstr "Information incompréhensible à la suite de l'accord « ~A »"
+msgstr "Information incompréhensible à la suite de l'accord « ~A »"
#: lily.scm:234
msgid "Using (ice-9 curried-definitions) module\n"
#: lily.scm:891 ps-to-png.scm:66
#, scheme-format
msgid "Invoking `~a'...\n"
-msgstr "Appel de « ~a »...\n"
+msgstr "Appel de « ~a »...\n"
#: lily-library.scm:299
msgid "Music unsuitable for context-mod"
#: part-combiner.scm:598
#, scheme-format
msgid "quoted music `~a' is empty"
-msgstr "il n'y a rien à reproduire de « ~a » "
+msgstr "il n'y a rien à reproduire de « ~a » "
#: music-functions.scm:274
msgid "More alternatives than repeats. Junking excess alternatives"
#: music-functions.scm:1013
#, scheme-format
msgid "cannot find quoted music: `~S'"
-msgstr "impossible de trouver la citation de musique « ~S »"
+msgstr "impossible de trouver la citation de musique « ~S »"
#: music-functions.scm:1151
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
#: music-functions.scm:1211
#, scheme-format
msgid "Unknown octaveness type: ~S "
-msgstr "Octave inconnue : « ~S »"
+msgstr "Octave inconnue : « ~S »"
#: music-functions.scm:1212
msgid "Defaulting to 'any-octave."
#: markup-macros.scm:373
#, scheme-format
msgid "Not a markup command: ~A"
-msgstr "~A n'est pas une commande de type « markup »"
+msgstr "~A n'est pas une commande de type « markup »"
#: define-note-names.scm:962
msgid "Select note names language."
#: define-note-names.scm:968
#, scheme-format
msgid "Using `~a' note names..."
-msgstr "Utilisation de « ~a » pour le nom des notes..."
+msgstr "Utilisation de « ~a » pour le nom des notes..."
#: define-note-names.scm:971
#, scheme-format
msgid "Could not find language `~a'. Ignoring."
msgstr ""
-"« ~a » n'est pas une langue reconnue pour les noms de note.\n"
+"« ~a » n'est pas une langue reconnue pour les noms de note.\n"
" Abandon."
#: framework-ps.scm:250
#: define-music-types.scm:787
#, scheme-format
msgid "unknown repeat type `~S'"
-msgstr "type de répétition inconnu : « ~S »"
+msgstr "type de répétition inconnu : « ~S »"
#: define-music-types.scm:788
msgid "See define-music-types.scm for supported repeats"
#, scheme-format
msgid "cannot find description for property `~S' (~S)"
msgstr ""
-"impossible de trouver une description de la propriété « ~S »\n"
+"impossible de trouver une description de la propriété « ~S »\n"
" (~S)"
#: documentation-lib.scm:209
sub_tempo, str)
return str
+@rule((2, 15, 39), r"\footnote -> <>\footnote, -\footnote -> \footnote")
+def conv (str):
+ def not_first (s):
+ def match_fun (m):
+ if m.group (1):
+ return m.group (0)
+ return m.expand (s)
+ return match_fun
+ str = re.sub ("(" + matchmarkup + ")|"
+ + r"(?<![-_^])((?:[-_^][-_^])*)(\\footnote(?:\s*"
+ + matchmarkup + ")?" + matcharg + "(?:" + matcharg
+ + ")?\s+" + matchmarkup + ")",
+ not_first (r"\2<>\3"), str)
+ str = re.sub ("(" + matchmarkup + ")|"
+ + r"(?<![-_^])((?:[-_^][-_^])*)-(\\footnote(?:\s*"
+ + matchmarkup + ")?" + matcharg + "(?:" + matcharg
+ + ")?\s+" + matchmarkup + ")",
+ not_first (r"\2\3"), str)
+ return str
# Guidelines to write rules (please keep this at the end of this file)
#
""
tremolo-type))))
-(define-post-event-display-method ArticulationEvent (event parser) #t
- (let ((articulation (ly:music-property event 'articulation-type)))
- (case (string->symbol articulation)
- ((marcato) "^")
- ((stopped) "+")
- ((tenuto) "-")
- ((staccatissimo) "|")
- ((accent) ">")
- ((staccato) ".")
- ((portato) "_")
- (else (format #f "\\~a" articulation)))))
+(define-display-method ArticulationEvent (event parser) #t
+ (let* ((articulation (ly:music-property event 'articulation-type))
+ (shorthand
+ (case (string->symbol articulation)
+ ((marcato) "^")
+ ((stopped) "+")
+ ((tenuto) "-")
+ ((staccatissimo) "|")
+ ((accent) ">")
+ ((staccato) ".")
+ ((portato) "_")
+ (else #f))))
+ (format #f "~a~:[\\~;~]~a"
+ (event-direction->lily-string event shorthand)
+ shorthand
+ (or shorthand articulation))))
(define-post-event-display-method FingeringEvent (event parser) #t
(ly:music-property event 'digit))
(define-post-event-display-method MultiMeasureTextEvent (event parser) #t
(markup->lily-string (ly:music-property event 'text)))
-(define-post-event-display-method BendAfterEvent (event parser) #t
+(define-post-event-display-method BendAfterEvent (event parser) #f
(format #f "\\bendAfter #~a" (ly:music-property event 'delta-step)))
(define-post-event-display-method HarmonicEvent (event parser) #f "\\harmonic")
-(define-post-event-display-method GlissandoEvent (event parser) #t "\\glissando")
-(define-post-event-display-method ArpeggioEvent (event parser) #t "\\arpeggio")
+(define-post-event-display-method GlissandoEvent (event parser) #f "\\glissando")
+(define-post-event-display-method ArpeggioEvent (event parser) #f "\\arpeggio")
(define-post-event-display-method AbsoluteDynamicEvent (event parser) #f
(format #f "\\~a" (ly:music-property event 'text)))
-(define-post-event-display-method StrokeFingerEvent (event parser) #t
+(define-post-event-display-method StrokeFingerEvent (event parser) #f
(format #f "\\rightHandFinger #~a" (ly:music-property event 'digit)))
(define-span-event-display-method BeamEvent (event parser) #f "[" "]")
;;;
(define (simple-note->lily-string event parser)
- (format #f "~a~a~a~a~a~a~{~a~}" ; pitchname octave !? octave-check duration optional_rest articulations
+ (format #f "~a~a~a~a~a~a~:{~:[-~;~]~a~}" ; pitchname octave !? octave-check duration optional_rest articulations
(note-name->lily-string (ly:music-property event 'pitch) parser)
(octave->lily-string (ly:music-property event 'pitch))
(let ((forced (ly:music-property event 'force-accidental))
(if ((make-music-type-predicate 'RestEvent) event)
"\\rest" "")
(map-in-order (lambda (event)
- (music->lily-string event parser))
+ (list
+ (post-event? event)
+ (music->lily-string event parser)))
(ly:music-property event 'articulations))))
(define-display-method NoteEvent (note parser)
(cond ((not (null? (ly:music-property note 'pitch))) ;; note
(simple-note->lily-string note parser))
((not (null? (ly:music-property note 'drum-type))) ;; drum
- (format #f "~a~a" (ly:music-property note 'drum-type)
+ (format #f "~a~a~{~a~}" (ly:music-property note 'drum-type)
(duration->lily-string (ly:music-property note 'duration)
- #:remember #t)))
+ #:remember #t)
+ (map-in-order (lambda (event)
+ (music->lily-string event parser))
+ (ly:music-property note 'articulations))))
(else ;; unknown?
"")))
(define-display-method RestEvent (rest parser)
(if (not (null? (ly:music-property rest 'pitch)))
(simple-note->lily-string rest parser)
- (string-append "r" (duration->lily-string (ly:music-property rest 'duration)
- #:remember #t))))
+ (format #f "r~a~{~a~}"
+ (duration->lily-string (ly:music-property rest 'duration)
+ #:remember #t)
+ (map-in-order (lambda (event)
+ (music->lily-string event parser))
+ (ly:music-property rest 'articulations)))))
(define-display-method MultiMeasureRestEvent (rest parser)
(string-append "R" (duration->lily-string (ly:music-property rest 'duration)
#:remember #t)))
(define-display-method SkipEvent (rest parser)
- (string-append "s" (duration->lily-string (ly:music-property rest 'duration)
- #:remember #t)))
+ (format #f "s~a~{~a~}"
+ (duration->lily-string (ly:music-property rest 'duration)
+ #:remember #t)
+ (map-in-order (lambda (event)
+ (music->lily-string event parser))
+ (ly:music-property rest 'articulations))))
(define-display-method RepeatedChord (chord parser)
(music->lily-string (ly:music-property chord 'element) parser))
(FootnoteEvent
. ((description . "Footnote a grob.")
- (types . (general-music event footnote-event))
+ (types . (general-music event post-event footnote-event))
))
(GlissandoEvent
Syntax: @code{\\skip} @var{duration}")
(length-callback . ,ly:music-duration-length)
(iterator-ctor . ,ly:simple-music-iterator::constructor)
- (types . (general-music event rhythmic-event skip-event))
+ (types . (general-music event skip-event))
))
(SlurEvent
-
-
+XGETTEXT_OPTIONS = \
+ --default-domain=$(package) \
+ --from-code=UTF-8 \
+ --join \
+ --add-comments \
+ --msgid-bugs-address="http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs" \
+ --package-name=$(package) \
+ --package-version=$(VERSION)
+
+sed-header = \# Translation of LilyPond\n\# Copyright \(C\) 1998--2012 Han-Wen Nienhuys, Jan Nieuwenhuizen.\n\# This file is distributed under the same license as the LilyPond package.
+sed-content = "Content-Type: text\/plain; charset=UTF-8\\n"
####
#### UGH!
local-po:
ifneq ($(strip $(ALL_PO_SOURCES)),)
@echo $(ALL_PO_SOURCES)
- xgettext --default-domain=$(package) --join \
- --output-dir=$(po-dir)/$(outdir) --add-comments \
+ xgettext $(XGETTEXT_OPTIONS) --output-dir=$(po-dir)/$(outdir) \
--keyword=_ --keyword=_f --keyword=_i \
$(XGETTEXT_FLAGS) $(ALL_PO_SOURCES)
endif
endif
+ sed -i '1,2d' $(po-dir)/$(outdir)/$(package).po
+ sed -i -e 's/^\# This file is distributed.*/$(sed-header)/' $(po-dir)/$(outdir)/$(package).po
+ sed -i -e 's/^\"Content-Type: text\/plain.*/$(sed-content)/' $(po-dir)/$(outdir)/$(package).po
po-update: po
po-replace: po-update
mv $(outdir)/$(package).po $(package).pot
- mv $(outdir)/*.po .
--- /dev/null
+% $Id: txi-nl.tex,v 1.7 2008/10/16 17:13:10 karl Exp $
+% txi-nl.tex -- Dutch translations for texinfo.tex.
+%
+% Copyright 1999, 2007, 2008 Free Software Foundation.
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+\txisetlanguage{dutch}{2}{2}
+
+\plainfrenchspacing
+
+\gdef\putwordAppendix{Appendix}
+\gdef\putwordChapter{Hoofdstuk}
+\gdef\putwordfile{bestand}
+\gdef\putwordin{in}
+\gdef\putwordIndexIsEmpty{(Index is leeg)}
+\gdef\putwordIndexNonexistent{(Index bestaat niet)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Instantie Variabele van}
+\gdef\putwordMethodon{Methode van}
+\gdef\putwordNoTitle{Geen titel}
+\gdef\putwordof{van}
+\gdef\putwordon{op}
+\gdef\putwordpage{pagina}
+\gdef\putwordsection{sectie}
+\gdef\putwordSection{Sectie}
+\gdef\putwordsee{zie}
+\gdef\putwordSee{Zie}
+\gdef\putwordShortTOC{Korte inhoudsopgave}
+\gdef\putwordTOC{Inhoudsopgave}
+%
+\gdef\putwordMJan{Januari}
+\gdef\putwordMFeb{Februari}
+\gdef\putwordMMar{Maart}
+\gdef\putwordMApr{April}
+\gdef\putwordMMay{Mei}
+\gdef\putwordMJun{Juni}
+\gdef\putwordMJul{Juli}
+\gdef\putwordMAug{Augustus}
+\gdef\putwordMSep{September}
+\gdef\putwordMOct{Oktober}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+%
+\gdef\putwordDefmac{Macro}
+\gdef\putwordDefspec{Speciale Vorm}
+\gdef\putwordDefvar{Variabele}
+\gdef\putwordDefopt{Gebruikers optie}
+\gdef\putwordDeffunc{Functie}
+
+% Produces Day Month Year style of output.
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}