]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 16 Jan 2012 23:27:57 +0000 (00:27 +0100)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 16 Jan 2012 23:27:57 +0000 (00:27 +0100)
62 files changed:
Documentation/changes.tely
Documentation/es/notation/input.itely
Documentation/fr/notation/input.itely
Documentation/notation/input.itely
Documentation/notation/repeats.itely
Documentation/notation/rhythms.itely
Documentation/search-box.ihtml
Documentation/snippets.tely
Documentation/snippets/alternative-bar-numbering.ly [new file with mode: 0644]
Documentation/snippets/ancient-notation-intro.itely
Documentation/snippets/chords-intro.itely
Documentation/snippets/contexts-and-engravers-intro.itely
Documentation/snippets/editorial-annotations-intro.itely
Documentation/snippets/editorial-annotations.snippet-list
Documentation/snippets/expressive-marks-intro.itely
Documentation/snippets/fretted-strings-intro.itely
Documentation/snippets/keyboards-intro.itely
Documentation/snippets/midi-intro.itely
Documentation/snippets/new/alternative-bar-numbering.ly [new file with mode: 0644]
Documentation/snippets/paper-and-layout-intro.itely
Documentation/snippets/percussion-intro.itely
Documentation/snippets/pitches-intro.itely
Documentation/snippets/repeats-intro.itely
Documentation/snippets/rhythms-intro.itely
Documentation/snippets/simultaneous-notes-intro.itely
Documentation/snippets/spacing-intro.itely
Documentation/snippets/staff-notation-intro.itely
Documentation/snippets/staff-notation.snippet-list
Documentation/snippets/template-intro.itely
Documentation/snippets/text-intro.itely
Documentation/snippets/titles-intro.itely
Documentation/snippets/tweaks-and-overrides-intro.itely
Documentation/snippets/tweaks-and-overrides.snippet-list
Documentation/snippets/unfretted-strings-intro.itely
Documentation/snippets/vocal-music-intro.itely
Documentation/snippets/winds-intro.itely
Documentation/snippets/world-music-intro.itely
Documentation/usage/lilypond-book.itely
Documentation/usage/running.itely
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
GNUmakefile.in
VERSION
input/regression/footnote-auto-numbering-page-reset.ly
input/regression/footnote-auto-numbering-vertical-order.ly
input/regression/footnote-auto-numbering.ly
input/regression/footnote-break-visibility.ly
input/regression/footnote-footer-padding.ly
input/regression/footnote-spanner.ly
input/regression/footnote.ly
input/regression/in-note.ly
ly/music-functions-init.ly
python/auxiliar/postprocess_html.py
python/book_base.py
python/book_latex.py
python/book_snippets.py
python/book_texinfo.py
python/convertrules.py
scripts/build/extract_texi_filenames.py
scripts/build/www_post.py
scripts/lilypond-book.py
stepmake/aclocal.m4

index 89ca12f4e87978cbb8825aa047c64bd5221a3069..50f2022cb29c087161107d3d1c074a52f692e37e 100644 (file)
@@ -60,6 +60,32 @@ which scares away people.
 * only show user-visible changes.
 
 @end ignore
+
+@item
+Two alternative methods for bar numbering can be set, especially for
+when using repeated music;
+
+@lilypond[fragment,quote,relative=1,noragged-right]
+\relative c'{
+  \set Score.alternativeNumberingStyle = #'numbers
+  \repeat volta 3 { c4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1 \break
+  \set Score.alternativeNumberingStyle = #'numbers-with-letters
+  \repeat volta 3 { c,4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1
+}
+@end lilypond
+
 @item
 Scheme expressions inside of embedded Lilypond (@code{#@{@dots{}#@}})
 are now executed in lexical closure of the surrounding Scheme code.
@@ -173,7 +199,6 @@ LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEB
   <e-1>-"left"
 @end lilypond
 
-
 @item
 The alignment of dynamic spanners (hairpins, text crescendo, etc.) is now
 automatically broken if a different direction is explicitly given.
index 1ef89b612caf0ed02078abb56edc9299932f6cd6..ddc1f3ec3368efc77aae875dca34cee7baad3b6e 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.17"
+@c \version "2.15.25"
 
 @node Entrada y salida generales
 @chapter Entrada y salida generales
@@ -1090,10 +1090,10 @@ los indicadores (y por tanto las notas al pie) durante la compilación.
 @translationof Automatic footnotes
 
 De las dos instrucciones utilizadas para crear notas al pie
-automáticas, utilice @code{\autoFootnoteGrob} para los grobs
+automáticas, utilice @code{\footnoteGrob} para los grobs
 individuales (es decir: la cabeza de las notas, plicas, ligaduras de
 expresión, matices dinámicos y elementos de @code{\markup} si se
-utilizan @code{TextScripts}); y @code{\autoFootnote} para anotar las
+utilizan @code{TextScripts}); y @code{\footnote} para anotar las
 notas de un acorde.
 
 Las dos instrucciones aceptan tres argumentos; el @var{Objeto de
@@ -1101,17 +1101,17 @@ presentación} que anotar, la posición @var{(x . y)} del indicador y un
 elemento de @code{\markup} que aparecerá en la nota, en la parte
 inferior de la página.
 
-La instrucción @code{\autoFootnoteGrob} debe ir @emph{antes} del grob
+La instrucción @code{\footnoteGrob} debe ir @emph{antes} del grob
 al que se adjunta la nota al pie:
 
 @lilypond[verbatim,quote,ragged-right,papersize=a8]
 \book {
   \header { tagline = ##f }
   \relative c' {
-    \autoFootnoteGrob #'NoteHead #'(0.5 . -2)
+    \footnote #'(0.5 . -2) #'NoteHead
       \markup { The first note }
     a'4 b8
-    \autoFootnoteGrob #'NoteHead #'(0.5 . 1)
+    \footnote #'(0.5 . 1) #'NoteHead
       \markup { The third note }
     e c4 d4
   }
@@ -1119,7 +1119,7 @@ al que se adjunta la nota al pie:
 @end lilypond
 
 Para anotar las notas de un acorde, la instrucción
-@code{\autoFootnote} debe ir @emph{después} de la nota a la que se
+@code{\footnote} debe ir @emph{después} de la nota a la que se
 quiere adjuntar la nota al pie como un @code{TextScript}:
 
 @lilypond[verbatim,quote,ragged-right,papersize=a8]
@@ -1127,9 +1127,9 @@ quiere adjuntar la nota al pie como un @code{TextScript}:
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\autoFootnote #'(1 . -1.25) "Here is a C"
-    es-\autoFootnote #'(2 . -0.25) \markup { \italic "An E-flat" }
-    g-\autoFootnote #'(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
   }
 }
@@ -1147,25 +1147,25 @@ línea informativa y la línea de copyright.
 \book {
   \header { copyright = \markup { "Copyright 1970" } }
   \relative c' {
-    \autoFootnoteGrob #'DynamicText #'(-3 . 0)
+    \footnote #'(-3 . 0) #'DynamicText
       \markup { \bold Forte }
 
-    \autoFootnoteGrob #'Slur #'(0 . 1.5)
+    \footnote #'(0 . 1.5) #'Slur
       \markup { A slur }
     a'4\f(
 
-    \autoFootnoteGrob #'Beam #'(0 . -2)
+    \footnote #'(0 . -2) #'Beam
       \markup { Beam }
     b8)[ e]
 
-    \autoFootnoteGrob #'Stem #'(1 . -1)
+    \footnote #'(1 . -1) #'Stem
       \markup  { \teeny { This is a stem } }
     c4
 
-    \autoFootnoteGrob #'AccidentalCautionary #'(0 . 0.5)
+    \footnote #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { A cautionary accidental }
 
-    \autoFootnoteGrob #'TextScript #'(0.5 . -0.5)
+    \footnote #'(0.5 . -0.5) #'TextScript
       \markup \italic { Slow Down }
     dis?4_"rit."
   }
@@ -1213,13 +1213,13 @@ que la nota al pie está anotando y adjuntada como un
 \book {
   \header { tagline = ##f }
   \relative c' {
-    a'4-\footnoteGrob #'NoteHead #'(0.5 . -2)
-          "1" \markup { \italic "1. The first note" }
+    a'4-\footnote
+          "1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
     b8
-    e-\footnoteGrob #'NoteHead #'(0.5 . 1)
-          \markup { \bold "2" } "2. The second note"
+    e-\footnote
+          \markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
     c4
-    d\p-\footnoteGrob #'DynamicText #'(0.5 . -1) "3" "3. Piano"
+    d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
   }
 }
 @end lilypond
@@ -1233,10 +1233,10 @@ adjuntarse como un @code{TextScript}:
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\footnote #'(1 . -1.25) "1" "1. C"
-    es-\footnote #'(2 . -0.25)
-       \markup { \bold "b" } "b. E-flat"
-    g-\footnote #'(2 . 3) "3" \markup { \italic "iii. G" }
+    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" }
     >1
   }
 }
@@ -1254,37 +1254,37 @@ informativa a la de copyright:
 \book {
   \header { tagline = ##f }
   \relative c' {
-    \footnoteGrob #'DynamicText #'(-3 . 0)
-      \markup { \teeny 1 }
+    \footnote
+      \markup { \teeny 1 } #'(-3 . 0) #'DynamicText
       \markup { 1. \bold Forte }
 
-    \footnoteGrob #'Slur #'(0 . 1.5)
-      \markup { \teeny b }
+    \footnote
+      \markup { \teeny b } #'(0 . 1.5) #'Slur
       \markup { b. A slur }
     a'4\f(
 
-    \footnoteGrob #'Beam #'(0 . -2)
-      \markup { \teeny 3 }
+    \footnote
+      \markup { \teeny 3 } #'(0 . -2) #'Beam
       \markup { 3. Beam }
     b8)[ e]
 
-    \footnoteGrob #'Stem #'(1 . -1)
-      \markup { 4 }
+    \footnote
+      \markup { 4 } #'(1 . -1) #'Stem
       \markup  { \bold 4. { This is a stem } }
     c4
 
-    \footnoteGrob #'AccidentalCautionary #'(0 . 0.5)
-      \markup \concat \teeny { "sharp (v)" }
+    \footnote
+      \markup \concat \teeny { "sharp (v)" } #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { v. A cautionary accidental }
 
-    \footnoteGrob #'TextScript #'(0.5 . -0.5)
-      \markup \concat \teeny { "a" }
+    \footnote
+      \markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
       \markup \italic { a. Slow Down }
     dis?4_"rit."
 
     \breathe
-    \footnoteGrob #'BreathingSign #'(1.5 . -0.25)
-      \markup { \teeny \musicglyph #"rests.4" }
+    \footnote
+      \markup { \teeny \musicglyph #"rests.4" } #'(1.5 . -0.25) #'BreathingSign
       \markup { \null }
   }
 }
index 52f6634e93e76ad5e0e6c6bda89048d7c7ac29bc..54c10d6f90a6862531df4b2aebda14db2e3c3fe1 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.17"
+@c \version "2.15.25"
 
 @c Translators: Jean-Charles Malahieude, Valentin Villenave
 
@@ -1139,15 +1139,15 @@ appels et comment les annotations seront créées lors de la compilation.
 @cindex note de bas de page automatique
 @cindex bas de page, note automatique
 
-@funindex \autoFootnote
-@funindex \autoFootnoteGrob
+@funindex \footnote
+@funindex \footnoteGrob
 @funindex \auto-footnote
 
 LilyPond dispose, selon l'objet à référencer, de deux différentes
 commandes pour créer des notes de bas de page automatiques.  La commande
-@code{\autoFootnoteGrob} s'applique aux objets individuels, tels que
+@code{\footnoteGrob} s'applique aux objets individuels, tels que
 tête de note, hampe, liaison, nuance ou @code{\markup} contenant un
-@code{TextScripts}.  La commande @code{\autoFootnote}, quant à elle,
+@code{TextScripts}.  La commande @code{\footnote}, quant à elle,
 permet de référencer l'une des notes d'un accord.
 
 Ces deux commandes requièrent trois arguments@tie{}: l'@var{Objet de
@@ -1155,7 +1155,7 @@ Rendu} devant être annoté, la position @var{(x@tie{}.@tie{}y)} de
 l'appel de note, et enfin un @code{\markup} contenant l'annotation qui
 apparaîtra en bas de la page.
 
-La commande @code{\autoFootnoteGrob} doit être mentionnée @strong{avant}
+La commande @code{\footnoteGrob} doit être mentionnée @strong{avant}
 l'objet auquel la note est attachée.
 
 @c KEEP LY
@@ -1163,10 +1163,10 @@ l'objet auquel la note est attachée.
 \book {
   \header { tagline = ##f }
   \relative c' {
-    \autoFootnoteGrob #'NoteHead #'(0.5 . -2)
+    \footnote #'(0.5 . -2) #'NoteHead
       \markup { La première note }
     a'4 b8
-    \autoFootnoteGrob #'NoteHead #'(0.5 . 1)
+    \footnote #'(0.5 . 1) #'NoteHead
       \markup { La troisième note }
     e c4 d4
   }
@@ -1174,7 +1174,7 @@ l'objet auquel la note est attachée.
 @end lilypond
 
 Lorsqu'il s'agit de notes inscrites dans un accord, la commande
-@code{\autoFootnote} doit être mentionnée @strong{après} la note à
+@code{\footnote} doit être mentionnée @strong{après} la note à
 laquelle le @code{TextScript} fait référence.
 
 @c KEEP LY
@@ -1183,9 +1183,9 @@ laquelle le @code{TextScript} fait référence.
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\autoFootnote #'(1 . -1.25) "Voici un do"
-    es-\autoFootnote #'(2 . -0.25) \markup { \italic "Un mi bémol" }
-    g-\autoFootnote #'(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
   }
 }
@@ -1204,25 +1204,25 @@ et le pied de page.
 \book {
   \header { copyright = \markup { "Copyright 1970" } }
   \relative c' {
-    \autoFootnoteGrob #'DynamicText #'(-3 . 0)
+    \footnote #'(-3 . 0) #'DynamicText
       \markup { \bold Forte }
 
-    \autoFootnoteGrob #'Slur #'(0 . 1.5)
+    \footnote #'(0 . 1.5) #'Slur
       \markup { A slur }
     a'4\f(
 
-    \autoFootnoteGrob #'Beam #'(0 . -2)
+    \footnote #'(0 . -2) #'Beam
       \markup { Beam }
     b8)[ e]
 
-    \autoFootnoteGrob #'Stem #'(1 . -1)
+    \footnote #'(1 . -1) #'Stem
       \markup  { \teeny { This is a stem } }
     c4
 
-    \autoFootnoteGrob #'AccidentalCautionary #'(0 . 0.5)
+    \footnote #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { A cautionary accidental }
 
-    \autoFootnoteGrob #'TextScript #'(0.5 . -0.5)
+    \footnote #'(0.5 . -0.5) #'TextScript
       \markup \italic { Slow Down }
     dis?4_"rit."
   }
@@ -1274,13 +1274,13 @@ articulation.
 \book {
   \header { tagline = ##f }
   \relative c' {
-    a'4-\footnoteGrob #'NoteHead #'(0.5 . -2)
-          "1" \markup { \italic "1. The first note" }
+    a'4-\footnote
+          "1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
     b8
-    e-\footnoteGrob #'NoteHead #'(0.5 . 1)
-          \markup { \bold "2" } "2. The second note"
+    e-\footnote
+          \markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
     c4
-    d\p-\footnoteGrob #'DynamicText #'(0.5 . -1) "3" "3. Piano"
+    d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
   }
 }
 @end lilypond
@@ -1294,10 +1294,10 @@ l'annotation fait référence, comme s'il s'agissait d'une articulation.
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\footnote #'(1 . -1.25) "1" "1. C"
-    es-\footnote #'(2 . -0.25)
-       \markup { \bold "b" } "b. E-flat"
-    g-\footnote #'(2 . 3) "3" \markup { \italic "iii. G" }
+    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" }
     >1
   }
 }
@@ -1316,37 +1316,37 @@ et le pied de page.
 \book {
   \header { copyright = \markup { "Copyright 1970" } }
   \relative c' {
-    \footnoteGrob #'DynamicText #'(-3 . 0)
-      \markup { \teeny 1 }
+    \footnote
+      \markup { \teeny 1 } #'(-3 . 0) #'DynamicText
       \markup { 1. \bold Forte }
 
-    \footnoteGrob #'Slur #'(0 . 1.5)
-      \markup { \teeny b }
+    \footnote
+      \markup { \teeny b } #'(0 . 1.5) #'Slur
       \markup { b. A slur }
     a'4\f(
 
-    \footnoteGrob #'Beam #'(0 . -2)
-      \markup { \teeny 3 }
+    \footnote
+      \markup { \teeny 3 } #'(0 . -2) #'Beam
       \markup { 3. Beam }
     b8)[ e]
 
-    \footnoteGrob #'Stem #'(1 . -1)
-      \markup { 4 }
+    \footnote
+      \markup { 4 } #'(1 . -1) #'Stem
       \markup  { \bold 4. { This is a stem } }
     c4
 
-    \footnoteGrob #'AccidentalCautionary #'(0 . 0.5)
-      \markup \concat \teeny { "sharp (v)" }
+    \footnote
+      \markup \concat \teeny { "sharp (v)" } #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { v. A cautionary accidental }
 
-    \footnoteGrob #'TextScript #'(0.5 . -0.5)
-      \markup \concat \teeny { "a" }
+    \footnote
+      \markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
       \markup \italic { a. Slow Down }
     dis?4_"rit."
 
     \breathe
-    \footnoteGrob #'BreathingSign #'(1.5 . -0.25)
-      \markup { \teeny \musicglyph #"rests.4" }
+    \footnote
+      \markup { \teeny \musicglyph #"rests.4" } #'(1.5 . -0.25) #'BreathingSign
       \markup { \null }
   }
 }
index 9b020b0785027e10e207fb2b4f0c1d14c9cb1317..9ec2b19b793c80a9079ae4e24dda8da1cf991723 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.15.17"
+@c \version "2.15.25"
 
 @node General input and output
 @chapter General input and output
@@ -1041,33 +1041,33 @@ indicator and so footnotes are created during compilation.
 @unnumberedsubsubsec Automatic footnotes
 
 Of the two commands used to create automatic footnotes, use
-@code{\autoFootnoteGrob} for individual grobs (i.e. note heads, stems,
+@code{\footnoteGrob} for individual grobs (i.e. note heads, stems,
 slurs, dynamics and @code{\markup} when using @code{TextScripts});
-and @code{\autoFootnote} for annotating chorded notes.
+and @code{\footnote} for annotating chorded notes.
 
 Both commands take three arguments; the @var{Layout Object} to be
 annotated, the @var{(x . y)} position of the indicator and a
 @code{\markup} that will appear in the footnote at the bottom of the
 page.
 
-The command @code{\autoFootnoteGrob} must come @emph{before} the grob
+The command @code{\footnoteGrob} must come @emph{before} the grob
 that the footnote is being attached to:
 
 @lilypond[verbatim,quote,ragged-right,papersize=a8]
 \book {
   \header { tagline = ##f }
   \relative c' {
-    \autoFootnoteGrob #'NoteHead #'(0.5 . -2)
+    \footnote #'(0.5 . -2) #'NoteHead
       \markup { The first note }
     a'4 b8
-    \autoFootnoteGrob #'NoteHead #'(0.5 . 1)
+    \footnote #'(0.5 . 1) #'NoteHead
       \markup { The third note }
     e c4 d4
   }
 }
 @end lilypond
 
-To annotate chorded notes, the @code{\autoFootnote} must come
+To annotate chorded notes, the @code{\footnote} must come
 @emph{after} the note to which the footnote is being attached as a
 @code{TextScript}:
 
@@ -1076,9 +1076,9 @@ To annotate chorded notes, the @code{\autoFootnote} must come
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\autoFootnote #'(1 . -1.25) "Here is a C"
-    es-\autoFootnote #'(2 . -0.25) \markup { \italic "An E-flat" }
-    g-\autoFootnote #'(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
   }
 }
@@ -1095,25 +1095,25 @@ the relative position of the footnotes to the tagline and copyright.
 \book {
   \header { copyright = \markup { "Copyright 1970" } }
   \relative c' {
-    \autoFootnoteGrob #'DynamicText #'(-3 . 0)
+    \footnote #'(-3 . 0) #'DynamicText
       \markup { \bold Forte }
 
-    \autoFootnoteGrob #'Slur #'(0 . 1.5)
+    \footnote #'(0 . 1.5) #'Slur
       \markup { A slur }
     a'4\f(
 
-    \autoFootnoteGrob #'Beam #'(0 . -2)
+    \footnote #'(0 . -2) #'Beam
       \markup { Beam }
     b8)[ e]
 
-    \autoFootnoteGrob #'Stem #'(1 . -1)
+    \footnote #'(1 . -1) #'Stem
       \markup  { \teeny { This is a stem } }
     c4
 
-    \autoFootnoteGrob #'AccidentalCautionary #'(0 . 0.5)
+    \footnote #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { A cautionary accidental }
 
-    \autoFootnoteGrob #'TextScript #'(0.5 . -0.5)
+    \footnote #'(0.5 . -0.5) #'TextScript
       \markup \italic { Slow Down }
     dis?4_"rit."
   }
@@ -1158,13 +1158,13 @@ the footnote is annotating and attached as a @code{TextScript}:
 \book {
   \header { tagline = ##f }
   \relative c' {
-    a'4-\footnoteGrob #'NoteHead #'(0.5 . -2)
-          "1" \markup { \italic "1. The first note" }
+    a'4-\footnote
+          "1" #'(0.5 . -2) #'NoteHead \markup { \italic "1. The first note" }
     b8
-    e-\footnoteGrob #'NoteHead #'(0.5 . 1)
-          \markup { \bold "2" } "2. The second note"
+    e-\footnote
+          \markup { \bold "2" } #'(0.5 . 1) #'NoteHead "2. The second note"
     c4
-    d\p-\footnoteGrob #'DynamicText #'(0.5 . -1) "3" "3. Piano"
+    d\p-\footnote "3" #'(0.5 . -1) #'DynamicText "3. Piano"
   }
 }
 @end lilypond
@@ -1178,10 +1178,10 @@ the note that the footnote is annotating and attached as a
   \header { tagline = ##f }
   \relative c' {
     <
-    c-\footnote #'(1 . -1.25) "1" "1. C"
-    es-\footnote #'(2 . -0.25)
-       \markup { \bold "b" } "b. E-flat"
-    g-\footnote #'(2 . 3) "3" \markup { \italic "iii. G" }
+    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" }
     >1
   }
 }
@@ -1198,37 +1198,37 @@ the relative position of the footnotes to the tagline and copyright
 \book {
   \header { tagline = ##f }
   \relative c' {
-    \footnoteGrob #'DynamicText #'(-3 . 0)
-      \markup { \teeny 1 }
+    \footnote
+      \markup { \teeny 1 } #'(-3 . 0) #'DynamicText
       \markup { 1. \bold Forte }
 
-    \footnoteGrob #'Slur #'(0 . 1.5)
-      \markup { \teeny b }
+    \footnote
+      \markup { \teeny b } #'(0 . 1.5) #'Slur
       \markup { b. A slur }
     a'4\f(
 
-    \footnoteGrob #'Beam #'(0 . -2)
-      \markup { \teeny 3 }
+    \footnote
+      \markup { \teeny 3 } #'(0 . -2) #'Beam
       \markup { 3. Beam }
     b8)[ e]
 
-    \footnoteGrob #'Stem #'(1 . -1)
-      \markup { 4 }
+    \footnote
+      \markup { 4 } #'(1 . -1) #'Stem
       \markup  { \bold 4. { This is a stem } }
     c4
 
-    \footnoteGrob #'AccidentalCautionary #'(0 . 0.5)
-      \markup \concat \teeny { "sharp (v)" }
+    \footnote
+      \markup \concat \teeny { "sharp (v)" } #'(0 . 0.5) #'AccidentalCautionary
       \markup \italic { v. A cautionary accidental }
 
-    \footnoteGrob #'TextScript #'(0.5 . -0.5)
-      \markup \concat \teeny { "a" }
+    \footnote
+      \markup \concat \teeny { "a" } #'(0.5 . -0.5) #'TextScript
       \markup \italic { a. Slow Down }
     dis?4_"rit."
 
     \breathe
-    \footnoteGrob #'BreathingSign #'(1.5 . -0.25)
-      \markup { \teeny \musicglyph #"rests.4" }
+    \footnote
+      \markup { \teeny \musicglyph #"rests.4" } #'(1.5 . -0.25) #'BreathingSign
       \markup { \null }
   }
 }
index 57a5dfb8fea3cf0901be361cff50d39565e8ebdb..2a0d5fdbd89b8179bc1abc1708ad13af8211da1b 100644 (file)
@@ -239,10 +239,10 @@ g1 |
 The @code{measureLength} property is described in @ref{Time
 administration}.
 
-@cindex repeats with ties
-@cindex alternative endings with ties
-@cindex ties in repeats
-@cindex ties in alternative endings
+@cindex repeats, with ties
+@cindex alternative endings, with ties
+@cindex ties, in repeats
+@cindex ties, alternative endings
 @funindex \repeatTie
 
 Ties may be added to a second ending:
@@ -257,7 +257,6 @@ c1
 @end lilypond
 
 @snippets
-
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {shortening-volta-brackets.ly}
 
@@ -267,6 +266,12 @@ c1
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {setting-the-double-repeat-default-for-volte.ly}
 
+@cindex repeats, bar numbers letters
+@cindex repeats, alternative bar numbers
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{alternative-bar-numbering.ly}
+
 @seealso
 Music Glossary:
 @rglos{repeat},
@@ -286,9 +291,7 @@ Internals Reference:
 @rinternals{VoltaRepeatedMusic},
 @rinternals{UnfoldedRepeatedMusic}.
 
-
 @knownissues
-
 @cindex repeat, ambiguous
 @cindex nested repeat
 @cindex repeat, nested
index 5719c73ea7e0eca3c1a02cefc77aeff049756ce3..6b86eb6a3c9e8697009ef182226e4872a413d0a9 100644 (file)
@@ -2747,9 +2747,7 @@ c1 | c | c | c
 c1 | c | c | c
 @end lilypond
 
-
 @snippets
-
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-the-bar-number-for-the-first-measure.ly}
 
@@ -2762,6 +2760,12 @@ c1 | c | c | c
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-bar-numbers-inside-boxes-or-circles.ly}
 
+@cindex bar numbers, with letters
+@cindex bar numbers, with repeats
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{alternative-bar-numbering.ly}
+
 @cindex bar number alignment
 
 @lilypondfile[verbatim,quote,texidoc,doctitle]
@@ -2770,7 +2774,6 @@ c1 | c | c | c
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {removing-bar-numbers-from-a-score.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Rhythms}.
@@ -2779,7 +2782,6 @@ Internals Reference:
 @rinternals{BarNumber},
 @rinternals{Bar_number_engraver}.
 
-
 @cindex bar number collision
 @cindex collision, bar number
 
index d789109484afc0dd0fb1d6a32302f5731205f468..eaac109bcc561a7321e489e048cf8ed6aec59fae 100644 (file)
@@ -1,11 +1,19 @@
+<!--
+we depend on an external entity here, which we cannot control.  Suppose
+we go from 2.15.x to 2.17.x and put the documentation under "v2.17".
+For some time, Google won't have the new location in its index, so the
+search would get nothing.  It would be better to keep "v2.15" in the
+search for a while and have a redirection from "v2.15" to "v2.17".
+-->
+
 <form action="http://google.com/search"
       method="get"
       name="search"
-      onSubmit="search.q.value='site:lilypond.org +v2.14 '
+      onSubmit="search.q.value='site:lilypond.org/doc/v2.15 '
                + search.brute_query.value"
-      onMouseMove="search.q.value='site:lilypond.org +v2.14 '
+      onMouseMove="search.q.value='site:lilypond.org/doc/v2.15 '
                   + search.brute_query.value"
-      onKeyUp="search.q.value='site:lilypond.org +v2.14 '
+      onKeyUp="search.q.value='site:lilypond.org/doc/v2.15 '
               + search.brute_query.value">
   <input type="hidden" name="btnG" value="Google Search">
   <input type="text" name="brute_query" onfocus="this.value=''" value="Search">
index b44f4c5a901963b59f290a0e8f4680305461e5c1..2d30fa92ae0d72617e8ea81286055a5848009853 100644 (file)
@@ -41,15 +41,20 @@ by the authors.
 @include macros.itexi
 
 @ifnothtml
+@macro nodeprefix{PRE}
+@end macro
 @macro lydoctitle{TEXT}
 @unnumberedsec \TEXT\
 @end macro
 @end ifnothtml
 
 @ifhtml
+@macro nodeprefix{PRE}
+@unmacro lydoctitle
 @macro lydoctitle{TEXT}
-@node \TEXT\
-@unnumberedsec \TEXT\
+@node \PRE\: \\TEXT\\
+@unnumberedsec \\TEXT\\
+@end macro
 @end macro
 @end ifhtml
 
diff --git a/Documentation/snippets/alternative-bar-numbering.ly b/Documentation/snippets/alternative-bar-numbering.ly
new file mode 100644 (file)
index 0000000..aead8fc
--- /dev/null
@@ -0,0 +1,35 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.15.24
+\version "2.15.24"
+
+\header {
+  lsrtags = "editorial-annotations, staff-notation, tweaks-and-overrides"
+  texidoc = "Two alternative methods for bar numbering can be set,
+  especially for when using repeated music."
+  doctitle = "Alternative bar numbering"
+} % begin verbatim
+
+
+\relative c'{
+  \set Score.alternativeNumberingStyle = #'numbers
+  \repeat volta 3 { c4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1 \break
+  \set Score.alternativeNumberingStyle = #'numbers-with-letters
+  \repeat volta 3 { c,4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1
+}
index a6de3f24c603c6dc1d2ecd43dea37623a322a40d..30b13b9828f16d15fe797cfc9e918ec7c2a36507 100644 (file)
@@ -1,5 +1,6 @@
 @node Ancient notation
 @unnumbered Ancient notation
+@nodeprefix Ancient notation
 
 @ruser{Ancient notation}
 
index 83aeaaaf25077a5ce926943fe4f726066363837e..1427e49a5bc69fb4f0fc3bf3512559c1f45e1360 100644 (file)
@@ -1,5 +1,6 @@
 @node Chords
 @unnumbered Chords
+@nodeprefix Chords
 
 @ruser{Chord notation}
 
index ef796b0592511526d57ad1d251c5892b47ba7d41..e4e11670ccf26d898d56901afbdd819e9802a61c 100644 (file)
@@ -1,5 +1,6 @@
 @node Contexts and engravers
 @unnumbered Contexts and engravers
+@nodeprefix Contexts and engravers
 
 @c FIXME make xref more precise when the chapter has been
 @c revised in GDP
index 0dd710632ac2de83c62a1d04188909418be2467e..793c8570b1896be3ad9203e4475f03010334481f 100644 (file)
@@ -1,5 +1,6 @@
 @node Editorial annotations
 @unnumbered Editorial annotations
+@nodeprefix Editorial annotations
 
 @ruser{Editorial annotations}
 
index 2d819b39c3d8f106e06b115b81a824c31409dfad..8b488aae5c89519e45e122d66bc68f82c618632e 100644 (file)
@@ -1,5 +1,6 @@
 adding-fingerings-to-a-score.ly
 allowing-fingerings-to-be-printed-inside-the-staff.ly
+alternative-bar-numbering.ly
 analysis-brackets-above-the-staff.ly
 applying-note-head-styles-depending-on-the-step-of-the-scale.ly
 avoiding-collisions-with-chord-fingerings.ly
index c869a5347ce731e3d12449c00dfbba458bffe156..60598e5420cf28a3368db8cba13ccfd7f2cc88c2 100644 (file)
@@ -1,5 +1,6 @@
 @node Expressive marks
 @unnumbered Expressive marks
+@nodeprefix Expressive marks
 
 @ruser{Expressive marks}
 
index 48a1fea65cbd5f4b928d4b3af4557b860bbc4ee9..308e4694bdc7a1693247ff6693a83dd3c611bb46 100644 (file)
@@ -1,5 +1,6 @@
 @node Fretted strings
 @unnumbered Fretted strings
+@nodeprefix Fretted strings
 
 @ruser{Fretted string instruments}
 
index 3fd9b07b27a1ceb4aafc406cd18882388b9df55e..21675bec1444a02c14a058983f7bd9f36f175146 100644 (file)
@@ -1,5 +1,6 @@
 @node Keyboards
 @unnumbered Keyboards
+@nodeprefix Keyboards
 
 @ruser{Keyboard and other multi-staff instruments}
 
index cfa76077b8077eb8b9bb07105a08b50f3d9605bd..3302e03eab81fbd45bbd9ce3371af945117cd9de 100644 (file)
@@ -1,5 +1,6 @@
 @node MIDI
 @unnumbered MIDI
+@nodeprefix MIDI
 
 @ruser{MIDI output}
 
diff --git a/Documentation/snippets/new/alternative-bar-numbering.ly b/Documentation/snippets/new/alternative-bar-numbering.ly
new file mode 100644 (file)
index 0000000..e270df4
--- /dev/null
@@ -0,0 +1,27 @@
+\version "2.15.24"
+
+\header {
+  lsrtags = "editorial-annotations, staff-notation, tweaks-and-overrides"
+  texidoc = "Two alternative methods for bar numbering can be set,
+  especially for when using repeated music."
+  doctitle = "Alternative bar numbering"
+}
+
+\relative c'{
+  \set Score.alternativeNumberingStyle = #'numbers
+  \repeat volta 3 { c4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1 \break
+  \set Score.alternativeNumberingStyle = #'numbers-with-letters
+  \repeat volta 3 { c,4 d e f | }
+    \alternative {
+      { c4 d e f | c2 d \break }
+      { f4 g a b | f4 g a b | f2 a | \break }
+      { c4 d e f | c2 d }
+    }
+  c1
+}
index 5b654b797f4744479abb1da630f5100d83a3de63..f227ffe80d3dd8e06a00f4ccdd1d9529bc0ce42a 100644 (file)
@@ -1,5 +1,6 @@
 @node Paper and layout
 @unnumbered Paper and layout
+@nodeprefix Paper and layout
 
 @c FIXME not precise enough reference?
 @ruser{Spacing issues}
index 68369ab077976c13217590aa5eeaab602eca4fa5..01a3cb42c5e8c4a05874887754cd67d839807453 100644 (file)
@@ -1,5 +1,6 @@
 @node Percussion
 @unnumbered Percussion
+@nodeprefix Percussion
 
 @ruser{Percussion}
 
index 7ca94ff7a27b73216251cb839df439273cc5945c..6141af9afcb434af626c2a01261ef1c022e777ca 100644 (file)
@@ -1,5 +1,6 @@
 @node Pitches
 @unnumbered Pitches
+@nodeprefix Pitches
 
 @ruser{Pitches}
 
index 896f8f8e4e0382375caa14b2fade94b55b8478f1..27556b74a8a7545b068e361ce46516956c6edd6f 100644 (file)
@@ -1,5 +1,6 @@
 @node Repeats
 @unnumbered Repeats
+@nodeprefix Repeats
 
 @ruser{Repeats}
 
index dede3bf13ef88105eff80caf606c877ab61dc160..ec7b2a923ec2cb0e62ea6208b24b88b43ee33ead 100644 (file)
@@ -1,5 +1,6 @@
 @node Rhythms
 @unnumbered Rhythms
+@nodeprefix Rhythms
 
 @ruser{Rhythms}
 
index 9a4612c2eafaca45b61d3757992f05a90274bd7a..8a2d2a275ad057f77059eaaf04c0d9353e0e759c 100644 (file)
@@ -1,5 +1,6 @@
 @node Simultaneous notes
 @unnumbered Simultaneous notes
+@nodeprefix Simultaneous notes
 
 @ruser{Simultaneous notes}
 
index c19a14091cf2624bbf32ffb112089ef886a62029..b29c9fcb59f423bef87e62afa395bf9fb9addbe7 100644 (file)
@@ -1,5 +1,6 @@
 @node Spacing
 @unnumbered Spacing
+@nodeprefix Spacing
 
 @ruser{Spacing issues}
 
index b78176376a3d5f9f223bdb05dda8d3f1202f144e..e71bb4d78f1ef5ff6a4ac23a4c3d8cfe8ec906a2 100644 (file)
@@ -1,5 +1,6 @@
 @node Staff notation
 @unnumbered Staff notation
+@nodeprefix Staff notation
 
 @ruser{Staff notation}
 
index 66e304c880345b7ebaa5e9befa3caad26a338499..68d68be232d6feddfae803a101b5c7d9af024e9b 100644 (file)
@@ -3,6 +3,7 @@ adding-an-extra-staff-at-a-line-break.ly
 adding-an-extra-staff.ly
 adding-indicators-to-staves-which-get-split-after-a-break.ly
 adding-orchestral-cues-to-a-vocal-score.ly
+alternative-bar-numbering.ly
 changing-the-number-of-lines-in-a-staff.ly
 changing-the-staff-size.ly
 creating-blank-staves.ly
index 22c9952e840cbabbc9718ea396ed137ff104dc94..1521e0cd34678b2307c87e4a97ccc2fa45c662ca 100644 (file)
@@ -1,5 +1,6 @@
 @node Templates
 @unnumbered Templates
+@nodeprefix Templates
 
 @lysnippets
 
index eb71a4598e354aec165670d1ed661eaaea94a9c7..a3c95a403a2a06daaac21fe69d9f70cb0513210b 100644 (file)
@@ -1,5 +1,6 @@
 @node Text
 @unnumbered Text
+@nodeprefix Text
 
 @ruser{Text}
 
index 1d4c288f93de6e90f6d81e1eab6eff308e0c4ad9..9a5f466c758d00d89b39ee34c9852d4e9827451f 100644 (file)
@@ -1,5 +1,6 @@
 @node Titles
 @unnumbered Titles
+@nodeprefix Titles
 
 @ruser{Titles and headers}
 
index d5308b5bf8ccb12d3803d33b4936b271c1a1b442..7721859f1e58b579eef960cbb8031e87b7f047d7 100644 (file)
@@ -1,5 +1,6 @@
 @node Tweaks and overrides
 @unnumbered Tweaks and overrides
+@nodeprefix Tweaks and overrides
 
 @c FIXME make xref more precise when the chapter has been
 @c revised in GDP
index 971ed8b08fe58831676f0ea9bd139470d1285243..2a20fe21911655f19f275bc03c6011360f016c4c 100644 (file)
@@ -1,5 +1,6 @@
 adjusting-grace-note-spacing.ly
 altering-the-length-of-beamed-stems.ly
+alternative-bar-numbering.ly
 analysis-brackets-above-the-staff.ly
 asymmetric-slurs.ly
 avoiding-collisions-with-chord-fingerings.ly
index 4770fa7bec23193a5c1d55d2dad12bccd9c68d7f..959b85201395acf026e5c1b05b974f4138261148 100644 (file)
@@ -1,5 +1,6 @@
 @node Unfretted strings
 @unnumbered Unfretted strings
+@nodeprefix Unfretted strings
 
 @ruser{Unfretted string instruments}
 
index fd192ae9259557bb14d5c7ad8522e8a559d0b030..26326831de7246ac0e64fae3e5f0a2d331cefec0 100644 (file)
@@ -1,5 +1,6 @@
 @node Vocal music
 @unnumbered Vocal music
+@nodeprefix Vocal music
 
 @ruser{Vocal music}
 
index 01c5671f6f18b89beb037111663ffbff01950c2d..89e35e20d651b69515a2b2b26de8e854ac3ea979 100644 (file)
@@ -1,5 +1,6 @@
 @node Winds
 @unnumbered Winds
+@nodeprefix Winds
 
 @ruser{Wind instruments}
 
index 7dc01da4d365d76ac8385785fe207bc87f92e55d..63977c850f447465bcee54f48c3165a700909589 100644 (file)
@@ -1,5 +1,6 @@
 @node World music
 @unnumbered World music
+@nodeprefix World music
 
 @ruser{World music}
 
index 95499d06def5072f4c3c3f376e160456f6c024bf..8b38c1c46dbfd054aec59c4377af974921a45a0f 100644 (file)
@@ -26,24 +26,25 @@ substituted for the music.  The line width and font size definitions for
 the music are adjusted to match the layout of your document.
 
 This is a separate program from @command{lilypond} itself, and is run
-on the command line; for more information, see @ref{Command-line
-usage}.  If you have MacOS 10.3 or 10.4 and you have trouble running
-@code{lilypond-book}, see @rweb{MacOS X}.
+on the command line; for more information, see
+@ref{Command-line usage}.  If you have trouble running
+@code{lilypond-book} on Windows or Mac OS X using the command line, then
+see either @rweb{Windows} or @rweb{MacOS X}.
 
 This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook
 documents.
 
 @cindex texinfo
-@cindex latex
+@cindex LaTex
 @cindex texinfo
 @cindex texi
-@cindex html
+@cindex HTML
 @cindex docbook
-@cindex documents, adding music to
-@cindex HTML, music in
-@cindex Texinfo, music in
-@cindex DocBook, music in
-@cindex @LaTeX{}, music in
+@cindex documents, adding music
+@cindex HTML, adding music
+@cindex Texinfo, adding music
+@cindex DocBook, adding music
+@cindex LaTeX, adding music
 
 @menu
 * An example of a musicological document::
@@ -910,6 +911,19 @@ are harmless and may be ignored.  If you are running @command{latex} in
 twocolumn mode, remember to add @option{-t landscape} to the
 @command{dvips} options.
 
+@knownissues
+The @code{\pageBreak} command will not work within a
+@code{\begin@{lilypond@} @dots{} \end@{lilypond@}} environment.
+
+Many @code{\paper} block variables will also not work within a
+@code{\begin@{lilypond@} @dots{} \end@{lilypond@}} environment.  Use
+@code{\newcommand} with @code{\betweenLilyPondSystem} in the preamble;
+
+@example
+\newcommand@{\betweenLilyPondSystem@}[1]@{\vspace@{36mm@}\linebreak@}
+@end example
+
+
 @subsubheading Texinfo
 
 To produce a Texinfo document (in any output format), follow the normal
index 7f49e9802df45fc33c3b6f6befe22c9313ab6198..1a6c59dc41d6c7946eab37e5e28bfefb8bdc1c0d 100644 (file)
@@ -319,11 +319,11 @@ on the command-line, and include
 #(use-modules (guile-user))
 @end example
 
-@warning{Windows users must use double quotes instead of single quotes.}
-
 @noindent
 at the top of the @code{.ly} file.
 
+@warning{Windows users must use double quotes instead of single quotes.}
+
 @cindex output, format
 @cindex format, output
 
index 7a27ce1a91a04c8b7053a6e7b4ff0610e82cf1ca..f6d19d07ec8f4dbe43727ac346cfaae0f0092065 100644 (file)
@@ -518,6 +518,12 @@ St. James's Church in Manhattan, May 8, 2009, by Frederick Renz
 and his ensemble @uref{http://www.earlymusicny.org/, Early Music
 New York} (engraving by Nicolas Sceaux).
 
+@item
+Mussorgsky's @emph{Pictures at an exhibition}, re-orchestrated and
+conducted by @uref{http://www.aurelienbello.com/,Aurélien Bello} with
+the @uref{http://www.junge-philharmonie-brandenburg.de/,Junge Philharmonie Brandenburg}
+on Oct 10 2011 and again on Apr 15-16 2012.
+
 @end itemize
 @divEnd
 
index e1124a4238e543f5b86b894bc51e5a2f1366f5b4..31e2329b3398b626823f14729f4352cc3a9e0167 100644 (file)
@@ -8,6 +8,22 @@
 
 @c used for news about the upcoming release; see CG 10.2
 
+@newsItem
+@subsubheading LilyPond 2.15.26 released!  @emph{Jan 16, 2012}
+
+We are happy to announce the release of LilyPond 2.15.26.  This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.  Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
+
+The 2.15.25 has been skipped due to build problems.
+
+@newsEnd
+
+
 @newsItem
 @subsubheading LilyPond 2.15.24 released!  @emph{Jan 07, 2012}
 
index aa74dd6bd570c9b62fb43a686f4b1de13493a3d9..45e5bf7311457cd98bd64cdbef15f3ff07b60d57 100644 (file)
@@ -118,11 +118,26 @@ uninstall-WWW:
 # For both online and offline docs, issue `make doc WEB_TARGETS="offline online"'
 WEB_TARGETS = offline
 
-WWW-post:
+WEB_EXAMPLE_FILES = $(wildcard input/$(outdir)/*.ly) \
+                    $(wildcard input/*/$(outdir)/*.ly) \
+                    $(wildcard input/*/*/$(outdir)/*.ly)
+
+WEB_TRACKED_FILES = $(wildcard $(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}) \
+                    $(wildcard input/$(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}) \
+                    $(wildcard input/*/$(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}) \
+                    $(wildcard Documentation/$(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}) \
+                    $(wildcard Documentation/$(outdir)/*/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php})
+
+WWW-post: $(top-build-dir)/.htaccess $(outdir)/examples.html $(outdir)/offline-root/index.html
+
 # need UTF8 setting in case this is hosted on a website.
+$(top-build-dir)/.htaccess:
        echo -e 'AddDefaultCharset utf-8\nAddCharset utf-8 .html\nAddCharset utf-8 .en\nAddCharset utf-8 .nl\nAddCharset utf-8 .txt\n' > $(top-build-dir)/.htaccess
+
+$(outdir)/examples.html: $(WEB_EXAMPLE_FILES)
        $(buildscript-dir)/mutopia-index -o $(outdir)/examples.html input/
-       find $(outdir) -name '*-root' | xargs rm -rf
+
+$(outdir)/offline-root/index.html: $(WEB_TRACKED_FILES)
        $(buildscript-dir)/www_post $(PACKAGE_NAME) $(TOPLEVEL_VERSION) $(outdir) "$(WEB_TARGETS)"
        find $(outdir)/offline-root -type l | xargs rm -f
 endif # ifeq ($(out),www)
@@ -151,16 +166,21 @@ src-ext = c cc yy ll hh icc py scm tex ps texi itexi tely itely sh
 
 doc-clean: snippets-clean $(tree-share-prefix)/lilypond-force
 
-default: $(config_h) build-dir-setup
+default: $(config_h) build-dir-setup build-scripts
 
 build-dir-setup: $(tree-share-prefix)/lilypond-force
 
+build-scripts:
+       $(MAKE) -C scripts/build
+
 PO_FILES = $(call src-wildcard,$(src-depth)/po/*.po)
 HELP_CATALOGS = $(PO_FILES:po/%.po=%)
 CATALOGS = $(HELP_CATALOGS:lilypond=)
 
-$(tree-share-prefix)/lilypond-force link-tree: GNUmakefile $(outdir)/VERSION
 # Preparing LilyPond tree for build-dir exec
+link-tree: $(tree-share-prefix)/lilypond-force
+
+$(tree-share-prefix)/lilypond-force: GNUmakefile $(outdir)/VERSION
        cd $(top-build-dir)/$(outbase) && rm -rf bin lib share
        mkdir -p $(tree-bin)
        mkdir -p $(tree-share-prefix)
@@ -203,7 +223,9 @@ $(tree-share-prefix)/lilypond-force link-tree: GNUmakefile $(outdir)/VERSION
                ln -sf ../../../../../po/$(outconfbase)/$i.mo lilypond.mo) &&) true
        touch $(tree-share-prefix)/lilypond-force
 
-$(tree-share-prefix)/mf-link-tree link-mf-tree: $(tree-share-prefix)/lilypond-force
+link-mf-tree: $(tree-share-prefix)/mf-link-tree
+
+$(tree-share-prefix)/mf-link-tree: $(tree-share-prefix)/lilypond-force
        -rm -f $(tree-share-prefix)/fonts/otf/* &&  \
        rm -f $(tree-share-prefix)/fonts/svg/* &&  \
        rm -f $(tree-share-prefix)/fonts/fonts.conf &&  \
@@ -221,6 +243,7 @@ $(tree-share-prefix)/mf-link-tree link-mf-tree: $(tree-share-prefix)/lilypond-fo
                ln -s ../../../../../../mf/$(outconfbase)/*.tfm .
        -cd $(tree-share-prefix)/fonts/type1 && \
                ln -s ../../../../../../mf/$(outconfbase)/*.pf? .
+       touch $(tree-share-prefix)/mf-link-tree
 
 TAGS.make: dummy
        etags -o $@ $(find $(top-src-dir) -name 'GNUmakefile*' -o -name '*.make')
diff --git a/VERSION b/VERSION
index d0c4437ee5f25f01a1f5734256716bb2be708ae5..4a9cc9438e0ffaeb87bd3fb5bb8de3eec6c0f1de 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=15
-PATCH_LEVEL=25
+PATCH_LEVEL=27
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.24
+VERSION_DEVEL=2.15.26
index 0663f5e80a5e1b0b2ed5256d3273d78b45788da5..5014b32cb22a1d24d8555c750a94cd7c2d92899b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.7"
+\version "2.15.25"
 \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' {
-\autoFootnoteGrob #'NoteHead #'(1 . -1) \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-\autoFootnote #'(1 . -1) \markup { n } c >
-  \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-  \autoFootnoteGrob #'Hairpin #'(1 . 1) \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 |
index c7862a98b358c740b1d282326284a1da61051353..d229da8454df55067b42ec9faa65240c9cc11671 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.21"
+\version "2.15.25"
 \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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-\autoFootnote #'(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)
-        \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-        \autoFootnoteGrob #'Hairpin #'(1 . 1) \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
       }
index 0461597eac67de3a2977bd414c9eda4638663f70..11d9c276f5e13f722cbfe3fdbcd0116a74a9de59 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.21"
+\version "2.15.25"
 \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))
-  \autoFootnoteGrob #'NoteHead #'(1 . -1) \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-\autoFootnote #'(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)
-  \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
-  \autoFootnoteGrob #'Hairpin #'(1 . 1) \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 |
index c23d5d6d2b830c6a2c9855bc63fa4a704418e3e3..fb49e84841245ab43e4cbe5d0de7c0aa3798afec 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.17"
+\version "2.15.25"
 \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
-    \footnoteGrob #'TimeSignature #'(0 . 2) "foo" "bar"
+    \footnote "foo" #'(0 . 2) #'TimeSignature "bar"
     \time 3/4
     \break \pageBreak
     c2.
     \once \override Staff . FootnoteItem #'break-visibility = ##(#f #f #t)
-    \footnoteGrob #'TimeSignature #'(0 . 2) "foo" "bar"
+    \footnote "foo" #'(0 . 2) #'TimeSignature "bar"
     \time 4/4
     \break \pageBreak
     c1 \bar "|."
index b0fd84a30987283e44df50226ff84a4d2252daf6..0c72c5e41feef332a22e569f56b1a7f7e1be2673 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.14.0"
+\version "2.15.25"
 \header {
   texidoc = "The padding between a footnote and the footer can be tweaked."
 }
@@ -8,21 +8,21 @@
 \book {
 
   \relative c' {
-    \footnoteGrob #'NoteHead
-                  #'(1 . -1)
+    \footnote
                   \markup { \tiny 1 }
+                  #'(1 . -1) #'NoteHead
                   \markup { 1. Tiny space below. }
     e1
 
-    \footnoteGrob #'NoteHead
-                  #'(1 . -1)
+    \footnote
                   \markup { \tiny 2 }
+                  #'(1 . -1) #'NoteHead
                   \markup { 2. Tiny space below. }
     e1
 
-    \footnoteGrob #'NoteHead
-                  #'(1 . -1)
+    \footnote
                   \markup { \tiny 3 }
+                  #'(1 . -1) #'NoteHead
                   \markup { 3. Big space below. }
     e1
 }}
index ec27ba7f360f0e7d52a83b5c8e0d23ec9a6f43af..c550eae244be1989b4b769ba91f259d827cc17c7 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.14.0"
+\version "2.15.25"
 \header {
   texidoc = "Footnotes are annotated at the correct place, and the
 annotation goes to the correct page."
@@ -13,9 +13,9 @@ annotation goes to the correct page."
 \book {
 
 \relative c'' {
-\footnoteGrob #'Hairpin
-              #'(0.5 . 0.5)
+\footnote
               \markup { \tiny "1." }
+              #'(0.5 . 0.5) #'Hairpin
               \markup { 1. \justify { Goes to the first broken spanner. } }
 b4\< c d a
 b c d a
@@ -37,9 +37,9 @@ b c d a
 b c d a\!
 
 \once \override FootnoteSpanner #'spanner-placement = #RIGHT
-\footnoteGrob #'Hairpin
-              #'(0.5 . 0.5)
+\footnote
               \markup { \tiny "2." }
+              #'(0.5 . 0.5) #'Hairpin
               \markup { 2. \justify { Goes to the last broken spanner. } }
 b4\< c d a
 b c d a
index f13347d31aeb3f73ef988fa96ae59732bfe27357..8086ecca74c4ca04e834260d8e39d188be07a9b3 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.14.0"
+\version "2.15.25"
 \header {
   texidoc = "Lilypond does footnotes."
 }
@@ -15,7 +15,7 @@
 \markup { h i }
 
 \relative c' {
-\footnoteGrob #'NoteHead #'(1 . -1) \markup { \tiny 4 } \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 #'(1 . -1) \markup { \tiny 6 } \markup { 6. n } c >
-  \footnoteGrob #'Beam #'(1 . 1) \markup { \tiny 7 } \markup { 7. o }
-  \footnoteGrob #'Hairpin #'(1 . 1) \markup { \tiny 8 } \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. |
 }}
index 1d08d5c12cc98d9b4da5ae08b01ac566cdd4d7ed..a7466f9fea78f72272dc1ffe119b336081015a7d 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.17"
+\version "2.15.25"
 
 \header {
   texidoc = "LilyPond does in-notes.
   \relative c' {
     \repeat unfold 5 {
       \once \override FootnoteItem #'footnote = ##f
-      \footnoteGrob #'NoteHead #'(0 . 0)
-                    "" \markup { \box \fill-line { "this is a test" } }
+      \footnote
+                    "" #'(0 . 0) #'NoteHead \markup { \box \fill-line { "this is a test" } }
       \repeat unfold 5 { a\< b c d\! }
-      \autoFootnoteGrob #'NoteHead #'(-1 . 1) "foobar"
+      \footnote #'(-1 . 1) #'NoteHead "foobar"
       \repeat unfold 5 { a\< b c d\! }
     }
   }
index b3ed328b783e376fcdb013905b74e9c852d657a8..933712736233eaee870adf5ced267ad05d93f781 100644 (file)
@@ -341,62 +341,24 @@ featherDurations=
 
      argument))
 
-footnoteGrob =
-#(define-music-function (parser location grob-name offset text footnote)
-   (symbol? number-pair? markup? markup?)
-   (_i "Attach @var{text} to @var{grob-name} at offset @var{offset},
-with @var{text} referring to @var{footnote} (use like @code{\\once})")
-   (make-music 'FootnoteEvent
-               'automatically-numbered #f
-              'symbol grob-name
-              'X-offset (car offset)
-              'Y-offset (cdr offset)
-              'text text
-              'footnote-text footnote))
-
-autoFootnoteGrob =
-#(define-music-function (parser location grob-name offset footnote)
-   (symbol? number-pair? markup?)
-   (_i "Footnote @var{grob-name} with the text in @var{footnote}
-allowing for the footnote to be automatically numbered such that
-the number appears at @var{offset}.  Note that, for this to take effect,
-auto-numbering must be turned on in the paper block.  Otherwise, no
-number will appear.  Use like @code{\\once})")
-   (make-music 'FootnoteEvent
-               'automatically-numbered #t
-              'symbol grob-name
-              'X-offset (car offset)
-              'Y-offset (cdr offset)
-               'text (make-null-markup)
-              'footnote-text footnote))
-
-
 footnote =
-#(define-music-function (parser location offset text footnote)
-   (number-pair? markup? markup?)
-   (_i "Attach @var{text} at @var{offset} with @var{text} referring
-to @var{footnote} (use like @code{\\tweak})")
-   (make-music 'FootnoteEvent
-               'automatically-numbered #f
-              'X-offset (car offset)
-              'Y-offset (cdr offset)
-              'text text
-              'footnote-text footnote))
-
-autoFootnote =
-#(define-music-function (parser location offset footnote)
-   (number-pair? markup?)
-   (_i "Footnote the item after which this comes with the text in
-@var{footnote} allowing for the footnote to be automatically numbered
-such that the number appears at @var{offset}.  Note that, for this to
-take effect, auto-numbering must be turned on in the paper block.
-Otherwise, no number will appear.  Use like @code{\\tweak})")
-   (make-music 'FootnoteEvent
-               'automatically-numbered #t
-              'X-offset (car offset)
-              'Y-offset (cdr offset)
-              'text (make-null-markup)
-              'footnote-text footnote))
+#(define-music-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
+autonumbering instead.  Note that, for this to take effect,
+auto-numbering must be turned on in the paper block.  Otherwise, no
+number will appear.  Footnotes are applied like articulations.  If a
+symbol @var{grob-name} is specified, all grobs of that kind at the
+current time step are affected.")
+   (make-music
+    'FootnoteEvent
+    'X-offset (car offset)
+    'Y-offset (cdr offset)
+    'automatically-numbered (not text)
+    'text (or text (make-null-markup))
+    'footnote-text footnote
+    'symbol grob-name))
 
 grace =
 #(def-grace-function startGraceMusic stopGraceMusic
index eed34d15863a884010fe5e3ab969be78adeed6c9..ba6d43e09f075bc033a5fa017f93d19878fa9c39 100644 (file)
@@ -350,30 +350,36 @@ def process_html_files (package_name = '',
     for prefix, ext_list in pages_dict.items ():
         for lang_ext in ext_list:
             file_name = langdefs.lang_file_name (prefix, lang_ext, '.html')
-            in_f = open (file_name)
-            s = in_f.read()
-            in_f.close()
-
-            s = s.replace ('%', '%%')
-            s = hack_urls (s, prefix, target, bool (int (versiontup[1]) %  2))
-            s = add_header (s, prefix)
-
-            ### add footer
-            if footer_tag_re.search (s) == None:
-                if 'web' in file_name:
-                    s = add_footer (s, footer_tag + web_footer)
-                else:
-                    s = add_footer (s, footer_tag + footer)
-
-                available, missing = find_translations (prefix, lang_ext)
-                page_flavors = process_links (s, prefix, lang_ext, file_name, missing, target)
-                # Add menu after stripping: must not have autoselection for language menu.
-                page_flavors = add_menu (page_flavors, prefix, available, target, translation)
-            for k in page_flavors:
-                page_flavors[k][1] = page_flavors[k][1] % subst[page_flavors[k][0]]
-                out_f = open (name_filter (k), 'w')
-                out_f.write (page_flavors[k][1])
-                out_f.close()
+            source_time = os.path.getmtime(file_name)
+            dest_time = 0
+            if os.path.exists(name_filter(file_name)):
+                dest_time = os.path.getmtime(name_filter(file_name))
+            if dest_time < source_time:
+
+                in_f = open (file_name)
+                s = in_f.read()
+                in_f.close()
+
+                s = s.replace ('%', '%%')
+                s = hack_urls (s, prefix, target, bool (int (versiontup[1]) %  2))
+                s = add_header (s, prefix)
+
+                ### add footer
+                if footer_tag_re.search (s) == None:
+                    if 'web' in file_name:
+                        s = add_footer (s, footer_tag + web_footer)
+                    else:
+                        s = add_footer (s, footer_tag + footer)
+
+                    available, missing = find_translations (prefix, lang_ext)
+                    page_flavors = process_links (s, prefix, lang_ext, file_name, missing, target)
+                    # Add menu after stripping: must not have autoselection for language menu.
+                    page_flavors = add_menu (page_flavors, prefix, available, target, translation)
+                for k in page_flavors:
+                    page_flavors[k][1] = page_flavors[k][1] % subst[page_flavors[k][0]]
+                    out_f = open (name_filter (k), 'w')
+                    out_f.write (page_flavors[k][1])
+                    out_f.close()
         # if the page is translated, a .en.html symlink is necessary for content negotiation
         if target == 'online' and ext_list != ['']:
             os.symlink (os.path.basename (prefix) + '.html', name_filter (prefix + '.en.html'))
index b43b9e00d4b4477b5ea2fe0f05eea0be9e3ae8f5..1d0d9eca990407f3671a03c54af143515eef295e 100644 (file)
@@ -14,9 +14,11 @@ error = ly.error
 # Helper functions
 ########################################################################
 
-def find_file (name, include_path, raise_error=True):
-    for i in include_path:
+def find_file (name, include_path, working_dir=None, raise_error=True):
+    current_path = working_dir or os.getcwd();
+    for i in [current_path] + include_path:
         full = os.path.join (i, name)
+        full = os.path.normpath (os.path.join (current_path, full))
         if os.path.exists (full):
             return full
 
@@ -149,7 +151,8 @@ class BookOutputFormat:
         return []
 
     def input_fullname (self, input_filename):
-        return find_file (input_filename, self.global_options.include_path)
+        return find_file (input_filename, self.global_options.include_path,
+            self.global_options.original_dir)
 
     def adjust_snippet_command (self, cmd):
         return cmd
index fcd539aeaa8219eeeb5e8d07e4860e632ae31bb9..be7c4e18830c2b10a014c6f61e0a635c10ea7865 100644 (file)
@@ -3,6 +3,7 @@
 import re
 import tempfile
 import os
+import sys
 import subprocess
 import book_base as BookBase
 from book_snippets import *
@@ -124,7 +125,7 @@ Latex_output = {
   \expandafter\preLilyPondExample
 \fi
 \def\lilypondbook{}%%
-\input %(base)s-systems.tex
+\input{%(base)s-systems.tex}
 \ifx\postLilyPondExample \undefined
 \else
   \expandafter\postLilyPondExample
@@ -186,13 +187,38 @@ def get_latex_textwidth (source, global_options):
     progress (_ ("Running `%s' on file `%s' to detect default page settings.\n")
               % (global_options.latex_program, tmpfile));
     cmd = '%s %s' % (global_options.latex_program, tmpfile);
-    proc = subprocess.Popen (cmd,
-        universal_newlines=True, shell=True,
-        stdout=subprocess.PIPE, stderr=subprocess.PIPE);
-    (parameter_string, error_string) = proc.communicate ()
-    if proc.returncode != 0:
-        warning (_ ("Unable to auto-detect default page settings:\n%s")
-                 % error_string);
+    ly.debug_output ("Executing: %s\n" % cmd);
+    run_env = os.environ.copy()
+    run_env['LC_ALL'] = 'C'
+
+    ### unknown why this is necessary
+    universal_newlines = True
+    if sys.platform == 'mingw32':
+        universal_newlines = False
+        ### use os.system to avoid weird sleep() problems on
+        ### GUB's python 2.4.2 on mingw
+        # make file to write to
+        output_dir = tempfile.mkdtemp()
+        output_filename = os.path.join(output_dir, 'output.txt')
+        # call command
+        cmd += " > %s" % output_filename
+        returncode = os.system(cmd)
+        parameter_string = open(output_filename).read()
+        if returncode != 0:
+            warning (_ ("Unable to auto-detect default settings:\n"))
+        # clean up
+        os.remove(output_filename)
+        os.rmdir(output_dir)
+    else:
+        proc = subprocess.Popen (cmd,
+            env=run_env,
+            universal_newlines=universal_newlines,
+            shell=True,
+            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        (parameter_string, error_string) = proc.communicate ()
+        if proc.returncode != 0:
+            warning (_ ("Unable to auto-detect default settings:\n%s")
+                    % error_string)
     os.unlink (tmpfile)
     if os.path.exists (auxfile):
         os.unlink (auxfile)
@@ -271,7 +297,7 @@ class BookLatexOutputFormat (BookBase.BookOutputFormat):
     def snippet_output (self, basename, snippet):
         str = ''
         rep = snippet.get_replacements ();
-        rep['base'] = basename
+        rep['base'] = basename.replace ('\\', '/')
         str += self.output_print_filename (basename, snippet)
         if VERBATIM in snippet.option_dict:
             rep['verb'] = snippet.verb_ly ()
index e3fc2eff950ff6034ca41296ea7488ca192f0942..e5a43110ffa268ae6733d09e7c96dc768503ef61 100644 (file)
@@ -601,7 +601,7 @@ class LilypondSnippet (Snippet):
             existing = open (filename, 'r').read ()
 
             if self.relevant_contents (existing) != self.relevant_contents (self.full_ly ()):
-                warning ("%s: duplicate filename but different contents of orginal file,\n\
+                warning ("%s: duplicate filename but different contents of original file,\n\
 printing diff against existing file." % filename)
                 ly.stderr_write (self.filter_pipe (self.full_ly (), 'diff -u %s -' % filename))
         else:
@@ -804,7 +804,8 @@ class LilypondFileSnippet (LilypondSnippet):
         LilypondSnippet.__init__ (self, type, match, formatter, line_number, global_options)
         self.filename = self.substring ('filename')
         self.ext = os.path.splitext (os.path.basename (self.filename))[1]
-        self.contents = file (BookBase.find_file (self.filename, global_options.include_path)).read ()
+        self.contents = file (BookBase.find_file (self.filename,
+            global_options.include_path, global_options.original_dir)).read ()
 
     def get_snippet_code (self):
         return self.contents;
@@ -903,7 +904,7 @@ class MusicXMLFileSnippet (LilypondFileSnippet):
         if os.path.exists (xmlfilename):
             diff_against_existing = self.filter_pipe (self.contents, 'diff -u %s - ' % xmlfilename)
             if diff_against_existing:
-                warning (_ ("%s: duplicate filename but different contents of orginal file,\n\
+                warning (_ ("%s: duplicate filename but different contents of original file,\n\
 printing diff against existing file.") % xmlfilename)
                 ly.stderr_write (diff_against_existing)
         else:
index 59a1d54e3cfbef0b03f1b8bbe011315907ebd950..ca9ee31754f84dfe6adfd57d510dc2c292577957 100644 (file)
@@ -3,6 +3,7 @@
 import re
 import tempfile
 import subprocess
+import sys
 import book_base as BookBase
 from book_snippets import *
 import lilylib as ly
@@ -205,16 +206,39 @@ def get_texinfo_width_indent (source, global_options):
     progress (_ ("Running texi2pdf on file %s to detect default page settings.\n") % tmpfile);
 
     # execute the command and pipe stdout to the parameter_string:
-    cmd = 'LC_ALL=C %s -c -o %s %s' % (global_options.texinfo_program, outfile, tmpfile);
+    cmd = '%s -c -o %s %s' % (global_options.texinfo_program, outfile, tmpfile);
     ly.debug_output ("Executing: %s\n" % cmd);
-
-    proc = subprocess.Popen (cmd,
-        universal_newlines=True, shell=True,
-        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    (parameter_string, error_string) = proc.communicate ()
-    if proc.returncode != 0:
-        warning (_ ("Unable to auto-detect default settings:\n%s")
-                 % error_string)
+    run_env = os.environ.copy()
+    run_env['LC_ALL'] = 'C'
+
+    ### unknown why this is necessary
+    universal_newlines = True
+    if sys.platform == 'mingw32':
+        universal_newlines = False
+        ### use os.system to avoid weird sleep() problems on
+        ### GUB's python 2.4.2 on mingw
+        # make file to write to
+        output_dir = tempfile.mkdtemp()
+        output_filename = os.path.join(output_dir, 'output.txt')
+        # call command
+        cmd += " > %s" % output_filename
+        returncode = os.system(cmd)
+        parameter_string = open(output_filename).read()
+        if returncode != 0:
+            warning (_ ("Unable to auto-detect default settings:\n"))
+        # clean up
+        os.remove(output_filename)
+        os.rmdir(output_dir)
+    else:
+        proc = subprocess.Popen (cmd,
+            env=run_env,
+            universal_newlines=universal_newlines,
+            shell=True,
+            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        (parameter_string, error_string) = proc.communicate ()
+        if proc.returncode != 0:
+            warning (_ ("Unable to auto-detect default settings:\n%s")
+                    % error_string)
     os.unlink (tmpfile)
     if os.path.exists(outfile):
         os.unlink (outfile)
index ad518547c4a093223078d7515533128cbae909ed..32cb5a502424e86a0560dd45bf16bba8d966da68 100644 (file)
@@ -3356,6 +3356,37 @@ def conv (str):
                   r"\1\\accidentalStyle", str)
     return str
 
+def brace_matcher (n):
+    # poor man's matched brace scanning, gives up
+    # after n+1 levels.  Matches any string with balanced
+    # braces inside; add the outer braces yourself if needed.
+    # Nongreedy.
+    return r"[^{}]*?(?:{"*n+r"[^{}]*?"+r"}[^{}]*?)*?"*n
+
+matchstring = r'"(?:[^"\\]|\\.)*"'
+matcharg = (r"\s+(?:[$#]['`]?\s*(?:[a-zA-Z]\S*|" + matchstring + r"|\("
+            + paren_matcher(20) + r"\))|" + matchstring + r"|\\[a-z_A-Z]+)")
+matchmarkup = (r'(?:\\markup\s*(?:{' + brace_matcher (20) +r'}|' +
+               matchstring + r'|(?:\\[a-z_A-Z][a-z_A-Z-]*(?:' + matcharg +
+               r')*?\s*)*(?:' + matchstring + "|{" + brace_matcher (20) +
+               "}))|" + matchstring + ")")
+
+@rule((2, 15, 25), r"\(auto)?Footnote(Grob)? -> \footnote")
+def conv (str):
+    # The following replacement includes the final markup argument in
+    # the match in order to better avoid touching the equally named
+    # markup function.  The other functions have unique names, so
+    # there is no point in including their last, possibly complex
+    # argument in the match.
+    str = re.sub (r"\\footnote(" + matcharg + (r")(\s*" + matchmarkup)*2 + ")",
+                  r"\\footnote\2\1\3", str)
+    str = re.sub (r"\\footnoteGrob"+("(" + matcharg + ")")*2 + r"(\s*" + matchmarkup + ")",
+                  r"\\footnote\3\2\1", str)
+    str = re.sub (r"\\autoFootnoteGrob" + ("(" + matcharg + ")")*2,
+                  r"\\footnote\2\1", str)
+    str = re.sub (r"\\autoFootnote",
+                  r"\\footnote", str)
+    return str
 # Guidelines to write rules (please keep this at the end of this file)
 #
 # - keep at most one rule per version; if several conversions should be done,
index a3577ae830a77316570b37806ce415eee9180931..37a7547966be9c09db3886779ca93d72ffb6dae1 100644 (file)
@@ -115,7 +115,7 @@ include_re = re.compile (r'@include ((?!../lily-).*?\.i?te(xi|ly))$', re.M)
 whitespaces = re.compile (r'\s+')
 section_translation_re = re.compile ('^@(node|(?:unnumbered|appendix)\
 (?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|\
-(?:major|chap|(?:sub){0,2})heading|lydoctitle|translationof) \
+(?:major|chap|(?:sub){0,2})heading|lydoctitle|translationof|nodeprefix) \
 (.+)$', re.MULTILINE)
 external_node_re = re.compile (r'\s+@c\s+external.*')
 
@@ -225,6 +225,7 @@ def process_sections (filename, lang_suffix, page):
         print 'writing:', p
     f = open (p, 'w')
 
+    node_prefix_title = ''
     this_title = ''
     this_filename = 'index'
     this_anchor = ''
@@ -259,6 +260,9 @@ def process_sections (filename, lang_suffix, page):
                 this_filename = anchor
             elif original_node in initial_map:
                 this_filename = initial_map[original_node][2]
+        elif sec[0] == "nodeprefix":
+            node_prefix_title = remove_texinfo (sec[1])
+            node_prefix_anchor = create_texinfo_anchor (sec[1])
         else:
             # Some pages might not use a node for every section, so
             # treat this case here, too: If we already had a section
@@ -270,6 +274,10 @@ def process_sections (filename, lang_suffix, page):
                 this_anchor = create_texinfo_anchor (sec[1])
             had_section = True
 
+            if sec[0] == "lydoctitle" and node_prefix_title:
+                this_title = "%s: %s" % (node_prefix_title, this_title)
+                this_anchor = "%s-%s" % (node_prefix_anchor, this_anchor)
+
             if split == 'custom':
                 # unnumbered nodes use the previously used file name,
                 # only numbered nodes get their own filename! However,
index fec7f0e20cd144eda3bb99b02dd0a0ee38575aec..7ec91dd80bc27bb2bff6c41c90aba3247af916a5 100644 (file)
@@ -70,10 +70,15 @@ strip_re = re.compile (outdir + '/')
 for t in targets:
     out_root = target_pattern % t
     strip_file_name[t] = lambda s: os.path.join (target_pattern % t, (strip_re.sub ('', s)))
-    os.mkdir (out_root)
-    map (os.mkdir, [os.path.join (out_root, d) for d in dirs])
+    if not os.path.exists (out_root):
+        os.mkdir (out_root)
+    for d in dirs:
+        new_dir = os.path.join (out_root, d)
+        if not os.path.exists (new_dir):
+            os.mkdir (new_dir)
     for f in hardlinked_files:
-        os.link (f, strip_file_name[t] (f))
+        if not os.path.isfile (strip_file_name[t] (f)):
+            os.link (f, strip_file_name[t] (f))
     for l in symlinks:
         p = mirrortree.new_link_path (os.path.normpath (os.readlink (l)), os.path.dirname (l), strip_re)
         dest = strip_file_name[t] (l)
index 9e5777284982a924aac8f74db7e76b22cb0e81f7..8847419fe0dc46e698e06873f7494e4bf0bae6f2 100644 (file)
@@ -143,7 +143,7 @@ def get_option_parser ():
     p.add_option ("-I", '--include', help=_ ("add DIR to include path"),
                   metavar=_ ("DIR"),
                   action='append', dest='include_path',
-                  default=[os.path.abspath (os.getcwd ())])
+                  default=[])
 
     p.add_option ('--info-images-dir',
                   help=_ ("format Texinfo output so that Info will "
@@ -616,8 +616,7 @@ def do_options ():
     (global_options, args) = opt_parser.parse_args ()
 
     global_options.information = {'program_version': ly.program_version, 'program_name': ly.program_name }
-
-    global_options.include_path =  map (os.path.abspath, global_options.include_path)
+    global_options.original_dir = original_dir
 
     # Load the python packages (containing e.g. custom formatter classes)
     # passed on the command line
@@ -667,7 +666,7 @@ def main ():
         if global_options.lily_output_dir:
             # This must be first, so lilypond prefers to read .ly
             # files in the other lybookdb dir.
-            includes = [os.path.abspath(global_options.lily_output_dir)] + includes
+            includes = [global_options.lily_output_dir] + includes
         global_options.process_cmd += ' '.join ([' -I %s' % ly.mkarg (p)
                                                  for p in includes])
 
@@ -713,7 +712,7 @@ def main ():
                      base_file_name + global_options.formatter.default_extension)
 
     os.chdir (original_dir)
-    file (dep_file, 'w').write ('%s: %s'
+    file (dep_file, 'w').write ('%s: %s\n'
                                 % (final_output_file, ' '.join (inputs)))
 
 if __name__ == '__main__':
index 8045c3ef0a4f3bb3b4b254deaadfba543a16a016..c60521ead3a3923f53e06d39d878957dc3f16c8d 100644 (file)
@@ -436,12 +436,13 @@ EOF
            done
        done
 
-       
+       rm -f GNUmakefile
        cat <<EOF > GNUmakefile
 depth = .
 include config\$(if \$(conf),-\$(conf),).make
 include \$(configure-srcdir)/GNUmakefile.in
 EOF
+       chmod 444 GNUmakefile
        AC_SUBST(VPATH)
     fi
 ])