]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' of ssh://trettig@git.sv.gnu.org/srv/git/lilypond...
authorTill Paala <till.rettig@gmx.de>
Sun, 11 May 2008 15:22:37 +0000 (18:22 +0300)
committerTill Paala <till.rettig@gmx.de>
Sun, 11 May 2008 15:22:37 +0000 (18:22 +0300)
105 files changed:
Documentation/de/user/ancient.itely
Documentation/de/user/expressive.itely
Documentation/de/user/fretted-strings.itely
Documentation/de/user/fundamental.itely
Documentation/de/user/introduction.itely
Documentation/de/user/keyboards.itely
Documentation/de/user/notation-appendices.itely
Documentation/de/user/pitches.itely
Documentation/de/user/repeats.itely
Documentation/de/user/rhythms.itely
Documentation/de/user/simultaneous.itely
Documentation/de/user/tutorial.itely
Documentation/de/user/tweaks.itely
Documentation/de/user/working.itely
Documentation/es/user/ancient.itely
Documentation/es/user/changing-defaults.itely
Documentation/es/user/chords.itely
Documentation/es/user/editorial.itely
Documentation/es/user/fretted-strings.itely
Documentation/es/user/fundamental.itely
Documentation/es/user/introduction.itely
Documentation/es/user/keyboards.itely
Documentation/es/user/notation-appendices.itely
Documentation/es/user/percussion.itely
Documentation/es/user/pitches.itely
Documentation/es/user/simultaneous.itely
Documentation/es/user/specialist.itely
Documentation/es/user/templates.itely
Documentation/es/user/text.itely
Documentation/es/user/tutorial.itely
Documentation/es/user/tweaks.itely
Documentation/es/user/vocal.itely
Documentation/es/user/working.itely
Documentation/fr/user/ancient.itely
Documentation/fr/user/changing-defaults.itely
Documentation/fr/user/fretted-strings.itely
Documentation/fr/user/fundamental.itely
Documentation/fr/user/introduction.itely
Documentation/fr/user/keyboards.itely
Documentation/fr/user/notation-appendices.itely
Documentation/fr/user/simultaneous.itely
Documentation/fr/user/text.itely
Documentation/fr/user/tutorial.itely
Documentation/fr/user/tweaks.itely
Documentation/fr/user/vocal.itely
Documentation/fr/user/working.itely
Documentation/topdocs/NEWS.tely
Documentation/user/ancient.itely
Documentation/user/chords.itely
Documentation/user/expressive.itely
Documentation/user/fretted-strings.itely
Documentation/user/fundamental.itely
Documentation/user/keyboards.itely
Documentation/user/rhythms.itely
Documentation/user/simultaneous.itely
Documentation/user/spacing.itely
Documentation/user/staff.itely
Documentation/user/text.itely
Documentation/user/vocal.itely
VERSION
buildscripts/check_texi_refs.py [new file with mode: 0755]
buildscripts/makelsr.py
flower/include/drul-array.hh
input/regression/arpeggio-parenthesis.ly [new file with mode: 0644]
input/regression/completion-heads-lyrics.ly [new file with mode: 0644]
input/regression/tie-direction-broken.ly [new file with mode: 0644]
lily/align-interface.cc
lily/arpeggio.cc
lily/axis-group-interface.cc
lily/completion-note-heads-engraver.cc
lily/dynamic-align-engraver.cc [new file with mode: 0644]
lily/dynamic-engraver.cc
lily/engraver.cc
lily/figured-bass-engraver.cc
lily/global-context-scheme.cc
lily/grob.cc
lily/hairpin.cc
lily/include/arpeggio.hh
lily/include/lily-proto.hh
lily/include/prob.hh
lily/include/skyline-pair.hh [new file with mode: 0644]
lily/include/skyline.hh
lily/include/spanner.hh
lily/include/tie-details.hh
lily/lyric-combine-music-iterator.cc
lily/new-dynamic-engraver.cc [new file with mode: 0644]
lily/paper-column.cc
lily/paper-system-scheme.cc [new file with mode: 0644]
lily/prob-scheme.cc
lily/separation-item.cc
lily/skyline-pair.cc [new file with mode: 0644]
lily/skyline.cc
lily/spacing-interface.cc
lily/spacing-spanner.cc
lily/system.cc
lily/tie-details.cc
lily/tie-formatting-problem.cc
lily/tie.cc
ly/engraver-init.ly
ly/spanners-init.ly
make/doclang-rules.make
scm/define-context-properties.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/music-functions.scm

index cf7e3a2e01db51491f6d9b7be1cce5a940d0692f..ad7b0f2e3dc1ecb611e5b0e58bdbfdd7b20393c7 100644 (file)
@@ -2092,7 +2092,7 @@ gesetzt, verminderte Quinten und Septimen mit @code{5/} und @code{7/}.
 
 Pausen können mit @code{_} notiert werden. Klammern werden mit @code{[}
 und @code{]} gesetzt. Text kann auch eingefügt werden nach den Regeln im 
-Abschnitt @ref{Overview of text markup commands}.
+Abschnitt @ref{Text markup commands}.
 
 @example
 < [4 6] 8 [_! 12] > < 5 \markup @{ \number 6 \super (1) @} >
index a7e8afc12c86bfe31759cdc0c91f8cda1f910952..ec6f9efcde178d6dc24a298b1636baedd8b96c83 100644 (file)
@@ -25,6 +25,7 @@
 @menu
 * Articulations::               
 * Dynamics::                    
+* New dynamic marks::           
 @end menu
 
 @node Articulations
@@ -299,6 +300,12 @@ Vertikale Positionierung der Symbole wird von der Eigenschaft
 @internalsref{DynamicLineSpanner} verwaltet.
 
 
+@node New dynamic marks
+@subsubsection New dynamic marks
+
+UNTRANSLATED NODE: IGNORE ME
+
+
 @node Curves
 @subsection Curves
 
index 58c9b103fe5536601677f0cd7ded99077a578c4a..f63579dc284e27f25a88e6aefae8e3c2eebb35db 100644 (file)
@@ -270,15 +270,15 @@ erwünschte Akkordtabulatur, wie das folgende Beispiel zeigt:
 }
 @end lilypond
 
-Es gibt drei Modi für die Abbildung der Tabulatur: den Standardmodus, 
-einen ausführlichen Modus und einen knappen Modus. Die unterschiedlichen 
-Modi werden angewählt, indem an den Befehl @code{fret-diagram} die Begriffe
-@code{-standard}, @code{-verbose} bzw. @code{-terse} angehängt werden.
-Die Modi produzieren gleichwertige Ausgaben, haben aber unterschiedliche 
-Informationen im Beschriftungsbefehl. Details über die 
-Beschriftungsbefehle finden sich im Abschnitt 
- @ref{Overview of text markup commands}. Alle drei Modi werden im obigen 
- Beispiel gezeigt.
+Es gibt drei Modi für die Abbildung der Tabulatur: den Standardmodus,
+einen ausführlichen Modus und einen knappen Modus. Die
+unterschiedlichen Modi werden angewählt, indem an den Befehl
+@code{fret-diagram} die Begriffe @code{-standard}, @code{-verbose}
+bzw. @code{-terse} angehängt werden.  Die Modi produzieren
+gleichwertige Ausgaben, haben aber unterschiedliche Informationen im
+Beschriftungsbefehl. Details über die Beschriftungsbefehle finden sich
+im Abschnitt @ref{Text markup commands}. Alle drei Modi werden im
+obigen Beispiel gezeigt.
 
 Einige graphische Eigenschaften können verändert werden. Genaueres zur 
 Schnittstelle für die Griffsymboleigenschaften findet sich unter 
@@ -369,7 +369,7 @@ zu signalisieren, dass der Gitarrist eine Note oder einen Akkord spielen
 soll, indem seine Finger die Saiten nur berühren, anstatt sie vollständig 
 herunterzudrücken. Damit werden schlagzeugartige Geräusche erreicht, 
 die aber noch die ursprüngliche Tonhöhe ahnen lassen. Diese Spielart 
-wird mit Kreuz-Notenköpfen notiert, wie im Abschnitt @ref{Special noteheads}
+wird mit Kreuz-Notenköpfen notiert, wie im Abschnitt @ref{Special note heads}
 gezeigt.
 
 
index 14e4e6c3d790fd1c1e7f9872d666203887f09541..f2ba1c1c501f1d89c366052e4e6c4967b08fbbeb 100644 (file)
@@ -135,7 +135,7 @@ vorkommt. Die Namen sind frei wählbar, die Variable kann genauso
 gut  @code{melodie}, @code{GLOBAL},
 @code{rechteHandklavier}, oder @code{foofoobarbaz} heißen. Für mehr
 Information siehe
-@ruser{Saving typing with identifiers and functions}.
+@ref{Saving typing with variables and functions}.
 
 Eine komplette Definition des Eingabeformats findet sich
 im Kapitel @ruser{File structure}.
@@ -155,7 +155,7 @@ UNTRANSLATED NODE: IGNORE ME
 @node Score is a (single) compound musical expression
 @subsection Score is a (single) compound musical expression
 
-Im vorigen Kapitel, @ruser{How LilyPond files work}, 
+Im vorigen Kapitel, @ref{How LilyPond files work}, 
 wurde die allgemeine Struktur einer LilyPond-Quelldatei 
 beschrieben. Aber anscheinend haben wir die wichtigste 
 Frage ausgelassen, nämlich wie man herausfindet, was nach 
@@ -172,7 +172,7 @@ von einem einzelnen musikalischen Ausdruck.}
 
 @noindent
 Vielleicht wollen Sie noch einmal 
-@ruser{Music expressions explained} überfliegen. In diesem
+@ref{Music expressions explained} überfliegen. In diesem
 Kapitel wurde gezeigt, wie sich große musikalische Ausdrücke 
 aus kleinen Teilen zusammensetzen. Noten können zu Akkorden 
 verbunden werden usw. Jetzt gehen wir aber in die andere Richtung 
index e9575498bbb8b046802ec60fed1be95262db1802..84f0c99aabed51f670d577691e35b336234463c1 100644 (file)
@@ -751,7 +751,7 @@ stellt eine einfache Einführung in den Musiksatz dar. Neulinge sollten hiermit
 beginnen.
 
 @item
-@emph{@ref{Putting it all together}},
+@emph{@ref{Fundamental concepts}},
 erklärt generelle Konzepte des LilyPond-Dateiformates. Wenn Sie sich nicht 
 sicher sind, wohin ein Befehl gesetzt werden soll, lesen Sie hier nach.
 
@@ -776,36 +776,32 @@ Grundkonzeption des Programmes im Handbuch zum Lernen bekannt gemacht hat.
 @itemize @bullet
 
 @item
-@emph{@ref{Basic notation}},
+@emph{@ruser{Musical notation}},
 erklärt alles über die grundlegenden Notationskonstruktionen. Dieses Kapitel 
-ist für fast jedes Notationsprojekt  nützlich.
+ist für fast jedes Notationsprojekt nützlich.
 
 @item
-@emph{@ref{Instrument-specific notation}},
+@emph{@ruser{Specialist notation}},
 erklärt spezifische Schwierigkeiten, die sich bei bestimmten Notationstypen 
 ergeben. Dieses Kapitel ist nur in entsprechenden Fällen bestimmter Instrumente 
 oder bei Gesang zu konsultieren.
 
 @item
-@emph{@ref{Advanced notation}},
-erklärt komplizierte oder unübliche Anwendungen nach Notationsgegenstand geordnet.
-
-@item
-@emph{@ref{Changing defaults}},
+@emph{@ruser{Changing defaults}},
 erklärt, wie des Layout getrimmt werden kann.
 
 @item
-@emph{@ref{Non-musical notation}},
+@emph{@ruser{Non-musical notation}},
 zeigt alles, was nicht direkt mit den Noten zu tun hat wie Titel, mehrere Sätze oder 
 wie man ein MIDI-Instrument auswählt.
 
 @item
-@emph{@ref{Spacing issues}},
+@emph{@ruser{Spacing issues}},
 befasst sich mit globalen Fragen wie der Definition von Papierformaten 
 oder wie man Seitenumbrüche definiert.
 
 @item
-@emph{@ref{Interfaces for programmers}},
+@emph{@ruser{Interfaces for programmers}},
 demonstriert die Erstellung von musikalischen Funktionen.
 
 @end itemize
@@ -820,7 +816,7 @@ In diesem Buch werden nützliche Referenztabellen gezeigt.
 @ifhtml
 Die
 @end ifhtml
-@emph{@ref{Literature list}},
+@emph{@ruser{Literature list}},
 enthält einige wichtige Quellen für alle, die mehr über Notation und 
 den Notensatz erfahren wollen.
 
@@ -831,7 +827,7 @@ stellt eine kurze Einleitung in die Scheme-Sprache dar, mit dem
 die musikalischen Funktionen gebildet werden.
 
 @item
-@emph{@ref{Notation manual tables}},
+@emph{@ruser{Notation manual tables}},
 sind Tabellen, in denen Akkordbezeichnungen, MIDI-Instrumente, 
 Farbbezeichnungen und die Zeichen der Feta-Schriftart gesammelt sind.
 
@@ -842,12 +838,12 @@ ein und schreiben Sie noch die Noten dazu. Das ist alles!
 
 @item
 Die
-@emph{@ref{Cheat sheet}},
+@emph{@ruser{Cheat sheet}},
 zeigt die wichtigsten LilyPond-Befehle.
 
 @item
 Der
-@emph{@ref{LilyPond command index}},
+@emph{@ruser{LilyPond command index}},
 listet alle Befehle auf, die mit @code{\} anfangen.
 
 @item
index 36fff71350e21c7ad2717f8b79af62cbc7db33f0..fd38d73776aa2b5ade1094d9d5f3d4d889b786fe 100644 (file)
@@ -149,7 +149,7 @@ wird die Richtung auch über Pausen hinweg im Voraus bestimmt.
 
 @seealso
 
-Im Handbuch: @ref{Manual staff switches}.
+Im Handbuch: @rlearning{Single staff}.
 
 Programmreferenz: @internalsref{AutoChangeMusic}.
  
index 26d461590390098236c459c9dbb3e3e6be1eb9fb..915a85f137fb0524d2fb97788ae1ac27fa21ee23 100644 (file)
 * List of colors::              
 * The Feta font::               
 * Note head styles::            
+* Text markup commands::        
+* Text markup list commands::   
+* List of articulations::       
+* All context properties::      
+* Layout properties::           
+* Identifiers::                 
+* Scheme functions::            
 @end menu
 
 @node Chord name chart
@@ -199,7 +206,7 @@ Die folgenden Symbole sind als Emmentaler-Schriftart verfügbar; auf sie
 kann direkt zugegriffen werden, indem man die übliche Textbeschriftung 
 benutzt. @code{\musicglyph} greift direkt auf die Notationsschriftart 
 zu (bspw. @code{g^\markup @{
-\musicglyph #"scripts.segno" @}}). Siehe auch @ref{Text markup}.
+\musicglyph #"scripts.segno" @}}). Siehe auch @ref{Formatting text}.
 
 @lilypondfile[noindent]{font-table.ly}
 
@@ -215,16 +222,63 @@ Folgende Stile können zur Darstellung der Notenköpfe verwendet werden:
 
 @lilypondfile[noindent]{note-head-style.ly}
 
-@ignore
-@n ode All context properties
-@a ppendixsec All context properties
+@include markup-commands.tely
 
-@i nclude context-properties.tely
+@include markup-list-commands.tely
 
+@node List of articulations
+@appendixsec List of articulations
 
-@n ode Layout properties
-@ap pendixsec Layout properties
+@cindex Akzent
+@cindex Marcato
+@cindex Staccatissimo
+@cindex Espressivo
+@cindex Fermate
+@cindex Gedämpft
+@cindex Staccato
+@cindex Portato
+@cindex Tenuto
+@cindex Aufstrich
+@cindex Abstrich
+@cindex Fußbezeichnung
+@cindex Orgelpedalbezeichnung
+@cindex Triller
+@cindex Offen
+@cindex Flageolet
+@cindex Praller
+@cindex Mordent
+@cindex Doppelpraller
+@cindex Prallermordent
+@cindex Fingersatz
+@cindex Daumenbezeichnung
+@cindex Segno
+@cindex Coda
+@cindex Varcoda
 
-@in clude layout-properties.tely
+Hier ist eine Liste, die alle möglichen Zeichen darstellt:
+
+@lilypondfile[ragged-right,quote]{script-chart.ly}
+
+@node All context properties
+@appendixsec All context properties
+
+@include context-properties.tely
+
+
+@node Layout properties
+@appendixsec Layout properties
+
+@include layout-properties.tely
+
+
+@node Identifiers
+@appendixsec Identifiers
+
+@include identifiers.tely
+
+
+@node Scheme functions
+@appendixsec Scheme functions
+
+@include scheme-functions.tely
 
-@end ignore
index ba6bf2faa37dab849fe6e2cea3ccabdc150b02ba..bb1257432058a174fc35e183f0d25c482272da45 100644 (file)
@@ -17,6 +17,7 @@ This section discusses how to specify the pitch of notes.
 * Writing pitches::             
 * Changing multiple pitches::   
 * Displaying pitches::          
+* Note heads::                  
 @end menu
 
 
@@ -540,6 +541,8 @@ innerhalb von @code{\transpose} befinden.
 * Key signature::               
 * Ottava brackets::             
 * Instrument transpositions::   
+* Automatic accidentals::       
+* Ambitus::                     
 @end menu
 
 @node Clef
@@ -740,3 +743,46 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
+
+@node Automatic accidentals
+@unnumberedsubsubsec Automatic accidentals
+
+UNTRANSLATED NODE: IGNORE ME
+
+@node Ambitus
+@unnumberedsubsubsec Ambitus
+
+UNTRANSLATED NODE: IGNORE ME
+
+
+@node Note heads
+@subsection Note heads
+
+UNTRANSLATED NODE: IGNORE ME
+
+@menu
+* Special note heads::          
+* Easy notation note heads::    
+* Shape note heads::            
+* Improvisation::               
+@end menu
+
+@node Special note heads
+@unnumberedsubsubsec Special note heads
+
+UNTRANSLATED NODE: IGNORE ME
+
+@node Easy notation note heads
+@unnumberedsubsubsec Easy notation note heads
+
+UNTRANSLATED NODE: IGNORE ME
+
+@node Shape note heads
+@unnumberedsubsubsec Shape note heads
+
+UNTRANSLATED NODE: IGNORE ME
+
+@node Improvisation
+@unnumberedsubsubsec Improvisation
+
+UNTRANSLATED NODE: IGNORE ME
index 5eb6faf016c72ad8fae53e1feab2eedc6bfa8deb..63549e5e97531bf9ef87bd17f813f5cc88518bbd 100644 (file)
@@ -236,7 +236,7 @@ Setzt eine @code{:|} Taktlinie.
 @item @code{(volta @var{text})}
 Setzt eine Volta-Klammer mit der Beschriftung @var{text}: Der Text 
 kann definiert werden als Textstring oder formatierter Text, siehe 
-Abschnitt @ref{Text markup}. Es darf nicht vergessen werden, die 
+Abschnitt @ref{Formatting text}. Es darf nicht vergessen werden, die 
 Schriftart zu verändern, weil die Standardschriftart für die Nummern 
 keine Buchstaben enthält.
 
index 00a5afb8c0ec3da71bb075b31bbaa8d9a6925028..0a61ccbcbc0e15ea493c9870dff98d2c4297b721 100644 (file)
@@ -655,6 +655,7 @@ Programmreferenz: @internalsref{Completion_heads_engraver}.
 * Automatic beams::             
 * Manual beams::                
 * Feathered beams::             
+* Setting automatic beam behavior::  
 @end menu
 
 @node Automatic beams
@@ -778,6 +779,11 @@ Balken vermeiden nicht andere Objekte, wie etwa Text und Versetzungszeichen.
 
 UNTRANSLATED NODE: IGNORE ME
 
+@node Setting automatic beam behavior
+@unnumberedsubsubsec Setting automatic beam behavior
+
+UNTRANSLATED NODE: IGNORE ME
+
 
 @node Bars
 @subsection Bars
index c444bbafe522defadd6aaaa3afa2be9d86af7503..969a83dcd1ae5ba3f69cfa0616206a812bdda36a 100644 (file)
@@ -45,7 +45,7 @@ einfachen Noten.
 <c e g>4 <c>8
 @end lilypond
 
-Siehe @ref{Chord names} für mehr Information.
+Siehe @ref{Chord notation} für mehr Information.
 
 
 @node Clusters
@@ -265,7 +265,7 @@ mehr Stimmen benötigt werden, um Zusammenstöße zwischen Noten zu
 vermeiden. Zusätzliche Stimmen werden durch einen neuen Bezeichner 
 erstellt, wie das nächste Beispiel zeigt.
 
-@lilypond[quote,verbatim,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
 
 \relative c''' <<
index 838177ac6768a8e7621d24b6a6964fc8e0c8bbeb..b72ead7ab22ccb8103a00c8895767c312c69e4f3 100644 (file)
@@ -947,7 +947,7 @@ also hat eine Triole 2/3 als Bruch:
 @cindex Vorhalt
 @subheading Grace notes
 
-Glossar: @rglos{grace notes}, @rglos{acciacccatura},
+Glossar: @rglos{grace notes}, @rglos{acciaccatura},
 @rglos{appoggiatura}.
 
 Verzierungen werden mit dem Befehl @code{\grace}
@@ -1217,7 +1217,7 @@ oder auch zwischen System gesetzt werden.
 
 @seealso
 
-Benutzerhandbuch: @ruser{Piano music}, 
+Benutzerhandbuch: @ruser{Keyboard instruments},
 @ruser{Displaying staves}.
 
 
index 004900045c5ac708dea53ba4d0858fcc2c9dfc70..f899f4cbe3d835b8b4dbcb14db5e9de512aee53d 100644 (file)
@@ -167,13 +167,13 @@ c4^"piu mosso" d e f
 
 @seealso
 
-@ruser{The \override command}, @ruser{Common tweaks}.
+@ruser{The \override command}, @ref{Common tweaks}.
 
 
 @node Fixing overlapping notation
 @section Fixing overlapping notation
 
-Im Kapitel @ruser{Moving objects} wurde gezeigt, wie man Texte 
+Im Kapitel @ref{Moving objects} wurde gezeigt, wie man Texte 
 (@code{TextScript}-Objekte) verschiebt. Mit der gleichen 
 Technik können auch andere Objektklassen verschoben werden, 
 @code{TextScript} muss dann nur durch den Namen des Objektes 
@@ -482,7 +482,7 @@ werden kann, indem man Befehle wie
 @code{\override TextScript #'extra-offset = ( 1 . -1)} benutzt. Aber 
 noch mehr Einfluss auf die Formatierung kann durch den Einsatz von 
 Scheme genommen werden. Eine vollständige Erklärung findet sich in der 
- @ruser{Scheme tutorial} und den
+ @ref{Scheme tutorial} und den
 @ruser{Interfaces for programmers}.
 
 Scheme kann benutzt werden, um einfach nur Befehle zu @qq{überschreiben} 
index 04e6c8e8d286f6593a9ba7dfc419c3e49ec69248..04fde422414a66b74f150962fac6293a11422511 100644 (file)
@@ -119,9 +119,9 @@ ersparen Sie sich viele Probleme, wenn Sie ihre Musik
 eines Tages umarrangieren wollen.
 
 @item @strong{Trennen Sie Einstellungen} von den eigentlichen 
-Noten. Siehe auch @ruser{Saving typing with identifiers and functions} 
+Noten. Siehe auch @ref{Saving typing with variables and functions} 
 und
-@ruser{Style sheets}.
+@ref{Style sheets}.
 
 @end itemize
 
@@ -182,7 +182,7 @@ g4 c'8. e16
 @end example
 
 @item @strong{Trennen Sie Einstellungen von den Noten}.  Diese 
-Empfehlung wurde schon im Abschnitt @ruser{General suggestions} gegeben, 
+Empfehlung wurde schon im Abschnitt @ref{General suggestions} gegeben, 
 aber für große Projekte ist es unumgänglich. Muss z. B. die 
 Definition für @code{fdannp} verändert werden, so braucht 
 man es nur einmal vorzunehmen und die Noten in der Geigenstimme, 
@@ -298,9 +298,9 @@ padText =
 
 Die Benutzung von Variablen hilft auch, viele Schreibarbeit zu 
 vermeiden, wenn die Eingabesyntax von LilyPond sich verändert 
-(siehe auch @ruser{Updating old files}). Wenn nur eine einzige 
+(siehe auch @ref{Updating old files}). Wenn nur eine einzige 
 Definition (etwa @code{\dolce}) für alle Dateien verwendet wird 
-(vgl. @ruser{Style sheets}), muss nur diese einzige Definition 
+(vgl. @ref{Style sheets}), muss nur diese einzige Definition 
 verändert werden, wenn sich die Syntax ändert. Alle Verwendungen 
 des Befehles beziehen sich dann auf die neue Definition.
 
@@ -308,14 +308,14 @@ des Befehles beziehen sich dann auf die neue Definition.
 @subsection Style sheets
 
 Die Ausgabe, die LilyPond erstellt, kann sehr stark modifiziert 
-werden, siehe @ruser{Tweaking output} für Einzelheiten. Aber wie 
+werden, siehe @ref{Tweaking output} für Einzelheiten. Aber wie 
 kann man diese Änderungen auf eine ganze Serie von Dateien 
 anwenden? Oder die Einstellungen von den Noten trennen? Das 
 Verfahren ist ziemlich einfach.
 
 Hier ist ein Beispiel. Es ist nicht schlimm, wenn Sie nicht auf 
 Anhieb die Abschnitte mit den ganzen @code{#()} verstehen. Das 
-wird im Kapitel @ruser{Advanced tweaks with Scheme} erklärt.
+wird im Kapitel @ref{Advanced tweaks with Scheme} erklärt.
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
@@ -336,7 +336,7 @@ tempoMark = #(define-music-function (parser location markp) (string?)
 @end lilypond
 
 Es treten einige Probleme mit überlappenden Symbolen auf. Sie 
-werden beseitigt mit den Tricks aus dem Kapitel @ruser{Moving objects}.
+werden beseitigt mit den Tricks aus dem Kapitel @ref{Moving objects}.
 Aber auch die @code{mpdolce} und @code{tempoMark}-Definitionen 
 können verbessert werden. Sie produzieren das Ergebnis, das 
 gewünscht ist, aber es wäre schön, sie auch in anderen Stücken 
@@ -664,7 +664,7 @@ Bassstimme wieder hineinzunehmen, bis Sie die problematische
 Zeile finden.
 
 Eine andere nützliche Technik zur Problemlösung ist es, 
-@ruser{Minimal examples} zu konstruieren.
+@ref{Minimal examples} zu konstruieren.
 
 
 @node Minimal examples
@@ -840,7 +840,7 @@ Und mit LilyPond übersetzt:
 
 Tiefer gehende Information darüber, wie Stimmauszüge und Partituren 
 erstellt werden, finden sich im Notationshandbuch, siehe 
-@ruser{Orchestral music}.
+@ref{Scores and parts}.
 
 Das Setzen der Variablen, die das Verhalten von LilyPond beeinflussen 
 (@q{properties}), wird im Kapitel
index 9a278a268801940cfb8d6dae33ea1fdf06f8efb4..16ab26fbb178467ae366ed4af60502975abaf021 100644 (file)
@@ -2062,7 +2062,7 @@ quintas y séptimas disminuidas se pueden obtener con @code{5/} y @code{7/}.
 
 Se pueden insertar espacios mediante el uso de @code{_}.  Los corchetes se
 escriben con @code{[} y @code{]}. También puede incluir cadenas de
-texto y elementos de marcado textuales, consulte @ref{Overview of text markup commands}.
+texto y elementos de marcado textuales, consulte @ref{Text markup commands}.
 
 @example
 < [4 6] 8 [_! 12] > < 5 \markup @{ \number 6 \super (1) @} >
index 2f8ab8d40908d5059827e11b1bbb3b358ee76e73..da8993e8ea8b4fe89a013736b0630d8bdfe6acda 100644 (file)
@@ -488,7 +488,7 @@ En el segundo pentagrama no hay indicación de compás ni clave.  Ésta es
 una forma un poco fuerte de hacer desaparecer objetos, porque afectará
 al pentagrama completo.  Este método también influye en el espaciado, lo que podría ser
 deseable o no.  Un método más
-sofisticado de borrar objetos se muestra en @rlearning{Common tweaks}.
+sofisticado de borrar objetos se muestra en @rlearning{Further tweaking}.
 
 El ejemplo siguiente muestra una aplicación práctica.  Las líneas divisorias y las indicaciones
 de compás están normalmente sincronizadas en toda la partitura.  Esto se hace
@@ -1162,7 +1162,7 @@ sí se pueden modificar.
 
 Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero realmente esto no significa
 mucho.  El archivo de inicialización (véase
-@rlearning{Default files})
+@ref{File structure})
 @file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto},
 
 @example
index 8eb04593a9219cf94fa9a3bec87a2f38ecf93919..1f298fcc534610c0a23224cbfcbed5835bae4ff2 100644 (file)
 @section Chord notation
 
 @menu 
-* TODO chords fix::
+* Modern chords::
 @end menu 
 
 
-@node TODO chords fix
-@subsection TODO chords fix
+@node Modern chords
+@subsection Modern chords
 
 @menu
 * Entering chord names::     
index 9dd00e441d227c67ee79433e62f3ef6bb766dc98..fbdb3eb9b50fc4c96d4e397462b479889bb83f27 100644 (file)
@@ -49,7 +49,7 @@ de notación.  Esto no cambia el tamaño de los símbolos variables, como
 las barras de corchea o las ligaduras.
 
 @warning{Para los tamaños de tipografía del @strong{texto}, consulte
-@ref{Common markup commands}.}
+@ref{Text markup list commands}.}
 
 @lilypond[quote,fragment,relative=2,verbatim,ragged-right]
 \huge
@@ -500,7 +500,7 @@ sincronizadas con las notas.
 @snippets
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
-{grid-lines-changing-their-appearance.ly}
+{grid-lines--changing-their-appearance.ly}
 
 
 @seealso
index f633b4acb6855f79fde9c3847eecd90aaffd77fc..cfab53a48a726763e389df1c97117fbce70702f8 100644 (file)
@@ -263,7 +263,7 @@ ejemplo siguiente
 Existen tres interfaces distintos para el marcado de los diagramas de trastes: estándar, escueto
 y prolijo.  Los tres interfaces producen unos elementos de marcado equivalentes, pero tienen
 cantidades variables de información en la cadena de marcado.  Se pueden encontrar
-más detalles sobre los interfaces de marcado en @ref{Overview of text markup commands}.
+más detalles sobre los interfaces de marcado en @ref{Text markup commands}.
 
 Puede establecer un cierto número de propiedades gráficas según su elección.
 Se pueden encontrar más detalles sobre el interface de las propiedades de los diagramas de trastes en
index e7f3b05ca9cd1548ed304542e660a6407ac83a51..953ebad9336d18de46af18be70d46c8f6dcd1fdb 100644 (file)
@@ -193,7 +193,7 @@ consulte @ruser{File structure}.
 @cindex expresión musical compuesta
 @cindex música, expresión compuesta de
 
-En la sección anterior, @ruser{How LilyPond files work} hemos podido
+En la sección anterior, @ref{How LilyPond files work} hemos podido
 ver la organización general de los archivos de entrada de LilyPond.
 Pero parece que nos saltamos la parte más importante: ¿cómo
 averiguamos qué escribir después de @code{\score}?
@@ -207,7 +207,7 @@ todo:
 @end quotation
 
 @noindent
-Quizá encuentre útil dar un repaso a @ruser{Music expressions
+Quizá encuentre útil dar un repaso a @ref{Music expressions
 explained}.  En esta sección, vimos cómo elaborar grandes expresiones
 musicales a partir de pequeñas piezas (comenzábamos con notas, luego
 acordes, etc.).  Ahora partiremos de una gran expresión musical y
@@ -1894,8 +1894,7 @@ Esto parece un poco enrevesado; los márgenes están descuadrados.  Esto
 tiene fácil solución.  Presentamos aquí la plantilla completa para
 soprano y cello.
 
-@lilypond[quote,verbatim,ragged-right]
-\version "2.11.38"
+@lilypond[quote,verbatim,ragged-right,addversion]
 sopranoMusic = \relative c' {
   \clef treble
   \key c \major
@@ -2115,8 +2114,7 @@ Los grupos ChoirStaff y PianoStaff se deben combinar utilizando
 Al combinar todo esto junto y escribir la música de los tres compases
 del ejemplo anterior, obtenemos:
 
-@lilypond[quote,verbatim,ragged-right]
-\version "2.11.38"
+@lilypond[quote,verbatim,ragged-right,addversion]
 global = { \key d \major \time 4/4 }
 sopMusic = \relative c'' {
   \clef "treble"
@@ -2320,8 +2318,7 @@ pentagramas tendrá una estructura similar, aunque el número de voces
 puede variar.  Todo lo que nos queda es añadir la música, y combinar
 todas las partes.
 
-@lilypond[quote,verbatim,ragged-right]
-\version "2.11.38"
+@lilypond[quote,verbatim,ragged-right,addversion]
 \header {
   title = "Jesu, meine Freude"
   composer = "J S Bach"
index 33f50f5797c1da842bbc760a84c0ec9c68862d4a..8e8105c657d2a4d5974696524749ed68820684f8 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
 @ignore
-    Translation of GIT committish: 03184badb3c2378e1ab3eec6ee62a6bdc0609082
+    Translation of GIT committish: 23542761090f167ad42dbff7ef11d44a9c1374ac
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -242,7 +242,7 @@ Cuando empezamos, escribimos el programa LilyPond completamente en el lenguaje C
 la funcionalidad del programa quedaba como esculpida en piedra por los desarrolladores.
 Este esquema resultó no ser muy satisfactorio por una serie de motivos:
 
-@itemize @bullet
+@itemize
 @item Cuando LilyPond comete fallos,
 los usuarios tienen la necesidad de superar las decisiones de formateo.  Por
 ello el usuario debe tener acceso
index 915d5dcad2f2ee35a7c074d7c5a13e537b75c1aa..1cb45c78d1f381bae0322137c01ca8526a2feac2 100644 (file)
 @section Keyboard instruments
 
 @menu
-* Piano sections::              
+* Common notation for keyboards::  
+* Piano::                       
+* Accordion::                   
 @end menu
 
 @node Common notation for keyboards
 @subsection Common notation for keyboards
 
 @menu
-* Automatic staff changes::     
-* Manual staff switches::       
-* Pedals::                      
-* Staff switch lines::          
-* Cross staff stems::           
+* References for keyboards::    
+* The piano staff::             
+* Changing staff manually::     
+* Changing staff automatically::  
+* Staff-change lines::          
+* Cross-staff stems::           
 @end menu
 
 @node References for keyboards
@@ -141,7 +144,7 @@ práctico
 
 @seealso
 
-En este manual: @ref{Manual staff switches}.
+En este manual: @ref{Inside the staff}.
 
 Referencia del programa: @internalsref{AutoChangeMusic}.
 
@@ -230,7 +233,7 @@ noFlag = \once \override Stem #'flag-style = #'no-flag
 @subsection Piano
 
 @menu
-* Piano pedals::
+* Piano pedals::                
 @end menu
 
 @node Piano pedals
@@ -307,7 +310,7 @@ Referencia de la notación: @ref{Ties} (laissez vibrer).
 @subsection Accordion
 
 @menu
-* Discant symbols::
+* Discant symbols::             
 @end menu
 
 @node Discant symbols
index 52f8788de8565fb75bb34427096a1e785d8e418b..06248d28c3b5ef2f770f0016afa0e5241a131659 100644 (file)
@@ -18,8 +18,8 @@
 * List of colors::              
 * The Feta font::               
 * Note head styles::            
-* Overview of text markup commands::  
-* Overview of text markup list commands::  
+* Text markup commands::  
+* Text markup list commands::  
 * List of articulations::       
 * All context properties::      
 * Layout properties::           
@@ -213,17 +213,15 @@ Se pueden usar los siguientes estilos para las cabezas de las notas.
 @lilypondfile[noindent]{note-head-style.ly}
 
 
-@node Overview of text markup commands
-@appendixsec Overview of text markup commands
-
+@ignore
 Todas las instrucciones siguientes se pueden usar dentro de @code{\markup @{ @}}.
+@end ignore
 
 @include markup-commands.tely
 
-@node Overview of text markup list commands
-@appendixsec Overview of text markup list commands
-
+@ignore
 Todas las instrucciones siguientes se pueden utilizar con @code{\markuplines}.
+@end ignore
 
 @include markup-list-commands.tely
 
index ff2bd28b48dbc91836421cf2a9ba63efa2d01bd9..39fc9b98dd6204913fdcfd18d1570380da4e4f72 100644 (file)
@@ -99,7 +99,7 @@ down = \drummode { bassdrum4 snare8 bd r bd sn4 }
 @end lilypond
 
 El ejemplo anterior muestra una notación polifónica prolija.  La notación
-polifónica abreviada, descrita en @ref{Basic polyphony}, también se puede usar si
+polifónica abreviada, descrita en @rlearning{I'm hearing Voices}, también se puede usar si
 las @internalsref{DrumVoice}s se instancian primero a mano.  Por ejemplo,
 
 @lilypond[quote,ragged-right,fragment,verbatim]
index 5d1a98f1298a1201265df7c396cd76a136596cb2..607f6bfc766c92bb3e6fc45dcc882a50306c5a05 100644 (file)
@@ -340,7 +340,7 @@ Glosario musical:
 @rglos{double sharp},
 @rglos{double flat},
 @rglos{Pitch names},
-@rglos{quarter-tone}.
+@rglos{semitone}.
 
 Manual de aprendizaje:
 @rlearning{Accidentals and key signatures}.
index 30933bc736997018f944bed9d15ced3356fdc269..c9eb8c28ada32d8e2509ac986cc1ec60bddcf172 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 4123193c08a3d9c8a54a3d058ab2be8511e4e075
+    Translation of GIT committish: b5ba45ccb092324961dac292dc58cc0eddbc7307
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -35,32 +35,41 @@ a tener más de una voz en el mismo pentagrama.
 @subsubsection Chorded notes
 
 @cindex acordes
+@cindex paréntesis en ángulo
+@funindex <
+@funindex >
+@funindex <...>
 
 Un acorde se forma encerrando un conjunto de notas entre @code{<} y
 @code{>}.  Un acorde puede ir seguido de una duración o un conjunto de
 articulaciones, como si fueran simples notas.
 
 @lilypond[verbatim,ragged-right,fragment,quote,relative=1]
-<c e g>4 <c>8
+<c e g>2 <c f a>4-> <e g c>-.
 @end lilypond
 
-Para ver más información sobre los acordes, consulte @ref{Entering chord
-names}.
+Para ver más información sobre los acordes, consulte @ref{Modern chords}.
 
 @seealso
 
 Glosario musical:
 @rglos{chord}.
 
-Referencia de la notación: @ref{Entering chord names}.
+Manual de aprendizaje:
+@rlearning{Combining notes into chords}.
 
-Fragmentos de código:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+Referencia de la notación:
+@ref{Modern chords}.
+
+Snippets:
+@rlsr{Simultaneous notes}.
 
 @knownissues
 
-Las expresiones musicales como @code{<< @{ g8 e8 @} a4 >>} no se
-imprimen con exactitud.  Utilice @code{<g a>8 <e a>8} en su lugar.
+Por algún motivo, expresiones musicales como @code{<< @{ g8 e8 @} a4
+>>}, que se deberían convertir en acordes, aparecen en dos pentagramas
+separados.  Para evitarlo emplee acordes explícitos como en
+@code{<g a>8 <e a>8}.
 
 
 
@@ -71,12 +80,11 @@ imprimen con exactitud.  Utilice @code{<g a>8 <e a>8} en su lugar.
 @cindex racimo (cluster)
 
 Un «cluster» o racimo indica que se deben tocar simultáneamente un
-conjunto de notas consecutivas.  Se pueden denotar como la envolvente
-de un conjunto de notas.  Se introducen aplicando la función
-@code{makeClusters} a una secuencia de cordes, p.ej.:
+conjunto de notas consecutivas.  Se escriben aplicando la función
+@code{\makeClusters} a una secuencia de acordes, p.ej.:
 
 @lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\makeClusters { <c e > <b f'> }
+\makeClusters { <g b>2 <c g'> }
 @end lilypond
 
 Se pueden mezclar en el mismo pentagrama notas normales y clusters,
@@ -85,16 +93,27 @@ evitar automáticamente las colisiones entre clusters y notas normales.
 
 @seealso
 
+Glosario musical:
+@rglos{cluster}.
+
 Fragmentos de código:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
 Referencia de funcionamiento interno:
 @internalsref{ClusterSpanner},
 @internalsref{ClusterSpannerBeacon},
 @internalsref{Cluster_spanner_engraver}.
 
-Examples: @c @lsr{contemporary,cluster@/.ly}.
+@c Examples: @rlsr{contemporary,cluster@/.ly}.
+
+@knownissues
+
+Los clusters sólo tienen un buen aspecto cuando abarcan un mínimo de
+dos acordes.  En caso contrario aperecerán excesivamente estrechos.
 
+Los clusters no llevan plica y por sí mismos no pueden indicar las
+duraciones.  Los racimos separados necesitarían silencios de
+separación entre ellos.
 
 @node Multiple voices
 @subsection Multiple voices
@@ -183,7 +202,7 @@ adicionales para evitar colisiones entre las notas.  Las voces
 adicionales se añaden definiendo una variable, como se muestra a
 continuación:
 
-@lilypond[quote,verbatim,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
 
 \relative c''' <<
@@ -322,7 +341,7 @@ Si queremos sólo las partes mezcladas y no las marcas textuales,
 podemos establecer la propiedad @code{printPartCombineTexts} al valor
 false.
 
-@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
+@lilypond[quote,verbatim,ragged-right,fragment]
 \new Staff <<
   \set Staff.printPartCombineTexts = ##f
   \partcombine
@@ -335,7 +354,7 @@ Para cambiar el texto que se imprime para los solos o la fusión,
 podemos establecer las propiedades @code{soloText}, @code{soloIIText}
 y @code{aDueText}.
 
-@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
+@lilypond[quote,verbatim,ragged-right,fragment]
 \new Staff <<
   \set Score.soloText = #"ichi"
   \set Score.soloIIText = #"ni"
@@ -400,10 +419,10 @@ La música para varias partes se puede intercalar:
 
 @lilypond[quote,fragment,verbatim]
 \parallelMusic #'(voiceA voiceB) {
-  r8     g'16[ c''] e''[ g' c'' e''] r8     g'16[ c''] e''[ g' c'' e''] |
-  c'2                                c'2                                |
-  r8     a'16[ d''] f''[ a' d'' f''] r8     a'16[ d''] f''[ a' d'' f''] |
-  c'2                                c'2                                |
+  r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] |
+  c'2                               c'2                         |
+  r8 a'16[ d''] f''[ a' d'' f''] r8 a'16[ d''] f''[ a' d'' f''] |
+  c'2                               c'2                         |
 }
 \new StaffGroup <<
   \new Staff \new Voice \voiceA
@@ -414,36 +433,36 @@ La música para varias partes se puede intercalar:
 Esto funciona bastante bien para música de piano.
 
 @lilypond[quote,verbatim]
+global = { \key g \major  \time 2/4 }
 music = {
-  \key c \major
-  \time 4/4
   \parallelMusic #'(voiceA voiceB voiceC voiceD) {
-    % Bar 1
-    r8  g'16[ c''] e''[ g' c'' e''] r8  g'16[ c''] e''[ g' c''
-e''] |
-    c'2                                 c'2 |
-    r8  a16[ d'] f'[ a d' f']       r8  a16[ d'] f'[ a d' f'] |
-    c2                                  c2 |
+    % Bar 1 
+    a'8 b'      c'' d''   |
+    d'4         e'        |
+    c16 d e f   d e f g   |
+    a,4         a,4       |
 
     % Bar 2
-    a'8 b'      c'' d''    e'' f''    g'' a'' |
-    d'4         d'         d'         d' |
-    c16 d e f   d e f g    e f g a    f g a b |
-    a,4         a,4        a,4        a,4 |
+    e''8 f''    g'' a''   |
+    f'4         g'        |
+    e16 f g a   f g a b   |
+    a,4         a,4       |
 
     % Bar 3 ...
   }
 }
 
-\score {
+\score {      
   \new PianoStaff <<
-    \music
-    \new Staff <<
-      \voiceA \\
-      \voiceB
-    >>
     \new Staff {
-      \clef bass
+      \global
+      <<
+        \voiceA \\
+        \voiceB
+      >>
+    }
+    \new Staff {
+      \global \clef bass
       <<
         \voiceC \\
         \voiceD
@@ -456,5 +475,5 @@ e''] |
 @seealso
 
 Fragmentos de código:
-@lsrdir{Simultaneous,Simultaneous-notes}
+@rlsr{Simultaneous notes}.
 
index f2cd98e2e1f5ed517a4e0eb791e37510563358e2..77f75525ec67ad254e593aba57cf27bdf438ece8 100644 (file)
@@ -8,6 +8,9 @@
 
 @c \version "2.11.38"
 
+@node Specialist notation
+@chapter Specialist notation
+
 This chapter explains how to create musical notation for specific
 types of instrument or in specific styles.
 
index ad03e6e9031be1137bb5da5c82874e2937deb48a..7e320c2d00850e17935256c51bc46a5ed4d39596 100644 (file)
@@ -1490,7 +1490,7 @@ violin concerto as TchaikovskyPI, whereas perhaps you wish to print
 @appendixsec lilypond-book templates
 
 Estas plantillas se usan para @code{lilypond-book}.  Si no está familiarizado con este
-programa, consulte @rprogram{lilypond-book}.
+programa, consulte @rprogram{LilyPond-book}.
 
 @appendixsubsec LaTeX
 
index 33c565a79a9644629b596852db78ad8933ccf7f1..87c915e9ae6c5dc5954791b0d4f212169cbb04c1 100644 (file)
@@ -446,7 +446,7 @@ indicaciones.  Tenga en cuenta que la tipografía de dinámica contiene solament
 Algunas situaciones (como las indicaciones de dinámica) tienen propiedades de tipografía
 establecidas como fijas.  Si estamos creando texto en estas situaciones,  se recomienda
 cancelar dichas propiedades con
-@code{normal-text}.  Consulte @ref{Overview of text markup commands} para
+@code{normal-text}.  Consulte @ref{Text markup commands} para
 ver más detalles.
 
 @cindex make-dynamic-script
@@ -503,7 +503,7 @@ c1_\markup { "\special {weird} #characters" }
 @end lilypond
 
 @noindent
-Consulte @ref{Overview of text markup commands}, para ver una lista de todas las
+Consulte @ref{Text markup commands}, para ver una lista de todas las
 instrucciones.
 
 @code{\markup} se usa principalmente para indicaciones del tipo @internalsref{TextScript},
@@ -621,13 +621,13 @@ c'4^\markup{ \hspace #0 \raise #1.5 raised }
 Algunas situaciones (como las indicaciones de dinámica) tienen propiedades de tipografía
 preestablecidas.  Si está creando texto en tales situaciones, recomendamos
 cancelar dichas propiedades con
-@code{normal-text}.  Consulte @ref{Overview of text markup commands}
+@code{normal-text}.  Consulte @ref{Text markup commands}
 para ver más detalles.
 
 
 @seealso
 
-En el presente manual: @ref{Overview of text markup commands}.
+En el presente manual: @ref{Text markup commands}.
 
 Referencia del programa: @internalsref{TextScript}.
 
@@ -685,11 +685,11 @@ que se pueden extender sobre varias páginas:
 @code{\markuplines} admite una lista de elementos de marcado, ya sea el resultado de
 una instrucción de lista de marcado, o una lista de elementos o listas de elementos. Las
 instrucciones incorporadas de lista de elementos de marcado se describen en
-@ref{Overview of text markup list commands}.
+@ref{Text markup list commands}.
 
 @seealso
 
-En este manual: @ref{Overview of text markup list commands}, 
+En este manual: @ref{Text markup list commands}, 
 @ref{New markup list command definition}.
 
 @predefined
index 09d99cb5bfd7c2e6e3185baab3753a8c9c1d5634..b0538699e316c0d065d95c1af628e3615df55d3a 100644 (file)
@@ -1299,7 +1299,7 @@ Una vez más, las expresiones de este tipo se pueden anidar de forma arbitraria.
 
 @seealso
 
-Notation Reference: @ruser{Simultaneous notes}.
+Referencia de la notación: @ruser{Simultaneous notes}.
 
 
 @node Songs
@@ -1677,7 +1677,7 @@ más detalles, consulte @rprogram{Updating files with convert-ly}).
 La información sobre el título, autor, número de Opus y similares se
 escriben en el bloque @code{\header}.  Éste se encuentra fuera de la
 expresión musical principal; el bloque @code{\header} normalmente se
-sitúa por debajo del @ruser{Version number}.
+sitúa por debajo del @ref{Version number}.
 
 @example
 \version @w{"@version{}"}
@@ -1780,7 +1780,7 @@ Después de terminar el tutorial, quizá debería probar a escribir una o
 dos piezas.  Comience con una de las plantillas del @ref{Templates} y
 añada algunas notas.  Si necesita un tipo de notación que no ha sido
 tratada en el tutorial, eche un vistazo a la Referencia de Notación,
-empezando por @ruser{Basic notation}.  Si quiere escribir música para
+empezando por @ruser{Musical notation}.  Si quiere escribir música para
 un conjunto instrumental que no está cubierto por ninguna plantilla,
 consulte @ref{Extending the templates}.
 
index 98f06479bb56c0ebac2fd1c544612db0206775c2..82aaf3be85b429900c1a48c8d37d727c40f2b80d 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
 @ignore
-    Translation of GIT committish: 7cc6b12897031c450e3399d59cdb22ca9df4fd8c
+    Translation of GIT committish: 23542761090f167ad42dbff7ef11d44a9c1374ac
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -2844,7 +2844,7 @@ voces?  El índice de la Referencia de la Notación no menciona la
 mezcla de notas, pero una búsqueda de texto por la palabra @q{fusión}
 o @q{mezcla} nos lleva rápidamente a las sobreescrituras necesarias
 para mezclar o fusionar notas con distinta cabeza y con o sin puntillo
-en @ruser{Collision Resolution}.  En nuestro ejemplo tenemos que
+en @ruser{Collision resolution}.  En nuestro ejemplo tenemos que
 fusionar ambos tipos de nota en el transcurso de la sección polifónica
 del compás 3; por tanto, en virtud de la información que aparece en la
 Referencia de la Notación, escribimos
@@ -3050,8 +3050,6 @@ lhMusic = \relative c' {
 @node Other uses for tweaks
 @subsection Other uses for tweaks
 
-@itemize
-
 @cindex transparent, uso de la propiedad
 @cindex objetos, hace invisibles
 @cindex eliminar objetos
@@ -3060,7 +3058,6 @@ lhMusic = \relative c' {
 @cindex invisibles, objetos
 @cindex ligar notas entre voces distintas
 
-@item
 @subheading Tying notes across voices
 
 El ejemplo siguiente muestra cómo conectar notas que están en
@@ -3105,7 +3102,6 @@ valor de longitud @code{length} a @code{8},
 >>
 @end lilypond
 
-@item
 @subheading Simulating a fermata
 
 @cindex sello, uso de la propiedad
@@ -3154,8 +3150,6 @@ primera indicación de metrónomo (la transparente) aún influye sobre la
 separación de las notas, mientras que la segunda (sin «sello») no
 influye.
 
-@end itemize
-
 @node Using variables for tweaks
 @subsection Using variables for tweaks
 
index 4dfc56bdd5892a005108de25a59c2bff63372410..2c327fd7fab75d95e24effd18dac8f36781a0757 100644 (file)
@@ -100,7 +100,7 @@ a la melodía.  He aquí un ejemplo:
 
 @lilypond[ragged-right,verbatim,fragment,quote]
 \time 3/4
-\relative { c2 e4 g2. }
+\relative c' { c2 e4 g2. }
 \addlyrics { play the game }
 @end lilypond
 
@@ -109,7 +109,7 @@ Se pueden añadir más versos mediante la adición de más secciones
 
 @lilypond[ragged-right,verbatim,fragment,quote]
 \time 3/4
-\relative { c2 e4 g2. }
+\relative c' { c2 e4 g2. }
 \addlyrics { play the game }
 \addlyrics { speel het spel }
 \addlyrics { joue le jeu }
@@ -198,9 +198,9 @@ comillas o usar un carácter @code{_} (guión bajo), para obtener
 espacios entre las sílabas, o usar el símbolo de tilde curva
 (@code{~}) para obtener una ligadura entre sílabas de la letra.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -220,7 +220,7 @@ utf-8.  Consulte @ref{Text encoding}, para ver más información.
 @c FIXME: quotes.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
-\relative { e4 f e d e f e2 }
+\relative c' { e4 f e d e f e2 }
 \addlyrics { He said: “Let my peo ple go”. }
 @end lilypond
 
@@ -358,7 +358,7 @@ o especificando la duración de cada sílaba explícitamente, utilizando
 @menu
 * Automatic syllable durations::  
 * Manual syllable durations::   
-* Multiple notes to one syllable::  
+* Multiple syllables to one note::  
 * Multiple notes to one syllable::  
 * Skipping notes::              
 * Extenders and hyphens::       
@@ -466,8 +466,8 @@ duraciones manuales de las sílabas del texto:
 Referencia de funcionamiento interno: @internalsref{Lyrics}.
 
 
-@node Multiple notes to one syllable
-@subsubsection Multiple notes to one syllable
+@node Multiple syllables to one note
+@subsubsection Multiple syllables to one note
 
 
 @funindex _
@@ -481,9 +481,9 @@ ligaduras de texto están hechas con el carácter de Unicode U+203F, por
 tanto debe asegurarse de tener instalada una tipografía (como
 DejaVuLGC) que incluya este glifo.}.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -758,7 +758,7 @@ la propiedad minimum-distance de LyricSpace.
 Para que este cambio sea válido para la letra de la partitura
 completa, establezca la propiedad dentro del @q{layout} o disposición.
 
-@lilypond[relative,verbatim,quote,ragged-right]
+@lilypond[verbatim,quote,ragged-right]
 \score {
   \relative c' {
   c c c c
@@ -873,7 +873,7 @@ versión abreviada como @code{shortVocalName}.
   Hi, my name is Bert.
 } \addlyrics {
   \set vocalName = "Ernie "
-  Oh, che -- ri, je t'aime
+  Oh, ché -- ri, je t'aime
 }
 @end lilypond
 
@@ -896,7 +896,7 @@ texto, tal y como se muestra a continuación:
 @lilypond[verbatim,ragged-right,quote]
 %{
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     \slurDotted
@@ -926,7 +926,7 @@ lenta que la normal.  Esto se puede conseguir insertando @code{\skip}s
 texto se retrasará una nota más.  Por ejemplo,
 
 @lilypond[verbatim,ragged-right,quote]
-\relative { c c g' }
+\relative c' { c c g' }
 \addlyrics {
   twin -- \skip 4
   kle
@@ -942,7 +942,7 @@ texto.  Esto se hace estableciendo la propiedad
 
 @lilypond[ragged-right,quote]
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
index f18fda6d8e4671da0436bcdd69517308ea786bbd..5e5a266459562c7a5fa9766fa0d0430cf3aa1405 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @c This file is part of lilypond.tely
 @ignore
-    Translation of GIT committish: 7cc6b12897031c450e3399d59cdb22ca9df4fd8c
+    Translation of GIT committish: 23542761090f167ad42dbff7ef11d44a9c1374ac
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
@@ -38,7 +38,7 @@ salida que usted pretendía, realmente no importa mucho qué aspecto
 tengan sus archivos.  Sin embargo existen algunas otras cosas a tener
 en cuenta cuando se escriben archivos de LilyPond.
 
-@itemize @bullet
+@itemize
 @item ¿Qué ocurre si comete un fallo?  La estructura de un archivo
 de LilyPond puede hacer que ciertos errores se hagan más fáciles (o
 más difíciles) de encontrar.
@@ -72,7 +72,7 @@ fáciles (o más difíciles) de actualizar.
 Presentamos algunas sugerencias que le pueden servir de ayuda para evitar
 o corregir problemas:
 
-@itemize @bullet
+@itemize
 @item @strong{Incluya los números de @code{\version} en todos los archivos}.  Dese cuenta de que todas las
 plantillas contienen información sobre la @code{\version}.  Le
 recomendamos mucho que siempre incluya la @code{\version}, sin
@@ -82,8 +82,8 @@ el número de versión de LilyPond que estaba usando hace unos años.
 @code{convert-ly} requiere que declare qué versión de LilyPond
 utilizó.
 
-@item @strong{Incluya comprobaciones}: @ruser{Bar and barnumber checks},
-@ruser{Octave check}.  Si incluye comprobaciones de vez en cuando, en
+@item @strong{Incluya comprobaciones}: @rglos{baritone},
+@ruser{Absolute octave entry}.  Si incluye comprobaciones de vez en cuando, en
 caso de que cometa un error podrá localizarlo mucho más rápidamente.
 ¿Con qué frecuencia es @q{de vez en cuando}?  Depende de la
 complejidad de la música.  Para una música muy sencilla, quizá tan
@@ -128,7 +128,7 @@ si reelabora la música más tarde.
 Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja
 de música ya impresa),
 
-@itemize @bullet
+@itemize
 
 @item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
 la práctica de escribir un compás por línea de texto), y compruebe
@@ -153,7 +153,7 @@ más oportuno.
 Al trabajar en proyecto grande se hace esencial tener una estructura clara
 en los archivos de LilyPond
 
-@itemize @bullet
+@itemize
 
 @item @strong{Utilice un identificador para cada voz}, con un mínimo de
 estructura dentro de la definición.  La estructura de la sección
index 20f0417bed8dea0a4c1d5be038fc04ccf9ac4d77..f63532407fcadeb8b9de1df3fd4c59a0c573c00e 100644 (file)
@@ -2091,7 +2091,7 @@ Les altérations s'obtiennent en ajoutant aux chiffres les caractères
 
 Le caractère @code{_} insère un espace, et l'on peut imprimer des
 crochets avec @code{[} et @code{]}.  Vous pouvez aussi ajouter des
-chaînes de caractères ou des étiquettes --- cf. @ref{Overview of text
+chaînes de caractères ou des étiquettes --- cf. @ref{Text
 markup commands}.
 
 @example
index 9ee6972ec4e762c1189c06fea99eabc50c1d8a32..e8de10fc6aae882872f79ac89116daabdca551dc 100644 (file)
@@ -65,7 +65,7 @@ infrastructure.  Modifier les choix de mise en page revient à pénétrer dans
 les entrailles du programme, et de ce fait requiert l'emploi du Scheme.
 Les fragments de Scheme, dans un fichier @code{.ly}, sont introduits par le
 caractère @q{hash}, (@code{#}, improprement surnommé @q{dièse}).@footnote{Le 
-@ref{Scheme tutorial} fournit quelques notions de base pour saisir des nombres,
+@rlearning{Scheme tutorial} fournit quelques notions de base pour saisir des nombres,
 des listes, des chaînes de caractères ou des symboles, en Scheme.}
 
 
@@ -1244,7 +1244,7 @@ On peut alors saisir la musique, comme dans l'exemple plus haut :
 
 Il est possible d'aligner verticalement chaque nouveau contexte,
 en-dessous ou au-dessus, par exemple dans le cas de musique vocale
-(@ref{Vocal ensembles}) ou d'@qq{ossias}.
+(@rlearning{Vocal ensembles}) ou d'@qq{ossias}.
 
 @cindex ossia
 @findex alignAboveContext
index 57089289c2a5ff8fe365c125dbbce89de768dae0..fa6d40a22d1096143c3851bfc09dd31812b52e38 100644 (file)
@@ -274,7 +274,7 @@ Vous pouvez indiquer vos diagrammes de trois manières différentes :
 @qq{standard}, @qq{terse} ou @qq{verbeux}. Ces trois interfaces
 produisent des schémas similaires, mais demandent d'entrer plus ou moins
 d'informations.  Vous trouverez tout les détails dans
-@ref{Overview of text markup commands}.
+@ref{Text markup commands}.
 
 Par ailleurs, plusieurs propriétés permettent d'ajuster le graphisme
 à votre convenance. Vous en trouverez les détails dans
@@ -363,6 +363,6 @@ Lorsque des notes doivent être jouées détimbrées --- le doigt effleurant
 la corde sans la presser, en un effet presque percussif, mais où la
 hauteur est encore perceptible ---, on peut employer des têtes de notes
 spéciales en forme de croix.
-Vous trouverez plus de détails dans @ref{Special noteheads}.
+Vous trouverez plus de détails dans @ref{Special note heads}.
 
 
index d620bfc076d28f54daf1a64e215564d65f1f10be..ef72093522dfa80eed0345e6240889c2db6f6e82 100644 (file)
@@ -147,8 +147,8 @@ libre de choisir comment dénommer vos variables@footnote{Les noms de
 variables sont sensibles à la casse, et ne peuvent contenir ni
 chiffre, ni tiret, ni caractère accentué.} ; ce peut être
 @code{melodie}, @code{global}, @code{maindroitepiano}, ou
-@code{laTeteAToto}.  Pour plus de détails, voir @ruser{Saving typing
-with identifiers and functions}.
+@code{laTeteAToto}.  Pour plus de détails, voir @ref{Saving
+typing with variables and functions}.
 
 Pour une description complète du format des fichiers d'entrée, voir 
 @ruser{File structure}.
@@ -173,7 +173,7 @@ expression musicale.}
 
 @noindent
 Peut-être serait-il judicieux de relire la section
-@ruser{Music expressions explained}, dans laquelle vous avez
+@ref{Music expressions explained}, dans laquelle vous avez
 appris à construire de grandes expressions musicales petit bout
 par petit bout --- nous avons vu les notes, puis les accords, etc.
 Maintenant, nous allons partir d'une grande expression musicale,
@@ -430,7 +430,7 @@ amené à recourir à des voix supplémentaires afin d'éviter des collisions
 de notes.  Ces voix additionnelles s'ajoutent en définissant un
 identificateur, comme le montre l'exemple suivant :
 
-@lilypond[quote,verbatim,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
 
 \relative c''' <<
@@ -647,7 +647,7 @@ de type @var{Contexte}, quel que puisse être son nom.
 Cette variante sert à des expressions musicales qui peuvent être interprétées à
 plusieurs niveaux.  Par exemple, une commande telle que @code{\applyOutput} (voir
 @c FIXME: broken link
-@c @ref{Running a function on all layout objects}) : si elle n'est pas associée avec
+@c @ruser{Running a function on all layout objects}) : si elle n'est pas associée avec
 @code{\context}, elle s'applique par défaut dans le contexte @context{Voice}.
 
 @example
@@ -845,8 +845,7 @@ C'est un peu le bazar dans tout ça ; mais il vous sera facile de
 mettre un peu d'ordre dans l'indentation.  Voici le modèle pour
 soprano et violoncelle au complet :
 
-@lilypond[quote,verbatim,ragged-right]
-\version "2.11.38"
+@lilypond[quote,verbatim,ragged-right,addversion]
 sopranoMusic = \relative c' {
   \clef treble
   \key c \major
index 9e1da4d2a02a6e3ceb57597e08b92d8b6df00a29..e08a09906f906a6b764a0d04f60c469f282cee63 100644 (file)
@@ -765,22 +765,22 @@ de manière linéaire.
 @ifhtml
 Le
 @end ifhtml
-@emph{@ruser{Tutorial}}
+@emph{@ref{Tutorial}}
 propose une introduction en douceur à la typographie musicale.
 Les utilisateurs débutants sont invités à commencer ici.
 
 @item
-@emph{@ruser{Putting it all together}}
+@emph{@ref{Fundamental concepts}}
 explique des concepts généraux du format de fichier ly. Si vous n'êtes
 pas certain de l'endroit où placer une commande, lisez ce chapitre !
 
 @item
-@emph{@ruser{Working on LilyPond projects}}
+@emph{@ref{Working on LilyPond projects}}
 montre des utilisations pratiques de LilyPond et donne des conseils
 afin d'éviter les problèmes les plus courants.
 
 @item
-@emph{@ruser{Tweaking output}}
+@emph{@ref{Tweaking output}}
 est une introduction aux retouches de gravure avec LilyPond.
 
 @end itemize
@@ -795,23 +795,17 @@ concepts exposés dans le manuel d'apprentissage.
 @itemize @bullet
 
 @item
-@emph{@ruser{Basic notation}}
+@emph{@ruser{Musical notation}}
 traite de sujets groupés par type de notation.  Cette section
 détaille la notation de base, qui sera utile dans la plupart des
 projets de partition.
 
 @item
-@emph{@ruser{Instrument-specific notation}}
+@emph{@ruser{Specialist notation}}
 traite de sujets groupés par type de notation.  Cette section détaille
 des notations spéciales qui ne seront utiles que pour des types
 particuliers d'instruments ou la voix.
 
-@item
-@emph{@ruser{Advanced notation}}
-traite de sujets groupés par type de notation.  Cette section
-donne des précisions à propos de notations compliquées et
-inhabituelles
-
 @item
 @emph{@ruser{Changing defaults}}
 explique comment ajuster finement la mise en page.
@@ -851,7 +845,7 @@ en savoir plus sur la notation et la gravure.
 
 @item
 Le
-@emph{@ruser{Scheme tutorial}}
+@emph{@ref{Scheme tutorial}}
 propose une courte introduction à Scheme, le langage de programmation
 utilisé dans les fonctions de musique.
 
@@ -865,7 +859,7 @@ instruments MIDI, les noms de couleur, et la police Feta.
 
 @item
 Les
-@emph{@ruser{Templates}}
+@emph{@ref{Templates}}
 de pièces LilyPond.  Copiez et collez un modèle
 dans un fichier, ajoutez les notes, et c'est prêt !
 
index 5bab171bc3e58877fc171c723b8d50b7d5b25f0e..7aa82b7746c650cbedc81198c206c52b334059fc 100644 (file)
@@ -56,7 +56,7 @@ conçu pour gérer la notation spécifique au piano, notamment ces croisements.
 
 Les nuances ne sont pas centrées verticalement, mais il existe
 des astuces.  Voir à ce sujet le modèle @q{alignement des nuances au
-piano} au chapitre @ref{Piano templates}.
+piano} au chapitre @rlearning{Piano templates}.
 
 
 @node Changing staff manually
@@ -146,7 +146,7 @@ place les silences en fonction des notes qui les suivront. Ainsi :
 
 @seealso
 
-Dans ce même manuel : @ref{Manual staff switches}.
+Dans ce même manuel : @ruser{Changing staff manually}.
 
 Référence du programme : @internalsref{AutoChangeMusic}.
 
index a2f480f3d30ce4e4742a260747eada397b4d9c9d..11d31a830bbcac9250371e989c8c02869974c5ed 100644 (file)
 @node Notation manual tables
 @appendix Notation manual tables
 
-UNTRANSLATED NODE: IGNORE ME
-
 @menu 
 * Chord name chart::
 * MIDI instruments::
 * List of colors::
 * The Feta font::
 * Note head styles::
-* Overview of text markup commands::
-* Overview of text markup list commands::
+* Text markup commands::
+* Text markup list commands::
 * List of articulations::       
 * All context properties::      
 * Layout properties::           
@@ -62,20 +60,17 @@ UNTRANSLATED NODE: IGNORE ME
 
 UNTRANSLATED NODE: IGNORE ME
 
-
-@node Overview of text markup commands
-@appendixsec Overview of text markup commands
-
+@ignore
 Vous pouvez utiliser les commandes suivantes au sein d'un bloc
 @code{\markup @{ @}}.
+@end ignore
 
 @include markup-commands.tely
 
 
-@node Overview of text markup list commands
-@appendixsec Overview of text markup list commands
-
+@ignore
 Vous pouvez utiliser les commandes suivantes avec @code{\markuplines}.
+@end ignore
 
 @include markup-list-commands.tely
 
index cfd7121bdb4bb278a6ace84e1154d60bbaffca5d..7b655fd87dfda18af3f276b995de6c3c1c291f88 100644 (file)
@@ -46,7 +46,7 @@ d'articulation, comme une simple note.
 <c e g>4 <c>8
 @end lilypond
 
-Pour plus d'information à propos des accords, voir @ref{Chord names}.
+Pour plus d'information à propos des accords, voir @ref{Chord notation}.
 
 
 @node Clusters
index 4076e16e403188f6eb91bfbab0e7005745086352..5c0f5ee62e2ee987d1db49e42b885a128bdf1eef 100644 (file)
@@ -469,7 +469,7 @@ Certains composants, tels que les marques de nuances, possèdent des
 propriétés particulières et prédéfinies quant à leur police.  Lorsque
 vous créez du texte en pareille situation, nous vous recommandons
 d'utiliser @code{normal-text} pour annuler ces propriétés.  Voir 
-@ref{Overview of text markup commands} pour plus de détails.
+@ref{Text markup commands} pour plus de détails.
 
 @cindex make-dynamic-script
 
@@ -528,7 +528,7 @@ c1_\markup { "\special {weird} #characters" }
 
 @noindent
 Pour une liste des différentes commandes disponibles, consultez
-@ref{Overview of text markup commands}. 
+@ref{Text markup commands}. 
 
 
 @code{\markup} est avant tout conçu pour gérer les
@@ -652,12 +652,12 @@ Certaines situations particulières, telles que les indications de
 nuance, possèdent des propriétés prédéfinies quant à leur police.
 Nous vous conseillons, en pareil cas, de réinitialiser ces propriétés
 en utilisant @code{normal-text}.  Pour plus d'informations, consultez
-@ref{Overview of text markup commands}. 
+@ref{Text markup commands}. 
 
 
 @seealso
 
-Dans ce manuel : @ref{Overview of text markup commands}.
+Dans ce manuel : @ref{Text markup commands}.
 
 Référence du programme : @internalsref{TextScript}.
 
@@ -727,11 +727,11 @@ tour des lignes de texte, comme ici :
 @end verbatim
 
 Les différentes commandes permettant de générer des listes de lignes
-se trouve dans @ref{Overview of text markup list commands}.
+se trouve dans @ref{Text markup list commands}.
 
 @seealso
 
-Dans ce manuel : @ref{Overview of text markup list commands}, 
+Dans ce manuel : @ref{Text markup list commands}, 
 @ref{New markup list command definition}.
 
 @predefined
index 5b83b61ba7bfebb100775f6488c2455fbcb2c059..3dc0e6695852fc93944945e2983a02c92e2b4235 100644 (file)
@@ -503,13 +503,13 @@ Le fragment suivant met en évidence quelques usages possibles des commentaires
 @end itemize
 
 Vous trouverez plus d'astuces pour organiser vos fichiers LilyPond dans
-@ruser{Suggestions for writing LilyPond files}.
+@ref{Suggestions for writing LilyPond files}.
 
 
 @node How to read the tutorial
 @subsection How to read the tutorial
 
-Comme nous l'avons vu dans @ruser{Working on text files}, un code
+Comme nous l'avons vu dans @ref{Working on text files}, un code
 LilyPond doit être encadré par des @{ @} ou bien par @code{\relative
 c'' @{ ...  @}} afin d'être compris.  Cependant, dans la suite de ce
 manuel, la plupart des exemples ne feront pas apparaître ces signes.
@@ -554,9 +554,9 @@ Cette section présente la notation courante dont on a besoin pour
 @node Relative note names
 @subsection Relative note names
 
-Comme nous l'avons vu dans @ruser{Simple notation}, LilyPond calcule la
+Comme nous l'avons vu dans @ref{Simple notation}, LilyPond calcule la
 hauteur de chaque note en fonction de la précédente@footnote{Il existe
-un autre mode de saisie des hauteurs, le mode @ruser{Absolute note
+un autre mode de saisie des hauteurs, le mode @ref{Absolute note
 names}, mais en pratique il est bien plus aisé et sûr d'avoir recours
 au mode de hauteurs relatives.}.  Si aucune indication supplémentaire
 d'octaviation n'est ajoutée, il en concluera que chaque hauteur est
@@ -911,7 +911,7 @@ voir @ruser{Grace notes},
 @item nolets
 voir @ruser{Tuplets},
 @item levées
-voir @ruser{Partial measures}.
+voir @ruser{Upbeats}.
 @end table
 @end quotation
 
@@ -1043,7 +1043,7 @@ polyphoniques.
 @node Multiple staves
 @subsection Multiple staves
 
-Comme nous l'avons vu dans @ruser{Music expressions explained}, un fichier
+Comme nous l'avons vu dans @ref{Music expressions explained}, un fichier
 d'entrée LilyPond est fait d'expressions musicales.  Si la partition
 commence par plusieurs expressions simultanées, LilyPond créera
 plusieurs portées.  Cependant, il est plus facile de voir ce qu'il
@@ -1107,7 +1107,7 @@ n'affecte @emph{pas} les autres portées.
 @cindex voix changeant manuellement de portée
 La musique pour piano s'écrit sur deux portées reliées par une accolade.
 Imprimer ce type de portée revient au même que dans l'exemple de musique
-polyphonique de @ruser{Multiple staves}, mais maintenant cette expression
+polyphonique de @ref{Multiple staves}, mais maintenant cette expression
 entière doit être interprétée dans un contexte @code{PianoStaff} :
 
 @example
@@ -1130,7 +1130,7 @@ Voici un bref exemple :
 
 @seealso
 @quotation
-Voir @ruser{Piano music}.
+Voir @ruser{Keyboard instruments}.
 @end quotation
 
 
@@ -1350,7 +1350,7 @@ partition de chanson :
 @seealso
 @quotation
 Une liste complète de modificateurs et d'autres options de mise en forme
-se trouve à la section @ruser{Chords}.
+se trouve à la section @ruser{Chord notation}.
 @end quotation
 
 
@@ -1560,12 +1560,12 @@ différents endroits.  L'exemple suivant utilise la variable ci-dessus :
 @subsection After the tutorial
 
 Après avoir parcouru ce tutoriel, vous devriez vous essayer à écrire un
-morceau ou deux.  Commencez par copier l'un des @ruser{Templates} types et
+morceau ou deux.  Commencez par copier l'un des @ref{Templates} types et
 ajoutez-y des notes.  Si vous voulez employer une notation que vous
 n'avez pas trouvé dans le tutoriel, consultez la référence de notation,
-en commençant par la @ruser{Basic notation}.  Si vous désirez écrire pour
-un ensemble instrumental non couvert par les @ruser{Templates}, lisez la
-section @ruser{Extending the templates}.
+en commençant par la @ruser{Musical notation}.  Si vous désirez écrire pour
+un ensemble instrumental non couvert par les @ref{Templates}, lisez la
+section @ref{Extending the templates}.
 
 Après avoir écrit quelques pièces courtes, lisez les chapitres 3 à 5 du
 manuel d'apprentissage.  Rien ne s'oppose à ce que vous consultiez dès à
@@ -1577,7 +1577,7 @@ et y revenir plus tard après avoir acquis de l'expérience.
 @node How to read the manual
 @subsection How to read the manual
 
-Comme nous l'avons déjà vu dans @ruser{How to read the tutorial}, de
+Comme nous l'avons déjà vu dans @ref{How to read the tutorial}, de
 nombreux exemples du tutoriel n'ont pas fait apparaître
 @code{\relative c'' @{ ...  @}} dans l'extrait de code affiché.
 
@@ -1597,4 +1597,4 @@ partition.  La source exacte utilisée pour générer ce manuel s'affichera
 alors.
 
 Pour en savoir plus sur l'organisation de la suite de ce manuel,
-reportez-vous à @ruser{About this manual}.
+reportez-vous à @ref{About this manual}.
index c3d8d96a7adb22cba9d6a2616ce8279ef1ca4277..446883866ca69ee37379ec2353de901912f688b5 100644 (file)
@@ -173,13 +173,13 @@ c4^"piu mosso" d e f
 
 @seealso
 
-Dans ce même manuel : @ruser{The \override command}, @ruser{Common tweaks}.
+Dans ce même manuel : @ruser{The \override command}, @ref{Common tweaks}.
 
 
 @node Fixing overlapping notation
 @section Fixing overlapping notation
 
-Dans la section @ruser{Moving objects}, nous avons vu comment
+Dans la section @ref{Moving objects}, nous avons vu comment
 déplacer un objet @code{TextScript}.  Ce même procédé peut être
 appliqué à d'autres types d'objet : il vous suffira de remplacer
 @code{TextScript} par le nom de l'objet en question.
@@ -491,7 +491,7 @@ largement personnalisé à l'aide de commandes comme
 @code{\override TextScript #'extra-offset = ( 1 . -1)}.  Cependant,
 l'utilisation de Scheme ouvre des possibilités encore plus grandes.
 Pour des explications complètes là-dessus, consultez le 
-@ruser{Scheme tutorial}  et les @ruser{Interfaces for programmers}.
+@ref{Scheme tutorial}  et les @ruser{Interfaces for programmers}.
 
 On peut utiliser Scheme simplement à l'aide des commandes @code{\override}.
 
index eb353dbdaee35febbabb0112bca84cc0ec8f2082..dc470fb76df9b6ffc2b7cf51202fd19532579b3c 100644 (file)
@@ -79,7 +79,7 @@ Pour que les paroles évitent également les barres de mesure, ajoutez
 
 Le @emph{parlato} est du texte scandé en rythme, mais sans hauteurs
 définies ; il est indiqué par des notes en croix, à l'instar des
-percussions --- voir @ref{Special noteheads}.
+percussions --- voir @ref{Special note heads}.
 
 
 @node Setting simple songs
@@ -146,7 +146,7 @@ il est aussi possible d'attribuer automatiquement chaque syllabe à une
 note d'une mélodie ou d'une voix existante, avec @code{\addlyrics} ou
 @code{\lyricsto}.  
 @c  TODO: broken but exists Aligning lyrics
-@c For more details see @ref{The Lyrics context}.
+@c For more details see @ref{Aligning contexts}.
 
 Dans les paroles, un mot ou une syllabe commence par une lettre de
 l'alphabet, et se termine par un espace (éventuellement précédé d'un
@@ -193,9 +193,9 @@ ces syllabes entre guillemets, ou bien remplacer l'espace par un
 caractère souligné (@code{_}), ou encore utiliser un tilde (@code{~})
 pour obtenir une liaison entre les syllabes.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -209,10 +209,10 @@ incluant ce symbole (par exemple DejaVuLGC) installée sur le système.
 Pour utiliser des lettres accentuées ou des caractères spéciaux 
 --- cœurs ou guillemets inversés par exemple --- il suffit de les insérer
 dans le fichier et de veiller à sauvegarder ce dernier avec le codage
-utf-8.  Voir à ce sujet @ref{Text encoding} pour plus de détails.
+UTF-8.  Voir à ce sujet @ref{Text encoding} pour plus de détails.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
-\relative { e4 f e d e f e2 }
+\relative c' { e4 f e d e f e2 }
 \addlyrics { He said: “Let my peo ple go”. }
 @end lilypond
 
@@ -471,9 +471,9 @@ liaison adaptée aux paroles correspond au caractère Unicode U+203F, et
 n'apparaîtra dans la partition que si le système dispose d'une police
 installée qui contient ce symbole(par exemple DejaVuLGC).}.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -549,7 +549,7 @@ connecter manuellement créera un mélisme.
 @cindex choral score
 
 Vous trouverez un exemple complet de partition pour chœur dans la
-section @ref{Vocal ensembles}.
+section @rlearning{Vocal ensembles}.
 
 
 @predefined
@@ -742,7 +742,7 @@ d'accroître l'espacement des paroles.
 Pour que ce réglage s'applique à toute la partition, définissez-le
 dans le bloc @code{\layout}.
 
-@lilypond[relative,verbatim,quote,ragged-right]
+@lilypond[verbatim,quote,ragged-right]
 \score {
   \relative c' {
   c c c c
@@ -853,7 +853,7 @@ abrégée.
   Hi, my name is Bert.
 } \addlyrics {
   \set vocalName = "Ernie "
-  Oh, che -- ri, je t'aime
+  Oh, ché -- ri, je t'aime
 }
 @end lilypond
 
@@ -905,7 +905,7 @@ faire un mélisme.  Il faudra alors insérer des sauts invisibles
 suivant d'une note :
 
 @lilypond[verbatim,ragged-right,quote]
-\relative { c c g' }
+\relative c' { c c g' }
 \addlyrics {
   twin -- \skip 4
   kle
@@ -921,7 +921,7 @@ modifie la propriété @code{associatedVoice}.  Dans cet exemple,
 
 @lilypond[ragged-right,quote]
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
index cab2b18b47d38587aec558c4c6e4fc940d9c83af..6f320193aa6610df8c6540c04094e996bb7bca60 100644 (file)
@@ -108,8 +108,8 @@ structuré si vous n'y avez pas adjoint de commentaires.
 viennent d'un défaut de parité entre @code{@{} et @code{@}}.
 
 @item @strong{Séparez les affinages de mise en forme} de la musique
-elle-même. Voyez @ruser{Saving typing with identifiers and functions} et
-@ruser{Style sheets}.
+elle-même. Voyez @ref{Saving typing with variables and functions} et
+@ref{Style sheets}.
 
 @end itemize
 
@@ -168,7 +168,7 @@ g4 c'8. e16
 @end example
 
 @item @strong{Séparez les retouches} des définitions de
-musique.  Ce conseil a été vu dans @ruser{General suggestions},
+musique.  Ce conseil a été vu dans @ref{General suggestions},
 mais pour les projets d'importance c'est absolument vital.  Nous
 pouvons avoir besoin de changer la définition de
 @code{fthenp}, mais dans ce cas nous n'aurons besoin de le faire
@@ -285,8 +285,8 @@ padText =
 
 Utiliser les identificateurs est aussi un bon moyen pour vous épargner
 du travail si la syntaxe de LilyPond change un jour --- voir
-@ruser{Updating old files}.  Si vous avez une seule définition, par
-exemple @code{\dolce}, pour tous vos fichiers (voir @ruser{Style
+@ref{Updating old files}.  Si vous avez une seule définition, par
+exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style
 sheets}), et que la syntaxe change, alors vous n'aurez qu'à mettre à
 jour votre seule définition @code{\dolce}, au lieu de devoir modifier
 chaque fichier @code{.ly}.
@@ -296,14 +296,14 @@ chaque fichier @code{.ly}.
 @subsection Style sheets
 
 La sortie que produit LilyPond peut être largement modifiée --- voir
-@ruser{Tweaking output} pour plus de détails.  Mais que faire si vous
+@ref{Tweaking output} pour plus de détails.  Mais que faire si vous
 avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
 retouches ? Ou si vous souhaitez simplement séparer les retouches de
 la musique elle-même ?  Rien de plus facile.
 
 Prenons un exemple.  Ne vous inquiétez pas si vous ne comprenez pas
 les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
-@ruser{Advanced tweaks with Scheme}.
+@ref{Advanced tweaks with Scheme}.
 
 @lilypond[quote,verbatim,ragged-right]
 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
@@ -324,7 +324,7 @@ tempoMark = #(define-music-function (parser location markp) (string?)
 @end lilypond
 
 Il y a quelques problèmes de chevauchement ; nous allons arranger
-cela en utilisant les techniques de @ruser{Moving objects}.  On peut
+cela en utilisant les techniques de @ref{Moving objects}.  On peut
 aussi faire quelque chose pour les définitions de @code{mpdolce}
 et @code{tempoMark}.  Elles produisent le résultat que nous désirons,
 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
@@ -645,10 +645,10 @@ problème.
 
 Une autre technique de déboguage très utile est la construction
 @iftex
-de @ruser{Minimal examples}.
+de @ref{Minimal examples}.
 @end iftex
 @ifnottex
-d'@ruser{Minimal examples}.
+d'@ref{Minimal examples}.
 @end ifnottex
 
 
@@ -811,7 +811,7 @@ ce qui équivaut à
 
 Des informations plus détaillées sur la mise en place de conducteurs
 et de parties séparées se trouvent dans le manuel : voir
-@ruser{Orchestral music}.
+@ruser{Writing parts}.
 
 Les variables (@q{propriétés}) réglables sont abordées en détail dans
 @ruser{Changing context properties on the fly}.
index c03e68de01e5716f705f7a7a9426d5e64a6fc8c5..1d04699985e3522917ae646150f1378854e911f3 100644 (file)
@@ -65,6 +65,17 @@ which scares away people.
 
 @end ignore
 
+@item
+Arpeggios may now use ``parenthesis'' style brackets:
+
+@lilypond[relative,ragged-right]
+  \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
+
+  % Note: does not work for cross staff arpeggios.
+  \override Arpeggio #'X-extent = #ly:grob::stencil-width
+  <c g' c>2\arpeggio ~ c
+@end lilypond
+
 @item
 Enclosing text within boxes with rounded corners is now possible,
 using the @code{rounded-box} command.
index 752a5ac860b36fa8dabae40aee68df6ff333c457..b314edef96e9b0833b99f06a12959e15d9d81504 100644 (file)
@@ -228,7 +228,6 @@ the use of key signatures.
 
 Internals Reference: @rinternals{KeySignature}.
 
-Examples: @c @lsrdir{ancient}
 
 @node Ancient rests
 @subsubsection Ancient rests
index 6dcff43c23d59660921e59fa0610e12bdb3c9f04..a7b5b35a1d93e998c61422587d453e8b76a697b6 100644 (file)
@@ -460,7 +460,6 @@ chart}.  Turning on these styles is demonstrated in
 @seealso
 
 Examples:
-@c @lsrdir{chords}
 
 Init files: @file{scm/@/chords@/-ignatzek@/.scm}, and
 @file{scm/@/chord@/-entry@/.scm}.
index 50d9e322c4f78c10041b86ab78d6810844b38c86..dd018b422fe0a7948058fdbe17083289904a14f4 100644 (file)
@@ -144,13 +144,23 @@ a4^\prall^\markup { \sharp }
 
 @seealso
 
-Music Glossary: @rglos{tenuto}, @rglos{accent}, @rglos{staccato},
+Music Glossary:
+@rglos{tenuto},
+@rglos{accent},
+@rglos{staccato},
 @rglos{portato}.
 
+Notation Reference:
+@ref{Controlling direction and placement}.
+
+Installed Files:
+@file{scm/@/script@/.scm}.
+
 Snippets:
 @rlsr{Expressive marks}.
 
-Internals Reference: @rinternals{Script},
+Internals Reference:
+@rinternals{Script},
 @rinternals{TextScript}.
 
 
@@ -163,7 +173,9 @@ MIDI rendering of the music.
 @node Dynamics
 @subsubsection Dynamics
 
+@cindex absolute dynamics
 @cindex dynamics
+@cindex dynamics, absolute
 @funindex \ppppp
 @funindex \pppp
 @funindex \ppp
@@ -224,15 +236,6 @@ d2\> d\>
 c1\!
 @end lilypond
 
-A @notation{hairpin} normally starts at the left edge of the
-beginning note and ends on the right edge of the ending note.  If
-the ending note falls on the downbeat, the @notation{hairpin} ends
-on the immediately preceding bar line.  The following example
-illustrates this behavior:
-
-@c This example currently does not work. -pm
-@c TODO: Add link to new snippet for #'to-barline
-
 Spacer notes are needed to engrave multiple marks on one note.
 
 @lilypond[verbatim,quote,ragged-right,fragment,relative=2]
@@ -240,37 +243,17 @@ c4\< c\! d\> e\!
 << f1 { s4 s4\< s4\> s4\! } >>
 @end lilypond
 
-If hairpins are too short, they can be lengthened using the
-following method:
-
-@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
-c4\< c\! d\> e\!
-\override Voice.Hairpin #'minimum-length = #5
-<< f1 { s4 s4\< s4\> s4\! } >>
-@end lilypond
-
-@cindex espressivo, articulation
+@cindex espressivo articulation
 
 In some situations the @code{\espressivo} articulation mark may be
-the appropriate choice to indicate a crescendo and decrescendo on
-one note:
+the appropriate choice to indicate a @notation{crescendo} and
+@notation{decrescendo} on one note:
 
 @lilypond[verbatim,quote,ragged-right,fragment,relative=2]
 c2 b4 a
 g1\espressivo
 @end lilypond
 
-@cindex al niente
-@cindex niente, al
-
-Hairpins may be printed with a circled tip (al niente notation):
-
-@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
-\override Hairpin #'circled-tip = ##t
-c2\< c\!
-c4\> c\< c2\!
-@end lilypond
-
 @cindex crescendo
 @cindex decrescendo
 @cindex diminuendo
@@ -282,38 +265,38 @@ c4\> c\< c2\!
 @funindex \setHairpinDim
 @funindex \setHairpinDecresc
 
-Crescendos and decrescendos can be engraved as @notation{cresc.},
-@notation{decresc.}, @notation{decr.}, or @notation{dim.} instead
-of using hairpins with the commands @code{\setTextCresc},
+@notation{Crescendos} and @notation{decrescendos} can be engraved
+as textual markings instead of hairpins.  The built-in commands
+that enable these text modes are @code{\setTextCresc},
 @code{\setTextDecresc}, @code{\setTextDecr}, and
 @code{\setTextDim}.  The corresponding @code{\setHairpinCresc},
-@code{\setHairpinDim}, and @code{\setHairpinDecresc} will revert
-to hairpins again:
+@code{\setHairpinDim}, and @code{\setHairpinDecresc} commands will
+revert to hairpins again:
 
 @lilypond[verbatim,quote,ragged-right,fragment,relative=2]
-\setTextCresc
 c\< d e f\!
-\setHairpinCresc
 e\> d c b\!
+\setTextCresc
+c\< d e f\!
 \setTextDecresc
-e\> d e f\!
-\setTextDecr
-c\> d e f\!
-\setTextDim
 e\> d c b\!
+\setHairpinCresc
+c\< d e f\!
 @end lilypond
 
-You can also supply your own texts and change the style of the
-spanner line with the properties @code{crescendoText},
-@code{crescendoSpanner}, @code{decrescendoText}, and
-@code{decrescendoSpanner}.  Available values for the spanner
-properties are @code{hairpin}, @code{line}, @code{dashed-line},
-and @code{dotted-line}.  If unset, a hairpin crescendo is used:
+The text used for @notation{crescendos} and
+@notation{decrescendos} can be changed by modifying the context
+properties @code{crescendoText} and @code{decrescendoText}.  The
+style of the spanner line can be changed by modifying the context
+properties @code{crescendoSpanner} and @code{decrescendoSpanner}.
+Available values for the spanner properties are @code{'hairpin},
+@code{'line}, @code{'dashed-line}, and @code{'dotted-line}.  If
+unset, a hairpin crescendo is used:
 
 @lilypond[verbatim,quote,ragged-right,fragment,relative=1]
 \set crescendoText = \markup { \italic "cresc. poco" }
 \set crescendoSpanner = #'dotted-line
-a'2\< a a a a a a a\!\mf
+a'2\< a a a a a a a\mf
 @end lilypond
 
 To create new absolute dynamic marks or text that should be
@@ -337,6 +320,34 @@ Vertical positioning of dynamics is handled by
 
 @c Add LilyPond examples to these snippets. -pm
 
+@c A @notation{hairpin} normally starts at the left edge of the
+@c beginning note and ends on the right edge of the ending note.  If
+@c the ending note falls on the downbeat, the @notation{hairpin} ends
+@c on the immediately preceding bar line.  The following example
+@c illustrates this behavior:
+@c 
+@c TODO: Add link to new snippet for #'to-barline
+
+If hairpins are too short, they can be lengthened using the
+following method:
+
+@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
+c4\< c\! d\> e\!
+\override Voice.Hairpin #'minimum-length = #5
+<< f1 { s4 s4\< s4\> s4\! } >>
+@end lilypond
+
+@cindex al niente
+@cindex niente, al
+
+Hairpins may be printed with a circled tip (al niente notation):
+
+@lilypond[verbatim,quote,ragged-right,fragment,relative=2]
+\override Hairpin #'circled-tip = ##t
+c2\< c\!
+c4\> c\< c2\!
+@end lilypond
+
 Dynamics that occur at, begin on, or end on the same note will be
 vertically aligned.  If you want to ensure that dynamics are
 aligned when they do not occur on the same note, you can increase
@@ -346,10 +357,6 @@ the @code{staff-padding} property.
 \override DynamicLineSpanner #'staff-padding = #4
 @end example
 
-@noindent
-You may also use this property if the dynamics are colliding with
-other notation.
-
 @notation{Crescendi} and @notation{decrescendi} that cross a line
 break will be continued on the second line.  If they end on the
 first note of a new line, nothing will be printed on that line.
@@ -379,6 +386,9 @@ Music Glossary:
 Learning Manual:
 @rlearning{Articulation and dynamics}.
 
+Notation Reference:
+@ref{Controlling direction and placement}.
+
 Snippets:
 @rlsr{Expressive marks}.
 
@@ -496,12 +506,17 @@ can be achieved in LilyPond by setting @code{doubleSlurs},
 
 @seealso
 
-Music Glossary: @rglos{slur}
+Music Glossary:
+@rglos{slur}.
+
+Notation Reference:
+@ref{Controlling direction and placement}.
 
 Snippets:
 @rlsr{Expressive marks}.
 
-Internals Reference: @rinternals{Slur}.
+Internals Reference:
+@rinternals{Slur}.
 
 
 @node Phrasing slurs
@@ -543,10 +558,14 @@ You cannot have simultaneous phrasing slurs.
 
 @seealso
 
+Notation Reference:
+@ref{Controlling direction and placement}.
+
 Snippets:
 @rlsr{Expressive marks}.
 
-Internals Reference: @rinternals{PhrasingSlur}
+Internals Reference:
+@rinternals{PhrasingSlur}.
 
 
 @node Breath marks
@@ -583,7 +602,8 @@ Snippets:
 @rlsr{Expressive marks}.
 @c @lsr{expressive,breathing-sign.ly}.
 
-Internals Reference: @rinternals{BreathingSign}
+Internals Reference:
+@rinternals{BreathingSign}.
 
 
 @node Falls and doits
@@ -624,7 +644,9 @@ c4-\bendAfter #-3
 @seealso
 
 @c TODO: add falls and doits to glossary.
-@c Music Glossary: @rglos{falls}, @rglos{doits}.
+@c Music Glossary:
+@c @rglos{falls},
+@c @rglos{doits}.
 
 Snippets:
 @rlsr{Expressive marks}.
@@ -671,7 +693,8 @@ I = \once \override NoteColumn #'ignore-collision = ##t
 
 @seealso
 
-Music Glossary: @rglos{glissando}
+Music Glossary:
+@rglos{glissando}.
 
 Snippets:
 @rlsr{Expressive marks}.
@@ -680,7 +703,8 @@ Snippets:
 @c @lsr{expressive,glissando.ly},
 @c @lsr{expressive,line-styles.ly}
 
-Internals Reference: @rinternals{Glissando}
+Internals Reference:
+@rinternals{Glissando}.
 
 
 @knownissues
@@ -695,6 +719,9 @@ supported.
 @cindex arpeggio
 @cindex broken chord
 
+@c Add documentation for new 'parenthesis' style arpeggio.  Maybe
+@c create a new \arpeggioParen command, or something similar. -pm
+
 You can specify an @notation{arpeggio} (also known as a
 @notation{broken chord}) on a chord by attaching an
 @code{\arpeggio} to the chord:
@@ -807,14 +834,17 @@ moved to the Staff context:
 
 @c TODO: Add 'broken chord' to glossary.
 
-Music Glossary: @rglos{arpeggio}
+Music Glossary:
+@rglos{arpeggio}.
 
-Notation Reference: @ref{Ties}, for writing out arpeggios.
+Notation Reference:
+@ref{Ties}, for writing out arpeggios.
 
 Snippets:
 @rlsr{Expressive marks}.
 
-Internals Reference: @rinternals{Arpeggio},
+Internals Reference:
+@rinternals{Arpeggio},
 @rinternals{PianoStaff}.
 
 
@@ -877,9 +907,11 @@ printed as a stemless note head in parentheses.
 
 @seealso
 
-Music Glossary: @rglos{trill}
+Music Glossary:
+@rglos{trill}.
 
 Snippets:
 @rlsr{Expressive marks}.
 
-Internals Reference: @rinternals{TrillSpanner}
+Internals Reference:
+@rinternals{TrillSpanner}.
index 9f4945eb66125bb8c80e568dc6c193d2919a7146..34915ce0d480640bbd704135f4de08ebbb535f51 100644 (file)
@@ -239,7 +239,6 @@ Details about the property interface to fret diagrams are found at
 
 @seealso
 
-Examples: @c @lsrdir{guitar}
 
 
 @node Right hand fingerings
index 77b4d49346306a5e63ab3fa2524ca52b9dd506b8..71cb6c751466790b787073f120531e4a12b36697 100644 (file)
@@ -110,10 +110,12 @@ commands, leaving them to be created implicitly.  For simple
 examples this works well, but for more complex examples, especially
 when additional commands are used, the implicit creation of contexts
 can give surprising results, maybe creating extra unwanted staves.
-When entering more than a few lines of music it is advisable to
-always create staves and voices explicitly, see
+The way to create contexts explicitly is explained in 
 @ref{Contexts and engravers}.
 
+@warning{When entering more than a few lines of music it is
+advisable to always create staves and voices explicitly.}
+
 For now, though, let us return to the first example and examine the
 @code{\score} command, leaving the others to default.
 
@@ -261,7 +263,8 @@ there @emph{is} no mystery.  This line explains it all:
 @end quotation
 
 @noindent
-You may find it useful to review
+To understand what is meant by a music expression and a compound
+music expression you may find it useful to review
 @ref{Music expressions explained}.  In that section, we saw how to
 build big music expressions from small pieces -- we started from
 notes, then chords, etc.  Now we're going to start from a big
@@ -976,11 +979,15 @@ markup, ties, slurs, and dynamics:
 }
 @end lilypond
 
+Now let's look at three different ways to notate the same passage
+of polyphonic music, each of which is advantageous in different
+circumstances, using the example from the previous section.
+
 An expression that appears directly inside a @code{<< >>} belongs
 to the main voice (but, note, @strong{not} in a @code{<< \\ >>}
 construct).  This is useful when extra voices appear while the
-main voice is playing.  Here is a more correct rendition of the
-example from the previous section.  The red diamond-shaped notes
+main voice is playing.  Here is a more correct rendition of our
+example.  The red diamond-shaped notes
 demonstrate that the main melody is now in a single voice context,
 permitting a phrasing slur to be drawn over them.
 
@@ -1017,7 +1024,7 @@ permitting a phrasing slur to be drawn over them.
 
 More deeply nested polyphony constructs are possible, and if a
 voice appears only briefly this might be a more natural way to
-typeset the music.
+typeset the music:
 
 @lilypond[quote,ragged-right,verbatim]
 \new Staff \relative c' {
@@ -1070,6 +1077,8 @@ as here:
 >>
 @end lilypond
 
+@subsubheading Note columns
+
 @cindex note column
 @cindex shift commands
 @funindex \shiftOff
@@ -1212,7 +1221,11 @@ in separate files should they become too long.
 
 Here is a example of the first line of a hymn with four
 verses, set for SATB.  In this case the words for all four
-parts are the same.
+parts are the same.  Note how we use variables to separate the
+music notation and words from the staff structure.  See too
+how a variable, which we have chosen to call @q{TimeKey}, is used
+to hold several commands for use within the two staves.  In other
+examples this is often called @q{global}.
 
 @lilypond[quote,verbatim]
 TimeKey = { \time 4/4 \partial 4 \key c \major}
@@ -1560,6 +1573,60 @@ Note that there is no @code{\new Score} command;
 the single top-level @code{Score} context is introduced
 with @code{\score}.
 
+You have seen many practical examples which created new
+@code{Staff} and @code{Voice} contexts in earlier sections, but
+to remind you how these commands are used in practice, here's an
+annotated real-music example:
+
+@lilypond[quote,verbatim,ragged-right]
+\score {  % start single compound music expression
+  <<  % start of simultaneous staves section
+    \time 2/4
+    \new Staff {  % create RH staff
+      \key g \minor
+      \clef "treble"
+      \new Voice {  % create voice for RH notes
+        \relative c'' {  % start of RH notes
+          d4 ees16 c8. |
+          d4 ees16 c8. |
+        }  % end of RH notes
+      }  % end of RH voice
+    }  % end of RH staff
+    \new Staff <<  % create LH staff; needs two simultaneous voices
+      \key g \minor
+      \clef "bass"
+      \new Voice {  % create LH voice one
+        \voiceOne
+        \relative g {  % start of LH voice one notes
+          g8 <bes d> ees, <g c> |
+          g8 <bes d> ees, <g c> |
+        }  % end of LH voice one notes
+      }  % end of first LH voice
+      \new Voice {  % create LH voice two
+        \voiceTwo
+        \relative g {  % start of LH voice two notes
+          g4 ees |
+          g4 ees |
+        }  % end of LH voice two notes
+      }  % end of LH voice two
+    >>  % end of LH staff
+  >>  % end of simultaneous staves section
+}  % end of single compound music expression
+@end lilypond
+
+(Note how all the statements which open a block with either a
+curly bracket, @code{@{}, or double angle brackets, @code{<<},
+are indented by two further spaces, and the corresponding
+closing bracket is indented by exactly the same amount.  While
+this is not required, following this practice will greatly
+reduce the number of @q{unmatched bracket} errors, and is
+strongly recommended.  It enables the structure of the music to
+be seen at a glance, and any unmatched brackets will be obvious.
+Note too how the LH staff is created using double angle brackets
+because it requires two voices for its music, whereas the RH staff
+is created with a single music expression surrounded by curly
+brackets because it requires only one voice.)
+
 @cindex contexts, naming
 @cindex naming contexts
 
@@ -2311,7 +2378,7 @@ lower = \relative c, {
     >>  % end ChoirStaff
 
     \new PianoStaff <<
-      \set PianoStaff.instrumentName = "Piano  "
+      \set PianoStaff.instrumentName = "Piano"
       \new Staff = "upper" \upper
       \new Staff = "lower" \lower
     >>
@@ -2409,7 +2476,7 @@ stacked one above the other:
   >>  % end ChoirStaff
 
   \new PianoStaff <<
-    \set PianoStaff.instrumentName = "Piano  "
+    \set PianoStaff.instrumentName = "Piano"
     \new Staff = "upper" \upper
     \new Staff = "lower" \lower
   >>
@@ -2561,7 +2628,7 @@ part just one.
 Next we need to add a staff for the pedal organ.
 This goes underneath the PianoStaff, but it must
 be simultaneous with it, so we need angle brackets
-round the two.  Missing these out would generate
+around the two.  Missing these out would generate
 an error in the log file.  It's a common mistake
 which you'll make sooner or later!  Try copying
 the final example at the end of this section,
@@ -2640,7 +2707,7 @@ ManualOneVoiceOneMusic = \relative g' {
   g4 g f ees | d2 c2 |
 }
 ManualOneVoiceTwoMusic = \relative c' {
-  ees16 d ees8~ ees16 f ees s c8 d~ d c~ |
+  ees16 d ees8~ ees16 f ees d c8 d~ d c~ |
   c c4 b8 c8. g16 c b c d |
 }
 ManualTwoMusic = \relative c' {
index 760d1ed3379847012839ff56f55ef5d70ff368cc..b66ec6dcc3fa47e63e7a908b2a839384225adcb5 100644 (file)
@@ -155,8 +155,8 @@ Learning Manual:
 @rlearning{Fixing overlapping notation}.
 
 Notation Reference:
-@ruser{Stems},
-@ruser{Automatic beams}.
+@ref{Stems},
+@ref{Automatic beams}.
 
 Snippets:
 @rlsr{Keyboards}.
index ab8bc3d53fcc8af3b539f12b40bc103eef172aa1..b20c93d8ac799bfb06de34441dae082bbd1a6112 100644 (file)
@@ -975,8 +975,8 @@ Music Glossary:
 @rglos{time signature}
 
 Notation Reference:
-@ruser{Ancient time signatures},
-@ruser{Time administration}.
+@ref{Ancient time signatures},
+@ref{Time administration}.
 
 Snippets:
 @rlsr{Rhythms}.
index 0b9b14c57648869eecc48f0456b5ef4db6c89c29..b625af91075b68d05fcd24e3831fcfa162df7254 100644 (file)
@@ -45,7 +45,7 @@ A chord is formed by a enclosing a set of pitches between @code{<} and
 articulations, just like simple notes:
 
 @lilypond[verbatim,ragged-right,fragment,quote,relative=1]
-<c e g>1 <c e g>->
+<c e g>2 <c f a>4-> <e g c>-.
 @end lilypond
 
 For more information about chords, see @ref{Modern chords}.
@@ -62,12 +62,14 @@ Notation Reference:
 @ref{Modern chords}.
 
 Snippets:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
 @knownissues
 
-Music expressions like @code{<< @{ g8 e8 @} a4 >>} are not printed
-accurately.  Use @code{<g a>8 <e a>8} instead.
+For some reason, music expressions like @code{<< @{ g8 e8 @} a4 >>}
+that should automatically turn into chords, appear splitted in two
+staves.  To avoid this, use explicit chords instead as in
+@code{<g a>8 <e a>8}.
 
 
 @node Clusters
@@ -95,14 +97,14 @@ Music Glossary:
 @rglos{cluster}.
 
 Snippets:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
 Internals Reference:
-@internalsref{ClusterSpanner},
-@internalsref{ClusterSpannerBeacon},
-@internalsref{Cluster_spanner_engraver}.
+@rinternals{ClusterSpanner},
+@rinternals{ClusterSpannerBeacon},
+@rinternals{Cluster_spanner_engraver}.
 
-@c Examples: @lsr{contemporary,cluster@/.ly}.
+@c Examples: @rlsr{contemporary,cluster@/.ly}.
 
 @knownissues
 
@@ -131,7 +133,7 @@ them.
 Normally, note heads with a different number of dots are not
 merged, but when the object property
 @code{merge-differently-dotted} is set in the
-@internalsref{NoteCollision} object, they are merged:
+@rinternals{NoteCollision} object, they are merged:
 
 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
 \new Voice << {
@@ -199,7 +201,7 @@ In some instances of complex polyphonic music, you may need
 additional voices to avoid collisions between notes.  Additional
 voices are added by defining an variable, as shown below:
 
-@lilypond[quote,verbatim,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
 
 \relative c''' <<
@@ -253,7 +255,7 @@ inner voices (three and four) have @code{\shiftOn}.
 levels.
 
 When LilyPond cannot cope, the @code{force-hshift} property of the
-@internalsref{NoteColumn} object and pitched rests can be used to
+@rinternals{NoteColumn} object and pitched rests can be used to
 override typesetting decisions.
 
 @lilypond[quote,verbatim,ragged-right]
@@ -272,12 +274,12 @@ override typesetting decisions.
 @seealso
 
 Snippets:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
 Internals Reference: the objects responsible for resolving collisions
 are
-@internalsref{NoteCollision} and
-@internalsref{RestCollision}.
+@rinternals{NoteCollision} and
+@rinternals{RestCollision}.
 
 
 @knownissues
@@ -332,7 +334,7 @@ down stems and @q{Solo II}.
 If you just want the merging parts, and not the textual markings,
 you may set the property @code{printPartCombineTexts} to false.
 
-@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 \new Staff <<
   \set Staff.printPartCombineTexts = ##f
   \partcombine
@@ -345,7 +347,7 @@ To change the text that is printed for solos or merging, you may
 set the @code{soloText}, @code{soloIIText}, and @code{aDueText}
 properties.
 
-@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
+@lilypond[quote,verbatim,ragged-right]
 \new Staff <<
   \set Score.soloText = #"ichi"
   \set Score.soloIIText = #"ni"
@@ -357,7 +359,7 @@ properties.
 @end lilypond
 
 Both arguments to @code{\partcombine} will be interpreted as
-@internalsref{Voice} contexts.  If using relative octaves,
+@rinternals{Voice} contexts.  If using relative octaves,
 @code{\relative} should be specified for both music expressions,
 i.e.,
 
@@ -378,11 +380,11 @@ Music Glossary:
 @rglos{a due}.
 
 Snippets:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
 Internals Reference:
-@internalsref{PartCombineMusic},
-@internalsref{Voice}.
+@rinternals{PartCombineMusic},
+@rinternals{Voice}.
 
 @knownissues
 
@@ -397,7 +399,7 @@ more than once in a measure.
 Internally, the @code{\partcombine} interprets both arguments as
 @code{Voice}s named @code{one} and @code{two}, and then decides
 when the parts can be combined.  Consequently, if the arguments
-switch to differently named @internalsref{Voice} contexts, the
+switch to differently named @rinternals{Voice} contexts, the
 events in those will be ignored.
 
 
@@ -424,42 +426,37 @@ Music for multiple parts can be interleaved:
 
 This works quite well for piano music.
 
-@c  It would be nice if the first bar fit onto one 66-char line.
-@c  Maybe simplify the example?  -gp
 @lilypond[quote,verbatim]
+global = { \key g \major  \time 2/4 }
 music = {
-  \key c \major
-  \time 4/4
   \parallelMusic #'(voiceA voiceB voiceC voiceD) {
-    % Bar 1
-    r8  g'16[ c''] e''[ g' c'' e'']
-      r8 g'16[ c''] e''[ g' c'' e''] |
-    c'2
-      c'2 |
-    r8  a16[ d'] f'[ a d' f']
-      r8  a16[ d'] f'[ a d' f'] |
-    c2
-      c2 |
+    % Bar 1 
+    a'8 b'      c'' d''   |
+    d'4         e'        |
+    c16 d e f   d e f g   |
+    a,4         a,4       |
 
     % Bar 2
-    a'8 b'      c'' d''    e'' f''    g'' a'' |
-    d'4         d'         d'         d' |
-    c16 d e f   d e f g    e f g a    f g a b |
-    a,4         a,4        a,4        a,4 |
+    e''8 f''    g'' a''   |
+    f'4         g'        |
+    e16 f g a   f g a b   |
+    a,4         a,4       |
 
     % Bar 3 ...
   }
 }
 
-\score {
+\score {      
   \new PianoStaff <<
-    \music
-    \new Staff <<
-      \voiceA \\
-      \voiceB
-    >>
     \new Staff {
-      \clef bass
+      \global
+      <<
+        \voiceA \\
+        \voiceB
+      >>
+    }
+    \new Staff {
+      \global \clef bass
       <<
         \voiceC \\
         \voiceD
@@ -472,5 +469,5 @@ music = {
 @seealso
 
 Snippets:
-@lsrdir{Simultaneous,Simultaneous-notes}.
+@rlsr{Simultaneous notes}.
 
index 439ce43d4f4b615fe4e6383e8bc2af9ad90c620b..442082c5e3d06bc4a4e91d7e199f27e74af6765f 100644 (file)
@@ -1597,7 +1597,7 @@ music.  Note that @code{ly:make-moment} constructs
 a duration, so @code{1 4} is a longer duration
 than @code{1 16}.
 
-@lilypond[relative,verbatim,line-width=12\cm]
+@lilypond[verbatim,line-width=12\cm]
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
@@ -1608,7 +1608,7 @@ than @code{1 16}.
 }
 @end lilypond
 
-@lilypond[relative,verbatim,line-width=12\cm]
+@lilypond[verbatim,line-width=12\cm]
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
@@ -2087,7 +2087,7 @@ effect.  In general the commands shown in this section can
 be placed in either.
 
 Much more detail on the options for tweaking the laying out
-of music are contained in @ruser{Spacing issues}.
+of music are contained in @ref{Spacing issues}.
 
 @node Global sizes
 @subsection Global sizes
@@ -2191,7 +2191,7 @@ a page-break at the point where they are inserted.
 Of course, the @code{\pageBreak} command also forces a line break.
 Like @code{\break}, the @code{\pageBreak} command is effective only
 at the end of a @q{complete} bar as defined above.  For more
-details see @ruser{Page breaking} and following sections.
+details see @ref{Page breaking} and following sections.
 
 There are also analogous settings to @code{ragged-right} and
 @code{ragged-last} which have the same effect on vertical spacing:
@@ -2199,7 +2199,7 @@ There are also analogous settings to @code{ragged-right} and
 @code{##t} the systems on all pages or just the last page
 respectively will not be justified vertically.
 
-For more details see @ruser{Vertical spacing}.
+For more details see @ref{Vertical spacing}.
 
 @node Fitting music onto fewer pages
 @subsection Fitting music onto fewer pages
@@ -2211,7 +2211,7 @@ of room left on those.
 
 When investigating layout issues, @code{annotate-spacing} is
 an invaluable tool.  This command prints the values of various
-layout spacing commands; see @ruser{Displaying spacing}, for more
+layout spacing commands; see @ref{Displaying spacing}, for more
 details.  From the output of @code{annotate-spacing}, we can
 see which margins we may wish to alter.
 
@@ -2262,7 +2262,7 @@ e4 c g\f c
 
 @item
 Alter the horizontal spacing via @code{SpacingSpanner}.  See
-@ruser{Changing horizontal spacing}, for more details.  Here's
+@ref{Changing horizontal spacing}, for more details.  Here's
 an example first showing the default behavior:
 
 @lilypond[verbatim,quote,ragged-right]
index 8b8c72705c4ccf9b67a94cd19982a1ef90d4eb85..ea933dd957b4fb974b5dbd576f20ab34b2969647 100644 (file)
@@ -597,7 +597,7 @@ to the main staff with @code{<<} and @code{>>} brackets.  The @emph{ossia}
 staff is stopped and started explicitely and white space is inserted 
 with the @code{\skip} command.
 
-@lilypond[verbatim,relative=2,quote]
+@lilypond[verbatim,quote]
 <<
   \new Staff \with
   {
@@ -696,7 +696,7 @@ You can make the staff lines invisible by removing the
 
 @lilypond[quote,ragged-right,verbatim]
 \score {
-  \context Staff \relative c'' { c8 c c16 c c c }
+  \new Staff \relative c'' { c8 c c16 c c c }
   \layout{
     \context {
       \Staff
@@ -719,7 +719,7 @@ The lower staff of the second staff group is not removed,
 because the setting applies only to the specific staff inside 
 of which it is written.
 
-@lilypond[quote,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
 \layout {
   \context { 
     \RemoveEmptyStaffContext 
@@ -1174,8 +1174,8 @@ cbsn = \relative c, {
 }
 
 <<
-  \context Staff = "picc" \picc
-  \context Staff = "cbsn" \cbsn
+  \new Staff = "picc" \picc
+  \new Staff = "cbsn" \cbsn
 >>
 @end lilypond
 
index 3c2c2a4d20aa1a17a2b445ff5466ca705328c94d..01626800de567d3db148003886e429b00d64ffa0 100644 (file)
@@ -330,71 +330,57 @@ using the @code{\markup} mode specific syntax.
 @cindex markup text
 @cindex typeset text
 
-A @code{\markup} block is used to typeset text with an extensible syntax,
-called @qq{markup mode}.
-Specific commands can be entered in this mode, using the
-backslash @code{\} character.
-@c TODO: move the following sentence (and add an example?) -vv
-To @emph{print} such characters as
-@code{\} and @code{#} in the output, use double
-quotation marks.
+A @code{\markup} block is used to typeset text with an extensible
+specific syntax called @qq{markup mode}.
 
-@lilypond[quote,verbatim,fragment,relative=1]
-c1^\markup { hello }
-c1_\markup { hi there }
-c1^\markup { hi \bold there, is \italic {anyone home?} }
-c1_\markup { "\special {weird} #characters" }
-@end lilypond
+@cindex markup expressions
+@cindex markup syntax
 
-@noindent
-An exhaustive list of @code{\markup}-specific commands can be found in
-@ref{Text markup commands}.
+The markup syntax is similar to LilyPond's usual syntax: a
+@code{\markup} expression is enclosed in curly braces @code{@{
+@dots{} @}}.
 
+In markup mode, specific commands are entered using the backslash
+@code{\} character.  Such commands only affect the first following
+expression.
 
-@lilypond[quote,verbatim]
-\header{ title = \markup{ \bold { foo \italic { bar! } } } }
-\score{
-  \relative c'' {
-    \override Score.RehearsalMark
-      #'break-visibility = #begin-of-line-invisible
-    \override Score.RehearsalMark #'self-alignment-X = #right
-
-    \set Staff.instrumentName = \markup{ \column{ Alto solo } }
-    c2^\markup{ don't be \flat }
-    \override TextSpanner #'bound-details #'left #'text = \markup{\italic rit }
-    b2\startTextSpan
-    a2\mark \markup{ \large \bold Fine }
-    r2\stopTextSpan
-    \bar "||"
-  }
-  \addlyrics { bar, foo \markup{ \italic bar! } }
-}
-@end lilypond
+Markup expressions may also be enclosed in double quotes
+@code{"..."}. Such expressions are treated as text strings
+and may not contain nested expressions or commands.
+Therefore, braces are generally prefered to double quotes;
+the following example demonstrates both syntaxes.
 
+@lilypond[quote,verbatim,fragment,relative=1]
+e1-\markup "intenso"
+a2^\markup { poco \italic più forte  }
+c e1
+d2_\markup { \italic "string. assai" }
+e 
+b1^\markup { \bold { molto \italic  agitato } }
+c
+@end lilypond
 
+@cindex special characters in markup mode
+@cindex markup mode, special characters
+@cindex reserved characters, printing
+@cindex printing special characters
 
-@cindex font switching
-
-Some font switching commands are demonstrated here. Such commands
-apply only to the first following word; several words may be affected
-by enclosing them in braces.
-
-@example
-\markup @{ \bold @{ hi there @} @}
-@end example
+Special characters such as @code{\} and @code{#}
+can be printed in the output simply using double
+quotes.  Double quotation marks are only printed
+in the output when preceded by backslashes:
 
-@c TODO: remove the following line and example? -vv
-@noindent
-For clarity, you can also do this for single arguments, e.g.,
-
-@example
-\markup @{ is \italic @{ anyone @} home @}
-@end example
+@lilypond[quote,verbatim,fragment,relative=1]
+\clef bass
+a^\markup "##\ LEPORELLO \##"
+a_\markup "Bravi! \"Cosa rara\"!"
+r a8 d
+cis a r4 r2
+@end lilypond
 
-The markup mode can be used to compose expressions, similar to
-mathematical expressions, XML documents, and music expressions.
-Such expressions can be vertically stacked, horizontally centered, 
-or aligned in different ways:
+The way markup expressions are defined affects 
+how these expressions will stacked, centered and aligned
+when using the commands explained in @ref{Text alignment}.
 
 @lilypond[quote,verbatim,fragment,relative=1]
 c1^\markup { \column { a bbbb \line { c d } } }
@@ -402,62 +388,65 @@ c1^\markup { \center-align { a bbbb c } }
 c1^\markup { \line { a b c } }
 @end lilypond
 
-Lists with no previous command are not kept distinct.  In
-the following example, the two @code{\markup} expressions
+Lists of words that are not enclosed with double quotes
+or preceded by a previous command are not kept distinct.  In
+the following example, the first two @code{\markup} expressions
 are equivalent:
 
-@c TODO: merge these two examples in a @lilypond example -vv
+@lilypond[quote,verbatim,fragment,relative=1]
+c1^\markup { \center-align { a bbb c } }
+c1^\markup { \center-align { a { bbb c } } }
+c1^\markup { \center-align { a \line { bbb c } } }
+@end lilypond
 
-@example
-\center-align @{ @{ a b @} @{ c d @} @}
-\center-align @{ a b c d @}
-@end example
 
-@noindent
+Markups can be stored in variables.  These variables may be
+directly attached to notes:
 
-To keep lists of words distinct, please use quotes @code{"} or
-the @code{\line} command
+@lilypond[quote,verbatim]
+allegro = \markup { \bold \large Allegro }
 
-@lilypond[quote,verbatim,fragment,relative=1]
-\textLengthOn
-c4^\markup{ \center-align { on three lines } }
-c4^\markup{ \center-align { "all one line" } }
-c4^\markup{ \center-align { { on three lines } } }
-c4^\markup{ \center-align { \line { on one line } } }
+{
+  d''8.^\allegro
+  d'16 d'4 r2
+}
 @end lilypond
 
-Markups can be stored in variables and these variables may be
-attached to notes, like
 
-@example
-allegro = \markup @{ \bold \large @{ Allegro @} @}
- @{ a^\allegro b c d @}
-@end example
+@noindent
+An exhaustive list of @code{\markup}-specific commands can be found in
+@ref{Text markup commands}.
 
-Some objects have alignment procedures of their own, which cancel
-out any effects of alignments applied to their markup arguments as
-a whole.  For example, the @rinternals{RehearsalMark} is
-horizontally centered, so using @code{\mark \markup @{ \left-align
-.. @}} has no effect.
 
-In addition, vertical placement is performed after creating the
-text markup object.  If you wish to move an entire piece of
-markup, you need to use the #'padding property or create an
-@q{anchor} point inside the markup (generally with @code{\hspace
-#0}).
+@seealso
+
+This manual: @ref{Text markup commands}.
+
+Snippets:
+@rlsr{Text}.
+
+Internals Reference: @rinternals{TextScript}.
+
+Init files: @file{scm/@/new@/-markup@/.scm}.
+
+
+@knownissues
+
+@c FIXME: this is totally deprecated, isn't it? -vv
+Kerning or generation of ligatures is only done when the @TeX{}
+backend is used.  In this case, LilyPond does not account for them
+so texts will be spaced slightly too wide.
+
+@c is the following sentence really relevant? -vv
+Syntax errors for markup mode are confusing.
+
+
+@node Common markup commands
+@subsubsection Common markup commands
+
+Some basic formatting can be used blah blah
 
-@lilypond[quote,verbatim,fragment,relative=1]
-\textLengthOn
-c'4^\markup{ \raise #5 "not raised" }
-\once \override TextScript #'padding = #3
-c'4^\markup{ raised }
-c'4^\markup{ \hspace #0 \raise #1.5 raised }
-@end lilypond
 
-Some situations (such as dynamic marks) have preset font-related
-properties.  If you are creating text in such situations, it is
-advisable to cancel those properties with @code{normal-text}.  See
-@ref{Text markup commands}, for more details.
 
 @ignore
 TODO: here are some commands that could be described here.
@@ -495,30 +484,11 @@ I'm putting them in bulk, prior to working on this section. -vv
 
 @end ignore
 
-@seealso
-
-This manual: @ref{Text markup commands}.
-
-Snippets:
-@rlsr{Text}.
-
-Internals Reference: @rinternals{TextScript}.
-
-Init files: @file{scm/@/new@/-markup@/.scm}.
-
-
-@knownissues
-
-Kerning or generation of ligatures is only done when the @TeX{}
-backend is used.  In this case, LilyPond does not account for them
-so texts will be spaced slightly too wide.
 
-Syntax errors for markup mode are confusing.
 
-@node Common markup commands
-@subsubsection Common markup commands
+@cindex font switching
 
-Some basic formatting can be used blah blah
+Some font switching commands are demonstrated here.
 
 \italic 
 \upright
@@ -579,6 +549,33 @@ All these settings (except the size) can be reverted to the default font:
 @node Text alignment
 @subsubsection Text alignment
 
+
+Some objects have alignment procedures of their own, which cancel
+out any effects of alignments applied to their markup arguments as
+a whole.  For example, the @rinternals{RehearsalMark} is
+horizontally centered, so using @code{\mark \markup @{ \left-align
+.. @}} has no effect.
+
+In addition, vertical placement is performed after creating the
+text markup object.  If you wish to move an entire piece of
+markup, you need to use the #'padding property or create an
+@q{anchor} point inside the markup (generally with @code{\hspace
+#0}).
+
+@lilypond[quote,verbatim,fragment,relative=1]
+\textLengthOn
+c'4^\markup{ \raise #5 "not raised" }
+\once \override TextScript #'padding = #3
+c'4^\markup{ raised }
+c'4^\markup{ \hspace #0 \raise #1.5 raised }
+@end lilypond
+
+Some situations (such as dynamic marks) have preset font-related
+properties.  If you are creating text in such situations, it is
+advisable to cancel those properties with @code{normal-text}.  See
+@ref{Text markup commands}, for more details.
+
+
 Alignment basics:
 \left-align
 \center-align
index dfaf92d750e45e3d855bd0e7e46806f95fa866f1..76d7be98c51a18690d6c4ce67025125f0a6a31b6 100644 (file)
@@ -119,7 +119,7 @@ to a melody.  Here is an example,
 
 @lilypond[ragged-right,verbatim,fragment,quote]
 \time 3/4
-\relative { c2 e4 g2. }
+\relative c' { c2 e4 g2. }
 \addlyrics { play the game }
 @end lilypond
 
@@ -128,7 +128,7 @@ More stanzas can be added by adding more
 
 @lilypond[ragged-right,verbatim,fragment,quote]
 \time 3/4
-\relative { c2 e4 g2. }
+\relative c' { c2 e4 g2. }
 \addlyrics { play the game }
 \addlyrics { speel het spel }
 \addlyrics { joue le jeu }
@@ -213,9 +213,9 @@ In order to assign more than one syllable to a single note, you can
 surround them with quotes or use a @code{_} character, to get spaces
 between syllables, or use tilde  symbol (@code{~}) to get a lyric tie.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -229,13 +229,11 @@ glyph.
 To enter lyrics with characters from non-English languages, or with
 accented and special characters (such as the heart symbol or slanted quotes),
 simply insert the characters directly into the input file and save
-it with utf-8 encoding.  See @ref{Text encoding}, for more info.
-
-FIXME: quotes.
+it with UTF-8 encoding.  See @ref{Text encoding}, for more info.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
-\relative { e4 f e d e f e2 }
-\addlyrics { He said: Ã¢â\82¬Å\93Let my peo ple goââ\82¬Â\9d. }
+\relative c' { e4 f e d e f e2 }
+\addlyrics { He said: â\80\9cLet my peo ple goâ\80\9d. }
 @end lilypond
 
 To use normal quotes in lyrics, add a backslash before the
@@ -494,9 +492,9 @@ U+203F, so be
 sure to have a font (Like DejaVuLGC) installed that includes this
 glyph.}.
 
-@lilypond[quote,relative=2,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,fragment,verbatim]
 \time 3/4
-\relative { c2 e4 g2 e4 }
+\relative c' { c2 e4 g2 e4 }
 \addlyrics { gran- de_a- mi- go }
 \addlyrics { pu- "ro y ho-" nes- to }
 \addlyrics { pu- ro~y~ho- nes- to }
@@ -601,7 +599,7 @@ the text will be delayed another note.
 For example,
 
 @lilypond[verbatim,ragged-right,quote]
-\relative { c c g' }
+\relative c' { c c g' }
 \addlyrics {
   twin -- \skip 4
   kle
@@ -767,7 +765,7 @@ LyricSpace.
 To make this change for all lyrics in the score, set the property in the
 layout.
 
-@lilypond[relative,verbatim,quote,ragged-right]
+@lilypond[verbatim,quote,ragged-right]
 \score {
   \relative c' {
   c c c c
@@ -835,10 +833,11 @@ Stanza numbers can be added by setting @code{stanza}, e.g.,
   Hi, my name is Bert.
 } \addlyrics {
   \set stanza = "2. "
-  Oh, chÃ\83© -- ri, je t'aime
+  Oh, ché -- ri, je t'aime
 }
 @end lilypond
 
+
 @noindent
 These numbers are put just before the start of the first syllable.
 
@@ -911,7 +910,7 @@ the line, just like instrument names.  They are created by setting
   Hi, my name is Bert.
 } \addlyrics {
   \set vocalName = "Ernie "
-  Oh, che -- ri, je t'aime
+  Oh, ché -- ri, je t'aime
 }
 @end lilypond
 
@@ -933,7 +932,7 @@ in the text, as shown here,
 @lilypond[verbatim,ragged-right,quote]
 %{
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     \slurDotted
@@ -966,7 +965,7 @@ done by setting the @code{associatedVoice} property.  In the example
 
 @lilypond[ragged-right,quote]
 <<
-  \relative \new Voice = "lahlah" {
+  \relative c' \new Voice = "lahlah" {
     \set Staff.autoBeaming = ##f
     c4
     <<
diff --git a/VERSION b/VERSION
index d9dd0f5dede2b4b25cd0731672ec3d5c1da3941a..e792adf6371e53c4bc2f6fceaa9cae968203558f 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=11
-PATCH_LEVEL=45
+PATCH_LEVEL=46
 MY_PATCH_LEVEL=
 
diff --git a/buildscripts/check_texi_refs.py b/buildscripts/check_texi_refs.py
new file mode 100755 (executable)
index 0000000..26e7942
--- /dev/null
@@ -0,0 +1,396 @@
+#!/usr/bin/env python
+
+"""
+check_texi_refs.py
+Interactive Texinfo cross-references checking and fixing tool
+
+
+"""
+
+
+import sys
+import re
+import os
+import optparse
+
+outdir = 'out-www'
+
+log = sys.stderr
+stdout = sys.stdout
+
+warn_not_fixed = "*** Warning: this broken x-ref has not been fixed!\n"
+
+opt_parser = optparse.OptionParser (usage='check_texi_refs.py [OPTION]... FILE',
+                                    description='''Check and fix \
+cross-references in a collection of Texinfo
+documents heavily cross-referenced each other.
+''')
+
+opt_parser.add_option ('-a', '--auto-fix',
+                       help="Automatically fix cross-references whenever \
+it is possible",
+                       action='store_true',
+                       dest='auto_fix',
+                       default=False)
+
+opt_parser.add_option ('-b', '--batch',
+                       help="Do not run interactively",
+                       action='store_false',
+                       dest='interactive',
+                       default=True)
+
+opt_parser.add_option ('-p', '--check-punctuation',
+                       help="Check for punctuation after x-ref",
+                       action='store_true',
+                       dest='check_punctuation',
+                       default=False)
+
+(options, files) = opt_parser.parse_args ()
+
+class InteractionError (Exception):
+    pass
+
+
+manuals = {}
+exit_code = 0
+
+def set_exit_code (n):
+    global exit_code
+    exit_code = max (exit_code, n)
+
+if options.interactive:
+    try:
+        import readline
+    except:
+        pass
+
+    def yes_prompt (question, default=False, retries=3):
+        d = {True: 'y', False: 'n'}.get (default, False)
+        while retries:
+            a = raw_input ('%s [default: %s]' % (question, d) + '\n')
+            if a.lower ().startswith ('y'):
+                return True
+            if a.lower ().startswith ('n'):
+                return False
+            if a == '' or retries < 0:
+                return default
+            stdout.write ("Please answer yes or no.\n")
+            retries -= 1
+
+    def search_prompt ():
+        """Prompt user for a substring to look for in node names.
+
+If user input is empty or matches no node name, return None,
+otherwise return a list of (manual, node name, file) tuples.
+
+"""
+        substring = raw_input ("Enter a substring to search in node names \
+(press Enter to skip this x-ref):\n")
+        if not substring:
+            return None
+        substring = substring.lower ()
+        matches = []
+        for k in manuals:
+            matches += [(k, node, manuals[k]['nodes'][node][0])
+                        for node in manuals[k]['nodes']
+                        if substring in node.lower ()]
+        return matches
+
+else:
+    def yes_prompt (question, default=False, retries=3):
+        return default
+
+    def search_prompt ():
+        return None
+
+ref_re = re.compile (r'@(ref|ruser|rlearning|rprogram|rglos)\{([^,\\]*?)\}(.)',
+                     re.DOTALL)
+node_include_re = re.compile (r'(?m)^@(node|include)\s+(.+?)$')
+
+whitespace_re = re.compile (r'\s+')
+line_start_re = re.compile ('(?m)^')
+
+manuals_to_refs = {'lilypond': 'ruser',
+                   'lilypond-learning': 'rlearning',
+                   'lilypond-program': 'rprogram',
+                   # 'lilypond-snippets': 'rlsr',
+                   'music-glossary': 'rglos'}
+
+def which_line (index, newline_indices):
+    """Calculate line number of a given string index
+
+Return line number of string index index, where
+newline_indices is an ordered iterable of all newline indices.
+"""
+    inf = 0
+    sup = len (newline_indices) - 1
+    n = len (newline_indices)
+    while inf + 1 != sup:
+        m = (inf + sup) / 2
+        if index >= newline_indices [m]:
+            inf = m
+        else:
+            sup = m
+    return inf + 1
+
+def read_file (f, d):
+    """Look for all node names and cross-references in a Texinfo document
+
+Return a dictionary with three keys:
+
+  'manual' contains the cross-reference
+macro name which matches the base name of f in global manuals_to_refs
+dictionary,
+
+  'nodes' is a dictionary of `node name':(file name, line number),
+
+  'contents' is a dictionary of file:`full file contents'.
+
+  'newline_indices' is a dictionary of
+file:[list of beginning-of-line string indices]
+
+Included files that can be read are processed too.
+
+"""
+    s = open (f).read ()
+    # TODO (maybe as option)
+    # s = trim_comments (s)
+    base = os.path.basename (f)
+    dir = os.path.dirname (f)
+    if d == {}:
+        d['manual'] = manuals_to_refs.get (os.path.splitext (base)[0], '')
+        print "Processing manual %s(%s)" % (f, d['manual'])
+        d['nodes'] = {}
+        d['contents'] = {}
+        d['newline_indices'] = {}
+
+    d['newline_indices'][f] = [m.end () for m in line_start_re.finditer (s)]
+    d['contents'][f] = s
+
+    for m in node_include_re.finditer (s):
+        if m.group (1) == 'node':
+            line = which_line (m.start (), d['newline_indices'][f])
+            d['nodes'][m.group (2)] = (f, line)
+
+        elif m.group (1) == 'include':
+            p = os.path.join (dir, m.group (2))
+            if os.path.isfile (p):
+                read_file (p, d)
+            else:
+                p = os.path.join (dir, outdir, m.group (2))
+                if os.path.isfile (p):
+                    read_file (p, d)
+    return d
+
+log.write ("Reading files...\n")
+
+manuals = dict ([(d['manual'], d)
+                 for d in [read_file (f, dict ()) for f in files]])
+
+ref_fixes = set ()
+fixes_count = 0
+
+def add_fix (old_type, old_ref, new_type, new_ref):
+    ref_fixes.add ((old_type, old_ref, new_type, new_ref))
+
+def lookup_fix (r):
+    found = []
+    for (old_type, old_ref, new_type, new_ref) in ref_fixes:
+        if r == old_ref:
+            found.append ((new_type, new_ref))
+    return found
+
+
+def preserve_linebreak (text, linebroken):
+    if linebroken:
+        if ' ' in text:
+            text = text.replace (' ', '\n', 1)
+            n = ''
+        else:
+            n = '\n'
+    else:
+        n = ''
+    return (text, n)
+
+def choose_in_numbered_list (message, string_list, sep=' ', retries=3):
+    S = set (string_list)
+    S.discard ('')
+    string_list = list (S)
+    numbered_list = sep.join ([str (j + 1) + '. ' + string_list[j]
+                               for j in range (len (string_list))]) + '\n'
+    t = retries
+    while t > 0:
+        value = ''
+        stdout.write (message +
+                      "(press Enter to discard and start a new search)\n")
+        input = raw_input (numbered_list)
+        if not input:
+            return ''
+        try:
+            value = string_list[int (input) - 1]
+        except IndexError:
+            stdout.write ("Error: index number out of range\n")
+        except ValueError:
+            matches = [input in v for v in string_list]
+            n = matches.count (True)
+            if n == 0:
+                stdout.write ("Error: input matches no item in the list\n")
+            elif n > 1:
+                stdout.write ("Error: ambiguous input (matches several items \
+in the list)\n")
+            else:
+                value = string_list[matches.index (True)]
+        if value:
+            return value
+        t -= 1
+    raise InteractionError ("%d retries limit exceeded" % retries)
+
+def check_ref (manual, file, m):
+    global fixes_count
+    type = m.group (1)
+    original_name = m.group (2)
+    name = whitespace_re.sub (' ', original_name). strip ()
+    newline_indices = manuals[manual]['newline_indices'][file]
+    line = which_line (m.start (), newline_indices)
+    linebroken = '\n' in m.group (2)
+    next_char = m.group (3)
+
+    # check for puncuation after x-ref
+    if options.check_punctuation and not next_char in '.,;:!?':
+        stdout.write ("Warning: %s: %d: `%s': x-ref not followed by punctuation\n"
+                      % (file, line, name))
+
+    # validate xref
+    explicit_type = type
+    new_name = name
+
+    if type != 'ref' and type == manual:
+        stdout.write ("\n%s: %d: `%s': external %s x-ref should be internal\n"
+                      % (file, line, name, type))
+        if options.auto_fix or yes_prompt ("Fix this?"):
+            type = 'ref'
+
+    if type == 'ref':
+        explicit_type = manual
+
+    if not name in manuals[explicit_type]['nodes']:
+        fixed = False
+        stdout.write ('\n')
+        if type == 'ref':
+            stdout.write ("%s: %d: `%s': wrong internal x-ref\n"
+                          % (file, line, name))
+        else:
+            stdout.write ("%s: %d: `%s': wrong external `%s' x-ref\n"
+                          % (file, line, name, type))
+        # print context
+        stdout.write ('--\n' + manuals[manual]['contents'][file]
+                      [newline_indices[max (0, line - 2)]:
+                       newline_indices[min (line + 3,
+                                            len (newline_indices) - 1)]] +
+                      '--\n')
+
+        # try to find the reference in other manuals
+        found = []
+        for k in [k for k in manuals if k != explicit_type]:
+            if name in manuals[k]['nodes']:
+                if k == manual:
+                    found = ['ref']
+                    stdout.write ("  found as internal x-ref\n")
+                    break
+                else:
+                    found.append (k)
+                    stdout.write ("  found as `%s' x-ref\n" % k)
+
+        if len (found) == 1 and (options.auto_fix
+                                 or yes_prompt ("Fix this x-ref?")):
+            add_fix (type, name, found[0], name)
+            type = found[0]
+            fixed = True
+
+        elif len (found) > 1:
+            if options.interactive or options.auto_fix:
+                stdout.write ("* Several manuals contain this node name, \
+cannot determine manual automatically.\n")
+            if options.interactive:
+                t = choose_in_numbered_list ("Choose manual for this x-ref by \
+index number or beginning of name:\n", found)
+                if t:
+                    add_fix (type, name, t, name)
+                    type = t
+                    fixed = True
+
+        if not fixed:
+            # try to find a fix already made
+            found = lookup_fix (name)
+
+            if len (found) == 1:
+                stdout.write ("Found one previous fix: %s `%s'\n" % found[0])
+                if options.auto_fix or yes_prompt ("Apply this fix?"):
+                    type, new_name = found[0]
+                    fixed = True
+
+            elif len (found) > 1:
+                if options.interactive or options.auto_fix:
+                    stdout.write ("* Several previous fixes match \
+this node name, cannot fix automatically.\n")
+                if options.interactive:
+                    concatened = choose_in_numbered_list ("Choose new manual \
+and x-ref by index number or beginning of name:\n", [''.join ([i[0], ' ', i[1]])
+                                                     for i in found],
+                                                    sep='\n')
+                    if concatened:
+                        type, new_name = concatenated.split (' ', 1)
+                        fixed = True
+
+        if not fixed:
+            # all previous automatic fixes attempts failed,
+            # ask user for substring to look in node names
+            while True:
+                node_list = search_prompt ()
+                if node_list == None:
+                    if options.interactive:
+                        stdout.write (warn_not_fixed)
+                    break
+                elif not node_list:
+                    stdout.write ("No matched node names.\n")
+                else:
+                    concatenated = choose_in_numbered_list ("Choose \
+node name and manual for this x-ref by index number or beginning of name:\n", \
+                            [' '.join ([i[0], i[1], '(in %s)' % i[2]]) for i in node_list],
+                                                            sep='\n')
+                    if concatenated:
+                        t, z = concatenated.split (' ', 1)
+                        new_name = z.split (' (in ', 1)[0]
+                        add_fix (type, name, t, new_name)
+                        type = t
+                        fixed = True
+                        break
+
+    # compute returned string
+    if new_name == name:
+        return ('@%s{%s}' % (type, original_name)) + next_char
+    else:
+        fixes_count += 1
+        (ref, n) = preserve_linebreak (new_name, linebroken)
+        return ('@%s{%s}' % (type, ref)) + next_char + n
+
+
+log.write ("Checking cross-references...\n")
+
+try:
+    for key in manuals:
+        for file in manuals[key]['contents']:
+            s = ref_re.sub (lambda m: check_ref (key, file, m),
+                            manuals[key]['contents'][file])
+            if s != manuals[key]['contents'][file]:
+                open (file, 'w').write (s)
+
+except KeyboardInterrupt:
+    log.write ("Operation interrupted, exiting.\n")
+    sys.exit (2)
+
+except InteractionError, instance:
+    log.write ("Operation refused by user: %s\nExiting.\n" % instance)
+    sys.exit (3)
+
+log.write ("Done, fixed %d x-refs.\n" % fixes_count)
index 66bb8faacf3acc936a8cc0f6c27009973938621e..2202b65b638ccf32706bb7c22f9f32165b8c6c66 100755 (executable)
@@ -59,7 +59,10 @@ end_header_re = re.compile ('(\\header {.+?doctitle = ".+?})\n', re.M | re.S)
 def mark_verbatim_section (ly_code):
        return end_header_re.sub ('\\1 % begin verbatim\n', ly_code, 1)
 
-begin_header_re = re.compile ('\\header\\s*{', re.M)
+# '% LSR' comments are to be stripped
+lsr_comment_re = re.compile (r'\s*%+\s*LSR.*')
+
+begin_header_re = re.compile (r'\\header\s*{', re.M)
 
 # add tags to ly files from LSR
 def add_tags (ly_code, tags):
@@ -84,6 +87,7 @@ def copy_ly (srcdir, name, tags):
                s = LY_HEADER_NEW + s
 
        s = mark_verbatim_section (s)
+       s = lsr_comment_re.sub ('', s)
        open (dest, 'w').write (s)
 
        e = os.system ("convert-ly -e '%s'" % dest)
index e687acf2d7a0d7026a430589ae2f795922542f78..47c4847c4048825f0d65904a0431a2e861779410 100644 (file)
@@ -40,7 +40,11 @@ struct Drul_array
   Drul_array ()
   {
   }
-  Drul_array (T t1, T t2)
+  Drul_array (T const &t1, T const &t2)
+  {
+    set (t1, t2);
+  }
+  void set (T const &t1, T const &t2)
   {
     array_[0] = t1;
     array_[1] = t2;
diff --git a/input/regression/arpeggio-parenthesis.ly b/input/regression/arpeggio-parenthesis.ly
new file mode 100644 (file)
index 0000000..b666015
--- /dev/null
@@ -0,0 +1,17 @@
+
+\header {
+
+  texidoc = "There is a variant of the arpeggio sign that uses a
+  `vertical slur' instead of the wiggle."
+
+}
+
+\version "2.11.46"
+
+\relative c' {
+  \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
+
+  % Note: does not work for cross staff arpeggios.
+  \override Arpeggio #'X-extent = #ly:grob::stencil-width
+  <c g' c>2\arpeggio ~ c
+}
diff --git a/input/regression/completion-heads-lyrics.ly b/input/regression/completion-heads-lyrics.ly
new file mode 100644 (file)
index 0000000..0df5fcd
--- /dev/null
@@ -0,0 +1,25 @@
+\header {
+  texidoc = "You can put lyrics under completion heads."
+}
+\version "2.11.45"
+
+mel = \relative c'' {
+ c1. c1.
+}
+
+lyr = \lyricmode {
+ One  two
+}
+
+\score {
+ \new Score <<
+   \new Staff <<
+     \new Voice = "completion" \with {
+       \remove "Note_heads_engraver"
+       \remove "Forbid_line_break_engraver"
+       \consists "Completion_heads_engraver"
+     } \mel
+   >>
+   \new Lyrics \lyricsto "completion" \lyr
+ >>
+}
diff --git a/input/regression/tie-direction-broken.ly b/input/regression/tie-direction-broken.ly
new file mode 100644 (file)
index 0000000..895f87f
--- /dev/null
@@ -0,0 +1,21 @@
+
+\version "2.11.45"
+
+\header {
+
+  texidoc = "In the single tie case, broken ties peek across line
+  boundaries to determine which direction to take."
+
+}
+
+
+\paper {
+  ragged-right = ##t
+}
+
+\relative c'' {
+ bes1~ \break
+ bes2.
+ \stemUp bes4 ~ \break
+ bes1 
+}
index daffa298fb1226d7c029034a81fa61aab3b2ebea..057e233f443d6522ddf4bddc5d74b7a515881dde 100644 (file)
@@ -7,16 +7,17 @@
 */
 
 #include "align-interface.hh"
-#include "spanner.hh"
-#include "item.hh"
 #include "axis-group-interface.hh"
-#include "pointer-group-interface.hh"
-#include "hara-kiri-group-spanner.hh"
 #include "grob-array.hh"
+#include "hara-kiri-group-spanner.hh"
 #include "international.hh"
+#include "item.hh"
+#include "paper-column.hh"
+#include "pointer-group-interface.hh"
+#include "spanner.hh"
+#include "skyline-pair.hh"
 #include "system.hh"
 #include "warn.hh"
-#include "paper-column.hh"
 
 /*
   TODO: for vertical spacing, should also include a rod & spring
index fe7b116821778f883f5b028d9a3717d50dbdf35f..80858426bc6eb43bc7f12e2f77a83aec4351d8b3 100644 (file)
@@ -8,15 +8,16 @@
 
 #include "arpeggio.hh"
 
+#include "bezier.hh"
+#include "font-interface.hh"
 #include "grob.hh"
+#include "lookup.hh"
 #include "output-def.hh"
-#include "stem.hh"
+#include "pointer-group-interface.hh"
 #include "staff-symbol-referencer.hh"
 #include "staff-symbol.hh"
+#include "stem.hh"
 #include "warn.hh"
-#include "font-interface.hh"
-#include "lookup.hh"
-#include "pointer-group-interface.hh"
 
 Grob *
 Arpeggio::get_common_y (Grob *me)
@@ -136,6 +137,28 @@ Arpeggio::brew_chord_bracket (SCM smob)
   return mol.smobbed_copy ();
 }
 
+MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_slur, 1);
+SCM
+Arpeggio::brew_chord_slur (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  Interval heads = robust_scm2interval (me->get_property ("positions"),
+                                       Interval())
+    * Staff_symbol_referencer::staff_space (me);
+
+  Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
+  Real dy = heads.length ();
+
+  Real height_limit = 1.5;
+  Real ratio = .33;
+  Bezier curve = slur_shape (dy, height_limit, ratio);
+  curve.rotate (M_PI / 2);
+
+  Stencil mol (Lookup::slur (curve, lt, lt));
+  mol.translate_axis (heads[LEFT], Y_AXIS);
+  return mol.smobbed_copy ();
+}
+
 /*
   We have to do a callback, because print () triggers a
   vertical alignment if it is cross-staff.
index 121b0ba1596e0736fddb246db07ef2b502083db6..044a392851df4ee626f48e6852b655e6762cd4a3 100644 (file)
@@ -18,6 +18,7 @@
 #include "paper-column.hh"
 #include "paper-score.hh"
 #include "separation-item.hh"
+#include "skyline-pair.hh"
 #include "stencil.hh"
 #include "system.hh"
 #include "warn.hh"
@@ -629,7 +630,6 @@ Axis_group_interface::calc_max_stretch (SCM smob)
   return scm_from_double (ret);
 }
 
-extern bool debug_skylines;
 MAKE_SCHEME_CALLBACK (Axis_group_interface, print, 1)
 SCM
 Axis_group_interface::print (SCM smob)
@@ -641,8 +641,10 @@ Axis_group_interface::print (SCM smob)
   Stencil ret;
   if (Skyline_pair *s = Skyline_pair::unsmob (me->get_property ("vertical-skylines")))
     {
-      ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[UP].to_points (X_AXIS)).in_color (255, 0, 255));
-      ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[DOWN].to_points (X_AXIS)).in_color (0, 255, 255));
+      ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[UP].to_points (X_AXIS))
+                      .in_color (255, 0, 255));
+      ret.add_stencil (Lookup::points_to_line_stencil (0.1, (*s)[DOWN].to_points (X_AXIS))
+                      .in_color (0, 255, 255));
     }
   return ret.smobbed_copy ();
 }
index a83c961727578ab5951a96d73e997ac83a369170..8734b861c2a2d15eadb9b7367b508da6200619fa 100644 (file)
@@ -166,6 +166,7 @@ Completion_heads_engraver::process_music ()
 
       event->set_property ("pitch", pits);
       event->set_property ("duration", note_dur.smobbed_copy ());
+      event->set_property ("length", Moment (note_dur.get_length ()).smobbed_copy ());
       event->set_property ("duration-log", scm_from_int (note_dur.duration_log ()));
 
       Item *note = make_note_head (event);
@@ -187,9 +188,8 @@ Completion_heads_engraver::process_music ()
     }
 
   left_to_do_ -= note_dur.get_length ();
-
   if (left_to_do_)
-    get_global_context ()->add_moment_to_process (now.main_part_ + left_to_do_);
+    get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length());
   /*
     don't do complicated arithmetic with grace notes.
   */
@@ -217,6 +217,8 @@ Completion_heads_engraver::start_translation_timestep ()
       note_events_.clear ();
       prev_notes_.clear ();
     }
+  context ()->set_property ("completionBusy",
+                           ly_bool2scm (note_events_.size ()));
 }
 
 Completion_heads_engraver::Completion_heads_engraver ()
@@ -240,5 +242,5 @@ ADD_TRANSLATOR (Completion_heads_engraver,
                "measureLength ",
 
                /* write */
-               ""
+               "completionBusy "
                );
diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc
new file mode 100644 (file)
index 0000000..77feb08
--- /dev/null
@@ -0,0 +1,164 @@
+/* 
+  dynamic-align-engraver.cc -- implement Dynamic_align_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2008 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include <set>
+
+#include "engraver.hh"
+
+#include "axis-group-interface.hh"
+#include "directional-element-interface.hh"
+#include "item.hh"
+#include "side-position-interface.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+
+#include "translator.icc"
+
+class Dynamic_align_engraver : public Engraver
+{
+  TRANSLATOR_DECLARATIONS (Dynamic_align_engraver);
+  DECLARE_ACKNOWLEDGER (note_column);
+  DECLARE_ACKNOWLEDGER (dynamic);
+  DECLARE_END_ACKNOWLEDGER (dynamic);
+
+protected:
+  virtual void stop_translation_timestep ();
+
+private:
+  void create_line_spanner (Stream_event *cause);
+  Spanner* line_;
+
+  vector<Spanner*> ended_;
+  vector<Spanner*> started_;
+  vector<Grob*> scripts_;
+  vector<Grob*> support_;
+  
+  set<Spanner*> running_;
+};
+
+Dynamic_align_engraver::Dynamic_align_engraver ()
+{
+  line_ = 0;
+}
+
+ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic);
+ADD_ACKNOWLEDGER (Dynamic_align_engraver, note_column);
+ADD_END_ACKNOWLEDGER (Dynamic_align_engraver, dynamic);
+
+void
+Dynamic_align_engraver::create_line_spanner (Stream_event* event)
+{
+  if (!line_)
+    line_ = make_spanner ("DynamicLineSpanner",
+                         event ? event->self_scm() : SCM_EOL);
+}
+
+void
+Dynamic_align_engraver::acknowledge_end_dynamic (Grob_info info)
+{
+  if (Spanner::has_interface(info.grob()))
+    ended_.push_back (info.spanner ());
+}
+
+void
+Dynamic_align_engraver::acknowledge_note_column (Grob_info info)
+{
+  support_.push_back (info.grob ());
+}
+
+void
+Dynamic_align_engraver::acknowledge_dynamic (Grob_info info)
+{
+  Stream_event *cause = info.event_cause ();
+  create_line_spanner (cause);
+  if (Spanner::has_interface(info.grob()))
+    started_.push_back (info.spanner ());
+  else if (info.item())
+    scripts_.push_back (info.item());
+  else
+    info.grob ()->programming_error ("Unknown dynamic grob.");
+
+  Axis_group_interface::add_element (line_, info.grob ());
+
+  if (cause)
+    {
+      if (Direction d = to_dir (cause->get_property ("direction")))
+       set_grob_direction (line_, d);
+    }
+}
+
+void
+Dynamic_align_engraver::stop_translation_timestep ()
+{
+  for (vsize i = 0; i < started_.size(); i++)
+    running_.insert (started_[i]);
+  for (vsize i = 0; i < ended_.size(); i++)
+    {
+      Spanner *sp = ended_[i];
+
+      set<Spanner*>::iterator it  = running_.find (sp);
+      if (it != running_.end())
+       running_.erase (it);
+      else
+       started_[i]->programming_error ("Lost track of this dynamic spanner.");
+    }
+
+  bool end = line_ && running_.empty ();
+  Direction d = LEFT;
+  do
+    {
+      if (line_
+         && ((d == LEFT && !line_->get_bound (LEFT))
+             || (end && d == RIGHT && !line_->get_bound (RIGHT))))
+       {
+         vector<Spanner*> const &spanners =
+           (d == LEFT) ? started_ : ended_;
+         
+         Grob *bound = 0;
+         if (scripts_.size())
+           bound = scripts_[0];
+         else if (spanners.size())
+           bound = spanners[0]->get_bound (d);
+         else
+           {
+             programming_error ("Started DynamicLineSpanner but have no left bound.");
+             bound = unsmob_grob (get_property ("currentMusicalColumn"));
+           }
+
+         line_->set_bound (d, bound);
+       }
+    }
+  while (flip (&d) != LEFT);
+
+  for (vsize i = 0; line_ && i < support_.size (); i++)
+    Side_position_interface::add_support (line_, support_[i]);
+
+  if (end) 
+    line_ = 0;
+
+  ended_.clear ();
+  started_.clear ();
+  scripts_.clear ();
+  support_.clear ();
+}
+
+
+ADD_TRANSLATOR (Dynamic_align_engraver,
+               /* doc */
+               "Align hairpins and dynamic texts on a horizontal line",
+
+               /* create */
+               "DynamicLineSpanner ",
+
+               /* read */
+               "currentMusicalColumn ",
+
+               /* write */
+               ""
+               );
index 2f66955d446317d3ad5682d633b992c579ee0c06..94057f0bde25ebe7ca50288758c73233d4c4f003 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "axis-group-interface.hh"
 #include "context.hh"
+#include "engraver.hh"
 #include "dimensions.hh"
 #include "directional-element-interface.hh"
 #include "engraver.hh"
@@ -253,7 +254,7 @@ Dynamic_engraver::process_music ()
              cresc_->set_property ("style", s);
              context ()->set_property ((start_type
                                         + "Spanner").c_str (), SCM_EOL);
-             s = get_property ((start_type + "Text").c_str ());
+             s = get_property ((start_type + "Text").c_str ());
              if (Text_interface::is_markup (s))
                {
                  cresc_->set_property ("text", s);
@@ -277,7 +278,6 @@ Dynamic_engraver::process_music ()
              cresc_->set_bound (LEFT, script_);
              add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
            }
-
          Axis_group_interface::add_element (line_spanner_, cresc_);
        }
     }
index c749be110a169b2319d68059070dbb7f5f2bf1de..e9195564d79849deee822a51933b932948a720af 100644 (file)
@@ -70,7 +70,8 @@ Engraver::announce_end_grob (Grob *e, SCM cause)
     {
       cause = m->to_event ()->unprotect ();
     }
-  if (unsmob_stream_event (cause) || unsmob_grob (cause))
+  if (e->get_property ("cause") == SCM_EOL
+      && (unsmob_stream_event (cause) || unsmob_grob (cause)))
     e->set_property ("cause", cause);
 
   Grob_info i (this, e);
index 32ad86a9eb7592fa42c428ee857f4a6d8399802c..782574e5e6e97a491a977379d6f76a556e5199ec 100644 (file)
@@ -362,7 +362,8 @@ Figured_bass_engraver::process_music ()
            {
              if (!group.continuation_line_)
                {
-                 Spanner * line = make_spanner ("BassFigureContinuation", SCM_EOL);
+                 Spanner * line
+                   = make_spanner ("BassFigureContinuation", SCM_EOL);
                  Item * item = group.figure_item_;
                  group.continuation_line_ = line;
                  line->set_bound (LEFT, item);
@@ -412,7 +413,8 @@ Figured_bass_engraver::process_music ()
 void
 Figured_bass_engraver::create_grobs () 
 {
-  Grob *muscol = dynamic_cast<Item*> (unsmob_grob (get_property ("currentMusicalColumn")));
+  Grob *muscol
+    = dynamic_cast<Item*> (unsmob_grob (get_property ("currentMusicalColumn")));
   if (!alignment_)
     {
       alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
index 8fbcc99b46eee93fee36d5a3c1d3952e300ebbdf..03c992303d7377885eada7c6625cfb4ac1dc9f16 100644 (file)
@@ -54,7 +54,7 @@ LY_DEFINE (ly_make_global_translator, "ly:make-global-translator",
 LY_DEFINE (ly_make_global_context, "ly:make-global-context",
           1, 0, 0, (SCM output_def),
           "Set up a global interpretation context, using the output"
-          " block @var{output_def}.  The context is returned.\n")
+          " block @var{output_def}.  The context is returned.")
 {
   LY_ASSERT_SMOB (Output_def, output_def, 1);
   Output_def *odef = unsmob_output_def (output_def); 
index 78be89e399f147c6cefb42428e7896bd204308c9..9479f17f41179cb3fbdc3cf6769fb533ffbbde9a 100644 (file)
@@ -722,14 +722,11 @@ common_refpoint_of_list (SCM elist, Grob *common, Axis a)
 Grob *
 common_refpoint_of_array (vector<Grob*> const &arr, Grob *common, Axis a)
 {
-  for (vsize i = arr.size (); i--;)
-    if (Grob *s = arr[i])
-      {
-       if (common)
-         common = common->common_refpoint (s, a);
-       else
-         common = s;
-      }
+  for (vsize i = 0; i < arr.size (); i++)
+    if (common)
+      common = common->common_refpoint (arr[i], a);
+    else
+      common = arr[i];
 
   return common;
 }
index 80f836d5b1ff89f74c0d84aab425183f8b899141..60366a0630fa7ee51dab702fe2444b6df12cb1f1 100644 (file)
@@ -47,7 +47,6 @@ Hairpin::consider_suicide (Spanner*me)
       && ly_is_equal (bounds[RIGHT]->get_column ()->get_property ("when"),
                      bounds[LEFT]->get_property ("when")))
     me->suicide ();
-  
 }
 
 MAKE_SCHEME_CALLBACK (Hairpin, print, 1);
@@ -207,7 +206,6 @@ Hairpin::print (SCM smob)
   /*
     should do relative to staff-symbol staff-space?
   */
-
   Stencil mol;
   Real x = 0.0;
 
index 7db201bb0004f5fba9b6e7373a2125a04036d82c..373045bfca740cbf80023aad6c64a5a55e4e59f6 100644 (file)
@@ -20,6 +20,7 @@ public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_positions, (SCM));
   DECLARE_SCHEME_CALLBACK (brew_chord_bracket, (SCM));
+  DECLARE_SCHEME_CALLBACK (brew_chord_slur, (SCM));
   DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (height, (SCM));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
index 8de07c990bf4a316c9b9afbc292ff543de8f85af..e9a82a756b394d70952e356fb5d12a2ff2f95098 100644 (file)
@@ -154,6 +154,7 @@ class Simultaneous_music;
 class Simultaneous_music_iterator;
 class Skyline;
 class Skyline_entry;
+class Skyline_pair;
 class Slur_configuration;
 class Slur_score_state;
 class Source_file;
index b01fb4d42d6e8acc0ea9d389499c2c5f2ba037ca..feabb4cf784b47d6a4a25fc00c94b0dc7e1a82e3 100644 (file)
@@ -20,6 +20,7 @@
   formatted content of the grob is put into a
   Property_object. Page-breaking handles Property_object objects.
 */
+
 class Prob
 {
   DECLARE_SMOBS (Prob);
@@ -40,13 +41,17 @@ public:
   Prob (Prob const &);
   virtual string name () const;
   SCM type () const { return type_; }
-  SCM get_property_alist (bool mutble) const;
+  SCM get_property_alist (bool _mutable) const;
   SCM internal_get_property (SCM sym) const;
   void instrumented_set_property (SCM, SCM, const char*, int, const char*);
   void internal_set_property (SCM sym, SCM val);
 };
+
 DECLARE_UNSMOB(Prob,prob);
+
 SCM ly_prob_set_property_x (SCM system, SCM sym, SCM value);
 SCM ly_prob_property (SCM system, SCM sym, SCM dfault);
 
+SCM ly_prob_type_p (SCM obj, SCM sym);
+  
 #endif /* PROPERTY_OBJECT_HH */
diff --git a/lily/include/skyline-pair.hh b/lily/include/skyline-pair.hh
new file mode 100644 (file)
index 0000000..08fe3c7
--- /dev/null
@@ -0,0 +1,36 @@
+/* 
+  skyline-pair.hh -- declare Skyline_pair
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2008 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#ifndef SKYLINE_PAIR_HH
+#define SKYLINE_PAIR_HH
+
+#include "skyline.hh"
+
+class Skyline_pair
+{
+private:
+  Drul_array<Skyline> skylines_;
+
+  DECLARE_SIMPLE_SMOBS(Skyline_pair);
+public:
+  Skyline_pair ();
+  Skyline_pair (vector<Box> const &boxes, Real horizon_padding, Axis a);
+  Skyline_pair (Box const &, Real horizon_padding, Axis a);
+  void raise (Real);
+  void shift (Real);
+  void insert (Box const &, Real horizon_padding, Axis);
+  void merge (Skyline_pair const &other);
+  Skyline &operator [] (Direction d);
+  Skyline const &operator [] (Direction d) const;
+  bool is_empty () const;
+  void print () const;
+  void print_points () const;
+};
+
+#endif /* SKYLINE_PAIR_HH */
index 5dadbacaf736f6503cf7e444c4bc448324556ad1..569d01f9c9ca11d59334845e0fe14858e5766713 100644 (file)
@@ -70,24 +70,7 @@ public:
   bool is_empty () const;
 };
 
-class Skyline_pair
-{
-private:
-  Drul_array<Skyline> skylines_;
-
-  DECLARE_SIMPLE_SMOBS(Skyline_pair);
-public:
-  Skyline_pair ();
-  Skyline_pair (vector<Box> const &boxes, Real horizon_padding, Axis a);
-  Skyline_pair (Box const &, Real horizon_padding, Axis a);
-  void raise (Real);
-  void shift (Real);
-  void insert (Box const &, Real horizon_padding, Axis);
-  void merge (Skyline_pair const &other);
-  Skyline &operator [] (Direction d);
-  Skyline const &operator [] (Direction d) const;
-  bool is_empty () const;
-};
+extern bool debug_skylines;
 
 #endif /* SKYLINE_HH */
 
index f0c82bb963dc31107129688f8440e6d88798bbb8..cf77c086c03066c55c9d2eeb16823f38e6e5c39e 100644 (file)
@@ -45,7 +45,6 @@ public:
   // todo: move to somewhere else.
   Real get_broken_left_end_align () const;
   void substitute_one_mutable_property (SCM sym, SCM val);
-  bool fast_substitute_grob_array (SCM sym, Grob_array *);
 
   Interval_t<Moment> spanned_time () const;
   virtual Interval_t<int> spanned_rank_interval () const;
@@ -69,6 +68,7 @@ protected:
   void set_my_columns ();
   virtual Grob *clone () const;
   virtual void do_break_processing ();
+  bool fast_substitute_grob_array (SCM sym, Grob_array *);
 };
 
 void add_bound_item (Spanner *, Grob *);
index 18b9127d1e83937c31f6395d504275117892c2a9..24402e56c56fcddce176339fa46d42d392e63540 100644 (file)
@@ -43,6 +43,7 @@ struct Tie_details
 
   int single_tie_region_size_;
   int multi_tie_region_size_;
+  Direction neutral_direction_;
   
   Tie_details ();
   void from_grob (Grob *);
index bf5d02d8b2876a2b1d154c2064cbab0f9d17bff9..c80fe02998b420660802cb8816d3ee5515daaecc 100644 (file)
@@ -97,13 +97,15 @@ Lyric_combine_music_iterator::set_music_context (Context *to)
 {
   if (music_context_)
     {
-      music_context_->event_source ()->remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+      music_context_->event_source ()->
+       remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
     }
 
   music_context_ = to;
   if (to)
     {
-      to->event_source ()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event"));
+      to->event_source ()->add_listener (GET_LISTENER (set_busy),
+                                        ly_symbol2scm ("music-event"));
     }
 }
 
diff --git a/lily/new-dynamic-engraver.cc b/lily/new-dynamic-engraver.cc
new file mode 100644 (file)
index 0000000..990dba0
--- /dev/null
@@ -0,0 +1,223 @@
+/* 
+  new-dynamic-engraver.cc -- implement New_dynamic_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2008 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+
+#include "engraver.hh"
+
+#include "item.hh"
+#include "pointer-group-interface.hh"
+#include "text-interface.hh"
+#include "note-column.hh"
+#include "self-alignment-interface.hh"
+#include "spanner.hh"
+#include "stream-event.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);
+
+protected:
+  virtual void process_music ();
+  virtual void stop_translation_timestep ();
+private:
+  Drul_array<Stream_event *> accepted_spanevents_drul_;
+  Spanner *current_spanner_;
+  Spanner *finished_spanner_;
+  
+  Item *script_;
+  Stream_event *script_event_;
+  Stream_event *current_span_event_;
+};
+
+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);
+}
+
+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);
+}
+
+
+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];
+      
+      SCM start_sym = current_span_event_->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;
+       }
+      
+      SCM cresc_type = get_property ((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 ((start_type + "Text").c_str ());
+         if (Text_interface::is_markup (text))
+           {
+             current_spanner_->set_property ("text", text);
+           }
+       }
+      else
+       {
+         if (cresc_type != ly_symbol2scm ("hairpin"))
+           {
+             // Fixme: should put value in error message.
+             ly_display_scm (cresc_type);
+             current_span_event_
+               ->origin()->warning ("unknown crescendo style; defaulting to hairpin.");
+           }
+         current_spanner_ = make_spanner ("Hairpin",
+                                          current_span_event_->self_scm ());
+         if (finished_spanner_)
+           {
+             Pointer_group_interface::add_grob (finished_spanner_,
+                                                ly_symbol2scm ("adjacent-hairpins"),
+                                                current_spanner_);
+
+             Pointer_group_interface::add_grob (current_spanner_,
+                                                ly_symbol2scm ("adjacent-hairpins"),
+                                                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_);
+         set_nested_property (current_spanner_,
+                              scm_list_3 (ly_symbol2scm ("bound-details"),
+                                          ly_symbol2scm ("left"),
+                                          ly_symbol2scm ("attach-dir")
+                                          ),
+                              scm_from_int (RIGHT));
+
+       }
+    }
+}
+
+
+
+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;
+}
+
+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);
+      if (heads.size ())
+       {
+         Grob *head = heads[0];
+         script_->set_parent (head, X_AXIS);
+         Self_alignment_interface::set_center_parent (script_, X_AXIS);
+       }
+    }
+
+  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 their vertical"
+               " alignments.  The symbols are collected onto a"
+               " @code{DynamicLineSpanner} grob which takes care of vertical"
+               " positioning.",
+
+               /* create */
+               "DynamicTextSpanner "
+               "DynamicText "
+               "Hairpin "
+               "TextSpanner ",
+
+               /* read */
+               "currentMusicalColumn ",
+
+               /* write */
+               ""
+               );
index 8c9e0aea4eec10a8607358dc777557f795834a72..0eb40d1b97a48c8297ff378de172d65de6cd5072 100644 (file)
@@ -8,23 +8,24 @@
 
 #include "paper-column.hh"
 
-#include "break-align-interface.hh"
-#include "moment.hh"
-#include "paper-score.hh"
-#include "warn.hh"
 #include "axis-group-interface.hh"
-#include "spaceable-grob.hh"
-#include "text-interface.hh"
-#include "lookup.hh"
+#include "break-align-interface.hh"
 #include "font-interface.hh"
-#include "output-def.hh"
-#include "pointer-group-interface.hh"
 #include "grob-array.hh"
-#include "system.hh"
-#include "spring.hh"
 #include "lookup.hh"
+#include "lookup.hh"
+#include "moment.hh"
+#include "output-def.hh"
+#include "paper-score.hh"
+#include "pointer-group-interface.hh"
 #include "separation-item.hh"
+#include "skyline-pair.hh"
+#include "spaceable-grob.hh"
+#include "spring.hh"
 #include "string-convert.hh"
+#include "system.hh"
+#include "text-interface.hh"
+#include "warn.hh"
 
 Grob *
 Paper_column::clone () const
diff --git a/lily/paper-system-scheme.cc b/lily/paper-system-scheme.cc
new file mode 100644 (file)
index 0000000..6935110
--- /dev/null
@@ -0,0 +1,44 @@
+/* 
+  paper-system-scheme.cc -- implement Paper_system bindings.
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2008 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include "prob.hh"
+
+#include "skyline-pair.hh"
+  
+LY_DEFINE (ly_paper_system_p, "ly:paper-system?",
+         1, 0, 0, (SCM obj),
+         "Type predicate.")
+{
+  return ly_prob_type_p (obj, ly_symbol2scm ("paper-system"));
+}
+
+LY_DEFINE (ly_paper_system_minimum_distance, "ly:paper-system-minimum-distance",
+          2, 0, 0, (SCM sys1, SCM sys2),
+          "Measure the minimum distance between these two paper-systems,"
+          " using their stored skylines if possible and falling back to"
+          " their extents otherwise.")
+{
+  Real ret = 0;
+  Prob *p1 = unsmob_prob (sys1);
+  Prob *p2 = unsmob_prob (sys2);
+  Skyline_pair *sky1 = Skyline_pair::unsmob (p1->get_property ("vertical-skylines"));
+  Skyline_pair *sky2 = Skyline_pair::unsmob (p2->get_property ("vertical-skylines"));
+
+  if (sky1 && sky2)
+    ret = (*sky1)[DOWN].distance ((*sky2)[UP]);
+  else
+    {
+      Stencil *s1 = unsmob_stencil (p1->get_property ("stencil"));
+      Stencil *s2 = unsmob_stencil (p2->get_property ("stencil"));
+      Interval iv1 = s1->extent (Y_AXIS);
+      Interval iv2 = s2->extent (Y_AXIS);
+      ret = iv2[UP] - iv1[DOWN];
+    }
+  return scm_from_double (ret);
+}
index 8c5d640ad0d3b5d9501c57c8f800d723504df8b3..717e32a945985358af74ee08f379b372e4363294 100644 (file)
@@ -7,7 +7,6 @@
 */
 
 #include "prob.hh"
-#include "skyline.hh"
 
 LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!",
           2, 1, 0, (SCM obj, SCM sym, SCM value),
@@ -77,35 +76,24 @@ LY_DEFINE (ly_make_prob, "ly:make-prob",
   return pr->unprotect ();
 }
 
-  
-LY_DEFINE (ly_paper_system_p, "ly:paper-system?",
-         1, 0, 0, (SCM obj),
-         "Type predicate.")
+
+LY_DEFINE (ly_prob_mutable_properties, "ly:prob-mutable-properties",
+          1, 0, 0,
+          (SCM prob),
+          "Retrieve an alist of mutable properties.")
 {
-  return ly_prob_type_p (obj, ly_symbol2scm ("paper-system"));
+  LY_ASSERT_SMOB (Prob, prob, 1);
+  Prob *ps = unsmob_prob (prob);
+  return ps->get_property_alist (true);
 }
 
-LY_DEFINE (ly_paper_system_minimum_distance, "ly:paper-system-minimum-distance",
-          2, 0, 0, (SCM sys1, SCM sys2),
-          "Measure the minimum distance between these two paper-systems,"
-          " using their stored skylines if possible and falling back to"
-          " their extents otherwise.")
+LY_DEFINE (ly_prob_immutable_properties, "ly:prob-immutable-properties",
+          1, 0, 0,
+          (SCM prob),
+          "Retrieve an alist of mutable properties.")
 {
-  Real ret = 0;
-  Prob *p1 = unsmob_prob (sys1);
-  Prob *p2 = unsmob_prob (sys2);
-  Skyline_pair *sky1 = Skyline_pair::unsmob (p1->get_property ("vertical-skylines"));
-  Skyline_pair *sky2 = Skyline_pair::unsmob (p2->get_property ("vertical-skylines"));
-
-  if (sky1 && sky2)
-    ret = (*sky1)[DOWN].distance ((*sky2)[UP]);
-  else
-    {
-      Stencil *s1 = unsmob_stencil (p1->get_property ("stencil"));
-      Stencil *s2 = unsmob_stencil (p2->get_property ("stencil"));
-      Interval iv1 = s1->extent (Y_AXIS);
-      Interval iv2 = s2->extent (Y_AXIS);
-      ret = iv2[UP] - iv1[DOWN];
-    }
-  return scm_from_double (ret);
+  LY_ASSERT_SMOB (Prob, prob, 1);
+  Prob *ps = unsmob_prob (prob);
+  return ps->get_property_alist (false);
 }
+
index 5c9eb9ef10439826317203c17eee4547fc60988e..a567f3c6bd50c336e56773b14209efeb2d81eb45 100644 (file)
@@ -8,15 +8,15 @@
 
 #include "separation-item.hh"
 
+#include "accidental-placement.hh"
 #include "axis-group-interface.hh"
 #include "lookup.hh"
 #include "note-head.hh"
-#include "stencil.hh"
-#include "skyline.hh"
 #include "paper-column.hh"
-#include "warn.hh"
 #include "pointer-group-interface.hh"
-#include "accidental-placement.hh"
+#include "skyline-pair.hh"
+#include "stencil.hh"
+#include "warn.hh"
 
 void
 Separation_item::add_item (Grob *s, Item *i)
@@ -137,7 +137,6 @@ Separation_item::boxes (Grob *me, Grob *left)
   return out;      
 }
 
-extern bool debug_skylines;
 MAKE_SCHEME_CALLBACK (Separation_item, print, 1)
 SCM
 Separation_item::print (SCM smob)
diff --git a/lily/skyline-pair.cc b/lily/skyline-pair.cc
new file mode 100644 (file)
index 0000000..100061a
--- /dev/null
@@ -0,0 +1,109 @@
+/* 
+  skyline-pair.cc -- implement Skyline_pair
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 2008 Han-Wen Nienhuys <hanwen@lilypond.org>
+  
+*/
+
+#include "skyline-pair.hh"
+
+#include "ly-smobs.icc"
+
+Skyline_pair::Skyline_pair ()
+  : skylines_ (Skyline (DOWN), Skyline (UP))
+{
+}
+
+Skyline_pair::Skyline_pair (vector<Box> const &boxes, Real padding, Axis a)
+  : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP))
+{
+}
+
+Skyline_pair::Skyline_pair (Box const &b, Real padding, Axis a)
+  : skylines_ (Skyline (b, padding, a, DOWN), Skyline (b, padding, a, UP))
+{
+}
+
+void
+Skyline_pair::raise (Real r)
+{
+  skylines_[UP].raise (r);
+  skylines_[DOWN].raise (r);
+}
+
+void
+Skyline_pair::shift (Real r)
+{
+  skylines_[UP].shift (r);
+  skylines_[DOWN].shift (r);
+}
+
+void
+Skyline_pair::insert (Box const &b, Real padding, Axis a)
+{
+  skylines_[UP].insert (b, padding, a);
+  skylines_[DOWN].insert (b, padding, a);
+}
+
+void
+Skyline_pair::merge (Skyline_pair const &other)
+{
+  skylines_[UP].merge (other[UP]);
+  skylines_[DOWN].merge (other[DOWN]);
+}
+
+void
+Skyline_pair::print () const
+{
+  skylines_[UP].print ();
+  skylines_[DOWN].print ();
+}
+
+void
+Skyline_pair::print_points () const
+{
+  skylines_[UP].print ();
+  skylines_[DOWN].print ();
+}
+
+
+bool
+Skyline_pair::is_empty () const
+{
+  return skylines_[UP].is_empty ()
+    && skylines_[DOWN].is_empty ();
+}
+
+Skyline&
+Skyline_pair::operator [] (Direction d)
+{
+  return skylines_[d];
+}
+
+Skyline const&
+Skyline_pair::operator [] (Direction d) const
+{
+  return skylines_[d];
+}
+
+IMPLEMENT_SIMPLE_SMOBS (Skyline_pair);
+IMPLEMENT_TYPE_P (Skyline_pair, "ly:skyline-pair?");
+IMPLEMENT_DEFAULT_EQUAL_P (Skyline_pair);
+
+SCM
+Skyline_pair::mark_smob (SCM)
+{
+  return SCM_EOL;
+}
+
+int
+Skyline_pair::print_smob (SCM s, SCM port, scm_print_state *)
+{
+  Skyline_pair *r = (Skyline_pair *) SCM_CELL_WORD_1 (s);
+  (void) r;
+
+  scm_puts ("#<Skyline-pair>", port);
+  return 1;
+}
index e0139a68668ecc46f4a7682bed85abb8812c1786..5297f6359ab91ea58642e9f552eca313031217ac 100644 (file)
@@ -541,67 +541,6 @@ Skyline::is_empty () const
   return b.end_ == infinity_f && b.y_intercept_ == -infinity_f;
 }
 
-Skyline_pair::Skyline_pair ()
-  : skylines_ (Skyline (DOWN), Skyline (UP))
-{
-}
-
-Skyline_pair::Skyline_pair (vector<Box> const &boxes, Real padding, Axis a)
-  : skylines_ (Skyline (boxes, padding, a, DOWN), Skyline (boxes, padding, a, UP))
-{
-}
-
-Skyline_pair::Skyline_pair (Box const &b, Real padding, Axis a)
-  : skylines_ (Skyline (b, padding, a, DOWN), Skyline (b, padding, a, UP))
-{
-}
-
-void
-Skyline_pair::raise (Real r)
-{
-  skylines_[UP].raise (r);
-  skylines_[DOWN].raise (r);
-}
-
-void
-Skyline_pair::shift (Real r)
-{
-  skylines_[UP].shift (r);
-  skylines_[DOWN].shift (r);
-}
-
-void
-Skyline_pair::insert (Box const &b, Real padding, Axis a)
-{
-  skylines_[UP].insert (b, padding, a);
-  skylines_[DOWN].insert (b, padding, a);
-}
-
-void
-Skyline_pair::merge (Skyline_pair const &other)
-{
-  skylines_[UP].merge (other[UP]);
-  skylines_[DOWN].merge (other[DOWN]);
-}
-
-bool
-Skyline_pair::is_empty () const
-{
-  return skylines_[UP].is_empty ()
-    && skylines_[DOWN].is_empty ();
-}
-
-Skyline&
-Skyline_pair::operator [] (Direction d)
-{
-  return skylines_[d];
-}
-
-Skyline const&
-Skyline_pair::operator [] (Direction d) const
-{
-  return skylines_[d];
-}
 
 /****************************************************************/
 
@@ -610,10 +549,6 @@ IMPLEMENT_SIMPLE_SMOBS (Skyline);
 IMPLEMENT_TYPE_P (Skyline, "ly:skyline?");
 IMPLEMENT_DEFAULT_EQUAL_P (Skyline);
 
-IMPLEMENT_SIMPLE_SMOBS (Skyline_pair);
-IMPLEMENT_TYPE_P (Skyline_pair, "ly:skyline-pair?");
-IMPLEMENT_DEFAULT_EQUAL_P (Skyline_pair);
-
 SCM
 Skyline::mark_smob (SCM)
 {
@@ -631,19 +566,3 @@ Skyline::print_smob (SCM s, SCM port, scm_print_state *)
 
   return 1;
 }
-
-SCM
-Skyline_pair::mark_smob (SCM)
-{
-  return SCM_EOL;
-}
-
-int
-Skyline_pair::print_smob (SCM s, SCM port, scm_print_state *)
-{
-  Skyline_pair *r = (Skyline_pair *) SCM_CELL_WORD_1 (s);
-  (void) r;
-
-  scm_puts ("#<Skyline-pair>", port);
-  return 1;
-}
index 2033cfcac43898dfc6b68e3dbb87d6aca6847501..d494c318c5ef820ca7759264c30c9a0f880c3842 100644 (file)
@@ -17,6 +17,7 @@
 #include "paper-column.hh"
 #include "separation-item.hh"
 #include "skyline.hh"
+#include "skyline-pair.hh"
 #include "system.hh"
 
 /* return the right-pointing skyline of the left-items and the left-pointing
index e580e33267cda1879fa665b22c7d2aaa0c4820dd..74e54e7eac7d308672ecb44e73e8704c37244656 100644 (file)
@@ -21,6 +21,7 @@
 #include "paper-score.hh"
 #include "pointer-group-interface.hh"
 #include "separation-item.hh"
+#include "skyline-pair.hh"
 #include "spaceable-grob.hh"
 #include "spacing-interface.hh"
 #include "staff-spacing.hh"
index a2ad71ece35dc8cb8df9e1c4e1b691972b4faa5a..e686e3b58cad0585e3ea7303686e50bfeb5e13aa 100644 (file)
 #include "axis-group-interface.hh"
 #include "grob-array.hh"
 #include "international.hh"
+#include "lookup.hh"
 #include "main.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
 #include "paper-score.hh"
 #include "paper-system.hh"
 #include "pointer-group-interface.hh"
+#include "skyline-pair.hh"
 #include "staff-symbol-referencer.hh"
 #include "warn.hh"
-#include "lookup.hh"
-
-extern bool debug_skylines;
 
 System::System (System const &src)
   : Spanner (src)
@@ -395,8 +394,12 @@ System::get_paper_system ()
       Skyline_pair *skylines = Skyline_pair::unsmob (get_property ("vertical-skylines"));
       if (skylines)
        {
-         sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, (*skylines)[UP].to_points (X_AXIS)).in_color (255, 0, 0));
-         sys_stencil.add_stencil (Lookup::points_to_line_stencil (0.1, (*skylines)[DOWN].to_points (X_AXIS)).in_color (0, 255, 0));
+         Stencil up
+           = Lookup::points_to_line_stencil (0.1, (*skylines)[UP].to_points (X_AXIS));
+         Stencil down
+           = Lookup::points_to_line_stencil (0.1, (*skylines)[DOWN].to_points (X_AXIS));
+         sys_stencil.add_stencil (up.in_color (255, 0, 0));
+         sys_stencil.add_stencil (down.in_color (0, 255, 0));
        }
     }
 
index 7c39b1c717cf20bbca5c7fbf8f7b7e10dc32623a..75a32d5bb78a1aabc584815851d73442ddc80595 100644 (file)
@@ -28,7 +28,10 @@ Tie_details::from_grob (Grob *me)
 {
   staff_symbol_referencer_ = me;
   staff_space_ = Staff_symbol_referencer::staff_space (me);
-
+  
+  neutral_direction_ = to_dir (me->get_property ("neutral-direction"));
+  if (!neutral_direction_)
+    neutral_direction_ = DOWN;
   
   SCM details = me->get_property ("details");
 
index bb50c4fbc18c1cfb9cee8be9fbb49e9c54b3b443..6aa5feb3b1b04e139db3829810472c3590e58581 100644 (file)
@@ -977,7 +977,8 @@ Tie_formatting_problem::set_ties_config_standard_directions (Ties_configuration
        tie_configs->at (0).dir_ = Direction (sign (tie_configs->at (0).position_));
 
       if (!tie_configs->at (0).dir_)
-       tie_configs->at (0).dir_ = DOWN;
+       tie_configs->at (0).dir_
+         = (tie_configs->size() > 1) ? DOWN : details_.neutral_direction_;
     }
   
   if (!tie_configs->back ().dir_)
index aa265f504236aee5c4465eeec693610a247f9add..980484d21bcdaed4b0345b1fdee3f5891f5a7ffa 100644 (file)
@@ -17,6 +17,7 @@
 #include "note-head.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
+#include "pointer-group-interface.hh"
 #include "rhythmic-head.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
@@ -113,7 +114,11 @@ Tie::get_default_dir (Grob *me)
   Direction d = LEFT;
   do
     {
-      Grob *stem = head (me, d) ? Rhythmic_head::get_stem (head (me, d)) : 0;
+      Grob *one_head = head (me, d);
+      if (!one_head && dynamic_cast<Spanner*> (me)) 
+       one_head = Tie::head (dynamic_cast<Spanner*> (me)->broken_neighbor (d), d);
+      
+      Grob *stem = one_head ? Rhythmic_head::get_stem (one_head) : 0;
       if (stem)
        stem = Stem::is_invisible (stem) ? 0 : stem;
 
@@ -135,7 +140,7 @@ Tie::get_default_dir (Grob *me)
   else if (int p = get_position (me))
     return Direction (sign (p));
   
-  return UP;
+  return to_dir (me->get_property("neutral-direction"));
 }
 
 
@@ -218,6 +223,14 @@ Tie::calc_control_points (SCM smob)
       //      && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1
       )
     {
+      extract_grob_set (yparent, "ties", ties);
+      if (ties.size() == 1
+         && !to_dir (me->get_property_data ("direction")))
+       {
+         assert (ties[0] == me);
+         set_grob_direction (me, Tie::get_default_dir (me));
+       }
+      
       /* trigger positioning. */
       (void) yparent->get_property ("positioning-done");
     }
@@ -310,10 +323,11 @@ ADD_INTERFACE (Tie,
               "dash-period "
               "details "
               "direction "
-              "separation-item "
               "head-direction "
               "line-thickness "
+              "neutral-direction "
               "quant-score "
+              "separation-item "
               "staff-position "
               "thickness "
               );
index c2239ec05424d3816f086e3296d4ffe5ea7a4de6..480a1ad6dc8551b8a629fc0eab5602c149549ebe 100644 (file)
@@ -222,7 +222,9 @@ multiple voices on the same staff."
   \consists "Part_combine_engraver"
 
   \consists "Text_engraver"
-  \consists "Dynamic_engraver"
+  \consists "New_dynamic_engraver"
+  \consists "Dynamic_align_engraver"
+%  \consists "Dynamic_engraver"
   \consists "Fingering_engraver"
   \consists "Bend_engraver"
 
@@ -505,6 +507,9 @@ automatically when an output definition (a @code{\score} or
   middleCClefPosition = #-6
   middleCPosition = #-6
   firstClef = ##t
+
+  crescendoSpanner = #'hairpin
+  decrescendoSpanner = #'hairpin
   
   defaultBarType = #"|"
   barNumberVisibility = #first-bar-number-invisible
index 60989ede0cd2ed21a70613b7cbe4060d62f4f90a..1425b22b14954315deea2483a50c4b3a110e737e 100644 (file)
@@ -51,31 +51,38 @@ endcresc =  {
 
 setTextCresc = {
     \set crescendoText = \markup { \italic "cresc." }
-    \set crescendoSpanner = #'dashed-line
+    \set crescendoSpanner = #'text
+    \override DynamicTextSpanner #'style = #'dashed-line
 }
 
 setTextDecresc = {
     \set decrescendoText = \markup { \italic "decresc." }
-    \set decrescendoSpanner = #'dashed-line
+    \set decrescendoSpanner = #'text
+    \override DynamicTextSpanner #'style = #'dashed-line
 }
 
 setTextDecr = {
     \set decrescendoText = \markup { \italic "decr." }
-    \set decrescendoSpanner = #'dashed-line
+    \set decrescendoSpanner = #'text
+    \override DynamicTextSpanner #'style = #'dashed-line
 }
 
 setTextDim = {
     \set decrescendoText = \markup { \italic "dim." }
-    \set decrescendoSpanner = #'dashed-line
+    \set decrescendoSpanner = #'text
+    \override DynamicTextSpanner #'style = #'dashed-line
 }
+
 setHairpinCresc = {
     \unset crescendoText 
     \unset crescendoSpanner 
 }
+
 setHairpinDecresc = {
     \unset decrescendoText 
     \unset decrescendoSpanner 
 }
+
 setHairpinDim = {
     \unset decrescendoText 
     \unset decrescendoSpanner 
index 351b9db2ce634d232d40ecad3060eb26005d452c..10fa6ef382ecc95622f0ab6abe94f313070089c4 100644 (file)
@@ -1,9 +1,9 @@
 $(outdir)/%/index.html: $(outdir)/%.texi $(outdir)/version.itexi
        mkdir -p $(dir $@)
-       -$(MAKEINFO) -P $(outdir) --output=$(outdir)/$* --css-include=$(top-src-dir)/Documentation/texinfo.css --html $<
+       $(MAKEINFO) -P $(outdir) --output=$(outdir)/$* --css-include=$(top-src-dir)/Documentation/texinfo.css --html $<
 
 $(outdir)/%-big-page.html: $(outdir)/%.texi $(outdir)/version.itexi
-       -$(MAKEINFO) -P $(outdir) --output=$@ --css-include=$(top-src-dir)/Documentation/texinfo.css --html --no-split --no-headers $< 
+       $(MAKEINFO) -P $(outdir) --output=$@ --css-include=$(top-src-dir)/Documentation/texinfo.css --html --no-split --no-headers $< 
 
 $(outdir)/%.pdftexi: $(outdir)/%.texi doc-po $(outdir)/version.itexi
        $(PYTHON) $(buildscript-dir)/texi-gettext.py $(ISOLANG) $<
index e506ed24fea8a978dffb9be277b99910a9374c92..f656942b1630e769a87b4f549201e2271bc7b56c 100644 (file)
@@ -148,6 +148,7 @@ Values of 7 and -7 are common.")
      (clefPosition ,number? "Where should the center of the clef
 symbol go, measured in half staff spaces from the center of the
 staff.")
+     (completionBusy ,boolean? "Whether a completion-note head is playing.")
      (connectArpeggios ,boolean? "If set, connect arpeggios across
 piano staff.")
      (countPercentRepeats ,boolean? "If set, produce counters for
@@ -581,4 +582,4 @@ and subscripts.  See @file{scm/script.scm} for more information.")
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public default-melisma-properties
-  '(melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy))
+  '(melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy completionBusy))
index 3fb91c199e76d461901b443133095ea102f8c738..a533278fb539fba74a3e01d7003ffdf482fd4e40 100644 (file)
@@ -460,8 +460,8 @@ shortest playing here.")
      (shortest-starter-duration ,ly:moment? "The duration of the
 shortest note that starts here.")
      (side-axis ,number? "If the value is @code{#X} (or
-equivalently@tie{}@code{1}), the object is placed horizontally next
-to the other object.  If the value is @code{#Y} or@tie{}@code{0}, it
+equivalently@tie{}@code{0}), the object is placed horizontally next
+to the other object.  If the value is @code{#Y} or@tie{}@code{1}, it
 is placed vertically.")
      (side-relative-direction ,ly:dir? "Multiply direction of
 @code{direction-source} with this to get the direction of this
index 652a1392437143ba68ba4fc2d07c696ad9de5673..94e30465e9b7f36b09c88cd0ef45fe65636a1eb8 100644 (file)
        (springs-and-rods . ,ly:spanner::set-spacing-rods)
        (avoid-slur . inside)
        (direction . ,ly:tie::calc-direction)
+       (neutral-direction . ,UP)
        (stencil . ,ly:tie::print)
        (font-size . -6)
        (details . (
index 1e7c524241141b0c4ab6e8dff817a59b077b0544..c700f190dbc5f287b2999a6047be3c436e733d0a 100644 (file)
@@ -340,7 +340,18 @@ i.e.  this is not an override"
              'grob-property gprop))
 
 (define direction-polyphonic-grobs
-  '(Stem Tie Rest Slur PhrasingSlur Script TextScript Dots DotColumn Fingering))
+  '(DotColumn
+    Dots
+    Fingering
+    LaissezVibrerTie
+    PhrasingSlur
+    RepeatTie
+    Rest
+    Script
+    Slur
+    Stem
+    TextScript
+    Tie))
 
 (define-safe-public (make-voice-props-set n)
   (make-sequential-music