]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 25 Jul 2015 21:32:01 +0000 (23:32 +0200)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 25 Jul 2015 21:32:01 +0000 (23:32 +0200)
# Conflicts:
# Documentation/fr/learning/fundamental.itely

74 files changed:
Documentation/ca/web/community.itexi
Documentation/ca/web/introduction.itexi
Documentation/ca/web/news-front.itexi
Documentation/changes.tely
Documentation/contributor/administration.itexi
Documentation/cs/learning/fundamental.itely
Documentation/cs/web/community.itexi
Documentation/de/essay/engraving.itely
Documentation/de/extending/programming-interface.itely
Documentation/de/learning/fundamental.itely
Documentation/de/notation/changing-defaults.itely
Documentation/de/web/community.itexi
Documentation/de/web/introduction.itexi
Documentation/es/essay/engraving.itely
Documentation/es/extending/programming-interface.itely
Documentation/es/learning/fundamental.itely
Documentation/es/web/community.itexi
Documentation/es/web/introduction.itexi
Documentation/es/web/news-front.itexi
Documentation/es/web/news.itexi
Documentation/essay/engraving.itely
Documentation/extending/programming-interface.itely
Documentation/fr/essay/engraving.itely
Documentation/fr/extending/programming-interface.itely
Documentation/fr/learning/fundamental.itely
Documentation/fr/web/introduction.itexi
Documentation/hu/essay/engraving.itely
Documentation/hu/web/community.itexi
Documentation/it/learning/fundamental.itely
Documentation/it/web/community.itexi
Documentation/it/web/introduction.itexi
Documentation/ja/learning/fundamental.itely
Documentation/ja/web/community.itexi
Documentation/ja/web/introduction.itexi
Documentation/learning/fundamental.itely
Documentation/nl/learning/fundamental.itely
Documentation/nl/web/introduction.itexi
Documentation/snippets/changing-properties-for-individual-grobs.ly
Documentation/snippets/new/changing-properties-for-individual-grobs.ly [new file with mode: 0644]
Documentation/usage/external.itely
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
Documentation/web/server/lilypond.org.htaccess
Documentation/zh/web/community.itexi
Documentation/zh/web/introduction.itexi
Documentation/zh/web/news-front.itexi
input/regression/apply-output.ly
input/regression/autochange-relative.ly [new file with mode: 0644]
input/regression/display-lily-tests.ly
input/regression/generic-output-property.ly
input/regression/part-combine-relative.ly [new file with mode: 0644]
input/regression/tweaks-as-overrides.ly [new file with mode: 0644]
lily/include/music-iterator.hh
lily/include/semi-tie.hh
lily/include/tie.hh
lily/output-property-engraver.cc
lily/parser.yy
lily/percent-repeat-iterator.cc
lily/semi-tie-column.cc
lily/semi-tie.cc
lily/tie-specification.cc
lily/tie.cc
lily/timing-translator.cc
ly/music-functions-init.ly
ly/satb.ly
ly/staff-tkit.ly
ly/vocal-tkit.ly
python/convertrules.py
scm/define-grobs.scm
scm/define-markup-commands.scm
scm/define-music-display-methods.scm
scm/ly-syntax-constructors.scm
scm/music-functions.scm

index 8a742aac9de83df8883ec83e0f12885953e17cd1..ca5d0e41206e7dabaf73123b7011537e2cd2453f 100644 (file)
@@ -207,7 +207,7 @@ La manera més fàcil d'estar en contacte és llegir el butlletí de
 la nostra comunitat, l'Informe LilyPond:
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example
 
 @subsubheading Llista de correu de llançaments: @code{info-lilypond@@gnu.org}
index 9281531c12edd6740241834ac3f10689102bb86a..d148bd90b9620ccdcd79ac562e543b01af9c2abc 100644 (file)
@@ -730,7 +730,7 @@ biblioteques.
 @item
 Juny de 2009
 
-A un @uref{http://news.lilynet.net/Free-Music-Now, article}
+A un @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, article}
 publicat a la revista anual de la @emph{Associació Nacional de
 Pares d'Alumnes de Conservatoris} de França, el compositor i
 membre del projecte LilyPond, Valentin Villenave, explica com les
index 7ff615b86acef3c98644c081ab0e3152540a9323..8fe5d07c2868717894167faeee282e125a2f6a9a 100644 (file)
@@ -184,9 +184,9 @@ actualitzin a aquesta versió
 @newsItem
 @subsubheading El LilyPond Report #28.  @emph{12 de novembre de 2012}
 
-L'informe @uref{http://news.lilynet.net/?The-LilyPond-Report-28,
+L'informe @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28,
 número d'octubre del @emph{LilyPond Report}} es focalitza en la
-@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
 reunió l'últim agost de desenvolupadors i usuaris del LilyPond} a
 Waltrop, Alemanya. Òbviament, hi ha també alguns enraonaments
 sobre el LilyPond causats pel llançament de les versions 2.16.0 i
@@ -194,14 +194,14 @@ sobre el LilyPond causats pel llançament de les versions 2.16.0 i
 
 També hi ha dos informes financers mensuals de David Kastrup, atès
 que la seva feina sobre el LilyPond és
-@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
 pagat exclusivament per} contribucions financeres d'altres
 desenvolupadors i usuaris (gràcies!), i un informa sobre les
 experiències de
 @uref{http://scorio.com, un servei de gravat musical basat en la
 web} que usa el LilyPond internament.
 
-@uref{http://news.lilynet.net/?The-LilyPond-Report-28, Llegiu el
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28, Llegiu el
 LilyPond Report 28} ara; els comentaris i les contribucions són
 molt benvinguts!
 @newsEnd
index f706653f3dafa4da28545e5e0ef5b15b3ef2af86..dec9271023ea8c80ffce1604abd890b4df37085f 100644 (file)
@@ -244,10 +244,7 @@ avoid problems when using multiple, parallel contexts.
 constructs.
 
 @item
-The @code{NullVoice} context is now @q{below} @code{Score}.
-
-@item
-A new command @code{\tagGroup} has now been added.  This compliments
+A new command @code{\tagGroup} has now been added.  This complements
 the existing @code{\keepWithTag} and @code{\removeWithTag} commands.
 For Example:
 
index 50f97ade9e6ef4370912c18025436f5a0ad87906..078d85ad53a23095156663ff49a38271222bac72 100644 (file)
@@ -1435,7 +1435,7 @@ community:
 
 @example
 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-09/msg00178.html}
-@uref{http://news.lilynet.net/spip.php?article121}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/spip.php?article121}
 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-11/msg00076.html}
 @end example
 
index f5059e27300c1c40653f28042603e5088e4c1a79..261bac7a8380968b78ab81916cf0093c55957a9a 100644 (file)
@@ -719,7 +719,7 @@ a k průchodnému tónu je ještě přidán legatový oblouček:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -730,7 +730,7 @@ Tady je jiný jednoduchý příklad:
 
 @lilypond[quote,verbatim,ragged-right,relative=2]
 \key d \minor
-%    Voice "1"             Voice "2"
+%    Voice = "1"           Voice = "2"
 << { r4 g g4. a8 }    \\ { d,2 d4 g }       >>
 << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >>
 << { a2. r4 }         \\ { fis2. s4 }       >>
@@ -745,12 +745,12 @@ jako zde:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -770,7 +770,7 @@ ligatur, značek pro dynamiku atd. tak, jak se patří.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 07b0065088559c62db1cd3c1421db7c0b4ac6e85..14705906f8b73d62e7e014dfaf8edfae305edcdf 100644 (file)
@@ -199,7 +199,7 @@ Nejjednodušší cestou, jak zůstat ve spojení, je četba zpravodaje
 našeho společenství: LilyPond Reportu (v angličtině).
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example 
 
 @subsubheading Poštovní seznam pro nové verze: @code{info-lilypond@@gnu.org}
index d8a22a64b7809581457f5e79d8d53193c21ba357..6588d3cb602f931e923f374411d3bcfc821aa340 100644 (file)
@@ -9,7 +9,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.24"
 
 @c Translators: Till Paala
 
@@ -1536,11 +1536,11 @@ die Notenköpfe gezeichnet werden, während des Ausschnitts verändert.
   <d f g>4
   \once \override NoteHead.style = #'cross
   <d f g>4
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice #mc-squared
   <d f g>4
   <<
     { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
   >>
 }
 @end lilypond
index c8462a8c010354e36596e704f5691862fe7836d0..d73e0a5be5683a82039c3e915444c39d4f4d5cfe 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.22"
+@c \version "2.19.24"
 
 @c Translators: Till Paala
 
@@ -1188,7 +1188,7 @@ werden kann; sie macht Notenköpfe auf und neben der Mittellinie unsichtbar:
        (set! (ly:grob-property grob 'transparent) #t)))
 
 \relative {
-  a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2
+  a'4 e8 <<\applyOutput Voice #blanker a c d>> b2
 }
 @end lilypond
 
index 97c0bb8cd241ccde1e2a68dbf3ba0d0947ee5903..513d61fa5e272dc8acadec249b43c6933e0874f7 100644 (file)
@@ -727,7 +727,7 @@ und zur Durchgangsnote noch ein Bogen hinzugefügt wird:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -738,7 +738,7 @@ Hier ein anderes Beispiel:
 
 @lilypond[quote,verbatim,ragged-right,relative=2]
 \key d \minor
-%    Voice "1"             Voice "2"
+%    Voice = "1"           Voice = "2"
 << { r4 g g4. a8 }    \\ { d,2 d4 g }       >>
 << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >>
 << { a2. r4 }         \\ { fis2. s4 }       >>
@@ -753,12 +753,12 @@ separat schreiben, wie hier:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -781,7 +781,7 @@ Dynamik usw. entsprechend eingestellt.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 529fdf0e881a0c2b0e2a5be962e873cfaaded82b..cf1ecaeb33b81f22381abbab89a8654e62bbee31 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.22"
+@c \version "2.19.24"
 
 @c Translators: Till Paala
 
@@ -396,8 +396,8 @@ Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
 interpretiert wird, muss folgende Form benutzt werden:
 
 @example
-\applyOutput #'Score #@var{Funktion}
-\applyOutput #'Staff #@var{Funktion}
+\applyOutput Score #@var{Funktion}
+\applyOutput Staff #@var{Funktion}
 @end example
 
 @end itemize
index 399fc29a2efc47e09781506a57d045b30c2d3e81..f74f434010e8ce2e0e76b24e6c8a3f6b8146cef3 100644 (file)
@@ -211,7 +211,7 @@ Der einfachste Weg in Kontakt zu bleiben ist es, den Newsletter
 unserer Gemeinschaft zu lesen, den LilyPond Report (auf Englisch).
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example
 
 @subsubheading Mailingliste für neue Versionen: @code{info-lilypond@@gnu.org}
index c70c6165e8ad4b543ba39cab592a6eee56766713..6eed217a3617e3a63f9a5e2797da4a69eaa35991 100644 (file)
@@ -694,7 +694,7 @@ Software zur Unterhaltung ihrer Bibliotheken unterhalten.
  @item
 June 2009
 
-In einem @uref{http://news.lilynet.net/Free-Music-Now, Artikel}
+In einem @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, Artikel}
 in der Jahreszeitschrift der @emph{National Conservatory Parent
 Association} erklärt der französischer Komponist und LilyPond-Mitarbeiter
 Valentin Villenave wie freie Lizenzen und insbesondere mit LilyPond
index 50a40ab0bc1038711d6a1a8293acf330a640a651..94ee25cd29fcd8c7c754388f06ee094be1666cf5 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.24"
 
 @node Grabado musical
 @chapter Grabado musical
@@ -1548,11 +1548,11 @@ a lo largo del fragmento musical.
   <d f g>4
   \once \override NoteHead.style = #'cross
   <d f g>4
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice #mc-squared
   <d f g>4
   <<
     { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
   >>
 }
 @end lilypond
index f0d25ed6e79830ad932b24899cd43ede3ece66dd..c25922f54fc7ec9eae914d6b07ced53798af71fb 100644 (file)
@@ -7,7 +7,7 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c \version "2.19.22"
+@c \version "2.19.24"
 
 @node Interfaces para programadores
 @chapter Interfaces para programadores
@@ -1314,7 +1314,7 @@ cabezas de las notas que están sobre la línea central y junto a ella:
        (set! (ly:grob-property grob 'transparent) #t)))
 
 \relative {
-  a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2
+  a'4 e8 <<\applyOutput Voice #blanker a c d>> b2
 }
 @end lilypond
 
@@ -1322,8 +1322,8 @@ Para que @var{función} se interprete en los niveles de @code{Score} o de @code{
 utilice estas formas:
 
 @example
-\applyOutput #'Score #@var{función}
-\applyOutput #'Staff #@var{función}
+\applyOutput Score #@var{función}
+\applyOutput Staff #@var{función}
 @end example
 
 
index 3ec9dcad0ed117df2c0fa903ed67062ea27c1e2d..5c38195fbe607b8f98c0e51909d70a8bc513d24a 100644 (file)
@@ -671,7 +671,7 @@ la nota de paso y la ligadura:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -684,7 +684,7 @@ A continuación veamos otro ejemplo sencillo:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key d \minor
-  %    Voice "1"             Voice "2"
+  %    Voice = "1"           Voice = "2"
   << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
   << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
   << { a2. r4 }         \\ { fis2. s4 }       >> |
@@ -700,12 +700,12 @@ voces separadas, de la siguiente manera:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -733,7 +733,7 @@ correcta.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index d97742d08f59fe423afe44ee9662003a9d85e3ce..6aa990a19b9c0db2e212b3d13a8ab89d4efde896 100644 (file)
@@ -208,7 +208,7 @@ La manera más fácil de estar en contacto es leer el boletín de nuestra
 comunidad, el Informe LilyPond:
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example
 
 @subsubheading Lista de correo de lanzamientos: @code{info-lilypond@@gnu.org}
index 411f41267e1e6ad3bc833431d2187267209329d4..53282b44e7497417ec692b60c4e7611ac8353c5a 100644 (file)
@@ -724,7 +724,7 @@ charlan acerca del uso de software para el mantenimiento de sus bibliotecas.
 @item
 Junio de 2009
 
-En un @uref{http://news.lilynet.net/Free-Music-Now, artículo}
+En un @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, artículo}
 publicado en la revista anual de la @emph{Asociación Nacional de
 Padres de Alumnos de Conservatorios} de Francia, el compositor y
 miembro del proyecto LilyPond, Valentin Villenave, explica cómo las
index 4128758545a7647bb8dafa6bd4d636ebf66f3f76..f447fbc0c3d35d82499eedf6aacd3b8f48f553ab 100644 (file)
@@ -54,9 +54,9 @@ versión solamente aquellos que necesiten esta funcionalidad.
 @newsItem
 @subsubheading El Informe LilyPond, número 28. @emph{12 de noviembre de 2012}
 
-La @uref{http://news.lilynet.net/?The-LilyPond-Report-28, edición
+La @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28, edición
 de octubre del @emph{Informe LilyPond}} se centra en el
-@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
 encuentro de usuarios y desarrolladores de LilyPond} en Waltrop
 (Alemania), el mes de agosto pasado.  Por supuesto que también hay
 noticias de LilyPond producidas a raíz del lanzamiento de las
@@ -64,13 +64,13 @@ versiones 2.16.0 y 2.17.0 que se produjeron en dicho lugar.
 
 También incluyen dos informes financieros mensuales por parte de
 David Kastrup cuyo trabajo en LilyPond está
-@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
 exclusivamente pagado} por las donaciones de otros desarrolladores
 y usuarios (¡gracias!), y un informe acerca de las experiencias
 con @uref{http://scorio.com, un servicio web de tipografía
 musical} que utiliza LilyPond internamente.
 
-Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-28,
+Acérquese y @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28,
 lea ya el Informe LilyPond número 28}; ¡todos los comentarios y
 aportaciones serán calurosamente bien recibidos!
 @newsEnd
index 905a701380afca59c6558a63d4567f2af008c940..d040c345537c51ab7df0bda2a50f2735fba1987b 100644 (file)
@@ -538,7 +538,7 @@ continuas}).  En esta edición también se encuentra una panorámica
 sobre ciertos proyectos poco conocidos colaterales a LilyPond, y
 algunas otras noticias más ligeras.
 
-Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-27,
+Acérquese y @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-27,
 lea ya el Informe LilyPond número 27}; ¡todos los comentarios y
 aportaciones serán calurosamente bien recibidos!
 
@@ -628,7 +628,7 @@ sobre el estado de desarrollo actual, y un análisis de muestras de
 salida de LilyPond; vea por sí mismo cuán cerca (¿o cuán lejos?)
 estamos de igualar la calidad de las partituras grabadas a mano.
 
-Acérquese y @uref{http://news.lilynet.net/?The-LilyPond-Report-26,
+Acérquese y @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-26,
 lea ya el Informe LilyPond número 26}; ¡todos los comentarios y
 aportaciones serán calurosamente bien recibidos!
 
@@ -708,7 +708,7 @@ habitual de la que destacamos a nuestro joven colaborador polaco Janek
 Warchoł!  También incluimos en esta edición algunos elementos
 inesperados, entre ellos (y no solamente)… ¡una receta de cocina!
 
-Acérquese al @uref{http://news.lilynet.net/?The-LilyPond-Report-25,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-25,
 Informe LilyPond 25} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 
@@ -766,7 +766,7 @@ un artítulo sobre unas nuevas e tineresantes posibilidades de la
 gramática de LilyPond, y una panorámica de las aplicaciones de web
 basadas en LilyPond.
 
-Acérquese al @uref{http://news.lilynet.net/?The-LilyPond-Report-24,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-24,
 Informe LilyPond 24} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 
@@ -869,7 +869,7 @@ las nuevas y útiles instrucciones añadidas recientemente a LilyPond,
 así como una entrevista con el colaborador de LilyPond y compositor
 Mike Solomon.
 
-Acérquese al @uref{http://news.lilynet.net/?The-LilyPond-Report-23,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-23,
 Informe LilyPond 23} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 
@@ -1787,7 +1787,7 @@ es el co-fundador y desarrollador principal de LilyPond
 @strong{Jan Nieuwenhuizen}, que ha estado muy ocupado los últimos meses:
 ¡dispóngase a leer en qué!
 
-Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-22,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-22,
 Informe LilyPond 22} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 
@@ -1858,7 +1858,7 @@ forma de ejecutar LilyPond a partir de una memoria USB, sin olvidar
 las acostumbradas notas de lanzamientos, el fragmento de código del
 día y las noticias que nos llegan de la charca de las ranas.
 
-Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-21,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-21,
 Informe LilyPond 21} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 
@@ -1942,7 +1942,7 @@ notación en línea que utiliza lilypond, además de las acostumbradas
 notas de lanzamientos, el fragmento de código del día, noticias desde
 la charca de las ranas y el informe de fallos del día.
 
-Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-20,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-20,
 Informe LilyPond 20} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 @newsEnd
@@ -1979,7 +1979,7 @@ además de las acostumbradas notas sobre lanzamientos, el fragmento de
 código del día, noticias desde la charca de las ranas, y el informe de
 fallo del día.
 
-Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-19,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-19,
 Informe LilyPond 19} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 @newsEnd
@@ -2118,7 +2118,7 @@ y @qq{blandito}!  Esta edición está repleta de emoción e interés,
 bolsas de papel y pentagramas terminados en zigzag, además de las
 secciones habituales Ranas y Bichos.
 
-Acérquese al @uref{http://news.lilynet.net/The-LilyPond-Report-18,
+Acérquese al @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-18,
 Informe LilyPond 18} y léalo ahora mismo; ¡animamos calurosamente a
 todos a que hagan sus comentarios y contribuciones!
 @newsEnd
@@ -2196,7 +2196,7 @@ ranas y bichos, ¡por no mencionar una extensa reseña del editor
 Frescobaldi!
 
 ¿A qué espera?  Acérquese y
-¡@uref{http://news.lilynet.net/The-LilyPond-Report-17, lea el Informe
+¡@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-17, lea el Informe
 LilyPond número 17} (en inglés) ahora mismo!
 @newsEnd
 
@@ -2294,7 +2294,7 @@ texi2html and CSS for being so flexible!
 
 The LilyPond Report is back! This short, informal opinion column is
 about the LilyPond project: its team, its world, its community.
-Read @uref{http://news.lilynet.net/The-LilyPond-Report-16, issue 16}
+Read @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-16, issue 16}
 now!
 
 @newsEnd
@@ -2337,7 +2337,7 @@ vezetője
 
 The @emph{LilyPond Report} is a short, informal opinion column about the LilyPond project:
 its team, its world, its community.
-Follow @uref{http://news.lilynet.net/The-LilyPond-Report-15,this link}
+Follow @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-15,this link}
 to read the full issue...
 @newsEnd
 
@@ -2347,7 +2347,7 @@ to read the full issue...
 
 The @emph{LilyPond Report} is back, on a new website!
 This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community.
-Follow @uref{http://news.lilynet.net/The-LilyPond-Report-14,this link} to read the full issue...
+Follow @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-14,this link} to read the full issue...
 @newsEnd
 
 
index 8a919cc73c93b62ad6c4162c2e5d92cc290921dc..3b97143b2a713f2583f99dc4dbbd4903ada7db0c 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.24"
 
 @node Music engraving
 @chapter Music engraving
@@ -1446,11 +1446,11 @@ note head symbol is changed during the music fragment.
   <d f g>4
   \once \override NoteHead.style = #'cross
   <d f g>4
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice #mc-squared
   <d f g>4
   <<
     { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
   >>
 }
 @end lilypond
index 7e053b81643b3418d5b66851f291055a95262d00..861105029f5a64e5e896725105fd7ae05fd88b1c 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.22"
+@c \version "2.19.24"
 
 @node Interfaces for programmers
 @chapter Interfaces for programmers
@@ -1272,17 +1272,22 @@ desaturate =
 
 The most versatile way of tuning an object is @code{\applyOutput} which
 works by inserting an event into the specified context
-(@rinternals{ApplyOutputEvent}).  Its syntax is
+(@rinternals{ApplyOutputEvent}).  Its syntax is either
 @example
 \applyOutput @var{Context} @var{proc}
 @end example
+or
+@example
+\applyOutput @var{Context}.@var{Grob} @var{proc}
+@end example
 
 @noindent
 where @code{@var{proc}} is a Scheme function, taking three arguments.
 
 When interpreted, the function @code{@var{proc}} is called for
-every layout object found in the context @code{@var{Context}} at
-the current time step, with the following arguments:
+every layout object (with grob name @var{Grob} if specified) found
+in the context @code{@var{Context}} at the current time step, with
+the following arguments:
 @itemize
 @item the layout object itself,
 @item the context where the layout object was created, and
@@ -1301,12 +1306,11 @@ note-heads on the center-line and next to it:
 
 @lilypond[quote,verbatim,ragged-right]
 #(define (blanker grob grob-origin context)
-   (if (and (memq 'note-head-interface (ly:grob-interfaces grob))
-            (< (abs (ly:grob-property grob 'staff-position)) 2))
+   (if (< (abs (ly:grob-property grob 'staff-position)) 2)
        (set! (ly:grob-property grob 'transparent) #t)))
 
 \relative {
-  a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2
+  a'4 e8 <<\applyOutput Voice.NoteHead #blanker a c d>> b2
 }
 @end lilypond
 
@@ -1314,8 +1318,8 @@ To have @var{function} interpreted at the @code{Score} or @code{Staff}
 level use these forms
 
 @example
-\applyOutput #'Score #@var{function}
-\applyOutput #'Staff #@var{function}
+\applyOutput Score@dots{}
+\applyOutput Staff@dots{}
 @end example
 
 
index 5e3299c68861664ddc030b362eb95dea7be256a6..9a51905af1dfd482131fcf31896951c06db9b705 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.24"
 
 @c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek
 
@@ -1547,11 +1547,11 @@ musical :
   <d f g>4
   \once \override NoteHead.style = #'cross
   <d f g>4
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice #mc-squared
   <d f g>4
   <<
     { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
   >>
 }
 @end lilypond
index 866af1e4938242b5af3c3e8d8253ac9bcacb6ed8..29d148c6448bc63049b317fb7bb55761104d569c 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.22"
+@c \version "2.19.24"
 
 @c Translators: Valentin Villenave, Jean-Charles Malahieude
 @c Translation checkers: Gilles Thibault
@@ -1429,7 +1429,7 @@ sur la ligne médiane ou bien directement à son contact.
        (set! (ly:grob-property grob 'transparent) #t)))
 
 \relative {
-  a'4 e8 <<\applyOutput #'Voice #blanker a c d>> b2
+  a'4 e8 <<\applyOutput Voice #blanker a c d>> b2
 }
 @end lilypond
 
@@ -1438,8 +1438,8 @@ La @var{procédure} sera interprétée au niveau @code{Score}
 des syntaxes
 
 @example
-\applyOutput #'Score #@var{procédure}
-\applyOutput #'Staff #@var{procédure}
+\applyOutput Score #@var{procédure}
+\applyOutput Staff #@var{procédure}
 @end example
 
 
index 1b3b82b2bb393e7a650f179915b7427fc3c9126f..211347ef6c7102a2778b23a3e6b63c72bc86b28b 100644 (file)
@@ -657,7 +657,7 @@ et la liaison :
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -666,14 +666,12 @@ Notez que les hampes de la seconde voix sont dirigées vers le bas.
 
 Autre exemple :
 
-@lilypond[quote,verbatim,ragged-right]
-\relative {
-  \key d \minor
-  %    Voice "1"             Voice "2"
-  << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
-  << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
-  << { a2. r4 }         \\ { fis2. s4 }       >> |
-}
+@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+\key d \minor
+%    Voice = "1"           Voice = "2"
+<< { r4 g g4. a8 }    \\ { d,2 d4 g }       >> |
+<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
+<< { a2. r4 }         \\ { fis2. s4 }       >> |
 @end lilypond
 
 Le recours à une construction @code{<< \\ >>} particulière à chaque
@@ -684,12 +682,12 @@ carrément séparer chaque voix :
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -717,7 +715,7 @@ automatiquement.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 50589f171ab9736f426e40a77d22bf18026a7048..be1de14305256db0ad8e3c97e647f962da3648b2 100644 (file)
@@ -898,7 +898,7 @@ Juin 2009
 Dans la revue annuelle de la Fédération Nationale des Associations
 de Parents d'Éleves de Conservatoires, le compositeur français
 Valentin Villenave, également contributeur LilyPond, consacre un
-@uref{http://news.lilynet.net/Free-Music-Now, article} aux licences
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, article} aux licences
 libres, et au rôle primordial que peut jouer LilyPond afin d'ouvrir
 à tous l'accès à la musique écrite.
 
index 223f9606e1935e02e4312e0057fafddf60acb168..e6466e208efdb63f8c627d0203f54e847fc66147 100644 (file)
@@ -8,7 +8,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.19.21"
+@c \version "2.19.24"
 
 @node A kottaszedés
 @chapter A kottaszedés
@@ -1355,11 +1355,11 @@ note head symbol is changed during the music fragment.
   <d f g>4
   \once \override NoteHead.style = #'cross
   <d f g>4
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice #mc-squared
   <d f g>4
   <<
     { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
   >>
 }
 @end lilypond
index 14a93b3b248b7e9b9c203df3f2372ec2a900c53f..95c643bb4dcc7b16cf46728c3b0ff6610a6ae74e 100644 (file)
@@ -176,7 +176,7 @@ Holland LilyPond-felhasználók közössége}
 @subsubheading LilyPond hírlevél
 
 Közösségi hírlevelünket olvasva nyomon követheted a program fejlődését:
-@uref{http://news.lilynet.net/, LilyPond hírlevél}.
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/, LilyPond hírlevél}.
 
 @subsubheading Értesítés a kiadott verziókról: @code{info-lilypond@@gnu.org}
 
index 512da3f4093addc87420a720e6c85c85a5ff6c03..2fc2d416ea21abbc85939f18b431b85cfa9182b2 100644 (file)
@@ -629,7 +629,7 @@ la nota di passaggio che la legatura di portamento:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -641,7 +641,7 @@ Ecco un altro semplice esempio:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key d \minor
-  %    Voice "1"             Voice "2"
+  %    Voice = "1"           Voice = "2"
   << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
   << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
   << { a2. r4 }         \\ { fis2. s4 }       >> |
@@ -656,12 +656,12 @@ ogni battuta è preferibile dividere ogni voce, così:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -688,7 +688,7 @@ legature di valore, dinamica, etc., è impostata correttamente.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 7a872d739c12f2e84af4a2d50705deeb5576f03b..0fdf56fca5bd3b93d1e17b96d17aba74fe9a098d 100644 (file)
@@ -204,7 +204,7 @@ forum olandese}
 @subsubheading LilyPond Report
 
 Il modo più semplice per restare in contatto è leggere la newsletter della
-nostra comunità, il @uref{http://news.lilynet.net/, LilyPond Report}.
+nostra comunità, il @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/, LilyPond Report}.
 
 @subsubheading Mailing list dei rilasci: @code{info-lilypond@@gnu.org}
 
index cac6336294b17de092e558307a22d391ae72fa6d..60fb62d61a409fcd1b8e36ce85d4a20295853114 100644 (file)
@@ -814,7 +814,7 @@ software per gestire le loro biblioteche.
 @item
 Giugno 2009
 
-In un @uref{http://news.lilynet.net/Free-Music-Now, articolo}
+In un @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, articolo}
 pubblicato nella rivista annuale francese @emph{National Conservatory Parent
 Association}, Valentin Villenave, compositore francese e collaboratore di
 LilyPond, spiega come le licenze libere, e in particolare le partiture
index 12073fbd32ac005af32d0879073001c74e235780..34897fcf25940430220f906ccdc45fa53f4b407b 100644 (file)
@@ -686,7 +686,7 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -697,7 +697,7 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、
 
 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
 \key d \minor
-%    Voice "1"             Voice "2"
+%    Voice = "1"           Voice = "2"
 << { r4 g g4. a8 }    \\ { d,2 d4 g }       >> |
 << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
 << { a2. r4 }         \\ { fis2. s4 }       >> |
@@ -712,12 +712,12 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -747,7 +747,7 @@ LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                 Voice "3"
+  %    Voice = "1"   Voice = "2"               Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8 ~ } >> |
   << { d2 e2 }  \\ { c8 b16 a b8 g ~ 2 } \\ { s4 b4 c2 } >> |
 }
index 54fc3582007a883fc91fac95d88df48ee5831efb..ade5de27ed82d2236033f9be1898106ccc8333a5 100644 (file)
@@ -205,7 +205,7 @@ LilyPond のことを知る最も簡単な方法は、@c
 我々のコミュニティのニュース レター LilyPond レポートを読むことです。
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example
 
 @subsubheading リリース メーリング リスト: @code{info-lilypond@@gnu.org}
index ff90375f02f62b05b23bc5e6580fa850e4fdd187..d90d4cf6753e6a7c8c9e49bbf25aa78f7eca2686 100644 (file)
@@ -887,7 +887,7 @@ talk about using software to maintain their libraries.
 @item
 June 2009
 
-In an @uref{http://news.lilynet.net/Free-Music-Now, article}
+In an @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, article}
 published in the French @emph{National Conservatory Parent
 Association}'s yearly magazine, French composer and LilyPond
 contributor Valentin Villenave explains how Free licenses, and
index 2f7b4b66de5badf170372e310f2b658873f5afbf..b936ca497169b425dba7f9b7063d327305c23d16 100644 (file)
@@ -628,7 +628,7 @@ the passing note and a slur:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -640,7 +640,7 @@ Here's another simple example:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key d \minor
-  %    Voice "1"             Voice "2"
+  %    Voice = "1"           Voice = "2"
   << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
   << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
   << { a2. r4 }         \\ { fis2. s4 }       >> |
@@ -656,12 +656,12 @@ separately, like this:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -690,7 +690,7 @@ of slurs, stems, ties, dynamics etc., is set appropriately.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 7103fbe174f625428ff9fe35491ee6090fba922b..f453c3bd8f88b4dc0fd25e2334f4cf120bde6200 100644 (file)
@@ -654,7 +654,7 @@ the passing note and a slur:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key g \major
-  %    Voice "1"               Voice "2"
+  %    Voice = "1"             Voice = "2"
   << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
 }
 @end lilypond
@@ -666,7 +666,7 @@ Here's another simple example:
 @lilypond[quote,verbatim,ragged-right]
 \relative {
   \key d \minor
-  %    Voice "1"             Voice "2"
+  %    Voice = "1"           Voice = "2"
   << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
   << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
   << { a2. r4 }         \\ { fis2. s4 }       >> |
@@ -682,12 +682,12 @@ separately, like this:
 @lilypond[quote,verbatim,ragged-right]
 <<
   \key d \minor
-  \relative { % Voice "1"
+  \relative { % Voice "1"
     r4 g' g4. a8 |
     bes4 bes c bes |
     a2. r4 |
   } \\
-  \relative { % Voice "2"
+  \relative { % Voice "2"
     d'2 d4 g |
     g4 g g8( a) g4 |
     fis2. s4 |
@@ -716,7 +716,7 @@ of slurs, stems, ties, dynamics etc., is set appropriately.
 \new Staff \relative {
   % Main voice
   c'16 d e f
-  %    Voice "1"     Voice "2"                Voice "3"
+  %    Voice = "1"   Voice = "2"              Voice = "3"
   << { g4 f e } \\ { r8 e4 d c8~ } >> |
   << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
 }
index 6d0ecef888aecd31f33f1b27fc9a0afdb4fe7f85..85e56c6d235f0c4f04d17b09ee9157585842172a 100644 (file)
@@ -704,7 +704,7 @@ onderhouden.
 @item
 juni 2009
 
-In een @uref{http://news.lilynet.net/Free-Music-Now, artikel}
+In een @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, artikel}
 gepubliceerd in het Franse @emph{National Conservatory Parent
 Association}'s jaarblad, legt de Franse componist en LilyPond-bijdrager
 Valentin Villenave uit waarom Vrije licenties, en in het bijzonder
index ad9842492d5681dc95c1d5f2e5e2dad219820ed7..bce3cd9c92ae2e12a7fc50dfe670bfcb207b2a26 100644 (file)
@@ -1,10 +1,11 @@
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.di.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.18.0"
+% 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.19.24
+\version "2.19.24"
 
 \header {
   lsrtags = "really-cool, scheme-language, tweaks-and-overrides"
@@ -19,20 +20,19 @@ arguments.
 } % begin verbatim
 
 #(define (mc-squared grob grob-origin context)
-  (let ((sp (ly:grob-property grob 'staff-position)))
-    (if (grob::has-interface grob 'note-head-interface)
-      (begin
-        (ly:grob-set-property! grob 'stencil
-          (grob-interpret-markup grob
-            (make-lower-markup 0.5
-              (case sp
-                ((-5) "m")
-                ((-3) "c ")
-                ((-2) (make-smaller-markup (make-bold-markup "2")))
-                (else "bla")))))))))
+   (let ((sp (ly:grob-property grob 'staff-position)))
+     (ly:grob-set-property!
+      grob 'stencil
+      (grob-interpret-markup grob
+                            #{ \markup \lower #0.5
+                               #(case sp
+                                  ((-5) "m")
+                                  ((-3) "c ")
+                                  ((-2) #{ \markup \teeny \bold 2 #})
+                                  (else "bla")) #}))))
 
 \relative c' {
   <d f g b>2
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice.NoteHead #mc-squared
   <d f g b>2
 }
diff --git a/Documentation/snippets/new/changing-properties-for-individual-grobs.ly b/Documentation/snippets/new/changing-properties-for-individual-grobs.ly
new file mode 100644 (file)
index 0000000..51dfb84
--- /dev/null
@@ -0,0 +1,30 @@
+\version "2.19.24"
+
+\header {
+  lsrtags = "really-cool, scheme-language, tweaks-and-overrides"
+
+  texidoc = "
+The @code{\\applyOutput} command allows the tuning of any layout
+object, in any context. It requires a Scheme function with three
+arguments.
+
+"
+  doctitle = "Changing properties for individual grobs"
+}
+#(define (mc-squared grob grob-origin context)
+   (let ((sp (ly:grob-property grob 'staff-position)))
+     (ly:grob-set-property!
+      grob 'stencil
+      (grob-interpret-markup grob
+                            #{ \markup \lower #0.5
+                               #(case sp
+                                  ((-5) "m")
+                                  ((-3) "c ")
+                                  ((-2) #{ \markup \teeny \bold 2 #})
+                                  (else "bla")) #}))))
+
+\relative c' {
+  <d f g b>2
+  \applyOutput Voice.NoteHead #mc-squared
+  <d f g b>2
+}
index 4ce439ee0c4fb297beeca269b60e0381cdf0f2c6..c3cb2e5fe45a549dea43e12b9c00abfa68796d6c 100644 (file)
@@ -722,7 +722,10 @@ the clip systems feature, see @ruser{Extracting fragments of music}.
 @cindex LibreOffice.org
 
 LilyPond notation can be added to OpenOffice.org and LibreOffice with
-@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}.
+@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}, an
+OpenOffice.org extension that converts LilyPond files into images within
+OpenOffice.org documents.  Although this is no longer being developed,
+it appears to still work with version 4.
 
 
 @node Inserting LilyPond output into other programs
index 704a3e8a50f6a13660c21ed99864c013dcd0a054..db4b7632a67047b07d149361f3d4ee60fd360a72 100644 (file)
@@ -815,7 +815,7 @@ talk about using software to maintain their libraries.
 @item
 June 2009
 
-In an @uref{http://news.lilynet.net/Free-Music-Now, article}
+In an @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, article}
 published in the French @emph{National Conservatory Parent
 Association}'s yearly magazine, French composer and LilyPond
 contributor Valentin Villenave explains how Free licenses, and
@@ -1451,7 +1451,7 @@ and @uref{http://canorus.org,Canorus}.
 
 @item
 @uref{http://extensions.services.openoffice.org/en/project/OOoLilyPond,OOoLilypond},
-an OpenOffice.org extension that converts LilyPond files it into images
+an OpenOffice.org extension that converts LilyPond files into images
 within OpenOffice.org documents.  Although this is no longer being
 developed, it appears to still work with version 4.
 
index a605ab8770e9aa4c9730bd66fec0f91740d80cfc..f7539d8c4613d4632144efe0c0569aa090fd7a65 100644 (file)
@@ -163,9 +163,9 @@ only people requiring this functionality upgrade to this version.
 @newsItem
 @subheading The LilyPond Report #28.  @emph{November 12, 2012}
 
-The @uref{http://news.lilynet.net/?The-LilyPond-Report-28, October
+The @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28, October
 issue of the @emph{LilyPond Report}} focuses on the
-@uref{http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?LilyPond-meeting-in-Waltrop,
 meeting of LilyPond developers and users} in Waltrop, Germany last
 August.  Of course, there are also some musings on LilyPond
 triggered by the release of 2.16.0 and 2.17.0 occuring from that
@@ -173,13 +173,13 @@ venue.
 
 There are also two monthly financial reports from David Kastrup
 whose work on LilyPond is
-@uref{http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-24#an_urgent_request_for_funding,
 solely paid for} by financial contributions from other developer
 and users (thank you!), and a report about experiences from
 @uref{http://scorio.com, a web-based music typesetting service}
 using LilyPond internally.
 
-Come @uref{http://news.lilynet.net/?The-LilyPond-Report-28, read
+Come @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-28, read
 LilyPond Report 28} now; comments and contributions are warmly
 encouraged!
 @newsEnd
index 8b242cf504f053b65053465ea5963e3e3f28c731..6103fc8002701b2779baa732a055b5878d63e88a 100644 (file)
@@ -800,7 +800,7 @@ to be found in this issue are an overview of some lesser-known LilyPond
 companion projects, and a handful of more shallow factoids.
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-27, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-27, read
 LilyPond Report 27} now; comments and contributions are
 warmly encouraged!
 
@@ -888,7 +888,7 @@ see for yourself how close (or how far?) are we from matching
 the quality of hand-engraved scores.
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-26, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-26, read
 LilyPond Report 26} now; comments and contributions are
 warmly encouraged!
 
@@ -967,7 +967,7 @@ Also included in this issue are quite a few unexpected items,
 including (but not limited to)… a cooking recipe!
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-25, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-25, read
 LilyPond Report 25} now; comments and contributions are
 warmly encouraged!
 
@@ -1025,7 +1025,7 @@ an article about exciting new features in LilyPond grammar,
 and an overview of LilyPond-based web applications.
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-24, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-24, read
 LilyPond Report 24} now; comments and contributions are
 warmly encouraged!
 
@@ -1129,7 +1129,7 @@ recently added to LilyPond, as well as an interview
 with LilyPond contributor and composer Mike Solomon.
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-23, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-23, read
 LilyPond Report 23} now; comments and contributions are
 warmly encouraged!
 
@@ -2024,7 +2024,7 @@ today is LilyPond’s co-founder and core developer
 read on to find out what for!
 
 Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-22, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-22, read
 LilyPond Report 22} now; comments and contributions are
 warmly encouraged!
 
@@ -2092,7 +2092,7 @@ release news, the bug report of the Report, and some news from
 the frog pond!
 
 Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-21, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-21, read
 LilyPond Report 21} now; comments and contributions are
 warmly encouraged!
 
@@ -2175,7 +2175,7 @@ release news, snippet of the report, news from the frog pond, and
 the bug report of the report!
 
 Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-20, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-20, read
 LilyPond Report 20} now; comments and contributions are
 warmly encouraged!
 @newsEnd
@@ -2213,7 +2213,7 @@ the report, news from the frog pond, and the bug report of the
 report!
 
 Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-19, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-19, read
 LilyPond Report 19} now; comments and contributions are
 warmly encouraged!
 @newsEnd
@@ -2350,7 +2350,7 @@ with emotion and coolness, paper bags and zigzag-ending
 staves, plus the usual Frogs and Bugs.
 
 Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-18, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-18, read
 LilyPond Report 18} now; comments and contributions are
 warmly encouraged!
 @newsEnd
@@ -2427,7 +2427,7 @@ websites and poetry, frogs and bugs, not to mention an extensive
 review of the Frescobaldi editor!
 
 What are you waiting for?  Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-17, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-17, read
 LilyPond Report 17} now!
 @newsEnd
 
@@ -2522,7 +2522,7 @@ texi2html and CSS for being so flexible!
 
 The LilyPond Report is back! This short, informal opinion column is
 about the LilyPond project: its team, its world, its community.
-Read @uref{http://news.lilynet.net/The-LilyPond-Report-16, issue 16}
+Read @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-16, issue 16}
 now!
 
 @newsEnd
@@ -2565,7 +2565,7 @@ vezetője
 
 The @emph{LilyPond Report} is a short, informal opinion column about the LilyPond project:
 its team, its world, its community.
-Follow @uref{http://news.lilynet.net/The-LilyPond-Report-15,this link}
+Follow @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-15,this link}
 to read the full issue...
 @newsEnd
 
@@ -2575,7 +2575,7 @@ to read the full issue...
 
 The @emph{LilyPond Report} is back, on a new website!
 This short, informal, weekly opinion column is about the LilyPond project: its team, its world, its community.
-Follow @uref{http://news.lilynet.net/The-LilyPond-Report-14,this link} to read the full issue...
+Follow @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-14,this link} to read the full issue...
 @newsEnd
 
 
index ce3e70566e15b5c61738284828bb7444de12a152..c6da26a1bb1ac2d54cd91f32baacc1a6459e1927 100644 (file)
@@ -37,7 +37,6 @@ RedirectMatch ^/documentation/$ /doc
 #
 RedirectMatch ^/bugs   /bug-reports
 #RedirectMatch ^/bugs  http://code.google.com/p/lilypond/issues/list
-RedirectMatch ^/wiki   http://wiki.lilynet.net
 # the new website already has an /authors
 #RedirectMatch ^/authors /doc/Documentation/topdocs/AUTHORS
 # the new website has news on the main page
index 21046727b16aef99c76b5fa745e7d66d355f7c12..e58ab7d726c6b793f707f289ccfd54bb492496ef 100644 (file)
@@ -205,7 +205,7 @@ The easiest way to keep touch is by reading our community
 newsletter, the LilyPond Report:
 
 @example
-@uref{http://news.lilynet.net}
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net}
 @end example
 
 @subsubheading 发行版邮件列表: @code{info-lilypond@@gnu.org}
index 5876d4cee799e77c1165e1dd8214a27d3b3f03a6..91e1b0efaa0cb9a4df62cc2e8e144328578f6a3f 100644 (file)
@@ -659,7 +659,7 @@ talk about using software to maintain their libraries.
 @item
 2009年6月
 
-In an @uref{http://news.lilynet.net/Free-Music-Now, article}
+In an @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/Free-Music-Now, article}
 published in the French @emph{National Conservatory Parent
 Association}'s yearly magazine, French composer and LilyPond
 contributor Valentin Villenave explains how Free licenses, and
index efa7817f570ca71903875efbf5c9f6c9ed3bec66..8373eaf839878612d13fefc94b3bff828aa76662 100644 (file)
@@ -65,7 +65,7 @@ see for yourself how close (or how far?) are we from matching
 the quality of hand-engraved scores.
 
 Come
-@uref{http://news.lilynet.net/?The-LilyPond-Report-26, read
+@uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/?The-LilyPond-Report-26, read
 LilyPond Report 26} now; comments and contributions are
 warmly encouraged!
 
index 496be95ea06bf1e0f1166de115095e2ec960c316..fd1268dee871e9c9a1d4725ed87760587914e403 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.21"
+\version "2.19.24"
 
 \header {
   texidoc = "The @code{\\applyOutput} expression is the most flexible way to
@@ -10,29 +10,22 @@ position.
 }
 
 #(define (mc-squared gr org cur)
-  (let*
-    (
-      (ifs (ly:grob-interfaces gr))
-      (sp (ly:grob-property gr 'staff-position))
-      )
-    (if (memq 'note-head-interface ifs)
-      (begin
-        (ly:grob-set-property! gr 'stencil
-          (grob-interpret-markup gr
-            (make-raise-markup -0.5
-              (case sp
-                ((-5) (make-simple-markup "m"))
-                ((-3) (make-simple-markup "c "))
-                ((-2) (make-smaller-markup (make-bold-markup "2")))
-                (else (make-simple-markup "bla"))
-                ))))
-        ))))
+   (let ((sp (ly:grob-property gr 'staff-position)))
+     (ly:grob-set-property!
+      gr 'stencil
+      (grob-interpret-markup gr
+                            #{ \markup \raise #-0.5
+                               #(case sp
+                                  ((-5) "m")
+                                  ((-3) "c ")
+                                  ((-2) #{ \markup \teeny \bold 2 #})
+                                  (else "bla")) #}))))
 
 \new Voice \relative {
   \set autoBeaming = ##f
 
   <d' f g b>8
 
-  \applyOutput #'Voice #mc-squared
+  \applyOutput Voice.NoteHead #mc-squared
   <d f g b>8
 }
diff --git a/input/regression/autochange-relative.ly b/input/regression/autochange-relative.ly
new file mode 100644 (file)
index 0000000..45fae17
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.19.23"
+
+\header {
+  texidoc = "@code{\\autochange} needs to be given pitches in their
+final octaves, so if @code{\\relative} is used it must be applied
+inside @code{\\autochange}.  The pitches in @code{\\autochange} are
+unaffected by an outer @code{\\relative}, so that the printed output
+shows the pitches that @code{\\autochange} used.
+
+The expected output of this test is three identical measures."
+}
+
+\new PianoStaff {
+   \autochange \absolute {g4 c g' c}
+   \relative \autochange {g4 c g' c}  % relative is ignored
+   \autochange \relative {g4 c, g'' c,,}
+}
index b85deff6896d5e4906bac22c3883eefa84c814fd..649309ac6e448c2824577dfe5fe36337c75394b1 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.19.22"
+\version "2.19.24"
 #(use-modules (srfi srfi-13)
               (ice-9 format))
 
@@ -226,7 +226,8 @@ stderr of this run."
 \test ##[ \revert StaffGrouper.staff-staff-spacing.basic-distance #]    % nested properties
 
 %% \applyOutput
-\test ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
+\test ##[ \applyOutput Foo #(lambda (arg) (list)) #]
+\test ##[ \applyOutput Foo.NoteHead #(lambda (arg) (list)) #]
 %% \applyContext
 \test ##[ \applyContext #(lambda (arg) (list)) #]
 
index 0b3fca4b20e734bdcd216dbb4b41895626fc715f..809cc7718d0fc21946437924702d2907c75c5465 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.16.0"
+\version "2.19.24"
 
 \header{
   texidoc="
@@ -12,12 +12,12 @@ setting the @code{extra-offset} of a grob.
 
 
 \relative c''{
-  \applyOutput #'Bottom #(outputproperty-compatibility
+  \applyOutput Bottom #(outputproperty-compatibility
                 (make-type-checker 'note-head-interface)
                 'extra-offset '(2 . 3))
   c2
   c
-  \applyOutput #'Score #(outputproperty-compatibility (make-type-checker 'mark-interface) 'extra-offset '(-1 . 4))
+  \applyOutput Score #(outputproperty-compatibility (make-type-checker 'mark-interface) 'extra-offset '(-1 . 4))
   \mark A
   d1
   \mark \default
diff --git a/input/regression/part-combine-relative.ly b/input/regression/part-combine-relative.ly
new file mode 100644 (file)
index 0000000..33914bc
--- /dev/null
@@ -0,0 +1,17 @@
+\version "2.19.23"
+
+\header {
+  texidoc = "@code{\\partcombine} needs to be given pitches in their
+final octaves, so if @code{\\relative} is used it must be applied
+inside @code{\\partcombine}.  The pitches in @code{\\partcombine} are
+unaffected by an outer @code{\\relative}, so that the printed output
+shows the pitches that @code{\\partcombine} used.
+
+The expected output of this test is three identical measures."
+}
+
+\new Staff {
+  \partcombine \absolute { e'2 f' } { c'2 d' }
+  \relative \partcombine { e'2 f' } { c'2 d' } % relative is ignored
+  \partcombine \relative { e'2 f } \relative { c'2 d }
+}
diff --git a/input/regression/tweaks-as-overrides.ly b/input/regression/tweaks-as-overrides.ly
new file mode 100644 (file)
index 0000000..7bece45
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.19.24"
+
+\header {
+  texidoc = "@code{\\tweak} commands can be used to effect overrides
+when given a symbol list as argument.  Such overrides can be the
+target of another tweak, with the tweaks accumulating.  This example
+should show the starting chord with blue, cross-styled note heads
+and a red stem."
+}
+
+\layout { ragged-right = ##t }
+
+{
+  \once \tweak Stem.color #red
+  \tweak color #blue
+  \tweak style #'cross NoteHead
+  <c' e'>2 c'2
+}
index de53608ed5d9fbaa13bc82248b0550e7a1f04709..214079d23a5f284713a06c94f0fadb7d4aac6006 100644 (file)
@@ -75,6 +75,9 @@ private:
 
 public:
   Moment music_get_length () const;
+  // music_start_mom () is calculated relative to the time where the
+  // iterator occurs in the music stream, so it will usually be
+  // non-zero only for expressions starting with grace notes.
   Moment music_start_mom () const;
   Music_iterator ();
   void report_event (Music *);
@@ -89,6 +92,8 @@ public:
   virtual Moment pending_moment () const;
   virtual bool ok () const;
   virtual bool run_always () const;
+  // process is called with a time relative to the iterator start, so
+  // usually the last processed moment is the same as music_get_length.
   virtual void process (Moment until);
   virtual void derived_mark () const;
   virtual void construct_children ();
index 6eb6472e712c439bdf97a41a07f906feb9f38fff..97a3dcbe04cf3b98ba218c75b8a4e6e05cf5abb7 100644 (file)
@@ -27,15 +27,11 @@ struct Semi_tie
 {
   DECLARE_GROB_INTERFACE ();
 
-  DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
-  static bool less (Grob *const &s1,
-                    Grob *const &s2);
+  static bool less (Grob *s1, Grob *s2);
   static int get_column_rank (Item *);
   static int get_position (Item *);
   static Item *head (Item *);
-  // return the head if it is present on the given side
-  static Item *head (Item *, Direction d);
 };
 
 #endif /* SEMI_TIE_HH */
index 7b74d159c85d046913685f41746ccd194dcb4441..162637e514d40579cda173d06c7a23fd04491371 100644 (file)
@@ -32,8 +32,7 @@ public:
   static Item *head (Spanner *, Direction);
   static int get_column_rank (Spanner *, Direction);
   static int get_position (Spanner *);
-  static int get_position_generic (Grob *);
-  static Direction get_default_dir (Grob *);
+  static Direction get_default_dir (Spanner *);
   static SCM get_control_points (Grob *, Grob *,
                                  Tie_configuration const &,
                                  Tie_details const &);
@@ -42,8 +41,7 @@ public:
   DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
-  static bool less (Grob *const &s1,
-                    Grob *const &s2);
+  static bool less (Grob *s1, Grob *s2);
 };
 
 #endif // TIE_HH
index 7efe061304ad1c467068bb6a900af24c895fb2f1..c14a6ee563b11c3e1f09cd6210ed7f7fa8eb1255 100644 (file)
@@ -56,6 +56,10 @@ Output_property_engraver::acknowledge_grob (Grob_info inf)
     {
       Stream_event *o = props_[i];
       Context *d = inf.context ();
+      SCM grob = o->get_property ("symbol");
+      if (scm_is_symbol (grob)
+          && ly_symbol2string (grob) != inf.grob ()->name ())
+        continue;
       SCM proc = o->get_property ("procedure");
       scm_call_3 (proc,
                  inf.grob ()->self_scm (),
index 9da363df933d208053348e40223a98e6ea359a6e..48ada375661dd85f2b44e46e298016c971af5905 100644 (file)
@@ -699,8 +699,7 @@ identifier_init_nonumber:
        | partial_function ETC
        {
                $$ = MAKE_SYNTAX (partial_music_function, @$,
-                                 scm_reverse_x (scm_car ($1), SCM_EOL),
-                                 scm_reverse_x (scm_cdr ($1), SCM_EOL));
+                                 scm_reverse_x ($1, SCM_EOL));
        }
        ;
 
@@ -708,45 +707,39 @@ identifier_init_nonumber:
 partial_function:
        MUSIC_FUNCTION function_arglist_partial
        {
-               $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2));
+               $$ = scm_acons ($1, $2, SCM_EOL);
        }
        | EVENT_FUNCTION function_arglist_partial
        {
-               $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2));
+               $$ = scm_acons ($1, $2, SCM_EOL);
        }
        | SCM_FUNCTION function_arglist_partial
        {
-               $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2));
+               $$ = scm_acons ($1, $2, SCM_EOL);
        }
        | MUSIC_FUNCTION EXPECT_SCM function_arglist_optional partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($4)),
-                              scm_cons ($3, scm_cdr ($4)));
+               $$ = scm_acons ($1, $3, $4);
        }
        | EVENT_FUNCTION EXPECT_SCM function_arglist_optional partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($4)),
-                              scm_cons ($3, scm_cdr ($4)));
+               $$ = scm_acons ($1, $3, $4);
        }
        | SCM_FUNCTION EXPECT_SCM function_arglist_optional partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($4)),
-                              scm_cons ($3, scm_cdr ($4)));
+               $$ = scm_acons ($1, $3, $4);
        }
        | MUSIC_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($5)),
-                              scm_cons ($4, scm_cdr ($5)));
+               $$ = scm_acons ($1, $4, $5);
        }
        | EVENT_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($5)),
-                              scm_cons ($4, scm_cdr ($5)));
+               $$ = scm_acons ($1, $4, $5);
        }
        | SCM_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function
        {
-               $$ = scm_cons (scm_cons ($1, scm_car ($5)),
-                              scm_cons ($4, scm_cdr ($5)));
+               $$ = scm_acons ($1, $4, $5);
        }
        ;
 
index 00f21af4d6969f60f7190f4914c95f0683639b38..00d8eed88b0bb34edf26d20bdc60c660e8f9e9ef 100644 (file)
@@ -32,31 +32,81 @@ public:
   Percent_repeat_iterator ();
 protected:
   virtual SCM get_music_list () const;
+  virtual void construct_children ();
+  virtual void next_element (bool);
+  virtual void derived_mark () const;
+private:
+  SCM child_list_;
+  int starting_bar_;
 };
 
 IMPLEMENT_CTOR_CALLBACK (Percent_repeat_iterator);
 
 Percent_repeat_iterator::Percent_repeat_iterator ()
+  : child_list_ (SCM_UNDEFINED), starting_bar_ (-1)
 {
 }
 
+void
+Percent_repeat_iterator::derived_mark () const
+{
+  scm_gc_mark (child_list_);
+}
+
+void
+Percent_repeat_iterator::construct_children ()
+{
+  Music *mus = get_music ();
+
+  Music *child = Repeated_music::body (mus);
+  child_list_ = scm_list_1 (child->self_scm ());
+
+  Sequential_iterator::construct_children ();
+
+  descend_to_bottom_context ();
+  if (!measure_position (get_outlet ()).main_part_)
+    starting_bar_ =
+      robust_scm2int (get_outlet ()->get_property ("internalBarNumber"), 0);
+}
+
 SCM
 Percent_repeat_iterator::get_music_list () const
 {
+  return child_list_;
+}
+
+// Arrive here when child processing has been completed.  At that
+// point of time, we can determine what kind of percent expression we
+// are dealing with and extend the child list just in time before the
+// next iterator is getting fetched.
+void
+Percent_repeat_iterator::next_element (bool side_effect)
+{
+  // Do nothing if we already did our processing here.
+  if (!scm_is_pair (child_list_))
+    {
+      Sequential_iterator::next_element (side_effect);
+      return;
+    }
+
   Music *mus = get_music ();
 
   Music *child = Repeated_music::body (mus);
   SCM length = child->get_length ().smobbed_copy ();
+
+  int current_bar = -1;
+  if (!measure_position (get_outlet ()).main_part_)
+    current_bar =
+      robust_scm2int (get_outlet ()->get_property ("internalBarNumber"), 0);
+
   SCM child_list = SCM_EOL;
-  Moment measure_len = measure_length (get_outlet ());
-  Moment music_len = robust_scm2moment (length, Moment (0));
 
   string event_type;
   SCM slash_count = SCM_EOL;
 
-  if (measure_len == music_len)
+  if (starting_bar_ >= 0 && current_bar == starting_bar_ + 1)
     event_type = "PercentEvent";
-  else if (measure_len * Moment (2) == music_len)
+  else if (starting_bar_ >=0 && current_bar == starting_bar_ + 2)
     event_type = "DoublePercentEvent";
   else
     {
@@ -80,7 +130,8 @@ Percent_repeat_iterator::get_music_list () const
       child_list = scm_cons (percent->unprotect (), child_list);
     }
 
-  child_list = scm_cons (child->self_scm (), child_list);
+  scm_set_cdr_x (child_list_, child_list);
+  child_list_ = SCM_EOL;
 
-  return child_list;
+  Sequential_iterator::next_element (side_effect);
 }
index 8980a8cf1cd9d87731e7ac8a1c10eeb7d95d8d67..202195d830634fbb41f99dcd0f1cd041ab91802a 100644 (file)
@@ -33,7 +33,6 @@ ADD_INTERFACE (Semi_tie_column,
                "The interface for a column of l.v. (laissez vibrer) ties.",
 
                /* properties */
-               "direction "
                "positioning-done "
                "head-direction "
                "tie-configuration "
index 1cc82c3b08839a397198010384524114d801345d..049cd029d6c40d56eb9348e81b0639bf9f70cf12 100644 (file)
@@ -55,20 +55,22 @@ MAKE_SCHEME_CALLBACK (Semi_tie, calc_control_points, 1)
 SCM
 Semi_tie::calc_control_points (SCM smob)
 {
-  Grob *me = unsmob<Grob> (smob);
+  Item *me = LY_ASSERT_SMOB(Item, smob, 1);
+
   (void) me->get_property ("direction");
 
-  if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
-    {
-      me->get_parent (Y_AXIS)->get_property ("positioning-done");
-    }
-  else
+  Grob *yparent = me->get_parent (Y_AXIS);
+  if (Semi_tie_column::has_interface (yparent))
     {
-      programming_error ("lv tie without Semi_tie_column.  Killing lv tie.");
-      me->suicide ();
+      /* trigger positioning. */
+      yparent->get_property ("positioning-done");
+
+      return me->get_property_data ("control-points");
     }
 
-  return me->get_property_data ("control-points");
+  programming_error ("lv tie without Semi_tie_column.  Killing lv tie.");
+  me->suicide ();
+  return SCM_EOL;
 }
 
 int
@@ -84,10 +86,16 @@ Semi_tie::get_position (Item *me)
 }
 
 bool
-Semi_tie::less (Grob *const &s1,
-                Grob *const &s2)
+Semi_tie::less (Grob *g1, Grob *g2)
 {
-  return Tie::get_position_generic (s1) < Tie::get_position_generic (s2);
+  Item *i1 = dynamic_cast<Item *> (g1);
+  Item *i2 = dynamic_cast<Item *> (g2);
+  if (i1 && i2) {
+    return get_position (i1) < get_position (i2);
+  }
+
+  programming_error ("grob is not a semi-tie");
+  return false;
 }
 
 Item *
@@ -95,10 +103,3 @@ Semi_tie::head (Item *me)
 {
   return unsmob<Item> (me->get_object ("note-head"));
 }
-
-Item *
-Semi_tie::head (Item *me, Direction d)
-{
-  SCM head_dir = me->get_property ("head-direction");
-  return (is_direction (head_dir) && (to_dir (head_dir) == d)) ? head (me) : 0;
-}
index 9beb9859136c17d392f1cd6ff2285f4422fef434..f404ad597c4b9514885b3d1e7aa2aed5cddbec18 100644 (file)
@@ -1,5 +1,8 @@
 #include "tie-formatting-problem.hh"
 #include "grob.hh"
+#include "item.hh"
+#include "semi-tie.hh"
+#include "spanner.hh"
 #include "tie.hh"
 #include "libc-extension.hh"
 #include "tie-specification.hh"
@@ -22,6 +25,8 @@ Tie_specification::Tie_specification ()
 void
 Tie_specification::from_grob (Grob *tie)
 {
+  // In this method, Tie and Semi_tie require the same logic with different
+  // types.  It might be clearer to use a template.
   tie_grob_ = tie;
   if (scm_is_number (tie->get_property_data ("direction")))
     {
@@ -29,7 +34,16 @@ Tie_specification::from_grob (Grob *tie)
       has_manual_dir_ = true;
     }
 
-  position_ = Tie::get_position_generic (tie);
+  if (Spanner *spanner = dynamic_cast<Spanner *> (tie))
+    position_ = Tie::get_position (spanner);
+  else if (Item *item = dynamic_cast<Item *> (tie))
+    position_ = Semi_tie::get_position (item);
+  else
+    {
+      programming_error ("grob is neither a tie nor a semi-tie");
+      position_ = 0;
+    }
+
   SCM pos_scm = tie->get_property ("staff-position");
   if (scm_is_number (pos_scm))
     {
index 47c5a1c9cfb9809b1d58b6f0186a069dff9bcc9d..ae81317e392665ac08cca89a1926e7853c342f04 100644 (file)
 #include "semi-tie-column.hh"
 
 bool
-Tie::less (Grob *const &s1, Grob *const &s2)
+Tie::less (Grob *g1, Grob *g2)
 {
-  return get_position_generic (s1) < get_position_generic (s2);
+  Spanner *s1 = dynamic_cast<Spanner *> (g1);
+  Spanner *s2 = dynamic_cast<Spanner *> (g2);
+  if (s1 && s2) {
+    return get_position (s1) < get_position (s2);
+  }
+
+  programming_error ("grob is not a tie");
+  return false;
 }
 
 void
@@ -86,21 +93,6 @@ Tie::get_position (Spanner *me)
   return 0;
 }
 
-int
-Tie::get_position_generic (Grob *me) // TODO: do away with this
-{
-  Spanner *spanner = dynamic_cast<Spanner *> (me);
-  if (spanner)
-    return get_position (spanner);
-
-  Item *item = dynamic_cast<Item *> (me);
-  if (item)
-    return Semi_tie::get_position (item);
-
-  programming_error ("grob is neither a tie nor a semi-tie");
-  return 0;
-}
-
 /*
   Default:  Put the tie oppositie of the stem [Wanske p231]
 
@@ -112,20 +104,14 @@ Tie::get_position_generic (Grob *me) // TODO: do away with this
   (what about linebreaks? )
 */
 Direction
-Tie::get_default_dir (Grob *me)
+Tie::get_default_dir (Spanner *me)
 {
   Drul_array<Grob *> stems;
   for (LEFT_and_RIGHT (d))
     {
-      Grob *one_head = 0;
-      if (Spanner *spanner = dynamic_cast<Spanner *> (me))
-        {
-          one_head = head (spanner, d);
-          if (!one_head)
-            one_head = head (spanner->broken_neighbor (d), d);
-        }
-      else if (Item *item = dynamic_cast<Item *> (me))
-        one_head = Semi_tie::head (item);
+      Grob *one_head = head (me, d);
+      if (!one_head)
+        one_head = head (me->broken_neighbor (d), d);
 
       Grob *stem = one_head ? Rhythmic_head::get_stem (one_head) : 0;
       stems[d] = (stem && !Stem::is_invisible (stem)) ? stem : 0;
@@ -146,7 +132,7 @@ Tie::get_default_dir (Grob *me)
     return -get_grob_direction (stems[LEFT]);
   else if (stems[RIGHT])
     return -get_grob_direction (stems[RIGHT]);
-  else if (int p = get_position_generic (me))
+  else if (int p = get_position (me))
     return Direction (sign (p));
 
   return to_dir (me->get_property ("neutral-direction"));
@@ -156,6 +142,8 @@ MAKE_SCHEME_CALLBACK (Tie, calc_direction, 1);
 SCM
 Tie::calc_direction (SCM smob)
 {
+  // In this method, Tie and Semi_tie require the same logic with different
+  // types.  It might be clearer to use a template.
   Grob *me = unsmob<Grob> (smob);
   Grob *yparent = me->get_parent (Y_AXIS);
   if ((Tie_column::has_interface (yparent)
@@ -169,8 +157,10 @@ Tie::calc_direction (SCM smob)
 
       return me->get_property_data ("direction");
     }
-  else
-    return scm_from_int (Tie::get_default_dir (me));
+
+  programming_error ("no Tie_column or Semi_tie_column.  Killing grob.");
+  me->suicide ();
+  return scm_from_int (CENTER);
 }
 
 SCM
index 06d7da791663ac1f8f9e83d6efbab4ca7d874916..9bd7e758d8aed170fdba587b1955a792d08ef59d 100644 (file)
@@ -96,10 +96,6 @@ Timing_translator::initialize ()
   if (!scm_is_pair (timeSignatureSettings))
     {
       programming_error ("missing timeSignatureSettings");
-      // A memoized constant is not the prettiest thing as a fallback
-      // since it does not track changes of the variable.  However,
-      // this is still better than nothing, and we already complained
-      // via a programming_error
       timeSignatureSettings = Lily::default_time_signature_settings;
     }
   context ()->set_property ("timeSignatureSettings", timeSignatureSettings);
index 98e6203630dedd13dabc1b4aaa3ee02a06218674..7699d638d44a832a8a63100377723d519ae4cf6b 100644 (file)
@@ -152,11 +152,18 @@ applyMusic =
    (func music))
 
 applyOutput =
-#(define-music-function (ctx proc) (symbol? procedure?)
-   (_i "Apply function @code{proc} to every layout object in context @code{ctx}")
-   (make-music 'ApplyOutputEvent
-               'procedure proc
-               'context-type ctx))
+#(define-music-function (target proc) (symbol-list-or-symbol? procedure?)
+   (_i "Apply function @code{proc} to every layout object matched by
+@var{target} which takes the form @code{Context} or @code{Context.Grob}.")
+   (let ((p (check-grob-path target (*location*) #:max 2)))
+     (if p
+         (make-music 'ApplyOutputEvent
+                     'procedure proc
+                     'context-type (car p)
+                     (if (pair? (cdr p))
+                         (list (cons 'symbol (cadr p)))
+                         '()))
+         (make-music 'Music))))
 
 appoggiatura =
 #(def-grace-function startAppoggiaturaMusic stopAppoggiaturaMusic
@@ -1829,14 +1836,53 @@ property (inside of an alist) is tweaked.")
                                  #:start 1
                                  #:default #t
                                  #:min 2)))
-         (if p
-             (set! (ly:music-property item 'tweaks)
-                   (acons (cond ((pair? (cddr p)) p)
-                                ((symbol? (car p))
-                                 (cons (car p) (cadr p)))
-                                (else (cadr p)))
-                          value
-                          (ly:music-property item 'tweaks))))
+         (cond ((not p))
+               ;; p now contains at least two elements.  The first
+               ;; element is #t when no grob has been explicitly
+               ;; specified, otherwise it is a grob name.
+               ((music-is-of-type? item 'context-specification)
+                ;; This is essentially dealing with the case
+                ;; \tweak color #red \tweak font-size #3 NoteHead
+                ;; namely when stacked tweaks end in a symbol list
+                ;; rather than a music expression.
+                ;;
+                ;; We have a tweak here to convert into an override,
+                ;; so we need to know the grob to apply it to.  That's
+                ;; easy if we have a directed tweak, and otherwise we
+                ;; need to find the symbol in the expression itself.
+                (let* ((elt (ly:music-property item 'element))
+                       (seq (if (music-is-of-type? elt 'sequential-music)
+                                elt
+                                (make-sequential-music (list elt))))
+                       (elts (ly:music-property seq 'elements))
+                       (symbol (if (symbol? (car p))
+                                   (car p)
+                                   (and (pair? elts)
+                                        (ly:music-property (car elts)
+                                                           'symbol)))))
+                  (if (symbol? symbol)
+                      (begin
+                        (set! (ly:music-property seq 'elements)
+                              (cons (make-music 'OverrideProperty
+                                                'symbol symbol
+                                                'grob-property-path (cdr p)
+                                                'pop-first #t
+                                                'grob-value value
+                                                'origin (*location*))
+                                    elts))
+                        (set! (ly:music-property item 'element) seq))
+                      (begin
+                        (ly:parser-error (_ "Cannot \\tweak")
+                                         (*location*))
+                        (ly:music-message item (_ "untweakable"))))))
+               (else
+                (set! (ly:music-property item 'tweaks)
+                      (acons (cond ((pair? (cddr p)) p)
+                                   ((symbol? (car p))
+                                    (cons (car p) (cadr p)))
+                                   (else (cadr p)))
+                             value
+                             (ly:music-property item 'tweaks)))))
          item)
        (propertyOverride (append item (if (symbol? prop) (list prop) prop)) value)))
 
@@ -1852,10 +1898,10 @@ unsets already in @var{music} cause a warning.  Non-property-related music is ig
      (let
          ((lst
            (fold-some-music
-            (lambda (m) (or (music-is-of-type? m 'layout-instruction-event)
-                            (music-is-of-type? m 'context-specification)
-                            (music-is-of-type? m 'apply-context)
-                            (music-is-of-type? m 'time-signature-music)))
+            (music-type-predicate '(layout-instruction-event
+                                    context-specification
+                                    apply-context
+                                    time-signature-music))
             (lambda (m overrides)
               (case (ly:music-property m 'name)
                 ((OverrideProperty)
index 2a7e9adb0abc8d66604d47999225718d16c59ae8..36e9dc367af947fd8b92be3cbd42ac750adb9b7d 100644 (file)
@@ -177,7 +177,7 @@ Piano = \make-pianostaff
   #(if have-music
        #{ << \SATB \Piano >> #}
        #{ { } #} )
-  \layout { $(if Layout #{ \Layout #} ) }
+  \layout { $(if Layout Layout) }
 }
 
 
index 2902208bff8bad2f63e412a579e9a162cd0dba2c..9c1c575c173a8fbd98431fd4e6219b2f04e52565 100644 (file)
@@ -39,32 +39,26 @@ make-one-voice-staff =
        \with {
          instrumentName = \markup \smallCaps {
            #(if show-instrName
-                (if instrName
-                     #{ #instrName #}
-                     #{ #name #} )
-                #{ "" #} )
+                (if instrName instrName name)
+                "")
          }
          shortInstrumentName = \markup \smallCaps {
            #(if show-instrName
-                (if shortInstrName
-                     #{ #shortInstrName #}
-                     (if instrName
-                         #{ #(substring instrName 0 1) #}
-                         #{ #(substring name 0 1) #} ))
-                     #{ "" #} )
+                (cond
+                 (shortInstrName shortInstrName)
+                 (instrName (substring instrName 0 1))
+                 (else (substring name 0 1)))
+                "")
          }
-         midiInstrument =
-           #(if midiName
-                #{ #midiName #}
-                #{ "clarinet" #} )
-         #(if dynUp
-              #{ \dynamicUp #}
-              (if dynDown
-                  #{ \dynamicDown #}
-                  #{ \dynamicNeutral #} ))
+         midiInstrument = #(if midiName midiName "clarinet")
+         #(cond
+           (dynUp dynamicUp)
+           (dynDown dynamicDown)
+           (else dynamicNeutral))
+
        }
        {
-         #(if Key #{ \Key #} )
+         #(if Key Key)
          \clef #clef
          \make-voice #name
        }
@@ -103,36 +97,32 @@ make-two-voice-staff =
                  #{ \markup \smallCaps #instrName #}
                  #{ \markup \right-column \smallCaps {
                   #(if v1music
-                       (if v1InstrName
-                           v1InstrName
-                           v1name)
+                       (if v1InstrName v1InstrName v1name)
                        "")
                   #(if v2music
-                       (if v2InstrName
-                           v2InstrName
-                           v2name)
-                       "") } #} )
+                       (if v2InstrName v2InstrName v2name)
+                       "")
+                 } #} )
              shortInstrumentName =
                #(if shortInstrName
                   #{ \markup \smallCaps #shortInstrName #}
                   #{ \markup \right-column \smallCaps {
                     #(if v1music
-                         (if v1ShortInstrName
-                             v1ShortInstrName
-                             (if v1InstrName
-                                 (substring v1InstrName 0 1)
-                                 (substring v1name 0 1)))
+                         (cond
+                          (v1ShortInstrName v1ShortInstrName)
+                          (v1InstrName (substring v1InstrName 0 1))
+                          (else (substring v1name 0 1)))
                          "")
                     #(if v2music
-                         (if v2ShortInstrName
-                             v2ShortInstrName
-                             (if v2InstrName
-                                 (substring v2InstrName 0 1)
-                                 (substring v2name 0 1)))
-                         "") } #} )
+                         (cond
+                          (v2ShortInstrName v2ShortInstrName)
+                          (v2InstrName (substring v2InstrName 0 1))
+                          (else (substring v2name 0 1)))
+                         "")
+                  } #} )
            }
            <<
-             #(if Key #{ \Key #} )
+             #(if Key Key)
              \clef #clef
 
              #(if v1music
@@ -142,14 +132,12 @@ make-two-voice-staff =
                    \consists "Staff_performer"
                    \dynamicUp
                    midiInstrument =
-                     #(if v1midiName
-                          #{ #v1midiName #}
-                          #{ "clarinet" #})
+                     #(if v1midiName v1midiName "clarinet")
                  }
                  <<
-                   #(if KeepAlive #{ \KeepAlive #} )
-                   #(if Time #{ \Time #} )
-                   #(if v2music #{ \voiceOne #} #{ \oneVoice #} )
+                   #(if KeepAlive KeepAlive)
+                   #(if Time Time)
+                   #(if v2music voiceOne oneVoice)
                    #v1music
                  >>
                #} )
@@ -161,14 +149,12 @@ make-two-voice-staff =
                    \consists "Staff_performer"
                    \dynamicDown
                    midiInstrument =
-                     #(if v2midiName
-                          #{ #v2midiName #}
-                          #{ "clarinet" #})
+                     #(if v2midiName v2midiName "clarinet")
                  }
                  <<
-                   #(if KeepAlive #{ \KeepAlive #} )
-                   #(if Time #{ \Time #} )
-                   #(if v1music #{ \voiceTwo #} #{ \oneVoice #} )
+                   #(if KeepAlive KeepAlive)
+                   #(if Time Time)
+                   #(if v1music voiceTwo oneVoice)
                    #v2music
                  >>
                #} )
index b82f56919cac4211a71b01205767e3972edd4704..5490005283277b99399025c2fa895cc411821d5e 100644 (file)
@@ -7,54 +7,52 @@ make-one-voice-vocal-staff =
 #(define-music-function (name clef)
    (voice-prefix? string?)
 
-   "Make a staff with one voice and lyrics beneath
-     name: the default prefix for instrument name and music
-     clef: the clef for this staff "
+  "Make a staff with one voice and lyrics beneath
+    name: the default prefix for instrument name and music
+    clef: the clef for this staff "
 
-   (if (make-id name "Music")
-     #{
-       <<
-         \make-one-voice-staff #name #clef "Up"
-         #(make-simultaneous-music
-           (reverse (map
-             (lambda (lyrics-postfix)
-               #{ \make-one-stanza "Below" #name #name #lyrics-postfix #} )
-               lyrics-postfixes)))
-       >>
-     #}
-     (make-music 'SequentialMusic 'void #t)))
+  (if (make-id name "Music")
+      (make-simultaneous-music
+       (list
+        (make-one-voice-staff name clef "Up")
+        (make-simultaneous-music
+          (reverse (map
+            (lambda (lyrics-postfix)
+              (make-one-stanza "Below" name name lyrics-postfix))
+              lyrics-postfixes)))))
+      (make-music 'SequentialMusic 'void #t)))
 
 make-two-voice-vocal-staff =
 #(define-music-function (name clef v1name v2name)
    (voice-prefix? string? voice-prefix? voice-prefix?)
 
-   "Make a vocal staff with two voices and lyrics above and below
-      name: the prefix to the staff name
-      clef: the clef to use
-    v1name: the prefix to the name of voice one
-    v2name: the prefix to the name of voice two "
+  "Make a vocal staff with two voices and lyrics above and below
+     name: the prefix to the staff name
+     clef: the clef to use
+   v1name: the prefix to the name of voice one
+   v2name: the prefix to the name of voice two "
 
-   (define v1music (make-id v1name "Music"))
-   (define v2music (make-id v2name "Music"))
+  (define v1music (make-id v1name "Music"))
+  (define v2music (make-id v2name "Music"))
 
-   #{
-     <<
-       \make-two-voice-staff #name #clef #v1name #v2name
-       #(if v1music
-           (make-simultaneous-music
-              (map
-               (lambda (lyrics-postfix)
-                 #{ \make-one-stanza "Above" #name #v1name #lyrics-postfix #} )
-               lyrics-postfixes)))
+  (make-simultaneous-music
+   (delq! #f
+    (list
+     (make-two-voice-staff name clef v1name v2name)
+     (and v1music
+          (make-simultaneous-music
+           (map
+            (lambda (lyrics-postfix)
+              (make-one-stanza "Above" name v1name lyrics-postfix))
+            lyrics-postfixes)))
 
-       #(if v2music
-            (make-simultaneous-music
-             (reverse (map
-              (lambda (lyrics-postfix)
-                 #{ \make-one-stanza "Below" #name #v2name #lyrics-postfix #} )
-               lyrics-postfixes))))
-     >>
-   #} )
+     (and v2music
+          (make-simultaneous-music
+           (reverse
+            (map
+             (lambda (lyrics-postfix)
+               (make-one-stanza "Below" name v2name lyrics-postfix))
+             lyrics-postfixes))))))))
 
 make-two-vocal-staves-with-stanzas =
 #(define-music-function
@@ -72,18 +70,16 @@ The number of stanzas is determined by the number of populated verse names.
      vxname: the prefix to the name of voice x, x = 1..4
      verses: the list of verse names containing the stanzas"
 
-    #{
-        <<
-          \make-two-voice-vocal-staff
-            #upperName #upperClef #v1name #v2name
-          #(make-simultaneous-music
-            (map
-             (lambda (verse-name)
-              #{ \make-one-stanza
-                   #upperName #v1name #v2name #verse-name #} )
-            verses))
-          \make-two-voice-vocal-staff
-            #lowerName #lowerClef #v3name #v4name
-        >>
-      #} )
+  (make-simultaneous-music
+   (list
+    (make-two-voice-vocal-staff
+     upperName upperClef v1name v2name)
+    (make-simultaneous-music
+     (map
+      (lambda (verse-name)
+        (make-one-stanza
+         upperName v1name v2name verse-name))
+        verses))
+    (make-two-voice-vocal-staff
+     lowerName lowerClef v3name v4name))))
 
index a824fcbd5a83651ff57f36c9c11c194da611f2c7..fd33dce1d162e6b3a0f0f12e59dd22398e8749ce 100644 (file)
@@ -3826,10 +3826,12 @@ def conv(str):
         return str
     return inner (str)
 
-@rule ((2, 19, 24), "music-has-type -> music-is-of-type?")
+@rule ((2, 19, 24), r"""music-has-type -> music-is-of-type?
+\applyOutput #'Context -> \applyOutput Context""")
 def conv (str):
     str = re.sub (r'(?<=\s|["\\()])' + "music-has-type" + r'(?=\s|["\\()])',
                   "music-is-of-type?", str)
+    str = re.sub (r"(\\applyOutput\s+)#'([a-zA-Z])", r"\1\2", str)
     return str
 
 # Guidelines to write rules (please keep this at the end of this file)
index f91ad54025caf8089c3040cb66ab716a89c5e874..a341cc45984481a081e50af54b0dc1ba06be9102 100644 (file)
 
     (RepeatTieColumn
      . (
-        (direction . ,ly:tie::calc-direction)
         (head-direction . ,ly:semi-tie-column::calc-head-direction)
         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
         (X-extent . #f)
index 5a08facce20b7d8c040c43722028b010cfa82b35..d7c0f22e469c0a6093288a4eaa8a58395b1eabc6 100644 (file)
@@ -529,18 +529,24 @@ only works in the PDF backend.
          (x-ext (ly:stencil-extent arg-stencil X))
          (y-ext (ly:stencil-extent arg-stencil Y)))
     (ly:stencil-add
-     (ly:make-stencil
-      `(delay-stencil-evaluation
-        ,(delay (let* ((table (ly:output-def-lookup layout 'label-page-table))
-                       (page-number (if (list? table)
-                                        (assoc-get label table)
-                                        #f)))
-                  (list 'page-link page-number
-                        `(quote ,x-ext) `(quote ,y-ext)))))
-      x-ext
-      y-ext)
-     arg-stencil)))
-
+      (ly:make-stencil
+       `(delay-stencil-evaluation
+         ,(delay (let* ((table (ly:output-def-lookup layout 'label-page-table))
+                        (table-page-number
+                          (if (list? table)
+                              (assoc-get label table)
+                              #f))
+                        (first-page-number
+                          (ly:output-def-lookup layout 'first-page-number))
+                        (current-page-number
+                          (if table-page-number
+                              (1+ (- table-page-number first-page-number))
+                              #f)))
+                 (list 'page-link current-page-number
+                       `(quote ,x-ext) `(quote ,y-ext)))))
+       x-ext
+       y-ext)
+      arg-stencil)))
 
 (define-markup-command (beam layout props width slope thickness)
   (number? number? number?)
index 8708cc1d73a950627947f0cb52477333d0b6af61..c1ee87bbf89b85d552ca5bb39e26fe2d043ae4c2 100644 (file)
@@ -126,8 +126,7 @@ expression."
 ;;; post events
 ;;;
 
-(define (post-event? m)
-  (music-is-of-type? m 'post-event))
+(define post-event? (music-type-predicate 'post-event))
 
 (define* (event-direction->lily-string event #:optional (required #t))
   (let ((direction (ly:music-property event 'direction)))
@@ -418,7 +417,7 @@ Otherwise, return #f."
          (chord-repeat (ly:music-property chord 'duration)))
     (call-with-values
         (lambda ()
-          (partition (lambda (m) (music-is-of-type? m 'rhythmic-event))
+          (partition (music-type-predicate 'rhythmic-event)
                      elements))
       (lambda (chord-elements other-elements)
         (cond ((pair? chord-elements)
@@ -985,9 +984,11 @@ Otherwise, return #f."
 
 (define-display-method ApplyOutputEvent (applyoutput)
   (let ((proc (ly:music-property applyoutput 'procedure))
-        (ctx  (ly:music-property applyoutput 'context-type)))
-    (format #f "\\applyOutput #'~a #~a"
+        (ctx  (ly:music-property applyoutput 'context-type))
+        (grob (ly:music-property applyoutput 'symbol)))
+    (format #f "\\applyOutput ~a~@[.~a~] #~a"
             ctx
+            (and (symbol? grob) grob)
             (or (procedure-name proc)
                 (with-output-to-string
                   (lambda ()
index a0d35ae92e31b175309f2a7e00089aed0ae4b121..54cea850ec9bd52b089c09e95f80110711419177 100644 (file)
@@ -17,7 +17,8 @@
 
 (define-module (scm ly-syntax-constructors)
   #:use-module (lily)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (scm display-lily))
 
 (define-public (music-function-call-error fun m)
   (let* ((sigcar (car (ly:music-function-signature fun)))
 
 ;; Used for chaining several music functions together.  `final'
 ;; contains the last argument and still needs typechecking.
-(define (music-function-chain fun args final)
-  (let* ((siglast (last (ly:music-function-signature fun)))
+(define (music-function-chain call final)
+  (let* ((fun (car call))
+         (siglast (last (ly:music-function-signature fun)))
          (pred? (if (pair? siglast) (car siglast) siglast)))
     (if (pred? final)
-        (music-function fun (cons final args))
+        (music-function fun (cons final (cdr call)))
         (begin
-          (argument-error (1+ (length args)) pred? final)
+          (argument-error (length call) pred? final)
           ;; call music function just for the error return value
           (music-function fun #f)))))
 
-(define-public (partial-music-function fun-list arg-list)
-  (let* ((good (every list? arg-list))
-         (sig (ly:music-function-signature (car fun-list))))
+(define-public (partial-music-function call-list)
+  (let* ((good (every list? call-list))
+         (sig (ly:music-function-signature (caar call-list))))
     (and good
          (ly:make-music-function
-          (cons (car sig) (list-tail (cdr sig) (length (car arg-list))))
+          (cons (car sig) (list-tail sig (length (car call-list))))
           (lambda rest
             ;; Every time we use music-function, it destructively
             ;; reverses its list of arguments.  Changing the calling
             ;; avoid reusing any music expressions without copying and
             ;; want to let them point to the location of the music
             ;; function call rather than its definition.
-            (let ((arg-list (ly:music-deep-copy arg-list (*location*))))
+            (let ((call-list (ly:music-deep-copy call-list (*location*))))
               (fold music-function-chain
-                    (music-function (car fun-list)
-                                    (reverse! rest (car arg-list)))
-                    (cdr fun-list) (cdr arg-list))))))))
+                    (music-function (caar call-list)
+                                    (reverse! rest (cdar call-list)))
+                    (cdr call-list))))))))
 
 (define-public (void-music)
   (ly:set-origin! (make-music 'Music)))
index a952a8284649d78dfa71e19522111d55e2139b51..304becef0331f593e305add09ae891e1d44ef140 100644 (file)
   "Does @code{mus} belong to the music class @code{type}?"
   (memq type (ly:music-property mus 'types)))
 
+(define-safe-public (music-type-predicate types)
+  "Returns a predicate function that can be used for checking
+music to have one of the types listed in @var{types}."
+   (if (cheap-list? types)
+       (lambda (m)
+         (any (lambda (t) (music-is-of-type? m t)) types))
+       (lambda (m) (music-is-of-type? m types))))
+
 ;; TODO move this
 (define-public ly:grob-property
   (make-procedure-with-setter ly:grob-property
@@ -739,9 +747,7 @@ duration is replaced with the specified @var{duration}."
   ;; articulations on individual events since they can't actually get
   ;; into a repeat chord given its input syntax.
 
-  (define (keep-element? m)
-    (any (lambda (t) (music-is-of-type? m t))
-         event-types))
+  (define keep-element? (music-type-predicate event-types))
 
   (for-each
    (lambda (field)
@@ -1998,12 +2004,7 @@ not recursing into matches themselves."
   "Return a flat list of all music with @var{type} (either a single
 type symbol or a list of alternatives) inside of @var{music}, not
 recursing into matches themselves."
-  (extract-music
-   music
-   (if (cheap-list? type)
-       (lambda (m)
-         (any (lambda (t) (music-is-of-type? m t)) type))
-       (lambda (m) (music-is-of-type? m type)))))
+  (extract-music music (music-type-predicate type)))
 
 (define*-public (event-chord-wrap! music)
   "Wrap isolated rhythmic events and non-postevent events in