From: Francisco Vila Date: Wed, 16 May 2012 13:43:54 +0000 (+0200) Subject: Merge branch 'master' into translation X-Git-Tag: release/2.15.40-1~15^2~9^2~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=9bef4c41f80988822469f80337c3c007e4adb4d1;hp=5747f46bc458bfca59d5ba97e62b0709c2d36221;p=lilypond.git Merge branch 'master' into translation --- diff --git a/.mailmap b/.mailmap index ac9bad1028..a8ae3180ee 100644 --- a/.mailmap +++ b/.mailmap @@ -2,10 +2,13 @@ Andrew Hawryluk Andrew Hawryluk Andrew Wilson Arjan Bos +Benkő Pál Boris Shingarov Boris Shingarov Carl D. Sorensen Carl D. Sorensen +Carl D. Sorensen +Colin Campbell Chris Snyder Damien Heurtebise Daniel Johnson @@ -102,6 +105,9 @@ James Lowe James Lowe James Lowe James Lowe +Janek Warchoł +Janek Warchoł +Janek Warchoł Jan Nieuwenhuizen Jan Nieuwenhuizen Jan Nieuwenhuizen diff --git a/Documentation/contributor/build-notes.itexi b/Documentation/contributor/build-notes.itexi index a1e258cc91..7891063c20 100644 --- a/Documentation/contributor/build-notes.itexi +++ b/Documentation/contributor/build-notes.itexi @@ -15,6 +15,7 @@ chapter.} * Doc build:: * Website build:: * Building an Ubuntu distro:: +* Building GUB:: @end menu @@ -1501,3 +1502,68 @@ Test iso by installing in VM and repeating steps above for 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 diff --git a/Documentation/contributor/release-work.itexi b/Documentation/contributor/release-work.itexi index baa68a85e4..4828d1ae0e 100644 --- a/Documentation/contributor/release-work.itexi +++ b/Documentation/contributor/release-work.itexi @@ -83,6 +83,7 @@ checkout displays modified files, you might want to run @code{git reset 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 @@ -90,6 +91,7 @@ vi Documentation/web/news-front.itexi Documentation/web/news.itexi 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 @@ -297,6 +299,13 @@ various websites, so be brief. @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: @@ -360,8 +369,8 @@ Disallow: /doc/v2.CURRENT-DEVELOPMENT/ @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: diff --git a/Documentation/de/notation/input.itely b/Documentation/de/notation/input.itely index ba01fc60a3..33a06a52d8 100644 --- a/Documentation/de/notation/input.itely +++ b/Documentation/de/notation/input.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes. @end ignore -@c \version "2.15.32" +@c \version "2.15.39" @c Translators: Till Paala @@ -1127,10 +1127,10 @@ werden, auf den sich die Fußnote bezieht. \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 } @@ -1147,9 +1147,9 @@ stehen: \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 } } @@ -1167,25 +1167,25 @@ Tagline und Copyright gezeigt wird. \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." } @@ -1228,13 +1228,13 @@ Wie auch bei automatischen Fußnoten muss der Befehl @code{\footnote} \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 @@ -1246,10 +1246,10 @@ Fußnoten für Akkordnoten werden wie folgt notiert: \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 } } @@ -1266,36 +1266,36 @@ Position der Fußnotentexte zu Tagline und Copyright anzeigen: \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 } } diff --git a/Documentation/es/notation/input.itely b/Documentation/es/notation/input.itely index 4668d0a140..5df6365839 100644 --- a/Documentation/es/notation/input.itely +++ b/Documentation/es/notation/input.itely @@ -8,7 +8,7 @@ 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 @@ -1107,10 +1107,10 @@ al que se adjunta la nota al pie: \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 } @@ -1126,9 +1126,9 @@ quiere adjuntar la nota al pie como un @code{TextScript}: \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 } } @@ -1146,25 +1146,25 @@ línea informativa y la línea de copyright. \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." } @@ -1206,13 +1206,13 @@ que la nota al pie está anotando y adjuntada como un \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 @@ -1224,10 +1224,10 @@ Para anotar notas de acordes con notas al pie manuales: \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 } } @@ -1245,37 +1245,37 @@ informativa a la de copyright: \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 } diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely index 182c8e54b2..754a39b2b8 100644 --- a/Documentation/fr/notation/input.itely +++ b/Documentation/fr/notation/input.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.15.32" +@c \version "2.15.39" @c Translators: Jean-Charles Malahieude, Valentin Villenave @@ -1154,10 +1154,10 @@ l'objet auquel la note est attachée. \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 } @@ -1174,9 +1174,9 @@ le @code{TextScript} fait référence. \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 } } @@ -1195,25 +1195,25 @@ et le pied de page. \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." } @@ -1261,13 +1261,13 @@ référence. \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 @@ -1281,10 +1281,10 @@ l'annotation fait référence, comme s'il s'agissait d'une articulation. \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 } } @@ -1303,37 +1303,37 @@ et le pied de page. \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 } diff --git a/Documentation/ja/notation/input.itely b/Documentation/ja/notation/input.itely index eafb56fb51..a6f7fe2e83 100644 --- a/Documentation/ja/notation/input.itely +++ b/Documentation/ja/notation/input.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.15.32" +@c \version "2.15.39" @c Translators: Yoshiki Sawada @@ -1106,10 +1106,10 @@ scoreTitleMarkup = \markup @{ \column @{ \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 } @@ -1125,9 +1125,9 @@ scoreTitleMarkup = \markup @{ \column @{ \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 } } @@ -1145,25 +1145,25 @@ scoreTitleMarkup = \markup @{ \column @{ \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." } @@ -1204,13 +1204,13 @@ scoreTitleMarkup = \markup @{ \column @{ \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 @@ -1222,10 +1222,10 @@ scoreTitleMarkup = \markup @{ \column @{ \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 } } @@ -1243,37 +1243,37 @@ scoreTitleMarkup = \markup @{ \column @{ \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 } diff --git a/Documentation/ly-examples/aucun-snippet.ly b/Documentation/ly-examples/aucun-snippet.ly index 9fb71c8c08..bcfc2f1dce 100644 --- a/Documentation/ly-examples/aucun-snippet.ly +++ b/Documentation/ly-examples/aucun-snippet.ly @@ -1,4 +1,4 @@ -\version "2.15.18" +\version "2.15.39" \include "example-header.ily" \paper { @@ -187,9 +187,9 @@ triplumNotes = \relative c' { 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 @@ -222,10 +222,10 @@ tenorNotes = \relative c { %\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 }} >> @@ -233,8 +233,8 @@ tenorNotes = \relative c { %\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 }} >> diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely index 9294d5cd08..76cffd15c2 100644 --- a/Documentation/notation/input.itely +++ b/Documentation/notation/input.itely @@ -8,7 +8,7 @@ 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 @@ -1053,10 +1053,10 @@ footnote is being attached to: \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 } @@ -1071,9 +1071,9 @@ the note to which the footnote is being attached as a @code{TextScript}: \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 } } @@ -1090,25 +1090,25 @@ relative position of the footnotes to the tagline and copyright. \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." } @@ -1147,13 +1147,13 @@ Like automatic footnotes, manual @code{\footnote} commands must come \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 @@ -1165,10 +1165,10 @@ To annotate chorded notes with manual footnotes: \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 } } @@ -1185,37 +1185,37 @@ the relative position of the footnotes to the tagline and copyright \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 } diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index e223bab412..872464c4ea 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -7,7 +7,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.15.18" +@c \version "2.15.39" @node Rhythms @section Rhythms @@ -317,8 +317,10 @@ fraction @code{N/M} by appending @code{*N/M} (or @code{*N} if @code{M} 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. @@ -326,16 +328,16 @@ 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 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}. @@ -349,20 +351,19 @@ Longer stretches of music may be compressed by a fraction in the 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 4 c8 a % Scale music by *2/3 -\scaleDurations #'(2 . 3) { +\scaleDurations 2/3 { 4. c8 a f } % Scale music by *2 -\scaleDurations #'(2 . 1) { +\scaleDurations 2/1 { 4 c8 b } @end lilypond @@ -1061,8 +1062,8 @@ be changed, or new default values can be added: \new Staff { \relative c' { \overrideTimeSignatureSettings - #'(4 . 4) % timeSignatureFraction - #'(1 . 4) % baseMomentFraction + 4/4 % timeSignatureFraction + 1/4 % baseMomentFraction #'(3 1) % beatStructure #'() % beamExceptions \time 4/4 @@ -1077,11 +1078,11 @@ be changed, or new default values can be added: @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 @@ -1105,8 +1106,8 @@ instantiated or there must be music in the context before the \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 @@ -1114,8 +1115,8 @@ instantiated or there must be music in the context before the \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 @@ -1138,13 +1139,13 @@ to the original values: \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 } | } @@ -1161,8 +1162,8 @@ for different staves by moving the @code{Timing_translator} and the \new StaffGroup << \new Staff { \overrideTimeSignatureSettings - #'(4 . 4) % timeSignatureFraction - #'(1 . 4) % baseMomentFraction + 4/4 % timeSignatureFraction + 1/4 % baseMomentFraction #'(3 1) % beatStructure #'() % beamExceptions \time 4/4 @@ -1170,8 +1171,8 @@ for different staves by moving the @code{Timing_translator} and the } \new Staff { \overrideTimeSignatureSettings - #'(4 . 4) % timeSignatureFraction - #'(1 . 4) % baseMomentFraction + 4/4 % timeSignatureFraction + 1/4 % baseMomentFraction #'(1 3) % beatStructure #'() % beamExceptions \time 4/4 @@ -1585,14 +1586,14 @@ affect the autobeaming rules. } \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 @@ -2291,8 +2292,8 @@ beaming settings for a time signature are described in << \new Staff { \overrideTimeSignatureSettings - #'(3 . 4) % timeSignatureFraction - #'(1 . 8) % baseMomentFraction + 3/4 % timeSignatureFraction + 1/8 % baseMomentFraction #'(1 5) % beatStructure #'() % beamExceptions \time 3/4 @@ -3321,7 +3322,7 @@ becomes: 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}. diff --git a/Documentation/notation/vocal.itely b/Documentation/notation/vocal.itely index f2ea75ca29..a8fcffa847 100644 --- a/Documentation/notation/vocal.itely +++ b/Documentation/notation/vocal.itely @@ -1954,7 +1954,7 @@ output in LilyPond. @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 { @@ -1973,7 +1973,7 @@ 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 { @@ -1981,7 +1981,7 @@ text = \lyricmode { "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." @@ -1989,17 +1989,15 @@ text = \lyricmode { } } } - \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." @@ -2008,7 +2006,7 @@ text = \lyricmode { } } \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 diff --git a/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly b/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly new file mode 100644 index 0000000000..66013ce130 --- /dev/null +++ b/Documentation/snippets/new/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly @@ -0,0 +1,39 @@ +\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 + } +>> diff --git a/Documentation/web/introduction.itexi b/Documentation/web/introduction.itexi index 1d9703ae6e..7088f9e31a 100644 --- a/Documentation/web/introduction.itexi +++ b/Documentation/web/introduction.itexi @@ -432,7 +432,7 @@ documentation explaining how to use these features -- we can 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 @@ -441,7 +441,7 @@ benefitted from these projects, some developers want to @qq{give 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. @@ -1077,11 +1077,9 @@ viewer with advanced point-and-click support. @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 diff --git a/Documentation/web/server/tweets.xml b/Documentation/web/server/tweets.xml index 355ba95c73..60e418f19c 100644 --- a/Documentation/web/server/tweets.xml +++ b/Documentation/web/server/tweets.xml @@ -34,4 +34,56 @@ href="http://www.inadiutorium.xf.cz"> Project</a> in adiutorium provides chants to the catholic Divine Office in the Czech language. We use LilyPond for the typesetting. + +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> + + +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>. + + +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>. + + +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! + diff --git a/input/regression/chord-tremolo-scaled-durations.ly b/input/regression/chord-tremolo-scaled-durations.ly index 0b8c6c8ad1..6cf26b9589 100644 --- a/input/regression/chord-tremolo-scaled-durations.ly +++ b/input/regression/chord-tremolo-scaled-durations.ly @@ -1,4 +1,4 @@ -\version "2.14.0" +\version "2.15.17" \header { texidoc = "Don't allow scaled durations to confuse the tremolo beaming. @@ -8,7 +8,7 @@ The tremolos should each have 3 beams." { \time 3/4 \repeat tremolo 12 {e'32 f'} - \scaleDurations #'(3 . 4) { + \scaleDurations 3/4 { \repeat tremolo 12 {e'32 f'} r4 } } diff --git a/input/regression/collision-seconds.ly b/input/regression/collision-seconds.ly index ea9a727355..f708644440 100644 --- a/input/regression/collision-seconds.ly +++ b/input/regression/collision-seconds.ly @@ -1,4 +1,4 @@ -\version "2.13.34" +\version "2.14.0" \header { texidoc = "Seconds do not confuse the collision algorithm. diff --git a/input/regression/display-lily-tests.ly b/input/regression/display-lily-tests.ly index 22eaf893d3..6e7a3ab24c 100644 --- a/input/regression/display-lily-tests.ly +++ b/input/regression/display-lily-tests.ly @@ -27,16 +27,16 @@ (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))))) %%% @@ -115,13 +115,13 @@ stderr of this run." \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 @@ -141,8 +141,8 @@ stderr of this run." \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 #] diff --git a/input/regression/footnote-auto-numbering-page-reset.ly b/input/regression/footnote-auto-numbering-page-reset.ly index 5014b32cb2..2310221433 100644 --- a/input/regression/footnote-auto-numbering-page-reset.ly +++ b/input/regression/footnote-auto-numbering-page-reset.ly @@ -1,4 +1,4 @@ -\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 @@ -24,7 +24,7 @@ have been reached. \markup { h i } \relative c' { -\footnote #'(1 . -1) #'NoteHead \markup { j } +<>\footnote #'(1 . -1) #'NoteHead \markup { j } a b c d } \pageBreak @@ -35,9 +35,9 @@ a b c d } \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 | diff --git a/input/regression/footnote-auto-numbering-vertical-order.ly b/input/regression/footnote-auto-numbering-vertical-order.ly index d229da8454..549075b368 100644 --- a/input/regression/footnote-auto-numbering-vertical-order.ly +++ b/input/regression/footnote-auto-numbering-vertical-order.ly @@ -1,4 +1,4 @@ -\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. @@ -32,31 +32,31 @@ 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 } @@ -64,31 +64,31 @@ in the correct vertical order. 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 } diff --git a/input/regression/footnote-auto-numbering.ly b/input/regression/footnote-auto-numbering.ly index 11d9c276f5..dd2251ecbf 100644 --- a/input/regression/footnote-auto-numbering.ly +++ b/input/regression/footnote-auto-numbering.ly @@ -1,4 +1,4 @@ -\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 @@ -40,7 +40,7 @@ footnotes. \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 } @@ -54,11 +54,11 @@ footnotes. 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 | diff --git a/input/regression/footnote-break-visibility.ly b/input/regression/footnote-break-visibility.ly index fb49e84841..0176312e0a 100644 --- a/input/regression/footnote-break-visibility.ly +++ b/input/regression/footnote-break-visibility.ly @@ -1,4 +1,4 @@ -\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. @@ -14,12 +14,12 @@ This behavior can be overridden. { \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 "|." diff --git a/input/regression/footnote-footer-padding.ly b/input/regression/footnote-footer-padding.ly index 0c72c5e41f..3011b07331 100644 --- a/input/regression/footnote-footer-padding.ly +++ b/input/regression/footnote-footer-padding.ly @@ -1,4 +1,4 @@ -\version "2.15.25" +\version "2.15.39" \header { texidoc = "The padding between a footnote and the footer can be tweaked." } @@ -8,19 +8,19 @@ \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. } diff --git a/input/regression/footnote-spanner.ly b/input/regression/footnote-spanner.ly index c550eae244..58ce06a92b 100644 --- a/input/regression/footnote-spanner.ly +++ b/input/regression/footnote-spanner.ly @@ -1,4 +1,4 @@ -\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." @@ -13,7 +13,7 @@ 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. } } @@ -37,7 +37,7 @@ b c d a 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. } } diff --git a/input/regression/footnote.ly b/input/regression/footnote.ly index 8086ecca74..037635965e 100644 --- a/input/regression/footnote.ly +++ b/input/regression/footnote.ly @@ -1,4 +1,4 @@ -\version "2.15.25" +\version "2.15.39" \header { texidoc = "Lilypond does footnotes." } @@ -15,7 +15,7 @@ \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 @@ -26,8 +26,8 @@ a b c d } \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. | }} diff --git a/input/regression/in-note.ly b/input/regression/in-note.ly index a7466f9fea..8748353513 100644 --- a/input/regression/in-note.ly +++ b/input/regression/in-note.ly @@ -1,4 +1,4 @@ -\version "2.15.25" +\version "2.15.39" \header { texidoc = "LilyPond does in-notes. @@ -10,10 +10,10 @@ \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\! } } } diff --git a/input/regression/time-signature-settings-by-staff.ly b/input/regression/time-signature-settings-by-staff.ly index b5ddc6f818..c772b7b1a4 100644 --- a/input/regression/time-signature-settings-by-staff.ly +++ b/input/regression/time-signature-settings-by-staff.ly @@ -1,4 +1,4 @@ -\version "2.14.0" +\version "2.15.17" \header { texidoc = " @@ -13,8 +13,8 @@ should be beamed 3/4, 1/4. The lower staff should be beamed 1/4, 3/4. \new StaffGroup << \new Staff { \overrideTimeSignatureSettings - #'(4 . 4) % timeSignatureFraction - #'(1 . 4) % baseMomentFraction + 4/4 % timeSignatureFraction + 1/4 % baseMomentFraction #'(3 1) % beatStructure #'() % beamExceptions \time 4/4 @@ -22,8 +22,8 @@ should be beamed 3/4, 1/4. The lower staff should be beamed 1/4, 3/4. } \new Staff { \overrideTimeSignatureSettings - #'(4 . 4) % timeSignatureFraction - #'(1 . 4) % baseMomentFraction + 4/4 % timeSignatureFraction + 1/4 % baseMomentFraction #'(1 3) % beatStructure #'() % beamExceptions \time 4/4 diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh index 179bae828f..79d07cfe7c 100644 --- a/lily/include/staff-symbol-referencer.hh +++ b/lily/include/staff-symbol-referencer.hh @@ -48,7 +48,17 @@ public: 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 *); diff --git a/lily/lexer.ll b/lily/lexer.ll index 78b6475303..bdbf128314 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -711,6 +711,11 @@ BOM_UTF8 \357\273\277 } } +{FRACTION} { + yylval.scm = scan_fraction (YYText ()); + return FRACTION; +} + -{UNSIGNED} | // backup rule {REAL} { yylval.scm = scm_c_read_string (YYText ()); @@ -721,6 +726,7 @@ BOM_UTF8 \357\273\277 return REAL; } +{UNSIGNED}/\/ | // backup rule {UNSIGNED} { yylval.scm = scm_c_read_string (YYText ()); return UNSIGNED; diff --git a/lily/parser.yy b/lily/parser.yy index 601d63fc31..49acd012d5 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -786,6 +786,9 @@ identifier_init: | number_expression { $$ = $1; } + | FRACTION { + $$ = $1; + } | string { $$ = $1; } @@ -2060,12 +2063,14 @@ simple_string: STRING { scalar: embedded_scm_arg | bare_number + | FRACTION | lyric_element ; scalar_closed: embedded_scm_arg_closed | bare_number + | FRACTION | lyric_element ; diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 7cf332e85c..6fad89ea54 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -349,7 +349,9 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i 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) diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc index d6d231de30..c446ca1a12 100644 --- a/lily/slur-configuration.cc +++ b/lily/slur-configuration.cc @@ -49,19 +49,15 @@ avoid_staff_line (Slur_score_state const &state, 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; @@ -278,11 +274,12 @@ Slur_configuration::score_encompass (Slur_score_state const &state) } 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]; @@ -292,12 +289,11 @@ Slur_configuration::score_encompass (Slur_score_state const &state) 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; } /* diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index b18bb04fa3..3b8aa6ba18 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -189,11 +189,23 @@ Staff_symbol_referencer::internal_set_position (Grob *me, Real p, bool pure) 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 diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index d93df73abf..e2c3736f70 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -497,22 +497,25 @@ Tie_formatting_problem::generate_configuration (int pos, Direction dir, 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 { @@ -718,9 +721,11 @@ Tie_formatting_problem::score_configuration (Tie_configuration *conf) const 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_, @@ -730,10 +735,11 @@ Tie_formatting_problem::score_configuration (Tie_configuration *conf) const } 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_ diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 37099683bf..643d07ae67 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -681,21 +681,20 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) /* 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; } diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 6e8210b9c1..7f9a2b9699 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.15.20" +\version "2.15.39" \context { \name "Global" @@ -614,7 +614,7 @@ automatically when an output definition (a @code{\score} or 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 diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 59a11264f7..842da9ace6 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -342,7 +342,7 @@ featherDurations= 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 diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 1a36b7fd19..fdfa7add3c 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -16,7 +16,7 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.14.0" +\version "2.15.39" %% %% setup for Request->Element conversion. @@ -225,7 +225,7 @@ %% 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 diff --git a/ly/string-tunings-init.ly b/ly/string-tunings-init.ly index b4259a8410..a003a1e492 100644 --- a/ly/string-tunings-init.ly +++ b/ly/string-tunings-init.ly @@ -75,8 +75,8 @@ for documentation purposes.") %% ukulele tunings \makeDefaultStringTuning #'ukulele-tuning \stringTuning \makeDefaultStringTuning #'ukulele-d-tuning \stringTuning -\makeDefaultStringTuning #'tenor-ukulele-tuning \stringTuning -\makeDefaultStringTuning #'baritone-ukulele-tuning \stringTuning +\makeDefaultStringTuning #'tenor-ukulele-tuning \stringTuning +\makeDefaultStringTuning #'baritone-ukulele-tuning \stringTuning %% orchestral strings \makeDefaultStringTuning #'violin-tuning \stringTuning diff --git a/po/README b/po/README index 7b9c400308..f691dbb6b8 100644 --- a/po/README +++ b/po/README @@ -28,12 +28,13 @@ automatically notified to lilypond-devel@gnu.org list by the FTP 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 ========= diff --git a/po/fr.po b/po/fr.po index 1ffefb7265..c9c2a6b247 100644 --- a/po/fr.po +++ b/po/fr.po @@ -10,7 +10,7 @@ msgstr "" "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 \n" "Language-Team: French \n" "Language: fr\n" @@ -62,12 +62,12 @@ msgstr "option ly inconnue et ignorée : %s" #: 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:" @@ -99,7 +99,7 @@ msgstr "" #: 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." @@ -352,7 +352,7 @@ msgid "" "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 "" @@ -360,7 +360,7 @@ 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 "" @@ -614,7 +614,7 @@ msgstr "" "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 @@ -834,7 +834,7 @@ msgstr "Niveau de journalisation fixé à %s" #: 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 @@ -844,12 +844,12 @@ msgstr "Erreur : %s" #: 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 @@ -897,7 +897,7 @@ msgstr "Impossible de convertir l'altération %s en expression LilyPond" #. 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." @@ -944,7 +944,7 @@ msgstr "Impossible de trouver \\begin{document} dans le document LaTeX." #, 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 @@ -981,7 +981,7 @@ msgstr "Impossible de déterminer l'armure." 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 @@ -991,7 +991,7 @@ msgstr "Détection d'un marqueur non traité : %s\n" #: 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 @@ -1075,7 +1075,7 @@ msgid "" "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 @@ -1219,12 +1219,12 @@ msgstr "Lecture du fichier MusicXML %s..." #: 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 @@ -1260,7 +1260,7 @@ msgstr "" #: 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 @@ -1322,7 +1322,7 @@ msgstr "quantifie les débuts de note sur DUR" #: 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" @@ -1531,7 +1531,7 @@ msgstr "%s est à jour." #: 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." @@ -1559,7 +1559,7 @@ msgstr "Traitement d'inclusion : %s" #: lilypond-book.py:608 #, python-format msgid "Removing `%s'" -msgstr "Suppression de « %s »" +msgstr "Suppression de « %s »" #: lilypond-book.py:699 #, python-format @@ -1636,18 +1636,18 @@ msgstr "Arrêt à la dernière règle appliquée avec succès" #: 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 @@ -1658,7 +1658,7 @@ msgid "" 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 @@ -1695,7 +1695,7 @@ msgstr "Niveau de journalisation fixé à %d\n" #: 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 @@ -1735,32 +1735,32 @@ msgstr "avertissement supprimé : %s" #: 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" @@ -1773,7 +1773,7 @@ msgstr "l'inclusion de fichiers n'est pas permise en mode sans échec" #: 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 @@ -1812,7 +1812,7 @@ msgstr "on les place en dessous" #: 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" @@ -1821,7 +1821,7 @@ msgstr "glissando non terminé" #: 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 @@ -1898,22 +1898,22 @@ msgstr "pas de glyphe correspondant au bécarre" #: 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" @@ -1922,12 +1922,12 @@ msgstr "La classe Event devrait être un symbole" #: 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 @@ -2037,12 +2037,12 @@ msgstr "Les pédales de piano nécessitent 3 cordes. Il y en a %ld" #: 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" @@ -2059,7 +2059,7 @@ msgstr "échec de la vérification d'octave, a obtenu : " #: 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" @@ -2097,7 +2097,7 @@ msgstr "Aucun n-olet à terminer" #, 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 @@ -2122,7 +2122,7 @@ msgstr "Calcul des sauts de page..." #, 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 @@ -2155,7 +2155,7 @@ msgstr "épisème non terminé" #: 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." @@ -2164,7 +2164,7 @@ msgstr "Les fontes musicales n'ont pas été installées correctement." #: 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" @@ -2177,7 +2177,7 @@ msgstr "Piste..." #: 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" @@ -2248,12 +2248,12 @@ msgstr "la source devrait spécifier des voix polyphoniques" #: 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 @@ -2324,7 +2324,7 @@ msgstr "Fichier de relocalisation : %s" #: 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 @@ -2350,7 +2350,7 @@ msgstr "réaffectation modulo 16" #: 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..." @@ -2359,12 +2359,12 @@ msgstr "Initialisation de 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..." @@ -2373,7 +2373,7 @@ msgstr "Construction de la base de donnée des fontes..." #: 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 @@ -2438,7 +2438,7 @@ msgstr "tentative pour %d systèmes" #: 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 @@ -2473,7 +2473,7 @@ msgstr "" "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 "" @@ -2655,7 +2655,7 @@ msgstr "une cage requiert %d arguments, il y en a %u" #: main.cc:345 #, c-format msgid "no such user: %s" -msgstr "utilisateur inconnu : « %s »" +msgstr "utilisateur inconnu : « %s »" #: main.cc:347 #, c-format @@ -2747,7 +2747,7 @@ msgstr " coupure précédente : %d" #: 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" @@ -2790,12 +2790,12 @@ msgstr "Événement %s précédent ici" #: 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?" @@ -2809,8 +2809,8 @@ msgstr "affectation faite malgré tout" #, 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" @@ -2827,7 +2827,7 @@ msgstr "extension de texte non terminée" #: 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" @@ -2870,24 +2870,24 @@ msgstr "" 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." @@ -2904,17 +2904,17 @@ msgstr "" #: 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 @@ -2950,7 +2950,7 @@ msgstr "" #: 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" @@ -2975,7 +2975,7 @@ msgstr "" #: 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 @@ -2990,12 +2990,12 @@ msgstr "\\%s implicite ajouté(e)" #. 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" @@ -3008,7 +3008,7 @@ msgstr "accord en tremolo non terminé" #: 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" @@ -3041,7 +3041,7 @@ msgstr "retrait de ce groupe vertical" #: 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" @@ -3081,7 +3081,7 @@ msgstr "répétition en pourcent non terminée" #: 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 @@ -3100,24 +3100,24 @@ msgstr "option interne inconnue : %s" #: 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 @@ -3195,20 +3195,20 @@ msgstr "suite à des erreurs répétées, l'expression musicale sera ignorée" #, 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 @@ -3218,7 +3218,7 @@ msgstr "impossible d'ouvrir le fichier en écriture : %s : %s" #: 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 @@ -3285,7 +3285,7 @@ msgstr "doit être en mode Chord pour des accords" #: 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" @@ -3298,7 +3298,7 @@ msgstr "Escamotage d'UTF-8 BOM" #: 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" @@ -3319,7 +3319,7 @@ msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation" #: 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" @@ -3345,12 +3345,12 @@ msgstr "Fin de fichier (EOF) à l'intérieur du commentaire" #: 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" @@ -3375,7 +3375,7 @@ msgstr "Programme plus qu'obsolète : %s (le fichier requiert %s)" #: 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 @@ -3400,7 +3400,7 @@ msgstr "interface d'objet graphique (Grob) inconnue : ~S" #: 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 #{ ... #}" @@ -3448,17 +3448,17 @@ msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }" #: 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. @@ -3470,12 +3470,12 @@ msgstr "Conversion à ~a..." #: 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 @@ -3499,7 +3499,7 @@ msgstr "fonte SVG ~S introuvable" #: 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" @@ -3534,12 +3534,12 @@ msgstr "erreur d'assertion : ~S" #: 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" @@ -3589,7 +3589,7 @@ msgstr "Redirection de la sortie vers ~a..." #: 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" @@ -3638,7 +3638,7 @@ msgstr "Actualisation de la fonte dans ~a" #: 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" @@ -3663,7 +3663,7 @@ msgstr "~S requiert de la musique" #: 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}." @@ -3672,7 +3672,7 @@ msgstr "Ajoute @var{octave-shift} à l'octave de @var{hauteur}." #: 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." @@ -3721,7 +3721,7 @@ msgstr "" #: 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." @@ -3730,13 +3730,13 @@ msgstr "Sélection de la langue des noms de note." #: 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 @@ -3810,7 +3810,7 @@ msgstr "impossible de trouver l'objet de type musique : ~S" #: 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" @@ -3900,7 +3900,7 @@ msgstr "Écriture de ~S..." #, 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 diff --git a/python/convertrules.py b/python/convertrules.py index 5c94c59e1f..acabe0237e 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -3346,6 +3346,25 @@ def conv (str): 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"(?\3"), str) + str = re.sub ("(" + matchmarkup + ")|" + + r"(?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)) @@ -202,16 +207,16 @@ expression." (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 "[" "]") @@ -494,7 +499,7 @@ Otherwise, return #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)) @@ -519,16 +524,21 @@ Otherwise, return #f." (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? ""))) @@ -538,16 +548,24 @@ Otherwise, return #f." (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)) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 8161601b78..658027c88c 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -228,7 +228,7 @@ duration stored in @code{duration}.") (FootnoteEvent . ((description . "Footnote a grob.") - (types . (general-music event footnote-event)) + (types . (general-music event post-event footnote-event)) )) (GlissandoEvent @@ -545,7 +545,7 @@ print anything, and also does not create staves or voices implicitly. 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 diff --git a/stepmake/stepmake/po-targets.make b/stepmake/stepmake/po-targets.make index 05088ee170..bb6215cf30 100644 --- a/stepmake/stepmake/po-targets.make +++ b/stepmake/stepmake/po-targets.make @@ -1,5 +1,14 @@ - - +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! @@ -21,12 +30,14 @@ ALL_PO_SOURCES = $(ALL_C_SOURCES) $(ALL_CC_SOURCES) $(PYTHON_SCRIPTS_IN) $(PY_MO 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 diff --git a/stepmake/stepmake/podir-targets.make b/stepmake/stepmake/podir-targets.make index 0b831c5c79..fdfa5ef33f 100644 --- a/stepmake/stepmake/podir-targets.make +++ b/stepmake/stepmake/podir-targets.make @@ -29,4 +29,3 @@ po-changes: po-replace: po-update mv $(outdir)/$(package).po $(package).pot - mv $(outdir)/*.po . diff --git a/tex/txi-nl.tex b/tex/txi-nl.tex new file mode 100644 index 0000000000..e5263e18f1 --- /dev/null +++ b/tex/txi-nl.tex @@ -0,0 +1,70 @@ +% $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 . + +\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}