* etf2ly: (lilypond/lilypond-program)Invoking etf2ly. Finale-Dateien importieren.
* lilypond-book: (lilypond/lilypond-program)LilyPond-book. Noten in den Text integrieren.
* midi2ly: (lilypond/lilypond-program)Invoking midi2ly. Midi-Dateien importieren.
-* mup2ly: (lilypond/lilypond-program)Invoking mup2ly. Mup-Dateien importieren.
@end direntry
@c don't remove this comment.
<html>
<!--
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: 964d024dd4f022ba7cd66adc13c0169035d4c4e5
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<a class="title" href="user/lilypond/Tutorial.es.html">Tutorial</a>
<br>(comience por aquí)
+ <li><a class="title" href="user/music-glossary/index.html">Glosario</a> multilingüe<br>
+(en <a class="title" href="user/music-glossary-big-page.html">una sola página</a> ~ 1 Mb,
+en <a class="title" href="user/music-glossary.pdf">PDF</a>)
+
+ <br>(para usuarios de habla no inglesa)
</ul>
</td>
<td class="right-column">
<ul>
-
<li>
- <a class="title" href="topdocs/NEWS.html">Noticias</a>
- <br>(cambios producidos desde el último lanzamiento importante)
+ <a class="title" href="user/lilypond-program/index.html">Instrucciones de manejo</a>
+(en <a class="title" href="user/lilypond-program-big-page.html">una sola página</a>,
+en <a class="title" href="user/lilypond-program.pdf">PDF</a>)
+ <br>(cómo instalar y ejecutar el programa)
+
+<li><a class="title" href="../examples.html">Ejemplos</a>
+ <br>(ver algunos ejemplos)
- <li>
- <a class="title" href="topdocs/INSTALL.html">Instalación</a>
- <br>(cómo compilarlo)
</ul>
</td>
</tr>
<a class="title" href="user/lilypond/index.es.html">Manual del usuario</a> [parcialmente traducido]<br>
(en <a class="title" href="user/lilypond-big-page.html">una sola página</a> [en inglés] ~ 4 Mb, <br>
y en <a class="title" href="user/lilypond.es.pdf">PDF</a>)
-
<br>(todo sobre LilyPond)
-
-<li><a class="title" href="../examples.html">Ejemplos</a>
-
- <br>(ver algunos ejemplos)
-
-<li><a class="title" href="../input/lsr/collated-files.html">Fragmentos de código</a>
- <br>
- <li><a class="title" href="user/music-glossary/index.html">Glosario</a> multilingüe<br>
-(en <a class="title" href="user/music-glossary-big-page.html">una sola página</a> ~ 1 Mb,
-en <a class="title" href="user/music-glossary.pdf">PDF</a>)
-
- <br>(para usuarios de habla no inglesa)
- </ul>
+ <li>
+ <a class="title" href="user/lilypond-internals/index.html">Referencia del programa</a> [en inglés]<br>
+ (en <a class="title" href="user/lilypond-internals-big-page.html">una sola página</a> ~ 1 Mb)
+ <br>(definiciones para hacer trucos)
+
+ </ul>
</td>
<td valign="baseline" class="right-column">
<ul>
- <li>
- <a class="title" href="user/lilypond-internals/index.html">Referencia del programa</a> [en inglés]<br>
- (en <a class="title" href="user/lilypond-internals-big-page.html">una sola página</a> ~ 1 Mb)
-
- <br>(definiciones para hacer trucos)
-
- <li>
- <a class="title" href="../input/regression/collated-files.html">Pruebas de regresión</a> (~ 5 Mb, en <a class="title" href="../input/regression/collated-files.pdf">PDF</a>, <a href="../test-results.html">comparación</a>)
-
- <br>(para los desarrolladores)
+ <li>
+ <a class="title" href="topdocs/NEWS.html">Noticias</a>
+ <br>(cambios producidos desde el último<br>lanzamiento importante)
+<li><a class="title" href="../input/lsr/collated-files.html">Fragmentos de código</a>
+ <br>(Trucos breves, consejos y ejemplos)
- <li><a class="title" href="bibliography/index.html">Bibliografía</a>
+ </ul>
+ </td><tr>
+ <tr>
+ <td valign="baseline" class="left-column">
+
+ <ul>
+ <li><a class="title" href="bibliography/index.html">Bibliografía</a>
<br>(acerca de la información de apoyo)
-<li><a class="title" href="THANKS.html">Agradecimientos</a>
-<br>(a nuestros colaboradores)
-<li><a class="title" href="DEDICATION.html">Dedicatoria</a>
+ <li>
+ <a class="title" href="../input/regression/collated-files.html">Pruebas de regresión</a> (~ 5 Mb, en <a class="title" href="../input/regression/collated-files.pdf">PDF</a>)
+ <br>(para los desarrolladores)
+
+ </ul>
+ </td><td class="right-column">
+
+ <ul>
+ <li><a class="title" href="THANKS.html">Agradecimientos</a>
+ <br>(a nuestros colaboradores)
- <br>(por Jan y Han-Wen)
+ <li><a class="title" href="DEDICATION.html">Dedicatoria</a>
+ <br>(por Jan y Han-Wen)
</ul>
</td>
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: c01ece138f68cfe9521f3b0ff2d852579af45889
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
no se ajustan a ningún estándar.
-
@node Note names in other languages
@subsection Note names in other languages
listados en la tabla siguiente. Aquí los prefijos @q{semi-} y @q{sesqui-} significan
@q{medio} y @q{uno y medio} respectivamente. Para el noruego,
sueco, catalán y español no se ha definido aún ningún nombre especial.
-
@c What about Turkish Maquam music and similar microtonal systems?
@c
@c Note that the term "three-quarter-sharp/-flat" used in lilypond's source code
@node Relative octaves
-
@subsection Relative octaves
@cindex Relativo
@noindent
la @code{d} generará una advertencia, porque se esperaba un @code{d''}
(a causa de que el intervalo de @code{b'} a @code{d''} es de una tercera solamente),
-pero aparece un @code{d'}. En la salida, la octava se corrige para que sea
-un @code{d''} y la siguiente nota se calcula de forma relativa a @code{d''}
-en lugar de a @code{d'}.
+pero aparece un @code{d'}. En la salida, la octava se corrige para que sea un @code{d''} y
+la siguiente nota se calcula de forma relativa a @code{d''} en lugar de a @code{d'}.
-También existe una comprobación de octava que no produce ninguna salida visible.
-La sintaxis
+También existe una comprobación de octava que no produce ninguna salida visible. La sintaxis
@example
\octave @var{altura}
está dentro de una quinta desde @code{a'}. Sin embargo
la segunda comprobación produce una advertencia porque el @code{e} no está dentro
de una quinta del @code{b'}. Se imprime el mensaje de advertencia y la octava se ajusta
-de modo que las notas siguientes están en la octava correcta de nuevo.
+de modo que las notas siguientes están en la octava correcta
+de nuevo.
@example
\relative c' @{
Referencia del programa: @internalsref{TransposedMusic}.
-Ejemplo: @code{input/@/test,smart@/-transpose@/.ly}.
+Ejemplo: @lsr{scheme,transpose-pitches-with-minimum-accidentals.ly}.
@refbugs
@end lilypond
@noindent
-Esto hace mucho más sencillo el formateo de la música polifónica,
+Esto hace mucho más sencillo el formateo de
+la música polifónica,
porque el formateador automático de colisiones de silencios se olvidará de ellos.
@seealso
valores recíprocos respecto de la redonda. Por ejemplo, una negra
se escribe usando un @code{4} (puesto que es 1/4 de redonda), mientras
que una blanca se escribe con un @code{2} (por ser 1/2 de redonda). Para
-notas mayores de la redonda se deben usar los comandos @code{\longa} y
-@code{\breve}
+notas mayores de la redonda se deben usar los comandos @code{\longa} y @code{\breve}
@example
c'\breve
@end lilypond
Si la duración se omite, su valor será el de la duración de la nota
-anterior. Por omisión, el valor de la primera nota es el de una
-negra.
+anterior. Por omisión, el valor de la primera nota es el de una negra.
@lilypond[quote,ragged-right,verbatim,fragment]
{ a a a2 a a4 a a1 a }
@funindex .
Para obtener duraciones de notas con puntillo, simplemente escriba un
-punto (@samp{.}) después del número. Las notas con doble puntillo se
-consiguen de manera similar.
+punto (@samp{.}) después del número. Las notas con doble puntillo se consiguen de manera similar.
@lilypond[quote,ragged-right,fragment,verbatim]
a'4 b' c''4. b'8 a'4. b'4.. c''8.
Normalmente los puntillos se desplazan hacia arriba para evitar las
líneas del pentagrama, excepto en situaciones de polifonía. Se pueden
-utilizar los siguientes comandos para forzar manualmente una dirección
-en particular
+utilizar los siguientes comandos para forzar manualmente una dirección en particular
@funindex \dotsUp
@code{\dotsUp},
\times 2/3 { c8 c c } \times 2/3 { c8 c c }
@end lilypond
-@c needs revision. FVD
-Se puede hacer que los corchetes de grupo abarquen tanto como su
-duración completa indique o que lleguen hasta justo antes de la nota
-siguiente
+Utilice la función @code{\tweak} para sobreescribir los grupos anidados que comienzan en el mismo
+instante musical. En este ejemplo, @code{\tweak} especifica un texto de fracción
+para el
+@code{TupletNumber} exterior y un texto de denominador para el @code{TupletNumber}
+del primero de los tres grupos interiores.
+
+@lilypond[quote,ragged-right,verbatim]
+\new Staff {
+ \tweak #'text #tuplet-number::calc-fraction-text
+ \times 4/3 {
+ \tweak #'text #tuplet-number::calc-denominator-text
+ \times 2/3 { c'8[ c'8 c'8] }
+ \times 2/3 { c'8[ c'8 c'8] }
+ \times 2/3 { c'8[ c'8 c'8] }
+ }
+}
+@end lilypond
+
+Aquí @code{\tweak} y @code{\override} trabajan conjuntamente para especificar la dirección
+del @code{TupletBracket} (el corchete del grupo). El primer @code{\tweak} coloca
+el @code{TupletBracket} del grupo
+exterior por encima del pentagrama. El segundo @code{\tweak} coloca el
+@code{TupletBracket} del primero de los tres grupos interiores por debajo del
+pentagrama. Tenga en cuenta que este par de funciones @code{\tweak} afecta solamente
+al grupo exterior y al primero de los tres grupos interiores porque sólo
+esos dos grupos comienzan en el mismo instante musical. Utilizamos @code{\override}
+de la manera usual para colocar los corchetes @code{TupletBrackets} del
+segundo y tercer grupos interiores por debajo del pentagrama.
+
+@lilypond[quote,ragged-right,verbatim]
+\new Staff {
+ \tweak #'text #tuplet-number::calc-fraction-text
+ \tweak #'direction #up
+ \times 4/3 {
+ \tweak #'direction #down
+ \times 2/3 { c'8[ c'8 c'8] }
+ \override TupletBracket #'direction = #down
+ \times 2/3 { c'8[ c'8 c'8] }
+ \times 2/3 { c'8[ c'8 c'8] }
+ }
+}
+@end lilypond
+
+Se puede hacer que los corchetes de grupo abarquen tanto como su duración completa indique o que lleguen hasta justo antes de la nota siguiente
@lilypond[ragged-right]
\new RhythmicStaff {
@seealso
-En este manual: @ref{Tuplets}
+En este manual: @ref{Tuplets}.
@node Bar check
@example
\lyricmode @{
\time 2/4
- Cam -- pa | ni -- tas
+ Bri -- lla | Bri -- lla
@}
@end example
Las notas largas se pueden convertir automáticamente en notas ligadas.
Se hace mediante la sustitución del @internalsref{Note_heads_engraver}
por el @internalsref{Completion_heads_engraver}. En los siguientes
-ejemplos, las notas que atraviesan la barra de compás se dividen y se
-unen mediante una ligadura.
+ejemplos, las notas que atraviesan la barra de compás se dividen y se unen mediante una ligadura.
@lilypond[quote,fragment,verbatim,relative=1,line-width=12\cm]
\new Voice \with {
Si quiere permitir el salto de línea en las barras de compás en las
que @internalsref{Completion_heads_engraver} divide las notas, debe
-eliminar también @internalsref{Forbid_line_breaks_engraver}.
+eliminar también @internalsref{Forbid_line_break_engraver}.
@refbugs
especiales) se pueden representar exactamente con notas normales y
puntillos, pero el grabador nunca insertará grupos especiales.
-
@code{Completion_heads_engraver} afecta sólo a las notas; no divide
silencios.
pieza cualquiera de música. En LilyPond la polifonía hace referencia
a tener más de una voz en el mismo pentagrama.
-
@menu
* Chords::
* Stems::
@internalsref{Stem} (plica) automáticamente. Para las redondas y los
silencios, también se crean pero se hacen invisibles.
-
@refcommands
@funindex \stemUp
uno de estos contextos, la dirección vertical de las ligaduras, plicas, etc., se establece
de la manera que corresponda.
-Todas estas voces están separadas de la voz que contiene las noas
-justo por fuera de la construcción @code{<< \\ >>}. Esto se debe
-tener en cuenta cuando haga algún cambio en una voz. También
-significa que las ligaduras de unión y de expresión no pueden salir ni
-entrar en una construcción @code{<< \\ >>}. En cambio las voces
+Todas estas voces están separadas de la voz que contiene las notas
+justo por fuera de la construcción @code{<< \\ >>}. Se debe tener
+esto en cuenta cuando haga algún cambio en una voz. También
+significa que las ligaduras de unión y de expresión no pueden salir de (ni
+entrar en) una construcción @code{<< \\ >>}. En cambio las voces
paralelas que están en construcciones @code{<< \\ >>} separadas dentro
del mismo pentagrama, son la misma voz. Presentamos a continuación el
mismo ejemplo, con cabezas distintas para cada voz. Dése cuenta de
que el cambio en el estilo de cabezas de nota en la voz principal no
afecta a las que están dentro de la construcción @code{<< \\ >>}.
-También, el cambio a la segunda voz en la primera construcción
-@code{<< \\ >>} es efectiva en la segunda @code{<< \\ >>}, y la voz se
-liga de una construcción a otra.
+Asimismo, el cambio a la segunda voz en la primera construcción
+@code{<< \\ >>} es efectiva en la segunda @code{<< \\ >>}, y la voz se liga de una construcción a otra.
@cindex cabezas de nota, estilos de
En ciertos casos de música polifónica compleja podría ser necesario
utilizar voces adicionales para evitar colisiones entre las notas.
-Las voces adicionales se añaden definiendo un identificador como se
-muestra a continuación:
+Las voces adicionales se añaden definiendo un identificador como se muestra a continuación:
@lilypond[quote,verbatim,ragged-right,relative=2]
voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
Normalmente las cabezas de nota con un número de puntillos diferente
no se mezclan en una sola, pero cuando se le da un valor verdadero a
-la propiedad @code{merge-differently-dotted} en el objeto
-@internalsref{NoteCollision}, se juntan en una sola:
+la propiedad @code{merge-differently-dotted} en el objeto @internalsref{NoteCollision}, se juntan en una sola:
@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
\new Voice << {
más grandes.
Cuando LilyPond no puede con todo, se pueden usar la propiedad
-@code{force-hshift} (forzar desplazamiento) del objeto
-@internalsref{NoteColumn} y los silencios con altura para sobreescibir
-las decisiones de tipografía.
+@code{force-hshift} (forzar desplazamiento) del objeto @internalsref{NoteColumn}
+y los silencios con altura para sobreescibir las decisiones de tipografía.
@lilypond[quote,verbatim,ragged-right]
\relative <<
@refbugs
-Cuando se emplea @code{merge-differently-headed} con una corchea (o una nota más corta) con la plica hacia arriba,
-y una blanca con la plica hacia abajo, la corchea no tiene el desplazamiento correcto.
+Cuando se emplea @code{merge-differently-headed} con una corchea (o una nota más corta)
+con la plica hacia arriba, y una blanca con la plica hacia abajo,
+la corchea no tiene el desplazamiento correcto.
No hay soporte para racimos (clusters) donde la misma nota se presenta
con diferentes alteraciones accidentales dentro del mismo acorde. En
denotada por un conjunto de alteraciones (bemoles o sostenidos) al comienzo del
pentagrama.
-El establecimiento o modificación de la armadura se hace con el comando @code{\key}
+El establecimiento o modificación de la armadura se hace con el
+comando @code{\key}
@example
@code{\key} @var{nota} @var{tipo}
@commonprop
Se imprime un símbolo de becuadro para cancelar las alteraciones anteriores. Se puede
-suprimir esto estableciendo la propiedad @code{Staff.printKeyCancellation}.
+suprimir esto estableciendo la propiedad
+@code{Staff.printKeyCancellation}.
@lilypond[quote,fragment,ragged-right,fragment,verbatim,relative=2]
\key d \major
\time 2/2 c'1
@end lilypond
-Existen muchas opciones para su presentación. Consulte @ref{Ancient time
-signatures} para ver más ejemplos.
+Existen otras muchas opciones para su presentación. Para ver más ejemplos, consulte @ref{Ancient time
+signatures}.
@code{\time} establece las propiedades @code{timeSignatureFraction},
@code{beatLength} y @code{measureLength} en el contexto @code{Timing},
cuyo nombre alternativo normalmente es @internalsref{Score}. La
propiedad @code{measureLength} determina el lugar en que se deben insertar las barras de compás
y cómo se generan las barras de corchea auromáticas. La modificación del valor de
-@code{timeSignatureFraction} también provoca que se imprima el símbolo.
+@code{timeSignatureFraction} también provoca que se imprima
+el símbolo.
Están disponibles más opciones a través de la función de Scheme
@code{set-time-signature}. En combinación con el grabador
Referencia del programa: @internalsref{TimeSignature} y
@internalsref{Timing_translator}.
-Ejemplos: @code{input/@/test,compound@/-time@/.ly}.
+Ejemplos: @lsr{contemporary,compound-time-signature.ly}.
@refbugs
@cindex acortar compases
@funindex \partial
-Los compases parciales como las anacrusas o partes al alzar se escriben
-usando la construcción
+Los compases parciales como las anacrusas o partes al alzar se escriben usando la construcción
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\partial 16*5 c16 cis d dis e | a2. c,4 | b2
\partial @var{duración}
@end example
-donde @code{duración} es el valor rítmico que se se debe añadir antes del siguiente compás.
+donde @code{duración} es el valor rítmico que se se debe añadir antes
+del siguiente compás.
Esto se traduce internamente a
@cindex Barras de compás
@funindex \bar
@cindex líneas divisorias
-@cindex barras de repetición
+@cindex repetición, barras de
Las líneas divisorias delimitan a los compases pero también se pueden usar
para indicar las repeticiones. Normalmente se insertan de manera automática.
En las partituras con muchos pentragramas, un comando @code{\bar} en uno de ellos se aplica
automáticamente a todos los demás. Las líneas resultantes se conectan entre los distintos pentagramas
-de un @code{StaffGroup}, @code{PianoStaff} o @code{ChoirStaff}.
+de un @code{StaffGroup}, @code{PianoStaff} o @code{GrandStaff}.
@lilypond[quote,ragged-right,fragment,verbatim]
<<
LilyPond insertará saltos de línea y de página solamente en las barras de compás.
A menos que la música sin compasear acabe antes del final de la línea del pentagrama,
-tendrá que insertar barras de compás invisibles
+tendrá que insertar barras
+de compás invisibles
@example
\bar ""
@end lilypond
@item El grupo comienza con un corchete recto y las líneas de compás están conectadas.
-Esto se hace con el contexto @internalsref{StaffGroup}
+Esto se hace con el contexto
+@internalsref{StaffGroup}
@lilypond[verbatim,ragged-right,quote]
\new StaffGroup
Los delimitadores del comienzo del sistema se pueden anidar muchas veces:
@lilypond[quote,ragged-right,verbatim]
-\new StaffGroup
+\new StaffGroup
\relative <<
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
que se llama el @code{staff symbol} (el símbolo del pentagrama).
El símbolo del pentagrama se puede ajustar en el número, grosor
-y separación de las líneas, usando las propiedades. Esto se demuestra en los
-archivos de ejemplo
-@code{input/@/test,staff@/-lines@/.ly} y
-@code{input/@/test,staff@/-size@/.ly}.
+y separación de las líneas, usando las propiedades. Esto se demuestra en los archivos de ejemplo
+@lsr{staff,changing-the-number-of-lines-in-a-staff.ly} y
+@lsr{staff,changing-the-staff-size.ly}.
Además, los pentagramas se pueden iniciar e interrumpir libremente. Esto se
hace con @code{\startStaff} y @code{\stopStaff}.
Referencia del programa: @internalsref{StaffSymbol}.
-Ejemplos: @code{input/@/test,staff@/-lines@/.ly},
-@code{input/@/test@/,ossia.ly},
-@code{input/@/test,staff@/-size@/.ly},
-@lsr{staff,staff-line-positions.ly}
+Ejemplos: @lsrdir{staff}
@node Writing music in parallel
>>
@end lilypond
-Esto funciona de manera aceptable para música de piano
+Esto funciona bastante bien para música de piano
@lilypond[quote,verbatim]
music = {
@noindent
Se usan ligaduras de expresión bien cuando la nota atraviesa la barra
de compás o bien cuando no se pueden usar puntillos para denotar el
-ritmo. Cuando se usan ligaduras, las notas de mayor duración se deben
-alinear con las subdivisiones del compás, como
+ritmo. Cuando se usan ligaduras, las notas de mayor duración se deben alinear con las subdivisiones del compás, como
@lilypond[fragment,quote,ragged-right]
\relative {
Si necesita unir muchas notas a través de las líneas divisorias, puede
reslutar más fácil utilizar la división automática de notas (vea
@ref{Automatic note splitting}). Este mecanismo divide las notas
-largas de forma automática y las liga a través de las barras de
-compás.
+largas de forma automática y las liga a través de las barras de compás.
@funindex \repeatTie
Cuando la segunda vez de una repetición comienza con una nota ligada,
-es necesario repetir la ligadura. Esto se puede conseguir mediante
-@code{\repeatTie},
+es necesario repetir la ligadura. Esto se puede conseguir mediante @code{\repeatTie},
@lilypond[fragment,quote,ragged-right,relative=2]
r <c e g>\repeatTie
@commonprop
-A veces se usan ligaduras para escribir arpegios. En este caso, dos
-notas ligadas no necesitan ser consecutivas. Esto se puede conseguir
-estableciendo la propiedad @code{tieWaitForNote} (ligadura - esperar
-nota) al valor verdadero. La misma funcionalidad puede resultar útil,
+A veces se usan ligaduras para escribir arpegios. En este caso, dos notas ligadas no
+necesitan ser consecutivas. Esto se puede conseguir estableciendo la propiedad @code{tieWaitForNote}
+(ligadura - esperar nota) al valor verdadero. La misma funcionalidad puede resultar útil,
por ejemplo, para ligar un trémolo a un acorde. Por ejemplo,
@lilypond[fragment,verbatim,relative=1,ragged-right,quote]
Un cambio de pentagrama cuando hay una ligadura activa no producirá una ligadura inclinada.
Los cambios de clave o de octava durante una ligadura de unión no
-están bien definidos realmente. En estos casos puede ser preferible
-una ligadura de expresión.
+están bien definidos realmente. En estos casos puede ser preferible una ligadura de expresión.
@node Slurs
Sin embargo, hay una forma abreviada muy conveniente para forzar las
direcciones de las ligaduras de expresión. Escibiendo @code{_} o
-@code{^} antes de los paréntesis de apertura, también se establece la
-dirección. Por ejemplo,
+@code{^} antes de los paréntesis de apertura, también se establece la dirección. Por ejemplo,
@lilypond[relative=2,ragged-right,quote,verbatim,fragment]
c4_( c) c^( c)
@end lilypond
Se puede imprimir una sola ligadura cada vez. Si necesita imprimir
-una ligadura larga por encima de varias ligauras más cortas, consulte
-@ref{Phrasing slurs}.
+una ligadura larga por encima de varias ligauras más cortas, consulte @ref{Phrasing slurs}.
@commonprop
Algunos compositores escriben dos ligaduras cuando quieren acordes
-legato. Esto se consigue en LilyPond mediante el establecimiento de
-@code{doubleSlurs},
+legato. Esto se consigue en LilyPond mediante el establecimiento de @code{doubleSlurs},
@lilypond[verbatim,ragged-right,relative,fragment,quote]
\set doubleSlurs = ##t
Tipográficamente, la ligadura de fraseo se comporta casi exactamente
igual que una ligadura de expresión normal. Sin embargo, se tratan
-como objetos diferentes. Una @code{\slurUp} no tendrá ningún efecto
-sobre una ligadura de fraseo; utilice en su lugar
+como objetos diferentes. Una @code{\slurUp} no tendrá ningún efecto sobre una ligadura de fraseo; utilice en su lugar
@code{\phrasingSlurUp}, @code{\phrasingSlurDown}, y
@code{\phrasingSlurNeutral}.
Las ligaduras L.v. (laissez vibrer, dejar vibrar) indican que las
notas no se deben apagar al final. Se usan en la notación para piano,
-arpa y otros instrumentos de cuerda y percusión. Se pueden introducir
-escribiendo @code{\laissezVibrer},
+arpa y otros instrumentos de cuerda y percusión. Se pueden introducir escribiendo @code{\laissezVibrer},
@lilypond[fragment,ragged-right,verbatim,relative=1]
<c f g>\laissezVibrer
Cuando estas decisiones automáticas no son lo bastante buenas, se
pueden escribir los barrados de forma explícita. También es posible
definir patrones de barrado que difieran de los ajustes por defecto.
-Consulte @ref{Setting automatic beam behavior} para ver los detalles.
+Para ver más detalles, consulte @ref{Setting automatic beam behavior}.
Las notas individuales se pueden marcar con @code{\noBeam} para evitar
que lleven una barra
En ciertos casos puede ser preciso sobreescribir el algoritmo de
barrado automático. Por ejemplo, el barrador automático no escribe
barras por encima de los silencios o las líneas divisorias. Tales
-barras se especifican manualmente marcando los puntos de comienzo y
-final con @code{[} y @code{]}
+barras se especifican manualmente marcando los puntos de comienzo y final con @code{[} y @code{]}
@lilypond[quote,ragged-right,fragment,relative=1,verbatim]
{
automáticamente. Si es necesario se pueden usar las propiedades
@code{stemLeftBeamCount} y @code{stemRightBeamCount} para
sobreescribir los ajustes por defecto. Si se establece el valor de
-una propiedad cualquiera, este valor se utilizará una sola vez, y
-después se boorará.
+una propiedad cualquiera, este valor se utilizará una sola vez, y después se boorará.
@lilypond[quote,ragged-right,fragment,relative=1,verbatim]
{
Se puede establecer la propiedad @code{subdivideBeams} para subdividir
todas las barras de semicorchea y de valores inferiores en las
-posiciones de las fracciones o partes, tal y como está definido por
-parte de la propiedad @code{beatLength}.
+posiciones de las fracciones o partes, tal y como está definido por parte de la propiedad @code{beatLength}.
@lilypond[fragment,quote,relative=2,verbatim]
c16[ c c c c c c c]
@ref{Time administration}.
Los saltos de línea normalmente están prohibidos cuando las barras
-cruzan las líneas divisorias. Este comportamiento se puede modificar
-estableciendo @code{breakable}.
+cruzan las líneas divisorias. Este comportamiento se puede modificar estableciendo @code{breakable}.
@funindex breakable
@cindex ángulo, barras en
@cindex auto-knee-gap
-
-@refbugs
-
Se insertan automáticamente barras de corchea en ángulo cuando se
detecta un desnivel muy grande entre las cabezas de las notas.
-@c FIXME Este comportamiento se puede ajustar a través del objeto.
+Este comportamiento se puede ajustar a través del objeto @code{auto-knee-gap}.
+
+
+@refbugs
Las barras que cruzan pentagramas y reciben un ángulo automático no se
-pueden usar conjuntamente con los pentagramas ocultos. Consulte
-@ref{Hiding staves}.
+pueden usar conjuntamente con los pentagramas ocultos. Consulte @ref{Hiding staves}.
+@c Is this still true with skyline spacing stuff? -J.Mandereau
Las barras de corchea no evitan las colisiones con los símbolos que
rodean las notas, como los textos y las alteraciones.
atravesado por una barrita. La appoggiatura es una nota de adorno que
toma una fracción fija de la nota principal, y se denota como una nota
pequeña, ligada, sin tachar. Ambas se introducen con los comandos
-@code{\acciaccatura} y @code{\appoggiatura}, como se muestra en el
-ejemplo siguiente
+@code{\acciaccatura} y @code{\appoggiatura}, como se muestra en el ejemplo siguiente
@lilypond[quote,ragged-right,relative=2,verbatim,fragment]
b4 \acciaccatura d8 c4 \appoggiatura e8 d4
Ambas son formas especiales del comando @code{\grace}. Al anteponer
esta palabra a una expresión musical se crea una nueva expresión, que
-se imprime en un tipo más pequeño y no ocupa ningún tiempo lógico en
-el compás.
+se imprime en un tipo más pequeño y no ocupa ningún tiempo lógico en el compás.
@lilypond[quote,ragged-right,relative=2,verbatim,fragment]
c4 \grace c16 c4
Al contrario que @code{\acciaccatura} y @code{\appoggiatura}, el comando
@code{\grace} no inicia una ligadura.
+@cindex timing, internal
+
Internamente, la cuenta del tiempo para las notas de adorno se hace
utilizando un segundo contador, el contador @q{de adorno}. Cada
-instante en el tiempo comprende dos números racionales: uno denota el
-tiempo lógico, y el otro denota el tiempo de adorno. El ejemplo
-anterior se muestra a continuación con vectores de tiempo
+instante en el tiempo comprende dos números racionales: uno denota el tiempo
+lógico, y el otro denota el tiempo de adorno. El ejemplo anterior se muestra a continuación con vectores de tiempo
@lilypond[quote,ragged-right]
<<
estableciendo @code{afterGraceFraction}, por ejemplo
@example
-afterGraceFraction = #(cons 7 8)
+#(define afterGraceFraction (cons 7 8))
@end example
@noindent
Ajustando la duración de la nota de desplazamiento (aquí es una
blanca), se ajusta el espacio entre la nota principal y la de adorno.
-Una sección @code{\grace} introduce ajustes de tipografía especiales,
+Una expresión musical @code{\grace} introduce ajustes de tipografía especiales,
por ejemplo para producir un tipo más pequeño y para fijar las
direcciones. Por ello, cuando se introducen trucos para la
-presentación, deben ir dentro de la sección de adorno, por ejemplo:
+presentación, deben ir dentro de la expresión de adorno, por ejemplo:
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\new Voice {
@end lilypond
@noindent
-Las sobreescrituras (overrides) también se deben deshacer dentro de la sección de adorno.
+Las sobreescrituras (overrides) también se deben deshacer dentro de la expresión de adorno.
-La disposición de las secciones de adorno se pueden cambiar a lo largo
+La disposición de las expresiones de adorno se pueden cambiar a lo largo
de la música usando la función @code{add-grace-property}. El
siguiente ejemplo suprime la definición de la dirección de la
-@code{Stem} (plica) para este adorno, y así las plicas no siempre
-apuntan hacia ariba.
+@code{Stem} (plica) para este adorno, y así las plicas no siempre apuntan hacia ariba.
@example
\new Staff @{
@refbugs
-Una partitura que comienza con una sección @code{\grace} requiere una declaración explícita
+Una partitura que comienza con una expresión @code{\grace} requiere una declaración explícita
@code{\new Voice} pues en caso contrario la nota principal y la de adorno
acabarán en pentagramas distintos.
@noindent
Esto se puede remediar insertando desplazamientos de adorno de las
-duraciones correspondientes en los otros pentagramas. Para el ejemplo
-anterior
+duraciones correspondientes en los otros pentagramas. Para el ejemplo anterior
@example
\new Staff @{ c4 \bar "|:" \grace s16 d4 @}
Las secciones de adorno sólo se deben usar dentro de expresiones de
música secuenciales. No están soportados el anidado ni la
-yuxtaposición de secciones de adorno, y podría producir caídas u otros
-errores.
+yuxtaposición de secciones de adorno, y podría producir caídas u otros errores.
@node Expressive marks
@section Expressive marks
-Las marcas de expresión ayudan al músico a sacar de la música algo más que simples notas y ritmos.
+Las marcas de expresión ayudan al músico a sacar de la música algo más que
+simples notas y ritmos.
@menu
* Articulations::
La indicación se coloca automáticamente, pero la dirección (arriba o abajo)
se puede también forzar. Como otros fragmentos de código de LilyPond,
-@code{_} los situará por debajo del pentagrama, y @code{^} los colocará
-por encima.
+@code{_} los situará por debajo del pentagrama, y @code{^} los colocará por encima.
@lilypond[quote,ragged-right,fragment,verbatim]
c''4^^ c''4_^
@cindex prallmordent
@cindex prall, up
@cindex prall, down
-@cindex mordente
@cindex thumb marking
@cindex segno
@cindex coda
@commonprop
El orden vertical de las articulaciones se controla con la propiedad
-@code{script-priority}. Cuanto más bajo es esta número, más cerca de la nota se colocará.
+@code{script-priority}. Cuanto más bajo es esta número,
+más cerca de la nota se colocará.
En este ejemplo el @internalsref{TextScript} (el símbolo de sostenido) tiene primero la
prioridad más baja, así que se coloca en la parte más baja en el primer ejemplo.
En el segundo, el semitrino (el @internalsref{Script}) tiene la prioridad más baja, por tanto
@commonprop
-Puede ejercer un mayor control sobre la digitación de los acordes estableciendo @code{fingeringOrientations}
+Puede ejercer un mayor control sobre la digitación de los acordes
+estableciendo @code{fingeringOrientations}
@lilypond[quote,verbatim,ragged-right,fragment,relative=1]
\set fingeringOrientations = #'(left down)
@cindex Trinos con altura
Los trinos que se tienen que ejecutar sobre notas especificadas
-explícitamente se pueden tipografiar con el comando
-@code{pitchedTrill},
+explícitamente se pueden tipografiar con el comando @code{pitchedTrill},
@lilypond[ragged-right,verbatim,fragment,relative=1,quote]
\pitchedTrill c4\startTrillSpan fis
f\stopTrillSpan
@end lilypond
+@noindent
El primer argumento es la nota principal. La altura de la segunda se
imprime como una cabeza de nota sin plica entre paréntesis.
>>
@end lilypond
+@c TODO: cross-voice arpeggio example?
+@c such an example is already in LSR -J.Mandereau
@refcommands
No es posible mezclar arpegios conectados y no conectados en un
@internalsref{PianoStaff} en el mismo instante de tiempo.
+
@node Falls and doits
@subsection Falls and doits
@subsection Repeat types
@cindex repeticiones
-@funindex \repeat
Están soportados los siguientes tipos de repetición
@item porcentaje
Hacen repeticiones de compases o parte de ellos. Tienen un aspecto
semejante a un signo de porcentaje. Por omisión no se reproducen en
-la salida MIDI. Las repeticiones de porcentaje se deben declarar
-dentro de un contexto @code{Voice}.
+la salida MIDI. Las repeticiones de porcentaje se deben declarar dentro de un contexto @code{Voice}.
@end table
@cindex volta
@cindex prima volta
@cindex seconda volta
+@funindex \repeat
LilyPond tiene una construcción sintáctica para especificar distintos
tipos de repetición. La sintaxis es
\alternative { {d2 d} {f f,} }
@end lilypond
-En el ejemplo siguiente, el primer final no es un compás completo
-(sólo tenía 3 partes). El comienzo del segundo final
-contiene la cuarta parte del primer final. Esta parte @q{adicional} en
-el segundo final se debe al final de la primera vez,
-y no tiene nada que ver con el @code{\partial} que aparece
-al principio del ejemplo.
+Se pueden crear repeticiones con anacrusa.
@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
\new Staff {
- \partial 4
- \repeat volta 4 { e | c2 d2 | e2 f2 | }
- \alternative { { g4 g g } { a | a a a a | b2. } }
+ \partial 4 e |
+ \repeat volta 4 { c2 d2 | e2 f2 | }
+ \alternative { { g4 g g e } { a a a a | b2. } }
}
@end lilypond
}
@end lilypond
+Si quiere comenzar una repetición al principio de una línea y tiene una
+doble barra al final de la línea anterior, utilice
+@example
+@dots{} \bar "||:" \break
+\repeat volta 2 @{ @dots{}
+@end example
+consulte @ref{Bar lines} para ver más información.
@seealso
Ejemplos:
Normalmente los corchetes para la repetición sólo se imprimen sobre el
-pentagrama superior. Esto se puede ajustar estableciendo la propiedad
-@code{voltaOnThisStaff}; consulte
+pentagrama superior. Esto se puede ajustar moviendo @code{Volta_engraver} al contexto
+Staff donde quiera que aparezcan los corchetes;
+consulte @ref{Modifying context plug-ins} y
@lsr{repeats,volta@/-multi@/-staff@/.ly}.
es ambigua porque no está claro a qué @code{\repeat} pertenece la
@code{\alternative}. Esta ambigüedad se resuelve haciendo que la
@code{\alternative} pertenezca siempre a la @code{\repeat} más
-interna. Para más claridad, se recomienda usar llaves en tales
-situaciones.
+interna. Para más claridad, se recomienda usar llaves en tales situaciones.
-La información del contador de tiempo no se recuerda al comienzo de
-una alternativa, por ello después de una repetición la información de
-la cuenta de tiempo se debe reajustar manualmente; por ejemplo,
-estableciendo el valor de @code{Score.measurePosition} o introduciendo
-@code{\partial}. De forma similar, las ligaduras de expresión o de
-unión tampoco se repiten.
+La información del contador de tiempo no se recuerda al comienzo de una alternativa,
+por ello después de una repetición la información de la cuenta de tiempo se debe reajustar
+manualmente; por ejemplo, estableciendo el valor de @code{Score.measurePosition} o
+introduciendo @code{\partial}. De forma similar, las ligaduras de expresión o de unión tampoco se repiten.
Los corchetes de primera y segunda vez no se alinean verticalmente.
\bar "|."
@end lilypond
-Cuando se elabora un archivo de partitura que utiliza
-@code{\unfoldRepeats} para el MIDI, es necesario hacer dos bloques
-@code{\score}: uno para el MIDI (con las repeticiones desplegadas) y
-otro para la notación (con primera y segunda vez, trémolo y
-repeticiones de porcentaje). Por ejemplo,
+Cuando se elabora un archivo de partitura que utiliza @code{\unfoldRepeats} para el MIDI,
+es necesario hacer dos bloques @code{\score}: uno para el MIDI (con las repeticiones desplegadas)
+y otro para la notación (con primera y segunda vez, trémolo y repeticiones de porcentaje).
+Por ejemplo,
@example
\score @{
@funindex repeatCommands
Se puede usar la propiedad @code{repeatCommands} para controlar la
-disposición de las repeticiones. Su valor es una lista de Scheme de
-comandos de repetición.
+disposición de las repeticiones. Su valor es una lista de Scheme de comandos de repetición.
@table @asis
@item @code{start-repeat}
Imprimir un corchete de volta que diga @var{texto}: El texto se puede
especificar como una cadena de texto o como un texto de marcado,
consulte @ref{Text markup}. No olvide cambiar la fuente tipográfica,
-porque el tipo por defecto para los números no contiene caracteres
-alfabéticos;
+porque el tipo por defecto para los números no contiene caracteres alfabéticos;
@item @code{(volta #f)}
Detener un corchete de volta mantenido.
@cindex barras de trémolo
-Para colocar marcas de trémolo entre las notas, use @code{\repeat} con el estilo tremolo
+Para colocar marcas de trémolo entre las notas, use @code{\repeat} con el
+estilo tremolo
@lilypond[quote,verbatim,ragged-right]
\new Voice \relative c' {
\repeat "tremolo" 8 { c16 d16 }
@q{@code{:}[@var{número}]} después de la nota. El número indica la
duración de la subdivisión, y debe ser al menos 8. Un valor de
@var{longitud} de 8 produce una línea tachando la plica de la nota. Si se
-omite la longitud, se utiliza el último valor (almacenado en @code{tremoloFlags})
+omite la longitud,
+se utiliza el último valor (almacenado en @code{tremoloFlags})
@lilypond[quote,ragged-right,verbatim,fragment]
c'2:8 c':32 | c': c': |
También se pueden imprimir porcentajes aislados. Esto se hace
-mediante la colocación de un silencio multicompás con una función de
-impresión distinta,
+mediante la colocación de un silencio multicompás con una función de impresión distinta,
@lilypond[fragment,verbatim,quote]
\override MultiMeasureRest #'stencil
@internalsref{DoublePercentRepeatCounter},
@internalsref{PercentRepeatCounter},
@internalsref{PercentRepeatedMusic}.
+
+
+
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: 884968f3b77f345f327857f1df17e114adad877f
+ Translation of GIT committish: 32fe8d89d5c4fe9c73c1daf200cd23c7e8f2d3fc
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@end lilypond
-@item @code{c\mf c\sfz}
+@item @code{c2\mf c\sfz}
@tab dinámica
@tab
@lilypond[fragment,relative=2]
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: 32fe8d89d5c4fe9c73c1daf200cd23c7e8f2d3fc
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@node About this manual
@section About this manual
-El manual se divide en los siguientes capítulos:
+El manual se divide en cuatro libros.
+
+@subsubheading Learning manual
+
+Este libro explica cómo empezar el aprendizaje de LilyPond, así como algunos
+conceptos clave en términos sencillos.
+
@itemize @bullet
@item
muestra la manera de cambiar el grabado por omisión que produce
LilyPond.
+@end itemize
+
+@subsubheading Notation reference
+
+Este libro explica todas las instrucciones de LilyPond que producen notación impresa. Da
+por supuesto que el lector está familiarizado con los conceptos del manual
+de aprendizaje.
+
+@itemize @bullet
+
@item
@emph{@ref{Basic notation}}
trata ciertos temas agrupados según las construcciones de notación. Esta sección proporciona
@emph{@ref{Interfaces for programmers}}
explica cómo crear funciones musicales.
+@end itemize
+
+
+@subsubheading Program usage
+
+Este libro explica la manera de ejecutar el programa y cómo integrar
+la notación de LilyPond con otros programas.
+
+@itemize @bullet
+
@item
-@emph{@ref{Running LilyPond}}
+@emph{@rprogram{Running LilyPond}}
muestra la manera de ejecutar LilyPond y sus programas asistentes.
Además, esta sección explica cómo actualizar los archivos de entrada
de versiones de LilyPond anteriores.
@item
-@emph{@ref{LilyPond-book}} da los detalles que se encuentran detrás de la creación de
+@emph{@rprogram{LilyPond-book}}
+da los detalles que se encuentran detrás de la creación de
documentos con ejemplos de música insertados, como este manual.
@item
-@emph{@ref{Converting from other formats}}
+@emph{@rprogram{Converting from other formats}}
explica cómo ejecutar los programas de conversión. Estos programas se proporcionan
con el paquete LilyPond, y convierten una amplia variedad de formatos de
música al formato @code{.ly}.
+@end itemize
+
+
+@subsubheading Appendices
+
+Este libro contiene unos útiles cuadros de referencia.
+
+@itemize @bullet
@item
@ifhtml
La
@end itemize
-Cuando ya sea un usuario con experiencia podrá usar el manual como referencia:
-hay un índice muy completo@footnote{Si está buscando algo y
-no lo encuentra en el manual, eso se considera un bug (fallo). En este
-caso le rogamos que envíe un informe de fallo.}, pero el documento también
-está disponible en
-@iftex
-una sola página HTML enorme,
-@end iftex
-@ifhtml
-@uref{source/Documentation/user/lilypond.html, una sola página enorme},
-@end ifhtml
-en la que es fácil buscar cualquier cosa utilizando la función de búsqueda de su
-navegador de web.
-@cindex buscar en el manual
-@cindex usar el manual
+@subsubheading Other information
-@c FIXME:
-@c add/integrate glossary, put in list above
-Si no está familiarizado con la notación o la terminología musicales
-(sobre todo si no es un anglófono nativo), le recomendamos que
-consulte también el glosario.
-@iftex
-El glosario explica los términos musicales, e incluye traducciones
-a varios idiomas. Es un docuento aparte, disponible en HTML
-y en PDF.
-@end iftex
-@ifnottex
-El @ref{Top,Glosario de música,,music-glossary} explica los términos musicales e
-incluye traducciones a varios idiomas. También se encuentra disponible en
-PDF.
-@end ifnottex
+Existen otras fuentes de información que pueden resultar muy útiles.
+
+@itemize @bullet
@cindex frase idiomática
@cindex jerga
@cindex terminología
@cindex idiomas extranjeros
@cindex idioma
+@item
+@ifnottex
+El @ref{Top,Glosario de música,,music-glossary} explica los términos musicales e
+incluye traducciones a varios idiomas. También se encuentra disponible en
+PDF.
+@end ifnottex
+@iftex
+El glosario explica los términos musicales, e incluye traducciones
+a varios idiomas. Es un docuento aparte, disponible en HTML
+y en PDF.
+@end iftex
+Si no está familiarizado con la notación o la terminología musicales
+(sobre todo si no es un anglófono nativo), le recomendamos que
+consulte el glosario.
+@cindex snippets
+@cindex LSR
+@item
+Los
+@ifhtml
+@uref{source/input/lsr/collated-files.html,fragmentos de código (snippets)}
+@end ifhtml
+@ifnothtml
+fragmentos de código (snippets)
+@end ifnothtml
+son una enorme colección de pequeños ejemplos que ejemplifican toda clase de consejos, trucos
+y funcionalidades especiales de LilyPond. La mayor parte de estos fragmentos de código también se pueden
+encontrar en el @uref{http://lsr.dsi.unimi.it/,Archivo de fragmentos de código (snippets)
+de LilyPond}. Este sitio web también dispone de un manual de LilyPond en el que se peuden realizar búsquedas.
-Este manual no estaría completo sin un cierto número de otros documentos. No
-se encuentran disponibles en una forma lista para la impresión, pero deberían venir incluidos con el
-paquete de documentación para su plataforma informática
-@itemize @bullet
@item
+La
@iftex
Referencia del programa
@end iftex
@ifnottex
-@ref{Top,Referencia del programa,,lilypond-internals}.
+@ref{Top,referencia del programa,,lilypond-internals}
@end ifnottex
-
-La referencia del programa es un conjunto de páginas HTML con una tupida red de enlaces cruzados,
-que documentan al detalle el meollo de todas y cada una de las
-clases, objetos y funciones de LilyPond. Se produce directamente a partir de las
-definiciones de formateo que se utilizan.
+es un conjunto de páginas HTML con una tupida red de enlaces cruzados, que documentan al detalle el
+meollo de todas y cada una de las clases, objetos y funciones de LilyPond.
+Se produce directamente a partir de las definiciones de formateo que se utilizan.
Casi toda la funcionalidad de formateo que se emplea internamente, se encuentra
disponible para el usuario de forma directa. Por ejemplo, todas las variables que controlan
Hay un enorme número de opciones de formateo, y todas ellas
se describen en este documento. Cada sección del manual de notación
tiene una subsección @b{Véase también}, que hace referencia a la documentación
-generada. En el documento HTML, estas subseciones llevan enlaces que se pueden plusar.
-
+generada. En el documento HTML, estas subsecciones llevan enlaces que se pueden plusar.
-@cindex fragmentos de código
-@item
-@ifnothtml
-Diversos ejemplos de entrada.
-@end ifnothtml
-@ifhtml
-@c Works, but link name is not so nice; so write-out macro
-@c @inputfileref{input/test,Various input examples}.
-@uref{source/input/test/collated-files.html,Diversos ejemplos de entrada}.
-@end ifhtml
+@end itemize
-This collection of files shows various tips and tricks, and is
-available as a big HTML document, with pictures and explanatory texts
-included.
-@item
-@ifnothtml
-Las pruebas de regresión.
-@end ifnothtml
+Cuando ya sea un usuario con experiencia podrá usar el manual como referencia:
+hay un índice muy completo@footnote{Si está buscando algo
+y no lo encuentra en el manual, eso se considera un bug (fallo).
+En este caso le rogamos que envíe un informe de fallo.}, pero el documento también está
+disponible en
+@iftex
+una sola página HTML,
+@end iftex
@ifhtml
-@c Works, but link name is not so nice; so write-out macro
-@c @inputfileref{input/regression,The regression tests}.
-@uref{source/input/regression/collated-files.html,The regression tests}.
+@uref{source/Documentation/user/lilypond-big-page.html,una sola página enorme},
@end ifhtml
-
-Esta colección de archivos sirve para probar todas las funcionalidades de notación y grabado
-de LilyPond en un único archivo. La colección está ahí en primer lugar para ayudarnos
-a depurar los problemas, pero puede ser muy instructiva para ver cómo ponemos al programa a hacer ejercicio.
-El formato es similar al del documento de consejos y trucos.
-@end itemize
-
+en la que es fácil buscar cualquier cosa utilizando la función de búsqueda de su
+navegador de web.
+
En todos los documentos HTML que tienen fragmentos de música
incrustados, la entrada de LilyPond que se utilizó para producir dicha
variar de un sistema a otro. En ocasiones este manual hace referencia a
archivos de inicialización y de ejemplo. A lo largo del manual, nos referimos a
archivos de entrada por su ruta relativa respecto de directorio de nivel más alto de los archivos de código fuente. Por
-ejemplo, @file{input/@/test/@/bla@/.ly} puede referirse al archivo
-@file{lilypond@/2.x.y/@/input/@/test/@/bla@/.ly}. En los paquetes binarios para
-la plataforma Unix, la documentación y los ejemplos se pueden encontrar normalmente
-en algún lugar dentro de @file{/usr/@/share/@/doc/@/lilypond/}.
-Los archivos de incialización, como por ejemplo @file{scm/@/lily@/.scm}, o
-@file{ly/@/engraver@/-init@/.ly}, se encuentran normalmente en el directorio
-@file{/usr/@/share/@/lilypond/}.
+ejemplo, @file{input/@/lsr/@/dirname/@/bla@/.ly} puede referirse al archivo
+@file{lilypond@/2.x.y/@/input/@/lsr/@/dirname/@/bla@/.ly}. En los paquetes binarios para
+la plataforma Unix, normalmente la documentación y los ejemplos se encuentran
+en algún lugar dentro de
+@file{/usr/@/share/@/doc/@/lilypond/}. Los archivos de incialización, como por
+ejemplo @file{scm/@/lily@/.scm}, o @file{ly/@/engraver@/-init@/.ly},
+se encuentran normalmente en el directorio @file{/usr/@/share/@/lilypond/}.
@cindex ajustar la salida
@cindex variables
Por último, este y el resto de los manuales están disponibles en línea tanto como archivos
PDF como HTML en el sitio web, que encontrará en
@uref{http://@/www@/.lilypond@/.org/}.
+
+
\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: a37d5fd612a04e602454d7773559bc8813d6a0cc
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@end ignore
@setfilename lilypond.info
-@settitle GNU LilyPond
-@documentencoding UTF-8
+@settitle Manual del usuario de GNU LilyPond
+@documentencoding utf-8
@documentlanguage es
@iftex
* etf2ly: (lilypond/lilypond-program)Invocar etf2ly. Importar archivos de Finale.
* lilypond-book: (lilypond/lilypond-program)LilyPond-book. Integrar texto y música.
* midi2ly: (lilypond/lilypond-program)Invocar midi2ly. Importar archivos MIDI.
-* mup2ly: (lilypond/lilypond-program)Invocar mup2ly. Importar archivos de Mup.
@end direntry
-
@c don't remove this comment.
@ignore
@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival
@ifhtml
Este documento también está disponible como
-@uref{source/Documentation/user/lilypond.es.pdf,PDF}.
+@uref{source/Documentation/user/lilypond.es.pdf,PDF} y como
+@uref{source/Documentation/user/lilypond-big-page.html,una sola página enorme}.
@end ifhtml
@c This produces the unified index
@syncodeindex fn cp
-@syncodeindex ky cp
-@syncodeindex pg cp
-@syncodeindex tp cp
@syncodeindex vr cp
+
@finalout
@titlepage
@title LilyPond
@subtitle El tipografiador de música
+@titlefont{Manual del usuario}
@author El equipo de desarrollo de LilyPond
-
-
Copyright @copyright{} 1999--2007 por los autores
@emph{The translation of the following copyright notice is provided
@ifnottex
Este archivo es la documentación de GNU LilyPond.
-Copyright @copyright{} 1999--2007 por los autores
+Copyright 1999--2007 por los autores
@emph{The translation of the following copyright notice is provided
for courtesy to non-English speakers, but only the notice in English
@ifnottex
@node Top
-@top GNU LilyPond --- The music typesetter
+@top GNU LilyPond --- El tipografiador de música
@c HJJ: Info needs `@top', which is a synonym for `@unnumbered' in TeX.
Éste es el manual del usuario para GNU LilyPond de la serie 2.11.x.
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: 7a71a05373f51d9ffe2a1adc6d7df432d395cd2c
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@code{musicaSoprano} a la sección de la soprano y @code{musicaCello} a la sección del violoncello.
Al mismo tiempo cambiaremos el nombre de @code{texto}
a @code{letraSoprano}. Recuerde cambiar el nombre a las dos apariciones de todos estos
-nombres -- tanto la definición inicial (la parte @code{melodia = relative c' @{ }) --
+nombres -- tanto la definición inicial (la
+parte @code{melodia = relative c' @{ }) --
como el uso de ese nombre (en la sección @code{\score}).
También aprovecharemos para cambiar el pentagrama de la parte del cello (los violoncellos
-se escriben normalmente en clave de Fa). Asimismo, cambiaremos algunas notas del cello.
+se escriben normalmente en clave de Fa). Asimismo, cambiaremos algunas
+notas del cello.
@example
\version "2.11.15"
@end lilypond
+
@node How LilyPond files work
@section How LilyPond files work
@code{\score}?
No nos hemos saltado nada en absoluto. El gran misterio es, sencillamente,
-que no hay @emph{ningún} misterio. La siguiente línea lo explica todo:
+que no hay @emph{ningún} misterio. La siguiente línea lo explica
+todo:
@quotation
@emph{Una @code{\score} debe comenzar con una única expresión musical.}
Una ópera de Wagner completa puede ser fácilmente el doble de larga que este manual,
por tanto vamos a hacer sólo un cantante y un piano.
No necesitamos un @code{GrandStaff} para este conjunto, así que
-lo retiramos. Sin ambargo, sí que @emph{necesitamos} un cantante y un piano.
+lo retiramos. Sin ambargo, sí que @emph{necesitamos}
+un cantante y un piano.
@example
\score @{
Pero si lo hiciéramos, la sección @code{\score} se haría bastante
larga y sería más difícil comprender lo que ocurre. En lugar de esto
-utilizaremos identificadores o variables.
+utilizaremos identificadores
+o variables.
@example
melodia = @{ @}
la capa exterior y luego trabaje sobre cada una de las capas
interiores. Esto también sirve para ser estricto con los márgenes
-- ¡asegúrese de que en su editor de texto cada elemento de la misma capa
-comienza en la misma posición horizontal! --.
+comienza en la misma
+posición horizontal! --.
@section An orchestral part
En música orquestal, todas las notas se imprimen dos veces. Una vez
-en las particellas para los músicos, y otra para la partitura del
-director. Los identificadores se pueden usar para evitar la
-duplicación del trabajo. La música se escribe una vez y se almacena
-en una variable. El contenido de dicha variable se usa después para
-generar tanto la particella como la partitura del director.
+en las particellas para los músicos, y otra para la partitura del director.
+Los identificadores se pueden usar para evitar la duplicación del trabajo.
+La música se escribe una vez y se almacena en una variable.
+El contenido de dicha variable se usa después para generar tanto la particella como la partitura del director.
Es muy conveniente definir las notas en un archivo especial. Por
ejemplo, supongamos que el archivo @file{trompa.ly} contiene la
@end example
Cuando se imprime la particella tienen que comprimirse los silencios
-multicompás. Esto se hace estableciendo una variable en tiempo de
-ejecución
+multicompás. Esto se hace estableciendo una variable en tiempo de ejecución
@example
\set Score.skipBars = ##t
El establecimiento de variables en tiempo de ejecución (@q{propiedades}) se trata en
@ref{Changing context properties on the fly}.
+
+
+
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: 51018f5026338e96df034b41ee173fbef0cb6158
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
manual ¡pero no las omita en su propia música!
@cindex Sensible a las mayúsculas
-Además la entrada de LilyPond es @strong{sensible a las mayúsculas}. @code{ @{ c d e @} }
-es una entrada válida; @code{ @{ C D E @} } producirá un mensaje de error.
+Además la entrada de LilyPond es @strong{sensible a las mayúsculas}. @code{ @{ c d e @}}
+es una entrada válida; @code{@{ C D E @}} producirá un mensaje de error.
@sp 1
@subsubheading MacOS X
-Si hace doble click sobre LilyPond.app, se abrirá con un archivo
+Si hace doble click sobre @code{LilyPond.app}, se abrirá con un archivo
de ejemplo. Guárdelo, por ejemplo, como @file{prueba.ly} en el Escritorio, y
a continuación procéselo con la orden de menú @samp{Compilar > Componer archivo}.
El PDF resultante se mostrará en la pantalla.
Advierta que la primera vez que ejecute LilyPond, tardará un minuto
o dos porque todas las tipografías del sistema han de ser analizadas previamente.
-Para posteriores usos de LilyPond, debería comenzar eligiendo "Nuevo"
-o "Abrir". Tiene que grabar el archivo antes de componerlo tipográficamente.
+Para posteriores usos de LilyPond, debería comenzar eligiendo @q{Nuevo}
+o @q{Abrir}. Tiene que grabar el archivo antes de componerlo tipográficamente.
Si se produce algún error durante el proceso, observe la ventana del registro.
@subsubheading Windows
-En Windows, si hace doble click sobre el icono de LilyPond que está en
-el escritorio, se abrirá un sencillo editor de texto con un archivo de
-ejemplo. Guárdelo, por ejemplo, con el nombre @file{prueba.ly} en el
-escritorio y después haga doble click sobre el icono del archivo para
-procesarlo (el icono tiene la forma de una nota). Transcurridos unos
-segundos, obtendrá un archivo @file{prueba.pdf} en el escritorio.
-Haga doble click sobre este archivo PDF para ver la partitura
-compuesta tipográficamente. Un método alternativo para procesar el
-archivo @file{prueba.ly} es arrastrarlo y soltarlo sobre el icono de
-LilyPond utilizando el ratón.
-
-Para editar un archivo @file{.ly} existente, haga click sobre él con
-el botón derecho del ratón y elija @qq{Edit source} (editar el archivo
-fuente). Para empezar con un archivo vacío, arranque el editor como se
-describe más arriba y elija @qq{New} (nuevo) del menú @qq{File}
-(archivo).
-
-Al hacer doble click sobre el archivo no sólo se obtiene como resultado
-un archivo PDF, sino también un archivo @file{.log} que contiene cierta
-información acerca de lo que LilyPond ha hecho con el archivo.
-Si se produce algún error, examine este archivo de registro.
-
-Tenga en cuenta que hay disponibles varios editores de texto
-alternativos con un mejor apoyo para la realización de documentos de
-LilyPond, consulte @ref{Editor support} para ver más información.
+En Windows, si hace doble click sobre el icono de LilyPond que está en el escritorio, se
+abrirá un sencillo editor de texto con un archivo de ejemplo. Guárdelo, por ejemplo, con
+el nombre @file{prueba.ly} en el escritorio y después haga doble click sobre el icono del
+archivo para procesarlo (el icono tiene la forma de una nota). Transcurridos unos segundos,
+obtendrá un archivo @file{prueba.pdf} en el escritorio. Haga doble click sobre este archivo
+PDF para ver la partitura compuesta tipográficamente. Un método alternativo para procesar el
+archivo @file{prueba.ly} es arrastrarlo y soltarlo sobre el icono de LilyPond utilizando
+el ratón.
+
+Para editar un archivo @file{.ly} existente, haga click sobre él con el botón derecho del ratón
+y elija @qq{Edit source} (editar el archivo fuente). Para empezar con un archivo vacío,
+arranque el editor como se describe más arriba y elija @qq{New} (nuevo) del menú @qq{File} (archivo).
+
+Al hacer doble click sobre el archivo no sólo se obtiene como resultado un archivo PDF,
+sino también un archivo @file{.log} que contiene cierta información acerca de lo que
+LilyPond ha hecho con el archivo. Si se produce algún error, examine este archivo de registro.
+
+Tenga en cuenta que hay disponibles varios editores de texto alternativos con un mejor
+apoyo para la realización de documentos de LilyPond, consulte @ref{Editor support} para ver más información.
@subsubheading Unix
Comience abriendo una ventana de terminal e inicando un editor de texto. Por
ejemplo, puede abrir un xterm y ejecutar
@code{joe}@footnote{Existen macros para los adictos a VIM, y hay
-un @code{LilyPond-mode} (modo de LilyPond) para adictos a Emacs. Si no han sido
+un @code{LilyPond-mode} (modo de LilyPond) para los adictos a Emacs. Si no han sido
instalados aún, consulte el archivo @file{INSTALL.txt}. El
entorno de edición más sencillo es @file{LilyPondTool}. Consulte
-@ref{Editor support} para más información.}. En su
+@rprogram{Editor support} para más información.}. En su
editor de texto, introduzca la siguiente entrada y guarde el archivo como
@file{prueba.ly}
@end lilypond
@noindent
-Este comportamiento se puede modificar, pero en general estos valores automáticos son adecuados.
+Este comportamiento se puede modificar, pero en general estos valores automáticos
+son adecuados.
@subheading Pitches
@subheading Durations (rhythms)
-La @rglos{duration} de una nota se especifica mediante un número después del nombre de la nota. @samp{1} significa @rglos{whole note}, @samp{2} significa @rglos{half note},
+La @rglos{duration} de una nota se especifica mediante un número después del nombre de la nota.
+@samp{1} significa @rglos{whole note}, @samp{2} significa @rglos{half note},
@samp{4} significa @rglos{quarter note} y así sucesivamente. Las barras de corchea se añaden
automáticamente.
@quotation
@table @asis
@item Introducir alturas y duraciones
-ver @ref{Pitches} y @ref{Durations}.
+véase @ref{Pitches} y @ref{Durations}.
@item Silencios
-ver @ref{Rests}.
+véase @ref{Rests}.
@item Indicaciones de compás y otros comandos de tiempo
-ver @ref{Time signature}.
+véase @ref{Time signature}.
@item Claves
-ver @ref{Clef}.
+véase @ref{Clef}.
@end table
@end quotation
@node Working on text files
@subsection Working on text files
-Los archivos de entrada de LilyPond se tratan como los archivos de la mayoría de los lenguajes de programación:
-son sensibles a las mayúsculas, insensibles al número de espacios, las expresiones
+Los archivos de entrada de LilyPond son como los archivos fuente de muchos lenguajes de programación corrientes.
+Son sensibles a las mayúsculas e insensibles al número de espacios Las expresiones
se forman con llaves @{ @} y los comentarios se denotan por un signo de porcentaje (@code{%}) o por
@code{%@{ ... %@}}.
@item @strong{Sensible a las mayúsculas}:
tiene importancia el hecho de que introduzca una letra
en minúsculas (p.ej. @code{a, b, s, t}) o en mayúsculas (p.ej.
-@code{A, B, S, T}). Las notas son minúsculas: @code{ @{ c d e @} }
-es una entrada válida; @code{ @{ C D E @} } produciría un mensaje de error.
+@code{A, B, S, T}). Las notas son minúsculas: @code{@{ c d e @}}
+es una entrada válida; @code{@{ C D E @}} produciría un mensaje de error.
@item @strong{Insensible al número de espacios}:
no importa cuántos
-espacios (o saltos de línea) añada. @code{ @{ c d e @}} significa lo mismo
-que @code{ @{ c @ @ @ @ @ d e @} } y que
+espacios (o saltos de línea) añada. @code{@{ c d e @}} significa lo mismo
+que @code{@{ c @tie{} @tie{} @tie{} d e @}} y que
@example
@{
c d
Todo fragmento de código de entrada para LilyPond ha de llevar
@strong{@{ llaves @}} antes y después de la entrada. Estas llaves le dicen a
LilyPond que la entrada es una expresión musical unitaria, igual que
-los paréntesis @samp{()} en las matemáticas. Las llaves deben ir rodeadas
+los paréntesis @samp{()} de las matemáticas. Las llaves deben ir rodeadas
de un espacio a no ser que se encuentren al comienzo o al final de una
línea, para evitar cualquier ambigüedad.
-Una función (como, por ejemplo @code{\relative @{ @}} ) también es una expresión musical
+Una función (como por ejemplo @code{\relative @{ @}}) también es una expresión musical
unitaria.
@cindex comentarios
introduce un comentario de línea; todo lo que se encuentra después de @samp{%} en esa línea
se ignora. Un comentario de bloque marca una sección entera de entrada musical
como comentario. Todo lo que está encerrado dentro de @code{%@{} y @code{%@}} se
-ignora. El siguiente fragmento muestra algunos posibles usos para los comentarios:
+ignora (pero los comentarios no pueden incluir otros comentarios). El siguiente fragmento muestra algunos posibles usos para los comentarios:
@example
% a continuación van las notas de campanitas del lugar
cis1 ees fisis, aeses
@end lilypond
-@cindex armadura de la tonalidad, establecer
+@cindex tonalidad, armadura de la, establecer
@subheading Key signatures
La armadura de la tonadlidad se establece mediante el comando @code{\key} seguido de
@cindex ligaduras de fraseo
@subheading Phrasing slurs
-@cindex ligaduras de fraseo
Las ligaduras que se utilizan para indicar fraseos más largos se pueden introducir mediante @code{\(} y
@code{\)}. Puede haber al mismo tiempo ligaduras de legato y ligaduras de fraseo,
pero no es posible tener legatos simultáneos o ligaduras de expresión
Estas anotaciones hacen menos problemáticas las subsiguientes actualizaciones de LilyPond.
Los cambios en la sintaxis se tratan mediante un programa especial,
-@file{convert-ly} (ver @ref{Updating files with convert-ly}), y utiliza
+@file{convert-ly} (ver @rprogram{Updating files with convert-ly}), y utiliza
@code{\version} para determinar qué reglas hay que aplicar.
Una vez que ha escrito algunas piezas cortas, lea el resto del
Manual de aprendizaje (capítulos 3 al 5). ¡Por supuesto, no pasa nada por
-leerlos ahora mismo! Sin embargo, el resto del Manual
+leerlo ahora mismo! Sin embargo, el resto del Manual
de Aprendizaje da por sentado que está familiarizado con la entrada
de LilyPond. Puede saltarse estos capítulos ahora
-@c should read skip
y volver a ellos cuando haya adquirido más experiencia.
diferente (como @code{c'} o @code{c,,}), y en ocasiones
¡todo el ejemplo estará en el modo de notas absoluto! Sin embargo, las ambigüedades de esta clase
existen solamente allí donde las alturas no son lo más importante. En aquellos ejemplos
-en los que las alturas tienen importancia, hemos expresado explícitamente el modo @code{\relative}
-o bien el @code{@{ @}} de modo absoluto.
+en los que las alturas tienen importancia, hemos escrito explícitamente @code{\relative}
+o bien el @code{@{ @}} en modo absoluto.
Si aún tiene dudas respecto de la entrada de LilyPond exacta que se
ha utilizado en un ejemplo, lea la versión HTML (si no lo está haciendo ya)
y pulse con el ratón sobre la imagen de la música. De esta forma se mostrará la entrada
exacta que LilyPond usó para generar este manual.
+
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: d18561abb4a826a1fe77e06619b935eeaace9841
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
configurable; prácticamente todos los fragmentos de la salida se pueden cambiar.
-
@menu
* Moving objects::
* Fixing overlapping notation::
acerca de la notación. Pruebe el ejemplo anterior con 2.3... pero también con otros valores
mayores (y menores). ¿Cuál cree que queda mejor?
-
La propiedad @code{staff-padding} (relleno de pentagrama) está estrechamente relacionada.
@code{padding} controla la cantidad de espacio mínima entre un objeto y el objeto más cercano
(generalmente la nota o las líneas del pentagrama);
@code{extra-offset} (desplazamiento adicional). Es ligeramente más complicado y puede
causar otros problemas. Cuando movemos objetos con @code{extra-offset},
el movimiento se hace después de que LilyPond haya colocado todos los demás objetos.
-Esto significa que el resultado podría entrar en conflicto con otros objetos.
+Esto significa
+que el resultado podría entrar en conflicto con otros objetos.
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
% temporary code to break this example:
Otros ajustes como las definiciones de los comandos de marcado se almacenan
como archivos @code{.scm} (de Scheme). Cae fuera del ámbito de presente manual
cualquier explicación más profunda; los usuarios están advertidos de que se necesita
-una considerable cantidad de conocimientos técnicos para comprender estos archivos.
+una considerable cantidad de conocimientos técnicos
+para comprender estos archivos.
@itemize @bullet
A veces puede acabar con uno o dos pentagramas en una segunda página
(o tercera, o cuarta...). Es fastidioso sobre todo si observa las
-páginas anteriores y parece haber espacio sufuciente en ellas.
+páginas anteriores y parece haber
+espacio sufuciente en ellas.
Al investigar asuntos relacionados con la presentación, la herramienta
@code{annotate-spacing} (anotar el espaciado) no tiene precio.
Este comando imprime los valores de algunos comandos de espaciado;
consulte @ref{Displaying spacing} para ver más detalles. A partir de
-la salida de de @code{annotate-spacing}, podemos ver qué márgenes
-podríamos desear alterar.
-
+la salida de de @code{annotate-spacing}, podemos ver qué márgenes podríamos desear alterar.
Aparte de los márgenes, existen otras opciones para ahorrar espacio:
@section Advanced tweaks with Scheme
Hemos visto cómo la salida de LilyPond se puede modificar de manera muy profunda utilizando
-comandos como @code{\override TextScript #'extra-offset = ( 1 . -1)}. Pero
+comandos como
+@code{\override TextScript #'extra-offset = ( 1 . -1)}. Pero
tenemos un potencial incluso mayor si utilizamos Scheme. Para ver una explicación completa
de esto, consulte el @ref{Scheme tutorial} e
@ref{Interfaces for programmers}.
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
+ Translation of GIT committish: 5d9a6604876b66b860e78363521edc770ac5b455
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@item ¿Qué ocurre si quiere compartir sus archivos con otras personas?
De hecho, ¿y si quiere alterar sus propios archivos después de algunos años?
Algunos archivos de lilypond se comprenden a primera vista;
-otros pueden tenerle rascándose la cabeza durante una hora.
+otros pueden tenerle rascándose la cabeza
+durante una hora.
@item ¿Qué ocurre si quiere actualizar su archivo de lilypond para poderlo usar con
una versión más reciente del programa? La sintaxis de la entrada se modifica
mucho que siempre incluya la @code{\version}, sin importar cuán
pequeño pueda ser su archivo. Desde la experiencia personal podemos decirle que es bastante frustrante
intentar recordar el número de versión de LilyPond que estaba usando hace unos años.
-@code{convert-ly} requiere que declare qué versión de LilyPond utilizó.
+@code{convert-ly} requiere que declare
+qué versión de LilyPond utilizó.
@item @strong{Incluya comprobaciones}: @ref{Bar check}, @ref{Octave check} y
@ref{Barnumber check}. Si
si luego tiene que @q{depurar} los archivos.
@item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando)
-o referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
+o
+referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
variación,} etc.). Puede que no necesite comentarios cuando introduce una pieza por vez primera,
pero si quiere volver a ella o modificar algo al cabo de dos o tres años,
-y también si le pasa la fuente a un amigo, será
-todo un desafío determinar sus intenciones o de qué manera estaba estructurado el archivo si no le añadió los comentarios.
+y también si le pasa la fuente a un amigo,
+será todo un desafío
+determinar sus intenciones o de qué manera estaba estructurado el archivo
+si no le añadió los comentarios.
-@item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una falta de
-equilibrio en el número de @code{@{} y @code{@}}.
+@item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una
+falta de equilibrio
+en el número de @code{@{} y @code{@}}.
@item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
e identificadores. Si especifica @code{c4 d e} al principio de una frase
le resultará mucho más fácil comparar la música de LilyPond con la original.
Cuando haya terminado de revisar su partitura podrá
definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea. Así
-permitirá a LilyPond colocar los saltos donde éste lo estime más oportuno.
+permitirá a LilyPond colocar los saltos donde éste lo estime
+más oportuno.
@end itemize
@node Large projects
@subsection Large projects
-Al trabajar en proyecto grande se hace esencial tener una estructura clara en los archivos de lilypond.
+Al trabajar en proyecto grande se hace esencial tener una estructura clara
+en los archivos de lilypond.
@itemize @bullet
en @ref{General suggestions}, pero para proyectos
grandes es vital. Quizá tengamos que cambiar la
definición de @code{fthenp}, pero en ese caso sólo lo tendremos que
-hacer una vez, y aún podremos evitar tocar nada dentro de @code{violin}.
+hacer una vez, y aún podremos evitar tocar nada
+dentro de @code{violin}.
@example
fthenp = _\markup@{
Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez:
reducen la complejidad. Examinemos
el ejemplo anterior reescrito sin ningún identificador.
-Encontrará que es mucho más difícil de leer, sobre todo la última línea.
+Encontrará que es mucho más difícil de leer, sobre todo
+la última línea.
@example
violin = \relative c'' @{
La salida que produce LilyPond se puede modificar profundamente; consulte
@ref{Tweaking output} para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos
archivos a los que les quiere aplicar sus porpios trucos? O ¿qué ocurre si, sencillamente,
-quiere separar los trucos de la propia música? Todo esto es bastante fácil de conseguir.
+quiere separar los trucos de la propia música? Todo esto
+es bastante fácil de conseguir.
Veamos un ejemplo. No se preocupe si no entiende
las partes que tienen todos los @code{#()}. Esto se explicará en
@node Updating old files
@section Updating old files
-La sintaxis de la entrada de LilyPond cambia de manera ocasional. A
-medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la
-entrada) se modifica en consonancia. A veces estos cambios se hacen
-para conseguir que la entrada sea más fácil de leer y escribir, y
-otras veces estos cambios son para dar cabida a nuevas funcionalidades
-de LilyPond.
+La sintaxis de la entrada de LilyPond cambia de manera ocasional. A medida que el propio
+LilyPond mejora, la sintaxis (el lenguaje de la entrada) se modifica en consonancia. A
+veces estos cambios se hacen para conseguir que la entrada sea más fácil de leer y escribir, y
+otras veces estos cambios son para dar cabida a nuevas funcionalidades de LilyPond.
LilyPond lleva incorporado un archivo que facilita esta actualización:
@code{convert-ly}. Para ver detalles sobre cómo ejecutar este programa, consulte
-@ref{Updating files with convert-ly}.
+@rprogram{Updating files with convert-ly}.
Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada.
Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright}
que se convierte en @code{ragged-right}), pero algunos cambios son demasiado
complicados. Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar
-se relacionan en @ref{Updating files with convert-ly}.
-
-Por ejemplo, en la versión 2.4 y anteriores de LilyPond, los acentos y las letras no inglesas
-se introducían utilizando LaTeX: por ejemplo,
-@samp{No\"el} (que significa @q{Navidad} en francés). En LilyPond 2.6 y siguientes, el carácter especial
-@samp{ë} debe introducirse directamente en el archivo de LilyPond como un carácter
-UTF-8. @code{convert-ly} no puede cambiar todos los caracteres especiales de LaTeX
-a caracteres de UTF-8; tendrá que actualizar manualmente
+se relacionan en @rprogram{Updating files with convert-ly}.
+
+Por ejemplo, en la versión 2.4 y anteriores de LilyPond,
+los acentos y las letras no inglesas se introducían utilizando
+LaTeX: por ejemplo, @samp{No\"el} (que significa @q{Navidad} en francés).
+En LilyPond 2.6 y siguientes, el carácter especial @samp{ë}
+debe introducirse directamente en el archivo de LilyPond como un carácter UTF-8.
+@code{convert-ly} no puede cambiar todos los caracteres especiales
+de LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente
sus archivos de LilyPond antiguos.
archivo de entrada en un comentario. Después de eliminar una
sección convirtiéndola en un comentario, pruebe a compilar el
archivo otra vez. Si funciona, entonces el problema debía estar
-en la porción que había eliminado. Si no funciona,
-continúe eliminando material (transformándolo en comentarios)
-hasta que tenga algo que funcione.
+en la porción que había eliminado. Si no funciona, continúe eliminando material
+(transformándolo en comentarios) hasta que tenga algo que funcione.
En un caso extremo podría terminar con sólo
@item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
@end itemize
+
Para construir un ejemplo que sea lo más pequeño posible, la regla es
bastante simple: quite todo lo que no sea necesario. Al tratar de
quitar partes innecesarias de un archivo, es una buena idea convertir líneas en
@item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
@end itemize
+
En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
@itemize
@item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
demostrar algo sobre el comportamiento de estos elementos precisamente.
-@item No use comandos @code{\override} a no ser que ése sea el propósito del ejemplo.
+@item No use comandos @code{\override} a no ser que ése sea el propósito
+del ejemplo.
@end itemize
PDF_FILES=$(outdir)/NEWS.pdf
include $(depth)/make/stepmake.make
+MAKEINFO_FLAGS += -I $(top-src-dir)/Documentation/user
+
ifneq ($(out),www)
LILYPOND_BINARY='true'
endif
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename INSTALL.info
+@settitle INSTALL - compiling and installing GNU LilyPond
+
+@documentencoding utf-8
+@documentlanguage en
+
+@set INSTALL 1
+
+@node Top
+@top
+
+@contents
+
+@include macros.itexi
+@include install.itely
+
+@bye
+
else
-$(INSTALL) -d $(DESTDIR)$(package_infodir)
-install-info --remove --info-dir=$(infodir) $(outdir)/lilypond.info
+ -install-info --remove --info-dir=$(infodir) $(outdir)/lilypond-program.info
install-info --info-dir=$(infodir) $(outdir)/lilypond.info
(cd $(package_infodir) && ln -sf $(webdir)/Documentation/user/*png .)
endif
Info for Documentation
----------------------
-Current version of the manual: 2.11.15
+Current version of the manual: 2.11.28
*** Please update this whenever you run convert-ly on the docs.
convert-ly -e --from=... --to=... --no-version *.itely
}
@end lilypond
+Possible symbols for the @code{break-align-symbols} list are
+@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
+@code{staff-bar}, @code{left-edge}, @code{key-cancellation},
+@code{key-signature}, and @code{time-signature}.
+
The text marks will, by default, be aligned with the middle of the notation
object, but this can be changed by overriding the
@code{break-align-anchor-alignment} and
\once \override Staff.KeySignature #'break-align-anchor-alignment = #RIGHT
\mark \default
ces1
+ \key cis \major
- % the RehearsalMark will be aligned with the right edge of the KeySignature
- % and then shifted right by an additional 2 units.
+ % the RehearsalMark will be aligned with the left edge of the KeySignature
+ % and then shifted right by 2 units.
\once \override Staff.KeySignature #'break-align-anchor = #2
\mark \default
ces1
See @ref{The Feta font}, for a list of symbols which may be
printed with @code{\musicglyph}.
-The horizontal location of rehearsal marks can be adjusted by
-setting @code{break-align-symbol}
-
-@lilypond[fragment,quote,ragged-right,verbatim,relative]
-c1
-\key cis \major
-\clef alto
-\override Score.RehearsalMark #'break-align-symbol = #'key-signature
-\mark "on-key"
-cis
-\key ces \major
-\override Score.RehearsalMark #'break-align-symbol = #'clef
-\clef treble
-\mark "on clef"
-ces
-@end lilypond
-
-@code{break-align-symbol} may also accept the following values:
-@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
-@code{staff-bar}, @code{left-edge}, @code{key-cancellation},
-@code{key-signature}, and @code{time-signature}. Setting
-@code{break-align-symbol} will only have an effect if the symbol
-appears at that point in the music.
-
+For common tweaks to the positioning of rehearsal marks, see @ref{Text marks}.
@seealso
can be used to adjust note durations.
@lilypond[ragged-right,relative=1,fragment,verbatim,quote]
+\override Beam #'grow-direction = #LEFT
\featherDurations #(ly:make-moment 5 4)
{
- \override Beam #'grow-direction = #LEFT
c16[ c c c c c c]
}
@end lilypond
@internalsref{SystemStartBar}, @internalsref{SystemStartBrace}, and
@internalsref{SystemStartBracket}. Only one of these types is created
in every context, and that type is determined by the property
-@internalsref{systemStartDelimiter}.
+@code{systemStartDelimiter}.
@commonprop
@funindex stemLeftBeamCount
@funindex stemRightBeamCount
-Normally, beaming patterns within a beam are determined automatically.
-If necessary, the properties @code{stemLeftBeamCount} and
-@code{stemRightBeamCount} can be used to override the defaults. If
+
+LilyPond can automatically determine beaming patterns within a beam,
+but this automatic behavior can sometimes produce odd results;
+therefore the @code{stemLeftBeamCount} and @code{stemRightBeamCount} properties can
+be used to override the defaults. If
either property is set, its value will be used only once, and then it
-is erased
+is erased.
@lilypond[quote,ragged-right,fragment,relative=1,verbatim]
{
}
@end lilypond
+@noindent
+or
+
+@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
+\new Staff {
+ \partial 4
+ \repeat volta 4 { e | c2 d2 | e2 f2 | }
+ \alternative { { \partial 4*3 g4 g g } { a a a a | b2. } }
+}
+@end lilypond
+
+
+
@funindex \repeatTie
Ties may be added to a second ending,
version that you are working on. See TRANSLATION for details.
@end ignore
-@c was "INSTALL - compiling and installing GNU LilyPond"
+@ifclear INSTALL
@node Install
@chapter Install
+@end ifclear
@c I don't know what this comment does. Remove? -gp
@ignore
Other chords may be entered by suffixing a colon and introducing a
modifier (which may include a number if desired)
+
@lilypond[quote,fragment,verbatim]
\chordmode { e1:m e1:7 e1:m7 }
@end lilypond
+
The first number following the root is taken to be the @q{type} of the
chord, thirds are added to the root until it reaches the specified
-number
+number. The exception is @code{c:13}, for which the 11 is omitted.
+
@lilypond[quote,fragment,verbatim]
-\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 }
+\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 c:13}
@end lilypond
@cindex root of chord
More complex chords may also be constructed adding separate steps
to a chord. Additions are added after the number following
the colon and are separated by dots
+
@lilypond[quote,verbatim,fragment]
\chordmode { c:5.6 c:3.7.8 c:3.6.13 }
@end lilypond
+
Chord steps can be altered by suffixing a @code{-} or @code{+} sign
to the number
+
@lilypond[quote,verbatim,fragment]
\chordmode { c:7+ c:5+.3- c:3-.5-.7- }
@end lilypond
+
Removals are specified similarly and are introduced by a caret. They
must come after the additions
+
@lilypond[quote,verbatim,fragment]
\chordmode { c^3 c:7^5 c:9^3.5 }
@end lilypond
@author The LilyPond development team
-Copyright @copyright{} 1999--2006 by the authors
+Copyright @copyright{} 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
@end titlepage
@copying
-Copyright @copyright{} 1999--2006 by the authors
+Copyright @copyright{} 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
@ifnottex
This file documents GNU LilyPond program usage.
-Copyright 1999--2006 by the authors
+Copyright 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
* etf2ly: (lilypond/lilypond-program)Invoking etf2ly. Importing Finale.
* lilypond-book: (lilypond/lilypond-program)LilyPond-book. Itegrating text and music.
* midi2ly: (lilypond/lilypond-program)Invoking midi2ly. Importing MIDI.
-* mup2ly: (lilypond/lilypond-program)Invoking mup2ly. Importing Mup.
@end direntry
@c don't remove this comment.
@titlefont{User manual}
@author The LilyPond development team
-Copyright @copyright{} 1999--2006 by the authors
+Copyright @copyright{} 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
@end titlepage
@copying
-Copyright @copyright{} 1999--2006 by the authors
+Copyright @copyright{} 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
@ifnottex
This file documents GNU LilyPond.
-Copyright 1999--2006 by the authors
+Copyright 1999--2007 by the authors
@quotation
Permission is granted to copy, distribute and/or modify this document
@c Fixes by Jean-Pierre Coulon and `Dirk'
-Copyright @copyright{} 1999--2006 by the authors
+Copyright @copyright{} 1999--2007 by the authors
Permission is granted to copy, distribute and/or modify this document
Finnish glossary translations.
@end table
@*
-Copyright 1999--2006 by the authors
+Copyright 1999--2007 by the authors
Permission is granted to copy, distribute and/or modify this document
A basic example of a lilypond input file is
@example
-\version "2.11.15"
+\version "2.11.23"
\score @{
@{ @} % this is a single music expression;
% all the music goes in here.
(the @code{'elements}, @code{'duration}, @code{'pitch}, etc, that we
see in the @code{\displayMusic} output above). The new value is the
former elements property, with an extra item: the
-@code{MarcatoEvent} expression, which we copy from the
+@code{ArticulationEvent} expression, which we copy from the
@code{\displayMusic} output,
@example
want: the same list as before, plus the new @code{ArticulationEvent}
expression. The order inside the elements property is not important here.
-Finally, once we have added the @code{MarcatoEvent} to its elements
+Finally, once we have added the marcato articulation to its @code{elements}
property, we can return @code{result-event-chord}, hence the last line of
the function.
soprano part).
@example
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' @{
\clef treble
\key c \major
Now we want to add a cello part. Let's look at the @q{Notes only} example:
@example
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' @{
\clef treble
\key c \major
notes.
@example
-\version "2.11.15"
+\version "2.11.23"
sopranoMusic = \relative c' @{
\clef treble
\key c \major
easily fixed. Here's the complete soprano and cello template.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
sopranoMusic = \relative c' {
\clef treble
\key c \major
GUILE is not reset after processing a @code{.ly} file, so be careful
not to change any system defaults from within Scheme.}
+In addition, the value of @code{output-suffix} will be inserted between
+the basename and the number. An input file containing
+
+@example
+#(define output-suffix "violin")
+\book @{ @dots{} @}
+#(define output-suffix "cello")
+\book @{ @dots{} @}
+@end example
+
+@noindent
+will output @var{base}@file{-violin.ps} and
+@var{base}@file{-cello-1.ps}.
+
+
@subsection Command line options
version that you are working on. See TRANSLATION for details.
@end ignore
-@c was "INSTALL - compiling and installing GNU LilyPond"
@node Setup
@chapter Setup
* Vim mode::
* LilyPondTool::
* TexShop::
+* TextMate::
@end menu
@node Emacs mode
@uref{http://@/www@/.dimi@/.uniud@/.it/vitacolo/freesoftware@/.html}.
+@node TextMate
+@subsection TextMate
+
+There is a LilyPond bundle for TextMate. It may be installed by running
+
+@example
+mkdir -p /Library/Application\ Support/TextMate/Bundles
+cd /Library/Application\ Support/TextMate/Bundles
+svn co http://macromates.com/svn/Bundles/trunk/Bundles/Lilypond.tmbundle/
+@end example
+
@node Point and click
which is hanging over a bar line is not proper, such as
@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-c4 c2 c2 \break % this does nothing
+c4 c2 << c2 {s4 \break } >> % this does nothing
c2 c4 | % a break here would work
c4 c2 c4 ~ \break % as does this break
c4 c2 c4
@end lilypond
-This can be avoided by removing the @code{Forbid_line_break_engraver}
-and adding the line breaks in another voice:
+This can be avoided by removing the @code{Forbid_line_break_engraver}.
+Note that manually forced line breaks have to be added in parallel
+with the music.
@lilypond[quote,ragged-right,verbatim]
-\new Staff <<
- \new Voice \with {
- \remove Forbid_line_break_engraver
- } {
- c'4 c'2 c'2 c'2 c'4
- }
- \new Voice {
- s1 \break s1
- }
->>
+\new Voice \with {
+ \remove Forbid_line_break_engraver
+} {
+ c4 c2 << c2 {s4 \break } >> % now the break is allowed
+ c2 c4
+}
@end lilypond
add notes, and you're finished!
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' {
\clef treble
\key c \major
line.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' {
\clef treble
\key c \major
Want to prepare a lead sheet with a melody and chords? Look no further!
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' {
\clef treble
\key c \major
This template allows you to prepare a song with melody, words, and chords.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c' {
\clef treble
\key c \major
Here is a simple piano staff.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
upper = \relative c'' {
\clef treble
\key c \major
piano accompaniment underneath.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
melody = \relative c'' {
\clef treble
\key c \major
the lyrics between the piano staff (and omit the separate melody staff).
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
upper = \relative c'' {
\clef treble
\key c \major
tweaking yourself.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
upper = \relative c'' {
\clef treble
\key c \major
section for time and key signatures.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
global= {
\time 4/4
@verbatim
%%%%% piece.ly
-\version "2.11.15"
+\version "2.11.23"
global= {
\time 4/4
%%%%% score.ly
-\version "2.11.15"
+\version "2.11.23"
\include "piece.ly"
#(set-global-staff-size 14)
\score {
%%%%% vn1.ly
-\version "2.11.15"
+\version "2.11.23"
\include "piece.ly"
\score {
\keepWithTag #'vn1 \music
%%%%% vn2.ly
-\version "2.11.15"
+\version "2.11.23"
\include "piece.ly"
\score {
\keepWithTag #'vn2 \music
%%%%% vla.ly
-\version "2.11.15"
+\version "2.11.23"
\include "piece.ly"
\score {
\keepWithTag #'vla \music
%%%%% vlc.ly
-\version "2.11.15"
+\version "2.11.23"
\include "piece.ly"
\score {
\keepWithTag #'vlc \music
always the same for all parts.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
global = {
\key c \major
\time 4/4
apply to the piano reduction.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
global = {
\key c \major
\time 4/4
and @code{alignBelowContext}.
@lilypond[quote,verbatim,ragged-right]
-\version "2.11.15"
+\version "2.11.23"
global = {
\key c \major
\time 4/4
staves rather than on the staves.
@lilypond[quote,verbatim,line-width=11.0\cm]
-\version "2.11.15"
+\version "2.11.23"
global = {
\set Score.skipBars = ##t
@lilypond[quote,verbatim,ragged-right]
\include "gregorian-init.ly"
-\version "2.11.15"
+\version "2.11.23"
chant = \relative c' {
\set Score.timing = ##f
@c The `line-width' argument is for the \header.
@lilypond[quote,verbatim,ragged-right,line-width]
-\version "2.11.15"
+\version "2.11.23"
\header {
title = "Song"
subtitle = "(tune)"
@ The `line-width' is for \header.
@li lypond[quote,verbatim,ragged-right,line-width]
-\version "2.11.15"
+\version "2.11.23"
\header {
dedication = "dedication"
title = "Title"
was written. To mark a file for version 2.10.1, place
@example
-\version "2.11.15"
+\version "2.11.23"
@end example
@noindent
the @ref{Version number}.
@example
-\version "2.11.15"
+\version "2.11.23"
\header @{
title = "Symphony"
composer = "Me"
@itemize @bullet
@item @strong{Include @code{\version} numbers in every file}. Note that all
-templates contain a @code{\version "2.11.15"} string. We
+templates contain a @code{\version "2.11.23"} string. We
highly recommend that you always include the @code{\version}, no matter
how small your file is. Speaking from personal experience, it's
quite frustrating to try to remember which version of LilyPond you were
@example
%%% global.ly
-\version "2.11.15"
+\version "2.11.23"
#(ly:set-option 'point-and-click #f)
\include "../init/init-defs.ly"
\include "../init/init-layout.ly"
SCRIPTS = configure autogen.sh
README_FILES = COPYING DEDICATION ROADMAP THANKS HACKING
-TOPDOC_FILES = AUTHORS README INSTALL NEWS
+TOPDOC_FILES = AUTHORS INSTALL README NEWS
TOPDOC_TXT_FILES = $(addprefix $(top-build-dir)/Documentation/topdocs/$(outdir)/,$(addsuffix .txt,$(TOPDOC_FILES)))
IN_FILES := $(call src-wildcard,*.in)
flower/ A simple c++ library
include/
input/ Music input examples
+ lsr/ Snippets from the LilyPond Snippet Repository
mutopia/ Real music, more at www.mutopiaproject.org
regression/ Testing of features, one test per file
test/ Tips and tricks
DEVELOPMENT TEAM
-Han-Wen Nienhuys - Core development
-Jan Nieuwenhuizen - Core development
-Joe Neeman - Core development
-Graham Percival - Documentation Editor and Bug Meister
-Mats Bengtsson - Support Guru
-John Mandereau - Translation Meister
+Han-Wen Nienhuys - Core development
+Jan Nieuwenhuizen - Core development
+Joe Neeman - Core development
+Graham Percival - Documentation Editor and Bug Meister
+Valentin Villenave - Assistant Documentation Editor
+Mats Bengtsson - Support Guru
+John Mandereau - Translation Meister
CONTRIBUTORS
David Bobroff
David Griffel
Daniel Johnson
+Dominic Neumann
Eduardo Vieira
Frédéric Chiasson
Georg Dummer
+Hernán J. González
Jay Anderson
James Kilfinger
Jean-Marie Mouchel
Nicolas Mayencourt
Nicolas Sceaux
Orm Finnendahl
+Peter Budny
Phillip Kirlin
Ralph Palmer
Rick Hansen
Tomas Sauer
Thomas Scharkowski
Trevor Bača
-Valentin Villenave
Vivian Barty-Taylor
Werner Lemberg
Wilbert Berendsen
William Oram
Yota Moteuchi
+Zack Charter
Release 2.10
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=11
-PATCH_LEVEL=28
+PATCH_LEVEL=30
MY_PATCH_LEVEL=
typedef std::map < AFM_Ligature const *, int > Bar;
/**
- (c) 1997--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2007 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
/* ||
--- /dev/null
+#! @BASH@
+# note: dash does not work
+
+pytt '(Copyright|\(c\)|\(C\)|@copyright\{\})\s*2006' '\1 2006--2007' $(find . -mindepth 2 -type f | grep -Ev 'out/|out-scons|out-www/|.git/|.scon|#|~|' | grep -iv 'change')
+pytt '(Copyright|\(c\)|\(C\)|@copyright\{\})\s*([^-]*--)(200[0-6])' '\1 \2\062007' $(find . -mindepth 2 -type f | grep -Ev 'out/|out-scons|out-www/|.git/|.scon|#|~' | grep -iv 'change')
for file in file_names:
if (file.endswith ('.ly')):
src = os.path.join (srcdir, file)
- dest = os.path.join (destdir, file)
+ destname = file.replace (';', '-')
+ dest = os.path.join (destdir, destname)
copy_with_warning(src, dest)
os.system('convert-ly -e ' + dest)
if os.path.exists( dest + '~' ):
#
# source file of the GNU LilyPond music typesetter
#
-# (c) 1997--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1997--2007 Han-Wen Nienhuys <hanwen@cs.uu.nl>
import os
import sys
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1999--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; Changed 2001--2003 Heikki Junes <heikki.junes@hut.fi>
;;;; * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001)
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+Accidentals are available in different ancient styles, which all are
+collected here.
+
+
+" }
+
+\relative c'' {
+ \time 5/4
+ \override Staff.Accidental #'glyph-name-alist = #alteration-default-glyph-name-alist
+ cisis^\markup { \typewriter default } cis c ces ceses
+ \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ cisis^\markup { \typewriter hufnagel } cis c ces ceses
+ \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ cisis^\markup { \typewriter medicaea } cis c ces ceses
+ \override Staff.Accidental #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ cisis^\markup { \typewriter vaticana } cis c ces ceses
+ \override Staff.Accidental #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+ cisis^\markup { \typewriter mensural } cis c ces ceses
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+A way to insert a \markup @{ . . . @}string in \chords @{ . . . @}.
+" }
+
+% Note what happens if \hspace #-2 is deleted or set to +n.
+% If "tacet" instead of "Tacet" a little bit of "C" peeks around the \whiteout.
+CMString = { <c e g>-\markup { \whiteout { \hspace #-2 "Tacet" } } }
+CMStringX = #(append (sequential-music-to-chord-exceptions CMString #t)
+ ignatzekExceptions)
+<< { \chords { c1
+ \set chordNameExceptions = #CMStringX c
+ \unset chordNameExceptions c }
+ } { \relative c'' { c c c } } >>
+
+
+
\version "2.11.23"
\header { texidoc = "
-Short (smaller than 1/4) tremolos can be obtained; in such a case only
-one beam is connected to the stems.
+Short tremolos (involving eighth notes or shorter durations) can be
+obtained; in such a case only one beam is connected to the stems.
" }
\layout { ragged-right = ##t }
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+To make double-glissandi, i.e. to connect chords with glissando lines,
+you have to create another voice, then attach a glissando to it.
+" }
+
+{\clef bass
+<< { % New voice ( = \voiceOne) without stems or beams
+
+ \override Stem #'stencil = ##f
+ \override Beam #'stencil = ##f
+
+ % Attach glissando to noteheads
+ e8 \glissando fis
+
+ } \\ { % Original voice with chords rearranged so that glissando is attached to a & b
+ <e a,> \glissando <fis b,>
+} >>}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+By overriding @code{edge-text}, you can insert an accidental after the
+trill sign in a trillspanner, but this can look ugly, since the
+accidental isn't aligned.
+
+With a few tweaks to the script size and position, you can achieve
+quite pleasing results.
+
+
+
+" }
+
+\relative c'' {
+ \override TrillSpanner #'edge-text =
+ #(cons (markup #:line (#:halign -0.5 #:musicglyph "scripts.trill" #:teeny #:raise 0.65 #:sharp)) "")
+
+ b1\startTrillSpan b\stopTrillSpan
+
+ \override TrillSpanner #'edge-text =
+ #(cons (markup #:line (#:halign -0.5 #:musicglyph "scripts.trill" #:teeny #:raise 0.5 #:flat)) "")
+
+ c\startTrillSpan c\stopTrillSpan
+}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+If you have multiple pieces (e.g. Kyrie, Gloria, Credo, etc. in masses)
+in a large work, you can use multiple \score parts and use the piece
+header field to supply a title for each of the pieces. However, the
+font is very small. You can either directly put the markup into the
+piece=... header field, or better re-define the scoreTitleMarkup
+function in the \paper section.
+" }
+
+\header {
+ title = "Formatting of piece headers"
+}
+\paper {
+ scoreTitleMarkup = \markup { \column {
+ \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
+ \fill-line {
+ \fontsize #3 \bold \fromproperty #'header:piece
+ \fromproperty #'header:opus
+ }
+ }}
+}
+
+\markup { \fill-line {
+\justify-string #"If you have multiple pieces in a large work, you can use multiple score parts and use the piece header field to supply a title for each of the pieces. However, the font is very small. You can either directly put the markup into the piece=... header field, or better re-define the scoreTitleMarkup function in the paper section."} }
+
+\score {
+ \context Staff << { c'1 | R1 } >>
+ \header{ piece="Piece 1" }
+}
+
+\score {
+ \context Staff << { c'1 | R1 } >>
+ \header{ piece="Piece 2" }
+}
+
\header { texidoc = "
With the @code{\tweak} command, you can tune every grob directly. Here
are some examples of available tweaks.
+
+
" }
\paper {
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+If you want to see what a piece looks like twice faster, or slower,
+without having to correct every duration manually, here is an easy way
+to do it.
+" }
+
+\paper { indent = 0 }
+
+
+music = {a4. b4 c b8 a g a4 b8 a}
+
+looksFaster = #(define-music-function (parser location music)
+ (ly:music?)
+ (let ((new-music (ly:music-deep-copy music)))
+ (shift-duration-log new-music 1 0)
+ new-music))
+
+looksSlower = #(define-music-function (parser location music)
+ (ly:music?)
+ (let ((new-music (ly:music-deep-copy music)))
+ (shift-duration-log new-music -1 0)
+ new-music))
+
+\score { \new Voice { \time 7/8 \music
+\break \looksFaster { \time 7/16 \music }
+\break \looksSlower { \time 7/4 \music }}}
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+In music that contains many occurrences of the same sequence of notes
+at different pitches, you can use the following music function. It
+takes a note, of which the pitch is used. The supporting Scheme
+functions were borrowed from the Tips and Tricks document in the manual.
+
+This example creates the rhythm used throughout Mars, from The Planets,
+by Gustav Holst.
+" }
+
+#(define (make-note-req p d)
+ (make-music 'NoteEvent
+ 'duration d
+ 'pitch p))
+
+#(define (make-note p d)
+ (make-music 'EventChord
+ 'elements (list (make-note-req p d))))
+
+#(define (seq-music-list elts)
+ (make-music 'SequentialMusic
+ 'elements elts))
+
+#(define (make-triplet elt)
+ (make-music 'TimeScaledMusic
+ 'denominator 3
+ 'numerator 2
+ 'element elt))
+
+
+rhythm = #(define-music-function (parser location note) (ly:music?)
+ "Make the rhythm in Mars (the Planets) at the given note's pitch"
+ (let* ((p (ly:music-property
+ (car (ly:music-property note 'elements))
+ 'pitch)))
+ (seq-music-list (list
+ (make-triplet (seq-music-list (list
+ (make-note p (ly:make-duration 3 0 2 3))
+ (make-note p (ly:make-duration 3 0 2 3))
+ (make-note p (ly:make-duration 3 0 2 3))
+ )))
+ (make-note p (ly:make-duration 2 0))
+ (make-note p (ly:make-duration 2 0))
+ (make-note p (ly:make-duration 3 0))
+ (make-note p (ly:make-duration 3 0))
+ (make-note p (ly:make-duration 2 0))
+ ))))
+
+\score {
+ \new Staff {
+ \time 5/4
+
+ \rhythm c'
+ \rhythm c''
+ \rhythm g
+ }
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.10.12"
+
+\header { texidoc = "
+If you wish to typeset \"|.\", etc, style spanbars on a ChoirStaff, you
+can add the span_bar_engraver, and instruct it to omit the \"|\"-style
+bars. In this example I create a new context, SemiChoirStaff, that does
+this.
+" }
+
+\version "2.10.12"
+
+mus = { \clef F c d e f c d e f c d e f c d e f \bar "||" c d e f c d e f c d e f \bar "|." }
+
+\layout {
+ \context {
+ \ChoirStaff
+ \name "SemiChoirStaff"
+ \consists "Span_bar_engraver"
+ \override SpanBar #'stencil =
+ #(lambda (a)
+ (if (string=? (ly:grob-property a 'glyph-name) "|")
+ (set! (ly:grob-property a 'glyph-name) ""))
+ (ly:span-bar::print a))
+ }
+ \context {
+ \Score
+ \accepts SemiChoirStaff
+ }
+}
+
+\score {
+ \new SemiChoirStaff {
+ <<
+ \new Staff \mus
+ \new Staff \mus
+ >>
+ }
+}
+
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+LilyPond can handle text almost as well as music notation: in a \book
+block, you can enter different \score blocks, but also independent
+\markup sections. This snippet also demonstrates some interesting text
+formatting features such as \justify-string or \wordwrap-string (do not
+forget the # character when using them). The \fill-line command
+produces centered text, and you can define margins using \override
+#'(line-width . X), where X is the width in staff spaces.
+" }
+
+\paper {
+ ragged-bottom = ##f
+ }
+
+upper = \relative c'' {
+ \clef treble
+ \key c \major
+ \time 4/4
+
+ a b c d
+ }
+
+ lower = \relative c {
+ \clef bass
+ \key c \major
+ \time 4/4
+
+ a2 c
+ }
+ \book {
+ \markup {\justify-string #"Lorem ipsum dolor sit amet
+consectetuer adipiscing elit,
+ sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+magna aliquam erat volutpat.
+ Ut wisi enim ad minim veniam, quis nostrud exerci tation
+ullamcorper suscipit lobortis
+ nisl ut aliquip ex ea commodo consequat. Duis autem vel eum
+iriure dolor in hendrerit
+ in vulputate velit esse molestie consequat, vel illum dolore
+eu feugiat nulla facilisis
+ at vero eros et accumsan et iusto odio dignissim qui blandit
+praesent luptatum zzril
+ delenit augue duis dolore te feugait nulla facilisi. Nam
+liber tempor cum soluta nobis
+ eleifend option congue nihil imperdiet doming id quod mazim
+placerat facer possim assum.
+ Typi non habent claritatem insitam; est usus legentis in iis
+qui facit eorum claritatem.
+ Investigationes demonstraverunt lectores legere me lius quod
+ii legunt saepius.
+ Claritas est etiam processus dynamicus, qui sequitur
+mutationem consuetudium lectorum.
+ Mirum est notare quam littera gothica, quam nunc putamus
+parum claram, anteposuerit litterarum
+ formas humanitatis per seacula quarta decima et quinta
+decima. Eodem modo typi, qui nunc nobis
+ videntur parum clari, fiant sollemnes in futurum."}
+ \score {
+ \new PianoStaff <<
+ \set PianoStaff.instrumentName = "Piano "
+ \new Staff = "upper" \upper
+ \new Staff = "lower" \lower
+ >>
+ }
+ \markup {\wordwrap-string #"Lorem ipsum dolor sit amet
+consectetuer adipiscing elit,
+ sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+magna aliquam erat volutpat.
+ Ut wisi enim ad minim veniam, quis nostrud exerci tation
+ullamcorper suscipit lobortis
+ nisl ut aliquip ex ea commodo consequat. Duis autem vel eum
+iriure dolor in hendrerit
+ in vulputate velit esse molestie consequat, vel illum dolore
+eu feugiat nulla facilisis
+ at vero eros et accumsan et iusto odio dignissim qui blandit
+praesent luptatum zzril
+ delenit augue duis dolore te feugait nulla facilisi. Nam
+liber tempor cum soluta nobis
+ eleifend option congue nihil imperdiet doming id quod mazim
+placerat facer possim assum.
+ Typi non habent claritatem insitam; est usus legentis in iis
+qui facit eorum claritatem.
+ Investigationes demonstraverunt lectores legere me lius quod
+ii legunt saepius.
+ Claritas est etiam processus dynamicus, qui sequitur
+mutationem consuetudium lectorum.
+ Mirum est notare quam littera gothica, quam nunc putamus
+parum claram, anteposuerit litterarum
+ formas humanitatis per seacula quarta decima et quinta
+decima. Eodem modo typi, qui nunc nobis
+ videntur parum clari, fiant sollemnes in futurum."}
+ \score {
+ \new PianoStaff <<
+ \set PianoStaff.instrumentName = "Piano "
+ \new Staff = "upper" \upper
+ \new Staff = "lower" \lower
+ >>
+ }
+
+ \markup {
+ \fill-line {
+ \override #'(line-width . 60)
+ \justify-string #"Lorem ipsum dolor sit amet consectetuer
+adipiscing elit,
+ sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+magna aliquam erat volutpat.
+ Ut wisi enim ad minim veniam, quis nostrud exerci tation
+ullamcorper suscipit lobortis
+ nisl ut aliquip ex ea commodo consequat. Duis autem vel eum
+iriure dolor in hendrerit
+ in vulputate velit esse molestie consequat, vel illum dolore
+eu feugiat nulla facilisis
+ at vero eros et accumsan et iusto odio dignissim qui blandit
+praesent luptatum zzril
+ delenit augue duis dolore te feugait nulla facilisi." }
+ }
+
+ \score {
+ \new PianoStaff <<
+ \set PianoStaff.instrumentName = "Piano "
+ \new Staff = "upper" \upper
+ \new Staff = "lower" \lower
+ >>
+ }
+ \markup {\justify-string #"Lorem ipsum dolor sit amet
+consectetuer adipiscing elit,
+ sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+magna aliquam erat volutpat.
+ Ut wisi enim ad minim veniam, quis nostrud exerci tation
+ullamcorper suscipit lobortis
+ nisl ut aliquip ex ea commodo consequat. Duis autem vel eum
+iriure dolor in hendrerit
+ in vulputate velit esse molestie consequat, vel illum dolore
+eu feugiat nulla facilisis
+ at vero eros et accumsan et iusto odio dignissim qui blandit
+praesent luptatum zzril
+ delenit augue duis dolore te feugait nulla facilisi. Nam
+liber tempor cum soluta nobis
+ eleifend option congue nihil imperdiet doming id quod mazim
+placerat facer possim assum.
+ Typi non habent claritatem insitam; est usus legentis in iis
+qui facit eorum claritatem.
+ Investigationes demonstraverunt lectores legere me lius quod
+ii legunt saepius.
+ Claritas est etiam processus dynamicus, qui sequitur
+mutationem consuetudium lectorum.
+ Mirum est notare quam littera gothica, quam nunc putamus
+parum claram, anteposuerit litterarum
+ formas humanitatis per seacula quarta decima et quinta
+decima. Eodem modo typi, qui nunc nobis
+ videntur parum clari, fiant sollemnes in futurum."}
+ }
--- /dev/null
+%% Do not edit this file; it is auto-generated from LSR!
+\version "2.11.23"
+
+\header { texidoc = "
+When you put a long \markup text in a \mark object, LilyPond stretches
+the measure to encompass the complete markup. This can be avoided by
+overriding the 'X-extent property of the RehearsalMark object, as
+demonstrated in this snippet.
+" }
+
+\paper{ indent = 0}
+ \new PianoStaff {<<
+ {\new Staff
+ \override Score.RehearsalMark #'self-alignment-X = #left
+ R1 R1 \mark \markup {"long markup with default horizontal extent"} R1*2 }
+ \new Staff {\repeat unfold 16 {c4}}
+ >>
+}
+\new PianoStaff {<<
+ {\new Staff
+ \override Score.RehearsalMark #'self-alignment-X = #left
+ \override Score.RehearsalMark #'X-extent = #'(0 . 0)
+ R1 R1 \mark \markup {"long markup without horizontal extent"} R1*2 }
+ \new Staff {\repeat unfold 16 {c4}}
+ >>
+}
+
\relative c'' {
\time 3/4
+ % FIXME: standard vs default, alteration-FOO vs FOO-alteration
+ \override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter default } c ces
\override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
--- /dev/null
+\header {
+ texidoc = "beamlets don't run to end of line if there are no other
+ beamlets on the same height."
+
+}
+\version "2.11.30"
+
+\paper {
+ raggedright = ##t
+}
+
+\relative {
+ \time 1/4
+ \override Beam #'breakable = ##t
+ r16 r16. c32[ c16 \break c8. ] r16
+}
-\version "2.11.29"
+\version "2.11.28"
\header {
texidoc="In feathered beams, stems in knees reach up to the feathered part correctly.
--- /dev/null
+\header {
+
+ texidoc = "Generate valid postscript even if dash-period is small
+ compared to line thickness."
+
+}
+
+\version "2.11.29"
+\relative {
+ \override Staff.OttavaBracket #'dash-period = #0.1
+ \override Score.OttavaBracket #'dash-fraction = #1
+
+ #(set-octavation 1)
+ c4 c
+}
+
--- /dev/null
+\version "2.11.29"
+
+\header {
+ texidoc = "Slurs that depend on a cross-staff beam are not calculated until after line-breaking."
+}
+
+\paper{ ragged-right=##t }
+\score {
+ \new PianoStaff <<
+ \context Staff = rh \relative { c'8([ d) \change Staff = lh c,] }
+ \context Staff = lh { s4. }
+ >>
+}
\ No newline at end of file
--- /dev/null
+\version "2.11.28"
+
+\header {
+ texidoc = "Voices that go back and forth between staves do not confuse the spacing engine."
+}
+
+\paper { ragged-right = ##t }
+
+\new PianoStaff <<
+ \new Staff = "rh" \relative c'' {
+ \time 6/8
+ bes16 c d
+ \change Staff = lh
+ \stemUp bes a g
+ \change Staff = rh
+ \stemDown bes c d
+ \change Staff = lh
+ \clef bass
+ \stemUp bes, a g
+
+ }
+ \new Staff = "lh" \relative c' {
+ s2.
+ }
+>>
\ No newline at end of file
--- /dev/null
+\version "2.11.28"
+
+\header {
+ texidoc = "Spacing corrections for kneed beams still work when compression is involved."
+}
+
+\paper { line-width = 14.4 \cm }
+rh = \change Staff = "rh"
+lh = \change Staff = "lh"
+\new PianoStaff <<
+ \new Staff ="rh" {
+ s1*3
+ }
+ \new Staff ="lh" {
+ \clef bass
+ \repeat unfold 12 { \rh a'16 \lh d \rh a' \lh d \noBreak}
+ }
+>>
\ No newline at end of file
--- /dev/null
+\version "2.11.28"
+\paper {ragged-right = ##t}
+\header {
+ texidoc = "The spacing engine avoids collisions between non-adjacent columns."
+}
+
+
+foo = \relative c'' {
+ g'32[ c,]
+}
+
+bar = \relative c {
+ c16 <feses ases ceses eses ases ceses eses geses beses deses>4
+}
+
+\new PianoStaff {
+ <<
+ \new Voice \foo
+ \new Voice \bar
+ >>
+}
\ No newline at end of file
--- /dev/null
+\version "2.11.28"
+\paper {ragged-right = ##t}
+\header {
+ texidoc = "The spacing engine avoids collisions between non-adjacent columns."
+}
+
+
+foo = \relative c'' {
+ g'32[ c,]
+}
+
+bar = \relative c {
+ s16 <feses ases ceses eses ases ceses eses geses beses deses>4
+}
+
+\new PianoStaff {
+ <<
+ \new Voice \foo
+ \new Voice \bar
+ >>
+}
--- /dev/null
+\version "2.11.29"
+
+\header {
+ texidoc = "When space-to-barline is false, we measure the space between the note and the
+start of the clef. When space-to-barline is true, we measure the space between the note and
+the start of the barline."
+}
+
+\paper {ragged-right = ##t}
+
+{
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1 16)
+ c'2 \clef bass c'2 \clef treble
+ \override NoteSpacing #'space-to-barline = ##f
+ c'2 \clef bass c'2 \clef treble
+
+ % the following two measures should be spaced identically
+ \override NoteSpacing #'space-to-barline = ##t
+ c'2 c'2
+ \override NoteSpacing #'space-to-barline = ##f
+ c'2 c'2
+ c'1
+}
\ No newline at end of file
if (rank > end)
break;
- else if (rank >= start && it->pure_is_visible (start, end))
+ else if (rank >= start && it->pure_is_visible (start, end)
+ && !to_boolean (it->get_property ("cross-staff")))
{
Interval dims = it->pure_height (common, start, end);
if (!dims.is_empty ())
for (vsize i = 0; i < spanners.size (); i++)
{
Interval_t<int> rank_span = spanners[i]->spanned_rank_interval ();
- if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start)
+ if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start
+ && !to_boolean (spanners[i]->get_property ("cross-staff")))
{
Interval dims = spanners[i]->pure_height (common, start, end);
if (!dims.is_empty ())
Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
Slice ranks;
-
for (vsize i = 0; i < stems.size (); i++)
{
Grob *stem = stems[i];
Beam_stem_segment seg;
seg.stem_ = stem;
seg.stem_x_ = stem_x;
- seg.rank_ = 2 * i + (d+1)/2;
+ seg.rank_ = 2 * i + (d+1)/2;
seg.width_ = stem_width;
seg.stem_index_ = i;
seg.dir_ = d;
Direction event_dir = LEFT;
do
{
- bool on_bound = (event_dir == LEFT) ? j == 0 :
+ bool on_line_bound = (segs[j].dir_ == LEFT) ? segs[j].stem_index_ == 0
+ : segs[j].stem_index_ == stems.size() - 1;
+ bool on_beam_bound = (event_dir == LEFT) ? j == 0 :
j == segs.size () - 1;
-
bool inside_stem = (event_dir == LEFT)
- ? segs[j].stem_index_ > 0
- : segs[j].stem_index_ + 1 < stems.size () ;
+ ? segs[j].stem_index_ > 0
+ : segs[j].stem_index_ + 1 < stems.size () ;
- bool event = on_bound
+ bool event = on_beam_bound
|| abs (segs[j].rank_ - segs[j+event_dir].rank_) > 1
|| (abs (vertical_count) >= segs[j].max_connect_
|| abs (vertical_count) >= segs[j + event_dir].max_connect_);
current.horizontal_[event_dir] = segs[j].stem_x_;
if (segs[j].dir_ == event_dir)
{
- if (on_bound
+ if (on_line_bound
&& me->get_bound (event_dir)->break_status_dir ())
{
current.horizontal_[event_dir]
static void add_unordered_grob (Grob *, SCM nm, Grob *);
static void set_ordered (Grob *, SCM, bool);
static Grob_array *get_grob_array (Grob*, SCM);
+ static Grob *find_grob (Grob*, SCM, bool (*pred) (Grob*));
};
vector<Grob*> const &internal_extract_grob_array (Grob const *elt, SCM symbol);
static vector<Box> boxes (Grob *me, Grob *left);
static Skyline conditional_skyline (Grob *, Grob *);
static Grob *extremal_break_aligned_grob (Grob *, Direction, Interval *);
- static bool set_distance (Drul_array<Item *>, Real);
+ static Real set_distance (Item *left, Item *right, Real padding);
static bool is_empty (Grob *me);
static void add_item (Grob *, Item *);
static void add_conditional_item (Grob *, Grob *);
source file of the GNU LilyPond music typesetter
- (c) 1999--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 1999--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#ifndef SIDE_POSITION_INTERFACE_HH
VALUE "FileDescription", "LilyPond"
VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@.@BUILD_VERSION@"
VALUE "InternalName", "LilyPond@"
- VALUE "LegalCopyright", "Copyright (C) 1995--2005 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others."
+ VALUE "LegalCopyright ", "Copyright (C) 1995--2007 Han-Wen Nienhuys and Jan Nieuwenhuizen, and others."
VALUE "OriginalFilename", "lilypond.exe"
VALUE "ProductName", "LilyPond"
VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_LEVEL@"
{
dash_fraction = min (max (dash_fraction, 0.0), 1.0);
Real on = dash_fraction * dash_period + thick;
- Real off = dash_period - on;
+ Real off = max (0.0, dash_period - on);
SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
scm_from_double (thick),
Real len = (to-from).length ();
int n = (int) rint ((len - period * fraction) / period);
+ n = max (0, n);
if (n > 0)
{
/*
ly_quote_scm (l),
SCM_UNDEFINED));
- Box box (Interval (0, 0), Interval (0, 0));
+ Box box (b.extent (X_AXIS), b.extent (Y_AXIS));
return Stencil (box, at);
}
{
text_->set_parent (head, X_AXIS);
if (melisma_busy (voice))
- text_->set_property ("self-alignment-X", scm_from_int (LEFT));
+ text_->set_property ("self-alignment-X", get_property("lyricMelismaAlignment"));
}
else
{
ADD_TRANSLATOR (Lyric_engraver,
/* doc */ "",
/* create */ "LyricText",
- /* read */ "",
+ /* read */ "lyricMelismaAlignment",
/* write */ "");
#include "item.hh"
#include "pointer-group-interface.hh"
+#include <map>
+
#include "translator.icc"
class Note_spacing_engraver : public Engraver
{
+ typedef map <Context*, Grob*> Last_spacing_map;
+ Last_spacing_map last_spacings_;
Grob *last_spacing_;
- Context *last_spacing_parent_context_;
Grob *spacing_;
void
Note_spacing_engraver::derived_mark () const
{
- if (last_spacing_parent_context_)
- scm_gc_mark (last_spacing_parent_context_->self_scm ());
+ for (Last_spacing_map::const_iterator i = last_spacings_.begin ();
+ i != last_spacings_.end (); i++)
+ scm_gc_mark (i->first->self_scm ());
}
Note_spacing_engraver::Note_spacing_engraver ()
{
- last_spacing_parent_context_ = 0;
- last_spacing_ = 0;
spacing_ = 0;
+ last_spacing_ = 0;
}
void
void
Note_spacing_engraver::finalize ()
{
- if (last_spacing_
- && last_spacing_parent_context_
- && last_spacing_parent_context_ == context ()->get_parent_context ()
- && !unsmob_grob_array (last_spacing_->get_object ("right-items")))
+ Context *parent = context ()->get_parent_context ();
+ Grob *last_spacing = last_spacings_[parent];
+
+ if (last_spacing
+ && !unsmob_grob_array (last_spacing->get_object ("right-items")))
{
- SCM ccol = get_property ("currentCommandColumn");
- Grob *column = unsmob_grob (ccol);
+ Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
- Pointer_group_interface::add_grob (last_spacing_,
+ Pointer_group_interface::add_grob (last_spacing,
ly_symbol2scm ("right-items"),
- column);
+ col);
}
}
void
Note_spacing_engraver::stop_translation_timestep ()
{
- if (last_spacing_
- && last_spacing_parent_context_
- && last_spacing_parent_context_ == context ()->get_parent_context ()
+ Context *parent = context ()->get_parent_context ();
+ Grob *last_spacing = last_spacings_[parent];
+
+ if (last_spacing
&& to_boolean (get_property ("hasStaffSpacing")))
{
Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
- Pointer_group_interface::add_grob (last_spacing_,
+ Pointer_group_interface::add_grob (last_spacing,
ly_symbol2scm ("right-items"),
col);
}
if (spacing_)
{
+ last_spacings_[parent] = spacing_;
last_spacing_ = spacing_;
- last_spacing_parent_context_ = context ()->get_parent_context ();
spacing_ = 0;
}
#include "note-spacing.hh"
+#include "bar-line.hh"
#include "directional-element-interface.hh"
#include "grob-array.hh"
#include "paper-column.hh"
adjust things so there are no collisions.
*/
Drul_array<Skyline> skys = Spacing_interface::skylines (me, right_col);
- Real min_dist = max (0.0, skys[LEFT].distance (skys[RIGHT]));
- Real min_desired_space = left_head_end + (min_dist - left_head_end) / 2;
-
- /* if the right object sticks out a lot, include a bit of extra space.
- But only for non-musical-columns; this shouldn't apply to accidentals */
- if (!Paper_column::is_musical (right_col))
- min_desired_space = max (min_desired_space,
- left_head_end + LEFT * skys[RIGHT].max_height ());
+ Real distance = skys[LEFT].distance (skys[RIGHT]);
+ Real min_dist = max (0.0, distance);
+ Real min_desired_space = left_head_end + (min_dist - left_head_end + base_space - increment) / 2;
+ Real ideal = base_space - increment + left_head_end;
+
+ /* If we have a NonMusical column on the right, we measure the ideal distance
+ to the bar-line (if present), not the start of the column. */
+ if (!Paper_column::is_musical (right_col)
+ && !skys[RIGHT].is_empty ()
+ && to_boolean (me->get_property ("space-to-barline")))
+ {
+ Grob *bar = Pointer_group_interface::find_grob (right_col,
+ ly_symbol2scm ("elements"),
+ Bar_line::has_interface);
- Real ideal = base_space - increment + min_desired_space;
+ if (bar)
+ {
+ Real shift = bar->extent (right_col, X_AXIS)[LEFT];
+ ideal -= shift;
+ min_desired_space -= max (shift, 0.0);
+ }
+ else
+ ideal -= right_col->extent (right_col, X_AXIS)[RIGHT];
+ }
+ ideal = max (ideal, min_desired_space);
stem_dir_correction (me, right_col, increment, &ideal, &min_desired_space);
- Spring ret (ideal, min_dist);
- ret.set_inverse_compress_strength (max (0.0, ideal - max (min_dist, min_desired_space)));
+ Spring ret (max (0.0, ideal), min_dist);
+ ret.set_inverse_compress_strength (max (0.0, ideal - min_desired_space));
ret.set_inverse_stretch_strength (max (0.1, base_space - increment));
return ret;
}
for (vsize i = 0; i < items.size (); i++)
{
Item *it = dynamic_cast<Item *> (items[i]);
+ if (!Note_column::has_interface (it))
+ continue;
/*
don't correct if accidentals are sticking out of the right side.
"right-items "
"same-direction-correction "
"stem-spacing-correction "
+ "space-to-barline "
);
SCM markup = me->get_property ("text");
Stencil text;
if (Text_interface::is_markup (markup))
- text = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (), properties, markup));
+ text = *unsmob_stencil (Text_interface::interpret_markup (layout->self_scm (),
+ properties, markup));
Drul_array<Real> shorten = robust_scm2interval (me->get_property ("shorten-pair"),
Interval (0, 0));
#include "system.hh"
#include "international.hh"
#include "accidental-placement.hh"
+#include "accidental-interface.hh"
#include "axis-group-interface.hh"
#include "context.hh"
#include "note-spacing.hh"
Item *elem = items_[i];
Grob *col = Item::is_non_musical (elem) ? command_column_ : musical_column_;
- if (!elem->get_parent (X_AXIS)
- || !unsmob_grob (elem->get_object ("axis-group-parent-X")))
- {
- Axis_group_interface::add_element (col, elem);
- }
- else if (Accidental_placement::has_interface (elem))
+ if (!elem->get_parent (X_AXIS))
+ elem->set_parent (col, X_AXIS);
+ if (!unsmob_grob (elem->get_object ("axis-group-parent-X")))
+ elem->set_object ("axis-group-parent-X", col->self_scm ());
+
+ if (Accidental_placement::has_interface (elem))
Separation_item::add_conditional_item (col, elem);
- else
+ else if (!Accidental_interface::has_interface (elem))
Separation_item::add_item (col, elem);
}
items_.clear ();
}
while (flip (&d) != LEFT);
+ skys[RIGHT].merge (Separation_item::conditional_skyline (right, left));
+
return max (0.0, skys[LEFT].distance (skys[RIGHT]));
}
return arr;
}
+Grob *
+Pointer_group_interface::find_grob (Grob *me, SCM sym, bool (*pred) (Grob*))
+{
+ Grob_array *arr = get_grob_array (me, sym);
+
+ for (vsize i = 0; i < arr->size (); i++)
+ if (pred (arr->grob (i)))
+ return arr->grob (i);
+
+ return 0;
+}
+
void
Pointer_group_interface::add_grob (Grob *me, SCM sym, Grob *p)
{
Pointer_group_interface::add_grob (me, ly_symbol2scm ("conditional-elements"), e);
}
-bool
-Separation_item::set_distance (Drul_array<Item *> items,
- Real padding)
+Real
+Separation_item::set_distance (Item *l, Item *r, Real padding)
{
- Drul_array<Skyline_pair*> lines (Skyline_pair::unsmob (items[LEFT]->get_property ("horizontal-skylines")),
- Skyline_pair::unsmob (items[RIGHT]->get_property ("horizontal-skylines")));
- Skyline right = conditional_skyline (items[RIGHT], items[LEFT]);
+ Drul_array<Skyline_pair*> lines (Skyline_pair::unsmob (l->get_property ("horizontal-skylines")),
+ Skyline_pair::unsmob (r->get_property ("horizontal-skylines")));
+ Skyline right = conditional_skyline (r, l);
right.merge ((*lines[RIGHT])[LEFT]);
Real dist = padding + (*lines[LEFT])[RIGHT].distance (right);
{
Rod rod;
- rod.item_drul_ = items;
+ rod.item_drul_ = Drul_array<Item*> (l, r);
rod.distance_ = dist;
rod.add_to_cols ();
}
- return dist > 0;
+ return max (dist, 0.0);
}
bool
#include "bezier.hh"
#include "directional-element-interface.hh"
#include "font-interface.hh"
+#include "item.hh"
#include "pointer-group-interface.hh"
#include "lookup.hh"
#include "main.hh" // DEBUG_SLUR_SCORING
extract_grob_set (me, "note-columns", cols);
extract_grob_set (me, "encompass-objects", extras);
+ for (vsize i = 0; i < cols.size (); i++)
+ {
+ if (Grob *s = Note_column::get_stem (cols[i]))
+ if (to_boolean (s->get_property ("cross-staff")))
+ return SCM_BOOL_T;
+ }
+
/* the separation items are dealt with in replace_breakable_encompass_objects
so we can ignore them here */
vector<Grob*> non_sep_extras;
Real base = note_spacing (me, lc, rc, options);
Spring spring = Note_spacing::get_spacing (sp, rc, base, options->increment_);
- dists[d] = max (dists[d], spring.distance () - options->increment_);
+ dists[d] = max (dists[d], spring.min_distance ());
}
else if (Staff_spacing::has_interface (sp))
{
#include "paper-column.hh"
#include "separation-item.hh"
#include "skyline.hh"
+#include "system.hh"
/* return the right-pointing skyline of the left-items and the left-pointing
skyline of the right-items (with the skyline of the left-items in
Drul_array<vector<Grob*> > items (ly_scm2link_array (orig->get_object ("left-items")),
ly_scm2link_array (orig->get_object ("right-items")));
+ Grob *system = me->get_system ();
+ Grob *left_col = dynamic_cast<Item*> (me)->get_column ();
+
+ Drul_array<Grob*> columns (left_col, right_col);
+
Direction d = LEFT;
do
{
- skylines[d].set_minimum_height (0.0);
-
for (vsize i = 0; i < items[d].size (); i++)
{
- Grob *g = items[d][i];
- if (Item *it = dynamic_cast<Item*> (g))
- if (Grob *piece = it->find_prebroken_piece (break_dirs[d]))
+ Item *g = dynamic_cast<Item*> (items[d][i]);
+ if (g)
+ if (Item *piece = g->find_prebroken_piece (break_dirs[d]))
g = piece;
- if (Separation_item::has_interface (g))
+ if (g && Separation_item::has_interface (g) && g->get_column () == columns[d])
{
SCM sky_scm = g->get_property ("horizontal-skylines");
Skyline_pair *sky = Skyline_pair::unsmob (sky_scm);
+
+ extract_grob_set (g, "elements", elts);
+ Grob *ycommon = common_refpoint_of_array (elts, g, Y_AXIS);
+ Real shift = ycommon->pure_relative_y_coordinate (system, 0, INT_MAX);
+
+ skylines[d].shift (-shift);
+
if (sky)
skylines[d].merge ((*sky)[-d]);
else
programming_error ("separation item has no skyline");
-
+
if (d == RIGHT && items[LEFT].size ())
skylines[d].merge (Separation_item::conditional_skyline (items[d][i], items[LEFT][0]));
+
+ skylines[d].shift (shift);
}
}
}
this will add a new column to RIGHT-ITEMS. Here we look at the
columns, and return the left-most. If there are multiple columns, we
prune RIGHT-ITEMS.
+
+ If we end up pruning, we add a left-neighbor to every column that
+ gets pruned. This ensures that loose columns in cross-staff music
+ do indeed get marked as loose. The problem situation is when a voice
+ passes from staff 1 to staff 2 and a clef appears later on in staff 1.
+ Then the NoteSpacing attached to the last note in staff 1 has two
+ right-items: one pointing to the next note in staff 2 and one pointing
+ to the clef. We will prune the clef right-item here and, unless we add
+ a left-neighbor to the clef, it won't get marked as loose.
*/
Item *
Spacing_interface::right_column (Grob *me)
mincol = col;
}
+ else if (rank > min_rank)
+ prune = true;
}
if (prune && a)
for (vsize i = right.size (); i--;)
{
if (dynamic_cast<Item *> (right[i])->get_column () != mincol)
- right.erase (right.begin () + i);
+ {
+ extract_grob_set (right[i], "left-neighbors", lns);
+ if (lns.empty ())
+ Pointer_group_interface::add_grob (right[i],
+ ly_symbol2scm ("left-neighbors"),
+ dynamic_cast<Item*> (me)->get_column ());
+
+ right.erase (right.begin () + i);
+ }
}
}
}
static void
-set_column_rods (vector<Grob*> const &cols, vsize idx, Real padding)
+set_column_rods (vector<Grob*> const &cols, Real padding)
{
+ /* distances[i] will be the minimum distance between column i and column i+1 */
+ vector<Real> distances;
- /*
- This is an inner loop: look for the first normal (unbroken) Left
- grob. This looks like an inner loop (ie. quadratic total), but in
- most cases, the interesting L will just be the first entry of
- NEXT, making it linear in most of the cases.
- */
- Item *r = dynamic_cast<Item*> (cols[idx]);
+ for (vsize i = 1; i < cols.size (); i++)
+ {
+ Item *r = dynamic_cast<Item*> (cols[i]);
+ Item *rb = r->find_prebroken_piece (LEFT);
- if (Separation_item::is_empty (r))
- return;
+ if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
+ continue;
- bool constraint = false;
- bool grace = false;
+ Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
+ Real right_stickout = skys ? (*skys)[LEFT].max_height () : 0.0;
- idx--;
- do
- {
- Item *l = dynamic_cast<Item*> (cols[idx]);
- Item *lb = l->find_prebroken_piece (RIGHT);
+ Drul_array<Item*> r_cols (r, rb);
+ Drul_array<Real> cur_dist (0.0, 0.0);
- if (Separation_item::is_empty (l) && (!lb || Separation_item::is_empty (lb)))
- continue;
+ /* This is an inner loop and hence it is potentially quadratic. However, we only continue
+ as long as there is a rod to insert. Therefore, this loop will usually only execute
+ a constant number of times per iteration of the outer loop. */
+ for (vsize j = i; j--;)
+ {
+ Item *l = dynamic_cast<Item*> (cols[j]);
+ Item *lb = l->find_prebroken_piece (RIGHT);
+ Skyline_pair *skys = Skyline_pair::unsmob (l->get_property ("horizontal-skylines"));
+ Real left_stickout = skys ? (*skys)[RIGHT].max_height () : 0.0;
+ bool done = true;
+
+ Direction d = LEFT;
+ do
+ {
+ if (j < i-1)
+ cur_dist[d] += distances[j];
- if (lb)
- Separation_item::set_distance (Drul_array<Item*> (lb, r), padding);
- constraint = Separation_item::set_distance (Drul_array<Item *> (l, r), padding);
+ Item *r_col = r_cols[d];
+ bool touches = right_stickout - left_stickout + cur_dist[d] < 0.0;
+ Real dist = 0.0;
+ /* we set a distance for the line-starter column even if it's non-broken counterpart
+ doesn't touch the right column. */
+ if (lb)
+ Separation_item::set_distance (lb, r_col, padding);
- /*
- This check is because grace notes are set very tight, and
- the accidentals of main note may stick out so far to cover
- a barline preceding the grace note.
- */
- grace = spanned_time_interval (l, r).length ().main_part_ == Rational (0);
+ if (touches || j == i-1)
+ dist = Separation_item::set_distance (l, r_col, padding);
- /*
- this grob doesn't cause a constraint. We look further until we
- find one that does.
- */
+ if (j == i-1 && d == LEFT)
+ distances.push_back (dist);
+
+ if (j == i-1)
+ cur_dist[d] = distances[j];
+
+ done = done && !touches;
+ }
+ while (flip (&d) != LEFT && rb);
+
+ /* we need the empty check for gregorian notation, where there are a lot of
+ extraneous paper-columns that we need to skip over */
+ if (done && !Separation_item::is_empty (l))
+ break;
+ }
}
- while (idx-- && (!constraint || grace));
}
+
void
Spacing_spanner::generate_springs (Grob *me,
vector<Grob*> const &cols,
Spacing_options const *options)
{
- Paper_column *prev = 0;
- for (vsize i = 0; i < cols.size (); i++)
+ Paper_column *prev = dynamic_cast<Paper_column*> (cols[0]);
+ for (vsize i = 1; i < cols.size (); i++)
{
Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
Paper_column *next = (i + 1 < cols.size ()) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
- if (i > 0)
- {
- generate_pair_spacing (me, prev, col, next, options);
- set_column_rods (cols, i, 0.1); // FIXME
- }
+ generate_pair_spacing (me, prev, col, next, options);
prev = col;
}
+
+ set_column_rods (cols, 0.1); // FIXME: padding
}
/*
Real avg_distance = 0;
Real min_distance = 0;
Real avg_stretch = 0;
+ Real avg_compress = 0;
for (vsize i = 0; i < springs.size (); i++)
{
avg_distance += springs[i].distance ();
avg_stretch += springs[i].inverse_stretch_strength ();
+ avg_compress += 1 / springs[i].inverse_compress_strength ();
min_distance = max (springs[i].min_distance (), min_distance);
}
avg_stretch /= springs.size ();
+ avg_compress /= springs.size ();
avg_distance /= springs.size ();
avg_distance = max (min_distance + 0.3, avg_distance);
Spring ret = Spring (avg_distance, min_distance);
ret.set_inverse_stretch_strength (avg_stretch);
+ ret.set_inverse_compress_strength (1 / avg_compress);
return ret;
}
if (!is_normal_stem (me))
return ly_interval2scm (iv);
- /* if we are part of a cross-staff beam, return empty */
- if (get_beam (me) && Beam::is_cross_staff (get_beam (me)))
- return ly_interval2scm (iv);
-
Real ss = Staff_symbol_referencer::staff_space (me);
- Real len = scm_to_double (calc_length (smob)) * ss / 2;
- Direction dir = get_grob_direction (me);
- Interval hp = head_positions (me);
- if (dir == UP)
- iv = Interval (0, len);
- else
- iv = Interval (-len, 0);
+ if (!to_boolean (me->get_property ("cross-staff")))
+ {
+ Real len = scm_to_double (calc_length (smob)) * ss / 2;
+ Direction dir = get_grob_direction (me);
- if (!hp.is_empty ())
- iv.translate (hp[dir] * ss / 2);
+ Interval hp = head_positions (me);
+ if (dir == UP)
+ iv = Interval (0, len);
+ else
+ iv = Interval (-len, 0);
+
+ if (!hp.is_empty ())
+ iv.translate (hp[dir] * ss / 2);
+ }
+
+ /* at a minimum, make the pure-height cover the staff symbol */
+ Real rad = Staff_symbol_referencer::staff_radius (me);
+ iv.add_point (-rad * ss);
+ iv.add_point (rad * ss);
return ly_interval2scm (iv);
}
do
{
Direction break_dir = bounds[d]->break_status_dir ();
-
Spanner *orig_spanner = dynamic_cast<Spanner*> (me->original ());
-
vsize neighbor_idx = me->get_break_index () - break_dir;
if (break_dir
&& d == RIGHT
bracket_visibility = ly_scm2bool (bracket);
else if (bracket == ly_symbol2scm ("if-no-beam"))
bracket_visibility = !par_beam;
-
SCM cpoints = me->get_property ("control-points");
if (scm_ilength (cpoints) < 2)
Interval x_span (points[LEFT][X_AXIS], points[RIGHT][X_AXIS]);
Drul_array<Real> positions (points[LEFT][Y_AXIS], points[RIGHT][Y_AXIS]);
-
-
Output_def *pap = me->layout ();
Grob *number_grob = unsmob_grob (me->get_object ("tuplet-number"));
stringNumberOrientations = #'(up down)
strokeFingerOrientations = #'(right)
+ lyricMelismaAlignment = #LEFT
markFormatter = #format-mark-letters
rehearsalMark = #1
subdivideBeams = ##f
$(outdir)/%.nexi: $(ITELY_FILES) $(ITEXI_FILES)
-MAKEINFO = LANG= $(MAKEINFO_PROGRAM) --enable-encoding --force
+MAKEINFO_FLAGS += --force
$(outdir)/%/index.html: $(outdir)/%.nexi $(outdir)/user-ln doc-po
mkdir -p $(dir $@)
%
% source file of the GNU LilyPond music typesetter
%
-% (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
fet_begingroup ("arrowheads");
% source file of the Feta (not an acronym for Font-En-Tja)
% pretty-but-neat music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% these macros help create ascii logging output
% source file of the Feta (not an acronym for Font-En-Tja)
% pretty-but-neat music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
% & Han-Wen Nienhuys <hanwen@xs4all.nl>
% & Juergen Reuter <reuter@ipd.uka.de>
%
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 0;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 1;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 2;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 3;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 4;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 5;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 6;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 7;
%
% source file of the Feta (Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
font_count := 8;
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
ex# := (dynamic_design_size / 2.4) * pt#;
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
fet_begingroup ("rests");
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
fet_begingroup ("brackettips");
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>,
% Jan Nieuwenhuizen <janneke@gnu.org>,
% Juergen Reuter <reuter@ipd.uka.de>
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2007 Jan Nieuwenhuizen <janneke@gnu.org>
height# := number_design_size;
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
%
% Voor Cup
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
% source file of the Feta (definitely not an abbreviation for Font-En-Tja)
% music font
%
-% (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
%
% this file is included by feta-scripts.mf
%
% source file of the Feta (not an abbreviation of Font-En-Tja) music font
%
-% (c) 1998--2006 Mats Bengtsson <matsb@s3.kth.se>,
+% (c) 1998--2007 Mats Bengtsson <matsb@s3.kth.se>,
% Christian Mondrup <scancm@biobase.dk>
fet_begingroup ("timesig");
%
% feta-toevallig.mf -- implement Accidentals
%
-% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("accidentals");
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("clefs");
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2000--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2000--2007 Juergen Reuter <reuter@ipd.uka.de>
%
save black_notehead_width;
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("flags");
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
%
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
% Neo-mensural heads originally by
% Christian Mondrup and Mats Bengtsson
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2001--2007 Juergen Reuter <reuter@ipd.uka.de>
%
% Neo-mensural rests originally by
% Christian Mondrup and Mats Bengtsson.
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("scripts");
%
% source file of LilyPond's pretty-but-neat music font
%
-% (c) 1998--2006 Mats Bengtsson <matsb@s3.kth.se>,
+% (c) 1998--2007 Mats Bengtsson <matsb@s3.kth.se>,
% Christian Mondrup <scancm@biobase.dk>
-% (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+% (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
%
fet_begingroup ("timesig");
# Copyright (C) 2003 Han-Wen Nienhuys, Jan Nieuwenhuizen
# This file is distributed under the same license as the lilypond package.
# Erwin Dieterich <bamse@gmx.de>, 1999
-# Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005
+# Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007
#
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.9.26\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-12-24 10:40+0100\n"
-"PO-Revision-Date: 2006-10-26 08:39+0200\n"
+"Project-Id-Version: lilypond 2.11.22\n"
+"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
+"POT-Creation-Date: 2007-04-28 12:03+0200\n"
+"PO-Revision-Date: 2007-08-10 21:15+0200\n"
"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
msgid "%s has been replaced by %s"
msgstr "%s wurde durch %s ersetzt"
-#: convertrules.py:2398
+#: convertrules.py:2408
msgid "LilyPond source must be UTF-8"
msgstr "LilyPond-Quelle muss UTF-8 sein"
-#: convertrules.py:2401
+#: convertrules.py:2411
msgid "Try the texstrings backend"
msgstr "Das texstrings-Backend probieren"
-#: convertrules.py:2404
+#: convertrules.py:2414
#, python-format
msgid "Do something like: %s"
msgstr "Folgendes versuchen: %s"
-#: convertrules.py:2407
+#: convertrules.py:2417
msgid "Or save as UTF-8 in your editor"
msgstr "Oder als UTF-8 im Editor sichern"
msgstr "%s wird ausgeführt..."
#: lilylib.py:203
-#, fuzzy, python-format
+#, python-format
msgid "Usage: %s"
-msgstr "Aufruf: %s\n"
+msgstr "Aufruf: %s"
-#: abc2ly.py:1349 convert-ly.py:80 lilypond-book.py:125 midi2ly.py:869
-#, fuzzy, python-format
+#: abc2ly.py:1342 convert-ly.py:71 lilypond-book.py:110 midi2ly.py:858
+#, python-format
msgid "%s [OPTION]... FILE"
-msgstr "Aufruf: %s [OPTIONEN]... DATEI"
+msgstr "%s [OPTIONEN]... DATEI"
-#: abc2ly.py:1351
-#, fuzzy, python-format
+#: abc2ly.py:1344
+#, python-format
msgid ""
"abc2ly converts ABC music files (see\n"
"%s) to LilyPond input."
msgstr ""
-"Dieses Programm wandelt ABC-Musikdateien in LilyPond-Eingabe um\n"
-"(siehe auch http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt)."
+"iabc2ly wandelt ABC-Musikdateien in LilyPond-Eingabe um\n"
+"(siehe auch %s)."
-#: abc2ly.py:1355 etf2ly.py:1200 midi2ly.py:885
+#: abc2ly.py:1348 etf2ly.py:1184 midi2ly.py:874
msgid "write output to FILE"
msgstr "Ausgabe in DATEI schreiben"
-#: abc2ly.py:1357
+#: abc2ly.py:1350
msgid "be strict about succes"
msgstr "bzgl. Erfolg streng sein"
-#: abc2ly.py:1359
+#: abc2ly.py:1352
msgid "preserve ABC's notion of beams"
msgstr "ABC's Prinzip der Balken beibehalten"
-#: abc2ly.py:1361 convert-ly.py:112 etf2ly.py:1208 lilypond-book.py:168
-#: midi2ly.py:911 musicxml2ly.py:505
-#, fuzzy
+#: abc2ly.py:1354 convert-ly.py:103 etf2ly.py:1192 lilypond-book.py:161
+#: midi2ly.py:900 musicxml2ly.py:506
msgid "Report bugs via"
-msgstr "Melden Sie Fehler an %s"
+msgstr "Melden Sie Fehler an"
-#: convert-ly.py:41
-#, fuzzy
+#: convert-ly.py:32
msgid ""
"Update LilyPond input to newer version. By default, update from the\n"
"version taken from the \\version command, to the current LilyPond version."
msgstr ""
-"LilyPond auf neuere Version bringen. Standardmäßig wird von der Version vom\n"
-"Kommando \\version zur aktuellen LilyPond-Version gegangen.\n"
-"\n"
-"Beispiele:\n"
-"\n"
-" convert-ly -e old.ly\n"
-" convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+"LilyPond-Eingabe auf neuere Version bringen. Standardmäßig wird von der\n"
+"Version vom Kommando \\version zur aktuellen LilyPond-Version gegangen."
-#: convert-ly.py:43 lilypond-book.py:73
-#, fuzzy
+#: convert-ly.py:34 lilypond-book.py:59
msgid "Examples:"
-msgstr "Beispiel:"
+msgstr "Beispiele:"
-#: convert-ly.py:56 lilypond-book.py:98 warn.cc:48 input.cc:90
+#: convert-ly.py:47 lilypond-book.py:83 warn.cc:48 input.cc:90
#, c-format, python-format
msgid "warning: %s"
msgstr "Warnung: %s"
-#: convert-ly.py:59 lilypond-book.py:101 warn.cc:54 input.cc:96 input.cc:104
+#: convert-ly.py:50 lilypond-book.py:86 warn.cc:54 input.cc:96 input.cc:104
#, c-format, python-format
msgid "error: %s"
msgstr "Fehler: %s"
-#: convert-ly.py:75 etf2ly.py:1190 lilypond-book.py:121 midi2ly.py:98
+#: convert-ly.py:66 etf2ly.py:1174 lilypond-book.py:106 midi2ly.py:87
msgid "Distributed under terms of the GNU General Public License."
msgstr "Vertrieben unter den Bedingungen der GNU General Public License."
-#: convert-ly.py:76 etf2ly.py:1191 lilypond-book.py:122 midi2ly.py:99
+#: convert-ly.py:67 etf2ly.py:1175 lilypond-book.py:107 midi2ly.py:88
msgid "It comes with NO WARRANTY."
msgstr "Es wird OHNE GARANTIE ausgeliefert."
-#: convert-ly.py:86 convert-ly.py:106
+#: convert-ly.py:77 convert-ly.py:97
msgid "VERSION"
msgstr "VERSION"
-#: convert-ly.py:88
+#: convert-ly.py:79
msgid "start from VERSION [default: \\version found in file]"
msgstr "bei VERSION anfangen [Standard: \\version in Datei gefunden]"
-#: convert-ly.py:91
+#: convert-ly.py:82
msgid "edit in place"
msgstr "vor Ort ändern"
-#: convert-ly.py:94
+#: convert-ly.py:85
msgid "do not add \\version command if missing"
msgstr "kein Kommando \\version hinzufügen, falls es fehlt"
-#: convert-ly.py:100
-#, fuzzy
+#: convert-ly.py:91
msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr "Regeln ausdrucken [Standard: --from=0, --to=@TOPLEVEL_VERSION@]"
+msgstr "Regeln anzeigen [Standard: --from=0, --to=@TOPLEVEL_VERSION@]"
-#: convert-ly.py:105
+#: convert-ly.py:96
msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
msgstr "zu VERSION konvertieren [Standard: @TOPLEVEL_VERSION@]"
-#: convert-ly.py:153
+#: convert-ly.py:144
msgid "Applying conversion: "
msgstr "Anwenden der Umwandlung: "
-#: convert-ly.py:166
-#, fuzzy
+#: convert-ly.py:157
msgid "Error while converting"
msgstr "Fehler beim Umwandeln"
-#: convert-ly.py:168
+#: convert-ly.py:159
msgid "Stopping at last succesful rule"
-msgstr ""
+msgstr "Abbruch bei letzter erfolgreicher Regel"
-#: convert-ly.py:190
+#: convert-ly.py:181
#, python-format
msgid "Processing `%s'... "
msgstr "»%s« wird verarbeitet..."
-#: convert-ly.py:277 relocate.cc:360 source-file.cc:54
+#: convert-ly.py:268 relocate.cc:363 source-file.cc:54
#, c-format, python-format
msgid "cannot open file: `%s'"
-msgstr "Kann Datei nicht öffnen: `%s'"
+msgstr "Datei kann nicht geöffnet werden: »%s«"
-#: convert-ly.py:284
-#, fuzzy, python-format
+#: convert-ly.py:275
+#, python-format
msgid "cannot determine version for `%s'. Skipping"
msgstr "Version für »%s« kann nicht erkannt werden. Wird übersprungen"
-#: etf2ly.py:1196
-#, fuzzy, python-format
+#: etf2ly.py:1180
+#, python-format
msgid "%s [OPTION]... ETF-FILE"
-msgstr "Aufruf: %s [OPTIONEN]... DATEI"
+msgstr "%s [OPTIONEN]... ETF-DATEI"
-#: etf2ly.py:1198
-#, fuzzy
+#: etf2ly.py:1182
msgid ""
"Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond "
-"file."
+"Finale product. etf2ly converts a subset of ETF to a ready-to-use LilyPond file."
msgstr ""
"Enigma Transport-Format ist ein von Coda Music Technology's Finale\n"
-"verwendetes Format. Dieses Programm wird eine Teilmenge von ETF in\n"
-"eine von Lilypond-verwendbare Datei umwandeln."
+"verwendetes Format. etf2ly wandelt eine Teilmenge von ETF in\n"
+"eine von Lilypond verwendbare Datei um."
-#: etf2ly.py:1201 midi2ly.py:886 musicxml2ly.py:498 main.cc:172 main.cc:178
+#: etf2ly.py:1185 midi2ly.py:875 musicxml2ly.py:499 main.cc:154 main.cc:159
msgid "FILE"
msgstr "DATEI"
-#: etf2ly.py:1203 lilypond-book.py:165 midi2ly.py:899 main.cc:185
+#: etf2ly.py:1187 lilypond-book.py:158 midi2ly.py:888 main.cc:163
msgid "show warranty and copyright"
msgstr "Informationen zu Gewährleistung und Copyright anzeigen"
-#: lilypond-book.py:71
-#, fuzzy
-msgid ""
-"Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr "LilyPond-Teile in Mischdatei (HTML, LaTeX oder texinfo) verarbeiten"
+#: lilypond-book.py:57
+msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
+msgstr "LilyPond-Teile in Mischdatei (HTML, LaTeX, texinfo oder DocBook) verarbeiten"
-#: lilypond-book.py:78
+#: lilypond-book.py:64
msgid "BOOK"
-msgstr ""
+msgstr "BUCH"
-#: lilypond-book.py:87
+#: lilypond-book.py:72
#, python-format
msgid "Exiting (%d)..."
msgstr "Beenden (%d)..."
-#: lilypond-book.py:119
+#: lilypond-book.py:104
#, python-format
msgid "Copyright (c) %s by"
msgstr "Copyright (c) %s bei"
-#: lilypond-book.py:129
+#: lilypond-book.py:114
msgid "FILTER"
msgstr "FILTER"
-#: lilypond-book.py:132
+#: lilypond-book.py:117
msgid "pipe snippets through FILTER [convert-ly -n -]"
msgstr "Auszüge durch FILTER [convert-ly -n -] leiten (Pipe)"
-#: lilypond-book.py:135
-#, fuzzy
-msgid ""
-"use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr ""
-"Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html) verwenden"
+#: lilypond-book.py:120
+msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
+msgstr "Ausgabeformat FORMAT (texi [Vorgabe], texi-html, latex, html, docbook) verwenden"
-#: lilypond-book.py:138
+#: lilypond-book.py:123
msgid "add DIR to include path"
msgstr "VERZ zum Einfügepfad hinzufügen"
-#: lilypond-book.py:139 lilypond-book.py:144 main.cc:171
+#: lilypond-book.py:124 lilypond-book.py:136 main.cc:153
msgid "DIR"
msgstr "VERZ"
-#: lilypond-book.py:143
+#: lilypond-book.py:129
+msgid "PAD"
+msgstr "FÜLLUNG"
+
+#: lilypond-book.py:135
msgid "write output to DIR"
msgstr "Ausgabe in DATEI schreiben"
-#: lilypond-book.py:147
+#: lilypond-book.py:140
msgid "COMMAND"
msgstr "BEFEHL"
-#: lilypond-book.py:148
+#: lilypond-book.py:141
msgid "process ly_files using COMMAND FILE..."
msgstr "ly_files mit BEFEHL DATEI... verarbeiten"
-#: lilypond-book.py:154
+#: lilypond-book.py:147
msgid "Create PDF files for use with PDFTeX"
-msgstr ""
+msgstr "PDF-Dateien für Verwendung mit PDFTeX erzeugen"
-#: lilypond-book.py:157
-#, fuzzy
+#: lilypond-book.py:150
msgid ""
"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
"must use this with dvips -h INPUT.psfonts"
msgstr ""
-"alle PostScript-Schriftarten für LaTeX entnehmen und in EINGABE.psfonts "
-"schreiben.\n"
+"alle PostScript-Schriftarten für LaTeX entnehmen und in EINGABE.psfonts schreiben.\n"
"Dies muss mit dvips -h EINGABE.psfonts verwendet werden"
-#: lilypond-book.py:160 midi2ly.py:896 musicxml2ly.py:489 main.cc:184
+#: lilypond-book.py:153 midi2ly.py:885 musicxml2ly.py:490 main.cc:162
msgid "be verbose"
msgstr "wortreich sein"
-#: lilypond-book.py:773
+#: lilypond-book.py:768
#, python-format
msgid "file not found: %s"
msgstr "Datei `%s' nicht gefunden"
-#: lilypond-book.py:1004
+#: lilypond-book.py:999
#, python-format
msgid "deprecated ly-option used: %s=%s"
msgstr "veraltete ly-option verwendet: %s=%s"
-#: lilypond-book.py:1007
+#: lilypond-book.py:1002
#, python-format
msgid "compatibility mode translation: %s=%s"
msgstr "Übersetzung im Kompatibilitätsmodus: %s=%s"
-#: lilypond-book.py:1011
+#: lilypond-book.py:1006
#, python-format
msgid "deprecated ly-option used: %s"
msgstr "veraltete ly-option verwendet: %s"
-#: lilypond-book.py:1014
+#: lilypond-book.py:1009
#, python-format
msgid "compatibility mode translation: %s"
msgstr "Übersetzung im Kompatibilitätsmodus: %s"
-#: lilypond-book.py:1033
+#: lilypond-book.py:1028
#, python-format
msgid "ignoring unknown ly option: %s"
msgstr "unbekannte Option ignoriert: %s"
-#: lilypond-book.py:1388
+#: lilypond-book.py:1382
#, python-format
msgid "Opening filter `%s'"
msgstr "Filter »%s« wird geöffnet"
-#: lilypond-book.py:1405
+#: lilypond-book.py:1399
#, python-format
msgid "`%s' failed (%d)"
msgstr "»%s« gescheitert (%d)"
-#: lilypond-book.py:1406
+#: lilypond-book.py:1400
msgid "The error log is as follows:"
msgstr "Das Fehlerprotokoll lautet wie folgt:"
-#: lilypond-book.py:1476
+#: lilypond-book.py:1472
msgid "cannot find \\begin{document} in LaTeX document"
-msgstr ""
+msgstr "\\begin{document} in LaTeX-Dokument kann nicht gefunden werden"
-#: lilypond-book.py:1586
+#: lilypond-book.py:1583
msgid "Writing snippets..."
msgstr "Auszüge werden geschrieben..."
-#: lilypond-book.py:1591
+#: lilypond-book.py:1588
msgid "Processing..."
msgstr "Verarbeiten..."
-#: lilypond-book.py:1595
+#: lilypond-book.py:1592
msgid "All snippets are up to date..."
msgstr "Alle Auszüge sind auf dem neuesten Stand..."
-#: lilypond-book.py:1605
+#: lilypond-book.py:1602
#, python-format
msgid "cannot determine format for: %s"
msgstr "Format für %s kann nicht ermittelt werden"
-#: lilypond-book.py:1616
+#: lilypond-book.py:1613
#, python-format
msgid "%s is up to date."
msgstr "%s ist aktuell."
-#: lilypond-book.py:1622
+#: lilypond-book.py:1619
#, python-format
msgid "Writing `%s'..."
msgstr "»%s« wird geschrieben..."
-#: lilypond-book.py:1677
+#: lilypond-book.py:1674
msgid "Output would overwrite input file; use --output."
msgstr "Ausgabe würde Eingabedatei überschreiben; verwenden Sie --output."
-#: lilypond-book.py:1681
+#: lilypond-book.py:1678
#, python-format
msgid "Reading %s..."
msgstr "%s lesen..."
-#: lilypond-book.py:1700
+#: lilypond-book.py:1697
msgid "Dissecting..."
msgstr "Zerlegen..."
-#: lilypond-book.py:1716
+#: lilypond-book.py:1713
#, python-format
msgid "Compiling %s..."
msgstr "%s kompilieren..."
-#: lilypond-book.py:1725
+#: lilypond-book.py:1722
#, python-format
msgid "Processing include: %s"
msgstr "Einfügung wird verarbeitet: %s"
-#: lilypond-book.py:1739
+#: lilypond-book.py:1736
#, python-format
msgid "Removing `%s'"
msgstr "»%s« wird gelöscht"
-#: lilypond-book.py:1815
-#, python-format
-msgid "Writing fonts to %s..."
-msgstr "Schriftarten werden nach %s geschrieben..."
-
-#: lilypond-book.py:1830
+#: lilypond-book.py:1769
msgid "option --psfonts not used"
msgstr "Option --psfonts nicht verwendet"
-#: lilypond-book.py:1831
+#: lilypond-book.py:1770
msgid "processing with dvips will have no fonts"
msgstr "Verarbeitung mit dvips wird keine Schriftarten haben"
-#: lilypond-book.py:1834
+#: lilypond-book.py:1773
msgid "DVIPS usage:"
msgstr "DVIPS-Aufruf:"
-#: midi2ly.py:106 lily-library.scm:624 lily-library.scm:632
+#: lilypond-book.py:1829
+#, python-format
+msgid "Writing fonts to %s..."
+msgstr "Schriftarten werden nach %s geschrieben..."
+
+#: midi2ly.py:95 lily-library.scm:577 lily-library.scm:586
msgid "warning: "
msgstr "Warnung: "
-#: midi2ly.py:109 midi2ly.py:924
+#: midi2ly.py:98 midi2ly.py:913
msgid "error: "
msgstr "Fehler: "
-#: midi2ly.py:110
+#: midi2ly.py:99
msgid "Exiting ... "
msgstr "Beenden ... "
-#: midi2ly.py:857
+#: midi2ly.py:846
#, python-format
msgid "%s output to `%s'..."
msgstr "%s nach »%s« ausgeben..."
-#: midi2ly.py:871 musicxml2ly.py:485
-#, fuzzy, python-format
+#: midi2ly.py:860 musicxml2ly.py:486
+#, python-format
msgid "Convert %s to LilyPond input."
-msgstr "mup nach LilyPond-Quelltext konvertieren."
+msgstr "%s in LilyPond-Quelltext umwandeln."
-#: midi2ly.py:875
+#: midi2ly.py:864
msgid "print absolute pitches"
msgstr "Absolute Tonhöhen ausgeben"
-#: midi2ly.py:877 midi2ly.py:889
+#: midi2ly.py:866 midi2ly.py:878
msgid "DUR"
msgstr "DAUER"
-#: midi2ly.py:878
+#: midi2ly.py:867
msgid "quantise note durations on DUR"
msgstr "Notenlängen auf DAUER quantisieren"
-#: midi2ly.py:881
+#: midi2ly.py:870
msgid "print explicit durations"
msgstr "Explizite Notenlängen ausgeben"
-#: midi2ly.py:882
+#: midi2ly.py:871
msgid "set key: ALT=+sharps|-flats; MINOR=1"
msgstr "Tonart setzen: VORZ=+Kreuze|-B's; MOLL=1"
-#: midi2ly.py:883
+#: midi2ly.py:872
msgid "ALT[:MINOR]"
msgstr "VORZ[:MOLL]"
-#: midi2ly.py:888
+#: midi2ly.py:877
msgid "quantise note starts on DUR"
msgstr "Notenanfänge auf DAUER quantisieren"
-#: midi2ly.py:891
+#: midi2ly.py:880
msgid "DUR*NUM/DEN"
msgstr "DAUER*ZÄHLER/NENNER"
# tuplet = Wertaufteilung nach: Peter Giger: Die Kunst des Rhythmus, Seite 25
-#: midi2ly.py:894
+#: midi2ly.py:883
msgid "allow tuplet durations DUR*NUM/DEN"
msgstr "Wertaufteilungsdauern DAUER*ZÄHLER/NENNER erlauben"
-#: midi2ly.py:902
+#: midi2ly.py:891
msgid "treat every text as a lyric"
msgstr "Jeden Text als Liedtext behandeln"
-#: midi2ly.py:905
-#, fuzzy
+#: midi2ly.py:894
msgid "Examples"
-msgstr "Beispiel:"
+msgstr "Beispiele"
-#: midi2ly.py:925
+#: midi2ly.py:914
msgid "no files specified on command line."
msgstr "Keine Dateien auf der Kommandozeile angegeben."
-#: musicxml2ly.py:473
+#: musicxml2ly.py:474
msgid "musicxml2ly FILE.xml"
-msgstr ""
+msgstr "musicxml2ly DATEI.xml"
-#: musicxml2ly.py:476
-#, fuzzy, python-format
+#: musicxml2ly.py:477
+#, python-format
msgid ""
"This program is free software. It is covered by the GNU General Public\n"
"License and you are welcome to change it and/or distribute copies of it\n"
"under certain conditions. Invoke as `%s --warranty' for more\n"
"information."
msgstr ""
-"Dieses Programm ist Freie Software. Sie wird von der GNU General Public "
-"License\n"
-"geschützt, und Sie können sie gerne ändern und/oder Kopien unter bestimmten\n"
+"Dieses Programm ist Freie Software. Es wird von der GNU General Public License\n"
+"geschützt, und Sie können es gerne ändern und/oder Kopien unter bestimmten\n"
"Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n"
-"Informationen auf.\n"
+"Informationen auf."
-#: musicxml2ly.py:495
+#: musicxml2ly.py:496
msgid "Use lxml.etree; uses less memory and cpu time."
-msgstr ""
+msgstr "lxml.etree verwenden; verwendet weniger Speicher und Prozessorzeit"
-#: musicxml2ly.py:503
+#: musicxml2ly.py:504
msgid "set output filename to FILE"
msgstr "Ausgabedateiname auf DATEI setzen"
msgstr "Option »%s« benötigt ein Argument"
#: getopt-long.cc:144
-#, fuzzy, c-format
+#, c-format
msgid "option `%s' does not allow an argument"
-msgstr "Option `%s' erlaubt kein Argument"
+msgstr "Option »%s« erlaubt kein Argument"
#: getopt-long.cc:148
#, c-format
msgid "invalid argument `%s' to option `%s'"
msgstr "ungültiges Argument »%s« für Option »%s«"
-#: warn.cc:68 grob.cc:559 input.cc:82
+#: warn.cc:68 grob.cc:557 input.cc:82
#, c-format
msgid "programming error: %s"
msgstr "Programmierfehler: %s"
msgid "continuing, cross fingers"
msgstr "Fortsetzung, die Finger kreuzen"
-#: accidental-engraver.cc:240
+#: accidental-engraver.cc:247
#, c-format
msgid "accidental typesetting list must begin with context-name: %s"
msgstr "Vorzeichensatzliste muss mit Kontextnamen beginnen: %s"
-#: accidental-engraver.cc:268
+#: accidental-engraver.cc:274
#, c-format
-msgid "ignoring unknown accidental: %s"
-msgstr "unbekannte Option ignoriert: %s"
+msgid "ignoring unknown accidental rule: %s"
+msgstr "unbekannte Vorzeichenregel wird ignoriert: %s"
-#: accidental-engraver.cc:284
+#: accidental-engraver.cc:290
#, c-format
msgid "pair or context-name expected for accidental rule, found %s"
msgstr "Paar oder Kontextname für Vorzeichenregel erwartet, %s gefunden"
-#: accidental.cc:243 key-signature-interface.cc:133
+#: accidental.cc:160
#, c-format
-msgid "accidental `%s' not found"
-msgstr "Vorzeichen `%s' nicht gefunden"
+msgid "Could not find glyph-name for alteration %s"
+msgstr "Glyph-Name für Vorzeichen %s konnte nicht gefunden werden"
-#: align-interface.cc:222
-msgid ""
-"vertical alignment called before line-breaking.\n"
-"Only do cross-staff spanners with PianoStaff."
-msgstr ""
-"vertikale Ausrichtung vor Zeilenumbruch aufgerufen.\n"
-"Nur Zeilenzusammenfassungen mit PianoStaff erzeugen."
+#: accidental.cc:175
+msgid "natural alteration glyph not found"
+msgstr "Zeichen für Auflösung konnte nicht gefunden werden"
-#: align-interface.cc:329
+#: align-interface.cc:322
msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
+msgstr "Versuch, eine Übersetzung für etwas zu finden, das nicht mein Kind ist"
-#: all-font-metrics.cc:173
+#: all-font-metrics.cc:143
#, c-format
msgid "cannot find font: `%s'"
msgstr "Schriftart kann nicht gefunden werden: »%s«"
msgid "removing this vertical group"
msgstr "entfernen dieser vertikalen Gruppe"
-#: axis-group-interface.cc:96
+#: axis-group-interface.cc:109
msgid "tried to calculate pure-height at a non-breakpoint"
-msgstr ""
+msgstr "Versuch, die reine Höhe bei Nicht-Breakpoint zu ermitteln"
-#: axis-group-interface.cc:370
+#: axis-group-interface.cc:449
msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
-
-#: axis-group-interface.cc:383
-#, c-format
-msgid "outside-staff object %s has an empty extent"
-msgstr ""
+msgstr "Ein Objekt außerhalb der Notenzeile sollte eine Richtung haben, Vorgabe ist »nach oben«"
#: bar-check-iterator.cc:73
#, c-format
msgid "barcheck failed at: %s"
msgstr "Taktüberprüfung gescheitert bei: %s"
-#: beam-engraver.cc:128
+#: beam-engraver.cc:126
msgid "already have a beam"
msgstr "Balken bereits vorhanden"
-#: beam-engraver.cc:196
+#: beam-engraver.cc:202
msgid "unterminated beam"
msgstr "unbegrenzter Balken"
-#: beam-engraver.cc:238 chord-tremolo-engraver.cc:134
+#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138
msgid "stem must have Rhythmic structure"
msgstr "Notenhals muss rhythmische Struktur aufweisen"
-#: beam-engraver.cc:246
-#, fuzzy
+#: beam-engraver.cc:252
msgid "stem does not fit in beam"
-msgstr "Notenhals passt nicht zum Balken"
+msgstr "Notenhals passt nicht in Balken"
-#: beam-engraver.cc:247
+#: beam-engraver.cc:253
msgid "beam was started here"
msgstr "Balken wurde hier begonnen"
-#: beam-quanting.cc:307
+#: beam-quanting.cc:314
msgid "no feasible beam position"
msgstr "Keine praktikable Balkenposition"
-#: beam.cc:144
-#, fuzzy
+#: beam.cc:160
msgid "removing beam with no stems"
-msgstr "Balken mit weniger als zwei Notenhälsen wird entfernt"
+msgstr "Balken ohne Notenhälse wird entfernt"
-#: beam.cc:1007
+#: beam.cc:1035
msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
-"Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine "
-"optimale Balkenneigung gefunden werden"
+msgstr "Keine funktionsfähige Anfangskonfiguration gefunden: Es kann evtl. keine optimale Balkenneigung gefunden werden"
-#: break-alignment-interface.cc:208
+#: break-alignment-interface.cc:195
#, c-format
msgid "No spacing entry from %s to `%s'"
msgstr "Kein Leerraumeintrag von %s nach »%s«"
#: change-iterator.cc:23
#, c-format
msgid "cannot change `%s' to `%s'"
-msgstr "»%s« kann nicht nach »%s« geändert werden"
+msgstr "»%s« kann nicht in »%s« geändert werden"
#. FIXME: constant error message.
#: change-iterator.cc:82
msgstr "keiner davon befindet sich in meiner Familie"
#: chord-tremolo-engraver.cc:88
-#, fuzzy
msgid "No tremolo to end"
-msgstr "Kein Bindebogen zu beenden"
+msgstr "Kein Tremolo zu beenden"
#: chord-tremolo-engraver.cc:110
msgid "unterminated chord tremolo"
msgstr "unbegrenztes Akkord-Tremolo"
-#: chord-tremolo-iterator.cc:33
+#: chord-tremolo-iterator.cc:35
#, c-format
msgid "expect 2 elements for chord tremolo, found %d"
msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
msgstr "Coherent_ligature_engraver: setze »spacing-increment=0.01«: ptr=%ul"
#. if we get to here, just put everything on one line
-#: constrained-breaking.cc:176 constrained-breaking.cc:193
+#: constrained-breaking.cc:167 constrained-breaking.cc:184
msgid "cannot find line breaking that satisfies constraints"
-msgstr ""
-"es können keine Zeilenumbrüche gefunden werden, die die Bedingungen erfüllen"
+msgstr "es kann kein Zeilenumbruch gefunden werden, der die Bedingungen erfüllen"
#: context-def.cc:130
#, c-format
msgid "program has no such type: `%s'"
msgstr "Das Programm hat keinen solchen Typen: »%s«"
-#: context-property.cc:76
+#: context-property.cc:30
msgid "need symbol arguments for \\override and \\revert"
msgstr "Symbol-Argumente für \\override und \\revert benötigt"
-#: context.cc:151
+#: context.cc:144
#, c-format
msgid "cannot find or create new `%s'"
msgstr "ein neues »%s« kann weder gefunden noch erzeugt werden"
-#: context.cc:213
+#: context.cc:206
#, c-format
msgid "cannot find or create `%s' called `%s'"
msgstr "»%s« (»%s« genannt) kann weder gefunden noch erzeugt werden"
-#: context.cc:276
+#: context.cc:268
#, c-format
msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+msgstr "Ungültiges CreateContext-Ereignis: Kontext %s kann nicht erzeugt werden"
-#: context.cc:388
+#: context.cc:380
#, c-format
msgid "cannot find or create: `%s'"
msgstr "»%s« kann weder gefunden noch erzeugt werden"
#: dispatcher.cc:71
msgid "Event class should be a symbol"
-msgstr ""
+msgstr "Ereignisklasse sollte ein Symbol sein"
#: dispatcher.cc:78
-#, fuzzy, c-format
+#, c-format
msgid "Unknown event class %s"
-msgstr "Unbekannte Schnittstelle »%s«"
+msgstr "Unbekannte Ereignisklasse »%s«"
-#: dots.cc:38
-#, fuzzy, c-format
+#: dots.cc:37
+#, c-format
msgid "dot `%s' not found"
-msgstr "Pause »%s« nicht gefunden"
+msgstr "Punkt »%s« nicht gefunden"
-#: dynamic-engraver.cc:186 span-dynamic-performer.cc:87
+#: dynamic-engraver.cc:184
msgid "cannot find start of (de)crescendo"
msgstr "Anfang des (De-) Crescendos kann nicht gefunden werden"
-#: dynamic-engraver.cc:195
+#: dynamic-engraver.cc:193
msgid "already have a decrescendo"
msgstr "Decrescendo bereits vorhanden"
-#: dynamic-engraver.cc:197
+#: dynamic-engraver.cc:195
msgid "already have a crescendo"
msgstr "Crescendo bereits vorhanden"
-#: dynamic-engraver.cc:200
+#: dynamic-engraver.cc:198
msgid "cresc starts here"
msgstr "Crescendo beginnt hier"
-#: dynamic-engraver.cc:323
+#: dynamic-engraver.cc:327
msgid "unterminated (de)crescendo"
msgstr "unbegrenztes (De-) Crescendo"
-#: extender-engraver.cc:131 extender-engraver.cc:140
+#: extender-engraver.cc:142 extender-engraver.cc:151
msgid "unterminated extender"
msgstr "unbegrenzte Erweiterung"
msgstr "FontConfig wird initialisiert..."
#: font-config.cc:44
-#, fuzzy, c-format
+#, c-format
msgid "Rebuilding FontConfig cache %s, this may take a while..."
msgstr "FontConfig-Cache %s wird erneuert. Dies kann eine Weile dauern..."
#: font-config.cc:55
-#, fuzzy, c-format
+#, c-format
msgid "failed adding font directory: %s"
msgstr "Schriftartverzeichnis wird hinzugefügt: %s"
msgid "adding font directory: %s"
msgstr "Schriftartverzeichnis wird hinzugefügt: %s"
-#: general-scheme.cc:160
+#: general-scheme.cc:198
msgid "infinity or NaN encountered while converting Real number"
msgstr "Unendlichkeit oder NaN bei Umwandlung einer Real-Zahl gefunden"
-#: general-scheme.cc:161
+#: general-scheme.cc:199
msgid "setting to zero"
msgstr "auf Null gesetzt"
-#: glissando-engraver.cc:92
+#: general-scheme.cc:417 output-ps.scm:61
+msgid "Found infinity or nan in output. Substituting 0.0"
+msgstr "Unendlich oder NaN in Ausgabe gefunden. Wird durch 0.0 ersetzt"
+
+#: glissando-engraver.cc:94
msgid "unterminated glissando"
msgstr "unbegrenztes Glissando."
-#: global-context-scheme.cc:91 global-context-scheme.cc:107
+#: global-context-scheme.cc:87 global-context-scheme.cc:105
msgid "no music found in score"
msgstr "keine Musik in der Partitur gefunden"
-#: global-context-scheme.cc:97
+#: global-context-scheme.cc:95
msgid "Interpreting music... "
msgstr "Interpretation der Musik..."
-#: global-context-scheme.cc:120
+#: global-context-scheme.cc:118
#, c-format
msgid "elapsed time: %.2f seconds"
msgstr "verstrichene Zeit: %.2f Sekunden"
msgid "Grob `%s' has no interface for property `%s'"
msgstr "Grob »%s« hat keine Schnittstelle für Eigenschaft »%s«"
-#: grob.cc:253
+#: grob-property.cc:34
+#, c-format
+msgid "%d: %s"
+msgstr "%d: %s"
+
+#: grob-property.cc:174
+#, c-format
+msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
+msgstr "Zyklische Abhängigkeit: Laufende Verarbeitung für #'%s (%s) gefunden"
+
+#: grob.cc:251
msgid "Infinity or NaN encountered"
msgstr "Unendlichkeit oder NaN bei Umwandlung einer Real-Zahl gefunden"
-#: hairpin.cc:183
+#: hairpin.cc:187
msgid "decrescendo too small"
msgstr "Decrescendo zu kurz"
+#: hairpin.cc:188
+msgid "crescendo too small"
+msgstr "Crescendo zu kurz"
+
#: horizontal-bracket-engraver.cc:59
-#, fuzzy
msgid "do not have that many brackets"
msgstr "so viele Klammern gibt es nicht"
msgid "unterminated hyphen; removing"
msgstr "unbegrenzter Bindestrich; entfernt"
-#: includable-lexer.cc:53
-msgid "include files are not allowed in safe mode"
-msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt"
-
-#: includable-lexer.cc:60 lily-guile.cc:90 lily-parser-scheme.cc:116
+#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:117
#, c-format
msgid "cannot find file: `%s'"
msgstr "Datei »%s« kann nicht gefunden werden"
-#: includable-lexer.cc:62 lily-parser-scheme.cc:107
+#: includable-lexer.cc:55 lily-parser-scheme.cc:108
#, c-format
msgid "(search path: `%s')"
msgstr "(Suchpfad: »%s«)"
msgid "position unknown"
msgstr "Position unbekannt"
+#: key-signature-interface.cc:71
+#, c-format
+msgid "No glyph found for alteration: %s"
+msgstr "Kein Glyph für Vorzeichen gefunden: %s"
+
+#: key-signature-interface.cc:81
+msgid "alteration not found"
+msgstr "Vorzeichen nicht gefunden"
+
#: ligature-engraver.cc:93
msgid "cannot find start of ligature"
msgstr "Anfang der Bindung kann nicht gefunden werden"
msgid "ligature was started here"
msgstr "Bindung wurde hier begonnen"
-#: lily-guile.cc:92
+#: lily-guile.cc:78
#, c-format
msgid "(load path: `%s')"
msgstr "(Lade-Pfad: `%s')"
-#: lily-guile.cc:518
+#: lily-guile.cc:438
#, c-format
msgid "cannot find property type-check for `%s' (%s)."
msgstr "Eigenschafts-Typprüfung für »%s« (%s) kann nicht gefunden werden."
-#: lily-guile.cc:521
+#: lily-guile.cc:441
msgid "perhaps a typing error?"
msgstr "vielleicht ein Tippfehler?"
-#: lily-guile.cc:527
+#: lily-guile.cc:448
msgid "doing assignment anyway"
msgstr "Zuweisung wird trotzdem durchgeführt"
-#: lily-guile.cc:539
+#: lily-guile.cc:460
#, c-format
msgid "type check for `%s' failed; value `%s' must be of type `%s'"
msgstr "Typprüfung für »%s« gescheitert; Wert »%s« muss vom Typ »%s« sein"
-#: lily-lexer.cc:254
+#: lily-lexer.cc:250
+msgid "include files are not allowed in safe mode"
+msgstr "eingefügte Dateien sind im abgesicherten Modus nicht erlaubt"
+
+#: lily-lexer.cc:269
#, c-format
msgid "identifier name is a keyword: `%s'"
msgstr "Bezeichnername ist ein Schlüsselwort: »%s«"
-#: lily-lexer.cc:269
+#: lily-lexer.cc:284
#, c-format
msgid "error at EOF: %s"
msgstr "Fehler am Dateiende (EOF): %s"
-#: lily-parser-scheme.cc:29
+#: lily-parser-scheme.cc:30
#, c-format
msgid "deprecated function called: %s"
msgstr "veraltete Funktion aufgerufen: %s"
-#: lily-parser-scheme.cc:88
-#, fuzzy, c-format
+#: lily-parser-scheme.cc:89
+#, c-format
msgid "Changing working directory to: `%s'"
-msgstr "aktuelles Verzeichnis kann nicht zu »%s« geändert werden"
+msgstr "Aktuelles Verzeichnis wird zu »%s« geändert"
-#: lily-parser-scheme.cc:106
+#: lily-parser-scheme.cc:107
#, c-format
msgid "cannot find init file: `%s'"
msgstr "Init-Datei kann nicht gefunden werden: »%s«"
-#: lily-parser-scheme.cc:125
+#: lily-parser-scheme.cc:126
#, c-format
msgid "Processing `%s'"
msgstr "»%s« wird verarbeitet"
msgstr "Analysieren..."
#: lily-parser.cc:127
-#, fuzzy
msgid "braces do not match"
msgstr "Klammern passen nicht zueinander"
-#: lyric-combine-music-iterator.cc:291
+#: lyric-combine-music-iterator.cc:327
#, c-format
msgid "cannot find Voice `%s'"
msgstr "Stimme kann nicht gefunden werden: »%s«"
-#: main.cc:116
+#: lyric-engraver.cc:158
+msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
+msgstr "Sprachsilbe hat keine Note. \\lyricsto oder associatedVoice verwenden."
+
+#: main.cc:100
#, c-format
msgid ""
"This program is free software. It is covered by the GNU General Public\n"
"under certain conditions. Invoke as `%s --warranty' for more\n"
"information.\n"
msgstr ""
-"Dieses Programm ist Freie Software. Sie wird von der GNU General Public "
-"License\n"
+"Dieses Programm ist Freie Software. Sie wird von der GNU General Public License\n"
"geschützt, und Sie können sie gerne ändern und/oder Kopien unter bestimmten\n"
"Bedingungen weitergeben. Rufen Sie »%s --warranty« für weitere\n"
"Informationen auf.\n"
-#: main.cc:122
-#, fuzzy
+#: main.cc:106
msgid ""
" This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU General Public License version 2\n"
"BESTIMMTEN ZWECK kann nicht gewährleistet werden. Siehe GNU General Public\n"
"License für weitere Details.\n"
"\n"
-" Sie sollten eine Kopie (siehe Datei COPYING) der GNU General Public\n"
+" Sie sollten eine Kopie der GNU General Public\n"
"License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben\n"
-"Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite "
-"330,\n"
+"Sie bitte an die Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
"Boston, MA 02111-1307, USA.\n"
-#: main.cc:153
-msgid "BACK"
-msgstr "ZURÜCK"
-
-#: main.cc:153
-#, fuzzy
-msgid ""
-"use backend BACK (eps, gnome, ps [default],\n"
-"scm, svg, tex, texstr)"
-msgstr ""
-"Backend BACK verwenden (gnome, ps, eps,\n"
-"scm, svg, tex, texstr)\n"
-"Standard: PS"
-
-#: main.cc:155
-#, fuzzy
+#: main.cc:137
msgid "SYM[=VAL]"
-msgstr "SYM=WERT"
+msgstr "SYM[=WERT]"
-#: main.cc:156
-#, fuzzy
+#: main.cc:138
msgid ""
-"set Scheme option SYM to VAL (default: #t)\n"
+"set Scheme option SYM to VAL (default: #t).\n"
"Use -dhelp for help."
msgstr ""
-"Eine Scheme-Programmoption setzen. #t wird verwendet, wenn WERT\n"
-"nicht angegeben wurde. -dhelp für Hilfe verwenden."
+"Scheme-Option SYM auf WERT setzen (Vorgabe: #t).\n"
+"-dhelp für Hilfe verwenden."
-#: main.cc:159
+#: main.cc:141
msgid "EXPR"
msgstr "AUSD"
-#: main.cc:159
+#: main.cc:141
msgid "evaluate scheme code"
msgstr "Schemacode auswerten"
#. Bug in option parser: --output =foe is taken as an abbreviation
#. for --output-format.
-#: main.cc:162
+#: main.cc:144
msgid "FORMATs"
msgstr "FORMATe"
-#: main.cc:162
+#: main.cc:144
msgid "dump FORMAT,... Also as separate options:"
msgstr "dump FORMAT,... Auch als separate Optionen:"
-#: main.cc:163
+#: main.cc:145
msgid "generate DVI (tex backend only)"
msgstr "DVI erzeugen (nur TeX-Backend)"
-#: main.cc:164
+#: main.cc:146
msgid "generate PDF (default)"
msgstr "PDF erzeugen (Standard)"
-#: main.cc:165
+#: main.cc:147
msgid "generate PNG"
msgstr "PNG erzeugen"
-#: main.cc:166
+#: main.cc:148
msgid "generate PostScript"
msgstr "PostScript erzeugen"
-#: main.cc:167
+#: main.cc:149
msgid "generate TeX (tex backend only)"
msgstr "TeX erzeugen (nur TeX-Backend)"
-#: main.cc:168
+#: main.cc:150
msgid "show this help and exit"
-msgstr ""
+msgstr "diese Hilfe anzeigen und beenden"
-#: main.cc:169
+#: main.cc:151
msgid "FIELD"
msgstr "FELD"
-#: main.cc:169
-#, fuzzy
+#: main.cc:151
msgid ""
"dump header field FIELD to file\n"
"named BASENAME.FIELD"
-msgstr "Header-Feld in BASISNAME.FELD schreiben"
+msgstr "Header-Feld FELD in Datei BASISNAME.FELD schreiben"
-#: main.cc:171
+#: main.cc:153
msgid "add DIR to search path"
msgstr "VERZ zum Suchpfad hinzufügen"
-#: main.cc:172
+#: main.cc:154
msgid "use FILE as init file"
msgstr "DATEI als Anfangsdatei verwenden"
-#: main.cc:174
-msgid "USER,GROUP,JAIL,DIR"
+#: main.cc:156
+msgid "USER, GROUP, JAIL, DIR"
msgstr "BENUTZER,GRUPPE,KERKER,VERZ"
-#: main.cc:174
+#: main.cc:156
msgid ""
"chroot to JAIL, become USER:GROUP\n"
"and cd into DIR"
"chroot in KERKER, wird BENUTZER:GRUPPE\n"
"und cd in VERZ"
-#: main.cc:177
-msgid "do not generate printed output"
-msgstr "keine gedruckte Ausgabe erzeugen"
-
-#: main.cc:178
+#: main.cc:159
msgid "write output to FILE (suffix will be added)"
msgstr "Ausgabe in DATEI schreiben (Endung wird hinzugefügt)"
-#: main.cc:179
-msgid "generate a preview of the first system"
-msgstr "ein Bild des ersten Systems erzeugen"
-
-#: main.cc:180
+#: main.cc:160
msgid "relocate using directory of lilypond program"
msgstr "wiederfinden mit Hilfe des Lilypond-Programmverzeichnisses"
-#: main.cc:181
-#, fuzzy
-msgid ""
-"disallow unsafe Scheme and PostScript\n"
-"operations"
-msgstr "unsichere Scheme- und PostScript-Operationen verweigern"
-
-#: main.cc:183
-#, fuzzy
+#: main.cc:161
msgid "show version number and exit"
-msgstr "Versionsnummer ausgeben"
+msgstr "Versionsnummer ausgeben und beenden"
-#: main.cc:224
+#: main.cc:203
#, c-format
msgid ""
"Copyright (c) %s by\n"
"%s und anderen."
#. No version number or newline here. It confuses help2man.
-#: main.cc:251
+#: main.cc:230
#, c-format
msgid "Usage: %s [OPTION]... FILE..."
msgstr "Aufruf: %s [OPTION]... DATEI..."
-#: main.cc:253
+#: main.cc:232
#, c-format
msgid "Typeset music and/or produce MIDI from FILE."
msgstr "Musiksatz und/oder MIDI aus DATEI erzeugen."
-#: main.cc:255
+#: main.cc:234
#, c-format
msgid "LilyPond produces beautiful music notation."
msgstr "LilyPond erzeugt ansprechende Musiknotation."
-#: main.cc:257
+#: main.cc:236
#, c-format
msgid "For more information, see %s"
msgstr "Für weitere Informationen: siehe %s"
-#: main.cc:259
+#: main.cc:238
#, c-format
msgid "Options:"
msgstr "Optionen:"
-#: main.cc:263
+#: main.cc:242
#, c-format
msgid "Report bugs via %s"
msgstr "Melden Sie Fehler an %s"
-#: main.cc:309
+#: main.cc:288
#, c-format
msgid "expected %d arguments with jail, found: %u"
msgstr "%d Argumente mit Kerker erwartet, %u gefunden"
-#: main.cc:323
+#: main.cc:302
#, c-format
msgid "no such user: %s"
msgstr "kein solcher Benutzer: %s"
-#: main.cc:325
+#: main.cc:304
#, c-format
msgid "cannot get user id from user name: %s: %s"
msgstr "Benutzer-ID von Benutzer kann nicht gefunden werden: %s: %s"
-#: main.cc:340
+#: main.cc:319
#, c-format
msgid "no such group: %s"
msgstr "keine solche Gruppe: %s"
-#: main.cc:342
+#: main.cc:321
#, c-format
msgid "cannot get group id from group name: %s: %s"
-msgstr "Gruppen-ID kann nicht von Gruppennamen ermittelt werden: %s: %s"
+msgstr "Gruppen-ID kann nicht von Gruppenname ermittelt werden: %s: %s"
-#: main.cc:350
+#: main.cc:329
#, c-format
msgid "cannot chroot to: %s: %s"
msgstr "kein chroot möglich nach: %s: %s"
-#: main.cc:357
+#: main.cc:336
#, c-format
msgid "cannot change group id to: %d: %s"
msgstr "Gruppen-ID kann nicht geändert werden in: %d: %s"
-#: main.cc:363
+#: main.cc:342
#, c-format
msgid "cannot change user id to: %d: %s"
msgstr "Benutzer-ID kann nicht geändert werden in: %d: %s"
-#: main.cc:369
+#: main.cc:348
#, c-format
msgid "cannot change working directory to: %s: %s"
msgstr "aktuelles Verzeichnis kann nicht geändert werden in: %s: %s"
-#: main.cc:415
-#, c-format
-msgid "Evaluating %s"
-msgstr "%s wird ausgewertet"
-
-#: main.cc:645
+#: main.cc:594
#, c-format
msgid "exception caught: %s"
msgstr "Ausnahme gefangen: %s"
msgid "Mensural_ligature: (join_right == 0)"
msgstr "Mensural_ligature: (join_right == 0)"
-#: midi-item.cc:152
+#: midi-item.cc:81
#, c-format
msgid "no such MIDI instrument: `%s'"
msgstr "kein solches MIDI-Instrument: `%s'"
-#: midi-item.cc:285
-#, c-format
-msgid "experimental: temporarily fine tuning (of %d cents) a channel."
-msgstr ""
-"Experimentell: temporäre Feinabstimmung (von %d Hundertsteln) des Kanals."
-
#: midi-stream.cc:28
#, c-format
msgid "cannot open for write: %s: %s"
-msgstr "Datei kann nicht zum Schreiben geöffnet werden: %s: %s"
+msgstr "Es kann nicht zum Schreiben geöffnet werden: %s: %s"
#: midi-stream.cc:44
#, c-format
msgid "cannot write to file: `%s'"
-msgstr "in Datei konnte nicht geschrieben werden: »%s«"
+msgstr "Es kann nicht in Datei geschrieben werden: »%s«"
#: music-iterator.cc:171
msgid "Sending non-event to context"
-msgstr ""
+msgstr "Nicht-Ereignis wird in Kontext gesendet"
-#: music.cc:141
-#, fuzzy, c-format
+#: music.cc:140
+#, c-format
msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr "Oktavenüberprüfung gescheitert; %s erwartet, %s gefunden"
+msgstr "Oktavenüberprüfung gescheitert; »%s« erwartet, »%s« gefunden"
-#: music.cc:207
+#: music.cc:203
#, c-format
msgid "transposition by %s makes alteration larger than double"
msgstr "Transponieren um %s erzeugt Vorzeichen größer als zwei"
msgid "placing below"
msgstr "Platzierung darunter"
-#: note-collision.cc:457
+#: note-collision.cc:464
msgid "ignoring too many clashing note columns"
msgstr "zu viele kollidierende Notenspalten werden ignoriert"
msgstr "Notenköpfe und Pausen können nicht zusammen an einem Hals auftreten"
#: note-head.cc:63
-#, fuzzy, c-format
+#, c-format
msgid "none of note heads `%s' or `%s' found"
-msgstr "Notenkopf »%s« nicht gefunden"
+msgstr "Keinen der Notenköpfe »%s« und »%s« gefunden"
-#: note-heads-engraver.cc:61
+#: note-heads-engraver.cc:64
msgid "NoteEvent without pitch"
msgstr "NoteEvent ohne Tonhöhe"
msgid "cannot load font table: %s"
msgstr "Schriftarttabelle kann nicht geladen werden: %s"
-#: open-type-font.cc:98
+#: open-type-font.cc:42
+#, c-format
+msgid "Free type error: %s"
+msgstr "Freetype-Fehler: %s"
+
+#: open-type-font.cc:100
#, c-format
msgid "unsupported font format: %s"
msgstr "nicht unterstütztes Format: %s"
-#: open-type-font.cc:100
+#: open-type-font.cc:102
#, c-format
-msgid "unknown error: %d reading font file: %s"
-msgstr "unbekannter Fehler: %d beim Lesen der Schriftartdatei: %s"
+msgid "error reading font file %s: %s"
+msgstr "Fehler beim Lesen der Schriftartdatei: %s: %s"
-#: open-type-font.cc:173 open-type-font.cc:297
-#, fuzzy, c-format
-msgid "FT_Get_Glyph_Name() returned error: %u"
-msgstr "FT_Get_Glyph_Name() gab Fehler zurück: %d"
+#: open-type-font.cc:177
+#, c-format
+msgid "FT_Get_Glyph_Name () Freetype error: %s"
+msgstr "FT_Get_Glyph_Name() Freetype-Fehler: %s"
-#: page-turn-page-breaking.cc:205
-msgid ""
-"cannot fit the first page turn onto a single page. Consider setting first-"
-"page-number to an even number."
-msgstr ""
+#: open-type-font.cc:302 pango-font.cc:167
+#, c-format
+msgid "FT_Get_Glyph_Name () error: %s"
+msgstr "FT_Get_Glyph_Name() Fehler: %s"
+
+#: page-turn-page-breaking.cc:146
+#, c-format
+msgid "page-turn-page-breaking: breaking from %d to %d"
+msgstr "Seitenwechsel-Seitenumbruch: Umbruch von %d nach %d"
+
+#: page-turn-page-breaking.cc:195
+msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number."
+msgstr "Erster Seitenwechsel kann nicht auf einzelne Seite gelegt werden. In Betracht zu ziehen wäre das Setzen von first-page-number auf gerade Zahl."
-#: page-turn-page-breaking.cc:218
+#: page-turn-page-breaking.cc:208
#, c-format
msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
+msgstr "Seiten- und Zeilenumbrücke werden berechnet (%d mögliche Seitenumbrüche)..."
-#: page-turn-page-breaking.cc:236 paper-score.cc:154
+#: page-turn-page-breaking.cc:226 paper-score.cc:146
msgid "Drawing systems..."
-msgstr ""
+msgstr "Zeichensysteme..."
+
+#: page-turn-page-breaking.cc:275
+#, c-format
+msgid "break starting at page %d"
+msgstr "Umbruch beginnt auf Seite %d"
+
+#: page-turn-page-breaking.cc:276
+#, c-format
+msgid "\tdemerits: %f"
+msgstr "Optimale Bewertung: %f"
+
+#: page-turn-page-breaking.cc:277
+#, c-format
+msgid "\tsystem count: %d"
+msgstr "\tSystemanzahl: %d"
-#: pango-font.cc:181
+#: page-turn-page-breaking.cc:278
+#, c-format
+msgid "\tpage count: %d"
+msgstr "\tSeitenanzahl: %d"
+
+#: page-turn-page-breaking.cc:279
+#, c-format
+msgid "\tprevious break: %d"
+msgstr "\tvorheriger Umbruch: %d"
+
+#: pango-font.cc:184
#, c-format
msgid ""
"Glyph has no name, but font supports glyph naming.\n"
"Skipping glyph U+%0X, file %s"
msgstr ""
+"Glyph hat keinen Namen, aber Zeichensatz unterstützt Glyphnamen.\n"
+"Glyph U+%0X wird übersprungen, Datei %s"
-#: pango-font.cc:224
+#: pango-font.cc:229
#, c-format
msgid "no PostScript font name for font `%s'"
msgstr "Keine PostScript-Schriftartname für Schriftart: »%s«"
-#: pango-font.cc:272
+#: pango-font.cc:277
msgid "FreeType face has no PostScript font name"
msgstr "FreeType-Ansicht hat keinen PostScript-Schriftartnamen"
-#: paper-outputter-scheme.cc:33
+#: paper-column-engraver.cc:199
+msgid "forced break was overridden by some other event, should you be using bar checks?"
+msgstr "erzwungener Umbruch war durch anderes Ereignis aufgehoben, sollten Taktüberprüfungen vorgenommen werden?"
+
+#: paper-outputter-scheme.cc:30
#, c-format
msgid "Layout output to `%s'..."
msgstr "Layout nach »%s« ausgeben..."
msgid "Preprocessing graphical objects..."
msgstr "Vorverarbeitung der grafischen Elemente..."
-#: parse-scm.cc:83
+#: parse-scm.cc:87
msgid "GUILE signaled an error for the expression beginning here"
msgstr "GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck"
msgid "unterminated percent repeat"
msgstr "unbegrenzte Prozentwiederholung"
-#: performance.cc:45
+#: performance.cc:43
msgid "Track..."
msgstr "Spur..."
-#: performance.cc:74
+#: performance.cc:72
msgid "MIDI channel wrapped around"
msgstr "MIDI-Kanal zurückgesprungen"
-#: performance.cc:75
+#: performance.cc:73
msgid "remapping modulo 16"
msgstr "Abbildung modulo 16"
-#: performance.cc:103
+#: performance.cc:101
#, c-format
msgid "MIDI output to `%s'..."
msgstr "MIDI-Ausgabe nach »%s«..."
-#: phrasing-slur-engraver.cc:146
+#: phrasing-slur-engraver.cc:131
msgid "unterminated phrasing slur"
msgstr "nicht beendeter Phrasierungsbogen"
#: piano-pedal-performer.cc:93
#, c-format
msgid "cannot find start of piano pedal: `%s'"
-msgstr "kann keinen Anfang für Pedal finden: »%s«"
+msgstr "es kann kein Anfang für Piano-Pedal gefunden werden: »%s«"
#: piano-pedal-engraver.cc:347
#, c-format
msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "kann keinen Anfang für Piano-Pedal finden: »%s«"
+msgstr "es kann kein Anfang für Piano-Pedal-Klammer gefunden werden: »%s«"
-#: program-option.cc:205
+#: program-option-scheme.cc:207
#, c-format
msgid "no such internal option: %s"
msgstr "keine solche interne Option: %s"
msgstr "Oktavprüfung gescheitert, Rückgabe: "
#: relocate.cc:44
-#, fuzzy, c-format
+#, c-format
msgid "Setting %s to %s"
-msgstr "Schreiben der Schriftarten nach %s"
+msgstr "%s wird auf %s gesetzt"
-#: relocate.cc:59
+#: relocate.cc:64
#, c-format
msgid "no such file: %s for %s"
msgstr "keine solche Datei: %s für %s"
-#: relocate.cc:69 relocate.cc:87
+#: relocate.cc:74 relocate.cc:92
#, c-format
msgid "no such directory: %s for %s"
msgstr "kein solches Verzeichnis: %s für %s"
-#: relocate.cc:79
+#: relocate.cc:84
#, c-format
msgid "%s=%s (prepend)\n"
msgstr "%s=%s (voranstellen)\n"
-#: relocate.cc:99
+#: relocate.cc:114
+#, c-format
+msgid "not relocating, no %s/ or current/ found under %s"
+msgstr "keine Verlagerung, kein %s/ oder current/ unter %s gefunden"
+
+#: relocate.cc:125
#, c-format
-msgid "Relocation: compile prefix=%s, new prefix=%s"
-msgstr "Verlagerung: Übersetzungsvorsilbe=%s, neue Vorsilbe=%s"
+msgid "Relocation: compile datadir=%s, new datadir=%s"
+msgstr "Verlagerung: Kompilier-Datenverzeichnis=%s, neues Datenverzeichnis=%s"
-#: relocate.cc:129
+#: relocate.cc:138
#, c-format
msgid "Relocation: framework_prefix=%s"
msgstr "Verlagerung: framework_prefix=%s"
-#: relocate.cc:169
+#: relocate.cc:179
#, c-format
msgid "Relocation: is absolute: argv0=%s"
msgstr "Verlagerung: ist absolut: argv0=%s"
-#: relocate.cc:176
+#: relocate.cc:186
#, c-format
msgid "Relocation: from cwd: argv0=%s"
msgstr "Verlagerung: von cwd: argv0=%s"
-#: relocate.cc:185
+#: relocate.cc:195
#, c-format
msgid ""
"Relocation: from PATH=%s\n"
"Verlagerung: von PATH=%s\n"
"argv0=%s"
-#: relocate.cc:354
-#, fuzzy, c-format
+#: relocate.cc:229
+msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
+msgstr "LILYPONDPREFIX is veraltet, stattdessen LILYPOND_DATADIR verwenden"
+
+#: relocate.cc:357
+#, c-format
msgid "Relocation file: %s"
-msgstr "Verlagerung: ist absolut: argv0=%s"
+msgstr "Verlagerungsdatei: %s"
-#: relocate.cc:390
+#: relocate.cc:393
#, c-format
msgid "Unknown relocation command %s"
-msgstr ""
+msgstr "Unbekannter Verlagerungsbefehl %s"
-#: rest-collision.cc:151
+#: rest-collision.cc:145
msgid "cannot resolve rest collision: rest direction not set"
msgstr "Restkollision kann nicht aufgelöst werden: Restrichtung nicht gesetzt"
-#: rest-collision.cc:165 rest-collision.cc:210
+#: rest-collision.cc:159 rest-collision.cc:204
msgid "too many colliding rests"
msgstr "zu viele kollidierende Pausen"
-#: rest.cc:144
+#: rest.cc:132
#, c-format
msgid "rest `%s' not found"
msgstr "Pause »%s« nicht gefunden"
msgid "Aborting"
msgstr "Abbruch"
-#: score.cc:225
+#: score.cc:167
msgid "already have music in score"
msgstr "es ist bereits Musik in der Partitur"
-#: score.cc:226
+#: score.cc:168
msgid "this is the previous music"
msgstr "Dies ist die vorhergehende Musik"
-#: score.cc:231
+#: score.cc:173
msgid "errors found, ignoring music expression"
msgstr "Fehler gefunden, musikalischer Ausdruck wird ignoriert"
#. FIXME:
#: script-engraver.cc:102
-#, fuzzy
msgid "do not know how to interpret articulation: "
-msgstr "Keine Interpretation für Artikulation bekannt: "
+msgstr "Interpretation für Artikulation unbekannt: "
#: script-engraver.cc:103
msgid "scheme encoding: "
msgstr "Schemakodierung: "
-#: simple-spacer.cc:375
-#, c-format
-msgid "No spring between column %d and next one"
-msgstr "Kein (dynamischer) Abstand zwischen Spalte %d und Nachfolger"
-
-#: slur-engraver.cc:83 tuplet-engraver.cc:75
+#: slur-engraver.cc:82
#, c-format
msgid "direction of %s invalid: %d"
-msgstr ""
+msgstr "Richtung von %s ungültig: %d"
-#: slur-engraver.cc:157
+#: slur-engraver.cc:151
msgid "unterminated slur"
msgstr "unbegrenzter Bogen"
-#: slur-engraver.cc:166
+#: slur-engraver.cc:163
msgid "cannot end slur"
msgstr "Bindebogen kann nicht beendet werden"
+#: slur.cc:355
+#, c-format
+msgid "Ignoring grob for slur: %s. avoid-slur not set?"
+msgstr "Grob für Bindebogen wird ignoriert: %s. Vermeidungs-Bindebogen nicht gesetzt?"
+
#: source-file.cc:74
#, c-format
msgid "expected to read %d characters, got %d"
msgstr "%d Zeichen erwartet, %d erhalten"
+#: spaceable-grob.cc:117
+#, c-format
+msgid "No spring between column %d and next one"
+msgstr "Kein (dynamischer) Abstand zwischen Spalte %d und Nachfolger"
+
#: staff-symbol-engraver.cc:62
msgid "staff-span event has no direction"
-msgstr ""
+msgstr "Zeilenüberspannendes Ereignis hat keine Richtung"
#: stem-engraver.cc:92
msgid "tremolo duration is too long"
msgid "weird stem size, check for narrow beams"
msgstr "Eigenartige Notenhalslänge; auf enge Balken überprüfen"
-#: stem.cc:641
+#: stem.cc:618
#, c-format
msgid "flag `%s' not found"
msgstr "Fähnchen »%s« nicht gefunden"
-#: stem.cc:652
+#: stem.cc:629
#, c-format
msgid "flag stroke `%s' not found"
msgstr "Fähnchenstrich »%s« nicht gefunden"
msgid "Element count %d."
msgstr "Elementanzahl: %d."
-#: system.cc:276
+#: system.cc:266
#, c-format
msgid "Grob count %d"
msgstr "Anzahl der grafischen Objekte (grob): %d"
-#: text-spanner-engraver.cc:61
+#: text-spanner-engraver.cc:60
msgid "cannot find start of text spanner"
msgstr "Anfang der Textklammer kann nicht gefunden werden"
-#: text-spanner-engraver.cc:73
+#: text-spanner-engraver.cc:72
msgid "already have a text spanner"
msgstr "Textklammer bereits vorhanden"
-#: text-spanner-engraver.cc:133
+#: text-spanner-engraver.cc:118
msgid "unterminated text spanner"
msgstr "unbegrenzte Textklammer"
-#: tie-engraver.cc:264
+#: tie-engraver.cc:267
msgid "lonely tie"
msgstr "einsamer Bindebogen"
msgid "unknown translator: `%s'"
msgstr "unbekannter Übersetzer: »%s«"
-#: translator-group.cc:151
+#: translator-group-ctors.cc:29
+#, c-format
+msgid "fatal error. Couldn't find type: %s"
+msgstr "schwerwiegender Fehler. Typ konnte nicht gefunden werden: %s"
+
+#: translator-group.cc:146
#, c-format
msgid "cannot find: `%s'"
msgstr "»%s« kann nicht gefunden werden"
-#: translator.cc:332
+#: translator.cc:346
#, c-format
msgid "Two simultaneous %s events, junking this one"
-msgstr ""
+msgstr "Zwei gleichzeitige %s-Ereignisse, dieses wird verworfen"
-#: translator.cc:333
+#: translator.cc:347
#, c-format
msgid "Previous %s event here"
-msgstr ""
+msgstr "Vorheriges %s-Ereignis hier"
-#: trill-spanner-engraver.cc:68
+#: trill-spanner-engraver.cc:67
msgid "cannot find start of trill spanner"
-msgstr "Anfang des Trillers kann nicht gefunden werden"
+msgstr "Anfang der Trillerklammer kann nicht gefunden werden"
-#: trill-spanner-engraver.cc:80
+#: trill-spanner-engraver.cc:79
msgid "already have a trill spanner"
msgstr "Triller bereits aktiv"
+#: tuplet-engraver.cc:96
+msgid "No tuplet to end"
+msgstr "Kein Tupel zu beenden"
+
#: vaticana-ligature-engraver.cc:388
#, c-format
-msgid ""
-"ignored prefix (es) `%s' of this head according to restrictions of the "
-"selected ligature style"
-msgstr ""
-"Vorzeichen (es) »%s« dieses Kopfes gemäß den Einschränkungen des "
-"ausgewählten Bindungs-Stils ignoriert"
+msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "Vorzeichen (es) »%s« dieses Kopfes gemäß den Einschränkungen des ausgewählten Bindungs-Stils ignoriert"
#: vaticana-ligature-engraver.cc:714
#, c-format
msgstr "Vaticana_ligature: nichts zusammengefügt (delta_pitch == 0)"
#. fixme: be more verbose.
-#: volta-engraver.cc:144
+#: volta-engraver.cc:143
msgid "cannot end volta spanner"
-msgstr "Anfang der Textklammer kann nicht gefunden werden"
+msgstr "Volta-Klammer kann nicht beendet werden"
-#: volta-engraver.cc:154
+#: volta-engraver.cc:153
msgid "already have a volta spanner, ending that one prematurely"
msgstr "Wiederholungskasten bereits vorhanden, wird vorzeitig beendet"
-#: volta-engraver.cc:158
+#: volta-engraver.cc:157
msgid "also already have an ended spanner"
msgstr "endende Textklammer auch bereits vorhanden"
-#: volta-engraver.cc:159
+#: volta-engraver.cc:158
msgid "giving up"
msgstr "aufgeben"
-#: parser.yy:702
+#: parser.yy:704
msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
-"\\paper kann nicht in \\source verwendet werden; stattdessen \\layout "
-"verwenden"
+msgstr "\\paper kann nicht in \\source verwendet werden; stattdessen \\layout verwenden"
-#: parser.yy:726
+#: parser.yy:728
msgid "need \\paper for paper block"
msgstr "Für Papier-Block wird \\paper benötigt"
-#: parser.yy:1172
+#: parser.yy:1187
msgid "Grob name should be alphanumeric"
msgstr "Grob-Name sollte alphanumerisch sein"
-#: parser.yy:1475
+#: parser.yy:1485
msgid "second argument must be pitch list"
msgstr "zweites Argument muss eine Tonhöhenliste sein"
-#: parser.yy:1502 parser.yy:1507 parser.yy:1972
+#: parser.yy:1512 parser.yy:1517 parser.yy:1982
msgid "have to be in Lyric mode for lyrics"
msgstr "muss in Liedtextmodus sein um Liedtext setzen zu können"
-#: parser.yy:1604
+#: parser.yy:1614
msgid "expecting string as script definition"
msgstr "Zeichenkette als Skriptdefinition erwartet"
-#: parser.yy:1759 parser.yy:1809
+#: parser.yy:1769 parser.yy:1819
#, c-format
msgid "not a duration: %d"
msgstr "keine gültige Dauer: %d"
-#: parser.yy:1926
+#: parser.yy:1936
msgid "have to be in Note mode for notes"
msgstr "Muss im Notenmodus sein für Noten"
-#: parser.yy:1987
+#: parser.yy:1997
msgid "have to be in Chord mode for chords"
msgstr "Muss im Akkordmodus sein für Akkorde"
msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet"
#: lexer.ll:260
-#, fuzzy
msgid "integer expected after \\sourcefileline"
-msgstr "zitierte Zeichenkette hinter \\sourcefilename erwartet"
+msgstr "Ganzzahl hinter \\sourcefilename erwartet"
#: lexer.ll:273
msgid "EOF found inside a comment"
#: lexer.ll:466
msgid "Brace found at end of lyric. Did you forget a space?"
-msgstr ""
-"Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
+msgstr "Klammer am Ende von Liedtext gefunden. Haben Sie ein Leerzeichen vergessen?"
#: lexer.ll:559
msgid "Brace found at end of markup. Did you forget a space?"
-msgstr ""
-"Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
+msgstr "Klammer am Ende des Auszugs gefunden. Haben Sie ein Leerzeichen vergessen?"
-#: lexer.ll:659
+#: lexer.ll:663
#, c-format
msgid "invalid character: `%c'"
msgstr "Ungültiges Zeichen: »%c«"
-#: lexer.ll:774 lexer.ll:775
+#: lexer.ll:778
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr "Ungültige Fluchtsequenz: »\\%s«"
-#: lexer.ll:880 lexer.ll:881
+#: lexer.ll:884
#, c-format
msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
+msgstr "Datei zu alt: %s (älteste unterstützte: %s)"
-#: lexer.ll:881 lexer.ll:882
-#, fuzzy
+#: lexer.ll:885
msgid "consider updating the input with the convert-ly script"
msgstr "Erwägen Sie die Aktualisierung der Eingabe mit dem Skript convert-ly"
-#: lexer.ll:887 lexer.ll:888
+#: lexer.ll:891
#, c-format
msgid "program too old: %s (file requires: %s)"
-msgstr ""
+msgstr "Programm zu alt: %s (Datei erfordert: %s)"
-#: backend-library.scm:19 lily.scm:599 ps-to-png.scm:82
+#: backend-library.scm:19 lily.scm:752 ps-to-png.scm:58
#, scheme-format
msgid "Invoking `~a'..."
msgstr "»~s« wird aufgerufen..."
-#: backend-library.scm:24
+#: backend-library.scm:28
#, scheme-format
msgid "`~a' failed (~a)"
msgstr "»~a« gescheitert (~a)"
-#: backend-library.scm:95 framework-tex.scm:343 framework-tex.scm:368
+#: backend-library.scm:115 framework-tex.scm:343 framework-tex.scm:368
#, scheme-format
msgid "Converting to `~a'..."
msgstr "Konvertierung nach »~a«..."
-#: backend-library.scm:108
+#: backend-library.scm:128
#, scheme-format
msgid "Converting to ~a..."
msgstr "Konvertierung nach ~a..."
-#: backend-library.scm:145
+#: backend-library.scm:166
#, scheme-format
msgid "Writing header field `~a' to `~a'..."
msgstr "Kopfzeile »~a« wird nach »~a« geschrieben"
#: define-event-classes.scm:119
#, scheme-format
msgid "event class ~A seems to be unused"
-msgstr ""
+msgstr "Ereignisklasse ~A scheint ungenutzt zu sein"
#. should be programming-error
#: define-event-classes.scm:125
#, scheme-format
msgid "translator listens to nonexisting event class ~A"
-msgstr ""
+msgstr "Übersetzer hört auf fehlende Ereignisklasse ~A"
-#: define-markup-commands.scm:255
+#: define-markup-commands.scm:273
msgid "no systems found in \\score markup, does it have a \\layout block?"
msgstr "keine Systeme in \\score-Markup gefunden, hat es einen \\layout-Block?"
-#: define-markup-commands.scm:1297
+#: define-markup-commands.scm:1315
#, scheme-format
msgid "not a valid duration string: ~a"
msgstr "keine gültige Dauer: ~a"
-#: define-music-types.scm:751
+#: define-music-types.scm:743
#, scheme-format
msgid "symbol expected: ~S"
msgstr "Symbol erwartet: ~S"
-#: define-music-types.scm:754
+#: define-music-types.scm:746
#, scheme-format
msgid "cannot find music object: ~S"
msgstr "Musikobjekt kann nicht gefunden werden: ~S"
-#: define-music-types.scm:774
+#: define-music-types.scm:766
#, scheme-format
msgid "unknown repeat type `~S'"
msgstr "unbekannter Wiederholungstyp »~S«"
-#: define-music-types.scm:775
+#: define-music-types.scm:767
msgid "See music-types.scm for supported repeats"
msgstr "Siehe music-types.scm für unterstützte Wiederholungen"
msgid "cannot find description for property ~S (~S)"
msgstr "Beschreibung für Eigenschaft ~S (~S) kann nicht gefunden werden"
-#: framework-eps.scm:91 framework-eps.scm:92
+#: framework-eps.scm:89
#, scheme-format
msgid "Writing ~a..."
msgstr "~a wird geschrieben..."
-#: framework-ps.scm:279
+#: framework-ps.scm:281
#, scheme-format
msgid "cannot embed ~S=~S"
msgstr "~S=~S kann nicht eingebettet werden"
-#: framework-ps.scm:332
+#: framework-ps.scm:334
#, scheme-format
msgid "cannot extract file matching ~a from ~a"
msgstr "Eine zu ~a passende Datei kann nicht aus ~a gewonnen werden"
-#: framework-ps.scm:349
-#, fuzzy, scheme-format
+#: framework-ps.scm:351
+#, scheme-format
msgid "do not know how to embed ~S=~S"
msgstr "Unbekannte Einbettung ~S=~S"
-#: framework-ps.scm:380
-#, fuzzy, scheme-format
+#: framework-ps.scm:382
+#, scheme-format
msgid "do not know how to embed font ~s ~s ~s"
msgstr "Unbekannte Schriftsatzeinbettung ~s ~s ~s"
-#: framework-ps.scm:729
+#: framework-ps.scm:731
#, scheme-format
msgid "cannot convert <stdout> to ~S"
msgstr "<stdout> kann nicht in ~S konvertiert werden"
-#: framework-ps.scm:748 framework-ps.scm:751
+#: framework-ps.scm:750 framework-ps.scm:753
#, scheme-format
msgid "cannot generate ~S using the postscript back-end"
msgstr "~S kann nicht mit PostScript-Backend erzeugt werden"
-#: framework-ps.scm:758
-#, fuzzy
+#: framework-ps.scm:760
msgid ""
"\n"
-"The PostScript backend does not support the 'classic'\n"
-"framework. Use the EPS backend instead,\n"
+"The PostScript backend does not support the system-by-system \n"
+"output. For that, use the EPS backend instead,\n"
"\n"
" lilypond -b eps <file>\n"
"\n"
-"or remove the lilypond-book specific settings from the input.\n"
+"If have cut & pasted a lilypond fragment from a webpage, be sure\n"
+"to only remove anything before\n"
+"\n"
+" %% ****************************************************************\n"
+" %% Start cut-&-pastable-section\n"
+" %% ****************************************************************\n"
+"\n"
msgstr ""
-"nDas PostScript-Backend unterstützt nicht das 'classic'\n"
-"Framework. Stattdessen das EPS-Backend verwenden:\n"
"\n"
-" lilypond -b eps <file>\n"
+"Das PostScript-Backend unterstützt keine System-weise Ausgabe. Dafür sollte\n"
+"das EPS-Backend verwendet werden,\n"
+"\n"
+" lilypond -b eps <Datei>\n"
+"\n"
+"Beim Kopieren von Lilypond-Fragmenten von Webseiten sollte nur alles vor\n"
+"\n"
+" %% ****************************************************************\n"
+" %% Start cut-&-pastable-section\n"
+" %% ****************************************************************\n"
+"\n"
+"entfernt werden\n"
"\n"
-"oder die Lilypond-Buch-spezifischen Einstellungen aus der Eingabe "
-"entfernen.\n"
#: framework-tex.scm:360
#, scheme-format
msgid "TeX file name must not contain whitespace: `~a'"
msgstr "TeX-Dateiname darf keine Leerzeichen enthalten: »~a«"
+#: graphviz.scm:53
+#, scheme-format
+msgid "Writing graph `~a'..."
+msgstr "Graph ~a wird geschrieben..."
+
#: layout-beam.scm:29
#, scheme-format
msgid "Error in beam quanting. Expected (~S,~S) found ~S."
msgid "Error in beam quanting. Expected ~S 0, found ~S."
msgstr "Fehler bei Balkenzuschnitt. ~S 0 erwartet, ~S gefunden."
-#: layout-page-layout.scm:357
+#: layout-page-layout.scm:115
+msgid "Can't fit systems on page -- ignoring between-system-padding"
+msgstr "Systeme passen nicht auf Seite -- Zwischen-System-Abstand wird ignoriert"
+
+#: layout-page-layout.scm:449
msgid "Calculating page breaks..."
msgstr "Zeilenumbrüche werden berechnet..."
-#: lily-library.scm:593
+#: lily-library.scm:545
#, scheme-format
msgid "unknown unit: ~S"
msgstr "unbekannte Einheit: ~S"
-#: lily-library.scm:626
-#, fuzzy, scheme-format
+#: lily-library.scm:579
+#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
-"keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität "
-"hinzufügen"
+msgstr "keine \\version-Anweisung gefunden, ~a für zukünftige Kompatibilität hinzufügen"
-#: lily-library.scm:633
+#: lily-library.scm:587
msgid "old relative compatibility not used"
msgstr "alte relative Kompatibilität nicht verwendet"
-#: lily.scm:144
-#, fuzzy, scheme-format
+#: lily.scm:173
+#, scheme-format
msgid "cannot find: ~A"
-msgstr "»%s« kann nicht gefunden werden"
+msgstr "~A kann nicht gefunden werden"
-#: lily.scm:209
+#: lily.scm:238
#, scheme-format
msgid "wrong type for argument ~a. Expecting ~a, found ~s"
msgstr "falscher Typ für Argument ~a; ~a erwartet, ~s gefunden"
-#: lily.scm:525 lily.scm:589
+#: lily.scm:619
+#, scheme-format
+msgid "job ~a terminated with signal: ~a"
+msgstr "Auftrag ~a mit Signal ~a beendet"
+
+#: lily.scm:622
+#, scheme-format
+msgid ""
+"logfile ~a (exit ~a):\n"
+"~a"
+msgstr ""
+"Logdatei ~a (Ende ~a):\n"
+"~a"
+
+#: lily.scm:649 lily.scm:742
#, scheme-format
msgid "failed files: ~S"
msgstr "gescheiterte Dateien: ~S"
-#: lily.scm:579
+#: lily.scm:732
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr "Ausgabeumleitung nach ~a..."
#: ly-syntax-constructors.scm:40
-#, fuzzy
msgid "Music head function must return Music object"
msgstr "Musikkopf-Funktion muss Musikobjekt zurückliefern."
-#: ly-syntax-constructors.scm:136
+#: ly-syntax-constructors.scm:139
#, scheme-format
msgid "Invalid property operation ~a"
-msgstr ""
+msgstr "Ungültige Eigenschaftsoperation ~a"
-#: markup.scm:123
+#: markup.scm:94
#, scheme-format
msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S"
msgstr "Falsche Anzahl an Argumenten: ~A erwartet, ~A gefunden: ~S"
-#: markup.scm:129
+#: markup.scm:100
#, scheme-format
msgid "Invalid argument in position ~A. Expect: ~A, found: ~S."
msgstr "Ungültiges Argument an Position ~A. ~A erwartet, ~S gefunden."
-#: music-functions.scm:213
-#, fuzzy
+#: music-functions.scm:228
msgid "More alternatives than repeats. Junking excess alternatives"
-msgstr "mehr Alternativen als Wiederholungen"
+msgstr "mehr Alternativen als Wiederholungen. Überschüssige Alternativen werden verworfen"
-#: music-functions.scm:232
-#, fuzzy, scheme-format
+#: music-functions.scm:250
+#, scheme-format
msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr "2 Elemente für Akkord-Tremolo erwartet, %d gefunden"
+msgstr "2 Elemente für Akkord-Tremolo erwartet, ~a gefunden"
-#: music-functions.scm:538
+#: music-functions.scm:573
#, scheme-format
msgid "music expected: ~S"
msgstr "Musik erwartet: ~S"
#. FIXME: uncomprehensable message
-#: music-functions.scm:589
+#: music-functions.scm:623
#, scheme-format
msgid "Bar check failed. Expect to be at ~a, instead at ~a"
msgstr "Taktüberprüfung gescheitert. bei ~a erwartet, stattdessen bei ~a"
-#: music-functions.scm:748
-#, fuzzy, scheme-format
+#: music-functions.scm:773
+#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr "zitierte Musik »~S« kann nicht gefunden werden"
-#: music-functions.scm:942
+#: music-functions.scm:970
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr "unbekannter Vorzeichenstil: ~S"
-#: output-ps.scm:315
+#: output-ps.scm:276
msgid "utf-8-string encountered in PS backend"
msgstr "UTF-8-Zeichenkette in PostScript-Backend gefunden"
msgid "cannot decypher Pango description: ~a"
msgstr "Pango-Beschreibung kann nicht entschlüsselt werden: ~a"
-#: output-tex.scm:98
+#: output-tex.scm:97
#, scheme-format
msgid "cannot find ~a in ~a"
msgstr "~a kann nicht in ~a gefunden werden"
-#: paper.scm:69
-msgid "Not in toplevel scope"
-msgstr "Nicht auf höchster Ebene im Gültigkeitsbereich"
+#: paper.scm:84
+msgid "set-global-staff-size: not in toplevel scope"
+msgstr "set-global-staff-size: Nicht auf höchster Ebene im Gültigkeitsbereich"
-#: paper.scm:117
+#: paper.scm:132
#, scheme-format
msgid "This is not a \\layout {} object, ~S"
msgstr "Dies ist kein \\layout {} Objekt, ~S"
-#: paper.scm:129
+#: paper.scm:144
#, scheme-format
msgid "Unknown papersize: ~a"
-msgstr ""
+msgstr "Unbekannte Papiergröße: ~a"
#. TODO: should raise (generic) exception with throw, and catch
#. that in parse-scm.cc
-#: paper.scm:144
+#: paper.scm:159
msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
-"#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden"
+msgstr "#(set-paper-size ..) muss innerhalb von \\paper { ... } verwendet werden"
-#: parser-clef.scm:126
+#: parser-clef.scm:127
#, scheme-format
msgid "unknown clef type `~a'"
msgstr "unbekannter Notenschlüsseltyp »~a«"
-#: parser-clef.scm:127
-msgid "see scm/clef.scm for supported clefs"
-msgstr "unterstützte Notenschlüssel können in scm/clef.scm gefunden werden"
+#: parser-clef.scm:128
+#, scheme-format
+msgid "supported clefs: ~a"
+msgstr "unterstützte Notenschlüssel: ~a"
-#: ps-to-png.scm:88
+#: ps-to-png.scm:64
#, scheme-format
msgid "~a exited with status: ~S"
msgstr "~a mit Rückgabewert ~S beendet"
-#: to-xml.scm:190
-#, fuzzy, scheme-format
+#: to-xml.scm:180
+#, scheme-format
msgid "assertion failed: ~S"
-msgstr "Behauptung gescheitert"
-
-#~ msgid "silly pitch"
-#~ msgstr "sinnlose Tonhöhe"
+msgstr "Behauptung gescheitert: ~S"
#~ msgid "show warranty"
#~ msgstr "Gewährleistung anzeigen"
#~ "Example usage:\n"
#~ "\n"
#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
-#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
-#~ "BOOK\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
#~ " lilypond-book --process='lilypond -I include' BOOK\n"
#~ msgstr ""
-#~ "LilyPond-Auszüge in gemischtem HTML-, LaTeX- oder texinfo-Dokument "
-#~ "verarbeiten.\n"
+#~ "LilyPond-Auszüge in gemischtem HTML-, LaTeX- oder texinfo-Dokument verarbeiten.\n"
#~ "\n"
#~ "Beispiel-Aufrufe:\n"
#~ "\n"
#~ " lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BUCH\n"
-#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" "
-#~ "BUCH\n"
+#~ " lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BUCH\n"
#~ " lilypond-book --process='lilypond -I include' BUCH\n"
#~ msgid "Convert MIDI to LilyPond source."
#~ msgid "example"
#~ msgstr "Beispiel"
+#~ msgid "accidental `%s' not found"
+#~ msgstr "Vorzeichen `%s' nicht gefunden"
+
+#~ msgid ""
+#~ "vertical alignment called before line-breaking.\n"
+#~ "Only do cross-staff spanners with PianoStaff."
+#~ msgstr ""
+#~ "vertikale Ausrichtung vor Zeilenumbruch aufgerufen.\n"
+#~ "Nur Zeilenzusammenfassungen mit PianoStaff erzeugen."
+
#~ msgid "loading default font"
#~ msgstr "Standardschriftart wird geladen"
-#~ msgid "cannot find default font: `%s'"
+#~ msgid "can't find default font: `%s'"
#~ msgstr "Standardschriftart kann nicht gefunden werden: »%s«"
#~ msgid "no one to print a tremolos"
#~ msgid "no system number set in constrained-breaking"
#~ msgstr "keine Systemzahl bei Bedingungsverletzung gesetzt"
-#~ msgid "couldnnot find line breaking that satisfies constraints"
-#~ msgstr ""
-#~ "es können keine Zeilenumbrüche gefunden werden, die die Bedingungen "
-#~ "erfüllen"
+#~ msgid "couldn't find line breaking that satisfies constraints"
+#~ msgstr "es können keine Zeilenumbrüche gefunden werden, die die Bedingungen erfüllen"
+
+#~ msgid "can't find: `%s'"
+#~ msgstr "»%s« kann nicht gefunden werden"
#~ msgid "junking event: `%s'"
#~ msgstr "Ereignis wird ignoriert: »%s«"
#~ msgid "no one to print a repeat brace"
#~ msgstr "niemand zur Erzeugung einer Wiederholung"
-#~ msgid "cannot find `%s' context"
+#~ msgid "can't find `%s' context"
#~ msgstr "Kontext »%s« kann nicht gefunden werden"
-#~ msgid "Optimal demerits: %f"
-#~ msgstr "Optimale Bewertung: %f"
-
#~ msgid "no feasible line breaking found"
#~ msgstr "Keine praktikablen Zeilenumbrüche gefunden"
-#~ msgid "crescendo too small"
-#~ msgstr "Crescendo zu kurz"
+#~ msgid "BACK"
+#~ msgstr "ZURÜCK"
+
+#~ msgid ""
+#~ "use backend BACK (gnome, ps,eps,\n"
+#~ "scm, svg, tex, texstr)\n"
+#~ "default: PS"
+#~ msgstr ""
+#~ "Backend BACK verwenden (gnome, ps, eps,\n"
+#~ "scm, svg, tex, texstr)\n"
+#~ "Standard: PS"
#~ msgid "print this help"
#~ msgstr "diese Hilfe ausgeben"
+#~ msgid "do not generate printed output"
+#~ msgstr "keine gedruckte Ausgabe erzeugen"
+
+#~ msgid "generate a preview of the first system"
+#~ msgstr "ein Bild des ersten Systems erzeugen"
+
+#~ msgid "disallow unsafe Scheme and PostScript operations"
+#~ msgstr "unsichere Scheme- und PostScript-Operationen verweigern"
+
+#~ msgid "Evaluating %s"
+#~ msgstr "%s wird ausgewertet"
+
+#~ msgid "silly pitch"
+#~ msgstr "sinnlose Tonhöhe"
+
+#~ msgid "experimental: temporarily fine tuning (of %d cents) a channel."
+#~ msgstr "Experimentell: temporäre Feinabstimmung (von %d Hundertsteln) des Kanals."
+
#~ msgid "music for the martians."
#~ msgstr "Musik für Marsmenschen."
#~ msgid "TFM header of `%s' has only %u word (s)"
#~ msgstr "TFM Header von »%s« hat nur %u Wort(e)"
-#~ msgid ""
-#~ "%s: TFM file has %u parameters, which is more than the %u I can handle"
+#~ msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
#~ msgstr "%s: TFM-Datei hat %u Parameter - mehr als die Maximalzahl %u"
-#~ msgid "cannot find ascii character: %d"
+#~ msgid "can't find ascii character: %d"
#~ msgstr "folgendes ASCII-Zeichen kann nicht gefunden werden: %d"
#~ msgid "no one to print a tuplet start bracket"
-#~ msgstr ""
-#~ "nichts für die Ausgabe einer öffnenden Wertaufteilungsklammer vorhanden"
+#~ msgstr "nichts für die Ausgabe einer öffnenden Wertaufteilungsklammer vorhanden"
#~ msgid "unterminated trill spanner"
#~ msgstr "unbegrenzter Triller"
#~ msgid "Incorrect lilypond version: %s (%s, %s)"
#~ msgstr "Falsche lilypond-Version: %s (%s, %s)"
-#~ msgid "cannot find signature for music function"
+#~ msgid "can't find signature for music function"
#~ msgstr "Signatur für Musikfunktion kann nicht gefunden werden"
+#~ msgid ""
+#~ "nThe PostScript backend does not support the 'classic'\n"
+#~ "framework. Use the EPS backend instead,\n"
+#~ "\n"
+#~ " lilypond -b eps <file>\n"
+#~ "\n"
+#~ "or remove the lilypond-book specific settings from the input.\n"
+#~ msgstr ""
+#~ "nDas PostScript-Backend unterstützt nicht das 'classic'\n"
+#~ "Framework. Stattdessen das EPS-Backend verwenden:\n"
+#~ "\n"
+#~ " lilypond -b eps <file>\n"
+#~ "\n"
+#~ "oder die Lilypond-Buch-spezifischen Einstellungen aus der Eingabe entfernen.\n"
+
+#~ msgid "see scm/clef.scm for supported clefs"
+#~ msgstr "unterstützte Notenschlüssel können in scm/clef.scm gefunden werden"
+
#~ msgid "lilylib module"
#~ msgstr "Modul lilylib"
#~ msgid ""
#~ " -e, --edit edit in place\n"
-#~ " -f, --from=VERSION start from VERSION [default: \\version found in "
-#~ "file]\n"
+#~ " -f, --from=VERSION start from VERSION [default: \\version found in file]\n"
#~ " -h, --help print this help\n"
#~ " -n, --no-version do not add \\version command if missing\n"
-#~ " -s, --show-rules print rules [default: --from=0, --"
-#~ "to=@TOPLEVEL_VERSION@]\n"
-#~ " -t, --to=VERSION convert to VERSION [default: "
-#~ "@TOPLEVEL_VERSION@]\n"
+#~ " -s, --show-rules print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]\n"
+#~ " -t, --to=VERSION convert to VERSION [default: @TOPLEVEL_VERSION@]\n"
#~ " -v, --version print program version"
#~ msgstr ""
#~ " -e, --edit auf der Stelle ändern\n"
-#~ " -f, --from=VERSION von VERSION starten [Standard: in Datei "
-#~ "gefundene \\version]\n"
+#~ " -f, --from=VERSION von VERSION starten [Standard: in Datei gefundene \\version]\n"
#~ " -h, --help diese Hilfe ausgeben\n"
#~ " -n, --no-version Befehl \\version nicht verwenden, wenn er fehlt\n"
-#~ " -s, --show-rules Regeln ausgeben [Standard: --from=0, --"
-#~ "to=@TOPLEVEL_VERSION@]\n"
-#~ " -t, --to=VERSION in VERSION umwandeln [Standard: "
-#~ "@TOPLEVEL_VERSION@]\n"
+#~ " -s, --show-rules Regeln ausgeben [Standard: --from=0, --to=@TOPLEVEL_VERSION@]\n"
+#~ " -t, --to=VERSION in VERSION umwandeln [Standard: @TOPLEVEL_VERSION@]\n"
#~ " -v, --version Programmversion ausgeben"
#~ msgid "%s: skipping: `%s'"
#~ msgid "Wrote `%s'"
#~ msgstr "`%s' geschrieben"
-#~ msgid "cannot dlopen: %s: %s"
+#~ msgid "can't dlopen: %s: %s"
#~ msgstr "dlopen erfolglos: %s: %s"
#~ msgid "install package: %s or %s"
#~ msgstr "Passt nicht: `%s'"
#~ msgid "Rebuild all .afm files, and remove all .pk and .tfm files."
-#~ msgstr ""
-#~ "Bauen Sie alle .afm-Dateien neu, und löschen Sie alle .pk- und .tfm-"
-#~ "Dateien."
+#~ msgstr "Bauen Sie alle .afm-Dateien neu, und löschen Sie alle .pk- und .tfm-Dateien."
#~ msgid "Rerun with -V to show font paths."
#~ msgstr "Starten Sie erneut mit -V, um Suchpfade für Schriftarten anzuzeigen"
#~ msgid "A script for removing font-files is delivered with the source-code:"
-#~ msgstr ""
-#~ "Ein Skript zum Entfernen von Schriftartdateien wird mit dem Quellcode "
-#~ "ausgeliefert:"
+#~ msgstr "Ein Skript zum Entfernen von Schriftartdateien wird mit dem Quellcode ausgeliefert:"
#~ msgid "beam has less than two visible stems"
#~ msgstr "Balken hat weniger als zwei sichtbare Notenhälse"
#~ msgid "run in safe mode"
#~ msgstr "im sicheren Modus laufen lassen"
-#~ msgid "cannot handle a percent repeat of length: %s"
+#~ msgid "can't handle a percent repeat of length: %s"
#~ msgstr "Prozentwiederholung der Länge %s kann nicht behandelt werden"
#~ msgid "rest direction not set. Cannot resolve collision."
-#~ msgstr ""
-#~ "Pausenrichtung nicht gesetzt. Kollision kann nicht aufgelöst werden."
+#~ msgstr "Pausenrichtung nicht gesetzt. Kollision kann nicht aufgelöst werden."
#~ msgid "lilypond -e EXPR means:"
#~ msgstr "lilypond -e AUSD bedeutet:"
#~ msgid " Evalute the Scheme EXPR before parsing any .ly files."
#~ msgstr " Das Schema AUSD vor der Analyse aller .ly-Dateien auswerten"
-#~ msgid ""
-#~ " Multiple -e options may be given, they will be evaluated sequentially."
-#~ msgstr ""
-#~ " Mehrere -e Optionen dürfen angegeben werden, sie werden sequentiell "
-#~ "ausgewertet"
+#~ msgid " Multiple -e options may be given, they will be evaluated sequentially."
+#~ msgstr " Mehrere -e Optionen dürfen angegeben werden, sie werden sequentiell ausgewertet"
-#~ msgid ""
-#~ " The function ly:set-option allows for access to some internal variables."
-#~ msgstr ""
-#~ " Die Funktion ly:set-option erlaubt Zugriff auf einige interne Variablen."
+#~ msgid " The function ly:set-option allows for access to some internal variables."
+#~ msgstr " Die Funktion ly:set-option erlaubt Zugriff auf einige interne Variablen."
#~ msgid "Usage: lilypond -e \"(ly:set-option SYMBOL VAL)\""
#~ msgstr "Aufruf: lilypond -e \"(ly:set-option SYMBOL WERT)\""
#~ msgid "Could not find bounding box of `~a'"
#~ msgstr "Begrenzungskasten von »~a« konnte nicht gefunden werden"
-#~ msgid "cannot find CFF/PFA/PFB font ~S=~S"
+#~ msgid "can't find CFF/PFA/PFB font ~S=~S"
#~ msgstr "CFF/PFA/PFB-Schriftart ~S=~S kann nicht gefunden werden"
#~ msgid "unknown bar glyph: `~S'"
#~ msgid "keep all output, output to directory %s.dir"
#~ msgstr "Alle Ausgaben aufbewahren, ins Verzeichnis %s.dir ausgeben"
-#~ msgid "do not run LilyPond"
+#~ msgid "don't run LilyPond"
#~ msgstr "LilyPond nicht aufrufen"
#~ msgid "produce MIDI output only"
#~ msgstr "Keine Dateien auf der Kommandozeile angegeben"
#~ msgid "Running LilyPond failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "LilyPond-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für "
-#~ "ein Protokoll (Trace)."
+#~ msgstr "LilyPond-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll (Trace)."
#~ msgid "Failed to make PS file. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "Erzeugung der PS-Datei gescheitert. Versuchen Sie es erneut mit --verbose "
-#~ "für ein Protokoll."
+#~ msgstr "Erzeugung der PS-Datei gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll."
#~ msgid "%s output to <stdout>..."
#~ msgstr "Ausgabe von %s nach <stdout>..."
#~ msgid "%s output to %s..."
#~ msgstr "Ausgabe von %s nach %s..."
-#~ msgid "cannot find file: `%s.%s'"
+#~ msgid "can't find file: `%s.%s'"
#~ msgstr "Kann Datei nicht finden: `%s.%s'"
#~ msgid "Accidental rule must be pair or context-name; Found %s"
#~ msgstr "Vorzeichensatz paarweise oder mit Kontextname erwartet; %s gefunden"
-#~ msgid "Cannot switch translators, I'm there already"
+#~ msgid "Can't switch translators, I'm there already"
#~ msgstr "Kann Übersetzer nicht ändern, ist bereits geschehen"
#~ msgid "I'm one myself"
#~ msgid "Huh? Got %d, expected %d characters"
#~ msgstr "Hä? %d Zeichen erhalten, %d erwartet"
-#~ msgid "Donnot you want polyphonic voices instead?"
+#~ msgid "Don't you want polyphonic voices instead?"
#~ msgstr "Wollen Sie nicht stattdessen Mehrstimmigkeit?"
#~ msgid "No volta spanner to end"
#~ msgstr "Schreibe HTML-Menü `%s'..."
#~ msgid "Running LaTeX failed. Rerun with --verbose for a trace."
-#~ msgstr ""
-#~ "LaTeX-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein "
-#~ "Protokoll."
+#~ msgstr "LaTeX-Aufruf gescheitert. Versuchen Sie es erneut mit --verbose für ein Protokoll."
#~ msgid "DIM"
#~ msgstr "GROE"
#~ msgid "pass OPT quoted to the lilypond command line"
#~ msgstr "OPT \"zitiert\" an die LilyPond-Kommandozeile übergeben"
-#~ msgid ""
-#~ "force fontsize for all inline lilypond. DIM is assumed to be in points"
-#~ msgstr ""
-#~ "Schriftgröße für eingebettetes LilyPond erzwingen. Einheit für GROE: "
-#~ "Punkte"
+#~ msgid "force fontsize for all inline lilypond. DIM is assumed to be in points"
+#~ msgstr "Schriftgröße für eingebettetes LilyPond erzwingen. Einheit für GROE: Punkte"
#~ msgid "deprecated, use --force-music-fontsize"
#~ msgstr "veraltet, verwenden Sie --force-music-fontsize"
#~ msgid "prepend PREF before each -M dependency"
#~ msgstr "stelle PRÄF den -M Abhängigkeiten voran"
-#~ msgid "do not run lilypond"
+#~ msgid "don't run lilypond"
#~ msgstr "LilyPond nicht aufrufen"
-#~ msgid "do not generate pictures"
+#~ msgid "don't generate pictures"
#~ msgstr "keine Bilder generieren"
#~ msgid "strip all lilypond blocks from output"
#~ msgid "where to place generated files"
#~ msgstr "Ziel der generierten Dateien"
-#~ msgid ""
-#~ "round filled box horizontal extent smaller than blot; decreasing blot"
-#~ msgstr ""
-#~ "Breite des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere "
-#~ "Kreis"
+#~ msgid "round filled box horizontal extent smaller than blot; decreasing blot"
+#~ msgstr "Breite des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere Kreis"
#~ msgid "round filled box vertical extent smaller than blot; decreasing blot"
-#~ msgstr ""
-#~ "Höhe des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere "
-#~ "Kreis"
+#~ msgstr "Höhe des abgerundeten Kastens kleiner als Kreisdurchmesser; verkleinere Kreis"
#~ msgid "use output format EXT"
#~ msgstr "Ausgabeformat EXT benutzen"
#~ msgid "prepend DIR to dependencies"
#~ msgstr "stelle VERZ den Abhängigkeiten voran"
-#~ msgid "cannot find start of phrasing slur"
+#~ msgid "can't find start of phrasing slur"
#~ msgstr "kann Anfang des Phrasierungsbogens nicht finden"
#~ msgid "Where SYMBOL VAL pair is any of:"
#~ msgid "Symbol is not a parent context: %s. Ignored"
#~ msgstr "Symbol ist kein Elternkontext: %s. Ignoriert"
-#~ msgid "cannot find character number: %d"
+#~ msgid "can't find character number: %d"
#~ msgstr "Zeichennummer kann nicht gefunden werden: %d"
-#~ msgid "cannot find character called: `%s'"
+#~ msgid "can't find character called: `%s'"
#~ msgstr "Zeichen kann nicht gefunden werden: `%s'"
#~ msgid "Beam has less than two stems. Removing beam."
#~ msgstr "Balken hat weniger als zwei Notenhälse. Notenhals wird entfernt."
-#~ msgid ""
-#~ "Not sure that we can find a nice beam slope (no viable initial "
-#~ "configuration found)."
-#~ msgstr ""
-#~ "Es kann wahrscheinlich keine optimale Balkenneigung ermittelt werden "
-#~ "(keine funktionsfähige Anfangskonfiguration gefunden)"
+#~ msgid "Not sure that we can find a nice beam slope (no viable initial configuration found)."
+#~ msgstr "Es kann wahrscheinlich keine optimale Balkenneigung ermittelt werden (keine funktionsfähige Anfangskonfiguration gefunden)"
-#~ msgid ""
-#~ "Nothing to connect extender to on the left. Ignoring extender event."
-#~ msgstr ""
-#~ "Nichts vorhanden, um die Erweiterung nach links zu verbinden. "
-#~ "Erweiterungsanforderung wird ignoriert."
+#~ msgid "Nothing to connect extender to on the left. Ignoring extender event."
+#~ msgstr "Nichts vorhanden, um die Erweiterung nach links zu verbinden. Erweiterungsanforderung wird ignoriert."
-#~ msgid "couldnnot find any font satisfying "
+#~ msgid "couldn't find any font satisfying "
#~ msgstr "konnte keine passende Schriftart finden für "
#~ msgid ""
#~ "Grob %s endet, bevor dies erwartet wurde."
#~ msgid "Nothing to connect hyphen to on the left. Ignoring hyphen event."
-#~ msgstr ""
-#~ "Nichts vorhanden, um den Bindestrich nach links zu verbinden. "
-#~ "Bindestrichanforderung wird ignoriert."
+#~ msgstr "Nichts vorhanden, um den Bindestrich nach links zu verbinden. Bindestrichanforderung wird ignoriert."
#~ msgid "Score contains errors; will not process it"
#~ msgstr "Noten enthalten Fehler; keine weitere Verarbeitung"
#~ msgstr "Mensural_ligature: delta-pitch undefiniert bei flexa %d; nehme 0 an"
#~ msgid "Mensural_ligature:flexa-width undefined on flexa %d; assuming 2.0"
-#~ msgstr ""
-#~ "Mensural_ligature: flexa-width undefiniert bei flexa %d; nehme 2.0 an"
+#~ msgstr "Mensural_ligature: flexa-width undefiniert bei flexa %d; nehme 2.0 an"
#~ msgid "silly duration"
#~ msgstr "sinnlose Dauer"
#~ msgstr "Staff_symbol: Einrückung reicht über das Zeilenende hinaus"
#~ msgid "Error syncing file (disk full?)"
-#~ msgstr ""
-#~ "Datei konnte nicht synchronisiert (geschrieben) werden. (Platte voll?)"
+#~ msgstr "Datei konnte nicht synchronisiert (geschrieben) werden. (Platte voll?)"
#~ msgid "No ties were created!"
#~ msgstr "Es wurden keine Bindebögen erzeugt!"
#~ msgstr "Vaticana_ligature:delta-pitch -> Kombination wird ignoriert"
#~ msgid "First argument must be a procedure taking one argument"
-#~ msgstr ""
-#~ "Das erste Argument muss eine Prozedur sein, welche ein Argument erwartet"
+#~ msgstr "Das erste Argument muss eine Prozedur sein, welche ein Argument erwartet"
#~ msgid "Expecting musical-pitch value"
#~ msgstr "Erwarte musikalischen Tonhöhenwert"
#~ msgid "Text_spanner too small"
#~ msgstr "Textklammer zu klein"
-#~ msgid "Cannot specify direction for this request"
+#~ msgid "Can't specify direction for this request"
#~ msgstr "Es kann keine Richtung für diese Anforderung angegeben werden"
stroke
} bind def
-/draw_dashed_line % dx dy thickness dashpattern draw_dashed_line
+/draw_dashed_line % dx dy thickness dashpattern offset draw_dashed_line
{
1 setlinecap
1 setlinejoin
sub_acc_name, str)
str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)",
r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str)
-
+ ## FIXME: standard vs default, alteration-FOO vs FOO-alteration
+ str = str.replace ('alteration-default-glyph-name-alist',
+ 'standard-alteration-glyph-name-alist')
return str
conversions.append (((2, 11, 6), conv, """Rename accidental glyphs, use glyph-name-alist."""))
#
# source file of the GNU LilyPond music typesetter
#
-# (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
import __main__
source file of the GNU LilyPond music typesetter
- (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 2001--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
*/
def ly_expression (self):
return '~'
+
+class HairpinEvent (Event):
+ def __init__ (self, type):
+ self.type = type
+ def hairpin_to_ly (self):
+ val = ''
+ tp = { 0: '\!', 1: '\<', -1: '\>' }.get (self.type)
+ if tp:
+ val += tp
+ return val
+
+ def ly_expression (self):
+ return self.hairpin_to_ly ()
+ def print_ly (self, printer):
+ val = self.hairpin_to_ly ()
+ if val:
+ printer.dump (val)
+
+
+
+class DynamicsEvent (Event):
+ def __init__ (self):
+ self.type = None
+ self.available_commands = [ "ppppp", "pppp", "ppp", "pp", "p",
+ "mp", "mf",
+ "f", "ff", "fff", "ffff",
+ "fp", "sf", "sff", "sp", "spp", "sfz", "rfz" ];
+ def ly_expression (self):
+ if self.type == None:
+ return;
+ elif self.type in self.available_commands:
+ return '\%s' % self.type
+ else:
+ return '\markup{ \dynamic %s }' % self.type
+
+ def print_ly (self, printer):
+ if self.type == None:
+ return
+ elif self.type in self.available_commands:
+ printer.dump ("\\%s" % self.type)
+ else:
+ printer.dump ("\\markup{ \\dynamic %s }" % self.type)
+
+
+class ArticulationEvent (Event):
+ def __init__ (self):
+ self.type = None
+ self.force_direction = None
+
+ def direction_mod (self):
+ dirstr = { 1: '^', -1: '_', 0: '-' }.get (self.force_direction)
+ if dirstr:
+ return dirstr
+ else:
+ return ''
+
+ def ly_expression (self):
+ return '%s\\%s' % (self.direction_mod (), self.type)
+
+
+class TremoloEvent (Event):
+ def __init__ (self):
+ self.bars = 0;
+
+ def ly_expression (self):
+ str=''
+ if self.bars > 0:
+ str += ':%s' % (2 ** (2 + string.atoi (self.bars)))
+ return str
+
+
class RhythmicEvent(Event):
def __init__ (self):
Event.__init__ (self)
p = p.get_parent ()
def get_typed_children (self, klass):
- return [c for c in self._children if isinstance(c, klass)]
+ if not klass:
+ return []
+ else:
+ return [c for c in self._children if isinstance(c, klass)]
def get_named_children (self, nm):
- return self.get_typed_children (class_dict[nm])
+ return self.get_typed_children (class_dict.get (nm))
def get_named_child (self, nm):
return self.get_maybe_exist_named_child (nm)
for n in elements:
voice_id = n.get_maybe_exist_typed_child (class_dict['voice'])
- if not (voice_id or isinstance (n, Attributes)):
+ # TODO: If the first element of a voice is a dynamics entry,
+ # then voice_id is not yet set! Thus it will currently be ignored
+ if not (voice_id or isinstance (n, Attributes) or isinstance (n, Direction) ):
continue
if isinstance (n, Attributes) and not start_attr:
start_attr = n
continue
- if isinstance (n, Attributes):
+ if isinstance (n, Attributes) or isinstance (n, Direction):
for v in voices.values ():
v.add_element (n)
continue
class Instrument (Music_xml_node):
pass
+class Fermata (Music_xml_node):
+ pass
+class Dynamics (Music_xml_node):
+ pass
+class Articulations (Music_xml_node):
+ pass
+class Accent (Music_xml_node):
+ pass
+class Staccato (Music_xml_node):
+ pass
+class Tenuto (Music_xml_node):
+ pass
+class Tremolo (Music_xml_node):
+ pass
+class Technical (Music_xml_node):
+ pass
+class Ornaments (Music_xml_node):
+ pass
+
+
+class Direction (Music_xml_node):
+ pass
+class DirType (Music_xml_node):
+ pass
+class Wedge (Music_xml_node):
+ pass
+
+
## need this, not all classes are instantiated
## for every input file.
class_dict = {
'type': Type,
'part-list': Part_list,
'staff': Staff,
+ 'fermata': Fermata,
+ 'articulations': Articulations,
+ 'accent': Accent,
+ 'staccato': Staccato,
+ 'tenuto': Tenuto,
+ 'tremolo': Tremolo,
+ 'technical': Technical,
+ 'ornaments': Ornaments,
+ 'direction': Direction,
+ 'direction-type': DirType,
+ 'dynamics': Dynamics,
+ 'wedge': Wedge
}
def name2class_name (name):
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;; specify generic beam begin and end times
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;; Note: this file can't be used without LilyPond executable
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public (construct-chord-elements root duration modifications)
" Build a chord on root using modifiers in MODIFICATIONS. NoteEvents
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2003--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; NOTE: this is experimental code
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
(define (natural-chord-alteration p)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
0 to@tie{}6 and @var{alter} a fraction, denoting alteration. For
alterations, use symbols, e.g. @code{keySignature = #`((6 . ,FLAT))}.")
+ (lyricMelismaAlignment ,ly:dir? "Alignment to use for a melisma syllable.")
(majorSevenSymbol ,markup? "How should the major 7th be formatted
in a chord name?")
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(ly:add-interface
'accidental-suggestion-interface
- "An accidental, printed as a suggestion (typically: vertically over a note)"
- '())
+ "An accidental, printed as a suggestion (typically: vertically over a
+note)."
+ '())
(ly:add-interface
'bass-figure-interface
- "A bass figure text"
+ "A bass figure text."
'(implicit))
+(ly:add-interface
+ 'bass-figure-alignment-interface
+ "Align a bass figure."
+ '())
+
(ly:add-interface
'bend-after-interface
"A doit or drop."
'(thickness delta-position))
-(ly:add-interface
- 'bass-figure-alignment-interface
- ""
- '())
-
(ly:add-interface
'dynamic-interface
- "Any kind of loudness sign"
- '())
+ "Any kind of loudness sign."
+ '())
(ly:add-interface
'dynamic-line-spanner-interface
- "Dynamic line spanner"
- '(avoid-slur))
+ "Dynamic line spanner."
+ '(avoid-slur))
(ly:add-interface
'dynamic-text-spanner-interface
- "Dynamic text spanner"
- '(text))
+ "Dynamic text spanner."
+ '(text))
(ly:add-interface
'finger-interface
- "A fingering instruction"
+ "A fingering instruction."
'())
(ly:add-interface
'fret-diagram-interface
- "A fret diagram"
-
+ "A fret diagram."
'(align-dir barre-type dot-color dot-radius finger-code fret-count
label-dir number-type size string-count xo-font-magnification
mute-string open-string orientation string-fret-finger-combinations
(ly:add-interface
'key-cancellation-interface
- "A key cancellation"
- '())
-
-(ly:add-interface
- 'ligature-interface
- "A ligature"
- '())
-
-(ly:add-interface
- 'key-cancellation-interface
- "A key cancellation"
+ "A key cancellation."
'())
(ly:add-interface
'ligature-bracket-interface
- "A bracket indicating a ligature in the original edition"
+ "A bracket indicating a ligature in the original edition."
'(width thickness height))
-
(ly:add-interface
- 'lyric-syllable-interface
- "A single piece of lyrics"
+ 'ligature-interface
+ "A ligature."
'())
(ly:add-interface
"Any object that is related to lyrics."
'())
+(ly:add-interface
+ 'lyric-syllable-interface
+ "A single piece of lyrics."
+ '())
+
(ly:add-interface
'mark-interface
- "A rehearsal mark"
+ "A rehearsal mark."
'())
(ly:add-interface
'metronome-mark-interface
- "A metronome mark"
+ "A metronome mark."
'())
(ly:add-interface
'(bound-padding))
(ly:add-interface
-'note-name-interface
- "Note name"
+ 'note-name-interface
+ "Note names."
'(style))
(ly:add-interface
(ly:add-interface
'parentheses-interface
- "Parentheses for other objects"
+ "Parentheses for other objects."
'(padding stencils))
(ly:add-interface
'piano-pedal-interface
- "A piano pedal sign"
+ "A piano pedal sign."
'())
(ly:add-interface
'piano-pedal-script-interface
- "A piano pedal sign, fixed size"
+ "A piano pedal sign, fixed size."
'())
(ly:add-interface
'pitched-trill-interface
- "A note head to indicate trill pitches"
- '(accidental-grob))
-
-(ly:add-interface
- 'trill-pitch-accidental-interface
- "An accidental for trill pitch"
- '()
- )
-
-(ly:add-interface
- 'trill-spanner-interface
- "An accidental for trill pitch"
- '())
+ "A note head to indicate trill pitches."
+ '(accidental-grob))
(ly:add-interface
'rhythmic-grob-interface
- "Any object with a duration. Used to determine which grobs are
+ "Any object with a duration. Used to determine which grobs are
interesting enough to maintain a hara-kiri staff."
'())
-
(ly:add-interface
'spacing-options-interface
- "Supports setting of spacing variables"
+ "Supports setting of spacing variables."
'(spacing-increment shortest-duration-space))
(ly:add-interface
'stanza-number-interface
- "A stanza number, to be put in from of a lyrics line"
+ "A stanza number, to be put in from of a lyrics line."
'())
(ly:add-interface
'string-number-interface
- "A string number instruction"
+ "A string number instruction."
'())
(ly:add-interface
'stroke-finger-interface
- "A right hand finger instruction"
+ "A right hand finger instruction."
'(digit-names))
(ly:add-interface
;;; todo: this is not typesetting info. Move to interpretation.
(ly:add-interface
'tablature-interface
- "An interface for any notes set in a tablature staff"
+ "An interface for any notes set in a tablature staff."
+ '())
+
+(ly:add-interface
+ 'trill-spanner-interface
+ "A trill spanner."
+ '())
+
+(ly:add-interface
+ 'trill-pitch-accidental-interface
+ "An accidental for trill pitch."
'())
(ly:add-interface
'unbreakable-spanner-interface
- "A spanner that should not be broken across line breaks. Override
-with @code{breakable=##t}. "
-
+ "A spanner that should not be broken across line breaks. Override
+with @code{breakable=##t}."
'(breakable))
(ly:add-interface
'vertically-spaceable-interface
- "Objects that should be kept at constant vertical distances. Typically:
+ "Objects that should be kept at constant vertical distances. Typically:
@internalsref{VerticalAxisGroup} objects of @internalsref{Staff} contexts."
'())
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (define-grob-property symbol type? description)
makes it print only if there is no beam associated with this tuplet
bracket.")
(break-align-anchor ,number? "Grobs aligned to this break-align
-grob will have their X-offsets shifted by this number. In barlines,
+grob will have their X-offsets shifted by this number. In barlines,
for example, this is used to position grobs relative to the (visual)
center of the barline.")
(break-align-anchor-alignment ,number? "Read by
(break-align-symbol ,symbol? "This key is used for aligning and
spacing breakable items.")
(break-align-symbols ,list? "A list of symbols that determine
-which break-aligned grobs to align this to. If the grob selected by
+which break-aligned grobs to align this to. If the grob selected by
the first symbol in the list is invisible due to break-visibility,
we will align to the next grob (and so on).")
(break-align-orders ,vector? "Defines the order in which
(dot-count ,integer? "The number of dots.")
(dot-radius ,number? "Radius of dots.")
(duration-log ,integer? "The 2-log of the note head duration,
-i.e. @code{0} = whole note, @code{1} = half note, etc.")
+i.e., @code{0} = whole note, @code{1} = half note, etc.")
(eccentricity ,number? "How asymmetrical to make a slur.
Positive means move the center to the right.")
(extra-dy ,number? "Slope glissandi this much extra.")
(extra-offset ,number-pair? "A pair representing an offset. This
offset is added just before outputting the symbol, so the typesetting
-engine is completely oblivious to it.")
+engine is completely oblivious to it. The values are measured in
+@code{staff-space} units of the staff's @code{StaffSymbol}.")
(extra-spacing-width ,number-pair? "In the horizontal spacing
problem, we pad each item by this amount (by adding the @q{car} on the
left side of the item and adding the @q{cdr} on the right side of the
include @code{upright}, @code{italic}, @code{caps}.")
(font-size ,number? "The font size, compared to the @q{normal}
size. @code{0}@tie{}is style-sheet's normal size, @code{-1} is
-smaller, @code{+1} is bigger. Each step of@tie{}1 is approximately
+smaller, @code{+1} is bigger. Each step of@tie{}1 is approximately
12% larger, 6@tie{}steps are exactly a factor@tie{}2 larger.
Fractional values are allowed.")
(force-hshift ,number? "This specifies a manual shift for notes
normal notation for some types of polyphonic music.
@code{merge-differently-dotted} only applies to opposing stem
-directions (i.e. voice 1 &@tie{}2).")
+directions (i.e., voice 1 &@tie{}2).")
(merge-differently-headed ,boolean? "Merge note heads in
collisions, even if they have different note heads. The
smaller of the two heads is rendered invisible. This is used in
@internalsref{note-collision-interface}.
@code{merge-differently-headed} only applies to opposing stem
-directions (i.e. voice 1 &@tie{}2).")
+directions (i.e., voice 1 &@tie{}2).")
(minimum-X-extent ,number-pair? "Minimum size of an object in
X@tie{}dimension, measured in @code{staff-space} units.")
(minimum-Y-extent ,number-pair? "See @code{minimum-X-extent}.")
of spacing tuples: @code{(@var{break-align-symbol} @var{type}
. @var{distance})}, where @var{type} can be the symbols
@code{minimum-space} or @code{extra-space}.")
+ (space-to-barline ,boolean? "If set, the distance between a note
+and the following non-musical column will be measured to the barline
+instead of to the beginning of the non-musical column. If there is a
+clef change followed by a barline, for example, this means that we will
+try to space the non-musical column as though the clef is not there.")
(spacing-increment ,number? "Add this much space for a doubled
-duration. Typically, the width of a note head. See also
+duration. Typically, the width of a note head. See also
@internalsref{spacing-spanner-interface}.")
(springs-and-rods ,boolean? "Dummy variable for triggering
spacing routines.")
`(
;;;;;;;;;;;;;;;;
;; grobs & grob arrays. (alphabetical)
- (X-common ,ly:grob? "Common refpoint for axis group.")
+ (X-common ,ly:grob? "Common reference point for axis group.")
+
(Y-common ,ly:grob? "See @code{X-common}.")
- (adjacent-pure-heights ,vector? "Used by a VerticalAxisGroup to cache the Y-extents of different column ranges.")
- (axis-group-parent-X ,ly:grob? "Containing X axis group")
- (axis-group-parent-Y ,ly:grob? "Containing Y axis group")
- (accidental-grobs ,list? "Alist with (NOTENAME . GROBLIST) entries")
- (adjacent-hairpins ,ly:grob-array? "List of directly neighboring hairpins")
- (all-elements ,ly:grob-array? "list of all grobs in this line. Its
+
+ (accidental-grob ,ly:grob? "The accidental for this note.")
+ (accidental-grobs ,list? "An alist with @code{(@var{notename} .
+@var{groblist})} entries.")
+ (adjacent-pure-heights ,vector? "Used by a @code{VerticalAxisGroup} to
+cache the @code{Y-extent}s of different column ranges.")
+ (adjacent-hairpins ,ly:grob-array? "A list of directly neighboring
+hairpins.")
+ (all-elements ,ly:grob-array? "A list of all grobs in this line. Its
function is to protect objects from being garbage collected.")
- (arpeggio ,ly:grob? "pointer to arpeggio object.")
- (beam ,ly:grob? "pointer to the beam, if applicable.")
- (bracket ,ly:grob? "the bracket for a number.")
- (cross-staff ,boolean? "for a beam or a stem, true if we depend on inter-staff spacing")
- (direction-source ,ly:grob? "in case side-relative-direction is
-set, which grob to get the direction from .")
- (dot ,ly:grob? "reference to Dots object.")
- (dots ,ly:grob-array? "multiple Dots objects.")
- (figures ,ly:grob-array? "Figured bass objects for continuation line.")
- (important-column-ranks ,vector? "Cache of columns that contain items-worth-living.")
- (items-worth-living ,ly:grob-array? "A list of interesting items. If
-empty in a particular staff, then that staff is erased.")
+ (arpeggio ,ly:grob? "A pointer to an @code{Arpeggio} object.")
+ (axis-group-parent-X ,ly:grob? "Containing X@tie{}axis group.")
+ (axis-group-parent-Y ,ly:grob? "Containing Y@tie{}axis group.")
+
+ (bars ,ly:grob-array? "A list of bar line pointers.")
+ (beam ,ly:grob? "A pointer to the beam, if applicable.")
+ (bounded-by-me ,ly:grob-array? "A list of spanners that have this
+column as start/begin point. Only columns that have grobs or act as
+bounds are spaced.")
+ (bracket ,ly:grob? "The bracket for a number.")
- (glyph-name ,string? "a name of character within font.")
- (left-neighbors ,ly:grob-array? " List of
-spacing-wish grobs that are close to the current column.
+ (columns ,ly:grob-array? "A list of grobs, typically containing
+@code{PaperColumn} or @code{NoteColumn} objects.")
+ (conditional-elements ,ly:grob-array? "Internal use only.")
+ (cross-staff ,boolean? "For a beam or a stem, this is true if we
+depend on inter-staff spacing.")
-The closest spacing-wishes determine the actual distances between the
-columns.
-")
- (left-items ,ly:grob-array? "")
- (pedal-text ,ly:grob? "Pointer to the text of a mixed-style piano pedal.")
-
- (pure-Y-common ,ly:grob? "Caches the common_refpoint_of_array of the elements grob-set")
- (pure-relevant-items ,ly:grob-array? "A subset of elements that are relevant for finding the pure-Y-extent.")
- (pure-relevant-spanners ,ly:grob-array? "A subset of elements that are relevant for finding the pure-Y-extent.")
- (stem ,ly:grob? "pointer to Stem object.")
- (tremolo-flag ,ly:grob? "The tremolo object on a stem.")
- (tie ,ly:grob? "")
- (staff-symbol ,ly:grob? "the staff symbol grob that we're in.")
- (rest ,ly:grob? "the staff symbol grob that we're in.")
- (rests ,ly:grob-array? "A list of rest objects.")
- (rest-collision ,ly:grob? "rest collision that a rest is in.")
- (accidental-grob ,ly:grob? "Accidental for this note.")
- (bars ,ly:grob-array? "list of bar line pointers.")
- (bounded-by-me ,ly:grob-array? "list of spanners that have this
-column as start/begin point. Only columns that have grobs or act as
-bounds are spaced.")
-
- (columns ,ly:grob-array? "list of grobs, typically containing
-paper-columns or note-column objects.")
- (conditional-elements ,ly:grob-array? "Internal use only")
+ (direction-source ,ly:grob? "In case @code{side-relative-direction} is
+set, which grob to get the direction from.")
+ (dot ,ly:grob? "A reference to a @code{Dots} object.")
+ (dots ,ly:grob-array? "Multiple @code{Dots} objects.")
+
+ (elements ,ly:grob-array? "A list of grobs; the type is depending on
+the grob where this is set in.")
(encompass-objects ,ly:grob-array? "Objects that a slur should avoid
in addition to notes and stems.")
- (elements ,ly:grob-array? "list of grobs, type depending on the Grob
-where this is set in.")
- (grace-spacing ,ly:grob? "a run of grace notes.")
- (heads ,ly:grob-array? "List of note heads.")
-
- (note-columns ,pair? "list of NoteColumn grobs.")
-
- (normal-stems ,ly:grob-array? "Array of visible stems.")
- (note-heads ,ly:grob-array? "List of note head grobs")
- (note-head ,ly:grob? "A single note head")
- (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching cyclic dependencies.")
- (right-items ,ly:grob-array? "")
- (right-neighbors ,ly:grob-array? "see left-neighbors")
+
+ (figures ,ly:grob-array? "Figured bass objects for continuation line.")
+
+ (glyph-name ,string? "The glyph name within the font.")
+ (grace-spacing ,ly:grob? "A run of grace notes.")
+
+ (heads ,ly:grob-array? "A list of note heads.")
+
+ (important-column-ranks ,vector? "A cache of columns that contain
+@code{items-worth-living} data.")
+ (items-worth-living ,ly:grob-array? "A list of interesting items. If
+empty in a particular staff, then that staff is erased.")
+
+ (left-items ,ly:grob-array? "DOCME")
+ (left-neighbors ,ly:grob-array? "A list of @code{spacing-wishes} grobs
+that are close to the current column.
+
+The closest @code{spacing-wishes} determine the actual distances between the
+columns.")
+
+ (normal-stems ,ly:grob-array? "An array of visible stems.")
+ (note-columns ,pair? "A list of @code{NoteColumn} grobs.")
+ (note-head ,ly:grob? "A single note head.")
+ (note-heads ,ly:grob-array? "A list of note head grobs.")
+
+ (pedal-text ,ly:grob? "A pointer to the text of a mixed-style piano
+pedal.")
+ (pure-Y-common ,ly:grob? "A cache of the
+@code{common_refpoint_of_array} of the @code{elements} grob set.")
+ (pure-Y-offset-in-progress ,boolean? "A debugging aid for catching
+cyclic dependencies.")
+ (pure-relevant-items ,ly:grob-array? "A subset of elements that are
+relevant for finding the @code{pure-Y-extent}.")
+ (pure-relevant-spanners ,ly:grob-array? "A subset of elements that are
+relevant for finding the @code{pure-Y-extent}.")
+
+ (rest ,ly:grob? "A pointer to a @code{Rest} object.")
+ (rest-collision ,ly:grob? "A rest collision that a rest is in.")
+ (rests ,ly:grob-array? "A list of rest objects.")
+ (right-items ,ly:grob-array? "DOCME")
+ (right-neighbors ,ly:grob-array? "See @code{left-neighbors}.")
+
(separation-item ,ly:grob? "A separation item.")
- (slur ,ly:grob? "A pointer to a slur object")
- (spacing ,ly:grob? "the spacing spanner governing this section.")
- (spaceable-staves ,ly:grob-array? "Objects to be spaced during page layout.")
- (side-support-elements ,ly:grob-array? "the support, a list of grobs.")
- (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing objects.")
- (stems ,ly:grob-array? "list of stem objects, corresponding to the notes that the arpeggio has to be before.")
- (tuplets ,ly:grob-array? "list of smaller tuplet brackets")
- (tuplet-number ,ly:grob? "the number for a bracket.")
+ (side-support-elements ,ly:grob-array? "The side support, a list of
+grobs.")
+ (slur ,ly:grob? "A pointer to a @code{Slur} object.")
+ (spaceable-staves ,ly:grob-array? "Objects to be spaced during page
+layout.")
+ (spacing ,ly:grob? "The spacing spanner governing this section.")
+ (spacing-wishes ,ly:grob-array? "List of note spacing or staff spacing
+objects.")
+ (staff-symbol ,ly:grob? "The staff symbol grob that we are in.")
+ (stem ,ly:grob? "A pointer to a @code{Stem} object.")
+ (stems ,ly:grob-array? "A list of stem objects, corresponding to the
+notes that the arpeggio has to be before.")
+
+ (tie ,ly:grob? "A pointer to a @code{Tie} object.")
+ (tremolo-flag ,ly:grob? "The tremolo object on a stem.")
+ (tuplet-number ,ly:grob? "The number for a bracket.")
+ (tuplets ,ly:grob-array? "A list of smaller tuplet brackets.")
-
-
;;;;;;;;;;;;;;;;
;; other
- (begin-of-line-visible ,boolean? "Used for marking ChordNames that should only show changes.")
- (cause ,scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob. ")
- (circled-tip ,boolean? "Put a circle at start/end of hairpins (al/del niente)")
- (delta-position ,number? "vertical position difference")
- (details ,list? "alist of parameters for detailed grob behavior.
-
-more information on the allowed parameters can be found by inspecting
-lily/slur-scoring.cc, lily/beam-quanting.cc, and
-lily/tie-formatting-problem.cc. Setting @code{debug-tie-scoring},
+ (begin-of-line-visible ,boolean? "Used for marking @code{ChordNames}
+that should only show changes.")
+
+ (cause ,scheme? "Any kind of causation objects (i.e., music, or perhaps
+translator) that was the cause for this grob.")
+ (circled-tip ,boolean? "Put a circle at start/end of hairpins (al/del
+niente).")
+
+ (delta-position ,number? "The vertical position difference.")
+ (details ,list? "Alist of parameters for detailed grob behavior.
+
+More information on the allowed parameters can be found by inspecting
+@file{lily/slur-scoring.cc}, @file{lily/beam-quanting.cc}, and
+@file{lily/tie-formatting-problem.cc}. Setting @code{debug-tie-scoring},
@code{debug-beam-scoring} or @code{debug-slur-scoring} also provides
-useful clues.
+useful clues.")
-")
+ (font ,ly:font-metric? "A cached font metric object.")
- (font ,ly:font-metric? "Cached font metric object")
- (head-width ,ly:dimension? "width of this ligature head")
+ (head-width ,ly:dimension? "The width of this ligature head.")
- (ideal-distances ,list? "(@var{obj} . (@var{dist} . @var{strength})) pairs.")
- (interfaces ,list? "list of symbols indicating the interfaces supported by this object. Is initialized from the @code{meta} field.")
- (least-squares-dy ,number?
- "ideal beam slope, without damping.")
+ (ideal-distances ,list? "@code{(@var{obj} . (@var{dist} .
+@var{strength}))} pairs.")
+ (interfaces ,list? "A list of symbols indicating the interfaces
+supported by this object. It is initialized from the @code{meta} field.")
+
+ (least-squares-dy ,number? "The ideal beam slope, without damping.")
- (meta ,list? "Contains meta information. It is an alist with the
+ (meta ,list? "Provide meta information. It is an alist with the
entries @code{name} and @code{interfaces}.")
- (minimum-distances ,list? "list of rods, that have the format (@var{obj} . @var{dist}).")
+ (minimum-distances ,list? "A list of rods that have the format
+@code{(@var{obj} . @var{dist})}.")
- (positioning-done ,boolean?
- "Used to signal that a positioning element
-did its job. This ensures that a positioning is only done once.")
- (pure-Y-extent ,number-pair? "The estimated height of a system")
-
- (quantized-positions ,number-pair? "Beam positions after quanting.")
- (quantize-position ,boolean? "If set, a vertical alignment is aligned to be within staff spaces.")
- (quant-score ,string? "Beam quanting score -- can be stored for
-debugging")
+ (positioning-done ,boolean? "Used to signal that a positioning element
+did its job. This ensures that a positioning is only done once.")
+ (pure-Y-extent ,number-pair? "The estimated height of a system.")
+
+ (quant-score ,string? "The Beam quanting score -- can be stored for
+debugging.")
+ (quantize-position ,boolean? "If set, a vertical alignment is aligned
+to be within staff spaces.")
+ (quantized-positions ,number-pair? "The beam positions after
+quanting.")
- (script-stencil ,pair? "Pair (@code{type} . @code{arg}), which
-acts as an index for looking up a Stencil object.")
-
- (stem-info ,pair? "caching of stem parameters")
- (shorten ,ly:dimension? "The amount of space that a
-stem. Internally used to distribute beam shortening over stems. ")
- (skyline-distance ,number? "The distance between this staff and the next one, as determined by a skyline algorithm.")
- (skyline-horizontal-padding ,number? "For determining the vertical distance between 2 staves, it is possible to have a configuration which would result in a tight interleaving of grobs from the top staff and the bottom staff. The larger this parameter is, the farther apart the staves are placed in such a configuration.")
-
+ (script-stencil ,pair? "A pair @code{(@var{type} . @var{arg})} which
+acts as an index for looking up a @code{Stencil} object.")
+ (shorten ,ly:dimension? "The amount of space that a stem is shortened.
+Internally used to distribute beam shortening over stems.")
+ (skyline-distance ,number? "The distance between this staff and the
+next one, as determined by a skyline algorithm.")
+ (skyline-horizontal-padding ,number? "For determining the vertical
+distance between two staves, it is possible to have a configuration which
+would result in a tight interleaving of grobs from the top staff and the
+bottom staff. The larger this parameter is, the farther apart the staves
+are placed in such a configuration.")
+ (stem-info ,pair? "A cache of stem parameters.")
+
(use-breve-rest ,boolean? "Use breve rests for measures longer
than a whole rest.")
-
-
+ ;;;;;;;;;;;;;;;;
;; ancient notation
- (join-right-amount ,number? "")
- (primitive ,integer? "Pointer to a ligature primitive, i.e. an item similar to a note head that is part of a ligature. ")
-
;;;;;;; TODO:
- ;; there are too many properties for ancient notation
+ ;; There are too many properties for ancient notation;
;; probably neume-types (a list of symbols) would also work.
- ;; However, such this list would consist of a couple of dozens of
+ ;; However, such a list would consist of a couple of dozens of
;; entries, since head prefixes may be combined in many ways. If
- ;; the macros in gregorian-init.ly would directly set prefix-set,
+ ;; the macros in `gregorian-init.ly' would directly set prefix-set,
;; all the head prefixes could be junked; however, such macros
;; would be quite numerous, I guess. --jr
- (auctum ,boolean? "is this neume liquescentically augmented?")
- (ascendens ,boolean? "is this neume of an ascending type?")
- (add-cauda ,boolean? "does this flexa require an additional cauda on the left side?")
- (add-join ,boolean? "is this ligature head joined with the next one by a vertical line?")
- (cavum ,boolean? "is this neume outlined?")
- (descendens ,boolean? "is this neume of a descendent type?")
- (deminutum ,boolean? "is this neume deminished?")
- (flexa-height ,ly:dimension? "height of a flexa shape in a ligature grob in staff_space.")
- (flexa-width ,ly:dimension? "width of a flexa shape in a ligature grob in staff_space.")
- (join-heads ,boolean? "Whether to join the note heads of an ambitus grob with a vertical line.")
- (linea ,boolean? "attach vertical lines to this neume?")
- (add-stem ,boolean? "is this ligature head a virga and therefore needs an additional stem on the right side?")
- (context-info ,integer? "Within a ligature, the final glyph or shape of a head may be affected by the left and/or right neighbour head. context-info holds for each head such information about the left and right neighbour, encoded as a bit mask.")
- (inclinatum ,boolean? "is this neume an inclinatum?")
- (oriscus ,boolean? "is this neume an oriscus?")
- (quilisma ,boolean? "is this neume a quilisma?")
- (pes-or-flexa ,boolean? "shall this neume be joined with the previous head?")
- (prefix-set ,number? "a bit mask that holds all Gregorian head prefixes, such as @code{\\virga} or @code{\\quilisma}")
+ (add-cauda ,boolean? "Does this flexa require an additional cauda on
+the left side?")
+ (add-join ,boolean? "Is this ligature head-joined with the next one
+by a vertical line?")
+ (add-stem ,boolean? "Is this ligature head a virga and therefore needs
+an additional stem on the right side?")
+ (ascendens ,boolean? "Is this neume of ascending type?")
+ (auctum ,boolean? "Is this neume liquescentically augmented?")
+
+ (cavum ,boolean? "Is this neume outlined?")
+ (context-info ,integer? "Within a ligature, the final glyph or shape of
+a head may be affected by the left and/or right neighbour head.
+@code{context-info} holds for each head such information about the left and
+right neighbour, encoded as a bit mask.")
+
+ (descendens ,boolean? "Is this neume of descendent type?")
+ (deminutum ,boolean? "Is this neume deminished?")
+
+ (flexa-height ,ly:dimension? "The height of a flexa shape in a ligature
+grob (in @code{staff-space} units).")
+ (flexa-width ,ly:dimension? "The width of a flexa shape in a
+ligature grob in (in @code{staff-space} units).")
+
+ (inclinatum ,boolean? "Is this neume an inclinatum?")
+
+ (join-heads ,boolean? "Whether to join the note heads of an ambitus
+grob with a vertical line.")
+ (join-right-amount ,number? "DOCME")
+
+ (linea ,boolean? "Attach vertical lines to this neume?")
+
+ (oriscus ,boolean? "Is this neume an oriscus?")
+
+ (pes-or-flexa ,boolean? "Shall this neume be joined with the previous
+head?")
+ (prefix-set ,number? "A bit mask that holds all Gregorian head
+prefixes, such as @code{\\virga} or @code{\\quilisma}.")
+ (primitive ,integer? "A pointer to a ligature primitive, i.e., an item
+similar to a note head that is part of a ligature.")
+
+ (quilisma ,boolean? "Is this neume a quilisma?")
+
(stropha ,boolean? "Is this neume a stropha?")
+
(virga ,boolean? "Is this neume a virga?")
- (x-offset ,ly:dimension? "Extra horizontal offset for ligature heads.")
- ;; end ancient notation
+ (x-offset ,ly:dimension? "Extra horizontal offset for ligature heads.")
+ ;;;;;;;;;;;;;;;;
;; fret-diagrams extra properties
- (xo-font-magnification ,number? "Magnification used for mute and
- open string indicators in fret diagrams")
- (mute-string ,string? "String to be used to indicate muted string in
- fret diagrams")
- (open-string ,string? "String to be used to indicate open string in
- fret diagrams")
- (orientation ,symbol? "Orientation of fret-diagram. Options include @code{normal} and @code{landscape}")
-
- )))
+ (mute-string ,string? "String to be used to indicate a muted string in
+fret diagrams")
+ (open-string ,string? "A string to be used to indicate an open string
+in fret diagrams")
+ (orientation ,symbol? "The orientation of a fret-diagram. Options
+include @code{normal} and @code{landscape}.")
+ (xo-font-magnification ,number? "Magnification used for mute and open
+string indicators in fret diagrams.")
+
+ )))
(define-public all-backend-properties
(append
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;;; distances are given in line-thickness (thicknesses) and
. (
(stem-spacing-correction . 0.5)
(same-direction-correction . 0.25)
+ (space-to-barline . #t)
;; Changed this from 0.75.
;; If you ever change this back, please document! --hwn
(knee-spacing-correction . 1.0)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
name)))
(define-builtin-markup-command (musicglyph layout props glyph-name) (string?)
- "@var{glyph0name} is converted to a musical symbol; for example,
+ "@var{glyph-name} is converted to a musical symbol; for example,
@code{\\musicglyph #\"accidentals.natural\"} selects the natural sign from
the music font. See @usermanref{The Feta font} for a complete listing of
the possible glyphs."
;;; define-music-display-methods.scm -- data for displaying music
;;; expressions using LilyPond notation.
;;;
-;;; (c) 2005--2006 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;; (c) 2005--2007 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (music-property-description symbol type? description)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;; TODO: should link back into user manual.
;;
;; source file of the GNU LilyPond music typesetter
;;
-;; (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;; (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;
(map ly:register-stencil-expression
;;;
;;;
;;;
-;;; (c) 2005--2006 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;; (c) 2005--2007 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;
;;; - This file defines the procedures used to define display methods for each
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (interface-doc-string interface grob-description)
(interface-doc-string (cdr interface) '())
"\n\n"
"This grob interface is used in the following graphical objects: "
-
(human-listify
(map ref-ify
(sort
(map symbol->string
(hashq-ref iface->grob-table (car interface) '()))
- string<?)))))))
+ string<?)))
+ "."))))
(define (grob-alist->texi alist)
(let* ((uprops (filter (lambda (x) (not (object-property x 'backend-internal)))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(use-modules
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (doc-markup-function func)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (music-props-doc)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define (engraver-makes-grob? name-symbol grav)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;;; File entry point for generated documentation
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(use-modules (oop goops)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
(define-module (scm editor))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define cache-hash-tab (make-hash-table 11))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;; TODO:
;;
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm framework-eps))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm framework-ps))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
(define-module (scm framework-svg))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm framework-tex)
#:export (output-framework-tex
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm framework-texstr)
#:export (output-framework-tex
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Carl D. Sorensen <c_sorensen@byu.edu>
+;;;; (c) 2004--2007 Carl D. Sorensen <c_sorensen@byu.edu>
(define (fret-parse-marking-list marking-list fret-count)
(let* ((fret-range (list 1 fret-count))
;;
;; source file of the GNU LilyPond music typesetter
;;
-;; (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;; (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;
(define-module (scm kpathsea))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
(define ((check-beam-quant posl posr) beam posns)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm layout-page-layout)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;
; this is put into the slur-details property of Slur and PhrasingSlur
(define default-slur-details
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(let*
((paper (ly:parser-lookup parser '$defaultpaper))
(layout (ly:parser-lookup parser '$defaultlayout))
-
(count (ly:parser-lookup parser 'output-count))
- (base (ly:parser-output-name parser)))
+ (base (ly:parser-output-name parser))
+ (output-suffix (ly:parser-lookup parser 'output-suffix)) )
+
+ (if (string? output-suffix)
+ (set! base (format "~a-~a" base (string-regexp-substitute
+ "[^a-zA-Z0-9-]" "_" output-suffix))))
;; must be careful: output-count is under user control.
(if (not (integer? count))
(if (> count 0)
(set! base (format #f "~a-~a" base count)))
-
(ly:parser-define! parser 'output-count (1+ count))
(process-procedure book paper layout base)
))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;; Internationalisation: (_i "to be translated") gets an entry in the
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
"
Internally markup is stored as lists, whose head is a function.
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;; (use-modules (ice-9 optargs))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
(-3/4 . "accidentals.mirroredflat.flat")
))
+;; FIXME: standard vs default, alteration-FOO vs FOO-alteration
+(define-public alteration-default-glyph-name-alist standard-alteration-glyph-name-alist)
+
(define-public makam-alteration-glyph-name-alist
'((1 . "accidentals.doublesharp")
(8/9 . "accidentals.sharp.slashslashslash.stemstem")
))
(define-public alteration-hufnagel-glyph-name-alist
- '((1/2 . "accidentals.hufnagel-1")
+ '((-1/2 . "accidentals.hufnagel-1")
(0 . "accidentals.vaticana0")
- (-1/2 . "accidentals.mensural1")))
+ (1/2 . "accidentals.mensural1")))
(define-public alteration-medicaea-glyph-name-alist
- '((1/2 . "accidentals.medicaea-1")
+ '((-1/2 . "accidentals.medicaea-1")
(0 . "accidentals.vaticana0")
- (-1/2 . "accidentals.mensural1")))
+ (1/2 . "accidentals.mensural1")))
(define-public alteration-vaticana-glyph-name-alist
- '((1/2 . "accidentals.vaticana-1")
+ '((-1/2 . "accidentals.vaticana-1")
(0 . "accidentals.vaticana0")
- (-1/2 . "accidentals.mensural1")))
+ (1/2 . "accidentals.mensural1")))
(define-public alteration-mensural-glyph-name-alist
- '((1/2 . "accidentals.mensural-1")
+ '((-1/2 . "accidentals.mensural-1")
(0 . "accidentals.vaticana0")
- (-1/2 . "accidentals.mensural1")))
+ (1/2 . "accidentals.mensural1")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Note: currently misused as testbed for titles with markup, see
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2002--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2002--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; http://www.w3.org/TR/SVG11
;;;; http://www.w3.org/TR/SVG12/ -- page, pageSet in draft
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-module (scm output-texstr))
(define this-module (current-module))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public (set-paper-dimension-variables mod)
(module-define! mod 'dimension-variables
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;; (name . (glyph clef-position octavation))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Nicolas Sceaux <nicolas.sceaux@free.fr>
+;;;; (c) 2004--2007 Nicolas Sceaux <nicolas.sceaux@free.fr>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define gen-lily-sym
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;; todo: figure out how to make module,
;; without breaking nested ly scopes
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
(define-module (scm ps-to-png))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2004--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(map
(lambda (sym)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2000--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public default-script-alist
'(("thumb" .
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public (stack-stencils axis dir padding stils)
"Stack stencils STILS in direction AXIS, DIR, using PADDING."
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public (layout-extract-page-properties layout)
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 2003--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
(define-module (scm to-xml))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;; Jan Nieuwenhuizen <janneke@gnu.org>
;; metronome marks
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Bernard Hurley <bernard@fong-hurley.org.uk>
+;;;; (c) 2005--2007 Bernard Hurley <bernard@fong-hurley.org.uk>
;;;;
(define x11-color-list
#
# source file of the GNU LilyPond music typesetter
#
-# (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
#
# converting rules are found in python/convertrules.py
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2006',
+''' % ( _ ('Copyright (c) %s by') % '2001--2007',
' '.join (authors),
_ ("Distributed under terms of the GNU General Public License."),
_ ("It comes with NO WARRANTY.")))
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2005--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2005--2007 Jan Nieuwenhuizen <janneke@gnu.org>
;; gui debug helper
;; (define (exit x) (system "sleep 10"))
#
# source file of the GNU LilyPond music typesetter
#
-# (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
'key': musicxml_key_to_lily
}
for (k, func) in attr_dispatch.items ():
- childs = attrs.get_named_children (k)
+ children = attrs.get_named_children (k)
## ugh: you get clefs spread over staves for piano
- if childs:
+ if children:
elts.append (func (attrs))
return elts
return ev
+def musicxml_direction_to_indicator (direction):
+ val = { "above": 1, "upright": 1, "below": -1, "downright": -1 }.get (direction)
+ if val:
+ return val
+ else:
+ return ''
+
+def musicxml_fermata_to_lily_event (mxl_event):
+ ev = musicexp.ArticulationEvent ()
+ ev.type = "fermata"
+ if hasattr (mxl_event, 'type'):
+ dir = musicxml_direction_to_indicator (mxl_event.type)
+ if dir:
+ ev.force_direction = dir
+ return ev
+
+def musicxml_tremolo_to_lily_event(mxl_event):
+ if mxl_event.get_name () != "tremolo":
+ return
+ ev = musicexp.TremoloEvent ()
+ ev.bars = mxl_event.get_text ()
+ return ev
+
+# TODO: Some translations are missing!
+articulations_dict = {
+ ##### ORNAMENTS
+ "trill-mark": "trill",
+ "turn": "turn",
+ #"delayed-turn": "?",
+ "inverted-turn": "reverseturn",
+ #"shake": "?",
+ #"wavy-line": "?",
+ "mordent": "mordent",
+ #"inverted-mordent": "?",
+ #"schleifer": "?"
+ ##### TECHNICALS
+ "up-bow": "upbow",
+ "down-bow": "downbow",
+ #"harmonic": "",
+ #"open-string": "",
+ #"thumb-position": "",
+ #"fingering": "",
+ #"pluck": "",
+ #"double-tongue": "",
+ #"triple-tongue": "",
+ #"stopped": "",
+ #"snap-pizzicato": "",
+ #"fret": "",
+ #"string": "",
+ #"hammer-on": "",
+ #"pull-off": "",
+ #"bend": "",
+ #"tap": "",
+ #"heel": "",
+ #"toe": "",
+ #"fingernails": ""
+ ##### ARTICULATIONS
+ "accent": "accent",
+ "strong-accent": "marcato",
+ "staccato": "staccato",
+ "tenuto": "tenuto",
+ #"detached-legato": "",
+ "staccatissimo": "staccatissimo",
+ #"spiccato": "",
+ #"scoop": "",
+ #"plop": "",
+ #"doit": "",
+ #"falloff": "",
+ "breath-mark": "breathe",
+ #"caesura": "caesura",
+ #"stress": "",
+ #"unstress": ""
+}
+
+def musicxml_articulation_to_lily_event(mxl_event):
+ ev = musicexp.ArticulationEvent ()
+ tp = articulations_dict.get (mxl_event.get_name ())
+ if not tp:
+ return
+
+ ev.type = tp
+
+ # Some articulations use the type attribute, other the placement...
+ dir = None
+ if hasattr (mxl_event, 'type'):
+ dir = musicxml_direction_to_indicator (mxl_event.type)
+ if hasattr (mxl_event, 'placement'):
+ dir = musicxml_direction_to_indicator (mxl_event.placement)
+ if dir:
+ ev.force_direction = dir
+ return ev
+
+
+def musicxml_direction_to_lily( n ):
+ # TODO: Handle the <staff> element!
+ res = []
+ dirtype = n.get_maybe_exist_typed_child (musicxml.DirType)
+ if not dirtype:
+ return res
+
+ for entry in dirtype.get_all_children ():
+ if entry.get_name () == "dynamics":
+ for dynentry in entry.get_all_children ():
+ dynamics_available = ( "p", "pp", "ppp", "pppp", "ppppp", "pppppp",
+ "f", "ff", "fff", "ffff", "fffff", "ffffff",
+ "mp", "mf", "sf", "sfp", "sfpp", "fp",
+ "rf", "rfz", "sfz", "sffz", "fz" )
+ if not dynentry.get_name() in dynamics_available:
+ continue
+ event = musicexp.DynamicsEvent ()
+ event.type = dynentry.get_name ()
+ res.append (event)
+
+ if entry.get_name() == "wedge":
+ if hasattr (entry, 'type'):
+ wedgetype = entry.type;
+ wedgetypeval = {"crescendo" : 1, "decrescendo" : -1,
+ "diminuendo" : -1, "stop" : 0 }.get (wedgetype)
+ if wedgetypeval != None:
+ event = musicexp.HairpinEvent (wedgetypeval)
+ res.append (event)
+
+ return res
+
instrument_drumtype_dict = {
'Acoustic Snare Drum': 'acousticsnare',
'Side Stick': 'sidestick',
'Open Triangle': 'opentriangle',
'Mute Triangle': 'mutetriangle',
- 'Tambourine': 'tambourine',
-
+ 'Tambourine': 'tambourine'
}
def musicxml_note_to_lily_main_event (n):
class LilyPondVoiceBuilder:
def __init__ (self):
self.elements = []
+ self.pending_dynamics = []
self.end_moment = Rational (0)
self.begin_moment = Rational (0)
self.pending_multibar = Rational (0)
self.begin_moment = self.end_moment
self.end_moment = self.begin_moment + duration
+ # Insert all pending dynamics right after the note/rest:
+ if duration > Rational (0):
+ for d in self.pending_dynamics:
+ self.elements.append (d)
+ self.pending_dynamics = []
+
+ def add_dynamics (self, dynamic):
+ # store the dynamic item(s) until we encounter the next note/rest:
+ self.pending_dynamics.append (dynamic)
+
def add_bar_check (self, number):
b = musicexp.BarCheck ()
b.bar_number = number
if n.get_name () == 'forward':
continue
+ if isinstance (n, musicxml.Direction):
+ for a in musicxml_direction_to_lily (n):
+ voice_builder.add_dynamics (a)
+ continue
+
if not n.get_maybe_exist_named_child ('chord'):
try:
voice_builder.jumpto (n._when)
notations = n.get_maybe_exist_typed_child (musicxml.Notations)
tuplet_event = None
span_events = []
+
+ # The <notation> element can have the following children (+ means implemented, ~ partially, - not):
+ # +tied | +slur | +tuplet | glissando | slide |
+ # ornaments | technical | articulations | dynamics |
+ # +fermata | arpeggiate | non-arpeggiate |
+ # accidental-mark | other-notation
if notations:
if notations.get_tuplet():
tuplet_event = notations.get_tuplet()
mxl_tie = notations.get_tie ()
if mxl_tie and mxl_tie.type == 'start':
ev_chord.append (musicexp.TieEvent ())
+
+ fermatas = notations.get_named_children ('fermata')
+ for a in fermatas:
+ ev = musicxml_fermata_to_lily_event (a);
+ if ev:
+ ev_chord.append (ev)
+
+ # Articulations can contain the following child elements:
+ # accent | strong-accent | staccato | tenuto |
+ # detached-legato | staccatissimo | spiccato |
+ # scoop | plop | doit | falloff | breath-mark |
+ # caesura | stress | unstress
+ # Technical can contain the following child elements:
+ # up-bow | down-bow | harmonic | open-string |
+ # thumb-position | fingering | pluck | double-tongue |
+ # triple-tongue | stopped | snap-pizzicato | fret |
+ # string | hammer-on | pull-off | bend | tap | heel |
+ # toe | fingernails | other-technical
+ # Ornaments can contain the following child elements:
+ # trill-mark | turn | delayed-turn | inverted-turn |
+ # shake | wavy-line | mordent | inverted-mordent |
+ # schleifer | tremolo | other-ornament, accidental-mark
+ ornaments = notations.get_named_children ('ornaments')
+ for a in ornaments:
+ for ch in a.get_named_children ('tremolo'):
+ ev = musicxml_tremolo_to_lily_event (ch)
+ if ev:
+ ev_chord.append (ev)
+
+ ornaments += notations.get_named_children ('articulations')
+ ornaments += notations.get_named_children ('technical')
+
+ for a in ornaments:
+ for ch in a.get_all_children ():
+ ev = musicxml_articulation_to_lily_event (ch)
+ if ev:
+ ev_chord.append (ev)
+
+ dynamics = notations.get_named_children ('dynamics')
+ for a in dynamics:
+ for ch in a.get_all_children ():
+ ev = musicxml_dynamics_to_lily_event (ch)
+ if ev:
+ ev_chord.append (ev)
mxl_beams = [b for b in n.get_named_children ('beam')
if (b.get_type () in ('begin', 'end')
def musicxml_id_to_lily (id):
- digits = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
- 'nine', 'ten']
+ digits = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight',
+ 'Nine', 'Ten']
for dig in digits:
- d = digits.index (dig) + 1
- dig = dig[0].upper() + dig[1:]
+ d = digits.index (dig)
id = re.sub ('%d' % d, dig, id)
id = re.sub ('[^a-zA-Z]', 'X', id)
under certain conditions. Invoke as `%s --warranty' for more
information.""") % 'lilypond'
+ """
-Copyright (c) 2005--2006 by
+Copyright (c) 2005--2007 by
Han-Wen Nienhuys <hanwen@xs4all.nl> and
Jan Nieuwenhuizen <janneke@gnu.org>
"""),
str = "Part%sVoice%s" % (part.id, name)
return musicxml_id_to_lily (str)
-def print_voice_definitions (printer, voices):
+def print_voice_definitions (printer, part_list, voices):
+ part_dict={}
for (part, nv_dict) in voices.items():
-
+ part_dict[part.id] = (part, nv_dict)
+
+ for part in part_list:
+ (part, nv_dict) = part_dict[part.id]
for (name, (voice, mxlvoice)) in nv_dict.items ():
k = music_xml_voice_name_to_lily_name (part, name)
printer.dump ('%s = ' % k)
printer.set_file (open (defs_ly_name, 'w'))
print_ly_preamble (printer, filename)
- print_voice_definitions (printer, voices)
+ print_voice_definitions (printer, part_list, voices)
printer.close ()
TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
-MAKEINFO = LANG= $(MAKEINFO_PROGRAM) --enable-encoding
+MAKEINFO_FLAGS = --enable-encoding
+MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
# info stuff
%%%
%%% source file of the GNU LilyPond music typesetter
%%%
-%%% (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+%%% (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
%%% Han-Wen Nienhuys <hanwen@cs.uu.nl>
%%% Mats Bengtsson <mats.bengtsson@s3.kth.se>
%%%
let current_compiler = "lilypond"
" default make
-setlocal makeprg=lilypond $*
+setlocal makeprg=lilypond\ $*
" errorformat for lily (with columns) and gcc
" (how to see multiple-line error messages?)
setlocal errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m