#############
### Variables
-OUT_DIST_FILES = $(outdir)/ly-grammar.txt
-
NAME = documentation
LANGS = $(shell $(PYTHON) $(top-src-dir)/python/langdefs.py)
SUBDIRS = logo pictures misc po css topdocs \
include $(depth)/make/stepmake.make
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+ -I $(top-build-dir)/Documentation/snippets/out \
+ -I $(top-src-dir)/Documentation/included \
+ -I $(top-src-dir)/Documentation/pictures \
+ -I $(top-src-dir)/Documentation \
+ -I $(top-src-dir)/input/regression
+
OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
$(buildscript-dir)/text2html $<
# Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
ifeq ($(out),www)
## Extra images dependencies
$(OUT_TEXINFO_MANUALS): $(outdir)/pictures
$(outdir)/pictures:
- $(MAKE) -C pictures WWW-1
+ $(MAKE) -C pictures out=www WWW-1
ln -sf ../pictures/$(outdir) $@
$(outdir)/web.texi: $(outdir)/css $(outdir)/ly-examples
$(outdir)/css:
- $(MAKE) -C css
+ $(MAKE) -C css out=www WWW-1
ln -sf ../css/$(outdir) $@
$(outdir)/ly-examples:
- $(MAKE) -C ly-examples
+ $(MAKE) -C ly-examples out=www WWW-1
ln -sf ../ly-examples/$(outdir) $@
endif
$(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
$(MAKE) -C $(top-src-dir)/mf
-$(outdir)/notation.texi: $(outdir)/ly-grammar.txt
+$(outdir)/contributor.texi: $(outdir)/ly-grammar.txt
## Rules for the automatically generated documentation
$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
@end ignore
+@item
+LilyPond no longer automatically infers a @samp{\defaultchild}
+context in a context definition with @samp{\accepts} clauses. Any
+context definition without an explicit or inherited
+@samp{\defaultchild} definition counts as a @samp{Bottom} context
+and will be eligible for rhythmic events and overrides without
+causing the implicit creation of other contexts. Be sure to
+specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when
+defining them from scratch.
+
+@item
+There is now extensive support for both discant and bass accordion
+register symbols in the @samp{scm accreg} module, see
+@ruser{Accordion Registers}.
+@lilypond[verbatim,quote]
+#(use-modules (scm accreg))
+\new PianoStaff
+<<
+ \new Staff \relative
+ { \clef "treble" \discant "10"
+ r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+ \discant "121"
+ << { r16 <f bes> r <e a> r <d g> } \\
+ { d r a r bes r } >> |
+ <cis e a>1
+ }
+ \new Staff \relative
+ { \clef "treble" \freeBass "1"
+ r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+ \clef "bass" \stdBass "Master"
+ << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+ <e a cis>1^"a" } \\
+ { d8_"D" c_"C" bes_"B" | a1_"A" }
+ >>
+ }
+>>
+@end lilypond
+
+@item
+New commands @code{markLengthOn} and @code{markLengthOff} control
+the allowance of horizontal space for tempo and rehearsal marks.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+@end lilypond
+
+@item
+Rehearsal marks at the beginning of a line are now placed to the right
+of the clef and key signature by default. As in previous versions, the
+@code{break-alignable-interface} controls the behavior.
+
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
+@end lilypond
+
@item
Decimal numbers can now be written directly in music,
without a hash sign. Together with the previous change
@@subsection Foo
@end example
-@itemize
-@item
Level 4 headings and menus must be preceded by level 3 headings and
menus, and so on for level 3 and level 2. If this is not what is
wanted, please use:
@@subsubsubheading Foo
@end example
-@item
Please leave two blank lines above a @code{@@node}; this makes it
easier to find sections in texinfo.
-@item
Do not use any @code{@@} commands for a @code{@@node}. They may be
used for any @code{@@sub...} sections or headings however.
@@subsection @@code@{Foo@} Bar
@end example
-@item
No punctuation may be used in the node names. If the heading text
uses punctuation (in particular, colons and commas) simply leave
this out of the node name and menu.
@@subsection Foo: Bar
@end example
-@item
-With the exception of @code{@@} commands and punctuation, the
-section name should match the node name exactly.
+Backslashes must not be used in node names or section headings.
+If the heading text should include a backslash simply leave this
+out of the node name and menu and replace it with @code{@@bs@{@}}
+in the heading text.
+
+@example
+@@menu
+* The set command
+@@end menu
+
+@@node The set command
+@@subsection The @@code@{@@bs@{@}set@} command
+@end example
+
+References to such a node may use the third argument of the
+@code{@@ref} command to display the texually correct heading.
+
+@example
+@@ref@{The set command,,The @@code@{@@bs@{@}set command@}
+@end example
+
+With the exception of @code{@@} commands, @code{\} commands and
+punctuation, the section name should match the node name exactly.
-@item
Sectioning commands (@code{@@node} and @code{@@section}) must not appear
inside an @code{@@ignore}. Separate those commands with a space, ie
@code{@@n}@tie{}@code{ode}.
-@end itemize
-
Nodes must be included inside a
@example
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines:
příraz, prodleva) a @code{\acciaccatura} (příraz, krátká appogiatura).
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@c Translators: Pavel Fric
@node Základní pojmy
@tab Erstellt Notenschlüssel.
@item Completion_heads_engraver
@tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen.
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Erstellt Dynamik-Klammern und Dynamik-Texte.
@item Forbid_line_break_engraver
@tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist.
@item -e, --explicit-durations
Gibt alle Tondauern explizit an.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
@item -k, --key=@var{acc}[:@var{Moll}]
@item -a, --absolute
Konvertiert in absolute Tonhöhen.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
@item -l, --language=SPRACHE
Konvertiert keine Informationen über die Balkensetzung aus der
MusicXML-Datei. Stattdessen wird dies LilyPond überlassen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird
als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung
an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so
erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}.
-@item -r,--relative
+@item -r, --relative
Konvertiert in relative Tonhöhen. (Standardeinstellung)
@item -v, --verbose
@item --version
Gibt die Versionsnummer aus.
-@item -z,--compressed
+@item -z, --compressed
Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen.
Dies ist die Standardeinstellung für Dateien mit der Erweiterung
@file{.xml}.
unterstützt:
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
Die Balkensetzung aus der ABC-Datei erhalten.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
-@item -s,--strict
+@item -s, --strict
Strenge Auslegung einer erfolgreichen Konvertierung.
-@item -v,--version
+@item -v, --version
Gibt die Versionsnummer aus.
@end table
unterstützt:
@table @code
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
@item --version
Gibt die Versionsnummer aus.
@table @code
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien
gelesen und interpretiert werden.
Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke
@end example
-@item -f,--format=@var{Format}
+@item -f, --format=@var{Format}
Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind
@code{svg}, @code{ps}, @code{pdf} und @code{png}.
-@item -d,--define-default=@var{Variable}=@var{Wert}
+@item -d, --define-default=@var{Variable}=@var{Wert}
Damit wird die interne Programmoption @var{Variable} auf den Scheme-Wert
@var{Wert} gesetzt. Wird kein @var{Wert} angegeben, so wird @var{#t} benutzt.
Um eine Option auszuschalten, kann der Präfix @code{no-} dem Namen
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -H,--header=@var{FELD}
+@item -H, --header=@var{FELD}
Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei
@file{Dateiname.@var{FELD}} aus.
ersten definierten Verzeichnis und setzt in den weiteren Verzeichnissen
fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird.
-@item -i,--init=@var{Initialisierungsdatei}
+@item -i, --init=@var{Initialisierungsdatei}
Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der
Standardwert ist @file{init.ly}.
@cindex Verzeichnis, Ausgabe speichern in
@cindex Ausgabedateiname
-@item -o,--output=@var{DATEI}
+@item -o, --output=@var{DATEI}
Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei
@var{DATEI}. Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien
in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei
@item --pdf
Erzeugt PDF-Dateien. Dies impliziert @code{--ps}.
-@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
+@item -j, --jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
Führt @command{lilypond} in einem chroot-Jail aus.
Die @code{--jail} Option ist eine flexiblere Alternative zu @code{--safe}, wenn
@end table
-@item -v,--version
+@item -v, --version
Gibt die Versionsnummer aus.
-@item -V,--verbose
+@item -V, --verbose
Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade
aller gelesenen Dateien sowie Informationen über die Laufzeit.
-@item -w,--warranty
+@item -w, --warranty
Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht
@strong{KEINERLEI GARANTIE}!)
@end table
Mohou se používat následující volby:
@table @code
-@item -e,--edit
+@item -e, --edit
Použít převod přímo na vstupní soubor, takže je přímo změněn.
-@item -f,--from=@var{od-čísloverze}
+@item -f, --from=@var{od-čísloverze}
Nastavuje číslo verze, od kterého má převod začít. Když
tato volba není použita, odhadne @command{convert-ly} číslo verze
na základě údaje o @code{\version} v souboru. Například
@code{--from=2.10.25}
-@item -n,--no-version
+@item -n, --no-version
Obvykle do výstupu @command{convert-ly} přidá záznam @code{\version}
k převáděnému souboru. Zadání této volby povede k potlačení tohoto chování.
Die Eingabe von LilyPond ist in Zeichen und Ausdrücke gegliedert, so etwa
wie die menschliche Sprache sich in Wörter und Sätze gliedert. LilyPond
hat einen Lexer, der Zeichen erkennt (Zahlen, Zeichenketten, Scheme-Elemente,
-Tonhöhen usw.) und einen Parser, der die Syntax versteht, @ruser{LilyPond grammar}.
+Tonhöhen usw.) und einen Parser, der die Syntax versteht,
+@rcontribnamed{LilyPond grammar, LilyPond-Grammatik}.
Wenn dann eine bestimmte Syntaxregel als zuständig erkannt wurde, werden die
damit verknüpften Aktionen ausgeführt.
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines:
und Vorschläge mit @code{\acciaccatura}.
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@c Translators: Till Paala, Reinhold Kainhofer
@node Grundbegriffe
@tab Erstellt Notenschlüssel.
@item Completion_heads_engraver
@tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen.
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Erstellt Dynamik-Klammern und Dynamik-Texte.
@item Forbid_line_break_engraver
@tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist.
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: ebe492ca408fb0d9abf80b94c56197eef8dc2f09
+ Translation of GIT committish: 00cd4ff0b8dc4978344ba966bec06ddbc445f7e9
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c * Literatur:: Wichtige Literatur über die Notation.
* Notationsübersicht:: Tabellen und Grafiken.
* Befehlsübersicht:: Überblick über die LilyPond-Syntax.
-* LilyPond-Grammatik:: Syntaxdiagramm für LilyPond
* GNU Free Documentation License:: Die Lizenz dieses Handbuchs.
* Index der LilyPond-Befehle::
* LilyPond-Index::
@include notation/notation-appendices.itely
@include notation/cheatsheet.itely
-@node LilyPond-Grammatik
-@appendix LilyPond-Grammatik
-@translationof LilyPond grammar
-
-Dieser Anhang enthält eine Beschreibung der LilyPond-Grammatik,
-wie sie der Parser ausgibt.
-
-@verbatiminclude ly-grammar.txt
-
-
@include fdl.itexi
@seealso
Glossar:
@rglos{ligature}.
-
+
Notationsreferenz:
@ref{Weiße Mensuralligaturen},
@ref{Ligaturen der gregorianischen Quadratnotation}.
@seealso
Glossar:
@rglos{ligature}.
-
+
Notationreferenz:
@ref{ Ligaturen der gregorianischen Quadratnotation},
@ref{Weiße Mensuralligaturen},
@c try Till Rettig
@c Add example of white noteheads:
@c In the french baroque some composers used white noteheads in slow pieces,
-@c mainly in 3/2-time. A quarter looks there like a eighth with a white
+@c mainly in 3/2-time. A quarter looks there like an eighth with a white
@c notehead. (Franz-Rudolf Kuhnen)
@c TODO Add example of this:
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.27"
@c Translators: Till Paala
\layout @{
\context @{
\TabStaff
- stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+ stringTunings = \stringTuning <c' g' d'' a''>
@}
@}
@end example
ensprechende Fehlermeldungen werden ausgegeben. Die syntaktischen Gruppierungen
und die Regeln, nach welchen die Gruppen aus ihren Einzelteilen nach der
LilyPond-Syntax erstellt werden, finden sich in der Datei @file{lily/parser.yy}
-und werden in der Backus Normal Form (BNF) in @ref{LilyPond-Grammatik}
+und werden in der Backus Normal Form (BNF) in
+@rcontribnamed{LilyPond grammar, LilyPond-Grammatik}
gezeigt. Diese Datei wird benutzt, um den Parser während der Programmkompilation
zu erstellen. Hierzu wird der Parser-Ersteller Bison verwendet. Er ist
Teil des Quellcodes und nicht in die binäre Installation von LilyPond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Till Paala
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
Es gibt drei Arten von Verzierungen:
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
System zwei 16-Noten für jede 8-Note des zweiten Systems:
@lilypond[quote,relative=2,verbatim]
-<< \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 } >>
+<< \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 } >>
@end lilypond
@funindex \afterGrace
@lilypond[quote,verbatim,relative=2]
\new Voice {
<< { d1^\trill_( }
- { s2 s4. \grace { c16[ d] } } >>
+ { s2 s4. \grace { c16 d } } >>
c1)
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Till Paala
@ref{Gleichzeitige Ausdrücke}.
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@c Translators: Till Paala
Dieser Abschnitt behandelt Seitenlayout-Optionen innerhalb der @code{\paper}-Umgebung.
@menu
-* Die \paper-Umgebung::
+* Die paper-Umgebung::
* Papierformat und automatische Skalierung::
-* Vertikale \paper-Variablen mit festen Abständen::
-* Vertikale \paper-Variablen mit flexiblen Abständen::
-* \paper-Variablen für horizontale Abstände::
-* Andere \paper-Variablen::
+* Vertikale paper-Variablen mit festen Abständen::
+* Vertikale paper-Variablen mit flexiblen Abständen::
+* paper-Variablen für horizontale Abstände::
+* Andere paper-Variablen::
@end menu
-@node Die \paper-Umgebung
+@node Die paper-Umgebung
@subsection Die @code{\paper}-Umgebung
@translationof The \paper block
Die vertikalen Dimensionen, die durch die automatische Skalierung verändert
werden sind: @code{top-margin} und @code{bottom-margin} (siehe
-@ref{Vertikale \paper-Variablen mit festen Abständen}). Die horizontalen
+@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}). Die horizontalen
Dimensionen, die durch die automatische Skalierung verändert werden, sind
@code{left-margin}, @code{right-margin}, @code{inner-margin}, @code{outer-margin},
@code{binding-offset}, @code{indent} und @code{short-indent} (siehe
-@ref{\paper-Variablen für horizontale Abstände}).
+@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}).
Die Standardwerte für diese Dimensionen sind in
@file{ly/paper-defaults-init.ly} definiert, wobei interne Variablen mit den
@seealso
Notationsreferenz:
-@ref{Vertikale \paper-Variablen mit festen Abständen},
-@ref{\paper-Variablen für horizontale Abstände}.
+@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen},
+@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}.
Installierte Dateien:
@file{ly/paper-defaults-init.ly},
-@node Vertikale \paper-Variablen mit festen Abständen
+@node Vertikale paper-Variablen mit festen Abständen
@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit festen Abständen
@translationof Fixed vertical spacing \paper variables
Randeinstellung für die Ränder oben und unten.
-@node Vertikale \paper-Variablen mit flexiblen Abständen
+@node Vertikale paper-Variablen mit flexiblen Abständen
@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit flexiblen Abständen
@translationof Flexible vertical spacing \paper variables
-@node \paper-Variablen für horizontale Abstände
+@node paper-Variablen für horizontale Abstände
@unnumberedsubsubsec \paper-Variablen für horizontale Abstände
@translationof Horizontal spacing \paper variables
Resultate haben. Siehe @ref{Automatische Skalierung auf ein Papierformat}.}
@menu
-* \paper-Variablen für Breite und Ränder::
-* \paper-Variablen für zweiseitigen Satz::
-* \paper-Variablen für Verschiebungen und Einrückungen::
+* paper-Variablen für Breite und Ränder::
+* paper-Variablen für zweiseitigen Satz::
+* paper-Variablen für Verschiebungen und Einrückungen::
@end menu
-@node \paper-Variablen für Breite und Ränder
+@node paper-Variablen für Breite und Ränder
@unnumberedsubsubsec \paper-Variablen für Breite und Ränder
@translationof \paper variables for widths and margins
Randeinstellung für die Ränder oben und unten.
-@node \paper-Variablen für zweiseitigen Satz
+@node paper-Variablen für zweiseitigen Satz
@unnumberedsubsubsec @code{\paper}-Variablen für zweiseitigen Satz
@translationof \paper variables for two-sided mode
@file{ly/paper-defaults-init.ly}.
-@node \paper-Variablen für Verschiebungen und Einrückungen
+@node paper-Variablen für Verschiebungen und Einrückungen
@unnumberedsubsubsec @code{\paper}-Variablen für Verschiebungen und Einrückungen
@translationof \paper variables for shifts and indents
@rlsr{Spacing}.
-@node Andere \paper-Variablen
+@node Andere paper-Variablen
@subsection Andere @code{\paper}-Variablen
@translationof Other \paper variables
@menu
-* \paper-Variablen für den Zeilenumbruch::
-* \paper-Variablen für den Seitenumbruch::
-* \paper-Variablen für Seitenzahlen::
-* Verschiedene \paper-Variablen::
+* paper-Variablen für den Zeilenumbruch::
+* paper-Variablen für den Seitenumbruch::
+* paper-Variablen für Seitenzahlen::
+* Verschiedene paper-Variablen::
@end menu
-@node \paper-Variablen für den Zeilenumbruch
+@node paper-Variablen für den Zeilenumbruch
@unnumberedsubsubsec @code{\paper}-Variablen für den Zeilenumbruch
@translationof \paper variables for line breaking
@c TODO: Mention that ly:optimal-breaking is on by default? -mp
@ref{Zeilenumbrüche}.
-@node \paper-Variablen für den Seitenumbruch
+@node paper-Variablen für den Seitenumbruch
@unnumberedsubsubsec @code{\paper}-Variablen für den Seitenumbruch
@translationof \paper variables for page breaking
@file{ly/paper-defaults-init.ly}.
-@node \paper-Variablen für Seitenzahlen
+@node paper-Variablen für Seitenzahlen
@unnumberedsubsubsec @code{\paper}-Variablen für Seitenzahlen
@translationof \paper variables for page numbering
auf der rechten Seite mit Seite 1 beginnen.
-@node Verschiedene \paper-Variablen
+@node Verschiedene paper-Variablen
@unnumberedsubsubsec Verschiedene @code{\paper}-Variablen
@translationof Miscellaneous \paper variables
@table @code
@item
@code{line-width}, @code{ragged-right} und @code{ragged-last}
-(siehe @ref{\paper-Variablen für Breite und Ränder})
+(siehe @ref{paper-Variablen für Breite und Ränder,,@code{@bs{}paper}-Variablen für Breite und Ränder})
@item
@code{indent} und @code{short-indent}
-(siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen})
+(siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen})
@item
@code{system-count}
-(siehe @ref{\paper-Variablen für den Zeilenumbruch})
+(siehe @ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch})
@end itemize
@seealso
Notationsreferenz:
-@ref{\paper-Variablen für den Zeilenumbruch}.
+@ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch}.
Schnipsel:
@rlsr{Spacing}.
Fall die Notensysteme auf allen Seiten eng nach oben orientiert
gesetzt werden. Im zweiten Fall bezieht sich dies nur auf die
letzte Seite.
-Zu Einzelheiten siehe @ref{Vertikale \paper-Variablen mit festen Abständen}.
+Zu Einzelheiten siehe @ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}.
Seitenumbrüche werden von der @code{page-breaking}-Funktion errechnet.
LilyPond kennt drei Algorithmen um Seitenumbrüche zu errechnen:
@seealso
Notationsreferenz:
-@ref{\paper-Variablen für den Seitenumbruch}.
+@ref{paper-Variablen für den Seitenumbruch,,@code{@bs{}paper}-Variablen für den Seitenumbruch}.
Schnipsel:
@rlsr{Spacing}.
nicht-Systemzeilen in einzelnen Systemgruppen behandelt. Die vertikale
Platzierung zwischen einzelnen Systemgruppen, Partituren, Beschriftungen
usw. und den Rändern wird durch @code{\paper}-Variablen kontrolliert, die
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen}.
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}.
@menu
* Eigenschaften für Abstände innerhalb von Systemgruppen::
Jeder der vertikalen Platzierungs-Grobeigenschaften (außer
@code{staff-affinity}) benutzt die gleiche Alistenstruktur
wie die @code{\paper}-Variablen, behandelt in
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen}. Besondere
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}. Besondere
Methoden um Alisten zu verändern finden sich in
@ref{Alisten verändern}. Grob-Eigenschaften sollten mit
dem @code{\override}-Befehle innerhalb einer @code{\score}-
@seealso
Notationsreferenz:
-@ref{Vertikale \paper-Variablen mit flexiblen Abständen},
+@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen},
@ref{Alisten verändern}.
Installierte Dateien:
@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c32] }
@end lilypond
dass die Bezeichnungen in einer Gruppe nicht zentriert werden.
Um dennoch eine Zentrierung zu erhalten, müssen die Werte des
Einzugs (@code{indent} und @code{short-indent}) vergrößert werden.
-Zu Einzelheiten siehe @ref{\paper-Variablen für Verschiebungen und Einrückungen}.
+Zu Einzelheiten siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen}.
@lilypond[verbatim,quote,ragged-right]
\relative c'' {
@seealso
Notationsreferenz:
-@ref{\paper-Variablen für Verschiebungen und Einrückungen},
+@ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen},
@ref{Umgebungs-Plugins verändern}.
Schnipsel:
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.19"
+@c \version "2.17.28"
@c Translators: Till Paala
<<
\new Voice = melody \relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
@lilypond[verbatim,ragged-right,quote]
<<
\new Voice = melody \relative c' {
- \grace { c16[( d e f] }
+ \grace { c16( d e f }
g1) f
}
\new Lyrics \with { includeGraceNotes = ##t }
@item -e, --explicit-durations
Gibt alle Tondauern explizit an.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
@item -k, --key=@var{acc}[:@var{Moll}]
@item -a, --absolute
Konvertiert in absolute Tonhöhen.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
@item -l, --language=SPRACHE
Konvertiert keine Informationen über die Balkensetzung aus der
MusicXML-Datei. Stattdessen wird dies LilyPond überlassen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben. Wird
als @var{Dateiname} nur @file{-} angegeben, wird das Ergebnis der Konvertierung
an der Kommandozeile ausgegeben. Wird diese Option nicht angegeben, so
erfolgt die Ausgabe in die Datei @var{XML-Datei}@file{.ly}.
-@item -r,--relative
+@item -r, --relative
Konvertiert in relative Tonhöhen. (Standardeinstellung)
@item -v, --verbose
@item --version
Gibt die Versionsnummer aus.
-@item -z,--compressed
+@item -z, --compressed
Die Eingabedatei wird als komprimierte MusicXML-Datei eingelesen.
Dies ist die Standardeinstellung für Dateien mit der Erweiterung
@file{.xml}.
unterstützt:
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
Die Balkensetzung aus der ABC-Datei erhalten.
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
-@item -s,--strict
+@item -s, --strict
Strenge Auslegung einer erfolgreichen Konvertierung.
-@item -v,--version
+@item -v, --version
Gibt die Versionsnummer aus.
@end table
unterstützt:
@table @code
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -o,--output=@var{Dateiname}
+@item -o, --output=@var{Dateiname}
Die Ausgabe wird in die Datei @var{Dateiname}@file{.ly} geschrieben.
@item --version
Gibt die Versionsnummer aus.
@table @code
-@item -d,--define-default=@var{Variable}=@var{Wert}
+@item -d, --define-default=@var{Variable}=@var{Wert}
Siehe @ref{Fortgeschrittene Optionen auf der Kommandozeile für LilyPond}.
@cindex Scheme, Auswertung von Ausdrücken
@cindex Auswertung von Ausdrücken, Scheme
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
Wertet den Scheme-Ausdruck @var{expr} aus, bevor die @file{.ly} Dateien
gelesen und interpretiert werden.
Die @code{-e} Option kann auch mehrfach angegeben werden, die Ausdrücke
@cindex Ausgabeformat
-@item -f,--format=@var{Format}
+@item -f, --format=@var{Format}
Bestimmt das Ausgabeformat. Mögliche Werte von @var{Format} sind
@code{svg}, @code{ps}, @code{pdf} und @code{png}.
Beispiel: @code{lilypond -fpng @var{Dateiname}.ly}
-@item -h,--help
+@item -h, --help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-@item -H,--header=@var{FELD}
+@item -H, --header=@var{FELD}
Gibt den Inhalt eines Feldes aus dem @code{\header}-Block in die Datei
@file{Dateiname.@var{FELD}} aus.
-@item -i,--init=@var{Initialisierungsdatei}
+@item -i, --init=@var{Initialisierungsdatei}
Benutzt @var{Initialisierungsdatei} zur gesamten Programminitialisierung. Der
Standardwert ist @file{init.ly}.
@cindex Kerker, Programm ausführen
@cindex Jail, Programm ausführen
-@item -j,--jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
+@item -j, --jail=@var{Benutzer},@var{Gruppe},@var{Jail-Verzeichnis},@var{Arbeitsverzeichnis}
Führt @command{lilypond} in einem chroot-Jail aus.
Die @option{--jail} Option ist eine flexiblere Alternative zu @option{-dsafe}, wenn
@cindex Logstufe
@cindex Ausgabe, Ausführlichkeit
-@item -l,--loglevel=@var{Logstufe}
+@item -l, --loglevel=@var{Logstufe}
Passt die Ausführlichkeit der Ausgabe auf der Kommandozeile entsprechend
@var{Logstufe} an. Mögliche Werte sind:
@cindex Ausgabedateiname
@cindex Dateiname der Ausgabe bestimmen
-@item -o,--output=@var{DATEI} oder @var{ORDNER}
+@item -o, --output=@var{DATEI} oder @var{ORDNER}
Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei
@var{DATEI}. Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien
in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei
@item --pdf
Erzeugt PDF-Dateien. Dies impliziert @code{--ps}.
-@item -v,--version
+@item -v, --version
Gibt die Versionsnummer aus.
-@item -V,--verbose
+@item -V, --verbose
Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade
aller gelesenen Dateien sowie Informationen über die Laufzeit.
-@item -w,--warranty
+@item -w, --warranty
Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht
@strong{KEINERLEI GARANTIE}!)
Folgende Optionen können benutzt werden:
@table @code
-@item -e,--edit
+@item -e, --edit
Die Konvertierung direkt am Original vornehmen, sodass es direkt verändert wird.
-@item -f,--from=@var{von-Versionsnummer}
+@item -f, --from=@var{von-Versionsnummer}
Stellt die Versionsnummer ein, ab welcher die Konvertierung begonnen werden
soll. Wenn die Option nicht benutzt wird, rät @command{convert-ly} die Versionsnummer
anhand des @code{\version}-Eintrags in der Datei. Beispielsweise
@option{--from=2.10.25}
-@item -n,--no-version
+@item -n, --no-version
Normalerweise fügt @command{convert-ly} einen @code{\version}-Eintrag
zu der konvertierten Datei hinzu. Mit dieser Option wird das unterdrückt.
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines: (different from policy.txt!)
@code{\acciaccatura}
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@node Conceptos fundamentales
@chapter Conceptos fundamentales
@tab Graba las claves
@item Completion_heads_engraver
@tab Divide las notas que atraviesan una línea divisoria
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Crea reguladores e indicaciones dinámicas textuales
@item Forbid_line_break_engraver
@tab Evita los saltos de línea si queda algún elemento musical activo
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.27"
@node Instrumentos de cuerda con trastes
@section Instrumentos de cuerda con trastes
\layout @{
\context @{
\TabStaff
- stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+ stringTunings = \stringTuning <c' g' d'' a''>
@}
@}
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@node Duraciones
@section Duraciones
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
Hay otros tres tipos posibles de notas de adorno; la
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 }
+ \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 }
>>
@end lilypond
\new Voice {
<<
{ d1^\trill_( }
- { s2 s4. \grace { c16[ d] } }
+ { s2 s4. \grace { c16 d } }
>>
c1)
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translation status: post-GDP
@ref{Expresiones simultáneas}):
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@ignore
GDP TODO list
@lilypond[quote,ragged-right,relative=2,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c] }
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c] }
@end lilypond
@seealso
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.19"
+@c \version "2.17.28"
@node Música vocal
@section Música vocal
<<
\new Voice = melody \relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
@lilypond[verbatim,ragged-right,quote]
<<
\new Voice = melody \relative c' {
- \grace { c16[( d e f] }
+ \grace { c16( d e f }
g1) f
}
\new Lyrics \with { includeGraceNotes = ##t }
@item -e, --explicit-durations
Imprimir valores de figura explícitos.
-@item -h,--help
+@item -h, --help
Mostrar un resumen de las instrucciones de utilización.
@item -k, --key=@var{alteración}[:@var{minor}]
@item -a, --absolute
convertir las alturas en modo absoluto.
-@item -h,--help
+@item -h, --help
mostrar un resumen de la utilización y las opciones.
@item -l, --language=IDIOMA
no convertir la información de las barras, en vez de ello usar el
barrado automático de LilyPond.
-@item -o,--output=@var{archivo}
+@item -o, --output=@var{archivo}
fijar el nombre del archivo de salida como @var{archivo}. Si
@var{archivo} es @file{-}, la salida se imprime sobre stdout, la
salida estándar. Si no se da, se usa @var{archivo_xml}@file{.ly}.
-@item -r,--relative
+@item -r, --relative
convertir las alturas en modo relativo (predeterminado).
-@item -v,--verbose
+@item -v, --verbose
ser prolijo.
-@item -v,--version
+@item -v, --version
imprimir la información de la versión.
-@item -z,--compressed
+@item -z, --compressed
el archivo de entrada es un archivo MusicXML comprimido en zip.
@end table
@command{abc2ly} contempla las siguientes opciones:
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
preservar la noción de ABC de las barras
-@item -h,--help
+@item -h, --help
esta ayuda
-@item -o,--output=@var{archivo}
+@item -o, --output=@var{archivo}
fijar el nombre del archivo de salida como @var{archivo}.
-@item -s,--strict
+@item -s, --strict
ser estricto respecto al éxito
@item --version
imprimir la información de la versión.
@command{etf2ly} contempla las siguientes opciones:
@table @code
-@item -h,--help
+@item -h, --help
esta ayuda
-@item -o,--output=@var{ARCHIVO}
+@item -o, --output=@var{ARCHIVO}
fijar el nombre del archivo de salida como @var{ARCHIVO}
@item --version
información de la versión
@table @code
-@item -d,--define-default=@var{variable}=@var{valor}
+@item -d, --define-default=@var{variable}=@var{valor}
Véase @ref{Opciones avanzadas de línea de órdenes para LilyPond}.
@cindex Scheme, evaluación de expresiones
@cindex expresiones de Scheme, evaluación
-@item -e,--evaluate=@var{expresión}
+@item -e, --evaluate=@var{expresión}
Evaluar la @var{expresión} de Scheme antes de analizar los archivos
@file{.ly}. Se pueden pasar varias opciones @option{-e}, que se
evaluarán en secuencia.
@cindex output, format
@cindex format, output
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
which formats should be written. Choices for @code{format} are
@code{ps}, @code{pdf}, and @code{png}.
Example: @code{lilypond -fpng @var{filename}.ly}
-@item -h,--help
+@item -h, --help
Mostrar un resumen de las formas de utilización.
-@item -H,--header=@var{CAMPO}
+@item -H, --header=@var{CAMPO}
Volcar un campo de cabecera al archivo @file{NOMBREBASE.@var{CAMPO}}
-@item -i,--init=@var{archivo}
+@item -i, --init=@var{archivo}
Establecer el archivo de inicio a @var{archivo} (predeterminado:
@file{init.ly}).
@cindex chroot, ejecutar dentro de una jaula
-@item -j,--jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio}
+@item -j, --jail=@var{usuario},@var{grupo},@var{jaula},@var{directorio}
Ejecutar @command{lilypond} en una jaula de chroot.
La opción @option{--jail} (jaula) proporciona una alternativa más
@cindex registro, nivel de
@cindex salida prolija, fijar el nivel
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
Fijar el grado en que la salida de consola es prolija al nivel
@var{LEVEL}. Los valores posibles son:
@cindex carpeta, dirigir la salida hacia
@cindex salida, establecer el nombre del archivo de
-@item -o,--output=@var{ARCHIVO} o @var{CARPETA}
+@item -o, --output=@var{ARCHIVO} o @var{CARPETA}
Establecer el nombre del archivo de salida predeterminado a
@var{ARCHIVO} o, si existe una carpeta con ese nombre, dirigir la
salida hacia @var{CARPETA}, tomando el nombre de archivo del documento
@item --pdf
Generar PDF. Implica @option{--ps}.
-@item -v,--version
+@item -v, --version
Mostrar la información de la versión.
-@item -V,--verbose
+@item -V, --verbose
Ser prolijo: mostrar las rutas completas de todos los archivos que se
leen, y dar información cronométrica.
-@item -w,--warranty
+@item -w, --warranty
Mostrar la garantía con que viene GNU LilyPond (¡no viene con
@strong{NINGUNA GARANTÍA}!).
Se pueden dar las siguientes opciones:
@table @code
-@item -d,--diff-version-update
+@item -d, --diff-version-update
incrementar la cadena @code{\version} solamente si el archivo
efectivamente ha cambiado. Sin esta opción (o si cualquier
conversión ha modificado el archivo), la cabecera de versión
refleja la regla de conversión que se ha tenido en cuenta en
último lugar.
-@item -e,--edit
+@item -e, --edit
Aplicar las conversiones directamente al archivo de entrada,
modificándolo in situ.
-@item -f,--from=@var{versión_de_origen}
+@item -f, --from=@var{versión_de_origen}
Establece la versión desde la que convertir. Si no aparece esta
opción, @command{convert-ly} tratará de adivinarla, basándose en el
enunciado @code{\version} del archivo. Ejemplo: @option{--from=2.10.25}
@code{WARNING} (advertencias), @code{PROGRESS} (avance;
predeterminado) y @code{DEBUG} (depuración).
-@item -n,--no-version
+@item -n, --no-version
Normalmente @command{convert-ly} añade un indicador @code{\version} a
la salida. La especificación de esta opción lo suprime.
}
@Article{blostein91,
- note = {This paper provides a overview of the algorithm used in LIME
+ note = {This paper provides an overview of the algorithm used in LIME
for spacing individual lines. HWN},
year = {1991},
title = {Justification of Printed Music},
@Book{wanske88,
annote = {I. A very thorough overview of engraving practices of various
craftsmen. It includes detailed specs of characters, dimensions
-etc. II. a thorough overview of a anonymous (by now antiquated)
+etc. II. a thorough overview of an anonymous (by now antiquated)
automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung),
electronic data processing HWN.},
year = {1988},
the leading arguments of markup functions that take a markup as
their last argument.
+@funindex \markup
+@cindex markup macro
+@funindex interpret-markup
+Markup commands have a rather complex life cycle. The body of a
+markup command definition is responsible for converting the
+arguments of the markup command into a stencil expression which is
+returned. Quite often this is accomplished by calling the
+@code{interpret-markup} function on a markup expression, passing
+the @var{layout} and @var{props} arguments on to it. Those
+arguments are usually only known at a very late stage in
+typesetting. Markup expressions have their components assembled
+into markup expressions already when @code{\markup} in a LilyPond
+expression or the @code{markup} macro in Scheme is expanded. The
+evaluation and typechecking of markup command arguments happens at
+the time @code{\markup}/@code{markup} are interpreted.
+
+But the actual conversion of markup expressions into stencil
+expressions by executing the markup function bodies only happens
+when @code{interpret-markup} is called on a markup expression.
+
@node On properties
@unnumberedsubsubsec On properties
@node New markup list command definition
@subsection New markup list command definition
+@funindex define-markup-list-command
+@funindex interpret-markup-list
Markup list commands are defined with the
@code{define-markup-list-command} Scheme macro, which is similar to the
@code{define-markup-command} macro described in
@ref{New markup command definition}, except that where the latter returns
a single stencil, the former returns a list of stencils.
+In a similar vein, @code{interpret-markup-list} is used instead of
+@code{interpret-markup} for converting a markup list into a list
+of stencils.
+
In the following example, a @code{\paragraph} markup list command is
defined, which returns a list of justified lines, the first one being
indented. The indent width is taken from the @code{props} argument.
@node Inline Scheme code
@section Inline Scheme code
-TODO: the example for this section is ill-chosen since
-@example
-F = -\tweak font-size #-3 -\flageolet
-@end example
-(note the @samp{-} marking it as a post event) will actually work fine
-for the stated purpose. Until this section gets a rewrite, let's
-pretend we don't know.
+TODO: after this section had been written, LilyPond has improved
+to the point that finding a @emph{simple} example where one would
+@emph{have} to revert to Scheme has become rather hard.
+
+Until this section gets a rewrite, let's pretend we don't know.
The main disadvantage of @code{\tweak} is its syntactical
-inflexibility. For example, the following produces a syntax error.
+inflexibility. For example, the following produces a syntax error
+(or rather, it did so at some point in the past).
@example
F = \tweak font-size #-3 -\flageolet
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek
@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau
expression musicale :
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
@tab Grave les clefs
@item Completion_heads_engraver
@tab Divise les notes qui dépassent de la mesure
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Crée les soufflets et textes de nuance
@item Forbid_line_break_engraver
@tab Empêche un saut de ligne si un élément musical est toujours actif
@code{Voice} approprié, le graveur @code{Ligature_bracket_engraver} par
le graveur de ligature qui convient -- voir les rubriques
@ref{Ligatures mensurales} et @ref{Neumes et ligatures grégoriennes} à
-ce sujet.
+ce sujet.
@seealso
Glossaire musicologique :
de la portée. Le chiffre porté en suffixe permet alors de les
différencier. Vous pouvez forcer le positionnement du glyphe sur une
ligne, comme expliqué à la section @ref{Clefs}. Dans la colonne
-exemple, la note suivant la clé est un do médium.
+exemple, la note suivant la clé est un do médium.
Les clés d'ut de Petrucci avaient une hampe gauche différente selon
leur ligne de rattachement.
@end lilypond
La rubrique @ref{Métrique} expose les principes généraux sur
-l'utilisation des indications de métrique.
+l'utilisation des indications de métrique.
@seealso
Glossaire musicologique :
Pour de la musique ancienne, vous disposez de plusieurs styles de tête
de note, en plus du style par défaut @code{default}. Vous pouvez
affecter à la propriété @code{style} de l'objet @code{NoteHead}
-les valeurs @code{baroque}, @code{neomensural}, @code{mensural},
+les valeurs @code{baroque}, @code{neomensural}, @code{mensural},
@code{petrucci}, @code{blackpetrucci} ou @code{semipetrucci}.
Le style @code{baroque} diffère du style @code{default} par
@knownissues
L'espacement des ligatures n'est pas des meilleurs.
-
+
@node Réédition de musique ancienne
@subsection Réédition de musique ancienne
@c try Till Rettig
@c Add example of white note heads:
@c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time. A quarter looks there like a eighth with a white
+@c mainly in 3/2-time. A quarter looks there like an eighth with a white
@c note head. (Franz-Rudolf Kuhnen)
@c TODO Add example of this:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.27"
@c Translators: Matthieu Jacquot
@c Translation checkers: Jean-Charles Malahieude
\layout @{
\context @{
\TabStaff
- stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+ stringTunings = \stringTuning <c' g' d'' a''>
@}
@}
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
Les plus courantes sont les acciaccatures, qui doivent se jouer très
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 }
+ \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 }
>>
@end lilypond
\new Voice {
<<
{ d1^\trill_( }
- { s2 s4. \grace { c16[ d] } }
+ { s2 s4. \grace { c16 d } }
>>
c1)
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Frédéric Chiasson, Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
@ref{Expressions simultanées}.
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@lilypond[quote,ragged-right,relative=2,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c] }
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c] }
@end lilypond
@seealso
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.19"
+@c \version "2.17.28"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Jacques Gerbaud
<<
\new Voice = melody \relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
@lilypond[verbatim,ragged-right,quote]
<<
\new Voice = melody \relative c' {
- \grace { c16[( d e f] }
+ \grace { c16( d e f }
g1) f
}
\new Lyrics \with { includeGraceNotes = ##t }
@item -e, --explicit-durations
Rendu explicite des durées.
-@item -h,--help
+@item -h, --help
Afficher un résumé des utilisations.
@item -k, --key=@var{acc}[:@var{minor}]
@item -a, --absolute
Rendu en hauteurs absolues.
-@item -h,--help
+@item -h, --help
Afficher un résumé des utilisations.
@item -l, --language=LANG
Ne pas convertir les informations de ligature ; laisser LilyPond
gérer les ligatures automatiquement.
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
Générer le résultat dans le fichier @var{fichier}. S'il n'est pas
déterminé, ce sera @var{fichier-xml}@file{.ly} ; @file{-}
produira le résultat sur la sortie standard (@var{stdout}).
-@item -r,--relative
+@item -r, --relative
Rendu en hauteurs relatives (mode par défaut).
-@item -v,--verbose
+@item -v, --verbose
Mode verbeux.
@item --version
Afficher le numéro de version.
-@item -z,--compressed
+@item -z, --compressed
Le fichier d'entrée est un fichier MusicXML zippé.
@end table
@command{abc2ly} accepte les options suivantes :
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
Préserver la notion de lien de croches propre à ABC.
-@item -h,--help
+@item -h, --help
Afficher un résumé des utilisations.
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
Générer le résultat dans le fichier @var{file}.
-@item -s,--strict
+@item -s, --strict
Être strict sur la réussite.
@item --version
@command{etf2ly} accepte les options suivantes :
@table @code
-@item -h,--help
+@item -h, --help
Afficher cette aide.
@item -o, --output=@var{file}
@table @code
-@item -d,--define-default=@var{variable}=@var{valeur}
+@item -d, --define-default=@var{variable}=@var{valeur}
Voir @ref{Options avancées de lilypond}.
@cindex Scheme, évaluation d'expression
@cindex expression Scheme, évaluation
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
Évalue l'expression Scheme @var{expr} avant d'analyser tout fichier
@file{.ly}. Lorsque vous spécifiez l'option @option{-e} à plusieurs
reprises, l'évaluation sera faite en séquence.
@cindex sortie, format
@cindex format de sortie
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
Détermine le format à produire. Il peut s'agir de @code{ps}, @code{pdf}
ou @code{png}.
Exemple : @code{lilypond -fpng @var{monfichier}.ly}
-@item -h,--help
+@item -h, --help
Affiche un résumé des commandes.
-@item -H,--header=@var{CHAMP}
+@item -H, --header=@var{CHAMP}
Recopie le champ d'entête dans le fichier @file{RACINE.@var{CHAMP}}.
-@item -i,--init=@var{fichier}
+@item -i, --init=@var{fichier}
Définit @var{fichier} (par défaut @file{init.ly}) en tant que fichier
d'initialisation.
@cindex recherche de fichier
@cindex chemin de recherche
-@item -I,--include=@var{répertoire}
+@item -I, --include=@var{répertoire}
Ajoute @var{répertoire} au chemin de recherche pour les inclusions.
Vous pouvez mentionner plusieurs fois l'option @option{-I}, auquel cas
examinés l'un après l'autre.
@cindex chroot jail, fonctionnement
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
Lance @command{lilypond} dans un environnement protégé.
L'option @option{--jail} est une alternative qui offre plus de
@cindex loglevel
@cindex verbosité, définir le degré de
-@item -l,--loglevel=@var{DEGRÉ}
+@item -l, --loglevel=@var{DEGRÉ}
Règle le niveau de verbosité des messages console à @var{DEGRÉ}. Les
différentes valeurs sont :
@cindex redirection
@cindex répertoire de destination
@cindex fichier de destination
-@item -o,--output=@var{FICHIER} ou @var{RÉPERTOIRE}
+@item -o, --output=@var{FICHIER} ou @var{RÉPERTOIRE}
Détermine le nom par défaut du fichier résultant à @var{FICHIER} ;
lorsque l'argument @var{RÉPERTOIRE} correspond à un répertoire déjà
existant, c'est là que les fichiers résultants seront déposés. Le
@item --pdf
Génère du PDF. Ceci sous-entend l'utilisation de @option{--ps}.
-@item -v,--version
+@item -v, --version
Affiche le numéro de version.
-@item -V,--verbose
+@item -V, --verbose
Active le mode verbeux : affichage de l'intégralité du chemin
d'accès de chaque fichier, et information des temps de traitement.
-@item -w,--warranty
+@item -w, --warranty
Affiche les informations de garantie applicables à GNU LilyPond -- il
est livré @strong{SANS GARANTIE} !
conversion quelle qu'elle soit a modifié le fichier, la mention de
version est porté à la valeur de la règle appliquée la plus récente.
-@item -e,--edit
+@item -e, --edit
pour éditer directement le fichier d'origine.
@item -f, --from=@var{from-patchlevel}
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@node Elemi kottaírás
@chapter Elemi kottaírás
áll:
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2
+c2 \grace { a32 b } c2
c2 \appoggiatura b16 c2
c2 \acciaccatura b16 c2
@end lilypond
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.17.18"
+@c \version "2.17.29"
@node Alapfogalmak
@chapter Alapfogalmak
@translationof Fundamental concepts
@tab Engraves clefs
@item Completion_heads_engraver
@tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Creates hairpins and dynamic texts
@item Forbid_line_break_engraver
@tab Prevents line breaks if a musical element is still active
@table @code
-@item -e,--evaluate=@var{kifejezés}
+@item -e, --evaluate=@var{kifejezés}
A Scheme @var{kifejezés} kiértékelése az @file{.ly} fájlok beolvasása előtt.
Több @code{-e} opció is megadható, ezek a megadott sorrendben lesznek
végrehajtva.
#(use-modules (guile-user))
@end example
-@item -f,--format=@var{formátum}
+@item -f, --format=@var{formátum}
A kimenet formátuma. Lehetőségek: @code{ps}, @code{pdf} vagy @code{png}.
Példa: @code{lilypond -fpng @var{fájlnév}.ly}
-@item -d,--define-default=@var{azonosító}=@var{érték}
+@item -d, --define-default=@var{azonosító}=@var{érték}
Az @var{azonosító} nevű belső változó beállítása az @var{érték} Scheme
értékre. Ha az @var{érték} nincs megadva, az alapértelmezett @code{#t}
lesz a változó értéke. Egy opció kikapcsolásához a @code{no-} prefixumot
@end table
-@item -h,--help
+@item -h, --help
Összegzés az alkalmazás használatáról.
-@item -H,--header=@var{mező}
+@item -H, --header=@var{mező}
A megadott fejlécmező kiírása a @file{@var{fájlnév}.@var{mező}} nevű fájlba.
@item --include, -I=@var{könyvtár}
A @var{könyvtár} hozzáadása a bemeneti fájlok keresési útvonalához.
@cindex keresési útvonal
-@item -i,--init=@var{fájl}
+@item -i, --init=@var{fájl}
Az inicializáló fájl beállítása a megadott @var{fájl}ra. (Alapértelmezett:
@file{init.ly}.)
-@item -o,--output=@var{fájl}
+@item -o, --output=@var{fájl}
Kimeneti fájl megadása. A megfelelő kiterjesztés automatikusan hozzáfűzésre
kerül (pl. @code{.pdf} PDF kimenet esetén).
PDF generálása. A @code{--ps} opció hatását vonja maga után.
-@item -j,--jail=@var{felhasználó},@var{csoport},@var{börtön},@var{könyvtár}
+@item -j, --jail=@var{felhasználó},@var{csoport},@var{börtön},@var{könyvtár}
A @command{lilypond} futtatása ún. börtönben.
A @code{--jail} opció egy rugalmasabb alternatíva a @code{-dsafe} módnál abban
@end table
-@item -v,--version
+@item -v, --version
Verzióinformáció kijelzése.
-@item -V,--verbose
+@item -V, --verbose
Bőbeszédűség bekapcsolása: az összes beolvasott fájl elérési útjának,
futásidőknek és egyéb információknak a kijelzése.
-@item -w,--warranty
+@item -w, --warranty
A GNU LilyPond garanciavállalásának kijelzése. (A LilyPond fejlesztői
@strong{SEMMIFÉLE GARANCIÁT} nem vállalnak!)
@end table
A következő opciók adhatóak meg:
@table @code
-@item -e,--edit
+@item -e, --edit
A fájl helyben frissítése.
-@item -f,--from=@var{forrásverzió}
+@item -f, --from=@var{forrásverzió}
A forrásfájl verziójának megadása. Ha nincs megadva, a @command{convert-ly}
a fájlban található @code{\version} parancs alapján kitalálja.
Példa: @code{--from=2.10.25}
-@item -n,--no-version
+@item -n, --no-version
Alapesetben a @command{convert-ly} ellátja a kimenetét a megfelelő
@code{\version} paranccsal. Ez az opció ezt tiltja le.
@c use commas not colons
Aleksandr Andreev,
+Frédéric Bron,
Marc Hohl,
+James Lowe,
+David Nalesnik,
Keith OHara,
Benkő Pál,
Anders Pilegaard,
-Julien Rioux
+Julien Rioux,
+Johannes Rohrer,
+Adam Spiers
@c no comma for last entry
@c use commas not colons
Frédéric Bron,
+Federico Bruni,
James Lowe,
+Jean-Charles Malahieude,
+Guy Stalnaker,
Arnold Theresius,
Rodolfo Zitellini
Felipe Castro,
Pavel Fric,
Jean-Charles Malahieude,
-Till Rettig
+Till Rettig,
+Luca Rossetto Casel
@c no comma for last entry
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines: (different from policy.txt!)
musicale le parole chiave @code{\appoggiatura} o @code{\acciaccatura}:
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@node Concetti fondamentali
@chapter Concetti fondamentali
@tab Incide le chiavi
@item Completion_heads_engraver
@tab Separa le note che attraversano le stanghette
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Crea le forcelle e i testi relativi alla dinamica
@item Forbid_line_break_engraver
@tab Impedisce l'a capo se un elemento musicale è ancora attivo
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
Esistono altri tre tipi di abbellimenti possibili; l'@emph{acciaccatura} -- un
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 }
+ \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 }
>>
@end lilypond
\new Voice {
<<
{ d1^\trill_( }
- { s2 s4. \grace { c16[ d] } }
+ { s2 s4. \grace { c16 d } }
>>
c1)
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Federico Bruni
@c Translation checkers: Luca Rossetto Casel
@ref{Simultaneous expressions}):
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Tuttavia, se i nomi degli strumenti sono lunghi, potranno essere centrati
solo aumentando i valori di @code{indent} e @code{short-indent}.
Ulteriori dettagli su queste impostazioni si trovano in
-@ref{\paper variables for shifts and indents}.
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
@lilypond[verbatim,quote,ragged-right]
\relative c'' {
@seealso
Guida alla notazione:
-@ref{\paper variables for shifts and indents},
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents},
@ref{Modifying context plug-ins}.
Frammenti:
@item -e, --explicit-durations
Crea durate esplicite.
-@item -h,--help
+@item -h, --help
Mostra una sintesi dell'utilizzo del programma.
@item -k, --key=@var{acc}[:@var{minor}]
@item -a, --absolute
converte le altezze relative in assolute.
-@item -h,--help
+@item -h, --help
mostra una sintesi dell'utilizzo e delle opzioni.
@item -l, --language=LANG
ignora le informazioni relative alle travature, impiegando la disposizione
automatica delle travature fornita da LilyPond.
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
imposta il nome del file di output su @var{file}. Se @var{file} è @file{-}, l'output
sarà salvato su stdout. Se non specificato, verrà usato @var{file-xml}@file{.ly}.
-@item -r,--relative
+@item -r, --relative
converte le altezze in modalità relativa (predefinito).
@item -v, --verbose
@item --version
Mostra informazioni sulla versione.
-@item -z,--compressed
+@item -z, --compressed
il file di input è un file MusicXML compresso in un archivio ZIP.
@end table
@command{abc2ly} accetta le seguenti opzioni:
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
preserva le regole di disposizione delle travature di ABC
-@item -h,--help
+@item -h, --help
mostra questo messaggio di aiuto
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
imposta il nome del file di output su @var{file}.
-@item -s,--strict
+@item -s, --strict
imposta una modalità di interpretazione letterale per effettuare una conversione stretta
@item --version
mostra informazioni sulla versione.
@command{etf2ly} accetta le seguenti opzioni:
@table @code
-@item -h,--help
+@item -h, --help
mostra questo messaggio di aiuto
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
imposta il nome del file di output su @var{FILE}
@item --version
mostra informazioni sulla versione
@table @code
-@item -d,--define-default=@var{variabile}=@var{valore}
+@item -d, --define-default=@var{variabile}=@var{valore}
Si veda @ref{Advanced command line options for LilyPond}.
@cindex Scheme, valutazione dell'espressione
@cindex valutazione dell'espressione, Scheme
-@item -e,--evaluate=@var{espressione}
+@item -e, --evaluate=@var{espressione}
Valuta l'@var{espressione} di Scheme prima di analizzare qualsiasi file @file{.ly}.
Si possono specificare varie opzioni @option{-e}; saranno analizzate in modo
sequenziale.
@cindex output, formato
@cindex formato, output
-@item -f,--format=@var{formato}
+@item -f, --format=@var{formato}
Formati di output. Come @code{formato} si può scegliere tra
@code{ps}, @code{pdf} e @code{png}.
Esempio: @code{lilypond -fpng @var{file}.ly}
-@item -h,--help
+@item -h, --help
Mostra una sintesi dell'utilizzo.
-@item -H,--header=@var{CAMPO}
+@item -H, --header=@var{CAMPO}
Estrae un campo dell'intestazione nel file @file{NOME.@var{CAMPO}}.
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
Imposta il file di inizializzazione su @var{file} (predefinito: @file{init.ly}).
@cindex ricerca dei file
@cindex gabbia chroot, esecuzione all'interno di
-@item -j,--jail=@var{utente},@var{gruppo},@var{gabbia},@var{directory}
+@item -j, --jail=@var{utente},@var{gruppo},@var{gabbia},@var{directory}
Esegue @command{lilypond} in una gabbia chroot.
L'opzione @option{--jail} fornisce un'alternativa più flessibile a
@cindex loglevel
@cindex output dettagliato
-@item -l,--loglevel=@var{LIVELLO}
+@item -l, --loglevel=@var{LIVELLO}
Imposta la verbosità dell'output della console su @var{LIVELLO}. I valori possibili sono:
@table @code
@cindex output, impostare il nome del file
@cindex output, directory
-@item -o,--output=@var{FILE} o @var{CARTELLA}
+@item -o, --output=@var{FILE} o @var{CARTELLA}
Imposta il file di output predefinito @var{FILE} oppure, se una cartella con
quel nome esiste già, dirige l'output in @var{CARTELLA}, prendendo il nome
del file dal file di input. In entrambi i casi verrà aggiunto il suffisso
@item --pdf
Genera PDF. Questo implica @option{--ps}.
-@item -v,--version
+@item -v, --version
Mostra informazioni sulla versione.
-@item -V,--verbose
+@item -V, --verbose
Aumenta la prolissità: mostra i percorsi completi di tutti i file letti e dà
informazioni sui tempi.
-@item -w,--warranty
+@item -w, --warranty
Mostra la garanzia con cui viene distribuito GNU LilyPond. (Distribuito
con @strong{NESSUNA GARANZIA}!)
Esistono le seguenti opzioni:
@table @code
-@item -d,--diff-version-update
+@item -d, --diff-version-update
aumenta il numero di versione in @code{\version} solo se il file è stato
modificato da @command{convert-ly}. Senza questa opzione (o quando una
conversione ha modificato il file), la dichiarazione di versione riflette
l'ultime regola di conversione considerata.
-@item -e,--edit
+@item -e, --edit
Applica le conversioni direttamente nel file di input, modificando
l'originale.
-@item -f,--from=@var{from-patchlevel}
+@item -f, --from=@var{from-patchlevel}
Imposta la versione da cui convertire. Se non viene impostata, @command{convert-ly}
la ricaverà dalla stringa @code{\version} presente nel file.
Esempio: @option{--from=2.10.25}
caratteri maiuscoli, sono @code{PROGRESS} (predefinito), @code{NONE},
@code{WARNING}, @code{ERROR} e @code{DEBUG}.
-@item -n,--no-version
+@item -n, --no-version
Normalmente @command{convert-ly} aggiunge un indicatore @code{\version}
nell'output. Questa opzione lo impedisce.
\score{} must now begin with a music expression. Anything else
(particularly \header{}) must come after the music.
@end verbatim
-
-
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines: (different from policy.txt!)
よっても作成されます:
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@tab 音部記号を譜刻します。
@item Completion_heads_engraver
@tab 小節線をまたがる音符を分割します。
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab 強弱記号 (クレッシェンド、デクレッシェンド) と強弱テキスト (p や f など)
を作成します。
@item Forbid_line_break_engraver
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.27"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
\layout @{
\context @{
\TabStaff
- stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+ stringTunings = \stringTuning <c' g' d'' a''>
@}
@}
@end example
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
装飾音符には他にも 3 つのタイプがあります。@c
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 }
+ \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 }
>>
@end lilypond
\new Voice {
<<
{ d1^\trill_( }
- { s2 s4. \grace { c16[ d] } }
+ { s2 s4. \grace { c16 d } }
>>
c1)
}
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@c Translators: Yoshiki Sawada
については @ref{Simultaneous expressions} を参照してください):
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@c Translators: Yoshiki Sawada
オプションについて説明します。
@menu
-* \paper ブロック::
+* paper ブロック::
* 紙面サイズと自動拡縮::
-* 固定された垂直方向の \paper スペース変数::
-* 可変な垂直方向の \paper スペース変数::
-* 水平方向の \paper スペース変数::
-* 他の \paper 変数::
+* 固定された垂直方向の paper スペース変数::
+* 可変な垂直方向の paper スペース変数::
+* 水平方向の paper スペース変数::
+* 他の paper 変数::
@end menu
-@node \paper ブロック
+@node paper ブロック
@subsection @code{\paper} ブロック
@translationof The \paper block
自動拡縮によって影響を受ける垂直方向の長さは
@code{top-margin} と @code{bottom-margin} です
-(@ref{固定された垂直方向の \paper スペース変数} を参照してください)。@c
+(@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数} を参照してください)。@c
自動拡縮によって影響を受ける水平方向の長さは
@code{right-margin}, @code{inner-margin}, @code{outer-margin},
@code{binding-offset}, @code{indent}, それに @code{short-indent} です
-(@ref{水平方向の \paper スペース変数} を参照してください)。
+(@ref{水平方向の paper スペース変数,,水平方向の @code{@bs{}paper} スペース変数} を参照してください)。
これらの長さに対するデフォルト値は
@code{top-margin-default}, @code{bottom-margin-default} 等の内部変数を@c
@seealso
記譜法リファレンス:
-@ref{固定された垂直方向の \paper スペース変数},
-@ref{水平方向の \paper スペース変数}
+@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数},
+@ref{水平方向の paper スペース変数,,水平方向の @code{@bs{}paper} スペース変数}
インストールされているファイル:
@file{ly/paper-defaults-init.ly},
@file{scm/paper.scm}
-@node 固定された垂直方向の \paper スペース変数
+@node 固定された垂直方向の paper スペース変数
@subsection 固定された垂直方向の @code{\paper} スペース変数
@translationof Fixed vertical spacing \paper variables
明示的に定義された紙面サイズは、ユーザ定義の上または下のマージン設定を上書きします。
-@node 可変な垂直方向の \paper スペース変数
+@node 可変な垂直方向の paper スペース変数
@subsection 可変な垂直方向の @code{\paper} スペース変数
@translationof Flexible vertical spacing \paper variables
@menu
* 可変な垂直方向スペース連想リストの構造::
-* 可変な垂直方向の \paper スペース変数のリスト::
+* 可変な垂直方向の paper スペース変数のリスト::
@end menu
@end example
-@node 可変な垂直方向の \paper スペース変数のリスト
+@node 可変な垂直方向の paper スペース変数のリスト
@unnumberedsubsubsec 可変な垂直方向の @code{\paper} スペース変数のリスト
@translationof List of flexible vertical spacing \paper variables
@rlsr{Spacing}
-@node 水平方向の \paper スペース変数
+@node 水平方向の paper スペース変数
@subsection 水平方向の @code{\paper} スペース変数
@translationof Horizontal spacing \paper variables
@ref{紙面サイズに応じた自動拡縮} を参照してください。}
@menu
-* 幅とマージンの \paper 変数::
-* 両面モードのための \paper 変数::
-* シフトとインデントのための \paper 変数::
+* 幅とマージンの paper 変数::
+* 両面モードのための paper 変数::
+* シフトとインデントのための paper 変数::
@end menu
-@node 幅とマージンの \paper 変数
+@node 幅とマージンの paper 変数
@unnumberedsubsubsec 幅とマージンの @code{\paper} 変数
@translationof \paper variables for widths and margins
明示的に定義された紙面サイズは、ユーザ定義の左または右のマージン設定を上書きします。
-@node 両面モードのための \paper 変数
+@node 両面モードのための paper 変数
@unnumberedsubsubsec 両面モードのための @code{\paper} 変数
@translationof \paper variables for two-sided mode
@file{ly/paper-defaults-init.ly}
-@node シフトとインデントのための \paper 変数
+@node シフトとインデントのための paper 変数
@unnumberedsubsubsec シフトとインデントのための @code{\paper} 変数
@translationof \paper variables for shifts and indents
@rlsr{Spacing}
-@node 他の \paper 変数
+@node 他の paper 変数
@subsection 他の @code{\paper} 変数
@translationof Other \paper variables
@menu
-* 改行のための \paper 変数::
-* 改ページのための \paper 変数::
-* ページ番号のための \paper 変数::
-* その他の \paper 変数::
+* 改行のための paper 変数::
+* 改ページのための paper 変数::
+* ページ番号のための paper 変数::
+* その他の paper 変数::
@end menu
-@node 改行のための \paper 変数
+@node 改行のための paper 変数
@unnumberedsubsubsec 改行のための @code{\paper} 変数
@translationof \paper variables for line breaking
@ref{改行}
-@node 改ページのための \paper 変数
+@node 改ページのための paper 変数
@unnumberedsubsubsec 改ページのための @code{\paper} 変数
@translationof \paper variables for page breaking
@file{ly/paper-defaults-init.ly}
-@node ページ番号のための \paper 変数
+@node ページ番号のための paper 変数
@unnumberedsubsubsec ページ番号のための @code{\paper} 変数
@translationof \paper variables for page numbering
ページ 1 が右側にくるようにする必要があります。
-@node その他の \paper 変数
+@node その他の paper 変数
@unnumberedsubsubsec その他の @code{\paper} 変数
@translationof Miscellaneous \paper variables
@item
@code{line-width}, @code{ragged-right} それに @code{ragged-last}
-(@ref{幅とマージンの \paper 変数} を参照してください)
+(@ref{幅とマージンの paper 変数,,幅とマージンの @code{@bs{}paper} 変数} を参照してください)
@item
@code{indent} と @code{short-indent}
-(@ref{シフトとインデントのための \paper 変数} を参照してください)
+(@ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数} を参照してください)
@item
@code{system-count}
-(@ref{改行のための \paper 変数} を参照してください)
+(@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数} を参照してください)
@end itemize
@seealso
記譜法リファレンス:
-@ref{改行のための \paper 変数}
+@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数}
コード断片集:
@rlsr{Spacing}
これらの設定が @code{#t} にセットされている場合、@c
すべてのページあるいは最後のページのシステムは@c
ページの垂直方向全体には広がりません。@c
-@ref{固定された垂直方向の \paper スペース変数} を参照してください。
+@ref{固定された垂直方向の paper スペース変数,,固定された垂直方向の @code{@bs{}paper} スペース変数} を参照してください。
改ページは @code{page-breaking} 関数によって算出されます。@c
LilyPond は改ページを算出するために 3 つのアルゴリズムを提供します:
@seealso
記譜法リファレンス:
-@ref{改行のための \paper 変数}
+@ref{改行のための paper 変数,,改行のための @code{@bs{}paper} 変数}
コード断片集:
@rlsr{Spacing}
仕組みだけを説明しているということに注意してください。@c
システム、score、マークアップ、それにマージン間の垂直方向のスペースは、@c
@code{\paper} 変数によって制御されます
--- @ref{可変な垂直方向の \paper スペース変数} で説明しています。
+-- @ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数} で説明しています。
@menu
* システム内部のスペース プロパティ::
垂直方向のスペースのグラフィカル オブジェクト プロパティは
(@code{staff-affinity} を除いて)、@c
-@ref{可変な垂直方向の \paper スペース変数} で説明した
+@ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数} で説明した
@code{\paper} スペース変数と同じ連想配列構造を使用します。
連想配列を変更する方法は、@ref{Modifying alists} で説明します。@c
グラフィカル オブジェクト プロパティの調節は、@c
@seealso
記譜法リファレンス:
-@ref{可変な垂直方向の \paper スペース変数},
+@ref{可変な垂直方向の paper スペース変数,,可変な垂直方向の @code{@bs{}paper} スペース変数},
@ref{Modifying alists}
インストールされているファイル:
@lilypond[quote,ragged-right,relative=2,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c32] }
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c32] }
@end lilypond
@seealso
しかしながら、楽器名が長い場合、@code{indent} 設定と @code{short-indent}
設定の値を増やさない限り、譜グループの中にある楽器名は中央揃えされません。@c
-これらの設定についての詳細は @ref{\paper variables for shifts and indents}
+これらの設定についての詳細は @ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数}
を参照してください。
@lilypond[verbatim,quote,ragged-right]
@seealso
記譜法リファレンス:
-@ref{\paper variables for shifts and indents},
+@ref{シフトとインデントのための paper 変数,,シフトとインデントのための @code{@bs{}paper} 変数},
@ref{Modifying context plug-ins}
コード断片集:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.19"
+@c \version "2.17.28"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
<<
\new Voice = melody \relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
@lilypond[verbatim,ragged-right,quote]
<<
\new Voice = melody \relative c' {
- \grace { c16[( d e f] }
+ \grace { c16( d e f }
g1) f
}
\new Lyrics \with { includeGraceNotes = ##t }
@item -e, --explicit-durations
すべての音符の演奏時間を出力します。
-@item -h,--help
+@item -h, --help
使用方法の要約を表示します。
@item -k, --key=@var{acc}[:@var{minor}]
@item -a, --absolute
絶対ピッチで出力します。
-@item -h,--help
+@item -h, --help
使用方法の要約を表示します。
@item -l, --language=LANG
@item --no-beaming
連桁情報を変換せず、LilyPond の自動連桁機能を使用します。
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
出力ファイル名を @var{file} とします。@c
@var{file} に @file{-} を指定すると、出力は stdout に表示されます。@c
指定が無い場合、出力は @var{xml-file}@file{.ly} となります。
-@item -r,--relative
+@item -r, --relative
ピッチを相対モードに変換します。(デフォルト)
-@item -v,--verbose
+@item -v, --verbose
Verbose モード (ログ等が詳細) で実行します。
@item --version
バージョン情報を表示します。
-@item -z,--compressed
+@item -z, --compressed
入力ファイルが ZIP で圧縮された MusicXML ファイルであることを示します。
@end table
@command{abc2ly} には以下のオプションがあります。
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
ABC の連桁情報を保持します。
-@item -h,--help
+@item -h, --help
このオプション一覧を表示します。
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
出力ファイル名を @var{file} とします。
-@item -s,--strict
+@item -s, --strict
@c 未訳
be strict about success
The following options are supported by @command{etf2ly}:
@table @code
-@item -h,--help
+@item -h, --help
this help
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
set output filename to @var{FILE}
@item --version
version information
@table @code
-@item -d,--define-default=@var{var}=@var{val}
+@item -d, --define-default=@var{var}=@var{val}
@ref{Advanced command line options for LilyPond} を参照してください。
@cindex Scheme, expression evaluation (Scheme 表記の評価)
@cindex expression evaluation, Scheme (Scheme 表記の評価)
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
@file{.ly} ファイルを解析する前に Scheme @var{expr} を評価します。@c
複数の @code{-e} オプションが与えられた場合、それらは順番に評価されます。
@cindex output, format (出力のフォーマット)
@cindex format, output (出力のフォーマット)
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
フォーマットを指定します。@c
@code{format} の選択肢は @code{ps}, @code{pdf}, それに @code{png} です。
例: @code{lilypond -fpng @var{filename}.ly}
-@item -h,--help
+@item -h, --help
使用方法の要約を表示します。
-@item -H,--header=@var{FIELD}
+@item -H, --header=@var{FIELD}
ヘッダ フィールドをファイル @file{BASENAME.@var{FIELD}} に吐き出します。
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
init ファイルとして @var{file} をセットします (デフォルト: @file{init.ly})。
@cindex file searching (ファイル サーチ)
@cindex chroot jail, running inside (chroot jail 内部で実行する)
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
@command{lilypond} を chroot jail 環境で実行します。@c
(訳者: chroot jail 環境とはセキュリティのために@c
カレント プロセスに対してルート ディレクトリの位置を変更すること。)
@cindex loglevel (ログレベル)
@cindex output, verbosity (出力の饒舌さ)
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
コンソール出力の饒舌さを @var{LEVEL} にセットします。@c
取り得る値は以下の通りです:
@cindex output, setting filename (出力のファイル名を設定する)
@cindex output, directory (出力ディレクトリ)
-@item -o,--output=@var{FILE} or @var{FOLDER}
+@item -o, --output=@var{FILE} or @var{FOLDER}
デフォルトの出力ファイルとして @var{FILE} をセットします。@c
セットした名前のフォルダが存在する場合、そのフォルダに出力されます。@c
適切な接尾辞が追加されます
PDF を生成します。@c
これは内部で @code{--ps} を使用します。
-@item -v,--version
+@item -v, --version
バージョン情報を表示します。
-@item -V,--verbose
+@item -V, --verbose
冗長表示モードにします:
読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。
-@item -w,--warranty
+@item -w, --warranty
GNU LilyPond の保証責任を表示します。@c
(GNU LilyPond には@strong{保証責任はありません}!)
以下のオプションを与えることができます:
@table @code
-@item -d,--diff-version-update
+@item -d, --diff-version-update
@code{\version} を最新に更新します。最新バージョンよりも大きい場合は@c
何もしません。
-@item -e,--edit
+@item -e, --edit
入力ファイルに直接変換を適用して、それをその場で変更します。
-@item -f,--from=@var{from-patchlevel}
+@item -f, --from=@var{from-patchlevel}
変換元のバージョンをセットします。@c
これがセットされていない場合、@c
@command{convert-ly} は入力ファイルの中にある
取り得る値は、大文字で、@code{PROGRESS} (デフォルト), @code{NONE},
@code{WARNING}, @code{ERROR}, それに @code{DEBUG} です。
-@item -n,--no-version
+@item -n, --no-version
通常、@command{convert-ly} は @code{\version} インジケータを@c
出力に付け加えます。@c
このオプションを指定すると、それを抑制します。
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines: (different from policy.txt!)
* Advanced rhythmic commands::
@end menu
-
@node Bar lines and bar checks
@subsection Bar lines and bar checks
-@subheading Bar lines
+@menu
+* Bar lines::
+* Bar checks::
+@end menu
+
+@node Bar lines
+@unnumberedsubsubsec Bar lines
+
Single bar lines are automatically placed in the music so
there is no need to add them manually. Other types of bar
g1 e1 \bar "||" c2. c'4 \bar "|."
@end lilypond
-@subheading Bar checks
+@node Bar checks
+@unnumberedsubsubsec Bar checks
+
Though not strictly necessary, @emph{bar checks} should be
used in the input code to show where bar lines are expected
@node Accidentals and key signatures
@subsection Accidentals and key signatures
+@menu
+* Accidentals::
+* Key signatures::
+* Warning key signatures and pitches::
+@end menu
+
@warning{New users are often confused by these -- please read the
warning at the bottom of this page, especially if you are not
familiar with music theory!}
-@subheading Accidentals
+@node Accidentals
+@unnumberedsubsubsec Accidentals
+
@cindex accidentals
@cindex accidentals and key signatures
@end lilypond
@cindex key signature, setting
-@subheading Key signatures
+
+@node Key signatures
+@unnumberedsubsubsec Key signatures
+
@cindex key signature
@cindex major
@smallspace
-@subheading Warning: key signatures and pitches
+@node Warning key signatures and pitches
+@unnumberedsubsubsec Warning: key signatures and pitches
+
Music Glossary: @rglos{accidental}, @rglos{key signature},
@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
@funindex ( ... )
@funindex \( ... \)
-@subheading Ties
+@menu
+* Ties::
+* Slurs::
+* Phrasing slurs::
+* Warnings slurs vs. ties::
+@end menu
+
+@node Ties
+@unnumberedsubsubsec Ties
Music Glossary: @rglos{tie}.
g4~ g c2~ | c4~ c8 a~ a2 |
@end lilypond
-@subheading Slurs
+@node Slurs
+@unnumberedsubsubsec Slurs
Music Glossary: @rglos{slur}.
d4( c16) cis( d e c cis d) e( d4)
@end lilypond
-@subheading Phrasing slurs
+@node Phrasing slurs
+@unnumberedsubsubsec Phrasing slurs
+
Music Glossary: @rglos{slur}, @rglos{phrasing}.
@smallspace
@cindex slurs versus ties
-@subheading Warnings: slurs vs. ties
+
+@node Warnings slurs vs. ties
+@unnumberedsubsubsec Warnings: slurs vs. ties
+
Music Glossary: @rglos{articulation}, @rglos{slur}, @rglos{tie}.
@node Articulation and dynamics
@subsection Articulation and dynamics
+@menu
+* Articulations::
+* Fingerings::
+* Dynamics::
+@end menu
+
+@node Articulations
+@unnumberedsubsubsec Articulations
-@subheading Articulations
@cindex articulation
@cindex accent
c4-> c-. c2-_
@end lilypond
-@subheading Fingerings
+@node Fingerings
+@unnumberedsubsubsec Fingerings
+
@cindex fingering
c4_-^1 d^. f^4_2-> e^-_+
@end lilypond
-@subheading Dynamics
+@node Dynamics
+@unnumberedsubsubsec Dynamics
+
@cindex dynamics
@cindex decrescendo
@node Advanced rhythmic commands
@subsection Advanced rhythmic commands
-@subheading Partial measure
+@menu
+* Partial measure::
+* Tuplets::
+* Grace notes::
+@end menu
+
+@node Partial measure
+@unnumberedsubsubsec Partial measure
+
@cindex pickup
@cindex anacrusis
c2 d |
@end lilypond
-@subheading Tuplets
+@node Tuplets
+@unnumberedsubsubsec Tuplets
+
@cindex tuplets
@cindex triplets
\tuplet 3/2 { d4 a8 }
@end lilypond
-@subheading Grace notes
+@node Grace notes
+@unnumberedsubsubsec Grace notes
+
@cindex grace notes
@cindex acciaccatura
with the keyword @code{\appoggiatura} or @code{\acciaccatura}:
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
@cindex compound music expression
@cindex music expression, compound
+@menu
+* Analogy mathematical expressions::
+* Simultaneous music expressions multiple staves::
+* Simultaneous music expressions single staff::
+@end menu
+
In LilyPond input files, music is represented by @emph{music
expressions}. A single note is a music expression:
{ { a4 g } f4 g }
@end lilypond
-@subheading Analogy: mathematical expressions
+@node Analogy mathematical expressions
+@unnumberedsubsubsec Analogy: mathematical expressions
+
This mechanism is similar to mathematical formulas: a big formula
is created by composing small formulas. Such formulas are called
polyphonic scores.
-@subheading Simultaneous music expressions: multiple staves
+@node Simultaneous music expressions multiple staves
+@unnumberedsubsubsec Simultaneous music expressions: multiple staves
+
@cindex multiple staves
@cindex staves, multiple
@code{@bs{}relative} command.}
-@subheading Simultaneous music expressions: single staff
+@node Simultaneous music expressions single staff
+@unnumberedsubsubsec Simultaneous music expressions: single staff
+
To determine the number of staves in a piece, LilyPond looks at
the beginning of the first expression. If there is a single note,
}
@end lilypond
-
-
-
@node Staff groups
@subsection Staff groups
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.18"
+@c \version "2.17.29"
@node Fundamental concepts
@chapter Fundamental concepts
@tab Engraves clefs
@item Completion_heads_engraver
@tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Creates hairpins and dynamic texts
@item Forbid_line_break_engraver
@tab Prevents line breaks if a musical element is still active
@code{\context} block within a @code{\layout} block. Each
@code{\context} block will affect all contexts of the type specified
throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears. Here is a example to show the format:
+@code{\layout} block appears. Here is an example to show the format:
@lilypond[verbatim,quote]
\score {
@cindex example, first
@cindex case sensitive
+@menu
+* Producing output::
+@end menu
+
@qq{Compiling} is the term used for processing an input file in
LilyPond format to produce output file(s). Output files are
generally PDF (for printing or viewing), MIDI (for playing), and
@smallspace
-@subheading Producing output
+@node Producing output
+@unnumberedsubsubsec Producing output
@cindex PDF file
@cindex viewing music
@cindex simple notation
@cindex notation, simple
+@menu
+* Pitches::
+* Durations (rhythms)::
+* Rests::
+* Time signature::
+* Tempo marks::
+* Clef::
+* All together::
+@end menu
+
LilyPond will add some notation elements automatically. In the
next example, we have only specified four pitches, but LilyPond
has added a clef, time signature, and rhythms.
values are useful.
-@subheading Pitches
+@node Pitches
+@unnumberedsubsubsec Pitches
@cindex pitches
@cindex relative mode
quotes @code{''} and not one double quote @code{"}@tie{}!
@c " - keeps quotes in order for context-sensitive editor -td
-@subheading Durations (rhythms)
+@node Durations (rhythms)
+@unnumberedsubsubsec Durations (rhythms)
@cindex note durations
@cindex durations
}
@end lilypond
-
-@subheading Rests
+@node Rests
+@unnumberedsubsubsec Rests
@cindex rest
@cindex notating rests
@end lilypond
-@subheading Time signature
+@node Time signature
+@unnumberedsubsubsec Time signature
@cindex time signature
}
@end lilypond
-@subheading Tempo marks
+@node Tempo marks
+@unnumberedsubsubsec Tempo marks
@cindex tempo marks
@cindex metronome marks
@end lilypond
-@subheading Clef
+@node Clef
+@unnumberedsubsubsec Clef
@cindex clef
@cindex treble
@end lilypond
-@subheading All together
+@node All together
+@unnumberedsubsubsec All together
Here is a small example showing all these elements together:
@cindex tweaking methods
@menu
-* The \override command::
-* The \revert command::
-* The \once prefix::
-* The \overrideProperty command::
-* The \tweak command::
+* The override command::
+* The revert command::
+* The once prefix::
+* The overrideProperty command::
+* The tweak command::
@end menu
-@node The \override command
-@unnumberedsubsubsec The @code{\override} command
+@node The override command
+@unnumberedsubsubsec The @code{@bs{}override} command
@cindex override command
@cindex override syntax
@end lilypond
-@node The \revert command
-@unnumberedsubsubsec The @code{\revert} command
+@node The revert command
+@unnumberedsubsubsec The @code{@bs{}revert} command
@cindex revert command
@end lilypond
-@node The \once prefix
-@unnumberedsubsubsec The @code{\once} prefix
+@node The once prefix
+@unnumberedsubsubsec The @code{@bs{}once} prefix
@funindex \once
@funindex once
effect.
-@node The \overrideProperty command
-@unnumberedsubsubsec The @code{\overrideProperty} command
+@node The overrideProperty command
+@unnumberedsubsubsec The @code{@bs{}overrideProperty} command
@cindex overrideProperty command
@c Maybe explain in a later iteration -td
-@node The \tweak command
-@unnumberedsubsubsec The @code{\tweak} command
+@node The tweak command
+@unnumberedsubsubsec The @code{@bs{}tweak} command
@cindex tweak command
correct processing. For example, errors will be generated if the
@code{stencil} property of the @code{NoteHead} object is set to
@code{#f}. If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
with zero size:
@lilypond[quote,verbatim,relative=2]
@menu
* The outside-staff-priority property::
-* The \textLengthOn command::
+* The textLengthOn command::
* Dynamics placement::
* Grob sizing::
@end menu
room for the text. This is done using the @code{textLengthOn}
command.
-@node The \textLengthOn command
-@unnumberedsubsubsec The @code{\textLengthOn} command
+@node The textLengthOn command
+@unnumberedsubsubsec The @code{@bs{}textLengthOn} command
@cindex notes, spreading out with text
of the @code{StaffGrouper}. Spacing from ungrouped staves
(like @code{Lyrics} and @code{Staff}) is controlled by the
variables of the @code{VerticalAxisGroup}. See the
-@ruser{Flexible vertical spacing \paper variables} and
+@ruser{Flexible vertical spacing paper variables} and
@ruser{Flexible vertical spacing within systems} for more
details.
@code{side-position-interface} and the nearest other object (generally
the note or the staff lines); @code{staff-padding} applies only to
those objects which are always set outside the staff -- it controls
-the minimum amount of space that should be inserted between that
-object and the staff. Note that @code{staff-padding} has no effect on
-objects which are positioned relative to the note rather than the
+the minimum distance from the staff to the outside-staff object.
+Note that @code{staff-padding} has no effect on
+objects that are positioned relative to the note rather than the
staff, even though it may be overridden without error for such objects
-- it is simply ignored.
@cindex objects, aligning on a baseline
@code{staff-padding} can be used to align objects such as dynamics
-along a baseline at a fixed height above the staff, rather than at a
-height dependent on the position of the note to which they are
-attached. It is not a property of @code{DynamicText} but of
+along a baseline at a fixed distance from the staff, when no other
+notation forces them further from the staff.
+It is not a property of @code{DynamicText} but of
@code{DynamicLineSpanner}. This is because the baseline should apply
equally to @strong{all} dynamics, including those created as extended
spanners. So this is the way to align the dynamic marks in the
@cindex staff-padding property, example
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner.staff-padding = #2
-a4\f b\mf a\mp b\p
+\override DynamicLineSpanner.staff-padding = #3
+a4\f b\mf a\p b\mp
@end lilypond
@ref{Advanced tweaks with Scheme}.
@lilypond[quote,verbatim,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
@example
%%% save this to a file called "definitions.ily"
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
@end example
@lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
@example
%%% definitions.ily
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
@end example
@lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
@example
%%% web-publish.ily
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
@end example
@lilypond[quote,ragged-right]
-mpdolce = -\tweak #'self-alignment-X #-0.6 #
- (make-dynamic-script
- (markup #:dynamic "mp"
- #:normal-text #:italic "dolce" ))
+mpdolce =
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
'introduction' => [2, 2, 2, 2, 3, 3, 4, 4],
'download' => [2, 2, 2, 3, 3, 4],
'manuals' => [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4],
- 'community' => [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4],
+ 'community' => [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4],
);
my $addColor = "colorDefault";
while (($top_section, $color_indices) = each %color_maps) {
OUT_SMALL_PNG_FILES = $(OUT_PNG_FILES:%.png=%-small.png)
ifeq ($(out),www)
-all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
+local-WWW-1: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
endif
$(outdir)/%.png: %.ly
* Documentation updates
-* Added -e,--evaluate=CODE, to evaluate scheme from the command
+* Added -e, --evaluate=CODE, to evaluate scheme from the command
line. Practical application:
-e "(set-lily-option 'midi-debug #t)'
handle_broken_smobs (); should conserve a little memory.
* Fixed handling of orphaned score-elements. Any element that does
-not have its Line_of_score as a ancestor in both directions, is silently
+not have its Line_of_score as an ancestor in both directions, is silently
removed from the output. This guarantees that programming errors
don't result in coredumps from Dimension_cache::common_refpoint ():
element->line_l () is always a common reference point.
* input/no-notation/safe-tex.ly: New file.
* scripts/lilypond.py (global_latex_preamble): Add \nofiles for
- safe mode Add -s,--safe-mode option. Use -S,--set for setting
+ safe mode Add -s, --safe-mode option. Use -S, --set for setting
options now.
(run_lilypond): When in --safe-mode, pass option to lilypond-bin.
When in --safe-mode, set environment openout_any=p[aranoid].
OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS)))
##local-WWW-2: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
-copy-for-me:
- $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
-
$(outdir)/%.txt: %
cp $< $@
S: ?,
FI: nousu.
-Indicator for a indeterminately rising pitch bend. Compare with
+Indicator for an indeterminately rising pitch bend. Compare with
@emph{glissando}, which has determinate starting and ending pitches.
@seealso
S: ?,
FI: lasku.
-Indicator for a indeterminately falling pitch bend. Compare with
+Indicator for an indeterminately falling pitch bend. Compare with
@emph{glissando}, which has determinate starting and ending pitches.
@seealso
@c Translation checker:
@c Translation checker committish:
-@c \version "2.17.25"
+@c \version "2.17.28"
@ignore
Tutorial guidelines: (different from policy.txt!)
voor een muziekuitdrukking te zetten
@lilypond[verbatim,quote,relative=2]
-c2 \grace { a32[ b] } c2 |
+c2 \grace { a32 b } c2 |
c2 \appoggiatura b16 c2 |
c2 \acciaccatura b16 c2 |
@end lilypond
@c Translation checker:
@c Translation checker committish:
-@c \version "2.17.18"
+@c \version "2.17.29"
@node Fundamentele concepten
@translationof Fundamental concepts
@tab Engraves clefs
@item Completion_heads_engraver
@tab Splits notes which cross bar lines
-@c The old Dynamic_engraver is deprecated. -jm
-@item New_dynamic_engraver
+@item Dynamic_engraver
@tab Creates hairpins and dynamic texts
@item Forbid_line_break_engraver
@tab Prevents line breaks if a musical element is still active
@code{\context} block within a @code{\layout} block. Each
@code{\context} block will affect all contexts of the type specified
throughout the @code{\score} or @code{\book} block in which the
-@code{\layout} block appears. Here is a example to show the format:
+@code{\layout} block appears. Here is an example to show the format:
@lilypond[verbatim,quote]
\score {
correct processing. For example, errors will be generated if the
@code{stencil} property of the @code{NoteHead} object is set to
@code{#f}. If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
with zero size:
@lilypond[quote,verbatim,relative=2]
@c try Till Rettig
@c Add example of white note heads:
@c In the french baroque some composers used white note heads in slow pieces,
-@c mainly in 3/2-time. A quarter looks there like a eighth with a white
+@c mainly in 3/2-time. A quarter looks there like an eighth with a white
@c note head. (Franz-Rudolf Kuhnen)
@c TODO Add example of this:
@ref{Bottom-level contexts - voices},
@ref{The set command},
@ref{The override command},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
@node Defining new contexts
rehearsal marks are aligned:
@lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be aligned to right edge of the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
-% The rehearsal mark will be centered above the Time Signature
+% The rehearsal mark will be aligned to the left edge of the Time Signature
\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{default-direction-of-stems-on-the-center-line-of-the-staff.ly}
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly}
+
@seealso
Notation Reference:
@ref{Direction and placement}.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.27"
@node Fretted string instruments
@section Fretted string instruments
\layout @{
\context @{
\TabStaff
- stringTunings = \stringTuning \notemode @{ <c' g' d'' a''> @}
+ stringTunings = \stringTuning <c' g' d'' a''>
@}
@}
@end example
is entered at the top level the definitions are combined, but in
conflicting situations the later definitions take precedence. For
details of how this affects the @code{\layout} block see
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
@item
A direct scheme expression, such as
Notation Reference:
@ref{Titles explained},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
@node Titles and headers
\new Staff = "up" {
\voiceOne
% Make space for fingering in the cross-staff voice
- \once\override DynamicLineSpanner.staff-padding = #3.4
+ \once\override DynamicLineSpanner.staff-padding = #4
e''2\p\< d''\>
c''1\!
}
@snippets
@lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-discant-symbols.ly}
+{accordion-registers.ly}
@seealso
Snippets:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@node Rhythms
@section Rhythms
@lilypond[quote,verbatim,relative=2]
c4 d8[
-\grace { e32[ d c d] }
+\grace { e32 d c d }
e8] e[ e
\grace { f16 }
e8 e]
@lilypond[quote,relative=2,verbatim]
c4 \grace b16 a4(
-\grace { b16[ c16] } a2)
+\grace { b16 c16 } a2)
@end lilypond
There are three other types of grace notes possible; the
@lilypond[quote,relative=2,verbatim]
\acciaccatura d8 c4
\appoggiatura e8 d4
-\acciaccatura { g16[ f] } e2
+\acciaccatura { g16 f } e2
\slashedGrace a,8 g4
\slashedGrace b16 a4(
\slashedGrace b8 a2)
@lilypond[quote,relative=2,verbatim]
<<
- \new Staff { e2 \grace { c16[ d e f] } e2 }
- \new Staff { c2 \grace { g8[ b] } c2 }
+ \new Staff { e2 \grace { c16 d e f } e2 }
+ \new Staff { c2 \grace { g8 b } c2 }
>>
@end lilypond
\new Voice {
<<
{ d1^\trill_( }
- { s2 s4. \grace { c16[ d] } }
+ { s2 s4. \grace { c16 d } }
>>
c1)
}
Internals Reference:
@rinternals{GraceMusic},
@rinternals{Grace_beam_engraver},
+@rinternals{Grace_auto_beam_engraver},
@rinternals{Grace_engraver},
@rinternals{Grace_spacing_engraver}.
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.25"
+@c \version "2.17.28"
@node Simultaneous notes
elements, see @ref{Simultaneous expressions}):
@lilypond[verbatim,quote,relative=2]
-\grace { g8[( a b] }
+\grace { g8( a b }
<> ) \p \< -. -\markup \italic "sempre staccato"
\repeat unfold 4 { c4 e } c1\f
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.17.28"
@ignore
GDP TODO list
block.
@menu
-* The \paper block::
+* The paper block::
* Paper size and automatic scaling::
-* Fixed vertical spacing \paper variables::
-* Flexible vertical spacing \paper variables::
-* Horizontal spacing \paper variables::
-* Other \paper variables::
+* Fixed vertical spacing paper variables::
+* Flexible vertical spacing paper variables::
+* Horizontal spacing paper variables::
+* Other paper variables::
@end menu
-@node The \paper block
-@subsection The @code{\paper} block
+@node The paper block
+@subsection The @code{@bs{}paper} block
@code{\paper} blocks may be placed in three different places to form
a descending hierarchy of @code{\paper} blocks:
Most @code{\paper} variables will only work in a @code{\paper}
block. The few that will also work in a @code{\layout} block are
-listed in @ref{The \layout block}.
+listed in @ref{The layout block,,The @code{@bs{}layout} block}.
Except when specified otherwise, all @code{\paper} variables that
correspond to distances on the page are measured in millimeters,
Notation Reference:
@ref{Paper size and automatic scaling},
@ref{Custom titles headers and footers},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
Installed Files:
@file{ly/paper-defaults-init.ly}.
The vertical dimensions affected by automatic scaling are
@code{top-margin} and @code{bottom-margin} (see
-@ref{Fixed vertical spacing \paper variables}). The horizontal
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}).
+The horizontal
dimensions affected by automatic scaling are @code{left-margin},
@code{right-margin}, @code{inner-margin}, @code{outer-margin},
@code{binding-offset}, @code{indent}, and @code{short-indent} (see
-@ref{Horizontal spacing \paper variables}).
+@ref{Horizontal spacing paper variables,,Horizontal spacing @code{@bs{}paper} variables}).
The default values for these dimensions are set in
@file{ly/paper-defaults-init.ly}, using internal variables named
@seealso
Notation Reference:
-@ref{Fixed vertical spacing \paper variables},
-@ref{Horizontal spacing \paper variables}.
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables},
+@ref{Horizontal spacing paper variables,,Horizontal spacing @code{@bs{}paper} variables}.
Installed Files:
@file{ly/paper-defaults-init.ly},
@file{scm/paper.scm}.
-@node Fixed vertical spacing \paper variables
-@subsection Fixed vertical spacing @code{\paper} variables
+@node Fixed vertical spacing paper variables
+@subsection Fixed vertical spacing @code{@bs{}paper} variables
@warning{Some @code{@bs{}paper} dimensions are automatically
scaled to the paper size, which may lead to unexpected behavior.
bottom margin settings.
-@node Flexible vertical spacing \paper variables
-@subsection Flexible vertical spacing @code{\paper} variables
+@node Flexible vertical spacing paper variables
+@subsection Flexible vertical spacing @code{@bs{}paper} variables
In most cases, it is preferable for the vertical distances between
certain items (such as margins, titles, systems, and separate
@menu
* Structure of flexible vertical spacing alists::
-* List of flexible vertical spacing \paper variables::
+* List of flexible vertical spacing paper variables::
@end menu
@end example
-@node List of flexible vertical spacing \paper variables
-@unnumberedsubsubsec List of flexible vertical spacing @code{\paper} variables
+@node List of flexible vertical spacing paper variables
+@unnumberedsubsubsec List of flexible vertical spacing @code{@bs{}paper} variables
The names of these variables follow the format
@code{@var{upper}-@var{lower}-spacing}, where @code{@var{upper}}
@rlsr{Spacing}.
-@node Horizontal spacing \paper variables
-@subsection Horizontal spacing @code{\paper} variables
+@node Horizontal spacing paper variables
+@subsection Horizontal spacing @code{@bs{}paper} variables
@warning{Some @code{@bs{}paper} dimensions are automatically
scaled to the paper size, which may lead to unexpected behavior.
See @ref{Automatic scaling to paper size}.}
@menu
-* \paper variables for widths and margins::
-* \paper variables for two-sided mode::
-* \paper variables for shifts and indents::
+* paper variables for widths and margins::
+* paper variables for two-sided mode::
+* paper variables for shifts and indents::
@end menu
-@node \paper variables for widths and margins
-@unnumberedsubsubsec @code{\paper} variables for widths and margins
+@node paper variables for widths and margins
+@unnumberedsubsubsec @code{@bs{}paper} variables for widths and margins
Default values (before scaling) that are not listed here are
defined in @file{ly/paper-defaults-init.ly}.
right margin settings.
-@node \paper variables for two-sided mode
-@unnumberedsubsubsec @code{\paper} variables for two-sided mode
+@node paper variables for two-sided mode
+@unnumberedsubsubsec @code{@bs{}paper} variables for two-sided mode
Default values (before scaling) are defined in
@file{ly/paper-defaults-init.ly}.
@file{ly/paper-defaults-init.ly}.
-@node \paper variables for shifts and indents
-@unnumberedsubsubsec @code{\paper} variables for shifts and indents
+@node paper variables for shifts and indents
+@unnumberedsubsubsec @code{@bs{}paper} variables for shifts and indents
Default values (before scaling) that are not listed here are
defined in @file{ly/paper-defaults-init.ly}.
@rlsr{Spacing}.
-@node Other \paper variables
-@subsection Other @code{\paper} variables
+@node Other paper variables
+@subsection Other @code{@bs{}paper} variables
@menu
-* \paper variables for line breaking::
-* \paper variables for page breaking::
-* \paper variables for page numbering::
-* Miscellaneous \paper variables::
+* paper variables for line breaking::
+* paper variables for page breaking::
+* paper variables for page numbering::
+* Miscellaneous paper variables::
@end menu
-@node \paper variables for line breaking
-@unnumberedsubsubsec @code{\paper} variables for line breaking
+@node paper variables for line breaking
+@unnumberedsubsubsec @code{@bs{}paper} variables for line breaking
@table @code
@ref{Line breaking}.
-@node \paper variables for page breaking
-@unnumberedsubsubsec @code{\paper} variables for page breaking
+@node paper variables for page breaking
+@unnumberedsubsubsec @code{@bs{}paper} variables for page breaking
Default values not listed here are defined in
@file{ly/paper-defaults-init.ly}
@file{ly/paper-defaults-init.ly}.
-@node \paper variables for page numbering
-@unnumberedsubsubsec @code{\paper} variables for page numbering
+@node paper variables for page numbering
+@unnumberedsubsubsec @code{@bs{}paper} variables for page numbering
Default values not listed here are defined in
@file{ly/paper-defaults-init.ly}
of the cover page so that page 1 is on the right hand side.
-@node Miscellaneous \paper variables
-@unnumberedsubsubsec Miscellaneous @code{\paper} variables
+@node Miscellaneous paper variables
+@unnumberedsubsubsec Miscellaneous @code{@bs{}paper} variables
@table @code
block.
@menu
-* The \layout block::
+* The layout block::
* Setting the staff size::
@end menu
-@node The \layout block
-@subsection The @code{\layout} block
+@node The layout block
+@subsection The @code{@bs{}layout} block
@funindex \layout
@item
@code{line-width}, @code{ragged-right} and @code{ragged-last}
-(see @ref{\paper variables for widths and margins})
+(see @ref{paper variables for widths and margins,,@code{@bs{}paper} variables for widths and margins})
@item
@code{indent} and @code{short-indent}
-(see @ref{\paper variables for shifts and indents})
+(see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents})
@item
@code{system-count}
-(see @ref{\paper variables for line breaking})
+(see @ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking})
@end itemize
@seealso
Notation Reference:
-@ref{\paper variables for line breaking}.
+@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
Snippets:
@rlsr{Spacing}.
@code{ragged-bottom} and @code{ragged-last-bottom}. If set to
@code{#t} the systems on all pages or just the last page
respectively will not be justified vertically. See
-@ref{Fixed vertical spacing \paper variables}.
+@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}.
Page breaks are computed by the @code{page-breaking} function. LilyPond
provides three algorithms for computing page breaks,
@seealso
Notation Reference:
-@ref{\paper variables for page breaking}.
+@ref{paper variables for page breaking,,@code{@bs{}paper} variables for page breaking}.
Snippets:
@rlsr{Spacing}.
@seealso
Notation Reference:
-@ref{\paper variables for line breaking}.
+@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
Snippets:
@rlsr{Spacing}.
individual systems. The vertical spacing between separate
systems, scores, markups, and margins is controlled by
@code{\paper} variables, which are discussed in
-@ref{Flexible vertical spacing \paper variables}.
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables}.
@menu
* Within-system spacing properties::
@item @code{ChordNames} @tab baseline
@item @code{NoteNames} @tab baseline
@item @code{Lyrics} @tab baseline
-@item @code{Dynamics} @tab vertical center
+@item @code{Dynamics} @tab mid-height of @q{m}
@item @code{FiguredBass} @tab highest point
@item @code{FretBoards} @tab top line
@end multitable
\new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
>>
-%% The reference point for Dynamics is its vertical center
+%% The reference point for Dynamics is the midline of 'm' in the font
<<
\new RhythmicStaff {
- \set RhythmicStaff.instrumentName = #"vertical center "
+ \set RhythmicStaff.instrumentName = #"mid-height "
\labelContext "Dynamics" s1*3
}
\new Dynamics { s1\mp s\fp }
Each of the vertical spacing grob properties (except
@code{staff-affinity}) uses the same alist structure as the
@code{\paper} spacing variables discussed in
-@ref{Flexible vertical spacing \paper variables}. Specific methods
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables}.
+Specific methods
for modifying alists are discussed in @ref{Modifying alists}.
Grob properties should be adjusted with an @code{\override} inside
a @code{\score} or @code{\layout} block, and not inside a
@seealso
Notation Reference:
-@ref{Flexible vertical spacing \paper variables},
+@ref{Flexible vertical spacing paper variables,,Flexible vertical spacing @code{@bs{}paper} variables},
@ref{Modifying alists}.
Installed Files:
@lilypond[quote,ragged-right,relative=2,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
-\new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c] c32[ c] }
+\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c] }
@end lilypond
@seealso
However, if the instrument names are longer, the instrument names in a
staff group may not be centered unless the @code{indent} and
@code{short-indent} settings are increased. For details about these
-settings, see @ref{\paper variables for shifts and indents}.
+settings, see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.
@lilypond[verbatim,quote,ragged-right]
\relative c'' {
@seealso
Notation Reference:
-@ref{\paper variables for shifts and indents},
+@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents},
@ref{Modifying context plug-ins}.
Snippets:
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.19"
+@c \version "2.17.28"
@node Vocal music
@section Vocal music
<<
\new Voice = melody \relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
@lilypond[verbatim,ragged-right,quote]
<<
\new Voice = melody \relative c' {
- \grace { c16[( d e f] }
+ \grace { c16( d e f }
g1) f
}
\new Lyrics \with { includeGraceNotes = ##t }
lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
texidoc = "
-Accordion discant-specific symbols are added using @code{\\markup}. The
-placement of the symbols can be tweaked by changing the
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}. It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
@code{\\translate-scaled} arguments. @code{\\translate-scaled} is
used here rather than @code{\\translate} in order to let the
positioning of the symbol parts adapt to changes of @code{font-size}.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "breaks, contexts-and-engravers, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contexts-and-engravers, really-simple, staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "chords, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.16.0
\version "2.16.0"
\header {
lsrtags = "scheme-language"
texidoc = "
-You can add various stuff to notes using @code{make-music}. In this
-example, an extra fingering is attached to a note.
-
-
-In general, first do a @code{display} of the music you want to create,
-then write a function that will structure the music for you.
-
-
+You can add additional elements to notes using @code{map-some-music}. In this
+example, an extra script is attached to a note.
+In general, first do a @code{\\displayMusic} of the music you want to
+create, then write a function that will work on the appropriate parts
+of the music for you.
"
doctitle = "Adding extra fingering with scheme"
} % begin verbatim
-#(define (make-text-script x)
- (make-music 'TextScriptEvent
- 'direction DOWN
- 'text (make-simple-markup x)))
-
-#(define (add-text-script m x)
- (if (equal? (ly:music-property m 'name) 'EventChord)
- (set! (ly:music-property m 'elements)
- (cons (make-text-script x)
- (ly:music-property m 'elements)))
- (let ((es (ly:music-property m 'elements))
- (e (ly:music-property m 'element)))
- (map (lambda (y) (add-text-script y x)) es)
- (if (ly:music? e)
- (add-text-script e x))))
- m)
-
addScript =
-#(define-music-function (parser location script music )
- ( string? ly:music? )
- (add-text-script music script))
+#(define-music-function (parser location script music)
+ (ly:event? ly:music?)
+ (map-some-music
+ (lambda (mus)
+ (define (append-script-at! prop)
+ (set! (ly:music-property mus prop)
+ (append (ly:music-property mus prop)
+ (list (ly:music-deep-copy script))))
+ mus)
+ (case (ly:music-property mus 'name)
+ ((EventChord)
+ (append-script-at! 'elements))
+ ((NoteEvent)
+ (append-script-at! 'articulations))
+ (else #f)))
+ music))
\score {
{
- \addScript "6" { c'4-3 }
+ \addScript _6 { c'4-3 <c' e' g'> }
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, symbols-and-glyphs, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "correction-wanted, spacing, text, vocal-music, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "paper-and-layout, text, titles"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-simple, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, real-music, really-cool, template"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "world-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "automatic-notation, connecting-notes, rhythms"
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.6"
+
+\header {
+ lsrtags = "contexts-and-engravers, pitches"
+
+ texidoc = "
+LilyPond can alter the stem direction of the middle note on a staff so
+that it follows the melody, by adding the @code{Melody_engraver} to the
+Voice context and overriding the @code{neutral-direction} of Stem.
+
+"
+ doctitle = "Automatically changing the stem direction of the middle note based on the melody"
+} % begin verbatim
+
+\relative c'' {
+ \time 3/4
+ \autoBeamOff
+ a8 b g f b g |
+ c b d c b c
+}
+
+\layout {
+ \context {
+ \Voice
+ \consists "Melody_engraver"
+ \override Stem.neutral-direction = #'()
+ }
+}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "chords, editorial-annotations, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
texidoc = "
In order to make parts of a crescendo hairpin invisible, the following
method is used: A white rectangle is drawn on top of the respective
-part of the crescendo hairpin, making it invisible. The rectangle is
-defined as postscript code within a text markup.
-
-To fine-tune the position and size of the markup, the number preceding
-@code{setgray} in the postscript definition can be set to a value less
-than one, making it grey. The two numbers before @code{scale} in the
-postscript code are responsible for the width and height of the
-rectangle, the two numbers before @code{translate} change the x- and
-y-origin of the rectangle.
+part of the crescendo hairpin, making it invisible.
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
Make sure to put the hairpin in a lower layer than the text markup to
draw the rectangle over the hairpin.
<<
{
\dynamicUp
- \override DynamicLineSpanner.staff-padding = #4
r2 r16 c'8.\pp r4
}
\\
\override DynamicLineSpanner.layer = #0
des,2\mf\< ~
\override TextScript.layer = #2
- des16_\markup {
- \postscript #"
- 1.9 -8 translate
- 5 4 scale
- 1 setgray
- 0 0 moveto
- 0 1 lineto
- 1 1 lineto
- 1 0 lineto
- 0 0 lineto
- fill"
- }
+ \once\override TextScript.staff-padding = #6
+ \once\override TextScript.vertical-skylines = #'()
+ des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+ \with-color #white
+ \filled-box #'(2 . 7) #'(0 . 2) #0
r8. des4 ~ des16->\sff
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, really-cool, scheme-language, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-simple, simultaneous-notes, specific-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.16.0"
\header {
lsrtags = "contexts-and-engravers, midi, real-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "really-simple, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, pitches, really-cool"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, syntax-and-expressions, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, expressive-marks, specific-notation"
adding-a-figured-bass-above-or-below-the-notes.ly
adding-an-extra-staff-at-a-line-break.ly
adding-an-extra-staff.ly
+automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
centered-measure-numbers.ly
centering-markup-on-note-heads-automatically.ly
changing-midi-output-to-one-channel-per-voice.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "chords, keyboards, tweaks-and-overrides, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, specific-notation, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.15"
\header {
lsrtags = "contexts-and-engravers"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "chords, simultaneous-notes, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "headword"
-% DO NOT EDIT this file manually; it is automatically
-% generated from Documentation/snippets/new
-% Make any changes in Documentation/snippets/new/
-% and then run scripts/auxiliar/makelsr.py
-%
-% This file is in the public domain.
-%% Note: this file works from version 2.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.29"
\header {
lsrtags = "contexts-and-engravers, specific-notation"
%}
\consists "Text_engraver"
\consists "Dynamic_engraver"
+ \consists "Dynamic_align_engraver"
\consists "Fingering_engraver"
\consists "Script_column_engraver"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "repeats, rhythms"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
\header {
lsrtags = "headword"
\key g \major
\time 6/8
\partial 2
- \once \override TextScript.staff-padding = #2
+ \once \override TextScript.padding = #2
d'8 \staccato
^ \markup { \column {
RONDO
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "symbols-and-glyphs, winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, specific-notation, stylesheet, version-specific"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "pitches, really-cool, scheme-language"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "automatic-notation, really-cool, scheme-language"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "keyboards, real-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "connecting-notes, contemporary-notation, expressive-marks, fretted-strings, keyboards, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "really-simple, text, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "connecting-notes, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.16.0"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, repeats, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, contexts-and-engravers, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "really-simple, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
texidoc = "
-Accordion discant-specific symbols are added using @code{\\markup}. The
-placement of the symbols can be tweaked by changing the
+This snippet has been obsoleted by predefined markup commands, see
+@ruser{Accordion Registers}. It's still useful as a simple
+demonstration of how to combine symbols: the placement of the symbols
+added with @code{\\markup} can be tweaked by changing the
@code{\\translate-scaled} arguments. @code{\\translate-scaled} is
used here rather than @code{\\translate} in order to let the
positioning of the symbol parts adapt to changes of @code{font-size}.
--- /dev/null
+\version "2.16.0"
+
+\header {
+ lsrtags = "scheme-language"
+
+ texidoc = "
+You can add additional elements to notes using @code{map-some-music}. In this
+example, an extra script is attached to a note.
+
+In general, first do a @code{\\displayMusic} of the music you want to
+create, then write a function that will work on the appropriate parts
+of the music for you.
+"
+ doctitle = "Adding extra fingering with scheme"
+}
+
+addScript =
+#(define-music-function (parser location script music)
+ (ly:event? ly:music?)
+ (map-some-music
+ (lambda (mus)
+ (define (append-script-at! prop)
+ (set! (ly:music-property mus prop)
+ (append (ly:music-property mus prop)
+ (list (ly:music-deep-copy script))))
+ mus)
+ (case (ly:music-property mus 'name)
+ ((EventChord)
+ (append-script-at! 'elements))
+ ((NoteEvent)
+ (append-script-at! 'articulations))
+ (else #f)))
+ music))
+
+\score {
+ {
+ \addScript _6 { c'4-3 <c' e' g'> }
+ }
+}
--- /dev/null
+\version "2.17.27"
+
+\header {
+ lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
+
+ texidoc = "
+In order to make parts of a crescendo hairpin invisible, the following
+method is used: A white rectangle is drawn on top of the respective
+part of the crescendo hairpin, making it invisible.
+
+The markup command @code{with-dimensions} tells LilyPond to consider only
+the bottom edge of the rectangle when spacing it against the hairpin.
+The property @code{staff-padding} prevents the rectangle from fitting
+between the hairpin and staff.
+
+Make sure to put the hairpin in a lower layer than the text markup to
+draw the rectangle over the hairpin.
+
+"
+ doctitle = "Broken Crescendo Hairpin"
+}
+
+\relative c' {
+ <<
+ {
+ \dynamicUp
+ r2 r16 c'8.\pp r4
+ }
+ \\
+ {
+ \override DynamicLineSpanner.layer = #0
+ des,2\mf\< ~
+ \override TextScript.layer = #2
+ \once\override TextScript.staff-padding = #6
+ \once\override TextScript.vertical-skylines = #'()
+ des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
+ \with-color #white
+ \filled-box #'(2 . 7) #'(0 . 2) #0
+ r8. des4 ~ des16->\sff
+ }
+ >>
+}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "contexts-and-engravers, specific-notation"
-
- texidoc = "
-The notation problem, creating a certain symbol, is handled by plugins.
- Each plugin is called an Engraver. In this example, engravers are
-switched on one by one, in the following order:
-
-- note heads,
-
-
-- staff symbol,
-
-
-- clef,
-
-
-- stem,
-
-
-- beams, slurs, accents,
-
-
-- accidentals, bar lines, time signature and key signature.
-
-
-
-Engravers are grouped. For example, note heads, slurs, beams etc. form
-a @code{Voice} context. Engravers for key signature, accidentals, bar
-line, etc. form a @code{Staff} context.
-
-"
- doctitle = "Engravers one-by-one"
-}
-
-%% sample music
-topVoice = \relative c' {
- \key d \major
- es8([ g] a[ fis])
- b4
- b16[-. b-. b-. cis-.]
- d4->
-}
-
-botVoice = \relative c' {
- \key d \major
- c8[( f] b[ a)]
- es4
- es16[-. es-. es-. fis-.]
- b4->
-}
-
-hoom = \relative c {
- \key d \major
- \clef bass
- g8-. r
- r4
- fis8-.
- r8
- r4
- b'4->
-}
-
-pah = \relative c' {
- r8 b-.
- r4
- r8 g8-.
- r16 g-. r8
- \clef treble
- fis'4->
-}
-
-%
-% setup for Request->Element conversion. Guru-only
-%
-
-MyStaff = \context {
- \type "Engraver_group"
- \name Staff
-
- \description "Handles clefs, bar lines, keys, accidentals. It can contain
-@code{Voice} contexts."
-
- \consists "Output_property_engraver"
-
- \consists "Font_size_engraver"
-
- \consists "Volta_engraver"
- \consists "Separating_line_group_engraver"
- \consists "Dot_column_engraver"
-
- \consists "Ottava_spanner_engraver"
- \consists "Rest_collision_engraver"
- \consists "Piano_pedal_engraver"
- \consists "Piano_pedal_align_engraver"
- \consists "Instrument_name_engraver"
- \consists "Grob_pq_engraver"
- \consists "Forbid_line_break_engraver"
- \consists "Axis_group_engraver"
-
- \consists "Pitch_squash_engraver"
-
- localKeySignature = #'()
-
- % explicitly set instrumentName, so we don't get
- % weird effects when doing instrument names for
- % piano staves
-
- instrumentName = #'()
- shortInstrumentName = #'()
-
- \accepts "Voice"
- \defaultchild "Voice"
-}
-
-
-MyVoice = \context {
- \type "Engraver_group"
- \name Voice
-
- \description "
- Corresponds to a voice on a staff. This context handles the
- conversion of dynamic signs, stems, beams, super- and subscripts,
- slurs, ties, and rests.
-
- You have to instantiate this explicitly if you want to have
- multiple voices on the same staff."
-
- localKeySignature = #'()
- \consists "Font_size_engraver"
-
- % must come before all
- \consists "Output_property_engraver"
- \consists "Arpeggio_engraver"
- \consists "Multi_measure_rest_engraver"
- \consists "Text_spanner_engraver"
- \consists "Grob_pq_engraver"
- \consists "Note_head_line_engraver"
- \consists "Glissando_engraver"
- \consists "Ligature_bracket_engraver"
- \consists "Breathing_sign_engraver"
- % \consists "Rest_engraver"
- \consists "Grace_beam_engraver"
- \consists "New_fingering_engraver"
- \consists "Chord_tremolo_engraver"
- \consists "Percent_repeat_engraver"
- \consists "Slash_repeat_engraver"
-
- %{
- Must come before text_engraver, but after note_column engraver.
- %}
- \consists "Text_engraver"
- \consists "Dynamic_engraver"
- \consists "Fingering_engraver"
-
- \consists "Script_column_engraver"
- \consists "Rhythmic_column_engraver"
- \consists "Cluster_spanner_engraver"
- \consists "Tie_engraver"
- \consists "Tie_engraver"
- \consists "Tuplet_engraver"
- \consists "Note_heads_engraver"
- \consists "Rest_engraver"
-}
-
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-
-MyStaff = \context {
- \MyStaff
- \consists "Staff_symbol_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Clef_engraver"
- \remove "Pitch_squash_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice = \context {
- \MyVoice
- \consists "Stem_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice = \context {
- \MyVoice
- \consists "Beam_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyVoice = \context {
- \MyVoice
- \consists "Phrasing_slur_engraver"
- \consists "Slur_engraver"
- \consists "Script_engraver"
-}
-
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Bar_engraver"
- \consists "Time_signature_engraver"
-}
-
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
-
-MyStaff = \context {
- \MyStaff
- \consists "Accidental_engraver"
- \consists "Key_engraver"
-}
-\score {
- \topVoice
- \layout {
- \context { \MyStaff }
- \context { \MyVoice }
- }
-}
--- /dev/null
+\version "2.17.27"
+
+\header {
+ lsrtags = "headword"
+
+ texidoc = "
+Expressive headword
+
+"
+ doctitle = "Expressive headword"
+}
+\include "english.ly"
+
+% NR 1.3 Expressive marks
+
+% L. v. Beethoven, Op. 49 no. 1
+% Piano sonata 19 - "Leichte Sonate"
+% measures 1 - 12
+
+%\layout {
+% \context {
+% \Score
+% \override SpacingSpanner.base-shortest-duration =
+% #(ly:make-moment 1/20)
+% }
+%}
+
+\new PianoStaff <<
+
+ % RH Staff
+ \new Staff {
+ \clef treble
+ \key g \major
+ \time 6/8
+ \partial 2
+ \once \override TextScript.padding = #2
+ d'8 \staccato
+ ^ \markup { \column {
+ RONDO
+ \italic Allegro } }
+ d'8 \staccato
+ g'8 \staccato
+ a'8 \staccato
+
+ |
+
+ b'8 [ (
+ g'8 ] )
+ e'8 \staccato
+ e' \staccato
+ a'8 \staccato
+ b'8 \staccato
+
+ |
+
+ c''8 [ (
+ a'8 ] )
+ e''8 \staccato
+ d''8 \staccato
+ c''8 \staccato
+ b'8 \staccato
+
+ |
+
+ a'8 \staccato
+ g'8 \staccato
+ a'8 \staccato
+ \acciaccatura { g'16 [ a'16 ] }
+ bf'8
+ a'8 \staccato
+ g'8 \staccato
+
+ |
+
+ fs'8 [ (
+ d'8 ] )
+ d'8 \staccato
+ d'8 \staccato
+ g'8 \staccato
+ a'8 \staccato
+
+ |
+
+ b'8 [ (
+ g'8 ] )
+ e'8 \staccato
+ e'8 \staccato
+ a'8 \staccato
+ b'8 \staccato
+
+ |
+
+ c''8 [ (
+ a'8 ] )
+ e''8 \staccato
+ d''8 \staccato
+ c''8 \staccato
+ b'8 \staccato
+
+ |
+
+ a'8 \staccato
+ g'8 \staccato
+ a'8 \staccato
+ <<
+ {
+ \voiceOne
+ d'8
+ g'8
+ fs'8
+ \oneVoice
+ }
+ \new Voice {
+ \voiceTwo
+ d'4
+ c'8
+ \oneVoice
+ }
+ >>
+
+ |
+
+ <b g'>4 \tenuto
+ d'8 \staccato
+ g'8 \staccato
+ b'8 \staccato
+ d''8 \staccato
+
+ |
+
+ d''8 (
+ <c'' a'>8 \staccato )
+ <c'' a'>8 \staccato
+ d''8 (
+ <b' g'>8 \staccato )
+ <b' g'>8 \staccato
+
+ |
+
+ d''8 (
+ <c'' a'>8 \staccato )
+ <c'' a'>8 \staccato
+ d''8 (
+ <b' g'>8 \staccato )
+ <b' g'>8 \staccato
+
+ |
+
+ d''8 \staccato
+ <c'' a'>8 \staccato
+ <b' g'>8 \staccato
+ d'' \staccato
+ <c'' a'>8 \staccato
+ <b' g'>8 \staccato
+
+ |
+
+ <d'' c'' a'>4 \fermata
+ r8 r4 r8
+ }
+
+ % LH Staff
+ \new Staff {
+ \clef bass
+ \key g \major
+ \time 6/8
+ \partial 2
+ r8
+ r8
+ <d' b>8 \staccato
+ <c' a>8 \staccato
+
+ |
+
+ <b g>4
+ r8
+ r8
+ <e' c'>8 \staccato
+ <d' b>8 \staccato
+
+ |
+
+ <c' a>4
+ r8
+ r8
+ <a fs>8 \staccato
+ <b g>8 \staccato
+
+ |
+
+ <c' a>8 \staccato
+ <b d'>8 \staccato
+ <e' c'>8 \staccato
+ <e' cs'>4. (
+
+ |
+
+ d'4 )
+ r8
+ r8
+ <d' b!>8 \staccato
+ <c'! a>8 \staccato
+
+ |
+
+ <b g>4
+ r8
+ r8
+ <e' c'>8 \staccato
+ <d' b>8 \staccato
+
+ |
+
+ <c' a>4
+ r8
+ r8
+ <a fs>8 \staccato
+ <b g>8 \staccato
+
+ |
+
+ <c' a>8 \staccato
+ <d' b>8 \staccato
+ <e' c'>8 \staccato
+ <b d>4
+ <a d>8 \staccato
+
+ |
+
+ <g g,>4 \tenuto
+ r8
+ r4
+ r8
+
+ |
+
+ r8
+ <d' fs>8 \staccato
+ <d' fs>8 \staccato
+ r8
+ <d' g>8 \staccato
+ <d' g>8 \staccato
+
+ |
+
+ r8
+ <d' fs>8 \staccato
+ <d' fs>8 \staccato
+ r8
+ <d' g>8 \staccato
+ <d' g>8 \staccato
+
+ |
+
+ r8
+ <d' fs>8 \staccato
+ <d' g>8 \staccato
+ r8
+ <d' fs>8 \staccato
+ <d' g>8 \staccato
+
+ |
+
+ <d' fs>4 \fermata
+ r8 r4 r8
+ }
+
+>>
--- /dev/null
+\version "2.17.27"
+
+\header {
+ lsrtags = "headword"
+
+ texidoc = "
+Piches headword
+
+"
+ doctitle = "Pitches headword"
+}
+% L. v. Beethoven
+% Piano sonata 21 - Dem Grafen von Waldstein Gewidmet
+% chorale at measures 34 - 40+
+
+\include "english.ly"
+
+\new PianoStaff <<
+
+ % RH Staff
+ \new Staff <<
+
+ % RH Voice 1
+ \new Voice {
+ \set Score.currentBarNumber = #34
+ \voiceOne
+ gs''2 ( ^ \markup \italic { dolce e molto ligato }
+ fs''4
+ e''4
+ |
+ ds''2
+ cs''2 )
+ |
+ ds''2 (
+ e''4
+ fs''4
+ |
+ <gs'' e''>2
+ <fs'' ds''>2 )
+ |
+ \oneVoice
+ \clef bass
+ <gs' e' b>2 (
+ <fs' ds' a>4
+ <e' cs' gs>4
+ |
+ <ds' bs fs>2
+ <cs' a e>2 )
+ |
+ \voiceOne
+ b2 %(
+ cs'4
+ ds'4
+ |
+ \clef treble
+ <e' gs>4 %)
+ r4 r2
+ }
+
+ % RH Voice 2
+ \new Voice {
+ \voiceTwo
+ \override Staff.DynamicLineSpanner.staff-padding = #3
+ <e'' b'>2 \p
+ <ds'' a'>4
+ <cs'' gs'>4
+ |
+ <bs' fs'>2
+ e'2
+ |
+ <b'! a'>2 -\tweak #'style #'none \cresc
+ b'4
+ <e'' cs''>4
+ |
+ b'2. ( \sf \>
+ a'4 )
+ \clef bass
+ | \break
+ s1 \p
+ |
+ s1
+ |
+ <gs e>4 (
+ <a fs>2. )
+ |
+ s4
+ r4 r2
+ }
+
+ >>
+
+ % LH Staff
+ \new Staff {
+ \override Staff.SustainPedalLineSpanner.staff-padding = #6
+ <gs' e'>2 ( \sustainOn
+ <fs' ds' b>4 \sustainOff
+ <e' cs'>4
+ |
+ <ds' bs gs>2
+ <cs' a>2 ) \sustainOn
+ |
+ \clef bass
+ \slurDown
+ <ds' b! a fs>2 ( \sustainOff
+ <e' b gs>4
+ <fs' cs' a>4 \sustainOn
+ |
+ \clef treble
+ \voiceOne
+ <<
+ {
+ <gs' e'>2
+ <fs' ds'>2 )
+ }
+ \new Voice {
+ \voiceTwo
+ b1 \sustainOff
+ }
+ >>
+ \oneVoice
+ |
+ %\break
+ \clef bass
+ <gs e>2 (
+ <fs ds b,>4
+ <e cs>4
+ |
+ <ds bs, gs,>2
+ <cs a,>2 ) \sustainOn
+ |
+ <b,! b,,!>1 ( \sustainOff
+ |
+ <e e,>4 )
+ r4 r2
+ }
+
+>>
-\version "2.17.6"
+\version "2.17.18"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% in all voices to avoid multiple instances being printed
\compressFullBarRests
<<
- \revert MultiMeasureRest.staff-position
+ \revert MultiMeasureRest.direction
{ R1*3 }
\\
- \revert MultiMeasureRest.staff-position
+ \revert MultiMeasureRest.direction
{ R1*3 }
>>
}
--- /dev/null
+\version "2.17.27"
+
+\header {
+ lsrtags = "spacing, tweaks-and-overrides, workaround"
+
+ texidoc = "
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
+
+The same idea, together with @code{\\textLengthOn}, is used to align
+the text scripts along their baseline.
+
+"
+ doctitle = "Vertically aligned dynamics and textscripts"
+}
+\markup \vspace #1 %avoid LSR-bug
+
+music = \relative c' {
+ a'2\p b\f
+ e4\p f\f\> g, b\p
+ c2^\markup { \huge gorgeous } c^\markup { \huge fantastic }
+}
+
+{
+ \music
+ \break
+ \override DynamicLineSpanner.staff-padding = #3
+ \textLengthOn
+ \override TextScript.staff-padding = #1
+ \music
+}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "really-simple, scheme-language, text, titles"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "spacing"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms, version-specific"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
\header {
lsrtags = "headword"
% RH Voice 2
\new Voice {
\voiceTwo
- \override Staff.DynamicLineSpanner.staff-padding = #2.5
+ \override Staff.DynamicLineSpanner.staff-padding = #3
<e'' b'>2 \p
<ds'' a'>4
<cs'' gs'>4
<bs' fs'>2
e'2
|
- \once \override TextScript.staff-padding = #2.5
- <b'! a'>2 _ \markup \italic { cresc. }
+ <b'! a'>2 -\tweak #'style #'none \cresc
b'4
<e'' cs''>4
|
% LH Staff
\new Staff {
- \override Staff.SustainPedalLineSpanner.staff-padding = #5
+ \override Staff.SustainPedalLineSpanner.staff-padding = #6
<gs' e'>2 ( \sustainOn
<fs' ds' b>4 \sustainOff
<e' cs'>4
ambitus-with-multiple-voices.ly
ambitus.ly
applying-note-head-styles-depending-on-the-step-of-the-scale.ly
+automatically-changing-the-stem-direction-of-the-middle-note-based-on-the-melody.ly
changing-the-ambitus-gap.ly
changing-the-interval-of-lines-on-the-stave.ly
clefs-can-be-transposed-by-arbitrary-amounts.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.28"
\header {
lsrtags = "rhythms"
\override Score.SpacingSpanner.strict-grace-spacing = ##t
\new Staff \new Voice {
\afterGrace c4 { c16[ c8 c16] }
- c8[ \grace { b16[ d] } c8]
+ c8[ \grace { b16 d } c8]
c4 r
}
\new Staff {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.6
-\version "2.17.6"
+%% Note: this file works from version 2.17.18
+\version "2.17.18"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% in all voices to avoid multiple instances being printed
\compressFullBarRests
<<
- \revert MultiMeasureRest.staff-position
+ \revert MultiMeasureRest.direction
{ R1*3 }
\\
- \revert MultiMeasureRest.staff-position
+ \revert MultiMeasureRest.direction
{ R1*3 }
>>
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "breaks, repeats, symbols-and-glyphs, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, percussion, real-music, really-cool, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.28"
\header {
lsrtags = "spacing, tweaks-and-overrides"
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4
- c2 \grace { c16[ c16] } c2
+ c2 \grace { c16 c16 } c2
}
\new Staff {
c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "staff-notation, text, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "breaks, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.5"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, rhythms, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.5"
\header {
lsrtags = "repeats"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "repeats"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contemporary-notation, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.16.0"
\header {
lsrtags = "paper-and-layout"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.28"
\header {
lsrtags = "headword"
c''32
df''32
ef''32
- \acciaccatura { df''[ ef'' ] }
+ \acciaccatura { df'' ef'' }
f''8
ef''16
df''16
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "ancient-notation, specific-notation, tweaks-and-overrides, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.18"
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.28"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
$(add-grace-property 'Voice 'NoteHead 'style 'cross)
\new Voice {
\acciaccatura { f16 } g4
- \grace { d16[ e] } f4
- \appoggiatura { f,32[ g a] } e2
+ \grace { d16 e } f4
+ \appoggiatura { f,32 g a } e2
}
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, really-cool, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "really-simple, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "editorial-annotations, expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.19"
\header {
lsrtags = "paper-and-layout, staff-notation, syntax-and-expressions"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.25"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.27
+\version "2.17.27"
\header {
lsrtags = "spacing, tweaks-and-overrides, workaround"
texidoc = "
-By setting the @code{'Y-extent} property to a suitable value, all
-@code{DynamicLineSpanner} objects (hairpins and dynamic texts) can be
-aligned to a common reference point, regardless of their actual extent.
-This way, every element will be vertically aligned, thus producing a
-more pleasing output.
+All @code{DynamicLineSpanner} objects (hairpins and dynamic texts) are
+placed with their reference line at least @code{'staff-padding} from
+the staff, unless other notation forces them to be farther.
+Setting @code{'staff-padding} to a sufficiently large value aligns the
+dynamics.
The same idea, together with @code{\\textLengthOn}, is used to align
the text scripts along their baseline.
{
\music
\break
- \override DynamicLineSpanner.staff-padding = #2.0
- \override DynamicLineSpanner.Y-extent = #'(-1.5 . 1.5)
+ \override DynamicLineSpanner.staff-padding = #3
\textLengthOn
- \override TextScript.Y-extent = #'(-1.5 . 1.5)
+ \override TextScript.staff-padding = #1
\music
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.11"
\header {
lsrtags = "spacing, tweaks-and-overrides, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "automatic-notation, keyboards, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "contexts-and-engravers, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "really-simple, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.25"
+\version "2.17.6"
\header {
lsrtags = "headword"
STEPMAKE_TEMPLATES=documentation tex texinfo topdocs
LOCALSTEPMAKE_TEMPLATES=lilypond ly
-OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)
+OUT_TEXI_FILES = $(TEXI_FILES:%.texi=$(outdir)/%.texi) $(TELY_FILES:%.tely=$(outdir)/%.texi)
HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html)
README_TOP_FILES=NEWS AUTHORS INSTALL README
OUTTXT_FILES= $(outdir)/NEWS.txt
include $(depth)/make/stepmake.make
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+ -I $(top-src-dir)/Documentation
+
# FIXME ad-hoc file copy?
$(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely
cp -f $< $@
@item -e, --explicit-durations
Print explicit durations.
-@item -h,--help
+@item -h, --help
Show summary of usage.
@item -k, --key=@var{acc}[:@var{minor}]
@item -a, --absolute
convert pitches in absolute mode.
-@item -h,--help
+@item -h, --help
print usage and option summary.
@item -l, --language=LANG
do not convert beaming information, use LilyPond's automatic
beaming instead.
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
set output filename to @var{file}. If @var{file} is @file{-}, the output
will be printed on stdout. If not given, @var{xml-file}@file{.ly} will
be used.
-@item -r,--relative
+@item -r, --relative
convert pitches in relative mode (default).
-@item -v,--verbose
+@item -v, --verbose
be verbose.
@item --version
print version information.
-@item -z,--compressed
+@item -z, --compressed
input file is a zip-compressed MusicXML file.
@end table
The following options are supported by @command{abc2ly}:
@table @code
-@item -b,--beams=None
+@item -b, --beams=None
preserve ABC's notion of beams
-@item -h,--help
+@item -h, --help
this help
-@item -o,--output=@var{file}
+@item -o, --output=@var{file}
set output filename to @var{file}.
-@item -s,--strict
+@item -s, --strict
be strict about success
@item --version
print version information.
The following options are supported by @command{etf2ly}:
@table @code
-@item -h,--help
+@item -h, --help
this help
-@item -o,--output=@var{FILE}
+@item -o, --output=@var{FILE}
set output filename to @var{FILE}
@item --version
version information
@table @code
-@item -d,--define-default=@var{var}=@var{val}
+@item -d, --define-default=@var{var}=@var{val}
See @ref{Advanced command line options for LilyPond}.
@cindex Scheme, expression evaluation
@cindex expression evaluation, Scheme
-@item -e,--evaluate=@var{expr}
+@item -e, --evaluate=@var{expr}
Evaluate the Scheme @var{expr} before parsing any @file{.ly} files.
Multiple @option{-e} options may be given, they will be evaluated
sequentially.
@cindex output, format
@cindex format, output
-@item -f,--format=@var{format}
+@item -f, --format=@var{format}
which formats should be written. Choices for @code{format} are
@code{ps}, @code{pdf}, and @code{png}.
Example: @code{lilypond -fpng @var{filename}.ly}
-@item -h,--help
+@item -h, --help
Show a summary of usage.
-@item -H,--header=@var{FIELD}
+@item -H, --header=@var{FIELD}
Dump a header field to file @file{BASENAME.@var{FIELD}}.
-@item -i,--init=@var{file}
+@item -i, --init=@var{file}
Set init file to @var{file} (default: @file{init.ly}).
@cindex file searching
@cindex chroot jail, running inside
-@item -j,--jail=@var{user},@var{group},@var{jail},@var{dir}
+@item -j, --jail=@var{user},@var{group},@var{jail},@var{dir}
Run @command{lilypond} in a chroot jail.
The @option{--jail} option provides a more flexible alternative to
@cindex loglevel
@cindex output, verbosity
-@item -l,--loglevel=@var{LEVEL}
+@item -l, --loglevel=@var{LEVEL}
Set the verbosity of the console output to @var{LEVEL}. Possible values
are:
@cindex output, setting filename
@cindex output, directory
-@item -o,--output=@var{FILE} or @var{FOLDER}
+@item -o, --output=@var{FILE} or @var{FOLDER}
Set the default output file to @var{FILE} or, if a folder with that name
exists, direct the output to @var{FOLDER}, taking the file name from the
input file. The appropriate suffix will be added (e.g. @code{.pdf} for
@item --pdf
Generate PDF. This implies @option{--ps}.
-@item -v,--version
+@item -v, --version
Show version information.
-@item -V,--verbose
+@item -V, --verbose
Be verbose: show full paths of all files read, and give timing
information.
-@item -w,--warranty
+@item -w, --warranty
Show the warranty with which GNU LilyPond comes. (It comes with
@strong{NO WARRANTY}!)
* Error message Unbound variable %::
* Error message FT_Get_Glyph_Name::
* Warning staff affinities should only decrease::
-* Error message unexpected \new::
+* Error message unexpected new::
@end menu
@node Music runs off the page
@ruser{Flexible vertical spacing within systems}.
-@node Error message unexpected \new
-@unnumberedsubsec Error message unexpected @code{\new}
+@node Error message unexpected new
+@unnumberedsubsec Error message unexpected @code{@bs{}new}
A @code{\score} block must contain a @emph{single} music expression.
If instead it contains several @code{\new Staff},
The following options can be given:
@table @code
-@item -d,--diff-version-update
+@item -d, --diff-version-update
increase the @code{\version} string only if the file has actually
-been changed. Without this option (or when any conversion has
-changed the file), the version header reflects the last considered
-conversion rule.
+been changed. In that case, the version header will correspond to
+the version after the last actual change. Without that option,
+the version will reflect the last @emph{attempted} conversion.
-@item -e,--edit
+@item -e, --edit
Apply the conversions direct to the input file, modifying it
-in-place.
+in-place. The original file is renamed as @file{myfile.ly~}. This
+backup file may be a hidden file on some operating systems.
-@item -f,--from=@var{from-patchlevel}
+@item -b, --backup-numbered
+When used with the @samp{-e} option, number the backup files so that
+no previous version is overwritten. The backup files may be hidden
+on some operating systems.
+
+@item -f, --from=@var{from-patchlevel}
Set the version to convert from. If this is not set, @command{convert-ly}
will guess this, on the basis of @code{\version} strings in the file.
E.g. @option{--from=2.10.25}
case, are @code{PROGRESS} (the default), @code{NONE}, @code{WARNING},
@code{ERROR} and @code{DEBUG}.
-@item -n,--no-version
+@item -n, --no-version
Normally, @command{convert-ly} adds a @code{\version} indicator
to the output. Specifying this option suppresses this.
@divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadCommandLine
-
-@divEnd
-
-
-@divClass{column-left-top}
@subheading Distribution-specific Packages
Please use your distribution's package manager to install or
@divEnd
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadCommandLine
+
+@divEnd
+
+
@divClass{column-center-bottom}
@subheading Legalese
@divEnd
-@divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadOSX
-
-@divEnd
-
-@divClass{column-left-top}
+@divClass{column-right-top}
@subheading Running on the command-line
-@warning{If you are happy with the GUI, then please ignore these
-instructions.}
+@warning{If you are happy with the GUI instructions below, then
+please ignore these instructions.}
@subsubheading MacOS X on the command line
@divEnd
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadOSX
+
+@divEnd
+
+
@divClass{column-center-bottom}
@subheading Legalese
@divClass{column-right-top}
-@subheading Compiling a file
-
-@lilypadWindows
-
-@divEnd
-
-
-@divClass{column-left-top}
@subheading Running on the command-line
-@warning{If you are happy with the GUI, then please ignore these
-instructions.}
+@warning{If you are happy with the GUI instructions below, then
+please ignore these instructions.}
@subsubheading Windows on the command line
@divEnd
+@divClass{column-center-top}
+@subheading Compiling a file
+
+@lilypadWindows
+
+@divEnd
+
+
@divClass{column-center-bottom}
@subheading Legalese
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.17.26 released! @emph{September 8, 2013}
+@subsubheading LilyPond 2.17.28 released! @emph{October 6, 2013}
-We are happy to announce the release of LilyPond 2.17.26. This
+We are happy to announce the release of LilyPond 2.17.28. This
release contains the usual number of bugfixes and enhancements, and contains
some work in progress. You will have access to the very latest features, but
some may be incomplete, and you may encounter bugs and crashes. If you require
@newsEnd
-@newsItem
-@subsubheading LilyPond blog moved! @emph{June 29, 2013}
-
-The LilyPond blog, which was previously hosted on
-@uref{http://lilypondblog.wordpress.com/, wordpress.com}, has moved
-to a new domain: you can now find it at
-@uref{http://lilypondblog.org/, lilypondblog.org}!
-
-@newsEnd
-
@newsItem
@subsubheading LilyPond blog. @emph{June 2, 2013}
-Janek Warchoł has created a LilyPond blog. It's currently hosted on
-Wordpress - follow @uref{http://lilypondblog.wordpress.com/, this link} to read
-it and to contribute.
+Janek Warchoł has created a LilyPond blog. You can find it at
+@uref{http://lilypondblog.org/, lilypondblog.org}!
@newsEnd
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.17.27 released! @emph{September 26, 2013}
+
+We are happy to announce the release of LilyPond 2.17.27. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.26 released! @emph{September 8, 2013}
+
+We are happy to announce the release of LilyPond 2.17.26. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
@newsItem
@subsubheading LilyPond 2.17.25 released! @emph{August 25, 2013}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=17
-PATCH_LEVEL=27
+PATCH_LEVEL=29
MY_PATCH_LEVEL=
VERSION_STABLE=2.16.2
-VERSION_DEVEL=2.17.26
+VERSION_DEVEL=2.17.28
AC_DEFUN(STEPMAKE_TEXMF, [
STEPMAKE_PROGS(METAFONT, mf-nowin mf mfw mfont, $1)
STEPMAKE_PROGS(METAPOST, mpost, $1)
+ if test "$METAPOST" != ""; then
+ ver=`STEPMAKE_GET_VERSION($METAPOST)`
+ num=`STEPMAKE_NUMERIC_VERSION($ver)`
+ # Avoid buggy metapost versions: 1.600 <= x < 1.803
+ if test "$num" -ge "1600000" -a "$num" -lt "1803000"; then
+ STEPMAKE_ADD_ENTRY($1, ["mpost (due to a bug in metapost, versions 1.600 <= x < 1.803 are not supported; installed: $ver)"])
+ fi
+ fi
AC_MSG_CHECKING(for working metafont mode)
modelist='ljfour lj4 lj3 lj2 ljet laserjet'
STEPMAKE_DLOPEN
# Do not use bison 1.50 and 1.75.
# 1.29 is required fr %locations, but I'm not sure it's enough --ns
-STEPMAKE_BISON(OPTIONAL, 1.29)
+STEPMAKE_BISON(REQUIRED, 1.29)
STEPMAKE_FLEX(REQUIRED)
STEPMAKE_FLEXLEXER(REQUIRED)
STEPMAKE_FLEXLEXER_LOCATION
# guile executable for some scripts
STEPMAKE_GUILE(OPTIONAL, 1.8.2, 1.9.0)
-# perl for help2man.
-STEPMAKE_PERL(OPTIONAL)
+# perl for help2man and for mf2pt1.pl
+STEPMAKE_PERL(REQUIRED)
## Optional tools for building documentation, website, extra fonts.
if test "$DOCUMENTATION" = "yes"; then
texidoc = "Beamlets in grace notes remain readable."
}
-\version "2.16.0"
+\version "2.17.28"
\layout {
ragged-right = ##t
}
\relative c'
\context Staff {
- f1 \grace { a'8[ f16] } g1
+ f1 \grace { a'8 f16 } g1
}
-\version "2.16.0"
+\version "2.17.28"
\header { texidoc = "
The beaming algorithm handles collisions between beams and
" }
\relative c' {
- e'8[ f e \grace { f,16[ a] } e'8]
+ e'8[ f e \grace { f,16 a } e'8]
}
\relative c'{
% test notes, which will be shown in different styles:
-testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
+testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
c''8 d''16 c''32 d''64 \acciaccatura {\stemDown c''8 \stemNeutral} d''64 }
{
\mark "old straight (large angles)"
\override Flag.stencil = #old-straight-flag
\testnotes
+
+ \mark "flat"
+ \override Flag.stencil = #flat-flag
+ \testnotes
%
% \mark "custom slant"
-% % Custom straight flag. The parameters are:
+% % Custom straight flag. The parameters are:
% % flag thickness and spacing
% % up-flag angle and length
% % down-flag angle and length
--- /dev/null
+\version "2.17.28"
+
+\header
+{
+ texidoc = "A separate @samp{Grace_auto_beam_engraver} initiates
+autobeaming at the start of each @code{\\grace} command."
+}
+
+\layout { short-indent = 1\cm indent = 2\cm }
+
+music = {
+ \mark "manual"
+ \relative c'' {
+ \grace {a8[ b] } a1
+ \grace {a8[ b c b gis] } a1
+ \grace {a8[ b c32 b c16 gis] } a1
+ \grace {a8[ b c16 d] c4 b8[ gis] } a1
+ \grace {a8[ b c16 d] c4 b8 a b\fermata a16[ gis] } a1
+ } \break
+ \mark "automatic"
+ \relative c'' {
+ \grace {a8 b } a1
+ \grace {a8 b c b gis } a1
+ \grace {a8 b c32 b c16 gis } a1
+ \grace {a8 b c16 d c4 b8 gis } a1
+ \grace {a8 b c16 d c4 b8 a b\fermata a16 gis } a1
+ }
+}
+
+\score {
+ <<
+ \new Staff \with { instrumentName = \markup \center-column
+ { without engraver } }
+ \new Voice \with { \remove "Grace_auto_beam_engraver" }
+ \music
+ \new Staff \with { instrumentName = \markup \center-column
+ { with engraver } }
+ \new Voice \music
+ >>
+}
-\version "2.16.0"
+\version "2.17.28"
\header {
texidoc = "Bar line should come before the grace note."
}
\relative c' \context Staff {
- f1 \grace { a'16[ f] } g1 }
+ f1 \grace { a'16 f } g1 }
\layout { ragged-right= ##t }
-\version "2.16.0"
+\version "2.17.28"
\relative c'' {
c4 d8[
- \grace { e32[ d c d] } e8]
+ \grace { e32 d c d } e8]
e[ e
\grace { f16 } e8 e]
}
-\version "2.16.0"
+\version "2.17.28"
#(ly:set-option 'warning-as-error #f)
}
\context Voice \relative c' {
- c4 \grace { d16[ d16] }
+ c4 \grace { d16 d16 }
}
-\version "2.16.0"
+\version "2.17.28"
\header {
texidoc = "Pieces may begin with grace notes."
}
\layout { ragged-right = ##t}
\relative c' \context Staff {
- \grace { a'16[ f] } g1
+ \grace { a'16 f } g1
\bar "||" % test if | and || are synced.
- \grace { a16[ bes] } c1
+ \grace { a16 bes } c1
\bar "||" % test if | and || are synced.
}
normal notes, if possible. They should never be longer, even if that
would lead to beam quanting problems."
}
-\version "2.17.6"
+\version "2.17.28"
\layout {
ragged-right = ##t
<< { d8.\noBeam d16 } \\ >> \grace { d16 } c8.[ b16]
<< { c16[ b] } \\ >>
- \grace { c16[ b] } d4
+ \grace { c16 b } d4
% \override Beam.inspect-quants =#'(2.8 . 2.5)
-% \grace { c16[ b] } d4
+% \grace { c16 b } d4
}
-\version "2.16.0"
+\version "2.17.28"
\header {
\relative c''{\key a \minor \time 2/4
\repeat "volta" 2 {
- \grace { a16[ b] } c4 c4 |
- \grace { d16[ b] } c4 c4 |
+ \grace { a16 b } c4 c4 |
+ \grace { d16 b } c4 c4 |
}
}
-\version "2.17.11"
+\version "2.17.28"
\header{
\new Voice \relative c'' {
\grace b8 c4\fermata
- \grace { c32[ cis32] } gis4
- \grace { cis32[ dis32] } e4
- \grace { c32[ d] }\tuplet 3/2 { c8[ c c] }
- \grace { b32[ ( c32] } c4)
+ \grace { c32 cis32 } gis4
+ \grace { cis32 dis32 } e4
+ \grace { c32 d }\tuplet 3/2 { c8[ c c] }
+ \grace { b32 ( c32 } c4)
\grace <c d>16 c8[ c8]
% \grace c16 c8[ c8]
%% broken?
--- /dev/null
+\header
+{
+
+texidoc = "Music identifiers containing arbitrary characters may be
+initialized using
+@example
+\"violin1\" = @{ c''4 c'' c'' c'' @}
+@end example
+and used as:
+@example
+\\new Voice @{ \\\"violin1\" @}
+@end example
+"
+
+}
+
+\version "2.17.28"
+
+"violin1" = { c''4 c'' c'' c'' }
+"violin2" = { a'4 a' a' a' }
+
+\layout { ragged-right = ##t }
+
+{
+ << \"violin1" \\ \"violin2" >>
+}
-\version "2.16.0"
+\version "2.17.28"
\header {
texidoc="
}
\relative c' {
- c2 \grace { c16([ d e f] } g2)
+ c2 \grace { c16( d e f } g2)
f1
}
\addlyrics {
-\version "2.16.0"
+\version "2.17.28"
\header {
texidoc="
\relative c' {
f4 \appoggiatura a32 b4
- \grace { f16[ a16] } b2
+ \grace { f16 a16 } b2
\afterGrace b2 { f16[ a16] }
\appoggiatura a32 b4
\acciaccatura a8 b4
\show-note-styles #'(default)
}
}
+
+\markup {
+ \column {
+ \combine \null \vspace #1
+ \underline "Flat-flag:"
+ \override #'(flag-style . flat-flag)
+ \show-note-styles #'(default)
+ }
+}
\override #'(style . mensural) \mrkp
\override #'(flag-style . modern-straight-flag) \mrkp
\override #'(flag-style . old-straight-flag) \mrkp
+ \override #'(flag-style . flat-flag) \mrkp
}
}
\override NoteHead.style = #'triangle
}
-\version "2.16.0"
+\version "2.17.27"
#(define (notes-to-skip m)
"Convert all stuff with duration (notes, lyrics, bass figures, etc.) to skips.
-Scripts and dynamics are maintained.
-"
- (if (memq 'rhythmic-event (ly:music-property m 'types))
- (let* ((newmus (make-music 'SkipEvent)))
- (map
- (lambda (x) (ly:music-set-property! newmus (car x) (cdr x)))
- (ly:music-mutable-properties m))
- newmus
- )
- m)
-)
+Scripts and dynamics are maintained."
+ (if (music-is-of-type? m 'rhythmic-event)
+ (make-music 'SkipEvent m)
+ m))
\layout { ragged-right= ##t }
-\version "2.16.0"
+\version "2.17.28"
\header{
texidoc="
\time 4/4
<< d1_(\trill
{ s2 \grace {
- c16[ d]
+ c16 d
} }
>>
\break
}
-\version "2.17.6"
+\version "2.17.28"
\layout {
ragged-right = ##t
% #(define debug-slur-scoring #t)
| b='2( a4) s4
| b='4.( c8) s2
| << c=''1_(
- { s2 \grace { b16[ c] } } >>
+ { s2 \grace { b16 c } } >>
\break
b4)
e=''4.( c8) s4
run are spaced accordingly. "
}
-\version "2.17.6"
+\version "2.17.28"
\paper { ragged-right = ##t }
c
\grace { c16 }
d
- \grace { c16[ d e f] }
+ \grace { c16 d e f }
c
- \grace { c8[ c16 d c8] }
+ \grace { c8 c16 d c8 }
c
\override Score.GraceSpacing.spacing-increment = #2.0
-\version "2.17.3"
+\version "2.17.28"
\header {
texidoc = "The spacing engine avoids collisions between non-adjacent columns."
}
\grace { <d-1-2-3>8[ f a] }
<fis''-1-2-3-4-5>4 r4
\set fingeringOrientations = #'(right)
- <g'-1-2-3-4-5>4 \grace { d''8[ e'' d'']}
+ <g'-1-2-3-4-5>4 \grace { d''8 e'' d''}
g'4
}
>>
}
-\version "2.17.11"
+\version "2.17.28"
\paper {
ragged-right = ##t
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2
- \grace { c16[ c16] }
+ \grace { c16 c16 }
c2 }
\new Staff {
c2 \tuplet 3/2 { c8 \clef bass cis,, c }
-\version "2.16.0"
+\version "2.17.27"
\header {
texidoc = "
\score {
\new TabStaff
\with {
- stringTunings = \stringTuning \notemode { <a d' f' a' d'' f''> }
+ stringTunings = \stringTuning <a d' f' a' d'' f''>
tablatureFormat = #fret-letter-tablature-format
}
\new TabVoice {
--- /dev/null
+\version "2.17.20"
+
+\header
+{
+ texidoc = "
+Slur placement in complementary tablatures should not be affected by
+either automatic or manual beaming.
+"
+}
+
+guitarSolo = {
+ \time 3/4
+ \set Timing.beamExceptions = #'((end . (((1 . 8) . (4 2)))))
+ <<
+ {bes'2( aes'8-. r)} \\
+ {r8 cis(-\tag #'beam [ b f'-\tag #'beam ]) <d f'>-. r}
+ >>
+ \bar "|."
+}
+
+guitarSolos = {
+ \tempo "Manual beams"
+ \guitarSolo
+ \tempo "Automatic beams"
+ \removeWithTag #'beam \guitarSolo
+}
+
+\score {
+ <<
+ \new StaffGroup <<
+ \new Staff { \clef "treble_8" \guitarSolos }
+ \new TabStaff \guitarSolos
+ >>
+ \new TabStaff \with { \tabFullNotation } \guitarSolos
+ >>
+}
(list ch1 ch2)))
- (make-music 'SequentialMusic 'elements (apply append
- (map chord->tied-chord (ly:music-property chords 'elements)))))
+ (make-music 'SequentialMusic 'elements (append-map
+ chord->tied-chord (ly:music-property chords 'elements))))
baseChords =
\applyMusic #(lambda (mus)
texidoc = "Trill spanner can end on a grace note"
}
-\version "2.17.15"
+\version "2.17.28"
\layout {
ragged-right = ##T
}
\relative c' \new Voice {
<< { c1 \startTrillSpan }
- { s2. \grace { d16[\stopTrillSpan e] } } >>
+ { s2. \grace { d16\stopTrillSpan e } } >>
c4 }
HELP2MAN_EXECS = lilypond
STEPMAKE_TEMPLATES=c c++ executable po help2man
-OUT_DIST_FILES=$(addprefix $(outdir)/,parser.hh parser.cc)
-
include $(depth)/make/stepmake.make
ifeq ($(LINK_GXX_STATICALLY),yes)
return SCM_BOOL_T;
}
-/* Return upper and lower skylines for VerticalAxisGroup g. If the extent
- is non-empty but there is no skyline available (or pure is true), just
+/* for each grob, find its upper and lower skylines. If the grob has
+ an empty extent, delete it from the list instead. If the extent is
+ non-empty but there is no skyline available (or pure is true), just
create a flat skyline from the bounding box */
// TODO(jneem): the pure and non-pure parts seem to share very little
// code. Split them into 2 functions, perhaps?
-static Skyline_pair
-get_skylines (Grob *g,
+static void
+get_skylines (Grob *me,
+ vector<Grob *> *const elements,
Axis a,
- Grob *other_common,
- bool pure, int start, int end)
+ bool pure, int start, int end,
+ vector<Skyline_pair> *const ret)
{
- Skyline_pair skylines;
+ Grob *other_common = common_refpoint_of_array (*elements, me, other_axis (a));
- if (!pure)
+ for (vsize i = elements->size (); i--;)
{
- Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
- ? "vertical-skylines"
- : "horizontal-skylines"));
- if (skys)
- skylines = *skys;
-
- /* This skyline was calculated relative to the grob g. In order to compare it to
- skylines belonging to other grobs, we need to shift it so that it is relative
- to the common reference. */
- Real offset = g->relative_coordinate (other_common, other_axis (a));
- skylines.shift (offset);
- }
- else if (Hara_kiri_group_spanner::request_suicide (g, start, end))
- return skylines;
- else
- {
- assert (a == Y_AXIS);
- Interval extent = g->pure_height (g, start, end);
-
- // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
- // It's quite common for a treble clef to be the highest element of one system
- // and for a low note (or lyrics) to be the lowest note on another. The two will
- // never collide, but the pure-height stuff only works with bounding boxes, so it
- // doesn't know that. The result is a significant over-estimation of the pure-height,
- // especially on systems with many staves. To correct for this, we build a skyline
- // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
- // while the bit we're about to do only contains the breakable grobs at the beginning
- // of the system. This way, the tall treble clefs are only compared with the treble
- // clefs of the other staff and they will be ignored if the staff above is, for example,
- // lyrics.
- if (Axis_group_interface::has_interface (g))
+ Grob *g = (*elements)[i];
+ Skyline_pair skylines;
+
+ if (!pure)
{
- extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
- Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
- if (!begin_of_line_extent.is_empty ())
+ Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+ ? "vertical-skylines"
+ : "horizontal-skylines"));
+ if (skys)
+ skylines = *skys;
+
+ /* This skyline was calculated relative to the grob g. In order to compare it to
+ skylines belonging to other grobs, we need to shift it so that it is relative
+ to the common reference. */
+ Real offset = g->relative_coordinate (other_common, other_axis (a));
+ skylines.shift (offset);
+ }
+ else
+ {
+ assert (a == Y_AXIS);
+ Interval extent = g->pure_height (g, start, end);
+
+ // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
+ // It's quite common for a treble clef to be the highest element of one system
+ // and for a low note (or lyrics) to be the lowest note on another. The two will
+ // never collide, but the pure-height stuff only works with bounding boxes, so it
+ // doesn't know that. The result is a significant over-estimation of the pure-height,
+ // especially on systems with many staves. To correct for this, we build a skyline
+ // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
+ // while the bit we're about to do only contains the breakable grobs at the beginning
+ // of the system. This way, the tall treble clefs are only compared with the treble
+ // clefs of the other staff and they will be ignored if the staff above is, for example,
+ // lyrics.
+ if (Axis_group_interface::has_interface (g)
+ && !Hara_kiri_group_spanner::request_suicide (g, start, end))
+ {
+ extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
+ Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
+ if (!begin_of_line_extent.is_empty ())
+ {
+ Box b;
+ b[a] = begin_of_line_extent;
+ b[other_axis (a)] = Interval (-infinity_f, -1);
+ skylines.insert (b, other_axis (a));
+ }
+ }
+
+ if (!extent.is_empty ())
{
Box b;
- b[a] = begin_of_line_extent;
- b[other_axis (a)] = Interval (-infinity_f, -1);
+ b[a] = extent;
+ b[other_axis (a)] = Interval (0, infinity_f);
skylines.insert (b, other_axis (a));
}
}
- if (!extent.is_empty ())
- {
- Box b;
- b[a] = extent;
- b[other_axis (a)] = Interval (0, infinity_f);
- skylines.insert (b, other_axis (a));
- }
+ if (skylines.is_empty ())
+ elements->erase (elements->begin () + i);
+ else
+ ret->push_back (skylines);
}
- return skylines;
+ reverse (*ret);
}
vector<Real>
// else centered dynamics will break when there is a fixed alignment).
vector<Real>
Align_interface::internal_get_minimum_translations (Grob *me,
- vector<Grob *> const &elems,
+ vector<Grob *> const &all_grobs,
Axis a,
bool include_fixed_spacing,
bool pure, int start, int end)
Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
DOWN);
+ vector<Grob *> elems (all_grobs); // writable copy
+ vector<Skyline_pair> skylines;
- Grob *other_common = common_refpoint_of_array (elems, me, other_axis (a));
+ get_skylines (me, &elems, a, pure, start, end, &skylines);
Real where = 0;
Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0);
vector<Real> translates;
Skyline down_skyline (stacking_dir);
- Grob *last_nonempty_element = 0;
Real last_spaceable_element_pos = 0;
Grob *last_spaceable_element = 0;
Skyline last_spaceable_skyline (stacking_dir);
Real dy = 0;
Real padding = default_padding;
- Skyline_pair skyline = get_skylines (elems[j], a, other_common, pure, start, end);
-
- if (skyline.is_empty ())
- dy = 0.0;
- else if (!last_nonempty_element)
- dy = skyline[-stacking_dir].max_height () + padding;
+ if (j == 0)
+ dy = skylines[j][-stacking_dir].max_height () + padding;
else
{
- SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
+ SCM spec = Page_layout_problem::get_spacing_spec (elems[j - 1], elems[j], pure, start, end);
Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
- dy = down_skyline.distance (skyline[-stacking_dir]) + padding;
+ dy = down_skyline.distance (skylines[j][-stacking_dir]) + padding;
Real spec_distance = 0;
if (Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("minimum-distance")))
Page_layout_problem::read_spacing_spec (spec,
&spaceable_padding,
ly_symbol2scm ("padding"));
- dy = max (dy, (last_spaceable_skyline.distance (skyline[-stacking_dir])
+ dy = max (dy, (last_spaceable_skyline.distance (skylines[j][-stacking_dir])
+ stacking_dir * (last_spaceable_element_pos - where) + spaceable_padding));
Real spaceable_min_distance = 0;
}
}
+ if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */
+ dy = 0.0;
+
dy = max (0.0, dy);
down_skyline.raise (-stacking_dir * dy);
- down_skyline.merge (skyline[stacking_dir]);
+ down_skyline.merge (skylines[j][stacking_dir]);
where += stacking_dir * dy;
translates.push_back (where);
last_spaceable_element_pos = where;
last_spaceable_skyline = down_skyline;
}
- if (!skyline.is_empty ())
- last_nonempty_element = elems[j];
+ }
+
+ // So far, we've computed the translates for all the non-empty elements.
+ // Here, we set the translates for the empty elements: an empty element
+ // gets the same translation as the last non-empty element before it.
+ vector<Real> all_translates;
+ if (!translates.empty ())
+ {
+ Real w = translates[0];
+ for (vsize i = 0, j = 0; j < all_grobs.size (); j++)
+ {
+ if (i < elems.size () && all_grobs[j] == elems[i])
+ w = translates[i++];
+ all_translates.push_back (w);
+ }
}
if (pure)
{
SCM mta = me->get_property ("minimum-translations-alist");
mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
- ly_floatvector2scm (translates)),
+ ly_floatvector2scm (all_translates)),
mta);
me->set_property ("minimum-translations-alist", mta);
}
- return translates;
+ return all_translates;
}
void
protected:
void stop_translation_timestep ();
- void process_music ();
+ void process_acknowledged ();
+
+ virtual void process_music ();
virtual void finalize ();
virtual void derived_mark () const;
DECLARE_ACKNOWLEDGER (stem);
DECLARE_TRANSLATOR_LISTENER (beam_forbid);
- void process_acknowledged ();
-
private:
- bool test_moment (Direction, Moment, Moment);
+ virtual bool test_moment (Direction, Moment, Moment);
void consider_begin (Moment, Moment);
void consider_end (Moment, Moment);
Spanner *create_beam ();
void begin_beam ();
void end_beam ();
void junk_beam ();
- bool is_same_grace_state (Grob *e);
+ virtual bool is_same_grace_state (Moment, Moment);
void recheck_beam ();
void typeset_beam ();
vector<Item *> *remove_end_stems (vsize);
shortest_mom_ = Moment (Rational (1, 4));
}
+bool
+Auto_beam_engraver::is_same_grace_state (Moment start, Moment now)
+{
+ return bool (start.grace_part_) == bool (now.grace_part_);
+}
+
+
void
Auto_beam_engraver::end_beam ()
{
}
/*
- ignore grace notes.
+ ignore interspersed grace notes.
*/
Moment now = now_mom ();
- if (bool (beam_start_location_.grace_part_) != bool (now.grace_part_))
+ if (!is_same_grace_state (beam_start_location_, now))
return;
Duration *stem_duration = unsmob_duration (ev->get_property ("duration"));
/* write */
""
);
+
+class Grace_auto_beam_engraver : public Auto_beam_engraver
+{
+ TRANSLATOR_DECLARATIONS (Grace_auto_beam_engraver);
+ DECLARE_TRANSLATOR_LISTENER (beam_forbid);
+
+private:
+ Moment last_grace_start_; // Full starting time of last grace group
+ Moment last_grace_position_; // Measure position of same
+ virtual void process_music ();
+ virtual bool is_same_grace_state (Moment, Moment);
+ virtual bool test_moment (Direction, Moment, Moment);
+};
+
+Grace_auto_beam_engraver::Grace_auto_beam_engraver ()
+{
+ last_grace_start_.main_part_.set_infinite (-1);
+ // grace_part_ is zero -> test_moment is false, last_grace_position_
+ // not considered.
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Grace_auto_beam_engraver, beam_forbid);
+void
+Grace_auto_beam_engraver::listen_beam_forbid (Stream_event *ev)
+{
+ Auto_beam_engraver::listen_beam_forbid (ev);
+}
+
+bool
+Grace_auto_beam_engraver::is_same_grace_state (Moment, Moment)
+{
+ // This is for ignoring interspersed grace notes in main note
+ // beaming. We never want to ignore something inside of grace note
+ // beaming, so return true.
+ return true;
+}
+
+void
+Grace_auto_beam_engraver::process_music ()
+{
+ Moment now = now_mom ();
+ // Update last_grace_start_ and last_grace_position_ only when the
+ // main time advances.
+ if (now.main_part_ > last_grace_start_.main_part_)
+ {
+ last_grace_start_ = now;
+ last_grace_position_ = measure_position (context ());
+ }
+
+ Auto_beam_engraver::process_music ();
+}
+
+bool
+Grace_auto_beam_engraver::test_moment (Direction dir, Moment test_mom, Moment)
+{
+ // If no grace group started this main moment, we have no business
+ // beaming. Same if we have left the original main time step.
+ if (!last_grace_start_.grace_part_
+ || last_grace_position_.main_part_ != test_mom.main_part_)
+ return false;
+ // Autobeam start only when at the start of the grace group.
+ if (dir == START)
+ return last_grace_position_ == test_mom;
+ // Autobeam end only when the grace part is finished.
+ return !test_mom.grace_part_;
+}
+
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, stem);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, bar_line);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, beam);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, breathing_sign);
+ADD_ACKNOWLEDGER (Grace_auto_beam_engraver, rest);
+ADD_TRANSLATOR (Grace_auto_beam_engraver,
+ /* doc */
+ "Generates one autobeam group across an entire grace phrase. "
+ " As usual, any manual beaming or @code{\\noBeam} will block"
+ " autobeaming, just like setting the context property"
+ " @samp{autoBeaming} to @code{##f}.",
+
+ /* create */
+ "Beam ",
+
+ /* read */
+ "autoBeaming ",
+
+ /* write */
+ ""
+ );
{
if (finished_beam_)
{
- if (!finished_beam_->get_bound (RIGHT))
- finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT));
- if (forced_direction_)
+ Grob *stem = finished_beam_->get_bound (RIGHT);
+ if (!stem)
{
- Grob *stem = finished_beam_->get_bound (RIGHT);
- set_grob_direction (stem, forced_direction_);
- forced_direction_ = CENTER;
+ stem = finished_beam_->get_bound (LEFT);
+ if (stem)
+ finished_beam_->set_bound (RIGHT, stem);
}
+
+ if (stem && forced_direction_)
+ set_grob_direction (stem, forced_direction_);
+
+ forced_direction_ = CENTER;
finished_beam_info_->beamify (finished_beaming_options_);
Beam::set_beaming (finished_beam_, finished_beam_info_);
if (!valid_start_point ())
return;
+ // It's suboptimal that we don't support callbacks returning ##f,
+ // but this makes beams have no effect on "stems" reliably in
+ // TabStaff when \tabFullNotation is switched off: the real stencil
+ // callback for beams is called quite late in the process, and we
+ // don't want to trigger it early.
+ if (scm_is_false (beam_->get_property_data ("stencil")))
+ return;
+
Item *stem = dynamic_cast<Item *> (info.grob ());
if (Stem::get_beam (stem))
return;
if (scm_is_number (conc))
return scm_to_double (conc);
- if (is_knee_)
+ if (is_knee_ || is_xstaff_)
return 0.0;
Direction beam_dir = CENTER;
#include "lookup.hh"
#include "main.hh"
#include "misc.hh"
-#include "note-column.hh"
#include "note-head.hh"
#include "output-def.hh"
#include "pointer-group-interface.hh"
return m;
}
-//------ for whole note chord tremolos
-
-bool
-Beam::whole_note_close_chord_tremolo (Grob *me)
-{
- if (!scm_is_integer (me->get_property ("gap-count")))
- return false;
-
- extract_grob_set (me, "stems", stems);
- for (vsize i = 0; i < stems.size (); i++)
- if (Stem::duration_log (stems[i]))
- return false;
-
- Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
- if (staff)
- {
- Grob *outside_stems[2] = {Stem::extremal_heads (stems[0])[DOWN],
- Stem::extremal_heads (stems.back ())[DOWN]};
-
- Interval lines = Staff_symbol::line_span (staff);
- for (int i = 0; i < 2; i++)
- {
- Real my_pos = Staff_symbol_referencer::get_position (outside_stems[i]);
- if (my_pos > lines[UP] + 1)
- return false;
- else if (my_pos < lines[DOWN] - 1)
- return false;
- }
- }
-
- return (Staff_symbol_referencer::get_position (Stem::extremal_heads (stems.back ())[DOWN])
- - Staff_symbol_referencer::get_position (Stem::extremal_heads (stems[0])[DOWN]))
- < 2;
-}
-
-MAKE_SCHEME_CALLBACK (Beam, calc_beam_gap, 1);
-SCM
-Beam::calc_beam_gap (SCM smob)
-{
- Spanner *me = unsmob_spanner (smob);
- SCM default_value = scm_cons (scm_from_double (0.8), scm_from_double (0.8));
- if (!whole_note_close_chord_tremolo (me))
- return default_value;
-
- Interval left = Note_column::accidental_width
- (me->get_bound (RIGHT)->get_parent (X_AXIS));
-
- if (left.length () > 0.4)
- return scm_cons (scm_from_double (0.8), scm_from_double (1.3 + left.length ()));
- else
- return default_value;
-}
-
-MAKE_SCHEME_CALLBACK (Beam, calc_springs_and_rods, 1);
-SCM
-Beam::calc_springs_and_rods (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
-
- if (!whole_note_close_chord_tremolo (me))
- return SCM_BOOL_F;
-
- return scm_call_1 (Spanner::set_spacing_rods_proc, smob);
-}
-
-MAKE_SCHEME_CALLBACK (Beam, calc_minimum_length, 1);
-SCM
-Beam::calc_minimum_length (SCM smob)
-{
- Spanner *me = unsmob_spanner (smob);
- SCM default_value = scm_from_double (0.0);
-
- if (!whole_note_close_chord_tremolo (me))
- return SCM_BOOL_F;
-
- Interval left = Note_column::accidental_width
- (me->get_bound (RIGHT)->get_parent (X_AXIS));
-
- if (left.length () > 0.4)
- return scm_from_double (left.length () + 4.0);
- else
- return default_value;
-}
-
-//------ and everything else
-
MAKE_SCHEME_CALLBACK (Beam, calc_normal_stems, 1);
SCM
Beam::calc_normal_stems (SCM smob)
commonx = me->get_bound (d)->common_refpoint (commonx, X_AXIS);
int gap_count = robust_scm2int (me->get_property ("gap-count"), 0);
- Interval gap_lengths = robust_scm2interval (me->get_property ("beam-gap"), Interval (0.0, 0.0));
+ Real gap_length = robust_scm2double (me->get_property ("gap"), 0.0);
Position_stem_segments_map stem_segments;
Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
current.horizontal_[event_dir] += event_dir * seg.width_ / 2;
if (seg.gapped_)
{
- current.horizontal_[event_dir] -= event_dir * gap_lengths[event_dir];
+ current.horizontal_[event_dir] -= event_dir * gap_length;
if (Stem::is_invisible (seg.stem_))
{
for (vsize k = 0; k < heads.size (); k++)
current.horizontal_[event_dir]
= event_dir * min (event_dir * current.horizontal_[event_dir],
- - gap_lengths[event_dir] / 2
+ - gap_length / 2
+ event_dir
* heads[k]->extent (commonx,
X_AXIS)[-event_dir]);
"auto-knee-gap "
"beamed-stem-shorten "
"beaming "
- "beam-gap "
"beam-segments "
"beam-thickness "
"break-overshoot "
"damping "
"details "
"direction "
+ "gap "
"gap-count "
"grow-direction "
"inspect-quants "
vector<Item *> notes_;
vector<Item *> prev_notes_;
// Must remember notes for explicit ties.
- vector<Item *> tie_note_candidates_;
- vector<Stream_event *> tie_note_candidate_events_;
vector<Grob *> ties_;
vector<Stream_event *> note_events_;
Spanner *tie_column_;
Grob *p = make_spanner ("Tie", SCM_EOL);
Tie::set_head (p, LEFT, left);
Tie::set_head (p, RIGHT, right);
+ announce_end_grob (p, SCM_EOL);
ties_.push_back (p);
}
Moment now = now_mom ();
if (note_end_mom_.main_part_ <= now.main_part_)
{
- tie_note_candidate_events_ = note_events_;
- tie_note_candidates_ = prev_notes_;
-
note_events_.clear ();
prev_notes_.clear ();
}
class Completion_rest_engraver : public Engraver
{
vector<Item *> rests_;
- vector<Item *> prev_rests_;
vector<Stream_event *> rest_events_;
Moment rest_end_mom_;
bool is_first_;
void
Completion_rest_engraver::stop_translation_timestep ()
{
- if (rests_.size ())
- prev_rests_ = rests_;
rests_.clear ();
}
if (rest_end_mom_.main_part_ <= now.main_part_)
{
rest_events_.clear ();
- prev_rests_.clear ();
}
context ()->set_property ("restCompletionBusy",
ly_bool2scm (rest_events_.size ()));
warning (_f ("cannot find or create: `%s'", name.c_str ()));
t = unsmob_context_def (this->definition_);
}
-
- Context *tg = create_context (t, context_id, SCM_EOL);
- return tg->get_default_interpreter (context_id);
+ if (scm_is_symbol (t->get_default_child (SCM_EOL)))
+ {
+ Context *tg = create_context (t, "\\new", SCM_EOL);
+ return tg->get_default_interpreter (context_id);
+ }
+ return create_context (t, context_id, SCM_EOL);
+ }
+ else if (!context_id.empty () && context_id != id_string ())
+ {
+ if (daddy_context_ && !dynamic_cast<Global_context *> (daddy_context_))
+ return daddy_context_->get_default_interpreter (context_id);
+ warning (_f ("cannot find or create new Bottom = \"%s\"",
+ context_id.c_str ()));
}
return this;
}
/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "axis-group-interface.hh"
-#include "context.hh"
-#include "engraver.hh"
-#include "dimensions.hh"
-#include "directional-element-interface.hh"
#include "engraver.hh"
#include "hairpin.hh"
#include "international.hh"
-#include "interval.hh"
+#include "item.hh"
#include "note-column.hh"
-#include "paper-column.hh"
#include "pointer-group-interface.hh"
-#include "script-interface.hh"
#include "self-alignment-interface.hh"
-#include "side-position-interface.hh"
-#include "staff-symbol-referencer.hh"
-#include "stream-event.hh"
-#include "warn.hh"
#include "spanner.hh"
+#include "stream-event.hh"
#include "text-interface.hh"
#include "translator.icc"
-/*
- TODO:
-
- * direction of text-dynamic-event if not equal to direction of
- line-spanner
-
- - TODO: this engraver is too complicated. We should split it into
- the handling of the basic grobs and the linespanner
-
- - TODO: the line-spanner is not killed after the (de)crescs are
- finished.
-*/
-
-/**
- print text & hairpin dynamics.
-*/
class Dynamic_engraver : public Engraver
{
- Item *script_;
- Spanner *line_spanner_;
- Spanner *cresc_;
-
- Spanner *finished_line_spanner_;
- Spanner *finished_cresc_;
-
- Stream_event *script_ev_;
- Stream_event *current_cresc_ev_;
-
- Drul_array<Stream_event *> accepted_spanevents_drul_;
-
- vector<Note_column *> pending_columns_;
- vector<Grob *> pending_elements_;
-
- void typeset_all ();
-
TRANSLATOR_DECLARATIONS (Dynamic_engraver);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
DECLARE_TRANSLATOR_LISTENER (span_dynamic);
+ DECLARE_TRANSLATOR_LISTENER (break_span);
protected:
+ virtual void process_music ();
+ virtual void stop_translation_timestep ();
virtual void finalize ();
- void stop_translation_timestep ();
- void process_music ();
+
+private:
+ SCM get_property_setting (Stream_event *evt, char const *evprop,
+ char const *ctxprop);
+ string get_spanner_type (Stream_event *ev);
+
+ Drul_array<Stream_event *> accepted_spanevents_drul_;
+ Spanner *current_spanner_;
+ Spanner *finished_spanner_;
+
+ Item *script_;
+ Stream_event *script_event_;
+ Stream_event *current_span_event_;
+ bool end_new_spanner_;
};
Dynamic_engraver::Dynamic_engraver ()
{
+ script_event_ = 0;
+ current_span_event_ = 0;
script_ = 0;
- finished_cresc_ = 0;
- line_spanner_ = 0;
- finished_line_spanner_ = 0;
- current_cresc_ev_ = 0;
- cresc_ = 0;
-
- script_ev_ = 0;
- accepted_spanevents_drul_[START] = 0;
- accepted_spanevents_drul_[STOP] = 0;
+ finished_spanner_ = 0;
+ current_spanner_ = 0;
+ accepted_spanevents_drul_.set (0, 0);
+ end_new_spanner_ = false;
}
IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, absolute_dynamic);
void
Dynamic_engraver::listen_absolute_dynamic (Stream_event *ev)
{
- /*
- TODO: probably broken.
- */
- ASSIGN_EVENT_ONCE (script_ev_, ev);
+ ASSIGN_EVENT_ONCE (script_event_, ev);
}
IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, span_dynamic);
{
Direction d = to_dir (ev->get_property ("span-direction"));
- if (d == START)
- ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[START], ev);
-
- /* Cancel any ongoing crescendo, either explicitly by \! or
- implicitly by a new crescendo. Also avoid warning if cresc is
- canceled both implicitly and explicitly. */
- if ((d == STOP || current_cresc_ev_) && !accepted_spanevents_drul_[STOP])
- ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[STOP], ev);
+ ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev);
}
+IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, break_span);
void
-Dynamic_engraver::process_music ()
+Dynamic_engraver::listen_break_span (Stream_event *event)
{
- if (accepted_spanevents_drul_[START] || accepted_spanevents_drul_[STOP] || script_ev_)
+ if (event->in_event_class ("break-dynamic-span-event"))
{
- if (!line_spanner_)
- {
- Stream_event *rq = accepted_spanevents_drul_[START];
- line_spanner_ = make_spanner ("DynamicLineSpanner", rq ? rq->self_scm () : SCM_EOL);
- if (script_ev_)
- rq = script_ev_;
- }
+ // Case 1: Already have a start dynamic event -> break applies to new
+ // spanner (created later) -> set a flag
+ // Case 2: no new spanner, but spanner already active -> break it now
+ if (accepted_spanevents_drul_[START])
+ end_new_spanner_ = true;
+ else if (current_spanner_)
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
}
+}
- /*
- During a (de)crescendo, pending event will not be cleared,
- and a line-spanner will always be created, as \< \! are already
- two events.
-
- Note: line-spanner must always have at least same duration
- as (de)crecsendo, b.o. line-breaking.
- */
+SCM
+Dynamic_engraver::get_property_setting (Stream_event *evt,
+ char const *evprop,
+ char const *ctxprop)
+{
+ SCM spanner_type = evt->get_property (evprop);
+ if (spanner_type == SCM_EOL)
+ spanner_type = get_property (ctxprop);
+ return spanner_type;
+}
- /*
- maybe we should leave dynamic texts to the text-engraver and
- simply acknowledge them?
- */
- if (script_ev_)
+void
+Dynamic_engraver::process_music ()
+{
+ if (current_spanner_
+ && (accepted_spanevents_drul_[STOP]
+ || script_event_
+ || accepted_spanevents_drul_[START]))
{
- script_ = make_item ("DynamicText", script_ev_->self_scm ());
- script_->set_property ("text",
- script_ev_->get_property ("text"));
+ Stream_event *ender = accepted_spanevents_drul_[STOP];
+ if (!ender)
+ ender = script_event_;
- if (Direction d = to_dir (script_ev_->get_property ("direction")))
- set_grob_direction (line_spanner_, d);
- else if (Direction d = to_dir (line_spanner_->get_property ("direction")))
- set_grob_direction (script_, d);
+ if (!ender)
+ ender = accepted_spanevents_drul_[START];
- Axis_group_interface::add_element (line_spanner_, script_);
+ finished_spanner_ = current_spanner_;
+ announce_end_grob (finished_spanner_, ender->self_scm ());
+ current_spanner_ = 0;
+ current_span_event_ = 0;
}
- if (accepted_spanevents_drul_[STOP] || script_ev_)
+ if (accepted_spanevents_drul_[START])
{
- /*
- finish side position alignment if the (de)cresc ends here, and
- there are no new dynamics.
- */
+ current_span_event_ = accepted_spanevents_drul_[START];
- if (cresc_)
- {
- assert (!finished_cresc_ && cresc_);
-
- if (script_)
- {
- cresc_->set_bound (RIGHT, script_);
- add_bound_item (line_spanner_, script_);
- }
-
- finished_cresc_ = cresc_;
- announce_end_grob (finished_cresc_, SCM_EOL);
- cresc_ = 0;
- current_cresc_ev_ = 0;
- }
- else if (accepted_spanevents_drul_[STOP])
- accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("cannot find start of (de)crescendo"));
- }
+ string start_type = get_spanner_type (current_span_event_);
+ SCM cresc_type = get_property_setting (current_span_event_, "span-type",
+ (start_type + "Spanner").c_str ());
- if (accepted_spanevents_drul_[START])
- {
- if (current_cresc_ev_)
+ if (cresc_type == ly_symbol2scm ("text"))
{
- string msg = _ ("already have a decrescendo");
- if (current_cresc_ev_->in_event_class ("crescendo-event"))
- msg = _ ("already have a crescendo");
-
- accepted_spanevents_drul_[START]->origin ()->warning (msg);
- current_cresc_ev_->origin ()->warning (_ ("cresc starts here"));
+ current_spanner_
+ = make_spanner ("DynamicTextSpanner",
+ accepted_spanevents_drul_[START]->self_scm ());
+
+ SCM text = get_property_setting (current_span_event_, "span-text",
+ (start_type + "Text").c_str ());
+ if (Text_interface::is_markup (text))
+ current_spanner_->set_property ("text", text);
+ /*
+ If the line of a text spanner is hidden, end the alignment spanner
+ early: this allows dynamics to be spaced individually instead of
+ being linked together.
+ */
+ if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
}
else
{
- current_cresc_ev_ = accepted_spanevents_drul_[START];
-
- if (Direction d = to_dir (current_cresc_ev_->get_property ("direction")))
- set_grob_direction (line_spanner_, d);
-
- /*
- TODO: Use symbols.
- */
-
- SCM start_sym = scm_car (current_cresc_ev_->get_property ("class"));
- string start_type;
-
- if (start_sym == ly_symbol2scm ("decrescendo-event"))
- start_type = "decrescendo";
- else if (start_sym == ly_symbol2scm ("crescendo-event"))
- start_type = "crescendo";
- else
- {
- programming_error ("unknown dynamic spanner type");
- return;
- }
-
- /*
- UGH. TODO: should read from original event, so appearance
- may be altered with \tweak.
- */
- SCM s = get_property ((start_type + "Spanner").c_str ());
- if (!scm_is_symbol (s) || s == ly_symbol2scm ("hairpin"))
+ if (cresc_type != ly_symbol2scm ("hairpin"))
{
- cresc_ = make_spanner ("Hairpin", accepted_spanevents_drul_[START]->self_scm ());
- if (finished_cresc_)
- {
- Pointer_group_interface::add_grob (finished_cresc_,
- ly_symbol2scm ("adjacent-hairpins"),
- cresc_);
-
- Pointer_group_interface::add_grob (cresc_,
- ly_symbol2scm ("adjacent-hairpins"),
- finished_cresc_);
- }
+ string as_string = ly_scm_write_string (cresc_type);
+ current_span_event_
+ ->origin ()->warning (_f ("unknown crescendo style: %s\ndefaulting to hairpin.", as_string.c_str ()));
}
+ current_spanner_ = make_spanner ("Hairpin",
+ current_span_event_->self_scm ());
+ }
+ // if we have a break-dynamic-span event right after the start dynamic, break the new spanner immediately
+ if (end_new_spanner_)
+ {
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
+ end_new_spanner_ = false;
+ }
+ if (finished_spanner_)
+ {
+ if (Hairpin::has_interface (finished_spanner_))
+ Pointer_group_interface::add_grob (finished_spanner_,
+ ly_symbol2scm ("adjacent-spanners"),
+ current_spanner_);
+ if (Hairpin::has_interface (current_spanner_))
+ Pointer_group_interface::add_grob (current_spanner_,
+ ly_symbol2scm ("adjacent-spanners"),
+ finished_spanner_);
+ }
+ }
- /*
- This is a convenient (and legacy) interface to TextSpanners
- for use in (de)crescendi.
- Hmm.
- */
- else
- {
- cresc_ = make_spanner ("DynamicTextSpanner", accepted_spanevents_drul_[START]->self_scm ());
- cresc_->set_property ("style", s);
- context ()->set_property ((start_type
- + "Spanner").c_str (), SCM_EOL);
- s = get_property ((start_type + "Text").c_str ());
- if (Text_interface::is_markup (s))
- {
- cresc_->set_property ("text", s);
- context ()->set_property ((start_type + "Text").c_str (),
- SCM_EOL);
- }
-
- if (script_)
- {
- set_nested_property (cresc_,
- scm_list_3 (ly_symbol2scm ("bound-details"),
- ly_symbol2scm ("left"),
- ly_symbol2scm ("attach-dir")
- ),
- scm_from_int (RIGHT));
- }
- }
+ if (script_event_)
+ {
+ script_ = make_item ("DynamicText", script_event_->self_scm ());
+ script_->set_property ("text",
+ script_event_->get_property ("text"));
- if (script_)
- {
- cresc_->set_bound (LEFT, script_);
- add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
- }
- Axis_group_interface::add_element (line_spanner_, cresc_);
- }
+ if (finished_spanner_)
+ finished_spanner_->set_bound (RIGHT, script_);
+ if (current_spanner_)
+ current_spanner_->set_bound (LEFT, script_);
}
}
void
Dynamic_engraver::stop_translation_timestep ()
{
- if (!current_cresc_ev_ && line_spanner_)
- {
- assert (!finished_line_spanner_);
- finished_line_spanner_ = line_spanner_;
- line_spanner_ = 0;
- }
-
- typeset_all ();
-
- if (cresc_ && !cresc_->get_bound (LEFT))
- {
- cresc_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
- add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
- }
-
- script_ev_ = 0;
- accepted_spanevents_drul_[START] = 0;
- accepted_spanevents_drul_[STOP] = 0;
+ if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
+ finished_spanner_
+ ->set_bound (RIGHT,
+ unsmob_grob (get_property ("currentMusicalColumn")));
+
+ if (current_spanner_ && !current_spanner_->get_bound (LEFT))
+ current_spanner_
+ ->set_bound (LEFT,
+ unsmob_grob (get_property ("currentMusicalColumn")));
+ script_ = 0;
+ script_event_ = 0;
+ accepted_spanevents_drul_.set (0, 0);
+ finished_spanner_ = 0;
+ end_new_spanner_ = false;
}
void
Dynamic_engraver::finalize ()
{
- typeset_all ();
-
- if (line_spanner_
- && !line_spanner_->is_live ())
- line_spanner_ = 0;
- if (line_spanner_)
- {
- finished_line_spanner_ = line_spanner_;
- typeset_all ();
- }
-
- if (cresc_
- && !cresc_->is_live ())
- cresc_ = 0;
- if (cresc_)
+ if (current_spanner_
+ && !current_spanner_->is_live ())
+ current_spanner_ = 0;
+ if (current_spanner_)
{
- current_cresc_ev_->origin ()->warning (_ ("unterminated (de)crescendo"));
- cresc_->suicide ();
- cresc_ = 0;
+ current_span_event_
+ ->origin ()->warning (_f ("unterminated %s",
+ get_spanner_type (current_span_event_)
+ .c_str ()));
+ current_spanner_->suicide ();
+ current_spanner_ = 0;
}
}
-void
-Dynamic_engraver::typeset_all ()
+string
+Dynamic_engraver::get_spanner_type (Stream_event *ev)
{
- if (finished_cresc_)
- {
- if (!finished_cresc_->get_bound (RIGHT))
- {
+ string type;
+ SCM start_sym = scm_car (ev->get_property ("class"));
- Grob *column_bound = unsmob_grob (get_property ("currentMusicalColumn"));
+ if (start_sym == ly_symbol2scm ("decrescendo-event"))
+ type = "decrescendo";
+ else if (start_sym == ly_symbol2scm ("crescendo-event"))
+ type = "crescendo";
+ else
+ programming_error ("unknown dynamic spanner type");
- finished_cresc_->set_bound (RIGHT, script_
- ? script_
- : column_bound);
-
- if (finished_line_spanner_)
- add_bound_item (finished_line_spanner_,
- finished_cresc_->get_bound (RIGHT));
- }
- finished_cresc_ = 0;
- }
-
- script_ = 0;
- if (finished_line_spanner_)
- {
- /*
- We used to have
-
- extend-spanner-over-elements (finished_line_spanner_);
-
- but this is rather kludgy, since finished_line_spanner_
- typically has a staff-symbol field set , extending it over the
- entire staff.
-
- */
-
- Grob *l = finished_line_spanner_->get_bound (LEFT);
- Grob *r = finished_line_spanner_->get_bound (RIGHT);
- if (!r && l)
- finished_line_spanner_->set_bound (RIGHT, l);
- else if (!l && r)
- finished_line_spanner_->set_bound (LEFT, r);
- else if (!r && !l)
- {
- /*
- This is a isolated dynamic apparently, and does not even have
- any interesting support item.
- */
- Grob *cc = unsmob_grob (get_property ("currentMusicalColumn"));
- Item *ci = dynamic_cast<Item *> (cc);
- finished_line_spanner_->set_bound (RIGHT, ci);
- finished_line_spanner_->set_bound (LEFT, ci);
- }
- finished_line_spanner_ = 0;
- }
+ return type;
}
void
Dynamic_engraver::acknowledge_note_column (Grob_info info)
{
- if (!line_spanner_)
- return;
-
- if (line_spanner_
- /* Don't refill killed spanner */
- && line_spanner_->is_live ())
- {
- Side_position_interface::add_support (line_spanner_, info.grob ());
- add_bound_item (line_spanner_, dynamic_cast<Item *> (info.grob ()));
- }
-
if (script_ && !script_->get_parent (X_AXIS))
{
extract_grob_set (info.grob (), "note-heads", heads);
- if (heads.size ())
+ Grob *stem = unsmob_grob (info.grob ()->get_object ("stem"));
+ /*
+ Spacing constraints may require dynamics to be aligned on rests,
+ so check for a rest if this note column has no note heads.
+ */
+ Grob *x_parent = (heads.size ()
+ ? heads[0]
+ : unsmob_grob (info.grob ()->get_object ("rest")));
+ if (x_parent)
{
- Grob *head = heads[0];
- script_->set_parent (head, X_AXIS);
+ script_->set_parent (x_parent, X_AXIS);
Self_alignment_interface::set_center_parent (script_, X_AXIS);
}
+ if (stem)
+ Pointer_group_interface::add_grob (script_, ly_symbol2scm ("potential-X-colliding-grobs"), stem);
}
- if (cresc_)
- {
- if (!cresc_->get_bound (LEFT))
- {
- cresc_->set_bound (LEFT, info.grob ());
- add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
- }
- }
-
- if (finished_cresc_ && !finished_cresc_->get_bound (RIGHT))
- finished_cresc_->set_bound (RIGHT, info.grob ());
+ if (current_spanner_ && !current_spanner_->get_bound (LEFT))
+ current_spanner_->set_bound (LEFT, info.grob ());
+ if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
+ finished_spanner_->set_bound (RIGHT, info.grob ());
}
ADD_ACKNOWLEDGER (Dynamic_engraver, note_column);
-
ADD_TRANSLATOR (Dynamic_engraver,
/* doc */
- "Create hairpins, dynamic texts, and their vertical"
- " alignments. The symbols are collected onto a"
- " @code{DynamicLineSpanner} grob which takes care of vertical"
- " positioning.",
+ "Create hairpins, dynamic texts and dynamic text spanners.",
/* create */
- "DynamicLineSpanner "
"DynamicTextSpanner "
"DynamicText "
"Hairpin ",
/* read */
- "",
+ "crescendoSpanner "
+ "crescendoText "
+ "currentMusicalColumn "
+ "decrescendoSpanner "
+ "decrescendoText ",
/* write */
""
DECLARE_SCHEME_CALLBACK (rest_collision_callback, (SCM element, SCM prev_off));
DECLARE_SCHEME_CALLBACK (pure_rest_collision_callback, (SCM element, SCM, SCM, SCM prev_off));
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_beam_gap, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_springs_and_rods, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_minimum_length, (SCM));
DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_shorten, (SCM));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
private:
friend class Beam_scoring_problem;
- static bool whole_note_close_chord_tremolo (Grob *me);
static Direction get_default_dir (Grob *);
static vector<Beam_segment> get_beam_segments (Grob *);
static void set_stem_directions (Grob *, Direction);
#include <set>
/*
- The definition of a interpretation context as given in the
+ The definition of an interpretation context as given in the
input. The lists are stored in order of definition.
*/
struct Context_def
#include "simple-music-iterator.hh"
/**
- Walk through a Event_chord
+ Walk through an Event_chord
*/
class Event_chord_iterator : public Simple_music_iterator
{
static bool has_rests (Grob *me);
static Grob *dot_column (Grob *me);
static Interval cross_staff_extent (Grob *me, Grob *refp);
- static Interval accidental_width (Grob *me);
DECLARE_GROB_INTERFACE ();
static Item *get_stem (Grob *);
#include "grob-info.hh"
#include "translator.hh"
-/* Convert a music definition into a audio representation.
+/* Convert a music definition into an audio representation.
A baseclass. */
class Performer : public Translator
{
}
/**
- Item copy ctor. Copy nothing: everything should be a elt property
+ Item copy ctor. Copy nothing: everything should be an elt property
or a special purpose pointer (such as broken_to_drul_[]) */
Item::Item (Item const &s)
: Grob (s)
yylval = SCM_EOL; \
} while (0)
+/*
+ The inside of \"violin1" is marked by commandquote mode
+*/
+
+#define start_command_quote() do { \
+ yy_push_state (commandquote); \
+ yylval = SCM_EOL; \
+ } while (0)
+
#define yylval (*lexval_)
#define yylloc (*lexloc_)
%x markup
%x notes
%x quote
+%x commandquote
%x sourcefileline
%x sourcefilename
%x version
{WORD} {
return scan_bare_word (YYText_utf8 ());
}
-
+ \\\" {
+ start_command_quote ();
+ }
{COMMAND}/[-_] | // backup rule
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
}
}
-<quote>{
+<quote,commandquote>{
\\{ESCAPED} {
char c = escaped_char (YYText ()[1]);
yylval = scm_cons (scm_from_locale_stringn (&c, 1),
}
\" {
- yy_pop_state ();
-
/* yylval is union. Must remember STRING before setting SCM*/
yylval = scm_string_concatenate_reverse (yylval,
SCM_UNDEFINED,
SCM_UNDEFINED);
+ if (get_state () == commandquote) {
+ yy_pop_state ();
+ return scan_escaped_word (ly_scm2string (yylval));
+ }
+
+ yy_pop_state ();
+
return STRING;
}
\\ {
yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
+ \\\" {
+ start_command_quote ();
+ }
{COMMAND}/[-_] | // backup rule
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
yylval = SCM_UNSPECIFIED;
return YYText ()[0];
}
- [^$#{}\"\\ \t\n\r\f0-9]+ {
+ [^|*.=$#{}\"\\ \t\n\r\f0-9][^$#{}\"\\ \t\n\r\f0-9]* {
/* ugr. This sux. */
string s (YYText_utf8 ());
yylval = SCM_UNSPECIFIED;
{WORD} {
return scan_bare_word (YYText_utf8 ());
}
+ \\\" {
+ start_command_quote ();
+ }
{COMMAND}/[-_] | // backup rule
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
yylval = SCM_UNSPECIFIED;
return SCORE;
}
+ \\\" {
+ start_command_quote ();
+ }
{COMMAND}/[-_] | // backup rule
{COMMAND} {
string str (YYText_utf8 () + 1);
yy_pop_state ();
}
-<quote><<EOF>> {
+<quote,commandquote><<EOF>> {
LexerError (_ ("EOF found inside string").c_str ());
yy_pop_state ();
}
{
LexerError (_ ("Unfinished main input").c_str ());
do {
- pop_state ();
+ yy_pop_state ();
} while (YYSTATE != maininput);
}
- pop_state ();
+ extra_tokens_ = SCM_EOL;
+ yy_pop_state ();
}
if (!close_input () || !is_main_input_)
/* Returns YY_NULL */
{WORD} {
return scan_bare_word (YYText_utf8 ());
}
+ \\\" {
+ start_command_quote ();
+ }
{COMMAND}/[-_] | // backup rule
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
if (YYSTATE == notes || YYSTATE == chords)
pitchname_tab_stack_ = scm_cdr (pitchname_tab_stack_);
- yy_pop_state ();
+ // don't cross the maininput threshold
+ if (YYSTATE != maininput)
+ yy_pop_state ();
if (extra) {
hidden_state_ = YYSTATE;
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2008--2012 Han-Wen Nienhuys <hanwen@lilypond.org>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "engraver.hh"
-#include "hairpin.hh"
-#include "international.hh"
-#include "item.hh"
-#include "note-column.hh"
-#include "pointer-group-interface.hh"
-#include "self-alignment-interface.hh"
-#include "spanner.hh"
-#include "stream-event.hh"
-#include "text-interface.hh"
-
-#include "translator.icc"
-
-class New_dynamic_engraver : public Engraver
-{
- TRANSLATOR_DECLARATIONS (New_dynamic_engraver);
- DECLARE_ACKNOWLEDGER (note_column);
- DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
- DECLARE_TRANSLATOR_LISTENER (span_dynamic);
- DECLARE_TRANSLATOR_LISTENER (break_span);
-
-protected:
- virtual void process_music ();
- virtual void stop_translation_timestep ();
- virtual void finalize ();
-
-private:
- SCM get_property_setting (Stream_event *evt, char const *evprop,
- char const *ctxprop);
- string get_spanner_type (Stream_event *ev);
-
- Drul_array<Stream_event *> accepted_spanevents_drul_;
- Spanner *current_spanner_;
- Spanner *finished_spanner_;
-
- Item *script_;
- Stream_event *script_event_;
- Stream_event *current_span_event_;
- bool end_new_spanner_;
-};
-
-New_dynamic_engraver::New_dynamic_engraver ()
-{
- script_event_ = 0;
- current_span_event_ = 0;
- script_ = 0;
- finished_spanner_ = 0;
- current_spanner_ = 0;
- accepted_spanevents_drul_.set (0, 0);
- end_new_spanner_ = false;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, absolute_dynamic);
-void
-New_dynamic_engraver::listen_absolute_dynamic (Stream_event *ev)
-{
- ASSIGN_EVENT_ONCE (script_event_, ev);
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, span_dynamic);
-void
-New_dynamic_engraver::listen_span_dynamic (Stream_event *ev)
-{
- Direction d = to_dir (ev->get_property ("span-direction"));
-
- ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev);
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, break_span);
-void
-New_dynamic_engraver::listen_break_span (Stream_event *event)
-{
- if (event->in_event_class ("break-dynamic-span-event"))
- {
- // Case 1: Already have a start dynamic event -> break applies to new
- // spanner (created later) -> set a flag
- // Case 2: no new spanner, but spanner already active -> break it now
- if (accepted_spanevents_drul_[START])
- end_new_spanner_ = true;
- else if (current_spanner_)
- current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
- }
-}
-
-SCM
-New_dynamic_engraver::get_property_setting (Stream_event *evt,
- char const *evprop,
- char const *ctxprop)
-{
- SCM spanner_type = evt->get_property (evprop);
- if (spanner_type == SCM_EOL)
- spanner_type = get_property (ctxprop);
- return spanner_type;
-}
-
-void
-New_dynamic_engraver::process_music ()
-{
- if (current_spanner_
- && (accepted_spanevents_drul_[STOP]
- || script_event_
- || accepted_spanevents_drul_[START]))
- {
- Stream_event *ender = accepted_spanevents_drul_[STOP];
- if (!ender)
- ender = script_event_;
-
- if (!ender)
- ender = accepted_spanevents_drul_[START];
-
- finished_spanner_ = current_spanner_;
- announce_end_grob (finished_spanner_, ender->self_scm ());
- current_spanner_ = 0;
- current_span_event_ = 0;
- }
-
- if (accepted_spanevents_drul_[START])
- {
- current_span_event_ = accepted_spanevents_drul_[START];
-
- string start_type = get_spanner_type (current_span_event_);
- SCM cresc_type = get_property_setting (current_span_event_, "span-type",
- (start_type + "Spanner").c_str ());
-
- if (cresc_type == ly_symbol2scm ("text"))
- {
- current_spanner_
- = make_spanner ("DynamicTextSpanner",
- accepted_spanevents_drul_[START]->self_scm ());
-
- SCM text = get_property_setting (current_span_event_, "span-text",
- (start_type + "Text").c_str ());
- if (Text_interface::is_markup (text))
- current_spanner_->set_property ("text", text);
- /*
- If the line of a text spanner is hidden, end the alignment spanner
- early: this allows dynamics to be spaced individually instead of
- being linked together.
- */
- if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
- current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
- }
- else
- {
- if (cresc_type != ly_symbol2scm ("hairpin"))
- {
- string as_string = ly_scm_write_string (cresc_type);
- current_span_event_
- ->origin ()->warning (_f ("unknown crescendo style: %s\ndefaulting to hairpin.", as_string.c_str ()));
- }
- current_spanner_ = make_spanner ("Hairpin",
- current_span_event_->self_scm ());
- }
- // if we have a break-dynamic-span event right after the start dynamic, break the new spanner immediately
- if (end_new_spanner_)
- {
- current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
- end_new_spanner_ = false;
- }
- if (finished_spanner_)
- {
- if (Hairpin::has_interface (finished_spanner_))
- Pointer_group_interface::add_grob (finished_spanner_,
- ly_symbol2scm ("adjacent-spanners"),
- current_spanner_);
- if (Hairpin::has_interface (current_spanner_))
- Pointer_group_interface::add_grob (current_spanner_,
- ly_symbol2scm ("adjacent-spanners"),
- finished_spanner_);
- }
- }
-
- if (script_event_)
- {
- script_ = make_item ("DynamicText", script_event_->self_scm ());
- script_->set_property ("text",
- script_event_->get_property ("text"));
-
- if (finished_spanner_)
- finished_spanner_->set_bound (RIGHT, script_);
- if (current_spanner_)
- current_spanner_->set_bound (LEFT, script_);
- }
-}
-
-void
-New_dynamic_engraver::stop_translation_timestep ()
-{
- if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
- finished_spanner_
- ->set_bound (RIGHT,
- unsmob_grob (get_property ("currentMusicalColumn")));
-
- if (current_spanner_ && !current_spanner_->get_bound (LEFT))
- current_spanner_
- ->set_bound (LEFT,
- unsmob_grob (get_property ("currentMusicalColumn")));
- script_ = 0;
- script_event_ = 0;
- accepted_spanevents_drul_.set (0, 0);
- finished_spanner_ = 0;
- end_new_spanner_ = false;
-}
-
-void
-New_dynamic_engraver::finalize ()
-{
- if (current_spanner_
- && !current_spanner_->is_live ())
- current_spanner_ = 0;
- if (current_spanner_)
- {
- current_span_event_
- ->origin ()->warning (_f ("unterminated %s",
- get_spanner_type (current_span_event_)
- .c_str ()));
- current_spanner_->suicide ();
- current_spanner_ = 0;
- }
-}
-
-string
-New_dynamic_engraver::get_spanner_type (Stream_event *ev)
-{
- string type;
- SCM start_sym = scm_car (ev->get_property ("class"));
-
- if (start_sym == ly_symbol2scm ("decrescendo-event"))
- type = "decrescendo";
- else if (start_sym == ly_symbol2scm ("crescendo-event"))
- type = "crescendo";
- else
- programming_error ("unknown dynamic spanner type");
-
- return type;
-}
-
-void
-New_dynamic_engraver::acknowledge_note_column (Grob_info info)
-{
- if (script_ && !script_->get_parent (X_AXIS))
- {
- extract_grob_set (info.grob (), "note-heads", heads);
- Grob *stem = unsmob_grob (info.grob ()->get_object ("stem"));
- /*
- Spacing constraints may require dynamics to be aligned on rests,
- so check for a rest if this note column has no note heads.
- */
- Grob *x_parent = (heads.size ()
- ? heads[0]
- : unsmob_grob (info.grob ()->get_object ("rest")));
- if (x_parent)
- {
- script_->set_parent (x_parent, X_AXIS);
- Self_alignment_interface::set_center_parent (script_, X_AXIS);
- }
- if (stem)
- Pointer_group_interface::add_grob (script_, ly_symbol2scm ("potential-X-colliding-grobs"), stem);
- }
-
- if (current_spanner_ && !current_spanner_->get_bound (LEFT))
- current_spanner_->set_bound (LEFT, info.grob ());
- if (finished_spanner_ && !finished_spanner_->get_bound (RIGHT))
- finished_spanner_->set_bound (RIGHT, info.grob ());
-}
-
-ADD_ACKNOWLEDGER (New_dynamic_engraver, note_column);
-ADD_TRANSLATOR (New_dynamic_engraver,
- /* doc */
- "Create hairpins, dynamic texts and dynamic text spanners.",
-
- /* create */
- "DynamicTextSpanner "
- "DynamicText "
- "Hairpin ",
-
- /* read */
- "crescendoSpanner "
- "crescendoText "
- "currentMusicalColumn "
- "decrescendoSpanner "
- "decrescendoText ",
-
- /* write */
- ""
- );
annoying layer between (rest)collision & (note-head + stem)
*/
-Interval
-Note_column::accidental_width (Grob *me)
-{
- extract_grob_set (me, "note-heads", nhs);
- vector<Grob *> accs;
- for (vsize i = 0; i < nhs.size (); i++)
- if (Grob *acc = unsmob_grob (nhs[i]->get_object ("accidental-grob")))
- accs.push_back (acc);
-
- Grob *common = common_refpoint_of_array (accs, me, X_AXIS);
- common = common_refpoint_of_array (nhs, common, X_AXIS);
-
- Interval nhs_ex = Axis_group_interface::relative_group_extent (nhs, common, X_AXIS);
- Interval accs_ex = Axis_group_interface::relative_group_extent (accs, common, X_AXIS);
-
- if (nhs_ex.is_empty ())
- return accs_ex;
-
- // want an empty interval here
- if (accs_ex.is_empty ())
- return Interval ();
-
- return Interval (accs_ex[LEFT], nhs_ex[LEFT]);
-}
-
bool
Note_column::has_rests (Grob *me)
{
#include "lookup.hh"
#include "lookup.hh"
#include "moment.hh"
-#include "note-head.hh"
#include "output-def.hh"
#include "paper-score.hh"
#include "pointer-group-interface.hh"
return align->extent (p, X_AXIS);
}
-
/*
Print a vertical line and the rank number, to aid debugging.
*/
embedded_lilypond:
/* empty */
{
+ // FIXME: @$ does not contain a useful source location
+ // for empty rules, and the only token in the whole
+ // production, EMBEDDED_LILY, is synthetic and also
+ // contains no source location.
$$ = MAKE_SYNTAX ("void-music", @$);
}
| identifier_init
CONTEXT '{' context_def_spec_body '}'
{
$$ = $3;
+ unsmob_context_def ($$)->origin ()->set_spot (@$);
}
;
context_def_spec_body:
/**/ {
$$ = Context_def::make_scm ();
- unsmob_context_def ($$)->origin ()->set_spot (@$);
}
| CONTEXT_DEF_IDENTIFIER {
$$ = $1;
- unsmob_context_def ($$)->origin ()->set_spot (@$);
}
| context_def_spec_body context_mod {
if (!SCM_UNBNDP ($2))
book_block:
BOOK '{' book_body '}' {
$$ = $3;
+ unsmob_book ($$)->origin ()->set_spot (@$);
pop_paper (parser);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), SCM_BOOL_F);
}
{
Book *book = new Book;
init_papers (parser);
- book->origin ()->set_spot (@$);
book->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
book->paper_->unprotect ();
push_paper (parser, book->paper_);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $$);
}
| BOOK_IDENTIFIER {
- unsmob_book ($1)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-book"), $1);
}
| book_body paper_block {
bookpart_block:
BOOKPART '{' bookpart_body '}' {
$$ = $3;
+ unsmob_book ($$)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), SCM_BOOL_F);
}
;
bookpart_body:
{
Book *book = new Book;
- book->origin ()->set_spot (@$);
$$ = book->unprotect ();
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $$);
}
| BOOK_IDENTIFIER {
- unsmob_book ($1)->origin ()->set_spot (@$);
parser->lexer_->set_identifier (ly_symbol2scm ("$current-bookpart"), $1);
}
| bookpart_body paper_block {
music_or_context_def:
music_arg
- {
- parser->lexer_->pop_state ();
- }
- | CONTEXT
- {
- parser->lexer_->pop_state ();
- } '{' context_def_spec_body '}'
- {
- $$ = $4;
- }
+ | context_def_spec_block
;
output_def_body:
parser->lexer_->push_note_state (nn);
} music_or_context_def
{
+ parser->lexer_->pop_state ();
if (unsmob_context_def ($3))
assign_context_def (unsmob_output_def ($1), $3);
else {
;
context_modification:
- WITH { parser->lexer_->push_initial_state (); } '{' context_mod_list '}'
+ WITH
+ {
+ SCM nn = parser->lexer_->lookup_identifier ("pitchnames");
+ parser->lexer_->push_note_state (nn);
+ } '{' context_mod_list '}'
{
parser->lexer_->pop_state ();
$$ = $4;
{
$$ = $1;
}
- | WITH embedded_scm_closed
+ | WITH context_modification_arg
{
+ if (unsmob_music ($2)) {
+ SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+ $2 = scm_call_2 (proc, parser->self_scm (), $2);
+ }
if (unsmob_context_mod ($2))
$$ = $2;
else {
}
;
+context_modification_arg:
+ embedded_scm_closed
+ | MUSIC_IDENTIFIER
+ ;
+
optional_context_mod:
/**/ {
$$ = SCM_EOL;
}
/*
- Maintain a minimum distance to the staff. This is similar to side
- position with padding, but it will put adjoining objects on a row if
+ Ensure 'staff-padding' from my refpoint to the staff. This is similar to
+ side-position with padding, but it will put adjoining objects on a row if
stuff sticks out of the staff a little.
*/
Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
Real staff_position = staff->maybe_pure_coordinate (common, Y_AXIS, pure, start, end);
Interval staff_extent = staff->maybe_pure_extent (staff, a, pure, start, end);
Real diff = (dir * staff_extent[dir] + staff_padding
- - dir * (total_off + iv[-dir])
+ - dir * total_off
+ dir * (staff_position - parent_position));
total_off += dir * max (diff, 0.0);
}
/*
TODO:
- Should insert a adjustable space here? For excercises, you might want to
+ Should insert an adjustable space here? For exercises, you might want to
use a staff without a clef in the beginning.
*/
void
Tie_engraver::listen_tie (Stream_event *ev)
{
- ASSIGN_EVENT_ONCE (event_, ev);
+ if (!to_boolean (get_property ("skipTypesetting")))
+ {
+ ASSIGN_EVENT_ONCE (event_, ev);
+ }
}
void Tie_engraver::report_unterminated_tie (Head_event_tuple const &tie_start)
"TieColumn ",
/* read */
+ "skipTypesetting "
"tieWaitForNote ",
/* write */
{
Spanner *me = dynamic_cast<Spanner *> (me_grob);
- if (me->get_bound (LEFT)->break_status_dir ()
- || me->get_bound (RIGHT)->break_status_dir ())
+ Item *left = me->get_bound (LEFT);
+ Item *right = me->get_bound (RIGHT);
+ if (!left || left->break_status_dir ()
+ || !right || right->break_status_dir ())
return 0;
Drul_array<Grob *> stems (Note_column::get_stem (cols[0]),
tuplets_.pop_back ();
}
else if (!to_boolean (get_property ("skipTypesetting")))
- ev->origin ()->warning (_ ("No tuplet to end"));
+ ev->origin ()->debug_output (_ ("No tuplet to end"));
}
else
ev->origin ()->programming_error ("direction tuplet-span-event_ invalid.");
stopped_tuplets_[i].bracket_->get_bound (LEFT));
}
else
- programming_error ("stopped tuplet bracket has neither left nor right bound");
+ {
+ warning ("omitting tuplet bracket with neither left nor right bound");
+ continue;
+ }
}
// todo: scrap last_tuplets_, use stopped_tuplets_ only.
// clear stopped_tuplets_ at start_translation_timestep
{
if (prev_prefix_set & VIRGA)
/*
- * After a virga, make a an additional small space such that the
+ * After a virga, make an additional small space such that the
* appendix on the right side of the head does not touch the
* following head.
*/
if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER))
/*
- * Before a flexa (but not within a torculus), make a an
+ * Before a flexa (but not within a torculus), make an
* additional small space such that the appendix on the left side
* of the flexa does not touch the this head.
*/
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.17.11"
+\version "2.17.29"
\context {
\name "Global"
\consists "Beam_engraver"
\consists "Grace_beam_engraver"
\consists "Auto_beam_engraver"
+ \consists "Grace_auto_beam_engraver"
%% must come before Script_column_engraver.
\consists "New_fingering_engraver"
\consists "Part_combine_engraver"
\consists "Text_engraver"
- \consists "New_dynamic_engraver"
+ \consists "Dynamic_engraver"
\consists "Dynamic_align_engraver"
-% \consists "Dynamic_engraver"
\consists "Fingering_engraver"
\consists "Bend_engraver"
\consists "Bar_engraver"
\consists "Piano_pedal_engraver"
\consists "Script_engraver"
- \consists "New_dynamic_engraver"
+ \consists "Dynamic_engraver"
\consists "Dynamic_align_engraver"
\consists "Text_engraver"
\consists "Text_spanner_engraver"
toplevel-book-handler)))
(cond ((pair? toplevel-bookparts)
(let ((book (ly:make-book $defaultpaper $defaultheader)))
- (map (lambda (part)
- (ly:book-add-bookpart! book part))
- (reverse! toplevel-bookparts))
+ (for-each (lambda (part)
+ (ly:book-add-bookpart! book part))
+ (reverse! toplevel-bookparts))
(set! toplevel-bookparts (list))
;; if scores have been defined after the last explicit \bookpart:
(if (pair? toplevel-scores)
- (map (lambda (score)
- (ly:book-add-score! book score))
- (reverse! toplevel-scores)))
+ (for-each (lambda (score)
+ (ly:book-add-score! book score))
+ (reverse! toplevel-scores)))
(set! toplevel-scores (list))
(book-handler parser book)))
((or (pair? toplevel-scores) output-empty-score-list)
overrideTimeSignatureSettings =
#(define-music-function
(parser location time-signature base-moment beat-structure beam-exceptions)
- (pair? pair? cheap-list? cheap-list?)
+ (fraction? fraction? list? list?)
(_i "Override @code{timeSignatureSettings}
for time signatures of @var{time-signature} to have settings
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.17.11"
+\version "2.17.14"
%%
%% setup for Request->Element conversion.
.SUFFIXES: .html .info .texi .texinfo
# Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
$(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%/index.html $(TRANSLATION_LILY_IMAGES)
mkdir -p $(dir $@)
mkdir -p $(dir $@)
cp -f $< $@
-$(outdir)/version.%: $(top-src-dir)/VERSION
- $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
-
-$(outdir)/weblinks.%: $(top-src-dir)/VERSION
- $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@
-
$(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png
ln -f $< $@
$(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures
$(outdir)/pictures:
- $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1
+ $(MAKE) -C $(top-build-dir)/Documentation/pictures out=www WWW-1
ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@
$(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES)
ifeq ($(out),www)
ifneq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
endif
ifeq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
endif
local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET)
ITELY_FILES := $(call src-wildcard,*.itely)
ITEXI_FILES := $(call src-wildcard,*.itexi)
-DOCUMENTATION_INCLUDES = \
+DOCUMENTATION_INCLUDES += \
+ -I $(top-build-dir)/Documentation/$(outdir) \
+ -I $(top-build-dir)/Documentation/snippets/out \
-I $(top-src-dir)/Documentation/$(ISOLANG)/included \
+ -I $(top-src-dir)/Documentation/included \
-I $(top-src-dir)/Documentation \
- -I $(top-build-dir)/Documentation/$(outdir)
+ -I $(top-src-dir)/input/regression
-LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES)
MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES)
MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
CONVERT_LY = $(script-dir)/convert-ly.py
LILYPOND_BOOK = $(script-dir)/lilypond-book.py
-LILYPOND_BOOK_INCLUDES = -I $(outdir) -I $(src-dir) -I $(input-dir) \
- -I $(top-src-dir)/Documentation -I $(top-build-dir)/Documentation/snippets/out \
- -I $(input-dir)/regression/ -I $(top-src-dir)/Documentation/included/ \
- -I $(top-build-dir)/mf/$(outconfbase)/ \
- -I $(top-build-dir)/mf/out/ \
- -I $(top-src-dir)/Documentation/pictures \
- -I $(top-build-dir)/Documentation/pictures/$(outdir)
+LILYPOND_BOOK_INCLUDES = -I $(src-dir) $(DOCUMENTATION_INCLUDES)
## override from cmd line to speed up.
ANTI_ALIAS_FACTOR=2
install-out
LOCALSTEPMAKE_TEMPLATES = lilypond
-# We don't use $(MF_FILES), because there's more .mf cruft here
+# These are the main .mf files. We don't use $(MF_FILES) here,
+# because there are more .mf files, input'ed into the main files.
FETA_MF_FILES = $(call src-wildcard,feta[0-9]*.mf) \
$(call src-wildcard,feta-braces-[a-z].mf) \
$(call src-wildcard,feta-alphabet*[0-9].mf) \
SVG_FILES = $(OTF_FILES:%.otf=%.svg)
WOFF_FILES = $(OTF_FILES:%.otf=%.woff)
-FC_FIND = $(shell $(FCLIST) --verbose 'Century Schoolbook L:style=$(1)' \
- | grep 'file:' \
- | sed 's/.*"\([^"]*\)".*/\1/g')
-
NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \
CenturySchL-BoldItal.otf \
CenturySchL-Roma.otf \
CenturySchL-Bold.otf)
-NCSB_INSTALL_DIR = $(local_lilypond_datadir)/fonts/otf
LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log)
LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp)
$< --dir=$(outdir)
-# Make tfm files first, log files last,
-# so that normally log files aren't made twice
-ALL_GEN_FILES = $(LOG_FILES) \
+# Generate emmentaler-*.pe scripts first, and *.otf, *.svg, *.woff files last,
+# so that normally these files aren't regenerated on a subsequent call to make.
+ALL_GEN_FILES = $(PE_SCRIPTS) \
+ $(LOG_FILES) \
$(ENC_FILES) \
$(LISP_FILES) \
$(OTF_TABLES) \
enddef;
-def draw_neomensural_black_head (expr width, height) =
+def draw_neomensural_black_head (expr width, height, concaveness) =
save head_width, head_height, stem_width;
save ne, nw, ne_dist, nw_dist;
pair ne, nw, ne_dist, nw_dist;
ne_dist := (nw rotated -90) * blot_diameter / 2;
fill lft z1
- .. (z1 + nw_dist)
- -- (z2 + nw_dist)
+ .. (z1 + nw_dist){ ne rotated -concaveness }
+ .. { ne rotated concaveness }(z2 + nw_dist)
.. top z2
- .. (z2 + ne_dist)
- -- (z3 + ne_dist)
+ .. (z2 + ne_dist){ nw rotated (180 - concaveness) }
+ .. { nw rotated (180 + concaveness) }(z3 + ne_dist)
.. rt z3
- .. (z3 - nw_dist)
- -- (z4 - nw_dist)
+ .. (z3 - nw_dist){ ne rotated (180 - concaveness) }
+ .. { ne rotated (180 + concaveness) }(z4 - nw_dist)
.. bot z4
- .. (z4 - ne_dist)
- -- (z1 - ne_dist)
+ .. (z4 - ne_dist){ nw rotated -concaveness }
+ .. { nw rotated concaveness }(z1 - ne_dist)
.. cycle;
labels (1, 2, 3, 4);
enddef;
-def draw_neomensural_open_head (expr width, height)=
- draw_neomensural_black_head (width, height);
+def draw_neomensural_open_head (expr width, height, concaveness)=
+ draw_neomensural_black_head (width, height, concaveness);
save headNW, headSW, stem_width;
nm_height := noteheight#;
nm_width := staff_space#;
fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural");
- draw_neomensural_open_head (nm_width, nm_height);
+ draw_neomensural_open_head (nm_width, nm_height, 0);
fet_endchar;
fet_beginchar ("Neo-mensural minima head", "s1neomensural");
- draw_neomensural_open_head (nm_width, nm_height);
+ draw_neomensural_open_head (nm_width, nm_height, 0);
fet_endchar;
fet_beginchar ("Neo-mensural semiminima head", "s2neomensural");
- draw_neomensural_black_head (nm_width, nm_height);
+ draw_neomensural_black_head (nm_width, nm_height, 0);
fet_endchar;
%%%%%%%%
%
fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic");
- draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#);
+ draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#, 5);
charwx := head_width#;
charwy := 0;
fet_endchar;
fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic");
- draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#);
+ draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#, 5);
charwx := head_width#;
charwy := 0;
fet_endchar;
petrucci_width := .72 petrucci_height;
fet_beginchar ("Petrucci semibrevis head", "s0petrucci");
- draw_neomensural_open_head (petrucci_width, petrucci_height);
+ draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
fet_endchar;
fet_beginchar ("Petrucci minima head", "s1petrucci");
- draw_neomensural_open_head (petrucci_width, petrucci_height);
+ draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
fet_endchar;
fet_beginchar ("Petrucci semiminima head", "s2petrucci");
- draw_neomensural_black_head (petrucci_width, petrucci_height);
+ draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
fet_endchar;
%
fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci");
- draw_neomensural_black_head (petrucci_width, petrucci_height);
+ draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
fet_endchar;
fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci");
- draw_neomensural_black_head (petrucci_width, petrucci_height);
+ draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
fet_endchar;
fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci");
- draw_neomensural_black_head (petrucci_width, petrucci_height);
+ draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
fet_endchar;
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.17.26\n"
+"Project-Id-Version: lilypond 2.17.28\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2013-09-08 15:34+0100\n"
+"POT-Creation-Date: 2013-10-06 16:14+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "beamExceptions controls whole-measure beaming."
msgstr ""
-#: convertrules.py:3584
+#: convertrules.py:3606
msgid "Flag.transparent and Flag.color inherit from Stem"
msgstr ""
+#: convertrules.py:3672
+msgid ""
+"Staff-padding now controls the distance to the baseline, not the nearest "
+"point."
+msgstr ""
+
#: fontextract.py:25
#, python-format
msgid "Scanning %s"
msgid "show warranty and copyright"
msgstr ""
-#: convert-ly.py:189
+#: convert-ly.py:190
msgid "Applying conversion: "
msgstr ""
-#: convert-ly.py:204
+#: convert-ly.py:209
msgid "Error while converting"
msgstr ""
-#: convert-ly.py:206
+#: convert-ly.py:211
msgid "Stopping at last successful rule"
msgstr ""
-#: convert-ly.py:234
+#: convert-ly.py:239
#, python-format
msgid "Processing `%s'... "
msgstr ""
-#: convert-ly.py:344
+#: convert-ly.py:354
#, python-format
msgid "%s: Unable to open file"
msgstr ""
-#: convert-ly.py:350
+#: convert-ly.py:360
#, python-format
msgid "%s: Unable to determine version. Skipping"
msgstr ""
-#: convert-ly.py:356
+#: convert-ly.py:366
#, python-format
msgid ""
"%s: Invalid version string `%s' \n"
"`2.8.12'"
msgstr ""
-#: convert-ly.py:362
+#: convert-ly.py:372
#, python-format
msgid "There was %d error."
msgid_plural "There were %d errors."
msgid "already have a beam"
msgstr ""
-#: beam-engraver.cc:231
+#: beam-engraver.cc:235
msgid "unterminated beam"
msgstr ""
-#: beam-engraver.cc:270 chord-tremolo-engraver.cc:149
+#: beam-engraver.cc:282 chord-tremolo-engraver.cc:149
msgid "stem must have Rhythmic structure"
msgstr ""
-#: beam-engraver.cc:281
+#: beam-engraver.cc:293
msgid "stem does not fit in beam"
msgstr ""
-#: beam-engraver.cc:282
+#: beam-engraver.cc:294
msgid "beam was started here"
msgstr ""
msgid "cannot find or create: `%s'"
msgstr ""
+#: context.cc:439
+#, c-format
+msgid "cannot find or create new Bottom = \"%s\""
+msgstr ""
+
#: custos.cc:87
#, c-format
msgid "custos `%s' not found"
msgid "unterminated text spanner"
msgstr ""
-#: tie-engraver.cc:116
+#: tie-engraver.cc:119
msgid "unterminated tie"
msgstr ""
-#: tie-engraver.cc:350
+#: tie-engraver.cc:353
msgid "lonely tie"
msgstr ""
msgid "Too much lookahead"
msgstr ""
-#: parser.yy:458 parser.yy:756 parser.yy:823
+#: parser.yy:458 parser.yy:759 parser.yy:825
msgid "bad expression type"
msgstr ""
-#: parser.yy:652 parser.yy:1151
+#: parser.yy:657 parser.yy:1153
msgid "not a context mod"
msgstr ""
-#: parser.yy:858
+#: parser.yy:860
msgid "score expected"
msgstr ""
-#: parser.yy:874
+#: parser.yy:876
msgid "\\paper cannot be used in \\score, use \\layout instead"
msgstr ""
-#: parser.yy:898
+#: parser.yy:900
msgid "need \\paper for paper block"
msgstr ""
-#: parser.yy:1046 parser.yy:1068
+#: parser.yy:1040 parser.yy:1062
msgid "unexpected post-event"
msgstr ""
-#: parser.yy:1076
+#: parser.yy:1070
msgid "Ignoring non-music expression"
msgstr ""
-#: parser.yy:1087 parser.yy:2373
+#: parser.yy:1081 parser.yy:2380
msgid "music expected"
msgstr ""
-#: parser.yy:1355
+#: parser.yy:1362
msgid "not a symbol"
msgstr ""
-#: parser.yy:2044 parser.yy:2158 parser.yy:2171 parser.yy:2180
+#: parser.yy:2051 parser.yy:2165 parser.yy:2178 parser.yy:2187
msgid "bad grob property path"
msgstr ""
-#: parser.yy:2138
+#: parser.yy:2145
msgid "only \\consists and \\remove take non-string argument."
msgstr ""
-#: parser.yy:2199
+#: parser.yy:2206
msgid "bad context property path"
msgstr ""
-#: parser.yy:2300
+#: parser.yy:2307
msgid "simple string expected"
msgstr ""
-#: parser.yy:2318
+#: parser.yy:2325
msgid "symbol expected"
msgstr ""
-#: parser.yy:2482
+#: parser.yy:2489
msgid "not a rhythmic event"
msgstr ""
-#: parser.yy:2556
+#: parser.yy:2563
msgid "post-event expected"
msgstr ""
-#: parser.yy:2565 parser.yy:2570
+#: parser.yy:2572 parser.yy:2577
msgid "have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:2638
+#: parser.yy:2645
msgid "expecting string as script definition"
msgstr ""
-#: parser.yy:2733
+#: parser.yy:2740
msgid "not an articulation"
msgstr ""
-#: parser.yy:2805 parser.yy:2851
+#: parser.yy:2812 parser.yy:2858
#, c-format
msgid "not a duration: %d"
msgstr ""
-#: parser.yy:2868
+#: parser.yy:2875
msgid "bass number expected"
msgstr ""
-#: parser.yy:2967
+#: parser.yy:2974
msgid "have to be in Note mode for notes"
msgstr ""
-#: parser.yy:3026
+#: parser.yy:3033
msgid "have to be in Chord mode for chords"
msgstr ""
-#: parser.yy:3041
+#: parser.yy:3048
msgid "markup outside of text script or \\lyricmode"
msgstr ""
-#: parser.yy:3046
+#: parser.yy:3053
msgid "unrecognized string, not in text script or \\lyricmode"
msgstr ""
-#: parser.yy:3254
+#: parser.yy:3261
msgid "not a markup"
msgstr ""
-#: lexer.ll:214
+#: lexer.ll:224
msgid "stray UTF-8 BOM encountered"
msgstr ""
-#: lexer.ll:217
+#: lexer.ll:227
msgid "Skipping UTF-8 BOM"
msgstr ""
-#: lexer.ll:269
+#: lexer.ll:279
#, c-format
msgid "Renaming input to: `%s'"
msgstr ""
-#: lexer.ll:286
+#: lexer.ll:296
msgid "quoted string expected after \\version"
msgstr ""
-#: lexer.ll:290
+#: lexer.ll:300
msgid "quoted string expected after \\sourcefilename"
msgstr ""
-#: lexer.ll:294
+#: lexer.ll:304
msgid "integer expected after \\sourcefileline"
msgstr ""
-#: lexer.ll:321
+#: lexer.ll:331
msgid "\\maininput not allowed outside init files"
msgstr ""
-#: lexer.ll:345
+#: lexer.ll:355
#, c-format
msgid "wrong or undefined identifier: `%s'"
msgstr ""
-#: lexer.ll:371
+#: lexer.ll:381
msgid "string expected after \\include"
msgstr ""
-#: lexer.ll:381
+#: lexer.ll:391
msgid "end quote missing"
msgstr ""
-#: lexer.ll:717
+#: lexer.ll:743
msgid "EOF found inside a comment"
msgstr ""
-#: lexer.ll:722
+#: lexer.ll:748
msgid "EOF found inside string"
msgstr ""
-#: lexer.ll:737
+#: lexer.ll:763
msgid "Unfinished main input"
msgstr ""
-#: lexer.ll:804
+#: lexer.ll:834
#, c-format
msgid "invalid character: `%s'"
msgstr ""
-#: lexer.ll:931
+#: lexer.ll:963
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:951
+#: lexer.ll:983
#, c-format
msgid "undefined character or shorthand: %s"
msgstr ""
-#: lexer.ll:1247
+#: lexer.ll:1279
msgid "non-UTF-8 input"
msgstr ""
-#: lexer.ll:1291
+#: lexer.ll:1323
#, c-format
msgid "file too old: %s (oldest supported: %s)"
msgstr ""
-#: lexer.ll:1292
+#: lexer.ll:1324
msgid "consider updating the input with the convert-ly script"
msgstr ""
-#: lexer.ll:1298
+#: lexer.ll:1330
#, c-format
msgid "program too old: %s (file requires: %s)"
msgstr ""
msgid "Writing header field `~a' to `~a'..."
msgstr ""
-#: backend-library.scm:190
+#: backend-library.scm:189
#, scheme-format
msgid "missing stencil expression `~S'"
msgstr ""
msgid "no systems found in \\score markup, does it have a \\layout block?"
msgstr ""
-#: define-markup-commands.scm:2832
+#: define-markup-commands.scm:2856
#, scheme-format
msgid "Cannot find glyph ~a"
msgstr ""
-#: define-markup-commands.scm:3258
+#: define-markup-commands.scm:3282
#, scheme-format
msgid "no brace found for point size ~S "
msgstr ""
-#: define-markup-commands.scm:3259
+#: define-markup-commands.scm:3283
#, scheme-format
msgid "defaulting to ~S pt"
msgstr ""
-#: define-markup-commands.scm:3503
+#: define-markup-commands.scm:3527
#, scheme-format
msgid "not a valid duration string: ~a"
msgstr ""
-#: define-markup-commands.scm:3714
+#: define-markup-commands.scm:3738
#, scheme-format
msgid "not a valid duration string: ~a - ignoring"
msgstr ""
-#: define-music-types.scm:783
+#: define-music-types.scm:792
#, scheme-format
msgid "symbol expected: ~S"
msgstr ""
-#: define-music-types.scm:786
+#: define-music-types.scm:795
#, scheme-format
msgid "cannot find music object: ~S"
msgstr ""
-#: define-music-types.scm:805
+#: define-music-types.scm:815
+#, scheme-format
+msgid "bad make-music argument: ~S"
+msgstr ""
+
+#: define-music-types.scm:827
#, scheme-format
msgid "unknown repeat type `~S'"
msgstr ""
-#: define-music-types.scm:806
+#: define-music-types.scm:828
msgid "See define-music-types.scm for supported repeats"
msgstr ""
-#: define-note-names.scm:971
+#: define-note-names.scm:972
msgid "Select note names language."
msgstr ""
-#: define-note-names.scm:977
+#: define-note-names.scm:978
#, scheme-format
msgid "Using `~a' note names..."
msgstr ""
-#: define-note-names.scm:980
+#: define-note-names.scm:981
#, scheme-format
msgid "Could not find language `~a'. Ignoring."
msgstr ""
msgid "Music unsuitable for output-def"
msgstr ""
-#: lily-library.scm:887
+#: lily-library.scm:884
msgid ""
"Find the index between @var{start} and @var{end} (an integer)\n"
"which produces the closest match to @var{target-val} if\n"
"applied to function @var{getter}."
msgstr ""
-#: lily-library.scm:958
+#: lily-library.scm:955
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:983
+#: lily-library.scm:980
#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
msgstr ""
msgid "cannot find: ~A"
msgstr ""
-#: lily.scm:878
+#: lily.scm:877
msgid "Success: compilation successfully completed"
msgstr ""
-#: lily.scm:879
+#: lily.scm:878
msgid "Compilation completed with warnings or errors"
msgstr ""
-#: lily.scm:941
+#: lily.scm:939
#, scheme-format
msgid "job ~a terminated with signal: ~a"
msgstr ""
-#: lily.scm:944
+#: lily.scm:942
#, scheme-format
msgid ""
"logfile ~a (exit ~a):\n"
"~a"
msgstr ""
-#: lily.scm:966 lily.scm:1055
+#: lily.scm:964 lily.scm:1053
#, scheme-format
msgid "failed files: ~S"
msgstr ""
-#: lily.scm:1046
+#: lily.scm:1044
#, scheme-format
msgid "Redirecting output to ~a..."
msgstr ""
-#: lily.scm:1065 ps-to-png.scm:66
+#: lily.scm:1063 ps-to-png.scm:66
#, scheme-format
msgid "Invoking `~a'...\n"
msgstr ""
msgid "wrong type for argument ~a. Expecting ~a, found ~s"
msgstr ""
-#: ly-syntax-constructors.scm:200
+#: ly-syntax-constructors.scm:199
#, scheme-format
msgid "Invalid property operation ~a"
msgstr ""
msgid "bad grob property path ~a"
msgstr ""
-#: music-functions.scm:755
+#: music-functions.scm:753
msgid "Bad chord repetition"
msgstr ""
-#: music-functions.scm:790
+#: music-functions.scm:788
#, scheme-format
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1133
+#: music-functions.scm:1144
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1271
+#: music-functions.scm:1282
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1331
+#: music-functions.scm:1342
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1332
+#: music-functions.scm:1343
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1677
+#: music-functions.scm:1688
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
msgid "~a exited with status: ~S"
msgstr ""
-#: to-xml.scm:191
+#: to-xml.scm:190
#, scheme-format
msgid "assertion failed: ~S"
msgstr ""
r"\1/\2", str)
return str
+@rule((2, 17, 14), r"\accepts ... -> \accepts ... \defaultchild ...")
+def conv(str):
+ def matchaccepts(m):
+ # First weed out definitions starting from an existing
+ # definition: we assume that the inherited \defaultchild is
+ # good enough for our purposes. Heuristic: starts with a
+ # backslash and an uppercase letter.
+ if re.match (r"\s*\\[A-Z]", m.group (1)):
+ return m.group (0)
+ # existing defaultchild obviously trumps all
+ if re.search (r"\\defaultchild[^-_a-zA-Z]", m.group (1)):
+ return m.group (0)
+ # take the first \\accepts if any and replicate it
+ return re.sub ("(\r?\n[ \t]*|[ \t]+)"
+ + r"""\\accepts(\s+(?:#?".*?"|[-_a-zA-Z]+))""",
+ r"\g<0>\1\\defaultchild\2",
+ m.group (0), 1)
+
+ str = re.sub (r"\\context\s*@?\{(" + brace_matcher (20) + ")\}",
+ matchaccepts, str)
+ return str
+
@rule((2, 17, 15), r"""#(ly:set-option 'old-relative)
\relative -> \relative c'""")
def conv(str):
str = re.sub (words + "|" + matchstring, wordreplace, str)
return str
+@rule((2, 17, 27), r'''\stringTuning \notemode -> \stringTuning''')
+def conv(str):
+ str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
+ r"\\stringTuning\1\2", str)
+ if re.search (r'\bstaff-padding\b', str):
+ stderr_write (NOT_SMART % "staff-padding")
+ stderr_write (_ ("Staff-padding now controls the distance to the baseline, not the nearest point."))
+ return str
+
+@rule((2, 17, 29), r'''Dynamic_engraver -> New_dynamic_engraver+Dynamic_align_engraver
+New_dynamic_engraver -> Dynamic_engraver''')
+def conv(str):
+ str = re.sub ("(\r?\n?[ \t]*\\\\(?:consists|remove)\\s*)(\"?)Dynamic_engraver\\2",
+ r"\1\2New_dynamic_engraver\2\1\2Dynamic_align_engraver\2",
+ str)
+# Should we warn about any remaining Dynamic_engraver? Possibly it
+# will do the job just fine.
+ str = re.sub ("New_dynamic_engraver", "Dynamic_engraver", str)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
(define-public (output-scopes scopes fields basename)
(define (output-scope scope)
- (apply
- string-append
+ (string-concatenate
(module-map
(lambda (sym var)
(let ((val (if (variable-bound? var) (variable-ref var) "")))
(header-to-file basename sym val))
""))
scope)))
- (apply string-append (map output-scope scopes)))
+ (string-concatenate (map output-scope scopes)))
(define-public (relevant-book-systems book)
(let ((systems (ly:paper-book-systems book)))
(ly:warning (_ "missing stencil expression `~S'") name)
""))
- (map (lambda (x)
- (if (not (module-defined? output-module x))
- (begin
- (module-define! output-module x
- (lambda* (#:optional y . z)
- (missing-stencil-expression x)))
- (set! missing-stencil-list (append (list x)
- missing-stencil-list)))))
- (ly:all-stencil-commands)))
+ (for-each (lambda (x)
+ (if (not (module-defined? output-module x))
+ (begin
+ (module-define! output-module x
+ (lambda* (#:optional y . z)
+ (missing-stencil-expression x)))
+ (set! missing-stencil-list (cons x missing-stencil-list)))))
+ (ly:all-stencil-commands)))
(define-public (remove-stencil-warnings output-module)
(for-each
(define-pango-pf pango-pf font-name scaling)))
(string-append
- (apply string-append (map font-load-command other-fonts))
- (apply string-append (map pango-font-load-command pango-only-fonts)))))
+ (string-concatenate (map font-load-command other-fonts))
+ (string-concatenate (map pango-font-load-command pango-only-fonts)))))
(if (pair? line-pos)
(begin
(set! iv (cons (car line-pos) (car line-pos)))
- (map (lambda (x)
- (set! iv (cons (min (car iv) x)
- (max (cdr iv) x))))
- (cdr line-pos)))
+ (for-each (lambda (x)
+ (set! iv (cons (min (car iv) x)
+ (max (cdr iv) x))))
+ (cdr line-pos)))
(let ((line-count (ly:grob-property grob 'line-count 0)))
(last-pos (1- (length sorted-elts)))
(idx 0))
- (map (lambda (g)
- (ly:grob-set-property!
- g
- 'has-span-bar
- (cons (if (eq? idx last-pos)
- #f
- grob)
- (if (zero? idx)
- #f
- grob)))
- (set! idx (1+ idx)))
- sorted-elts)))
+ (for-each (lambda (g)
+ (ly:grob-set-property!
+ g
+ 'has-span-bar
+ (cons (if (eq? idx last-pos)
+ #f
+ grob)
+ (if (zero? idx)
+ #f
+ grob)))
+ (set! idx (1+ idx)))
+ sorted-elts)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Line break decisions.
(half-thick (/ line-thickness 2.0))
(stencil empty-stencil))
- (map (lambda (i)
- (let ((top-y (min (* (+ i dash-size) half-space)
- (+ (* (1- line-count) half-space)
- half-thick)))
- (bot-y (max (* (- i dash-size) half-space)
- (- 0 (* (1- line-count) half-space)
- half-thick))))
-
- (set! stencil
- (ly:stencil-add
- stencil
- (ly:round-filled-box (cons 0 thickness)
- (cons bot-y top-y)
- blot)))))
- (iota line-count (1- line-count) (- 2)))
+ (for-each (lambda (i)
+ (let ((top-y (min (* (+ i dash-size) half-space)
+ (+ (* (1- line-count) half-space)
+ half-thick)))
+ (bot-y (max (* (- i dash-size) half-space)
+ (- 0 (* (1- line-count) half-space)
+ half-thick))))
+
+ (set! stencil
+ (ly:stencil-add
+ stencil
+ (ly:round-filled-box (cons 0 thickness)
+ (cons bot-y top-y)
+ blot)))))
+ (iota line-count (1- line-count) (- 2)))
stencil)
(let* ((dashes (/ height staff-space))
(total-dash-size (/ height dashes))
;; the size of the staff lines is evaluated as 0, which results in a
;; solid span bar line with faulty y coordinate.
;;
-;; This routine was originally by Juergen Reuter, but it was a on the
+;; This routine was originally by Juergen Reuter, but it was on the
;; bulky side. Rewritten by Han-Wen. Ported from c++ to Scheme by Marc Hohl.
(define-public (ly:span-bar::print grob)
"The print routine for span bars."
;; we compute the extents of each system and store them
;; in a list; dito for the 'allow-span-bar property.
;; model-bar takes the bar grob, if given.
- (map (lambda (bar)
- (let ((ext (bar-line::bar-y-extent bar refp))
- (staff-symbol (ly:grob-object bar 'staff-symbol)))
-
- (if (ly:grob? staff-symbol)
- (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
-
- (set! ext (interval-union ext refp-extent))
-
- (if (> (interval-length ext) 0)
- (begin
- (set! extents (append extents (list ext)))
- (set! model-bar bar)
- (set! make-span-bars
- (append make-span-bars
- (list (ly:grob-property
- bar
- 'allow-span-bar
- #t))))))))))
- elts)
+ (for-each (lambda (bar)
+ (let ((ext (bar-line::bar-y-extent bar refp))
+ (staff-symbol (ly:grob-object bar 'staff-symbol)))
+
+ (if (ly:grob? staff-symbol)
+ (let ((refp-extent (ly:grob-extent staff-symbol refp Y)))
+
+ (set! ext (interval-union ext refp-extent))
+
+ (if (> (interval-length ext) 0)
+ (begin
+ (set! extents (append extents (list ext)))
+ (set! model-bar bar)
+ (set! make-span-bars
+ (append make-span-bars
+ (list (ly:grob-property
+ bar
+ 'allow-span-bar
+ #t))))))))))
+ elts)
;; if there is no bar grob, we use the callback argument
(if (not model-bar)
(set! model-bar grob))
partial-markup-prefix
(make-normal-size-super-markup
(markup-join
- (apply append
- (map step->markup
- (append altered
- (if (and (> (step-nr highest) 5)
- (not
- (step-even-or-altered? highest)))
- (list highest) '())))
- (list partial-markup-suffix)
- (list (map sub->markup missing)))
+ (append
+ (map step->markup
+ (append altered
+ (if (and (> (step-nr highest) 5)
+ (not
+ (step-even-or-altered? highest)))
+ (list highest) '())))
+ (list partial-markup-suffix)
+ (map sub->markup missing))
sep)))))))
;; no exception.
;; handle sus4 and sus2 suffix: if there is a 3 together with
;; sus2 or sus4, then we explicitly say add3.
- (map
+ (for-each
(lambda (j)
(if (get-step j pitches)
(begin
beamlet is determined by taking either the default length or the
length specified by @code{beamlet-max-length-proportion}, whichever is
smaller.")
- (beam-gap ,number-pair? "Size of a gap in a @code{Beam}.")
(beamlet-max-length-proportion ,pair? "The maximum length of a
beamlet, as a proportion of the distance between two adjacent stems.")
(before-line-breaking ,boolean? "Dummy property, used to trigger
;; only for debugging.
(font-family . roman)
- (beam-gap . ,ly:beam::calc-beam-gap)
- (minimum-length . ,ly:beam::calc-minimum-length)
+ (gap . 0.8)
(neutral-direction . ,DOWN)
(positions . ,beam::place-broken-parts-individually)
- (springs-and-rods . ,ly:beam::calc-springs-and-rods)
(X-positions . ,ly:beam::calc-x-positions)
(transparent . ,(grob::inherit-parent-property
X 'transparent))
(color . ,(grob::inherit-parent-property
X 'color))
(self-alignment-X . ,CENTER)
- (staff-padding . 0.2)
+ (staff-padding . 0.7)
(stencil . ,ly:text-interface::print)
(X-offset . ,(ly:make-simple-closure
`(,+
(positioning-done . ,ly:script-interface::calc-positioning-done)
(right-padding . 0.5)
(self-alignment-X . ,CENTER)
- (self-alignment-Y . ,CENTER)
(stencil . ,ly:text-interface::print)
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
- (Y-offset . ,self-alignment-interface::y-aligned-on-self)
+ (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
(meta . ((class . Item)
(interfaces . (dynamic-interface
dynamic-text-interface
(outside-staff-priority . 400)
(padding . 0.5)
(shorten-pair . (0.0 . -0.6))
- (staff-padding . 1.0)
+ (staff-padding . 2.0)
(stencil . ,ly:ottava-bracket::print)
(style . dashed-line)
(vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
(SustainPedal
. (
- (direction . ,RIGHT)
(extra-spacing-width . (+inf.0 . -inf.0))
(padding . 0.0) ;; padding relative to SustainPedalLineSpanner
(self-alignment-X . ,CENTER)
;; make sure that \property Foo.Bar =\turnOff doesn't complain
-(map (lambda (x)
- ;; (display (car x)) (newline)
+(for-each (lambda (x)
+ ;; (display (car x)) (newline)
- (set-object-property! (car x) 'translation-type? list?)
- (set-object-property! (car x) 'is-grob? #t))
- all-grob-descriptions)
+ (set-object-property! (car x) 'translation-type? list?)
+ (set-object-property! (car x) 'is-grob? #t))
+ all-grob-descriptions)
(set! all-grob-descriptions (sort all-grob-descriptions alist<?))
"
@cindex drawing oval around text
-Draw a oval around @var{arg}. Use @code{thickness},
+Draw an oval around @var{arg}. Use @code{thickness},
@code{x-padding}, @code{x-padding} and @code{font-size} properties to determine
line thickness and padding around the markup.
"Perform simple wordwrap, return stencil of each line."
(define space (if justify
;; justify only stretches lines.
- (* 0.7 base-space)
- base-space))
- (define (stencil-space stencil line-start)
- (if (ly:stencil-empty? stencil X)
- 0
- (cdr (ly:stencil-extent
- (ly:stencil-stack (if line-start
- empty-stencil
- point-stencil)
- X RIGHT stencil)
- X))))
- (define (take-list width space stencils
- accumulator accumulated-width)
- "Return (head-list . tail) pair, with head-list fitting into width"
- (if (null? stencils)
- (cons accumulator stencils)
- (let* ((first (car stencils))
- (first-wid (stencil-space first (null? accumulator)))
- (newwid (+ (if (or (ly:stencil-empty? first Y)
- (ly:stencil-empty? first X))
- 0 space)
- first-wid accumulated-width)))
- (if (or (null? accumulator)
- (< newwid width))
- (take-list width space
- (cdr stencils)
- (cons first accumulator)
- newwid)
- (cons accumulator stencils)))))
- (let loop ((lines '())
- (todo stencils))
- (let* ((line-break (take-list line-width space todo
- '() 0.0))
- (line-stencils (car line-break))
- (space-left (- line-width
- (stencil-space
- (stack-stencil-line 0 line-stencils)
- #t)))
- (line-words (count (lambda (s) (not (or (ly:stencil-empty? s Y)
- (ly:stencil-empty? s X))))
- line-stencils))
- (line-word-space (cond ((not justify) space)
- ;; don't stretch last line of paragraph.
- ;; hmmm . bug - will overstretch the last line in some case.
- ((null? (cdr line-break))
- base-space)
- ((< line-words 2) space)
- (else (/ space-left (1- line-words)))))
- (line (stack-stencil-line line-word-space
- (if (= text-dir RIGHT)
- (reverse line-stencils)
- line-stencils))))
- (if (pair? (cdr line-break))
- (loop (cons line lines)
- (cdr line-break))
- (begin
- (if (= text-dir LEFT)
- (set! line
- (ly:stencil-translate-axis
- line
- (- line-width (interval-end (ly:stencil-extent line X)))
- X)))
- (reverse (cons line lines)))))))
+ (* 0.7 base-space)
+ base-space))
+ (define (stencil-len s)
+ (interval-end (ly:stencil-extent s X)))
+ (define (maybe-shift line)
+ (if (= text-dir LEFT)
+ (ly:stencil-translate-axis
+ line
+ (- line-width (stencil-len line))
+ X)
+ line))
+ (if (null? stencils)
+ '()
+ (let loop ((lines '())
+ (todo stencils))
+ (let word-loop
+ ((line (first todo))
+ (todo (cdr todo))
+ (word-list (list (first todo))))
+ (cond
+ ((pair? todo)
+ (let ((new (if (= text-dir LEFT)
+ (ly:stencil-stack (car todo) X RIGHT line space)
+ (ly:stencil-stack line X RIGHT (car todo) space))))
+ (cond
+ ((<= (stencil-len new) line-width)
+ (word-loop new (cdr todo)
+ (cons (car todo) word-list)))
+ (justify
+ (let* ((word-list
+ ;; This depends on stencil stacking being
+ ;; associative so that stacking
+ ;; left-to-right and right-to-left leads to
+ ;; the same result
+ (if (= text-dir LEFT)
+ word-list
+ (reverse! word-list)))
+ (len (stencil-len line))
+ (stretch (- line-width len))
+ (spaces
+ (- (stencil-len
+ (stack-stencils X RIGHT (1+ space) word-list))
+ len)))
+ (if (zero? spaces)
+ ;; Uh oh, nothing to fill.
+ (loop (cons (maybe-shift line) lines) todo)
+ (loop (cons
+ (stack-stencils X RIGHT
+ (+ space (/ stretch spaces))
+ word-list)
+ lines)
+ todo))))
+ (else ;; not justify
+ (loop (cons (maybe-shift line) lines) todo)))))
+ ;; todo is null
+ (justify
+ ;; Now we have the last line assembled with space
+ ;; which is compressed. We want to use the
+ ;; uncompressed version instead if it fits, and the
+ ;; justified version if it doesn't.
+ (let* ((word-list
+ ;; This depends on stencil stacking being
+ ;; associative so that stacking
+ ;; left-to-right and right-to-left leads to
+ ;; the same result
+ (if (= text-dir LEFT)
+ word-list
+ (reverse! word-list)))
+ (big-line (stack-stencils X RIGHT base-space word-list))
+ (big-len (stencil-len big-line))
+ (len (stencil-len line)))
+ (reverse! lines
+ (list
+ (if (> big-len line-width)
+ (stack-stencils X RIGHT
+ (/
+ (+
+ (* (- big-len line-width)
+ space)
+ (* (- line-width len)
+ base-space))
+ (- big-len len))
+ word-list)
+ (maybe-shift big-line))))))
+ (else ;; not justify
+ (reverse! lines (list (maybe-shift line)))))))))
+
(define-markup-list-command (wordwrap-internal layout props justify args)
(boolean? markup-list?)
justify word-space
line-width text-direction)))
list-para-words)))
- (apply append para-lines)))
+ (concatenate para-lines)))
(define-markup-command (wordwrap-string layout props arg)
(string?)
Construct a note symbol, with stem and flag. By using fractional values for
@var{dir}, longer or shorter stems can be obtained.
Supports all note-head-styles.
-Supported flag-styles are @code{default}, @code{old-straight-flag} and
-@code{modern-straight-flag}.
+Supported flag-styles are @code{default}, @code{old-straight-flag},
+@code{modern-straight-flag} and @code{flat-flag}.
@lilypond[verbatim,quote]
\\markup {
(raw-length (if stem-up upflag-length downflag-length))
(angle (if stem-up upflag-angle downflag-angle))
(flag-length (+ (* raw-length factor) half-stem-thickness))
- (flag-end (polar->rectangular flag-length angle))
+ (flag-end (if (= angle 0)
+ (cons flag-length (* half-stem-thickness dir))
+ (polar->rectangular flag-length angle)))
(thickness (* flag-thickness factor))
(thickness-offset (cons 0 (* -1 thickness dir)))
(spacing (* -1 flag-spacing factor dir))
;; The points of a round-filled-polygon need to be given in
;; clockwise order, otherwise the polygon will be enlarged by
;; blot-size*2!
- (points (if stem-up (list start flag-end
- (offset-add flag-end thickness-offset)
- (offset-add start thickness-offset))
+ (points (if stem-up
+ (list start
+ flag-end
+ (offset-add flag-end thickness-offset)
+ (offset-add start thickness-offset))
(list start
(offset-add start thickness-offset)
(offset-add flag-end thickness-offset)
;; Straight-flags. Values taken from /scm/flag-style.scm
(modern-straight-flag (straight-flag-mrkp 0.55 1 -18 1.1 22 1.2 dir))
(old-straight-flag (straight-flag-mrkp 0.55 1 -45 1.2 45 1.4 dir))
+ (flat-flag (straight-flag-mrkp 0.55 1.0 0 1.0 0 1.0 dir))
;; Calculate a corrective to avoid a gap between
;; straight-flags and the stem.
(flag-style-Y-corr (if (or (eq? flag-style 'modern-straight-flag)
- (eq? flag-style 'old-straight-flag))
+ (eq? flag-style 'old-straight-flag)
+ (eq? flag-style 'flat-flag))
(/ blot 10 (* -1 dir))
0))
(flaggl (and (> log 2)
modern-straight-flag)
((eq? flag-style 'old-straight-flag)
old-straight-flag)
+ ((eq? flag-style 'flat-flag)
+ flat-flag)
(else
(ly:font-get-glyph font
(format #f (if ancient-flags?
(lambda (x) (apply music-property-description x))
`(
(absolute-octave ,integer?
- "The absolute octave for a octave check note.")
+ "The absolute octave for an octave check note.")
(alteration ,number? "Alteration for figured bass.")
(alternative-dir ,ly:dir? "Indicates if an AlternativeMusic is the
First (-1), Middle (0), or Last (1) of group of alternate endings.")
(pitch ,ly:pitch? "The pitch of this note.")
(pitch-alist ,list? "A list of pitches jointly forming the scale
of a key signature.")
- (pop-first ,boolean? "Do a revert before we try to do a override
+ (pop-first ,boolean? "Do a revert before we try to do an override
on some grob property.")
(prob-property ,symbol? "The symbol of the prob property to set.")
(procedure ,procedure? "The function to run with @code{\\applycontext}.
))
(AlternativeEvent
- . ((description . "Create a alternative event.")
+ . ((description . "Create an alternative event.")
(types . (general-music event alternative-event))
))
))
(UnfoldedRepeatedMusic
- . ((description . "Repeated music which is fully written
-(and played) out.")
+ . ((description . "Repeated music which is fully written (and
+played) out.")
(iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
(start-callback . ,ly:repeated-music::first-start)
(types . (general-music repeated-music unfolded-repeated-music))
"Create a music object of given name, and set its properties
according to @code{music-properties}, a list of alternating property symbols
and values. E.g:
+@example
(make-music 'OverrideProperty
'symbol 'Stem
'grob-property 'thickness
- 'grob-value (* 2 1.5))"
+ 'grob-value (* 2 1.5))
+@end example
+Instead of a successive symbol and value, an entry in the list may
+also be an alist or a music object in which case its elements,
+respectively its @emph{mutable} property list (properties not inherent
+to the type of the music object) will get taken.
+
+The argument list will be interpreted left-to-right, so later entries
+override earlier ones."
(if (not (symbol? name))
(ly:error (_ "symbol expected: ~S") name))
(let ((props (hashq-ref music-name-to-property-table name '())))
(if (not (pair? props))
(ly:error (_ "cannot find music object: ~S") name))
(let ((m (ly:make-music props)))
+ (define (alist-set-props lst)
+ (for-each (lambda (e)
+ (set! (ly:music-property m (car e)) (cdr e)))
+ (reverse lst)))
(define (set-props mus-props)
- (if (and (not (null? mus-props))
- (not (null? (cdr mus-props))))
- (begin
- (set! (ly:music-property m (car mus-props)) (cadr mus-props))
- (set-props (cddr mus-props)))))
+ (if (pair? mus-props)
+ (let ((e (car mus-props))
+ (mus-props (cdr mus-props)))
+ (cond ((symbol? e)
+ (set! (ly:music-property m e) (car mus-props))
+ (set-props (cdr mus-props)))
+ ((ly:music? e)
+ (alist-set-props (ly:music-mutable-properties e))
+ (set-props mus-props))
+ ((cheap-list? e)
+ (alist-set-props e)
+ (set-props mus-props))
+ (else
+ (ly:error (_ "bad make-music argument: ~S") e))))))
(set-props music-properties)
m)))
))
;; add two native utf-8 aliases. Pairs obey cp-like order: '(old new)
-(map (lambda (pair)
- (set! language-pitch-names
- (append language-pitch-names
- (list (cons (cadr pair)
- (cdr (assoc (car pair) language-pitch-names)))))))
- '((espanol español)
- (italiano français)))
+(for-each
+ (lambda (pair)
+ (set! language-pitch-names
+ (append language-pitch-names
+ (list (cons (cadr pair)
+ (cdr (assoc (car pair) language-pitch-names)))))))
+ '((espanol español)
+ (italiano français)))
(define-public (note-names-language parser str)
(_ "Select note names language.")
transparent-stencil
))
-(map ly:register-stencil-expression
- (append (ly:all-stencil-commands)
- (ly:all-output-backend-commands)))
+(for-each ly:register-stencil-expression
+ (append (ly:all-stencil-commands)
+ (ly:all-output-backend-commands)))
(*
(car slope-offset1)
(+ keylen (list-ref first-bezier 6))) (cdr slope-offset1))))
- ((if bezier? (lambda (x) `(,(apply append x))) identity)
+ ((if bezier? (lambda (x) `(,(concatenate x))) identity)
`((,(+ (+ keylen 1.75) (list-ref first-bezier 6))
,(+
(*
possibility-list))))
(define (translate-draw-instructions input-alist key-name-alist)
- (apply append
- (map (lambda (short long)
+ (append-map (lambda (short long)
(let*
((key-instructions
(map (lambda (instr)
(assoc-get long key-name-alist))))
(key-crawler (assoc-get short input-alist) key-instructions)))
'(hd cc lh rh)
- '(hidden central-column left-hand right-hand))))
+ '(hidden central-column left-hand right-hand)))
(define (uniform-draw-instructions key-name-alist)
- (apply append
- (map (lambda (long)
+ (append-map (lambda (long)
(map (lambda (key-instructions)
`((,long . ,(car key-instructions)) . 1))
(assoc-get long key-name-alist)))
- '(hidden central-column left-hand right-hand))))
+ '(hidden central-column left-hand right-hand)))
(define (list-all-possible-keys key-name-alist)
(map (lambda (short long)
;; properly sort all grobs, properties, and interfaces
;; within the all-grob-descriptions alist
-(map
+(for-each
(lambda (x)
(let* ((props (assoc-ref all-grob-descriptions (car x)))
(meta (assoc-ref props 'meta))
(define iface->grob-table (make-hash-table 61))
;; extract ifaces, and put grob into the hash table.
-(map
+(for-each
(lambda (x)
(let* ((meta (assoc-get 'meta (cdr x)))
(ifaces (assoc-get 'interfaces meta)))
- (map (lambda (iface)
- (hashq-set!
- iface->grob-table iface
- (cons (car x)
- (hashq-ref iface->grob-table iface '()))))
- ifaces)))
+ (for-each (lambda (iface)
+ (hashq-set!
+ iface->grob-table iface
+ (cons (car x)
+ (hashq-ref iface->grob-table iface '()))))
+ ifaces)))
all-grob-descriptions)
;; First level Interface description
;;;;;;;;;; check for dangling backend properties.
(define (mark-interface-properties entry)
- (map (lambda (x) (set-object-property! x 'iface-marked #t))
- (caddr (cdr entry))))
+ (for-each (lambda (x) (set-object-property! x 'iface-marked #t))
+ (caddr (cdr entry))))
-(map mark-interface-properties interface-description-alist)
+(for-each mark-interface-properties interface-description-alist)
(define (check-dangling-properties prop)
(if (not (object-property prop 'iface-marked))
(ly:error (string-append "define-grob-properties.scm: "
(_ "cannot find interface for property: ~S")) prop)))
-(map check-dangling-properties all-backend-properties)
+(for-each check-dangling-properties all-backend-properties)
;;;;;;;;;;;;;;;;
(map document-mod-list mod-list))))
(define (document-mod obj-pair)
- (cond
- ((ly:context-mod? (cdr obj-pair))
- (document-context-mod obj-pair))
- (else
- #f)))
+ (and (ly:context-mod? (cdr obj-pair))
+ (document-context-mod obj-pair)))
(define context-mods-doc-string
(format
@end table
"
(string-join
- (filter
- identity
- (map
- document-mod
- (sort
- (ly:module->alist (current-module))
- identifier<?)))
- "")))
+ (filter-map
+ document-mod
+ (sort
+ (ly:module->alist (current-module))
+ identifier<?)))
+ ""))
#:name "Scheme functions"
#:desc "Primitive functions exported by LilyPond."
#:text
- (apply string-append sfdocs))))
+ (string-concatenate sfdocs))))
;; (dump-node (all-scheme-functions-doc) (current-output-port) 0 )
~a
"
name-sym (car type-names)
- (if (equal? "" signature-str) "" " - ") signature-str
+ (if (string-null? signature-str) "" " - ") signature-str
name-sym
(if doc
doc
(define (document-object obj-pair)
- (cond
- ((ly:music-function? (cdr obj-pair))
- (document-music-function obj-pair))
- (else
- #f)))
+ (and (ly:music-function? (cdr obj-pair))
+ (document-music-function obj-pair)))
(define-public (identifiers-doc-string)
(format #f
@end table
"
(string-join
- (filter
- identity
- (map
- document-object
- (sort
- (ly:module->alist (current-module))
- identifier<?)))
- "")))
+ (filter-map
+ document-object
+ (sort
+ (ly:module->alist (current-module))
+ identifier<?)))
+ ""))
(if (null? prop-strings)
"\n"
(string-append "\n\n\nUsed properties:\n@itemize\n"
- (apply string-append prop-strings)
+ (string-concatenate prop-strings)
"@end itemize\n"))))))
(define (markup-function<? a b)
#:desc ""
#:text (string-append
"@table @asis"
- (apply string-append
- (map doc-markup-function
- (sort markup-functions markup-function<?)))
+ (string-concatenate
+ (map doc-markup-function
+ (sort markup-functions markup-function<?)))
"\n@end table"))))
(define (markup-doc-node)
(define (markup-list-doc-string)
(string-append
"@table @asis"
- (apply string-append
- (map doc-markup-function
- (sort (hash-fold (lambda (markup-list-function dummy functions)
- (cons markup-list-function functions))
- '()
- markup-list-functions)
- markup-function<?)))
+ (string-concatenate
+ (map doc-markup-function
+ (sort (hash-fold (lambda (markup-list-function dummy functions)
+ (cons markup-list-function functions))
+ '()
+ markup-list-functions)
+ markup-function<?)))
"\n@end table"))
texi)))
(define music-types->names (make-hash-table 61))
-(filter-map (lambda (entry)
- (let* ((class (ly:camel-case->lisp-identifier (car entry)))
- (classes (ly:make-event-class class)))
- (if classes
- (map
- (lambda (cl)
- (hashq-set! music-types->names cl
- (cons (car entry)
- (hashq-ref music-types->names cl '()))))
- classes)
- #f)))
- music-descriptions)
+(for-each (lambda (entry)
+ (let* ((class (ly:camel-case->lisp-identifier (car entry)))
+ (classes (ly:make-event-class class)))
+ (if classes
+ (for-each
+ (lambda (cl)
+ (hashq-set! music-types->names cl
+ (cons (car entry)
+ (hashq-ref music-types->names cl '()))))
+ classes))))
+ music-descriptions)
(define (strip-description x)
(cons (symbol->string (car x))
(let* ((layout-alist (ly:output-description $defaultlayout))
(context-description-alist (map cdr layout-alist))
(contexts
- (apply append
- (map
- (lambda (x)
- (let* ((context (assoc-get 'context-name x))
- (group (assq-ref x 'group-type))
- (consists (append
- (if group
- (list group)
- '())
- (assoc-get 'consists x))))
- (if (member name-sym consists)
- (list context)
- '())))
- context-description-alist)))
+ (append-map
+ (lambda (x)
+ (let* ((context (assoc-get 'context-name x))
+ (group (assq-ref x 'group-type))
+ (consists (append
+ (if group
+ (list group)
+ '())
+ (assoc-get 'consists x))))
+ (if (member name-sym consists)
+ (list context)
+ '())))
+ context-description-alist))
(context-list (human-listify (map ref-ify
(sort
(map symbol->string contexts)
;; Second level, part of Context description
(define name->engraver-table (make-hash-table 61))
-(map
+(for-each
(lambda (x)
(hash-set! name->engraver-table (ly:translator-name x) x))
(ly:get-all-translators))
"."
(if (and (pair? props) (not (null? props)))
- (let ((str (apply string-append
- (sort (map document-property-operation props)
- ly:string-ci<?))))
+ (let ((str (string-concatenate
+ (sort (map document-property-operation props)
+ ly:string-ci<?))))
(if (string-null? str)
""
(string-append
(list group)
'())
(assoc-get 'consists context-desc)))
- (grobs (apply append
- (map engraver-grobs consists))))
+ (grobs (append-map engraver-grobs consists)))
grobs))
(define (all-contexts-doc)
"\n"
"@multitable @columnfractions .33 .66\n"
"@headitem Type predicate @tab Description\n"
- (apply string-append
- (sort (map document-type-predicate alist)
- ly:string-ci<?))
+ (string-concatenate
+ (sort (map document-type-predicate alist)
+ ly:string-ci<?))
"@end multitable\n"
"\n"))
"* LilyPond exported predicates::\n"
"@end menu\n"
"\n"
- (apply
- string-append
+ (string-concatenate
(map
(lambda (alist-nodename-list)
(apply document-type-predicate-category
(use-modules (scm accreg))
-(map ly:load '("documentation-lib.scm"
- "lily-sort.scm"
- "document-functions.scm"
- "document-translation.scm"
- "document-music.scm"
- "document-type-predicates.scm"
- "document-identifiers.scm"
- "document-context-mods.scm"
- "document-backend.scm"
- "document-markup.scm"))
+(for-each ly:load '("documentation-lib.scm"
+ "lily-sort.scm"
+ "document-functions.scm"
+ "document-translation.scm"
+ "document-music.scm"
+ "document-type-predicates.scm"
+ "document-identifiers.scm"
+ "document-context-mods.scm"
+ "document-backend.scm"
+ "document-markup.scm"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(node-children node)))
""))
port)
- (map (lambda (x) (dump-node x port (+ 1 level)))
- (node-children node)))
+ (for-each (lambda (x) (dump-node x port (+ 1 level)))
+ (node-children node)))
(define (processing name)
(ly:basic-progress (_ "Processing ~S...") name))
"\n"
(if quote? "@quotation\n" "")
"@table @asis\n"
- (apply string-append (map one-item->texi items-alist))
+ (string-concatenate (map one-item->texi items-alist))
"\n"
"@end table\n"
(if quote? "@end quotation\n" "")))
(string-append
"\n@menu"
- (apply string-append
- (map (lambda (x)
- (string-append
- (string-pad-right
- (string-append "\n* " (car x) ":: ")
- (+ maxwid 8))
- (cdr x)))
- items-alist))
+ (string-concatenate
+ (map (lambda (x)
+ (string-append
+ (string-pad-right
+ (string-append "\n* " (car x) ":: ")
+ (+ maxwid 8))
+ (cdr x)))
+ items-alist))
"\n@end menu\n"
;; Menus don't appear in html, so we make a list ourselves
"\n@ignore\n"
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
;;;; This file implements different flag styles in Scheme / GUILE, most
-;;;; notably the old-straight-flag and the modern-straight-flag styles.
+;;;; notably the old-straight-flag, the modern-straight-flag and the flat-flag
+;;;; styles.
(define-public (no-flag grob)
(raw-length (if stem-up upflag-length downflag-length))
(angle (if stem-up upflag-angle downflag-angle))
(flag-length (+ (* raw-length factor) half-stem-thickness))
- (flag-end (polar->rectangular flag-length angle))
+ ;; For flat flags the points to create the stencil using
+ ;; ly:round-filled-polygon need to be different concerning flag-end
+ (flag-end (if (= angle 0)
+ (cons flag-length (* half-stem-thickness dir))
+ (polar->rectangular flag-length angle)))
(thickness (* flag-thickness factor))
(thickness-offset (cons 0 (* -1 thickness dir)))
(spacing (* -1 flag-spacing factor dir ))
(start (cons (- half-stem-thickness) (* half-stem-thickness dir)))
;; The points of a round-filled-polygon need to be given in clockwise
;; order, otherwise the polygon will be enlarged by blot-size*2!
- (points (if stem-up (list start flag-end
- (offset-add flag-end thickness-offset)
- (offset-add start thickness-offset))
+ (points (if stem-up
+ (list start
+ flag-end
+ (offset-add flag-end thickness-offset)
+ (offset-add start thickness-offset))
(list start
(offset-add start thickness-offset)
(offset-add flag-end thickness-offset)
flags are both 45 degrees."
((straight-flag 0.55 1 -45 1.2 45 1.4) grob))
+(define-public (flat-flag grob)
+ "Flat flag style. The angles of the flags are both 0 degrees"
+ ((straight-flag 0.55 1.0 0 1.0 0 1.0) grob))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Flags created from feta glyphs (normal and mensural flags)
#:children (make-hash-table 11)))
(define-method (display (leaf <Font-tree-leaf>) port)
- (map (lambda (x) (display x port))
- (list
- "#<Font-size-family:\n"
- (slot-ref leaf 'default-size)
- (slot-ref leaf 'size-vector)
- "#>"
- )))
+ (for-each (lambda (x) (display x port))
+ (list
+ "#<Font-size-family:\n"
+ (slot-ref leaf 'default-size)
+ (slot-ref leaf 'size-vector)
+ "#>"
+ )))
(define-method (display (node <Font-tree-node>) port)
- (map
+ (for-each
(lambda (x)
(display x port))
(list
(list (ly:font-name font))))
(let* ((fonts (ly:paper-fonts paper))
- (names (apply append (map extract-names fonts))))
- (apply string-append
- (map (lambda (f)
- (format #f
- (if load-fonts?
- "%%DocumentSuppliedResources: font ~a\n"
- "%%DocumentNeededResources: font ~a\n")
- f))
- (uniq-list (sort names string<?))))))
+ (names (append-map extract-names fonts)))
+ (string-concatenate
+ (map (lambda (f)
+ (format #f
+ (if load-fonts?
+ "%%DocumentSuppliedResources: font ~a\n"
+ "%%DocumentNeededResources: font ~a\n")
+ f))
+ (uniq-list (sort names string<?))))))
(define (eps-header paper bbox load-fonts?)
(string-append "%!PS-Adobe-2.0 EPSF-2.0\n"
(ly:font-sub-fonts font))))
fonts))
(font-names (uniq-list
- (sort (apply append all-font-names)
+ (sort (concatenate all-font-names)
(lambda (x y) (string<? (cadr x) (cadr y))))))
;; slightly spaghetti-ish: deciding what to load where
;;; Commentary:
;;; This file provides the support routines for a guile debugger called
-;;; from a environment controlled by LilyPond. It works in conjunction
+;;; from an environment controlled by LilyPond. It works in conjunction
;;; with file guile-debugger.ly.
;;; Code:
(list elem)))
'() lst))
-(define-public (filtered-map proc lst)
- (filter
- (lambda (x) x)
- (map proc lst)))
+(define-public filtered-map filter-map)
(define-public (flatten-list x)
"Unnest list."
(let* ((stat (gulp-file "/proc/self/status"))
(lines (string-split stat #\newline))
- (interesting (filter identity
- (map
- (lambda (l)
- (string-match "^VmData:[ \t]*([0-9]*) kB" l))
- lines)))
+ (interesting (filter-map
+ (lambda (l)
+ (string-match "^VmData:[ \t]*([0-9]*) kB" l))
+ lines))
(mem (string->number (match:substring (car interesting) 1))))
(format #t "VMDATA: ~a\n" mem)
(display (gc-stats))
(ly:exit 2 #t)))
(if (ly:get-option 'read-file-list)
(set! files
- (filter (lambda (s)
- (> (string-length s) 0))
- (apply append
- (map (lambda (f)
- (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
- files)))))
+ (remove string-null?
+ (append-map
+ (lambda (f)
+ (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
+ files))))
(if (and (number? (ly:get-option 'job-count))
(>= (length files) (ly:get-option 'job-count)))
(let* ((count (ly:get-option 'job-count))
"Extract @code{'direction} and @code{'text} from @var{music}, and transform
into a @code{MultiMeasureTextEvent}."
- (if (memq 'script-event (ly:music-property music 'types))
- (apply make-music 'MultiMeasureTextEvent
- (flatten-alist (ly:music-mutable-properties music)))
+ (if (music-is-of-type? music 'script-event)
+ (make-music 'MultiMeasureTextEvent music)
music))
(define-ly-syntax (multi-measure-rest parser location duration articulations)
(define-public interpret-markup ly:text-interface::interpret-markup)
(define-public (interpret-markup-list layout props markup-list)
- ;; This relies on the markup list returned by a markup list command
- ;; to be modifiable
- (reverse!
- (fold
- (lambda (m prev)
- (if (markup-command-list? m)
- (reverse! (apply (car m) layout props (cdr m)) prev)
- (cons (interpret-markup layout props m) prev)))
- '()
- markup-list)))
+ (fold-right
+ (lambda (m prev)
+ (if (markup-command-list? m)
+ (append (apply (car m) layout props (cdr m)) prev)
+ (cons (interpret-markup layout props m) prev)))
+ '()
+ markup-list))
(define-public (prepend-alist-chain key val chain)
(cons (acons key val (car chain)) (cdr chain)))
(ly:music-set-property! music 'pitch (converter pitch)))
((pair? elements)
- (map (lambda (x) (change-pitches x converter)) elements))
+ (for-each (lambda (x) (change-pitches x converter)) elements))
((ly:music? element)
(change-pitches element converter)))))
(if (ly:dir? span-dir)
(ly:music-set-property! music 'span-direction (- span-dir)))
- (map retrograde-music reversed)
+ (for-each retrograde-music reversed)
music))
(string-length "-markup")))))))
(define (transform-arg arg)
(cond ((and (pair? arg) (markup? (car arg))) ;; a markup list
- (apply append (map inner-markup->make-markup arg)))
+ (append-map inner-markup->make-markup arg))
((and (not (string? arg)) (markup? arg)) ;; a markup
(inner-markup->make-markup arg))
(else ;; scheme arg
(ly:music? obj)
`(make-music
',(ly:music-property obj 'name)
- ,@(apply append (map (lambda (prop)
- `(',(car prop)
- ,(music->make-music (cdr prop))))
- (remove (lambda (prop)
- (eqv? (car prop) 'origin))
- (ly:music-mutable-properties obj))))))
+ ,@(append-map (lambda (prop)
+ `(',(car prop)
+ ,(music->make-music (cdr prop))))
+ (remove (lambda (prop)
+ (eqv? (car prop) 'origin))
+ (ly:music-mutable-properties obj)))))
(;; moment
(ly:moment? obj)
`(ly:make-moment ,(ly:moment-main-numerator obj)
predicates, to be used in case of a type error in arguments or
result."
+ (define (currying-lambda args doc-string? body)
+ (if (and (pair? args)
+ (pair? (car args)))
+ (currying-lambda (car args) doc-string?
+ `((lambda ,(cdr args) ,@body)))
+ (if doc-string?
+ `(lambda ,args ,doc-string? ,@body)
+ `(lambda ,args ,@body))))
+
(set! signature (map (lambda (pred)
(if (pair? pred)
`(cons ,(car pred)
,(and (pair? (cdr pred)) (cadr pred)))
pred))
(cons type signature)))
- (if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
- ;; When the music function definition contains a i10n doc string,
- ;; (_i "doc string"), keep the literal string only
- (let ((docstring (cadar body))
- (body (cdr body)))
- `(ly:make-music-function (list ,@signature)
- (lambda ,args
- ,docstring
- ,@body)))
- `(ly:make-music-function (list ,@signature)
- (lambda ,args
- ,@body))))
+
+ (let ((docstring
+ (and (pair? body) (pair? (cdr body))
+ (if (string? (car body))
+ (car body)
+ (and (pair? (car body))
+ (eq? '_i (caar body))
+ (pair? (cdar body))
+ (string? (cadar body))
+ (null? (cddar body))
+ (cadar body))))))
+ ;; When the music function definition contains an i10n doc string,
+ ;; (_i "doc string"), keep the literal string only
+ `(ly:make-music-function
+ (list ,@signature)
+ ,(currying-lambda args docstring (if docstring (cdr body) body)))))
(defmacro-public define-music-function rest
"Defining macro returning music functions.
(layout (ly:grob-layout root))
(blot (ly:output-def-lookup layout 'blot-diameter)))
;; Hide spanned stems
- (map (lambda (st)
- (set! (ly:grob-property st 'stencil) #f))
- stems)
+ (for-each (lambda (st)
+ (set! (ly:grob-property st 'stencil) #f))
+ stems)
;; Draw a nice looking stem with rounded corners
(ly:round-filled-box (ly:grob-extent root root X) yextent blot))
;; Nothing to connect, don't draw the span
;; two stems at this musical moment
(if (<= 2 (length stems))
(let ((roots (filter stem-is-root? stems)))
- (map (make-stem-span! stems trans) roots))))
+ (for-each (make-stem-span! stems trans) roots))))
(define-public (Span_stem_engraver ctx)
"Connect cross-staff stems to the stems above in the system"
(define-public (color? x)
(and (list? x)
(= 3 (length x))
- (apply eq? #t (map number? x))
- (apply eq? #t (map (lambda (y) (<= 0 y 1)) x))))
+ (every number? x)
+ (every (lambda (y) (<= 0 y 1)) x)))
(define-public (rgb-color r g b) (list r g b))
the previous calculated offset value."
prev-offset)
+(define-public (scale-by-font-size x)
+ (ly:make-unpure-pure-container
+ (lambda (grob)
+ (* x (magstep (ly:grob-property grob 'font-size 0))))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Helper functions
(define-public (attributes attributes-alist)
- (apply string-append
- (map (lambda (x)
- (let ((attr (car x))
- (value (cdr x)))
- (if (number? value)
- (set! value (ly:format "~4f" value)))
- (format #f " ~s=\"~a\"" attr value)))
- attributes-alist)))
+ (string-concatenate
+ (map (lambda (x)
+ (let ((attr (car x))
+ (value (cdr x)))
+ (if (number? value)
+ (set! value (ly:format "~4f" value)))
+ (format #f " ~s=\"~a\"" attr value)))
+ attributes-alist)))
(define-public (eo entity . attributes-alist)
"o = open"
(integer->entity (char->integer char)))
(define (string->entities string)
- (apply string-append
- (map (lambda (x) (char->entity x)) (string->list string))))
+ (string-concatenate
+ (map char->entity (string->list string))))
(define svg-element-regexp
(make-regexp "^(<[a-z]+) ?(.*>)"))
`(stroke-linecap . ,(symbol->string cap-style))
'(stroke . "currentColor")
`(fill . ,(if fill? "currentColor" "none"))
- `(d . ,(apply string-append (convert-path-exps commands))))))
+ `(d . ,(string-concatenate (convert-path-exps commands))))))
(define (placebox x y expr)
(if (string-null? expr)
(append (cdr lines) (list #f)))
(paper-system-annotate-last (car (last-pair lines)) layout)))
- (map add-system lines)
+ (for-each add-system lines)
(ly:prob-set-property! page 'bottom-system-edge
"Generate the clef setting commands for a clef with name @var{clef-name}."
(define (make-prop-set props)
(let ((m (make-music 'PropertySet)))
- (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
+ (for-each (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
m))
(let ((e '())
(c0 0)
(define (analyse-forced-combine result-idx prev-res)
(define (get-forced-event x)
- (if (ly:in-event-class? x 'part-combine-force-event)
- (cons (ly:event-property x 'forced-type) (ly:event-property x 'once))
- #f))
+ (and (ly:in-event-class? x 'part-combine-force-event)
+ (cons (ly:event-property x 'forced-type)
+ (ly:event-property x 'once))))
(define (part-combine-events vs)
(if (not vs)
'()
(prev (configuration prev-ss)))
(if (symbol? prev)
(put prev))))
- (map copy-one-state (span-state vs)))
+ (for-each copy-one-state (span-state vs)))
(define (analyse-notes now-state)
(let* ((vs1 (car (voice-states now-state)))
(if (not (= 0 status))
(begin
- (map delete-file files)
+ (for-each delete-file files)
(exit 1)))
(if (and rename-page-1 multi-page?)
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-(map
+(for-each
(lambda (sym)
(set! safe-objects (cons (cons sym (primitive-eval sym))
safe-objects)))
((record-constructor ,record) ,@(map car slots*))))
(set! ,$copy-record
(lambda (record)
- (,$make-record ,@(apply
- append
- (map (lambda (slot)
- (list (symbol->keyword slot)
- (list (make-symbol reader-format slot) 'record)))
- (map car slots*))))))
+ (,$make-record ,@(append-map
+ (lambda (slot)
+ (list (symbol->keyword slot)
+ (list (make-symbol reader-format slot) 'record)))
+ (map car slots*)))))
,@(map (lambda (s)
`(set! ,(make-symbol reader-format (car s))
(record-accessor ,record (quote ,(car s)))))
\n((0.0 . 2) (PI/2 . 3) (PI . -2) (3*PI/2 . -3)\
\n(2*PI . 2) (5*PI/2 . 3) (3*PI . -2) (7*PI/2 . -3))
"
- (apply append
- (map (lambda (adder)
- (map (lambda (quadrant)
- (cons (+ adder (car quadrant))
- (cdr quadrant)))
- `((0.0 . (,x-radius . 0.0))
- (,PI-OVER-TWO . (0.0 . ,y-radius))
- (,PI . (,(- x-radius) . 0.0))
- (,THREE-PI-OVER-TWO . (0.0 . ,(- y-radius))))))
- `(0.0 ,TWO-PI))))
+ (append-map
+ (lambda (adder)
+ (map (lambda (quadrant)
+ (cons (+ adder (car quadrant))
+ (cdr quadrant)))
+ `((0.0 . (,x-radius . 0.0))
+ (,PI-OVER-TWO . (0.0 . ,y-radius))
+ (,PI . (,(- x-radius) . 0.0))
+ (,THREE-PI-OVER-TWO . (0.0 . ,(- y-radius))))))
+ `(0.0 ,TWO-PI)))
(define
(insert-in-ordered-list ordering-function value inlist cutl? cutr?)
"
(reduce min-max
(if (eq? min-max min) 100000 -100000)
- (map (lambda (x) (side x)) l)))
+ (map side l)))
(let*
(;; the outside limit of the x-radius
(null (cons 0 0))
(arrow-1
(ly:make-stencil
- `(polygon (quote ,(concatenate (map complex-to-offset p1s)))
+ `(polygon (quote ,(append-map complex-to-offset p1s))
0.0
#t) null null))
(arrow-2
(ly:make-stencil
- `(polygon (quote ,(concatenate (map complex-to-offset p2s)))
+ `(polygon (quote ,(append-map complex-to-offset p2s))
0.0
#t) null null ) )
(thickness (min (/ distance 12) 0.1))
(elt (ly:music-property mus 'element)))
(cond
((pair? elts)
- (map make-harmonic elts))
+ (for-each make-harmonic elts))
((ly:music? elt)
(make-harmonic elt))
((music-is-of-type? mus 'note-event)
;; Normalize to given beat, extract the beats and join them to one list
(let* ((beat (calculate-compound-base-beat-full time-sig))
(normalized (map (lambda (f) (normalize-fraction f beat)) time-sig))
- (beats (map (lambda (f) (reverse (cdr (reverse f)))) normalized)))
- (apply append beats)))
+ (beats (map (lambda (f) (drop-right f 1)) normalized)))
+ (concatenate beats)))
(define-public (calculate-compound-beat-grouping time-sig)
(cond
(if (equal? (node-value node) "")
(string-append
(if xml-name "\n" "")
- (apply string-append (map musicxml-node->string (node-children node))))
+ (string-concatenate (map musicxml-node->string (node-children node))))
(node-value node))
(if xml-name (close-tag xml-name) "")
(if xml-name "\n" ""))))
"\n"
(open-tag (node-name node) (node-attributes node) '())
(if (equal? (node-value node) "")
- (string-append
- (apply string-append (map xml-node->string (node-children node))))
+ (string-concatenate (map xml-node->string (node-children node)))
(node-value node))
"\n"
(close-tag (node-name node))))
(string-append
"<" (symbol->string tag)
- (apply string-append (map dump-attr (filter candidate? attrs)))
+ (string-concatenate (map dump-attr (filter candidate? attrs)))
">"))
(define (close-tag name)
if no fingering is present."
(let* ((articulations (ly:event-property ev 'articulations))
(finger-found #f))
- (map (lambda (art)
- (let* ((num (ly:event-property art 'digit)))
-
- (if (and (ly:in-event-class? art 'fingering-event)
- (number? num)
- (> num 0))
- (set! finger-found num))))
- articulations)
+ (for-each (lambda (art)
+ (let* ((num (ly:event-property art 'digit)))
+
+ (if (and (ly:in-event-class? art 'fingering-event)
+ (number? num)
+ (> num 0))
+ (set! finger-found num))))
+ articulations)
finger-found))
(define (delete-free-string string)
(make-vcenter-markup
(format #f "~a" fret-number)))
-;; The 5-string banjo has got a extra string, the fifth (duh), which
+;; The 5-string banjo has got an extra string, the fifth (duh), which
;; starts at the fifth fret on the neck. Frets on the fifth string
;; are referred to relative to the other frets:
;; the "first fret" on the fifth string is really the sixth fret
def addNode(self, nodeName, manualName, fileName):
global returnCode
# print "Node: ", nodeName, " in ", manualName, " found in ", fileName
+ if "\\" in nodeName:
+ returnCode = 1
+ print "nodeName: ", nodeName, " in ", fileName, " contains backslash"
if manualName+"/"+nodeName in self.Nodes.keys():
print "Error: Duplicate nodename ",nodeName, " in ", fileName, " and ", self.Nodes[manualName+"/"+nodeName][1]
returnCode=1
self.nodeNames[nodeName] = fileName
def addRef(self, toManualName, toHeading, inFileName):
+ global returnCode
+ if "\\" in toHeading:
+ returnCode = 1
+ print "ref to: ", toHeading, " in ", inFileName, " contains backslash"
# if inFileName == "notation/vocal.itely":
# print "Ref to ", toManualName, "/",toHeading, " found in ", inFileName
self.Refs.append([toManualName + "/" + toHeading, inFileName])
import os
import sys
import re
+import shutil
"""
@relocate-preamble@
action='store_true',
dest='diff_version_update',
default=False)
-
+
p.add_option ("-s", '--show-rules',
help=_ ("show rules [default: -f 0, -t %s]") % program_version,
dest='show_rules',
action='store_true', default=False)
-
+
p.add_option ('-t', '--to',
help=_ ("convert to VERSION [default: %s]") % program_version,
metavar=_ ('VERSION'),
action='store',
dest="to_version",
default='')
+
+ p.add_option ('-b', '--backup-numbered',
+ help=_ ("make a numbered backup [default: filename.ext~]"),
+ action='store_true',
+ dest="backup_numbered",
+ default='')
+
p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"),
action='store_true',
),
return p
-
-
def str_to_tuple (s):
return tuple ([int(n) for n in s.split ('.')])
def do_conversion (str, from_version, to_version):
"""Apply conversions from FROM_VERSION to TO_VERSION. Return
-tuple (LAST,STR), with the last successful conversion and the resulting
-string."""
+tuple (LAST,LASTCHANGED,STR,ERRORS), with the last applied conversion,
+the last conversion resulting in a change, the resulting
+string and the number of errors."""
conv_list = get_conversions (from_version, to_version)
ly.progress (_ ("Applying conversion: "), newline = False)
last_conversion = None
+ last_change = None
errors = 0
try:
for x in conv_list:
ly.progress (', ', newline = False)
else:
ly.progress (tup_to_str (x[0]))
- str = x[1] (str)
+ newstr = x[1] (str)
last_conversion = x[0]
+ if (newstr != str):
+ last_change = last_conversion
+ str = newstr
except convertrules.FatalConversionError:
ly.error (_ ("Error while converting")
+ _ ("Stopping at last successful rule"))
errors += 1
- return (last_conversion, str, errors)
-
-
+ return (last_conversion, last_change, str, errors)
def guess_lilypond_version (input):
m = lilypond_version_strict_re.search (input)
def __init__ (self, version):
self.version = version
+def back_up (file, numbered):
+ if numbered:
+ n = 0
+ while True:
+ n = n + 1
+ back_up = file + '.~' + str(n) + '~'
+ if not os.path.exists (back_up):
+ break
+ else:
+ back_up = file + '~'
+ shutil.copy2 (file, back_up)
+ return back_up
+
def do_one_file (infile_name):
ly.progress (_ (u"Processing `%s\'... ") % infile_name, True)
raise InvalidVersion (".".join ([str(n) for n in from_version]))
- (last, result, errors) = do_conversion (input, from_version, to_version)
+ (last, last_change, result, errors) = \
+ do_conversion (input, from_version, to_version)
if global_options.force_current_version and \
(last is None or last == to_version):
last = str_to_tuple (program_version)
if last:
if global_options.diff_version_update:
+ # Note that last_change can be set even if the result is
+ # the same if two conversion rules cancelled out
if result == input:
# check the y in x.y.z (minor version number)
previous_stable = (last[0], 2*(last[1]/2), 0)
else:
# make no (actual) change to the version number
last = from_version
+ else:
+ last = last_change
newversion = r'\version "%s"' % tup_to_str (last)
if lilypond_version_re.search (result):
ly.progress ('\n')
if global_options.edit:
- try:
- os.remove (infile_name + '~')
- except:
- pass
- os.rename (infile_name, infile_name + '~')
+ backup = back_up (infile_name, global_options.backup_numbered)
outfile = open (infile_name, 'w')
else:
outfile = sys.stdout
"There were %d errors.", errors) % errors)
sys.exit (1)
-
main ()
return str (val2);
class tempo_formatter (formatter):
def format_vals (self, val1, val2):
- return str (val2) + " msec/quarter"
+ return str (ord (val2[0])*65536 + ord (val2[1])*256 + ord (val2[2])) \
+ + " msec/quarter"
class time_signature_formatter (formatter):
def format_vals (self, val1, val2 = ""):
- return str (val2) # TODO
+ from fractions import Fraction
+ # if there are more notated 32nd notes per midi quarter than 8,
+ # we display a fraction smaller than 1 as scale factor.
+ r = Fraction(8, ord (val2[3]))
+ if r == 1:
+ ratio =""
+ else:
+ ratio = " *" + str (r)
+ return str (ord (val2[0])) + "/" + str(1 << ord (val2[1])) + ratio \
+ + ", metronome " + str (Fraction (ord (val2[2]), 96))
class key_signature_formatter (formatter):
def format_vals (self, val1, val2):
key_names = ['F', 'C', 'G', 'D', 'A', 'E', 'B']
%.gz: %
gzip -c9 $< > $@
-
-$(outdir)/%.css: $(CSS_DIRECTORY)/%.css
- ln -f $< $@
-.PHONY : all clean bin-clean default dist exe help html lib TAGS\
+.PHONY : all clean bin-clean default dist exe help html lib man TAGS\
po doc doc-stage-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2\
- log-clean
+ local-all local-clean local-bin-clean local-doc log-clean
-all: default
+all: default
$(LOOP)
+local-all: default
+
man:
$(LOOP)
@echo "Targets specific to current directory:"
help: generic-help local-help
- @echo "Generic targets that recurse into subdirectories*:"
+ @echo "Generic targets that recurse into subdirectories:"
@echo " all update everything except documentation with images"
+ @echo " (same as the empty target)"
@echo " clean remove all generated stuff in $(outdir)"
@echo " bin-clean same as clean, except that mf/out is preserved"
@echo " doc update documentation with images in directory \`out-www'"
@echo " any of the above commands to the current directory."
@echo
@echo "Other generic targets:"
- @echo " default same as the empty target"
+ @echo " default same as \`make all', but restricted to the current directory"
@echo " exe update all executables"
@echo " help this help"
@echo " lib update all libraries"
# we want to see botched results as well.
$(outdir)/%.dvi: %.mf
- -MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
+ -$(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\scrollmode; input $<;"
gftodvi $(basename $<)
mv $(basename $<).dvi $(outdir)
rm $(basename $<).*gf
$(outdir)/%.tfm $(outdir)/%.log: %.mf
- MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
+ $(DO_MF_DEP) MFINPUTS=$(src-dir) $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;" $(METAFONT_QUIET)
# Let's keep this log output, it saves another mf run.
mv $(basename $(@F)).log $(basename $(@F)).tfm $(outdir)
rm -f $(basename $(@F)).*gf $(basename $(@F)).*pk
# the soft link for mf2pt1.mp is for recent mpost versions
# which no longer dump a .mem file
$(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem $(outdir)/%.log
- TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
+ $(DO_MF_DEP) TMP=`mktemp -d $(outdir)/pfbtemp.$*.XXXXXXXXX` \
&& ( cd $$TMP \
&& ln -s ../mf2pt1.mem . \
&& ln -s ../../mf2pt1.mp . \
else
METAFONT_QUIET =
endif
+
+# Find the metafont file $(1) within the source dirs and return its path.
+# If not found, return $(outdir)/$(1) assuming that it is a generated file.
+find-mf = \
+$(firstword \
+ $(wildcard $(src-dir)/$(1)) \
+ $(wildcard $(top-src-dir)/mf/$(1)) \
+ $(outdir)/$(1) \
+)
+
+# Recursively scan the metafont .mf file $(1) for "input X;"
+# and return all dependencies.
+scan-mf = \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^[[:space:]]*input[[:space:]]/s/^[[:space:]]*input\([^.;]*\)\(.mf;\|;\)/\1.mf/p" $(1)), \
+ $(call find-mf,$(f)) \
+ $(call scan-mf,$(call find-mf,$(f))) \
+)
+
+# Find dependencies for the target $@, based on the metafont source file $<,
+# and write the dependencies to a .dep file.
+DO_MF_DEP = ( echo ./$@: $(call scan-mf,$<) > $(basename $@).dep ) &&
touch $@
# Copy files while tracking their dependencies.
-$(outdir)/%.texi: %.texi
+$(outdir)/%.texi: %.texi $(outdir)/version.itexi
mkdir -p $(dir $@)
$(DO_TEXI_DEP) cp -f $< $@
$(outdir)/%.pdf.omf: %.texi
$(call GENERATE_OMF,pdf)
-$(outdir)/version.%: $(top-src-dir)/VERSION
+$(outdir)/version.itexi: $(top-src-dir)/VERSION
$(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
-$(outdir)/weblinks.%: $(top-src-dir)/VERSION
+$(outdir)/weblinks.itexi: $(top-src-dir)/VERSION
$(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@
$(outdir)/$(1) \
)
-# Recursively scan the file $(1) for @include, search for included files
-# within the texinfo include dirs, and return all dependencies.
+# Recursively scan the file $(1) for @include and @verbatiminclude, search for
+# included files within the texinfo include dirs, and return all dependencies.
scan-texi = \
-$(foreach f, $(shell sed -ne "/^@include[[:space:]]/s/@include//p" $(1)), \
+$(foreach f, $(shell test -f $(1) && sed -ne "/^@\(verbatim\)\?include[[:space:]]/s/@\(verbatim\)\?include//p" $(1)), \
$(call find-texi,$(f)) \
$(call scan-texi,$(call find-texi,$(f))) \
)
TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
-DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation
-
MAKEINFO_FLAGS += --enable-encoding --error-limit=0 $(DOCUMENTATION_INCLUDES)
MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
-DOCUMENTATION_INCLUDES +=\
- -I $(top-src-dir)/Documentation/usage\
- -I $(top-src-dir)/Documentation/contributor\
-
#