]> git.donarmstrong.com Git - lilypond.git/commitdiff
Modify autobeam and grouping properties
authorCarl Sorensen <c_sorensen@byu.edu>
Mon, 22 Jun 2009 18:03:23 +0000 (12:03 -0600)
committerCarl Sorensen <c_sorensen@byu.edu>
Mon, 3 Aug 2009 23:12:36 +0000 (17:12 -0600)
Create new beamSettings property which stores all information
 about beam creation.

Elminate beatGrouping property; grouping is now defined by the
 default autobeam rule

Add \overrideBeamSettings and \revertBeamSettings to allow the
 complete definition of beamSettings for a time signature in one
 call.

Eliminate the need to revert predefined beam settings in order to
 get the desired autobeaming behavior.

Create new c++ functions (callable from Scheme) to get settings
 out of the beamSettings property.

Update documentation and snippets to reflect the change.

38 files changed:
Documentation/de/notation/rhythms.itely
Documentation/es/notation/rhythms.itely
Documentation/fr/notation/rhythms.itely
Documentation/music-glossary.tely
Documentation/notation/rhythms.itely
Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly
Documentation/snippets/beam-endings-in-score-context.ly
Documentation/snippets/beam-grouping-in-7-8-time.ly
Documentation/snippets/chordchanges-for-fretboards.ly
Documentation/snippets/compound-time-signatures.ly
Documentation/snippets/conducting-signs,-measure-grouping-signs.ly
Documentation/snippets/grouping-beats.ly
Documentation/snippets/making-slurs-with-complex-dash-structure.ly
Documentation/snippets/non-default-tuplet-numbers.ly
Documentation/snippets/non-traditional-key-signatures.ly
Documentation/snippets/reverting-default-beam-endings.ly
Documentation/snippets/specifying-context-with-beatgrouping.ly
Documentation/snippets/using-beatlength-and-beatgrouping.ly
input/manual/fretted-headword.ly
input/mutopia/claop.py
input/regression/auto-beam-beat-grouping.ly [deleted file]
input/regression/beam-beat-grouping.ly
lily/auto-beam-engraver.cc
lily/beam-setting-scheme.cc [new file with mode: 0644]
lily/beaming-pattern.cc
lily/include/beam-settings.hh [new file with mode: 0644]
lily/measure-grouping-engraver.cc
ly/bagpipe.ly
ly/engraver-init.ly
ly/music-functions-init.ly
python/convertrules.py
scm/auto-beam.scm
scm/beam-settings.scm [new file with mode: 0644]
scm/c++.scm
scm/define-context-properties.scm
scm/define-music-display-methods.scm
scm/lily.scm
scm/music-functions.scm

index a10e972f6063c650d17d6119d5c13a128499e8d7..8d66a0fef9d5329cd603fef852a8b00c23c80477 100644 (file)
@@ -55,12 +55,12 @@ Dauern, Bebalkung und Takten.
 @funindex breve
 @funindex maxima
 
-Notenlängen (Dauern) werden durch 
-Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben. 
-Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine 
-1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist). 
-Noten, die länger als eine Ganze sind, müssen mit @code{\longa} 
-(für die Longa, also vier Ganze) und 
+Notenlängen (Dauern) werden durch
+Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben.
+Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine
+1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist).
+Noten, die länger als eine Ganze sind, müssen mit @code{\longa}
+(für die Longa, also vier Ganze) und
 @code{\breve} (für die Brevis, auch Doppelganze genannt) notiert werden.
 Notendauern bis hin zu 128steln sind unterstützt. Kürzere Notenwerte können
 auch notiert werden, können allerdings nur als Noten mit Balken auftreten.
@@ -89,8 +89,8 @@ Befehl @code{\maxima} eingegeben werden, aber ihre Darstellung
 ist nur für die Alte Musiknotation unterstützt.  Zu Einzelheiten
 siehe @ref{Notation von alter Musik}.
 
-Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist, 
-wird die Dauer der vorhergehenden Note eingesetzt.  Der Standardwert 
+Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist,
+wird die Dauer der vorhergehenden Note eingesetzt.  Der Standardwert
 für die erste Note ist eine Viertel.
 
 @lilypond[quote,verbatim,relative=2]
@@ -104,8 +104,8 @@ a a a2 a a4 a a1 a
 @cindex Doppelpunktierung
 @cindex Noten, doppelpunktiert
 
-Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt 
-(@code{.}) hinter die Zahl der Dauer gesetzt werden.  Zwei Punkte 
+Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt
+(@code{.}) hinter die Zahl der Dauer gesetzt werden.  Zwei Punkte
 ergeben eine doppelte Punktierung, usw.
 
 @lilypond[quote,verbatim,relative=2]
@@ -116,7 +116,7 @@ Manche Notenlängen können nicht mit binären Dauern und Punkten
 dargestellt werden, sie können nur erreicht werden, indem man
 Noten überbindet.  Für Einzelheiten siehe @ref{Bindebögen}.
 
-Wie den Silben von Gesangtext eigene Dauern zu gewiesen werden 
+Wie den Silben von Gesangtext eigene Dauern zu gewiesen werden
 können und wie man sie an den Noten ausrichtet ist erklärt in
 @ref{Notation von Gesang}.
 
@@ -132,7 +132,7 @@ Einstellungen für proportionale Notation siehe
 @funindex dotsDown
 @funindex dotsNeutral
 
-Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien 
+Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien
 nicht berühren.  Fertige Befehle können eingesetzt werden, um
 eine bestimmte Richtung manuell zu erzwingen, zu Einzelheiten
 siehe @ref{Richtung und Platzierung}.
@@ -191,7 +191,7 @@ Maxima (8 Ganze) gesetzt werden.
 @funindex times
 @funindex \times
 
-Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen 
+Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen
 Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden.
 
 @example
@@ -199,11 +199,11 @@ Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden.
 @end example
 
 @noindent
-Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert. 
+Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert.
 Der Nenner des Bruchs wird über (oder unter) den Noten ausgegeben,
 optional mit einer eckigen Klammer, die die Noten einfasst.
-Die üblichste Aufteilung ist die 
-Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder 
+Die üblichste Aufteilung ist die
+Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder
 einzelnen Note ist also 2/3 der notierten Länge.
 
 @lilypond[quote,verbatim,relative=2]
@@ -313,16 +313,16 @@ N-tolen gesetzt werden.
 @cindex Dauern skalieren
 @cindex Skalieren von Dauern
 
-Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden, 
-indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist) 
+Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden,
+indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist)
 geschrieben wird.  Die Erscheinung der Noten oder Pausen wird
 dadurch nicht beeinflusst, die neue Dauer wird aber dazu
 benutzt, ihre Position im Takt zu errechnen und die neue
 Dauer in der MIDI-Ausgabe einzusetzen. Die Faktoren, mit
-denen multipliziert wird, können auch kombiniert werden, etwa 
+denen multipliziert wird, können auch kombiniert werden, etwa
 @qq{*L*M*/N}.
 
-Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein, 
+Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein,
 aber es wird keine Triolenklammer über ihnen ausgegeben.
 
 @lilypond[quote,relative=2,verbatim]
@@ -397,16 +397,16 @@ Schnipsel:
 
 @funindex ~
 
-Ein Bindebogen verbindet zwei benachbarte Noten der selben 
+Ein Bindebogen verbindet zwei benachbarte Noten der selben
 Tonhöhe.  Als Resultat wird die Dauer der Notenlänge verlängert.
-@warning{Bindebögen dürfen nicht mit Legatobögen verwechselt werden, durch 
-die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen, 
+
+@warning{Bindebögen dürfen nicht mit Legatobögen verwechselt werden, durch
+die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen,
 die musikalische Phrasen anzeigen.  Ein Bindebogen ist nur eine
 Art, die Tondauer zu verlängern, ähnlich etwa wie die
 Punktierung.}
 
-Ein Bindebogen wird mit der 
+Ein Bindebogen wird mit der
 Tilde @code{~} (AltGr++) notiert.
 
 @lilypond[quote,verbatim,relative=2]
@@ -436,10 +436,10 @@ automatisch aufgeteilt, wenn sie über Taktgrenzen reichen.
 @cindex Überbindungen und Akkorde
 @cindex Akkorde und Überbindungen
 
-Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten 
-dieses Akkordes übergebunden.  Wenn kein Notenkopf passt, wird auch 
-kein Bogen erzeugt.  Noten in Akkorden können auch einzeln übergebunden 
-werden, indem sie innerhalb des Akkordes hinter die entsprechende Note 
+Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten
+dieses Akkordes übergebunden.  Wenn kein Notenkopf passt, wird auch
+kein Bogen erzeugt.  Noten in Akkorden können auch einzeln übergebunden
+werden, indem sie innerhalb des Akkordes hinter die entsprechende Note
 geschrieben werden.
 
 @lilypond[quote,verbatim,relative=1]
@@ -476,8 +476,8 @@ Note anfängt, muss der Bindebogen wie folgt notiert werden:
 @funindex laissezVibrer
 @funindex \laissezVibrer
 
-So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass 
-man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-, 
+So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass
+man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-,
 anderer Saiteninstrument- und Schlagzeugnotation verwendet. Sie können folgendermaßen notiert werden:
 
 @lilypond[quote,verbatim,relative=1]
@@ -581,11 +581,11 @@ Referenz der Interna:
 
 @knownissues
 
-Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen 
+Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen
 gekrümmten Bogen.
 
-Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten 
-ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen 
+Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten
+ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen
 Legatobogen zu verwenden.
 
 
@@ -648,17 +648,17 @@ vordefinierten Befehle:
 @cindex Ganztaktpausen
 @cindex Mehrtaktpausen
 
-Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert 
-werden sollen, müssen als mehrtaktige Pausen eingegeben werden. 
-Sie können sowohl für einen einzigen Takt als auch für mehrere 
+Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert
+werden sollen, müssen als mehrtaktige Pausen eingegeben werden.
+Sie können sowohl für einen einzigen Takt als auch für mehrere
 Takte verwendet werden, Näheres im Abschnitt
 @ref{Ganztaktige Pausen}.
 
-Um die vertikale Position einer Pause explizit festzulegen, 
-kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}. 
-Die Pause wird dann an die Stelle gesetzt, wo sich sonst die 
-Note befinden würde.  Damit wird die manuelle Formatierung von mehrstimmiger Musik 
-sehr viel einfacher, da die Formatierungsfunktion zur automatischen 
+Um die vertikale Position einer Pause explizit festzulegen,
+kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}.
+Die Pause wird dann an die Stelle gesetzt, wo sich sonst die
+Note befinden würde.  Damit wird die manuelle Formatierung von mehrstimmiger Musik
+sehr viel einfacher, da die Formatierungsfunktion zur automatischen
 Auflösung von Zusammenstößen diese Pausen nicht mit einbezieht.
 
 @lilypond[quote,verbatim,relative=2]
@@ -707,7 +707,7 @@ Maxima (8 Ganze).
 @funindex skip
 @funindex s
 
-Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet) 
+Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet)
 kann wie eine Note eingegeben werden, die Notationsbezeichnung ist @code{s}.
 
 @lilypond[quote,verbatim,relative=2]
@@ -716,8 +716,8 @@ a4 a4 s4 a4 \skip 1 a4
 
 @cindex Gesangstext, überspringen
 
-Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In 
-anderen Situationen, z. B. innerhalb eines Liedtextes, muss @code{\skip} 
+Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In
+anderen Situationen, z. B. innerhalb eines Liedtextes, muss @code{\skip}
 benutzt werden.  @code{\skip} benötigt eine explizite Dauerangabe.
 
 @lilypond[quote,verbatim,relative=2]
@@ -740,8 +740,8 @@ Die Überspringung mit @code{s} erstellt @code{Staff} und
 s1 s s
 @end lilypond
 
-Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter. 
-Durch ihn wird 
+Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter.
+Durch ihn wird
 überhaupt nichts gesetzt, auch keine transparenten Objekte.
 
 @lilypond[quote,verbatim,fragment]
@@ -855,7 +855,7 @@ R2.*2 |
 @funindex MultiMeasureRestText
 
 Textbeschriftung kann Mehrtaktpausen mit @code{\markup}
-hinzugefügt werden.  Ein 
+hinzugefügt werden.  Ein
 vordefinierte Befehl @code{\fermataMarkup} fügt eine
 Fermate ein.
 
@@ -1133,9 +1133,9 @@ Das wird intern übersetzt nach:
 @end example
 
 Die Eigenschaft @code{measurePosition} (Takt-Position) enthält
-eine rationale Zahl, 
-die anezigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist 
-sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt 
+eine rationale Zahl,
+die anezigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist
+sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt
 zu: @qq{Eine Viertel bleibt übrig vom ganzen Takt.}
 
 @seealso
@@ -1164,8 +1164,8 @@ Referenz der Interna:
 
 @knownissues
 
-@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der 
-Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen 
+@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der
+Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen
 auftreten.
 
 
@@ -1185,10 +1185,10 @@ auftreten.
 @funindex cadenzaOn
 @funindex cadenzaOff
 
-Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik 
-ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht 
-erwünscht. Mit den Befehlen @code{\cadenzaOn} und 
-@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und 
+Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik
+ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht
+erwünscht. Mit den Befehlen @code{\cadenzaOn} und
+@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und
 wieder angeschaltet werden.
 
 @lilypond[verbatim,quote,relative=2,fragment]
@@ -1231,8 +1231,8 @@ Schnipsel:
 
 @knownissues
 
-LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie 
-ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie 
+LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie
+ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie
 selber unsichtbare Taktlinien mit
 
 @example
@@ -1407,10 +1407,10 @@ Fall wäre.
 @funindex Completion_heads_engraver
 
 Lange Noten, die über Taktlinien hinüberreichen, können
-automatisch in übergebundene Noten aufgeteilt werden. 
-Dieses Verhalten erreicht man, indem der  @rinternals{Note_heads_engraver} 
-mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird. 
-Im nächsten Beispiel werden Noten, die über die Taktlinie dauern, aufgeteilt 
+automatisch in übergebundene Noten aufgeteilt werden.
+Dieses Verhalten erreicht man, indem der  @rinternals{Note_heads_engraver}
+mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird.
+Im nächsten Beispiel werden Noten, die über die Taktlinie dauern, aufgeteilt
 und übergebunden.
 
 @lilypond[quote,verbatim,relative=1]
@@ -1422,11 +1422,11 @@ und übergebunden.
 { c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 }
 @end lilypond
 
-Dieser Engraver teilt alle Noten 
-auf, die über eine Taktlinie dauern und fügt Bindebögen hinzu. 
-Er kann unter Anderem dann nützlich sein, wenn man komplexe 
-Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht 
-vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele 
+Dieser Engraver teilt alle Noten
+auf, die über eine Taktlinie dauern und fügt Bindebögen hinzu.
+Er kann unter Anderem dann nützlich sein, wenn man komplexe
+Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht
+vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele
 Notenwerte noch in dem jeweiligen Takt fehlen.
 
 @seealso
@@ -1446,12 +1446,12 @@ Referenz der Interna:
 
 @knownissues
 
-Nicht alle Notenwerte (besonders wenn sie andere rhythmische 
-Aufteilungen beinhalten) können exakt durch normale Noten und 
+Nicht alle Notenwerte (besonders wenn sie andere rhythmische
+Aufteilungen beinhalten) können exakt durch normale Noten und
 Punktierungen wiedergegeben werden. Der Engraver setzt aber
 trotzdem keine Triolen etc.
 
-@code{Completion_heads_engraver} wirkt sich nur auf Noten aus; 
+@code{Completion_heads_engraver} wirkt sich nur auf Noten aus;
 Pausen werden nicht aufgeteilt.
 
 
@@ -1462,9 +1462,9 @@ Pausen werden nicht aufgeteilt.
 @cindex Melodierhythmus: Anzeige
 @cindex Rhythmus der Melodie anzeigen
 
-Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das 
-erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden 
-auf eine Linie reduziert und das System hat auch nur eine einzige 
+Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das
+erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden
+auf eine Linie reduziert und das System hat auch nur eine einzige
 Linie.
 
 @lilypond[quote,relative=1,verbatim]
@@ -1574,7 +1574,7 @@ LilyPond setzt Balken (engl. beam) automatisch.
 \time 6/8 c c c c8. c16 c8
 @end lilypond
 
-Wenn diese automatischen Entscheidungen nicht gut genug sind, können 
+Wenn diese automatischen Entscheidungen nicht gut genug sind, können
 die Balken auch explizit eingegeben werden, siehe
 @ref{Manuelle Balken}.  Balken @emph{müssen} auch auf diese Weise eingegeben
 werden, wenn sie über Pausen hinwegreichen sollen.
@@ -1658,21 +1658,14 @@ Stimmen zusammenstoßen.
 @cindex Gesangstext und Balken
 
 @funindex autoBeaming
-@funindex autoBeamSettings
-@funindex (end * * * *)
-@funindex (begin * * * *)
+@funindex beamSettings
 @funindex measureLength
 @funindex beatLength
-@funindex beatGrouping
 @funindex \time
 @funindex time
 @funindex \set
 @funindex set
 
-Es gibt zwei Arten an Balkenregeln: @emph{Balkengruppen}-Regeln und
-@emph{Balkenenden}-Regeln.  Balkengruppen-Regeln sind am einfachsten,
-werden aber von allen Balkenenden-Regeln überschrieben, die gültig sind.
-
 Die Platzierung der automatischen Bebalkung wird entschieden, indem
 die folgenden Regeln in der dargestellten Reihenfolge angewendet werden:
 
@@ -1682,62 +1675,12 @@ die folgenden Regeln in der dargestellten Reihenfolge angewendet werden:
 
 @item wenn @code{\autoBeamOff} eingeschaltet ist, werden keine Balken gesetzt, andernfalls
 
-@item wenn eine Balkenenden-Regel zutrifft, wird sie benutzt, um die Noten mit
-Balken zu gruppieren, andernfalls
-
 @item benutze den Wert von @code{beatLength} um die Noten mit Balken zu gruppieren.
 
 @end itemize
 
 @i{@strong{Die Gruppierung von Noten verändern}}
 
-Wenn keine Regeln für die Beendung von Balken für die aktuelle
-Balkendauer in der benutzen Taktart vorhanden sind, wird die
-Bebalkung von drei Kontext-Eigenschaften kontrolliert:
-@code{measureLength}, @code{beatLength} und @code{beatGrouping}.
-Diese Eigenschaften können in den @code{Score}, @code{Staff} oder
-@code{Voice}-Kontexten gesetzt werden, um ihre Wirkungsweise zu
-begrenzen.  Die Standardwerte werden gesetzt, wenn der @code{\time}-Befehl
-gelesen wird, sodass alle @code{\set}-Befehle, die diese Werte verändern sollen, nach den @code{\time}-Befehlen
-geschrieben werden müssen.
-
-@warning{Diese drei Eigenschaften werden für einen bestimmten
-Balken @strong{nur dann} aktiv, wenn für diese Balkendauer keine
-Beendungsregeln für die benutzte Taktart definiert sind, oder
-wenn alle diese Enden-Regeln mit @code{\revert} rückgängig gemacht
-wurden.}
-
-Durch sie werden die Balken wie folgt bestimmt:
-
-Balken können überall beginnen (außer ein Balken ist schon aktiv).
-Balken enden zu den Werten, die @code{beatGrouping} und
-@code{beatLength} bestimmten, nach folgenden Regeln:
-
-@itemize
-
-@item Wenn @code{beatGrouping} und @code{beatLength} den gleichen
-Wert wie @code{measureLength} haben, wird @code{beatGrouping}
-benutzt, um die Endpunkte der Balken zu bestimmen.
-
-@item  Wenn @code{beatGrouping} und @code{beatLength} nicht mit
-@code{measureLength} übereinstimmen, wird @code{beatLength}
-benutzt, um die Endpunkte der Balken zu bestimmen.
-
-@end itemize
-
-Standardmäßig werden @code{measureLength}
-(Taktlänge) und @code{beatLength} von der Taktart entnommen, die
-mit @code{\time} gesetzt wurde. @code{measureLength} hat
-standardmäßig genau die gleiche Länge wie die Taktlänge und der
-Standardwert für @code{beatLength} (Taktzeit-Länge) wird durch
-den Nenner des Taktart-Bruches bestimmt.
-
-Der Standardwert von @code{beatGrouping} wird aus einer Tabelle
-in der Datei @file{scm/@/music@/-functions@/.scm} entnommen.  Um
-sie zu finden, siehe @rlearning{Mehr Information}.
-Hier werden Taktzeiten-Gruppen für die Taktarten 5/8, 6/8, 8/8,
-9/8 und alle üblichen zusammengestzten Taktarten definiert.
-
 Sowohl @code{measureLength} als auch @code{beatLength} sind
 @i{Momente}, Einheiten musikalischer Dauer.  Eine Größe der
 Art @i{Moment} wird durch die Scheme-Funktion
@@ -1807,78 +1750,32 @@ Syntax verwendet werden:
 @noindent
 wobei
 
-@itemize
-
-@item @code{Balken-Limit} die Art der Balkenbegrenzung ist.  Das
-kann entweder der Wert @code{begin} (Anfang) oder @code{end}
-(Ende) sein, aber nur @code{end} hat eine Auswirkung.
-
-@item @code{Balken-Zähler/Balken-Nenner} ist die Balken-Dauer,
-auf die die Regel sich bezieht.  Ein Balken hat per Definition
-die Dauer seiner kürzesten Note.  Wenn sowohl
-@code{Balken-Zähler} als auch @code{Balken-Nenner} auf
- @code{'*'} gesetzt werden, gilt die Regel für alle Dauern.
-
-@item @code{Taktart-Zähler/Taktart-Nenner} bestimmen die
-Taktart, auf die die Regel sich bezieht. Wenn @code{Taktart-Zähler}
-und @code{Taktart-Nenner} auf @code{'*'} gesetzt werden, gilt
-die Regel für alle Taktarten.
-
-@item @code{Moment-Zähler/Moment-Nenner} ist die Position im
-Takt, an welcher der Balken aufhören soll.
-
-@funindex score-override-auto-beam-setting
-@funindex override-auto-beam-setting
-
-@item @code{Kontext} ist optional und bestimmt den Kontext, in
-welchem die Änderungen vorgenommen werden sollen.  Der
-Standard ist @code{'Voice}.
-
-@code{#(score-override-auto-beam-setting '(A B C D) E F)} ist
-gleichbedeutend mit
-@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}.
-
-@end itemize
-
-Wenn beispielsweise die automatischen Balken immer auf der ersten
-Viertel enden sollen, unabhängig von der Taktart oder Dauer
-des Balkens, kann
-
-@lilypond[quote,verbatim,relative=2]
-a8 a a a a a a a
-#(override-auto-beam-setting '(end * * * *) 1 4)
-a8 a a a a a a a
-@end lilypond
-
-@noindent
-benutzt werden.
-
-Balkenregeln können aber auch auf Notengruppen beschränkt werden,
-deren kürzeste Note einen bestimmten Wert hat:
-
-@lilypond[quote,verbatim,relative=2]
-\time 2/4
-% end 1/16 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 16 * *) 1 16)
-a16 a a a a a a a |
-a32 a a a a16 a a a a a |
-% end 1/32 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 32 * *) 1 16)
-a32 a a a a16 a a a a a |
-@end lilypond
-
-Balkenregeln können so definiert werden, dass sie nur in bestimmten
-Taktarten angewendet werden:
-
-@lilypond[quote,verbatim,relative=2]
-\time 5/8
-% end beams of all durations in 5/8 time signature at the 2/8 moment
-#(override-auto-beam-setting '(end * * 5 8) 2 8)
-c8 c d d d
-\time 4/4
-e8 e f f e e d d
-\time 5/8
-c8 c d d d
+@lilypond[quote,relative=2,verbatim]
+  \time 5/16
+  c8^"beats" c16 c8 |
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+  c8^"(2+3)" c16 c8
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+  c8^"(3+2)" c16 c8
+@end lilypond
+
+@lilypond[quote, verbatim,relative=1]
+\new Staff <<
+  \time 7/8
+  \new Voice = one {
+    \relative c'' {
+      \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+        a8 a a a a a a
+    }
+  }
+  \new Voice  = two {
+    \relative c' {
+      \voiceTwo
+      \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
+      f8 f f f f f f
+    }
+  }
+>>
 @end lilypond
 
 Wenn mehrfache Stimmen benutzt werden, muss der @code{Staff}-Kontext
@@ -1888,89 +1785,59 @@ angewendet werden sollen:
 @lilypond[quote,verbatim,relative=2]
 \time 7/8
 % rhythm 3-1-1-2
-% Context not specified - does not work correctly
-#(override-auto-beam-setting '(end * * 7 8) 3 8)
-#(override-auto-beam-setting '(end * * 7 8) 4 8)
-#(override-auto-beam-setting '(end * * 7 8) 5 8)
+% Context Voice specified - does not work correctly
+% Because of autogenerated voices, all beating will
+% be at beatLength (1 . 8)
+\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 
-% Works correctly with context specified
-#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff)
+% Works correctly with context Staff specified
+\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 @end lilypond
 
-@warning{Wenn eine unerwartete Bebalkung auftritt, schauen Sie
-zuerste die Balkeneinstellungen in @file{scm/@/auto@/-beam@/.scm} 
-nach, ob sich hier Überschneidungen ergeben, weil die
-Balkenenden, die dort definiert sind, auch noch weiterhin
-wirksam sind zusätzlich zu den von Ihnen definierten.}
+@funindex revert-beam-setting
 
-@funindex revert-auto-beam-setting
-
-Jede ungewollte oder störende Balkenbeendigung aus den Standard-Einstellungen
-muss für Ihre Taktart rückgängig gemacht werden.  Existierende
-automatische Bebalkungsregeln werden mit folgender
-Syntax entfernt:
+Beam settings can be reverted to get back to default behavior.  This
+is accomplished by using @code{\revertBeamSettings}.  The arguments
+are the same as for @code{\overrideBeamSettings}, except no value
+for @var{grouping} is given:
 
 @example
-#(revert-auto-beam-setting
-  '(Balken-Limit
-    Balken-Zähler Balken-Nenner
-    Taktart-Zähler Taktart-Nenner)
-  Moment-Zähler Moment-Nenner [Kontext])
+\revertBeamSettings context time-signature rule-type
 @end example
 
-@noindent
-wobei @code{Balken-Limit}, @code{Balken-Zähler}, @code{Balken-Nenner},
-@code{Taktart-Zähler}, @code{Taktart-Nenner}, @code{Moment-Zähler},
-@code{Moment-Nenner} sowie @code{Kontext} die gleichen sind
-wie oben erklärt.
-
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-a16 a a a a a a a a a a a a a a a
-% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment
-#(revert-auto-beam-setting '(end 1 16 4 4) 1 4)
-a16 a a a a a a a a a a a a a a a
-@end lilypond
-
-Die Regel in einer @code{revert-auto-beam-setting}-Definition
-muss exakt der ursprünglichen Regel entsprechen.  Dabei werden
-keine Platzhalter akzeptiert.
-
-@lilypond[quote,verbatim,relative=2]
-\time 1/4
-#(override-auto-beam-setting '(end 1 16 1 4) 1 8)
-a16 a a a
-#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it!
-a a a a
-#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will
-a a a a
+\repeat unfold 16 {a16}
+% set default rule for (1 1 1 1) grouping
+\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+\repeat unfold 16 {a16}
+% revert the new rule
+\revertBeamSettings #'Score #'(4 . 4) #'end
+\repeat unfold 16 {a16}
 @end lilypond
 
 @snippets
 
+@cindex beams, subdividing
+
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{beam-grouping-in-7-8-time.ly}
+{sub-dividing-beams.ly}
+
+@cindex measure groupings
+@cindex beats, grouping
+@cindex grouping beats
+@cindex measure sub-grouping
+
+@funindex autoBeamSettings
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{reverting-default-beam-endings.ly}
+{conducting-signs,-measure-grouping-signs.ly}
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
 {beam-endings-in-score-context.ly}
 
-@funindex \autoBeamOff
-@funindex autoBeamOff
-@funindex \autoBeamOn
-@funindex autoBeamOn
-
-@predefined
-@code{\autoBeamOff},
-@code{\autoBeamOn}.
-@endpredefined
-
 @cindex Balken, letzter in einer Partitur
 @cindex letzter Balken einer Partitur
 @cindex Balken, letzter in einer polyphonen Stimme
@@ -1999,12 +1866,12 @@ Schnipsel:
 @funindex ]
 @funindex [
 
-In einigen Fällen kann es nötig sein, den automatischen Algorithmus 
-für die Balken zu überschreiben. Die automatischen Balken werden 
+In einigen Fällen kann es nötig sein, den automatischen Algorithmus
+für die Balken zu überschreiben. Die automatischen Balken werden
 beispielsweise nicht über Pausen oder Taktlinien hinweg gesetzt, und
 in Gesang werden die Balken oft nach dem Rhythmus des Textes und
-nicht dem der Musik gesetzt. 
-Manuell definierte Balken werden mit den Zeichen @code{[} und 
+nicht dem der Musik gesetzt.
+Manuell definierte Balken werden mit den Zeichen @code{[} und
 @code{]} (AltGr+8 bzw. 9) markiert.
 
 @lilypond[quote,relative=1,verbatim]
@@ -2016,7 +1883,7 @@ Manuell definierte Balken werden mit den Zeichen @code{[} und
 @funindex \noBeam
 @funindex noBeam
 
-Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden, 
+Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden,
 damit sie nicht mit einem Balken versehen werden.
 
 @lilypond[quote,ragged-right,fragment,verbatim,relative=2]
@@ -2146,8 +2013,8 @@ Snippets:
 @funindex \bar
 @funindex bar
 
-Taktstriche trennen Takte voneinander, werden aber auch verwendet, 
-um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch 
+Taktstriche trennen Takte voneinander, werden aber auch verwendet,
+um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch
 nach Vorgabe der aktuellen Taktart eingefügt.
 
 Die einfachen, automatisch eingefügten Taktstriche können mit dem
@@ -2187,8 +2054,8 @@ kann
 @end example
 
 @noindent
-benutzt werden.  Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt 
-und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne 
+benutzt werden.  Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt
+und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne
 dass sich die Anzahl der Takte erhöhen würde.  Um einen
 Zeilenumbruch zu erzwingen, siehe
 @ref{Zeilenumbrüche}.
@@ -2257,9 +2124,9 @@ c c c c \break
 c c c c
 @end lilypond
 
-In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem 
-System automatisch auf alle anderen Systeme angewendet. Die resultierenden 
-Taktstriche sind miteinander verbunden innerhalb einer Gruppe 
+In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem
+System automatisch auf alle anderen Systeme angewendet. Die resultierenden
+Taktstriche sind miteinander verbunden innerhalb einer Gruppe
 (@code{StaffGroup}) oder einem Klaviersystem
 (@code{PianoStaff} bzw. (@code{GrandStaff}).
 
@@ -2290,8 +2157,8 @@ Taktstriche sind miteinander verbunden innerhalb einer Gruppe
 @funindex bartype
 
 Der Befehl @code{\bar }@var{Taktart} ist eine Kurzform von:
-@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn 
-@code{whichBar} auf einen Wert gesetzt wird, wird ein 
+@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn
+@code{whichBar} auf einen Wert gesetzt wird, wird ein
 Taktstrich dieses Typs erzeugt.
 
 Der automatisch erzeugte Taktstrich ist @code{"|"}.  Das kann
@@ -2414,12 +2281,12 @@ um die Zahl zu verschieben.
 @funindex barCheckSynchronize
 @funindex |
 
-Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken. 
-Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<) 
-eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks 
-auf dieses Zeichen stößt, sollte hier in den Noten auch ein 
-Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung 
-ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung 
+Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken.
+Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<)
+eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks
+auf dieses Zeichen stößt, sollte hier in den Noten auch ein
+Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung
+ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung
 in einer Fehlermeldung.
 
 @example
@@ -2435,9 +2302,9 @@ Taktüberprüfungen können auch in Gesangstexten verwendet werden:
 @}
 @end example
 
-Besonders in mehrstimmiger komplizierter Musik können 
-falschen Notenwerte die ganze Partitur durcheinander bringen. 
-Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene 
+Besonders in mehrstimmiger komplizierter Musik können
+falschen Notenwerte die ganze Partitur durcheinander bringen.
+Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene
 Taktüberprüfungen zu kontrollieren.
 
 Wenn aufeinander folgende Taktüberprüfungen mit dem gleichen
@@ -2448,10 +2315,10 @@ fokussiert.
 @funindex |
 @funindex pipeSymbol
 
-Es ist auch möglich, die Bedeutung des Symbols @code{|} 
+Es ist auch möglich, die Bedeutung des Symbols @code{|}
 umzudefinieren, so dass hiermit eine andere Aktion als eine
-Taktüberprüfung erreicht wird. 
-Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen 
+Taktüberprüfung erreicht wird.
+Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen
 Ausdruck zuweist.  Im nächsten Beispiel wird @code{|} dazu
 verwendet, eine doppelte Taktlinie auszugeben, woimmer man
 das Zeichen auchsetzt.  Gleichzeitig hört das Zeichen auf,
@@ -2470,8 +2337,8 @@ pipeSymbol = \bar "||"
 @funindex \barNumberCheck
 @funindex barNumberCheck
 
-Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn 
-LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren, 
+Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn
+LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren,
 mit der des Originales übereinstimmt. Das kann mit dem Befehl
 @code{\barNumberCheck} folgenderweise überprüft werden:
 
@@ -2480,7 +2347,7 @@ mit der des Originales übereinstimmt. Das kann mit dem Befehl
 @end verbatim
 
 @noindent
-Eine Warnung wird ausgegeben, wenn der interne Zähler 
+Eine Warnung wird ausgegeben, wenn der interne Zähler
 @code{currentBarNumber} von LilyPond
 nicht mit dem Wert 123 übereinstimmt.
 
@@ -2661,10 +2528,10 @@ c4 \grace c16 c4
 @end lilypond
 
 LilyPond hat auch Unterstützung für zwei besondere Verzierungen,
-den Vorschlag und den Vorhalt.  Der Vorschlag wird durch eine 
-verkleinerte Note mit Schrägstrich 
-und Bogen notiert.  Der Vorhalt dagegen ist eine Verzierung, die 
-einen bestimmten Notenwert der Hauptnote für sich beansprucht. 
+den Vorschlag und den Vorhalt.  Der Vorschlag wird durch eine
+verkleinerte Note mit Schrägstrich
+und Bogen notiert.  Der Vorhalt dagegen ist eine Verzierung, die
+einen bestimmten Notenwert der Hauptnote für sich beansprucht.
 Er wird als verkleinerte Note ohne Schrägstrich notiert.
 
 @lilypond[quote,relative=2,verbatim]
@@ -2674,7 +2541,7 @@ Er wird als verkleinerte Note ohne Schrägstrich notiert.
 \acciaccatura { g16[ f] } e4
 @end lilypond
 
-Die Position von Verzierungen ist zwischen Notensystemen 
+Die Position von Verzierungen ist zwischen Notensystemen
 synchronisiert.  Im nächsten Beispiel stehen im einen
 System zwei 16-Noten für jede 8-Note des zweiten Systems:
 
@@ -2738,9 +2605,9 @@ gesetzt.
 @cindex Verzierungen verändern
 @cindex Verzierungen, Aussehen verändern
 
-Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln 
-gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der 
-Hälse einzustellen.  Veränderungen am Layout müssen also innerhalb 
+Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln
+gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der
+Hälse einzustellen.  Veränderungen am Layout müssen also innerhalb
 des Verzierungsausdrucks gesetzt werden, damit sie auch eine Auswirkung haben.  Die Veränderungen müssen auch innerhalb des
 Verzierungsausdrucks rückgängig gemacht werden.  In diesem
 Fall wird die Richtung der Hälse geändert und dann wieder der
@@ -2798,19 +2665,19 @@ Referenz der Interna:
 @cindex Synchronisation von Verzierungen
 @cindex Verzierungen, Synchronisation
 
-Eine Partitur, die mit einem @code{\grace}-Ausdruck beginnt, benötigt 
-eine explizit gesetzte neue Stimme (@code{\new Voice}), sonst werden 
+Eine Partitur, die mit einem @code{\grace}-Ausdruck beginnt, benötigt
+eine explizit gesetzte neue Stimme (@code{\new Voice}), sonst werden
 Hauptnote und Verzierung auf verschiedenen Systemen gesetzt.
 
-Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und 
+Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und
 Balken wird ohne den Schrägstrich gesetzt und sieht einem
 Vorhalt (@emph{appoggiatura}) sehr ähnlich.
 
 @c TODO Add link to LSR snippet to add slash when available
 
-Die Synchronisation von Verzierungen kann auch zu Überraschungen führen. 
-Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden 
-synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen 
+Die Synchronisation von Verzierungen kann auch zu Überraschungen führen.
+Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden
+synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen
 Verzierungen vorkommen:
 
 @lilypond[quote,relative=2,verbatim]
@@ -2821,9 +2688,9 @@ Verzierungen vorkommen:
 @end lilypond
 
 @noindent
-Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben 
-Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste 
-also 
+Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben
+Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste
+also
 
 @lilypond[quote,ragged-right,relative=2,verbatim,fragment]
 <<
@@ -2834,8 +2701,8 @@ also
 
 @noindent gesetzt werden.
 
-Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen 
-Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es 
+Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen
+Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es
 zu Fehlermeldungen oder Abstürzen kommen.
 
 
@@ -2956,7 +2823,7 @@ c4 c1
 @end lilypond
 
 @noindent
-Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m} 
+Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m}
 die Dauer Zähler/Nenner einer ganzen Note.  Zum Beispiel heißt
 @code{ly:make-moment 1 8} die Dauer einer Achtelnote, und
 @code{ly:make-moment 7 16} die Dauer von sieben Sechszehntelnoten.
index c898111e469253f57ed26c051e67b46e2772d4b6..168ae4f16250ffccac203f864629c579967ee3c0 100644 (file)
@@ -1643,22 +1643,14 @@ alteraciones accidentales de las otras voces.
 @cindex letra y barrado
 
 @funindex autoBeaming
-@funindex autoBeamSettings
-@funindex (end * * * *)
-@funindex (begin * * * *)
+@funindex beamSettings
 @funindex measureLength
 @funindex beatLength
-@funindex beatGrouping
 @funindex \time
 @funindex time
 @funindex \set
 @funindex set
 
-Existen dos tipos de reglas de barrado: las reglas de @emph{agrupación
-de barras} y las de @emph{terminación de barra}.  Las reglas de
-agrupación de barras son las más sencillas, pero se sobreescriben por
-cualquier regla de terminación de barra que corresponda.
-
 La colocación de las barras automáticas se determina aplicando las
 siguientes reglas en este orden:
 
@@ -1669,207 +1661,43 @@ y como está especificado; en caso contrario:
 
 @item si está en vigor @code{\autoBeamOff} no poner barras; en caso contrario:
 
-@item si es de aplicación alguna regla de terminación de barra, usarla para
-determinar los lugares válidos en que las barras pueden terminar; en
-caso contrario:
-
-@item si es de aplicación alguna regla válida (véase más abajo) de
-agrupación de barras, usarla para agrupar las notas con las barras; en
-caso contrario:
-
 @item usar el valor de @code{beatLength} para agrupar las notas con barras
 
 @end itemize
 
 @i{@strong{Modificar las agrupaciones de pulsos}}
 
-Si no hay definida ninguna regla de final de barra para la duración de
-una barra en particular dentro del tipo de compás en uso, su barrado
-se controla mediante tres propiedades de contexto:
-@code{measureLength}, @code{beatLength} y @code{beatGrouping}.  Estas
-propiedades se deben establecer en los contextos @code{Score},
-@code{Staff} o @code{Voice} para delimitar el ámbito de su efecto.
-Los valores predeterminados se establecen al procesarse las
-instrucciones @code{\time}, por ello cualquier instrucción @code{\set}
-que modifique su valor se deberá escribir después de todas las
-instrucciones @code{\time}.
-
-@warning{Estas tres propiedades se hacen efectivas para una barra
-concreta @strong{solamente} si no está predefinida ninguna regla de
-terminación de barra para esa duración de la barra dentro del tipo de
-compás en uso, o si todas esas reglas de terminación de barras han
-sido devueltas a su valor inicial.}
-
-Dichas propiedades determinan el barrado de la siguiente forma:
-
-Las barras pueden dar comienzo en cualquier lugar (excepto si ya hay
-una barra activa).  Las barras terminan en un tiempo determinado por
-los valores de @code{beatGrouping} y @code{beatLength}, como se ve a
-continuación:
-
-@itemize
-
-@item
-Si @code{beatGrouping} y @code{beatLength} con consistentes con
-@code{measureLength}, se utiliza @code{beatGrouping} para determinar
-los puntos finales de las barras.
-
-@item
-Si @code{beatGrouping} y @code{beatLength} no concuerdan con
-@code{measureLength}, se usa @code{beatLength} para determinar los
-puntos finales de las barras.
-
-@end itemize
-
-De forma predeterminada, las propiedades the @code{measureLength} y
-@code{beatLength} se derivan del compás establecido por la instrucción
-@code{\time}.  La longitud @code{measureLength} está establecida de
-forma que sea exactamente la misma que la longitud del compás dado por
-la indicación de compás, y la longitud del pulso @code{beatLength}
-tiene un valor dado igual a una parte de compás (1/n, siendo n el
-denominador del compás).
-
-El valor predeterminado de @code{beatGrouping} se toma de una tabla
-que está en @file{scm/@/music@/-functions@/.scm}.  Para localizarla,
-véase @rlearning{Otras fuentes de información}.  Define la agrupación
-de pulsos para los compases de 3/8, 4/8, 5/8, 8/8 y todas las
-indicaciones de compás compuesto usuales.
-
 Tanto @code{measureLength} como @code{beatLength} son @i{momentos},
 unidades de duración musical.  Las cantidades del tipo @i{moment} se
 crean por la función de Scheme @code{ly:make-moment}.  Para ver más
-información sobre esta función, consulte @ref{Gestión del tiempo}.
-
-@code{beatGrouping} es una lista de enteros que dan el número de
-pulsos en cada grupo.
-
-@snippets
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{grouping-beats.ly}
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{specifying-context-with-beatgrouping.ly}
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{using-beatlength-and-beatgrouping.ly}
-
-@funindex subdivideBeams
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
-
-@cindex compases, agrupaciones de
-@cindex pulsos, agrupar
-@cindex agrupación de pulsos
-@cindex compases, subgrupos dentro de
-
-@funindex autoBeamSettings
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{conducting-signs,-measure-grouping-signs.ly}
-
-
-@strong{@i{Modificar los puntos finales de las barras}}
-
-Se requieren reglas de terminación de barra cuando barras de distintas
-duraciones han de terminar en diferentes puntos dentro del compás.
-Por ejemplo, podríamos desear que las barras de corchea en 4/4
-terminaran solamente al final del compás o en la mitad del mismo, pero
-que las barras de semicorchea terminasen en las posiciones de negra
-para evitar barras continuas demasiado largas.  Las reglas funcionan
-como sigue:
-
-Las barras automáticas pueden comenzar en cualquier nota pero
-solamente pueden terminar en unas pocas posiciones dentro del compás,
-concretamente en las posiciones definidas por las propiedades de
-@code{autoBeamSettings}.  Estas propiedades consisten en una lista de
-reglas que especifican dónde pueden terminar las barras.  Las reglas
-predeterminadas de @code{autoBeamSettings} están definidas en
-@file{scm/@/auto@/-beam@/.scm}. Para localizarlo, consulte
-@rlearning{Otras fuentes de información}.
-
-Para añadir una regla a la lista, utilice
-
-@example
-#(override-auto-beam-setting
-  '(límite-barra
-    numerador-barra  denominador-barra
-    numerador-compás denominador-compás)
-  numerador-momento denominador-momento [contexto])
-@end example
-
-@noindent
-donde:
-
-@itemize
-
-@item @code{límite-barra} es el tipo de límite de barra automática que se
-define.  Puede ser @code{begin} o @code{end}, pero sólo es efectivo
-@code{end}.
-
-@item @code{numerador-barra/denominador-barra} es la duración de la barra
-a la que se quiere aplicar la regla.  Se considera que una barra tiene
-la duración de su nota más breve.  Ajuste @code{numerador-barra} y
-@code{denominador-barra} a un asterisco @code{'*'} para que la regla
-se aplique a las barras de cualquier duración.
-
-@item @code{numerador-compás/denominador-compás} especifica la indicación de compás
-a que se aplica esta regla.  Si @code{numerador-compás} y
-@code{denominador-compás} tienen el valor de un asterisco @code{'*'},
-esta regla se aplica a cualquier tipo de compás.
+información sobre esta función, consulte @ref{Time administration}.
 
-@item @code{numerador-momento/denominador-momento} es la posición dentro del
-compás en que la barra debe terminar.
-
-@funindex score-override-auto-beam-setting
-@funindex override-auto-beam-setting
-
-@item @code{contexto} es opcional, y especifica el contexto en que se debe
-hacer el cambio.  El valor predeterminado es @code{'Voice}.
-
-@code{#(score-override-auto-beam-setting '(A B C D) E F)} es
-equivalente a @code{#(override-auto-beam-setting '(A B C D) E F
-'Score)}.
-
-@end itemize
-
-Por ejemplo, si las barras automáticas siempre deben terminar sobre la
-primera negra, para cualquier tipo de compás o duración de la barra,
-use
-
-@lilypond[quote,verbatim,relative=2]
-a8 a a a a a a a
-#(override-auto-beam-setting '(end * * * *) 1 4)
-a8 a a a a a a a
-@end lilypond
-
-Podemos forzar los ajustes de las barras para que tengan efecto sólo
-sobre las barras cuya nota más breve sea de una cierta duración:
-
-@lilypond[quote,verbatim,relative=2]
-\time 2/4
-% end 1/16 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 16 * *) 1 16)
-a16 a a a a a a a |
-a32 a a a a16 a a a a a |
-% end 1/32 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 32 * *) 1 16)
-a32 a a a a16 a a a a a |
-@end lilypond
-
-Podemos forzar los ajustes de las barras para que tengan efecto
-solamente en ciertos tipos de compás:
-
-@lilypond[quote,verbatim,relative=2]
-\time 5/8
-% end beams of all durations in 5/8 time signature at the 2/8 moment
-#(override-auto-beam-setting '(end * * 5 8) 2 8)
-c8 c d d d
-\time 4/4
-e8 e f f e e d d
-\time 5/8
-c8 c d d d
+@lilypond[quote,relative=2,verbatim]
+  \time 5/16
+  c8^"beats" c16 c8 |
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+  c8^"(2+3)" c16 c8
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+  c8^"(3+2)" c16 c8
+@end lilypond
+
+@lilypond[quote, verbatim,relative=1]
+\new Staff <<
+  \time 7/8
+  \new Voice = one {
+    \relative c'' {
+      \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+        a8 a a a a a a
+    }
+  }
+  \new Voice  = two {
+    \relative c' {
+      \voiceTwo
+      \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
+      f8 f f f f f f
+    }
+  }
+>>
 @end lilypond
 
 En caso de usar varias voces, se debe especificar el contexto
@@ -1879,89 +1707,60 @@ pentagrama:
 @lilypond[quote,verbatim,relative=2]
 \time 7/8
 % rhythm 3-1-1-2
-% Context not specified - does not work correctly
-#(override-auto-beam-setting '(end * * 7 8) 3 8)
-#(override-auto-beam-setting '(end * * 7 8) 4 8)
-#(override-auto-beam-setting '(end * * 7 8) 5 8)
+% Context Voice specified - does not work correctly
+% Because of autogenerated voices, all beating will
+% be at beatLength (1 . 8)
+\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 
-% Works correctly with context specified
-#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff)
+% Works correctly with context Staff specified
+\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 @end lilypond
 
-@warning{Si se produce un comportamiento inesperado de las barras,
-compruebe la existencia de una posible interferencia en los ajustes
-predeterminados del barrado automático que están en
-@file{scm/@/auto@/-beam@/.scm}, porque los finales de barra definidos
-aquí aún son válidos además de los suyos.}
-
-@funindex revert-auto-beam-setting
+@funindex revert-beam-setting
 
-Debemos revertir cualquier final predeterminado indeseado o
-conflictivo, para nuestro compás concreto.  Podemos eliminar una regla
-de terminación de barra previamente establecida o definida por el
-usuario, usando
+Beam settings can be reverted to get back to default behavior.  This
+is accomplished by using @code{\revertBeamSettings}.  The arguments
+are the same as for @code{\overrideBeamSettings}, except no value
+for @var{grouping} is given:
 
 @example
-#(revert-auto-beam-setting
-  '(beam-limit
-    beam-numerator  beam-denominator
-    time-signature-numerator time-signature-denominator)
-  moment-numerator moment-denominator [context])
+\revertBeamSettings context time-signature rule-type
 @end example
 
-@noindent
-@code{límite-barra}, @code{numerador-barra}, @code{denominador-barra},
-@code{numerador-compás}, @code{denominador-compás},
-@code{numerador-momento}, @code{denominador-momento} y @code{contexto}
-son los mismos que antes.
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-a16 a a a a a a a a a a a a a a a
-% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment
-#(revert-auto-beam-setting '(end 1 16 4 4) 1 4)
-a16 a a a a a a a a a a a a a a a
-@end lilypond
-
-La regla de un enunciado @code{revert-auto-beam-setting} debe
-corresponderse exactamente con la regla original.  Esto es, no se
-tiene en cuenta ninguna expansión de comodines.
-
-@lilypond[quote,verbatim,relative=2]
-\time 1/4
-#(override-auto-beam-setting '(end 1 16 1 4) 1 8)
-a16 a a a
-#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it!
-a a a a
-#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will
-a a a a
+\repeat unfold 16 {a16}
+% set default rule for (1 1 1 1) grouping
+\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+\repeat unfold 16 {a16}
+% revert the new rule
+\revertBeamSettings #'Score #'(4 . 4) #'end
+\repeat unfold 16 {a16}
 @end lilypond
 
 @snippets
 
+@cindex beams, subdividing
+
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{beam-grouping-in-7-8-time.ly}
+{sub-dividing-beams.ly}
+
+@cindex measure groupings
+@cindex beats, grouping
+@cindex grouping beats
+@cindex measure sub-grouping
+
+@funindex autoBeamSettings
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{reverting-default-beam-endings.ly}
+{conducting-signs,-measure-grouping-signs.ly}
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
 {beam-endings-in-score-context.ly}
 
-@funindex \autoBeamOff
-@funindex autoBeamOff
-@funindex \autoBeamOn
-@funindex autoBeamOn
-
-@predefined
-@code{\autoBeamOff},
-@code{\autoBeamOn}.
-@endpredefined
-
 @cindex barra, última en la partitura
 @cindex barra, última en una voz polifónica
 
index f252e073dd56425bd568e13d442ea8c3ebc7cf27..dfa8c446db89ac5305c61868f15645c7ff31304c 100644 (file)
@@ -64,17 +64,17 @@ noire, par exemple, qui équivaut à un 1/4 de ronde --- @emph{quarter note}
 en anglais --- s'écrit @code{4}, alors qu'une blanche ---
 @emph{half-note}, 1/2 ronde --- s'écrit @code{2}.  Pour des notes plus
 longues qu'une ronde, vous devrez utiliser les commandes @code{\longa}
-pour une longue, et @code{\breve} pour une brève, aussi appelée carrée.  
+pour une longue, et @code{\breve} pour une brève, aussi appelée carrée.
 Des durées plus courtes que la quintuple-croche --- 1/128 de ronde ---
 sont possibles, à condition de les ligaturer.
+
 @c Two 64th notes are needed to obtain beams
 @lilypond[quote,verbatim,relative=2]
 \time 8/1
 c\longa c\breve c1 c2
 c4 c8 c16 c32 c64 c64
 @end lilypond
+
 @noindent
 Voici ces mêmes durées sans la fonction de ligature automatique.
 
@@ -86,7 +86,7 @@ Voici ces mêmes durées sans la fonction de ligature automatique.
 c\longa c\breve c1 c2
 c4 c8 c16 c32 c64 c64
 @end lilypond
+
 Une note dont la durée est de quatre brèves s'obtient par la commande
 @code{\maxima}.  Celle-ci n'est toutefois disponible que dans le cadre de
 la notation ancienne.  Pour plus de détails, voir @ref{Notations anciennes}. 
@@ -316,7 +316,7 @@ se placer au sein de l'expression du nolet.
 Vous pouvez altérer la durée des notes, silences ou accords en leur
 joignant une fraction @var{N/M}, donnant @qq{@code{*}@var{N/M}} --- ou
 @qq{@code{*}@var{N}} si @var{M=1}.  Ceci ne modifiera en rien l'apparence
-des notes ou silences produits, mais affectera le rendu MIDI. 
+des notes ou silences produits, mais affectera le rendu MIDI.
 
 Dans l'exemple suivant, les trois premières notes prennent exactement
 deux temps, mais aucun triolet n'est imprimé.
@@ -335,7 +335,7 @@ b16*4 c4
 
 La durée d'un silence invisible ou saut de notes (@emph{skip}) peut
 elle aussi être affectée d'un multiplicateur.  Cette technique permet
-tout simplement de sauter plusieurs mesures, comme par exemple un 
+tout simplement de sauter plusieurs mesures, comme par exemple un
 @code{s1*23}.
 
 @cindex échelonnement de musique
@@ -392,11 +392,11 @@ Morceaux choisis :
 
 Une liaison de tenue (ou de prolongation) relie deux notes adjacentes de
 même hauteur.  Dans les faits, elle prolonge la durée d'une note.
+
 @warning{Une liaison de tenue ne doit pas être confondue avec une
 liaison d'@strong{articulation} ou de @strong{phrasé}.  Une liaison de
 tenue est un moyen parmi d'autres pour prolonger la durée d'une note,
-tout comme les points.} 
+tout comme les points.}
 
 Une liaison de tenue s'indique au moyen d'un tilde @code{~}.
 
@@ -468,7 +468,7 @@ une note liée, la liaison doit être répétée, comme ici :
 Les liaisons @qq{Laissez vibrer} (@notation{L.v.}) sont utilisées pour
 le piano, la harpe, et certains instruments de percussion.  Elles
 indiquent à l'instrumentiste de laisser sonner la note ou l'accord au
-lieu de l'étouffer.  Elles s'indiquent de la manière suivante : 
+lieu de l'étouffer.  Elles s'indiquent de la manière suivante :
 
 @lilypond[quote,verbatim,relative=1]
  <c f g>\laissezVibrer
@@ -648,7 +648,7 @@ une note suivie de @code{\rest}.  Un silence de même durée sera placé
 à la position où serait imprimée la note.  Cela rend plus facile la mise
 en place de musique polyphonique, puisque le formateur automatique de
 collision des silences laissera ces silences tranquilles.
+
 @lilypond[quote,verbatim,relative=2]
 a'4\rest d'4\rest
 @end lilypond
@@ -671,7 +671,7 @@ Manuel de notation :
 Morceaux choisis :
 @rlsr{Rhythms}.
 
-Référence du programme : 
+Référence du programme :
 @rinternals{Rest}.
 
 
@@ -747,7 +747,7 @@ du tout, pas même un symbole transparent.
 Morceaux choisis :
 @rlsr{Rhythms}.
 
-Référence du programme : 
+Référence du programme :
 @rinternals{SkipMusic}.
 
 
@@ -779,7 +779,7 @@ Ceci ne peut être utile que pour une mesure complètement vide.  Sa durée
 doit donc correspondre à la longueur de la mesure telle que définie par
 la métrique.  C'est la raison pour laquelle on utilisera aussi des
 points d'augmentation ou des fractions :
+
 @lilypond[quote,fragment,verbatim]
 \compressFullBarRests
 \time 2/4
@@ -848,7 +848,7 @@ R2.*2 |
 Vous pouvez aussi ajouter du texte à un silence multimesure en utilisant
 la syntaxe @var{note}-@code{markup} (cf. @ref{Mise en forme du texte}).  La
 variable @code{\fermataMarkup} quant à elle permet d'ajouter un point
-d'orgue : 
+d'orgue :
 
 @lilypond[quote,verbatim,fragment]
 \compressFullBarRests
@@ -875,7 +875,7 @@ R1^"ça marche !"
 
 Un silence multimesure placé directement après une commande
 @code{\partial} risque fort de perturber le vérificateur de limites et
-numéros de mesure. 
+numéros de mesure.
 
 
 @funindex \textLengthOn
@@ -929,7 +929,7 @@ Manuel de notation :
 Morceaux choisis :
 @rlsr{Rhythms}.
 
-Référence du programme : 
+Référence du programme :
 @rinternals{MultiMeasureRest}.
 @rinternals{MultiMeasureRestNumber},
 @rinternals{MultiMeasureRestText}.
@@ -1086,7 +1086,7 @@ Références internes :
 
 Les mesures incomplètes, telles que les anacrouses ou levées, doivent
 être entrées avec la commande @code{\partial}.  La syntaxe de cette
-commande est 
+commande est
 
 @example
 \partial @var{durée}
@@ -1216,7 +1216,7 @@ Morceaux choisis :
 
 LilyPond ne change de ligne ou de page qu'au niveau des barres de
 mesure.  Si votre musique non mesurée s'étend sur plus d'une ligne, il
-vous faudra insérer des barres de mesure invisibles, 
+vous faudra insérer des barres de mesure invisibles,
 
 @example
 \bar ""
@@ -1246,7 +1246,7 @@ pour indiquer où des sauts de ligne peuvent prendre place.
 @funindex times
 
 LilyPond gère les métriques composites, aussi bien de manière explicite
-que de manière détournée --- modification de l'indicateur de métrique 
+que de manière détournée --- modification de l'indicateur de métrique
 et échelonnement de la durée des notes.
 
 @strong{@i{Portées aux métriques différentes, mesures d'égale longueur}}
@@ -1385,13 +1385,13 @@ fausser l'espacement régulier entre les portées.
 On peut convertir automatiquement les notes longues en notes liées.  Il
 suffit pour cela de remplacer le graveur @code{Note_heads_engraver}
 par le graveur @code{Completion_heads_engraver}.  Dans l'exemple
-suivant, les notes qui dépassent de la mesure sont divisées et liées. 
+suivant, les notes qui dépassent de la mesure sont divisées et liées.
 
 @lilypond[quote,verbatim,relative=1]
 \new Voice \with {
   \remove "Note_heads_engraver"
   \consists "Completion_heads_engraver"
-} 
+}
 
 { c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 }
 @end lilypond
@@ -1404,7 +1404,7 @@ exactement la durée des décalages de mesure.
 
 
 @seealso
-Glossaire musicologique : 
+Glossaire musicologique :
 @rglos{tie}
 
 Manuel d'apprentissage :
@@ -1425,7 +1425,7 @@ Références internes :
 Bien que toutes les durées --- particulièrement celles contenant des
 nolets --- ne puissent être exactement représentées avec des notes
 normales et des points, le graveur @code{Completion_heads_engraver}
-n'insérera pas de nolet. 
+n'insèrera pas de nolet.
 
 @code{Completion_heads_engraver} affecte seulement les notes, il ne
 divise pas les silences.
@@ -1513,7 +1513,7 @@ grille d'accords :
 Snippets:
 @rlsr{Rhythms}.
 
-Référence du programme : 
+Référence du programme :
 @rinternals{RhythmicStaff}.
 @rinternals{Pitch_squash_engraver}.
 
@@ -1546,7 +1546,7 @@ d'imprimer les ligatures.
 @funindex autoBeamOff
 
 @lilypond[quote,verbatim,relative=2]
-\time 2/4 c8 c c c 
+\time 2/4 c8 c c c
 \time 6/8 c c c c8. c16 c8
 @end lilypond
 
@@ -1554,7 +1554,7 @@ Lorsque ce comportement automatisé n'est pas satisfaisant, on peut
 définir des groupements manuellement --- voir @ref{Barres de ligature manuelles}.  Dans
 le cas où le groupe de notes en question contient un silence, il est
 @strong{impératif} d'indiquer explicitement les début et fin de la
-ligature. 
+ligature.
 
 Lorsque les ligatures automatiques ne sont pas nécessaires, il suffit de
 désactiver la fonctionnalité par un @code{\autoBeamOff} --- réactivation
@@ -1572,8 +1572,8 @@ c16 c8
 @cindex ligature et mélisme
 
 @warning{Si des ligatures sont utilisées dans les paroles d'une chanson
-(pour indiquer des mélismes), les ligatures automatiques doivent être 
-désactivées, avec @code{\autoBeamOff}, et indiquées manuellement.} 
+(pour indiquer des mélismes), les ligatures automatiques doivent être
+désactivées, avec @code{\autoBeamOff}, et indiquées manuellement.}
 
 Des règles de dérogation au comportement automatique par défaut sont
 possibles ; voir @ref{Définition des règles de ligature automatique}.
@@ -1610,7 +1610,7 @@ Fichiers installés :
 Morceaux choisis :
 @rlsr{Rhythms}.
 
-Références internes : 
+Références internes :
 @rinternals{Beam}.
 
 
@@ -1635,22 +1635,19 @@ altérations appartenant à d'autres voix.
 @cindex paroles et ligatures
 
 @funindex autoBeaming
-@funindex autoBeamSettings
-@funindex (end * * * *)
-@funindex (begin * * * *)
+@funindex beamSettings
 @funindex measureLength
 @funindex beatLength
-@funindex beatGrouping
 @funindex \time
 @funindex time
 @funindex \set
 @funindex set
 
-LilyPond dispose de deux types de règles en matière de ligature : des
-règles concernant le @strong{regroupement}, et des règles concernant la
-@strong{terminaison} des ligatures.  Les règles de regroupement sont des
-plus simples mais peuvent être outrepassées par des règles de
-terminaison.  
+The placement of automatic beams is determined by the time signature.
+Three types of rules are used for determining the end of automatic
+beams: @emph{default} rules
+for the time signature, @emph{explicit} rules for the beam in the time
+signature, and the @emph{beatLength} for the time signature.
 
 Les règles déterminant le positionnement des ligatures automatiques
 s'appliquent dans l'ordre suivant de priorité :
@@ -1658,17 +1655,11 @@ s'appliquent dans l'ordre suivant de priorité :
 @itemize
 
 @item Une ligature explicite --- indiquée par @code{[@dots{}]} --- sera
-toujours respectée ; sinon 
+toujours respectée ; sinon
 
 @item si @code{\autoBeamOff} a été activé, il n'y aura pas de ligature ;
 sinon
 
-@item si une règle de terminaison peut s'appliquer, s'y référer pour 
-déterminer à quel moment une ligature peut prendre fin ; sinon
-
-@item si une règle valide de regroupement par ligature (voir ci-dessous)
-peut s'appliquer, s'y référer ; sinon
-
 @item utiliser la valeur de @code{beatLength} pour regrouper les notes
 par des ligatures.
 
@@ -1676,53 +1667,7 @@ par des ligatures.
 
 @i{@strong{Modification des ligatures selon la pulsation}}
 
-Lorsque, pour une métrique donnée, aucune règle n'a été définie quant à
-la fin ni la longueur d'une ligature particulière, cette ligature sera
-contrôlée par trois propriétés : @code{measureLength}, @code{beatLength}
-et @code{beatGrouping}.  Ces propriétés sont définies, selon la portée
-de leur action, au niveau des contextes @code{Score}, @code{Staff} ou
-@code{Voice}.  Leurs valeurs par défaut sont initialisées par la
-commande @code{\time} ; par voie de conséquence, toute commande
-@code{\set} destinée à en modifier les valeurs doit se placer après la
-commande @code{\time}.
-
-@warning{Ces trois propriétés s'appliqueront à une ligature donnée dans
-@strong{deux cas seulement} : s'il n'existe aucune règle de fin pour la
-longueur d'une ligature dans la métrique considérée, ou si toutes les
-règles de fin ont été annulées.}
-
-Ces propriétés déterminent la manière de ligaturer ainsi :
-
-Une ligature peut débuter n'importe où, à moins qu'il n'y en ait déjà
-une d'active.  Les ligatures se terminent à un moment déterminé par les
-valeurs de @code{beatGrouping} et @code{beatLength}, selon le principe
-suivant :
-
-@itemize
-
-@item Si @code{beatGrouping} et @code{beatLength} concordent avec
-@code{measureLength}, @code{beatGrouping} est utilisé pour déterminer les
-terminaisons des ligatures.
-
-@item Si @code{beatGrouping} et @code{beatLength} ne sont pas en
-concordance avec @code{measureLength}, @code{beatLength} est utilisé
-pour déterminer les terminaisons des ligatures. 
-
-@end itemize
-
-@code{measureLength} et @code{beatLength} tirent leur valeur par défaut
-à partir de la métrique telle que définie par la commande @code{\time}.
-@code{measureLength} est définie comme étant la longueur d'une mesure
-complète pour la métrique donnée. Enfin, @code{beatLength} prend la
-valeur du dénominateur de la métrique. 
-
-Les valeurs par défaut de @code{beatGrouping} sont répertoriées dans une
-table contenue dans le fichier @file{scm/@/music@/-functions@/.scm} ---
-consultez @rlearning{Autres sources de documentation} pour savoir où il se
-situe.  Cette table définit les règles de groupement pour les mesures à
-3/8, 4/8, 5/8, 8/8, ainsi que les mesures composées les plus courantes.
-
-@code{measureLength} et @code{beatLength} constituent tous deux des
+@code{beatLength} constituent tous deux des
 @strong{moments}, autrement dit des unités de durée musicale.  La
 fonction Scheme @code{ly:make-moment} est tout particulièrement chargée
 de créer cette quantité de type @i{moment} --- pour plus d'information,
@@ -1736,131 +1681,34 @@ nombre de pulsations de chaque groupe.
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
 {grouping-beats.ly}
 
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{specifying-context-with-beatgrouping.ly}
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{using-beatlength-and-beatgrouping.ly}
-
-@funindex subdivideBeams
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
-
-@cindex mesure et regroupements
-@cindex pulsation et regroupements
-@cindex groupement par pulsation
-@cindex mesure, subdivision
-
-@funindex autoBeamSettings
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{conducting-signs,-measure-grouping-signs.ly}
-
-
-@strong{@i{Modification du bornage des ligatures}}
-
-Les règles de fin de ligature sont nécessaires lorsque des ligatures 
-relatives à différentes durées doivent se terminer à différents endroits 
-au sein de la mesure.  Par exemple, il peut être souhaitable, dans une 
-mesure en 4/4, que les barres de ligature des croches s'achèvent 
-seulement à la fin d'une mesure ou au milieu de celle-ci ; mais que 
-pour des doubles-croches les ligatures se terminent toutes les noires, 
-afin d'éviter de trop longues séries ligaturées.  Ces règles fonctionnent 
-de la manière suivante :
-
-Dans les métriques courantes, les ligatures automatiques peuvent commencer
-sur n'importe quelle note, mais ne peuvent se terminer qu'à certains
-points précis dans la mesure : sur une pulsation, ou après toute durée
-spécifiée par les propriétés nommées @code{autoBeamSettings}.  Ces
-propriétés consistent en une liste de règles relatives au début ou à la
-fin des ligatures.  Par défaut, elles sont définies dans le fichier
-@file{scm/@/auto@/-beam@/.scm} --- pour le localiser, voir
-@rlearning{Autres sources de documentation}.
-
-On peut ajouter à cette liste une nouvelle règle, au moyen de la commande
-
-@example
-#(override-auto-beam-setting
-  '(extrémité
-    ligature-numérateur ligature-dénominateur
-    métrique-numérateur métrique-dénominateur)
-  moment-numérateur moment-dénominateur  [contexte])
-@end example
-
-@noindent
-où
-
-@itemize
-
-@item @code{extrémité} désigne le début (@code{begin}) ou la fin
-(@code{end}) de la ligature. Notez que seul @code{end} ne sera effectif.
-
-@item @code{ligature-numérateur/ligature-dénominateur} désigne la
-valeur rythmique de la note que l'on veut affecter, ou de la plus brève
-des notes concernées.  Si cette règle doit s'appliquer à toutes les
-ligatures, remplacez @code{ligature-numérateur} et
-@code{ligature-dénominateur} par des étoiles @qq{@code{*}}. 
-
-
-@item @code{métrique-numérateur/métrique-dénominateur} est le chiffre
-de mesure dans lequel la règle doit s'appliquer.  Si celle-ci doit
-s'appliquer dans toutes les métriques, remplacez
-@code{métrique-numérateur} et @code{métrique-dénominateur} par des
-étoiles @qq{@code{*}}. 
-
-@item @code{moment-numérateur/moment-dénominateur} est l'emplacement,
-dans la mesure, auquel les ligatures doivent s'achever. 
-
-@funindex score-override-auto-beam-setting
-@funindex override-auto-beam-setting
-
-@item @code{contexte} est un argument facultatif, qui détermine le
-contexte dans lequel la règle doit s'appliquer.  Par défaut, il s'agit
-de @code{'Voice}. 
-
-@code{#(score-override-auto-beam-setting '(A B C D) E F)} équivaut à
-@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. 
-
-@end itemize
-
-Par exemple, si l'on veut que les ligatures s'achèvent toujours après la
-première noire, quelles que soient la métrique et la durée de
-regroupement :
-
-@lilypond[quote,verbatim,relative=2]
-a8 a a a a a a a
-#(override-auto-beam-setting '(end * * * *) 1 4)
-a8 a a a a a a a
-@end lilypond
-
-On peut obliger une règle de ligature à ne s'appliquer qu'à des groupes
-dont la note la plus brève est d'une valeur précise :
-
-@lilypond[quote,verbatim,relative=2]
-\time 2/4
-% end 1/16 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 16 * *) 1 16)
-a16 a a a a a a a |
-a32 a a a a16 a a a a a |
-% end 1/32 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 32 * *) 1 16)
-a32 a a a a16 a a a a a |
+@lilypond[quote,relative=2,verbatim]
+  \time 5/16
+  c8^"beats" c16 c8 |
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+  c8^"(2+3)" c16 c8
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+  c8^"(3+2)" c16 c8
+@end lilypond
+
+@lilypond[quote, verbatim,relative=1]
+\new Staff <<
+  \time 7/8
+  \new Voice = one {
+    \relative c'' {
+      \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+        a8 a a a a a a
+    }
+  }
+  \new Voice  = two {
+    \relative c' {
+      \voiceTwo
+      \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
+      f8 f f f f f f
+    }
+  }
+>>
 @end lilypond
 
-On peut obliger une règle de ligature à ne s'appliquer que pour une
-métrique donnée :
-
-@lilypond[quote,verbatim,relative=2]
-\time 5/8
-% end beams of all durations in 5/8 time signature at the 2/8 moment
-#(override-auto-beam-setting '(end * * 5 8) 2 8)
-c8 c d d d
-\time 4/4
-e8 e f f e e d d
-\time 5/8
-c8 c d d d
-@end lilypond
 
 Lorsque plusieurs voix cohabitent sur une même portée et que les règles
 de ligature doivent s'appliquer sans distinction, il faut spécifier que
@@ -1869,89 +1717,50 @@ ces règles affectent le contexte @code{Staff} :
 @lilypond[quote,verbatim,relative=2]
 \time 7/8
 % rhythm 3-1-1-2
-% Context not specified - does not work correctly
-#(override-auto-beam-setting '(end * * 7 8) 3 8)
-#(override-auto-beam-setting '(end * * 7 8) 4 8)
-#(override-auto-beam-setting '(end * * 7 8) 5 8)
+% Context Voice specified - does not work correctly
+% Because of autogenerated voices, all beating will
+% be at beatLength (1 . 8)
+\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 
-% Works correctly with context specified
-#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff)
+% Works correctly with context Staff specified
+\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 @end lilypond
 
-@warning{Si une ligature se fait de manière inattendue, pensez à vérifer
-les règles automatiques dans le fichier @file{scm/@/auto@/-beam@/.scm}
-pour rechercher d'éventuels conflits, étant donné que les règles par
-défaut s'ajoutent à vos propres règles.}
-
-@funindex revert-auto-beam-setting
-
-Toute règle par défaut ou personnalisée conduisant à des ligatures
-indésirables doit être désactivée de la manière suivante :
-
-@example
-#(revert-auto-beam-setting
-  '(extrémité
-    ligature-numérateur ligature-dénominateur
-    métrique-numérateur métrique-dénominateur)
-  moment-numérateur moment-dénominateur  [contexte])
-@end example
-
-@noindent
-@code{extrémité}, @code{ligature-numérateur},
-@code{ligature-dénominateur}, @code{métrique-numérateur},
-@code{métrique-dénominateur}, @code{moment-numérateur},
-@code{moment-dénominateur} et @code{contexte} étant les mêmes que plus
-haut.  Il est même possible de désactiver des règles que l'on n'a pas
-explicitement créées : les règles par défaut, qui se trouvent dans le
-fichier @file{scm/@/auto@/-beam@/.scm}. 
+@funindex revertBeamSettings
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-a16 a a a a a a a a a a a a a a a
-% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment
-#(revert-auto-beam-setting '(end 1 16 4 4) 1 4)
-a16 a a a a a a a a a a a a a a a
-@end lilypond
-
-La commande @code{revert-auto-beam-setting} requiert exactement les
-mêmes arguments que la règle d'origine.  En d'autres termes, les étoiles 
-ne seront pas prises en compte ici. 
-
-@lilypond[quote,verbatim,relative=2]
-\time 1/4
-#(override-auto-beam-setting '(end 1 16 1 4) 1 8)
-a16 a a a
-#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it!
-a a a a
-#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will
-a a a a
+\repeat unfold 16 {a16}
+% set default rule for (1 1 1 1) grouping
+\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+\repeat unfold 16 {a16}
+% revert the new rule
+\revertBeamSettings #'Score #'(4 . 4) #'end
+\repeat unfold 16 {a16}
 @end lilypond
 
 @snippets
 
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{beam-grouping-in-7-8-time.ly}
+@cindex beams, subdividing
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{reverting-default-beam-endings.ly}
+{sub-dividing-beams.ly}
 
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{beam-endings-in-score-context.ly}
+@cindex measure groupings
+@cindex beats, grouping
+@cindex grouping beats
+@cindex measure sub-grouping
 
-@funindex \autoBeamOff
-@funindex autoBeamOff
-@funindex \autoBeamOn
-@funindex autoBeamOn
+@funindex autoBeamSettings
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{conducting-signs,-measure-grouping-signs.ly}
 
-@predefined
-@code{\autoBeamOff},
-@code{\autoBeamOn}.
-@endpredefined
 
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{beam-endings-in-score-context.ly}
 
 @cindex ligature en fin de partition
 @cindex ligature en fin de voix polyphonique
@@ -2009,7 +1818,7 @@ effet de l'empêcher d'être ligaturée :
 @funindex stemRightBeamCount
 
 LilyPond peut déterminer automatiquement les sous-groupes à
-l'intérieur d'un groupement de notes, bien que le résultat ne soit pas 
+l'intérieur d'un groupement de notes, bien que le résultat ne soit pas
 toujours optimal.  Les propriétés @code{stemLeftBeamCount} et
 @code{stemRightBeamCount} permettent alors d'ajuster ce comportement.
 Lorsque l'une ou l'autre de ces propriétés est définie, elle ne
@@ -2374,7 +2183,7 @@ Référence du programme :
 Les numéros de mesure peuvent entrer en collision avec les crochets d'un
 @rinternals{StaffGroup}.  La propriété @code{padding} --- décalage
 --- de l'objet @rinternals{BarNumber} permet alors d'ajuster leur
-positionnement. 
+positionnement.
 
 
 @node Vérification des limites et numéros de mesure
@@ -2517,12 +2326,12 @@ c1
 @end lilypond
 
 Le fichier @file{scm/@/translation@/-functions@/.scm} comporte les
-définitions de @code{format-mark-numbers} (comportement par défaut), 
+définitions de @code{format-mark-numbers} (comportement par défaut),
 @code{format-mark-box-numbers},
 @code{format-mark-letters} et @code{format-mark-box-letters}.  Vous
 pouvez vous en inspirer pour d'autres fonctions de formatage.
 
-@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et 
+@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et
 @code{format-mark-circle-barnumbers}  permettent d'imprimer le numéro
 de mesure au lieu des compteurs alphabétique ou numérique.
 
@@ -2550,7 +2359,7 @@ définis.  Un @code{\markup} peut néanmoins s'utiliser en argument.
 @funindex musicglyph
 
 Un @code{\mark} peut contenir un glype musical tel que le signe
-@emph{segno}.  
+@emph{segno}.
 
 @lilypond[fragment,quote,ragged-right,verbatim,relative]
 c1 \mark \markup { \musicglyph #"scripts.segno" }
@@ -2776,7 +2585,7 @@ correspondant à la durée des petites notes.
   \new Staff { c4 \bar "|:" \grace s16 d2. }
 >>
 @end lilypond
+
 Seules des expressions musicales séquentielles peuvent être utilisées
 pour des petites notes ; il n'est pas possible d'imbriquer ni de
 juxtaposer des sections de petites notes, faute de quoi le traitement du
@@ -2869,7 +2678,7 @@ ligatures automatiques.
 @item measurePosition
 Le moment où l'on en est dans la mesure en cours.  Cette quantité est
 remise à@tie{}0 dès lors qu'on dépasse @code{measureLength} ; la variable
-@code{currentBarNumber} est alors incrémentée.  
+@code{currentBarNumber} est alors incrémentée.
 
 @item timing
 Lorsqu'on lui assigne la valeur @emph{vrai}, les valeurs ci-dessus
@@ -2897,7 +2706,7 @@ c4 c1
 
 @noindent
 Comme le montre cet exemple, @code{ly:make-moment n m} construit une
-durée de n/m fois une ronde.  
+durée de n/m fois une ronde.
 Par conséquent, @code{ly:make-moment 1 8} correspond à une croche, et
 @code{ly:make-moment 7 16} à la durée de sept doubles-croches.
 
@@ -2910,7 +2719,7 @@ Dans ce manuel :
 Morceaux choisis :
 @rlsr{Rhythms}.
 
-Références internes : 
+Références internes :
 @rinternals{Timing_translator},
 @rinternals{Score}
 
index fdae1814e52503c29076acc1f3240cec9b68da03..d8a8af3ba07933189697cdf442b146159a2cccfe 100644 (file)
@@ -2233,9 +2233,6 @@ A time signature that additively combines two or more unequal meters, e.g.,
   #(set-time-signature 8 8 '(3 2 3))
   \override Staff.TimeSignature #'stencil =
     #(compound-time "3" "2" "3" "8")
-  #(override-auto-beam-setting '(end 1 8 8 8) 3 8)
-  #(override-auto-beam-setting '(end 1 8 8 8) 5 8)
-  
   c8 d e f4 d8 c bes
   c4 g'8 e c f4.
   \bar "||"
index 9422068a219c971659a417491b0a65db84a56d60..eb6771b617695d49230dbc2afd38dc082a2fa057 100644 (file)
@@ -506,10 +506,10 @@ c2 ~ c
 c2 ~ c
 @end lilypond
 
-Dash pattern definitions for ties have the same structure as 
+Dash pattern definitions for ties have the same structure as
 dash pattern definitions for slurs.
 For more information about complex dash patterns,
-see the snippets under @ref{Slurs}. 
+see the snippets under @ref{Slurs}.
 
 @predefined
 @code{\tieUp},
@@ -538,7 +538,7 @@ Music Glossary:
 @rglos{tie},
 @rglos{laissez vibrer}.
 
-Notation Reference: 
+Notation Reference:
 @ref{Slurs},
 @ref{Automatic note splitting}.
 
@@ -1543,8 +1543,8 @@ c16 c8
 automatic beaming should be switched off with @code{\autoBeamOff}
 and the beams indicated manually.}
 
-Beaming patterns that differ from the automatic defaults may be
-created, see @ref{Setting automatic beam behavior}.
+Beaming patterns that differ from the automatic defaults can be
+created; see @ref{Setting automatic beam behavior}.
 
 
 @predefined
@@ -1597,23 +1597,22 @@ Beams can collide with note heads and accidentals in other voices
 @cindex lyrics and beaming
 
 @funindex autoBeaming
-@funindex autoBeamSettings
-@funindex (end * * * *)
-@funindex (begin * * * *)
+@funindex beamSettings
 @funindex measureLength
 @funindex beatLength
-@funindex beatGrouping
 @funindex \time
 @funindex time
 @funindex \set
 @funindex set
 
-There are two types of beaming rules:  @emph{beam-grouping}
-rules and @emph{beam-ending} rules.  Beam-grouping rules are the
-simplest, but are over-ridden by any beam-ending rules which apply.
+The placement of automatic beams is determined by the time signature.
+Three types of rules are used for determining the end of automatic
+beams: @emph{default} rules
+for the time signature, @emph{explicit} rules for the beam in the time
+signature, and the @emph{beatLength} for the time signature.
 
-The placement of automatic beams is determined by applying the
-following rules in order:
+The following rules, in order of priority, apply when determining
+the appearance of beams:
 
 @itemize
 
@@ -1622,11 +1621,12 @@ as specified, otherwise
 
 @item if @code{\autoBeamOff} is in force do not beam, otherwise
 
-@item if a beam-ending rule applies use it to determine the valid
+@item if an explicit beam-ending rule is defined for the beam type
+in the time signature, use it to determine the valid
 places where beams may end, otherwise
 
-@item if a valid (see below) beat-grouping rule applies use it to
-group notes with beams, otherwise
+@item if a default beam-ending rule is defined in the time signature,
+use it to group notes with beams, otherwise
 
 @item use the value of @code{beatLength} to group notes with beams
 
@@ -1634,182 +1634,81 @@ group notes with beams, otherwise
 
 @i{@strong{Modifying the grouping of beats}}
 
-If there are no beam-ending rules defined for the beam duration of a
-particular beam in the time signature in use, its beaming is
-controlled by three context properties: @code{measureLength},
-@code{beatLength} and @code{beatGrouping}.  These properties may be
-set in the @code{Score}, @code{Staff} or @code{Voice} contexts to
-delimit their scope.  The default values are set while processing
-@code{\time} commands, so any @code{\set} commands to modify their
-value must be placed after all @code{\time} commands.
-
-@warning{These three properties become effective for a particular
-beam @strong{only} if there are no beam-ending rules predefined for
-that beam's duration in the time signature in use, or if these
-beam-ending rules have all been reverted.}
-
-These determine the beaming as follows:
-
-Beams may begin anywhere (unless a beam is already active).  Beams
-end at a time determined by the values of @code{beatGrouping} and
-@code{beatLength}, as follows:
-
-@itemize
-
-@item If @code{beatGrouping} and @code{beatLength} are consistent
-with @code{measureLength}, @code{beatGrouping} is used to determine
-the end points of beams.
-
-@item If @code{beatGrouping} and @code{beatLength} are inconsistent
-with @code{measureLength}, @code{beatLength} is used to determine
-the end points of beams.
-
-@end itemize
-
-By default the @code{measureLength} and @code{beatLength} are
+By default @code{beatLength} is
 derived from the time signature set by the @code{\time} command.
-The @code{measureLength} is set to be exactly the same length as
-the measure length given by the time signature, and the
-@code{beatLength} is set to be the same as one over the denominator
+The @code{beatLength} is set to be one over the denominator
 of the time signature.
 
-The default value of @code{beatGrouping} is taken from a table in
-@file{scm/@/music@/-functions@/.scm}.  To find this, see
-@rlearning{Other sources of information}.  It defines the beat
-grouping for 3/8, 4/8, 5/8, 8/8, and all the common compound time
-signatures.
-
-Both @code{measureLength} and @code{beatLength} are @i{moments},
-units of musical duration.  A quantity of type @i{moment} is
+@code{beatLength} is a @i{moment},
+a unit of musical duration.  A quantity of type @i{moment} is
 created by the scheme function @code{ly:make-moment}.  For more
 information about this function, see @ref{Time administration}.
 
-@code{beatGrouping} is a list of integers giving the number of
-beats in each group.
-
-@snippets
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{grouping-beats.ly}
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{specifying-context-with-beatgrouping.ly}
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{using-beatlength-and-beatgrouping.ly}
-
-@funindex subdivideBeams
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
-
-@cindex measure groupings
-@cindex beats, grouping
-@cindex grouping beats
-@cindex measure sub-grouping
-
-@funindex autoBeamSettings
-
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{conducting-signs,-measure-grouping-signs.ly}
+Autobeam and beam subdivide settings are stored in the
+@code{beamSettings} property.  Default values of @code{beamSettings}
+are determined in @file{scm/beam-settings.scm}.  Entries in
+@code{beamSettings} are indexed by time signature and
+rule type.
 
+Time signature should be a scheme pair , e.g. @code{#'(4 . 4)}.
 
-@strong{@i{Modifying the beam end points}}
+Rule type should be @code{#'end} for beam ending and @code{#'subdivide} for
+beam subdivision.
 
-Beam-ending rules are required when beams of different durations are
-to end at different points within the measure.  For example, it may
-be desirable for eighth-note beams in 4/4 time to end only at the
-end of the measure or half-way through it, but for sixteenth-note
-beams to end at quarter note positions to avoid overly long beamed
-runs.  The rules work as follows:
-
-Automatic beams can start on any note but can end at only a few
-positions within the measure, namely at positions specified by the
-properties in @code{autoBeamSettings}.  These properties consist of
-a list of rules defining where beams can end.  The default
-@code{autoBeamSettings} rules are defined in
-@file{scm/@/auto@/-beam@/.scm}.  To find this file, see
-@rlearning{Other sources of information}.
-
-In order to add a rule to the list, use
+The ending and subdivision rules consist of a scheme alist
+(or list of pairs) that
+indicates the beam type and the grouping to be applied to that
+beam type.
 
 @example
-#(override-auto-beam-setting
-  '(beam-limit
-    beam-numerator  beam-denominator
-    time-signature-numerator time-signature-denominator)
-  moment-numerator moment-denominator [context])
+#'((beam-type1 . grouping-1)
+   (beam-type2 . grouping-2)
+   (beam-type3 . grouping-3))
 @end example
 
-@noindent
-where
-
-@itemize
-
-@item @code{beam-limit} is the type of automatic beam limit
-defined.  This can be either @code{begin} or @code{end} but
-only @code{end} is effective.
-
-@item @code{beam-numerator/beam-denominator} is the beam duration
-to which the rule is to apply.  A beam is considered to have the
-duration of its shortest note.  Set @code{beam-numerator} and
-@code{beam-denominator} to @code{'*'} to have this rule apply to beams
-of any duration.
-
-@item @code{time-signature-numerator/time-signature-denominator}
-specifies the time signature to which this rule should apply.  If
-@code{time-signature-numerator} and @code{time-signature-denominator}
-are set to @code{'*'} this rule will apply in any time signature.
-
-@item @code{moment-numerator/moment-denominator} is the position
-in the bar at which the beam should end.
-
-@funindex score-override-auto-beam-setting
-@funindex override-auto-beam-setting
-
-@item @code{context} is optional, and it specifies the context at which
-the change should be made.  The default is @code{'Voice}.
+Beam type is either a scheme pair indicating the duration
+of the beam, e.g. @code{(1 . 16)}, or @code{*} to indicate a
+default rule, which applies to all beams if no explicit rule is
+defined.
 
-@code{#(score-override-auto-beam-setting '(A B C D) E F)} is equivalent to
-@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}.
+Grouping is a scheme list indicating the grouping to be applied to
+the beam.  For default rules (where beam type is
+@code{*}, the grouping is in units of @code{beatLength}.
+For explicit rules, the grouping is in units of the beam type.
 
-@end itemize
-
-For example, if automatic beams should always end on the first quarter
-note, whatever the time signature or beam duration, use
-
-@lilypond[quote,verbatim,relative=2]
-a8 a a a a a a a
-#(override-auto-beam-setting '(end * * * *) 1 4)
-a8 a a a a a a a
-@end lilypond
-
-You can force the beam settings to take effect only on beams whose shortest
-note is a certain duration
-
-@lilypond[quote,verbatim,relative=2]
-\time 2/4
-% end 1/16 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 16 * *) 1 16)
-a16 a a a a a a a |
-a32 a a a a16 a a a a a |
-% end 1/32 beams for all time signatures at the 1/16 moment
-#(override-auto-beam-setting '(end 1 32 * *) 1 16)
-a32 a a a a16 a a a a a |
-@end lilypond
-
-You can force the beam settings to take effect only in certain time
-signatures
+Beam settings are changed with
+@code{\overrideBeamSettings} and @code{\revertBeamSettings}.
 
-@lilypond[quote,verbatim,relative=2]
-\time 5/8
-% end beams of all durations in 5/8 time signature at the 2/8 moment
-#(override-auto-beam-setting '(end * * 5 8) 2 8)
-c8 c d d d
-\time 4/4
-e8 e f f e e d d
-\time 5/8
-c8 c d d d
+@lilypond[quote,relative=2,verbatim]
+  \time 5/16
+  c8^"beats" c16 c8 |
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+  c8^"(2+3)" c16 c8
+  \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+  c8^"(3+2)" c16 c8
+@end lilypond
+
+Beam setting changes can be limited to specific contexts.  If no
+setting is included in a lower-level context, the setting of the
+enclosing context will apply.
+
+@lilypond[quote, verbatim,relative=1]
+\new Staff <<
+  \time 7/8
+  \new Voice = one {
+    \relative c'' {
+      \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+        a8 a a a a a a
+    }
+  }
+  \new Voice  = two {
+    \relative c' {
+      \voiceTwo
+      \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
+      f8 f f f f f f
+    }
+  }
+>>
 @end lilypond
 
 When multiple voices are used the @code{Staff} context must be
@@ -1819,88 +1718,58 @@ staff:
 @lilypond[quote,verbatim,relative=2]
 \time 7/8
 % rhythm 3-1-1-2
-% Context not specified - does not work correctly
-#(override-auto-beam-setting '(end * * 7 8) 3 8)
-#(override-auto-beam-setting '(end * * 7 8) 4 8)
-#(override-auto-beam-setting '(end * * 7 8) 5 8)
+% Context Voice specified --  does not work correctly
+% Because of autogenerated voices, all beating will
+% be at beatLength (1 . 8)
+\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 
-% Works correctly with context specified
-#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff)
-#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff)
+% Works correctly with context Staff specified
+\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
 << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
 @end lilypond
 
-@warning{If any unexpected beam behavior occurs, check the default
-automatic beam settings in @file{scm/@/auto@/-beam@/.scm} for
-possible interference, because the beam endings defined there will
-still apply in addition to your own.}
-
-@funindex revert-auto-beam-setting
+@funindex revertBeamSettings
 
-Any unwanted or conflicting default endings must be reverted for
-your time signature(s).  Existing default or user-defined
-beam-ending rules are removed by using
+Beam settings can be reverted to get back to default behavior.  This
+is accomplished by using @code{\revertBeamSettings}.  The arguments
+are the same as for @code{\overrideBeamSettings}, except no value
+for @var{grouping} is given:
 
 @example
-#(revert-auto-beam-setting
-  '(beam-limit
-    beam-numerator  beam-denominator
-    time-signature-numerator time-signature-denominator)
-  moment-numerator moment-denominator [context])
+\revertBeamSettings context time-signature rule-type
 @end example
 
-@noindent
-@code{beam-limit}, @code{beam-numerator}, @code{beam-denominator},
-@code{time-signature-numerator}, @code{time-signature-denominator},
-@code{moment-numerator}, @code{moment-denominator} and @code{context}
-are the same as above.
 
 @lilypond[quote,verbatim,relative=2]
 \time 4/4
-a16 a a a a a a a a a a a a a a a
-% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment
-#(revert-auto-beam-setting '(end 1 16 4 4) 1 4)
-a16 a a a a a a a a a a a a a a a
-@end lilypond
-
-The rule in a @code{revert-auto-beam-setting} statement must exactly
-match the original rule.  That is, no wildcard expansion is taken into
-account.
-
-@lilypond[quote,verbatim,relative=2]
-\time 1/4
-#(override-auto-beam-setting '(end 1 16 1 4) 1 8)
-a16 a a a
-#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it!
-a a a a
-#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will
-a a a a
+\repeat unfold 16 {a16}
+% set default rule for (1 1 1 1) grouping
+\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+\repeat unfold 16 {a16}
+% revert the new rule
+\revertBeamSettings #'Score #'(4 . 4) #'end
+\repeat unfold 16 {a16}
 @end lilypond
 
 @snippets
 
+@cindex beams, subdividing
+
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{beam-grouping-in-7-8-time.ly}
+{sub-dividing-beams.ly}
+
+@cindex measure groupings
+@cindex beats, grouping
+@cindex grouping beats
+@cindex measure sub-grouping
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{reverting-default-beam-endings.ly}
+{conducting-signs,-measure-grouping-signs.ly}
 
 @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
 {beam-endings-in-score-context.ly}
 
-@funindex \autoBeamOff
-@funindex autoBeamOff
-@funindex \autoBeamOn
-@funindex autoBeamOn
-
-@predefined
-@code{\autoBeamOff},
-@code{\autoBeamOn}.
-@endpredefined
-
-
 @cindex beam, last in score
 @cindex beam, last in polyphonic voice
 
@@ -2147,8 +2016,8 @@ Additionally, a bar line can be printed as a simple tick:
 @lilypond[quote,relative=1,verbatim]
 f1 \bar "'"
 @end lilypond
-However, as such ticks are typically used in Gregorian chant, it is preferable 
-to use @code{\divisioMinima} there instead, described in the section 
+However, as such ticks are typically used in Gregorian chant, it is preferable
+to use @code{\divisioMinima} there instead, described in the section
 @ref{Divisiones} in Gregorian chant.
 
 
index 69537fa17c2adf17c00558e1135a055fbfb9f808..fa6de687da6fc8713725f7f1bfed23dcee63ae5e 100644 (file)
@@ -1,10 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
-  lsrtags = "rhythms"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
   texidoces = "
 En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma
@@ -25,6 +24,31 @@ En utilisant une macro qui modifie le comportement des ligatures
 automatiques, voici comment obtenir des ligatures basées sur la valeur 
 d'une noire.
 
+"
+  doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2"
+
+  lsrtags = "rhythms"
+
+%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
+  texidoces = "
+En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma
+predeterminada como dos grupos de cuatro.
+
+Utilizando un macro que seobreescribe el comportamiento automático del
+barrado, este fragmento de código cambia el barrado a pulsos de negra.
+
+"
+  doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2"
+
+%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a
+  texidocfr = "
+Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées
+par défaut en deux groupes de quatre.
+
+En utilisant une macro qui modifie le comportement des ligatures
+automatiques, voici comment obtenir des ligatures basées sur la valeur
+d'une noire.
+
 "
   doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2"
 
@@ -33,7 +57,7 @@ In a simple time signature of 2/2 or 4/4, 8th notes are beamed by
 default as two sets of four.
 
 Using a macro which overrides the autobeaming behavior, this snippet
-changes the beaming to quarter note beats. 
+changes the beaming to quarter note beats.
 
 "
   doctitle = "Automatic beams two per two in 4/4 or 2/2 time signature"
@@ -47,10 +71,12 @@ changes the beaming to quarter note beats.
 
 % macro for beamed two per two in 2/2 and 4/4 time signature
 qBeam = {
-  #(override-auto-beam-setting '(end 1 8 * *) 1 4 'Staff)
-  #(override-auto-beam-setting '(end 1 8 * *) 2 4 'Staff)
-  #(override-auto-beam-setting '(end 1 8 * *) 3 4 'Staff)
-}
+  \overrideBeamSettings #'Staff #'(4 . 4) #'end #'((* . (1 1 1 1)))
+  \overrideBeamSettings #'Staff #'(2 . 2) #'end
+    #'((* . (1 1))
+       ((1 . 8) . (2 2 2 2)))
+} % begin verbatim
+
 
 \score {
   <<
index 9e12eb16105af04bc758bb9b174dd2189450ff41..23593b8402c8485d4d75ceea129aa41974a193d0 100644 (file)
@@ -1,6 +1,7 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
 %% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409
@@ -38,25 +39,28 @@ sich auf alle Systeme aus, können aber auf @code{Staff}- und
   texidoc = "
 Beam-ending rules specified in the @code{Score} context apply to all
 staves, but can be modified at both @code{Staff} and @code{Voice}
-levels: 
+levels:
 
 "
   doctitle = "Beam endings in Score context"
 } % begin verbatim
 
+
 \relative c'' {
   \time 5/4
   % Set default beaming for all staves
-  #(score-override-auto-beam-setting '(end * * 5 4) 3 8)
-  #(score-override-auto-beam-setting '(end * * 5 4) 7 8)
+  \overrideBeamSettings #'Score #'(5 . 4) #'end
+     #'(((1 . 8) . (3 4 3))
+        ((1 . 16) . (6 8 6))
+        ((1 . 32) . (12 16 12)))
   <<
     \new Staff {
       c8 c c c c c c c c c
     }
     \new Staff {
       % Modify beaming for just this staff
-      #(override-auto-beam-setting '(end * * 5 4) 6 8 'Staff)
-      #(revert-auto-beam-setting '(end * * 5 4) 7 8 'Staff)
+      \overrideBeamSettings #'Staff #'(5 . 4) #'end
+        #'((* . (3 2)))
       c8 c c c c c c c c c
     }
     \new Staff {
@@ -69,8 +73,8 @@ levels:
         % Modify beaming for this voice only
         \new Voice {
           \voiceTwo
-          #(override-auto-beam-setting '(end * * 5 4) 6 8)
-          #(revert-auto-beam-setting '(end * * 5 4) 7 8)
+          \overrideBeamSettings #'Voice #'(5 . 4) #'end
+              #'((* . (3 2)))
           a8 a a a a a a a a a
         }
       >>
index 568ecacd947df502470d2fe269c9ae463b4ff033..c9c17ad7f91ee06a950e6dabdb72e7a0dcb90bbb 100644 (file)
@@ -1,6 +1,7 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
 %% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619
@@ -41,18 +42,19 @@ für 2/8 und 5/8 definiert werden:
 There are no default automatic beam groupings specified for 7/8 time,
 so if automatic beams are required the grouping must be specified.  For
 example, to group all beams 2-3-2 in 7/8 time, specify beam endings at
-2/8 and 5/8: 
+2/8 and 5/8:
 
 "
   doctitle = "Beam grouping in 7/8 time"
 } % begin verbatim
 
+
 \relative c'' {
   \time 7/8
   % rhythm 2-3-2
   a8 a a a a a a
-  #(override-auto-beam-setting '(end * * 7 8) 2 8)
-  #(override-auto-beam-setting '(end * * 7 8) 5 8)
+  \overrideBeamSettings #'Score #'(7 . 8) #'end
+     #'((* . (2 3 2)))
   a8 a a a a a a
 }
 
index 5f01babdbb3bfa92b693664aa27ef21a1e53bc3c..fa1e3626b68e470da3d51f31779c93b264e1c0db 100644 (file)
@@ -14,7 +14,6 @@ cuando el acorde cambia o al comienzo de una nueva línea.
 
   doctitlees = "Cambios de acorde de posiciones de trastes"
 
-
 %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d
 texidocde = "
 Bunddiagramme können definiert werden, sodass sie nur angezeigt werden,
index b3017d0f769ea67de200ec84365c3a8ce3c2d222..55025e2b19de3c725e98761394fb5b4636ea6a8b 100644 (file)
@@ -1,10 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
-  lsrtags = "rhythms"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
  doctitlees = "Indicaciones de compases compuestos"
  texidoces = "
@@ -42,6 +41,8 @@ métriques.  LilyPond est capable de rendre ce type de notation, plus
 "
   doctitlefr = "Métrique décomposée"
 
+  lsrtags = "rhythms"
+
   texidoc = "
 Odd 20th century time signatures (such as \"5/8\") can often be played
 as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or
@@ -49,12 +50,13 @@ more inequal metrics. LilyPond can make such music quite easy to read
 and play, by explicitly printing the compound time signatures and
 adapting the automatic beaming behavior. (Graphic measure grouping
 indications can also be added; see the appropriate snippet in this
-database.) 
+database.)
 
 "
   doctitle = "Compound time signatures"
 } % begin verbatim
 
+
 #(define ((compound-time one two num) grob)
   (grob-interpret-markup grob
     (markup #:override '(baseline-skip . 0) #:number
@@ -66,7 +68,8 @@ database.)
 \relative c' {
   \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8")
   \time 5/8
-  #(override-auto-beam-setting '(end 1 8 5 8) 1 4)
+  \overrideBeamSettings #'Staff #'(5 . 8) #'end
+        #'((* . (2 3)))
   c8 d e fis gis
   c8 fis, gis e d
   c8 d e4 gis8
index 84dbfcf76df96f59b336c649cc3fd1c454d2d80d..938a7b5909aa4fc4690e86c3083b487a25cca54f 100644 (file)
@@ -1,10 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
-  lsrtags = "rhythms"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
   texidoces = "
 Las opciones para agrupar los pulsos de un compás están a nuestra
@@ -55,30 +54,38 @@ argument à @code{set-time-signature} : @code{'(2 2 2 3)}.
 "
   doctitlefr = "Signes de direction, signes de sous-groupe"
 
+  lsrtags = "rhythms"
+
   texidoc = "
-Options to group beats within a bar are available through the Scheme
-function @code{set-time-signature}, which takes three arguments: the
+Beat grouping within a bar is controlled by the default grouping
+established in @code{beamSettings}.  This grouping can be established
+by the use of @code{\\overrideBeamSettings}.  Alternatively, the
+Scheme function @code{set-time-signature} can be used to both
+set the time signature and establish the default grouping rule.
+@code{set-time-signature}, takes three arguments: the
 number of beats, the beat length, and the internal grouping of beats in
-the measure.  If the @code{Measure_grouping_engraver} is included, the
-function will also create @code{MeasureGrouping} signs.  Such signs
-ease reading rhythmically complex modern music.  In the example, the
-9/8 measure is subdivided in 2, 2, 2 and 3.  This is passed to
-@code{set-time-signature} as the third argument: @code{'(2 2 2 3)}:
+the measure.  If the @code{Measure_grouping_engraver} is included
+in one of the display contexts, measure grouping signs will be
+created.  Such signs ease reading rhythmically complex modern music.
+In the example, the 9/8 measure is grouped in two different
+patterns using the two different methods, while the 5/8 measure
+is grouped according to the default setting in
+@file{scm/beam-settings.scm}:
 
 "
   doctitle = "Conducting signs, measure grouping signs"
 } % begin verbatim
 
+
 \score {
   \relative c'' {
-    #(set-time-signature 9 8 '(2 2 2 3))
-    #(revert-auto-beam-setting '(end * * 9 8) 3 8)
-    #(override-auto-beam-setting '(end 1 8 9 8) 1 4)
-    #(override-auto-beam-setting '(end 1 8 9 8) 2 4)
-    #(override-auto-beam-setting '(end 1 8 9 8) 3 4)
+    \time 9/8
+    \overrideBeamSettings #'Score #'(9 . 8) #'end #'((* . (2 2 2 3)))
+    g8 g d d g g a( bes g) |
+    #(set-time-signature 9 8 '(4 5))
     g8 g d d g g a( bes g) |
-    #(set-time-signature 5 8 '(3 2))
-    a4. g4
+    \time 5/8
+    a4. g4 |
   }
   \layout {
     \context {
index e7fbf0140ef5b82303a83327d8071fe28d019e41..c145be2dc980a9b060bee847c2405d603dbb7382 100644 (file)
@@ -1,10 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
-  lsrtags = "rhythms"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
   texidoces = "
 Los patrones de barrado se pueden alterar con la propiedad
@@ -30,19 +29,23 @@ La manière de gérer les ligatures est influencée par la propriété
 "
   doctitlefr = "Regroupement selon la pulsation"
 
+  lsrtags = "rhythms"
+
   texidoc = "
-Beaming patterns may be altered with the @code{beatGrouping} property: 
+Beaming patterns may be altered with the @code{beatGrouping} property:
 
 "
   doctitle = "Grouping beats"
 } % begin verbatim
 
+
 \relative c'' {
   \time 5/16
-  #(override-auto-beam-setting '(end * * 5 16) 5 16)
-  \set beatGrouping = #'(2 3)
+  \overrideBeamSettings #'Score #'(5 . 16) #'end
+     #'((* . (2 3)))
   c8^"(2+3)" c16 c8
-  \set beatGrouping = #'(3 2)
+  \overrideBeamSettings #'Score #'(5 . 16) #'end
+     #'((* . (3 2)))
   c8^"(3+2)" c16 c8
 }
 
index 1e23f6583cf591c81509347bc7d1691c65115892..e954510325e439fe26c0774225131cd010769080 100644 (file)
@@ -2,7 +2,7 @@
 % generated from Documentation/snippets/new
 % This file is in the public domain.
 %% Note: this file works from version 2.13.1
-\version "2.13.1"
+\version "2.13.4"
 
 \header {
 %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79
@@ -33,7 +33,6 @@ de 1 para una ligadura continua.
   doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad"
 
 
-
 %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d
   texidocde = "
 Legatobögen können mit einem komplizierten Strichelmuster
index 46509bf4c975be42d35e303daee71da1c221ffb6..61126b6e08865d4d7d9ff93ecf6ab80eeb8b44c2 100644 (file)
@@ -2,7 +2,7 @@
 % generated from Documentation/snippets/new
 % This file is in the public domain.
 %% Note: this file works from version 2.13.1
-\version "2.13.1"
+\version "2.13.4"
 
 \header {
 %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79
@@ -16,7 +16,6 @@ agrupación.
 
   doctitlees = "Números de agrupación especial distintos a los predeterminados"
 
-
 %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d
 texidocde = "
 LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen
index d32dedd92262e41a9ea79b363d70afd48c3254c6..b213f1c115dbf8e68fc67d2a066b4caff7132476 100644 (file)
@@ -2,7 +2,7 @@
 % generated from Documentation/snippets/new
 % This file is in the public domain.
 %% Note: this file works from version 2.13.0
-\version "2.13.1"
+\version "2.13.4"
 
 \header {
 %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79
@@ -33,7 +33,6 @@ He aquí un ejemplo de una posible armadura para generar una escala
 exátona:
 "
 
-
 %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d
   doctitlede = "Untypische Tonarten"
   texidocde = "
index bab4aa31254c32fc770714b4b3c25101b6aa2f41..4469b64ba570c9305e33e4c1edaca075e80a8b9c 100644 (file)
@@ -1,19 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
-%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619
-  texidocfr = "
-Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans
-une mesure à 12/8, il faudra préalablement annuler les réglages par
-défaut relatifs à 12/8, puis ajouter nos propres règles :
-
-"
-  doctitlefr = "Annulation des règles de ligature par défaut"
-
-  lsrtags = "rhythms"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
   texidoces = "
 Para tipografiar las barras agrupadas en la forma @code{3-4-3-2}
@@ -35,32 +25,37 @@ Werte setzen:
   doctitlede = "Standard-Balkenwerte rückgängig machen"
 
 
+%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619
+  texidocfr = "
+Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans
+une mesure à 12/8, il faudra préalablement annuler les réglages par
+défaut relatifs à 12/8, puis ajouter nos propres règles :
+
+"
+  doctitlefr = "Annulation des règles de ligature par défaut"
 
+  lsrtags = "rhythms"
   texidoc = "
-To typeset beams grouped @code{3-4-3-2} in 12/8 it is necessary first
+To typeset beams grouped @code{3-4-3-2} in 12/8 it is no longer
+necessary first
 to override the default beam endings  in 12/8, and then to set up the
-new beaming endings: 
+new beaming endings:
 
 "
   doctitle = "Reverting default beam endings"
 } % begin verbatim
 
+
 \relative c'' {
   \time 12/8
 
   % Default beaming
   a8 a a a a a a a a a a a
 
-  % Revert default values in scm/auto-beam.scm for 12/8 time
-  #(revert-auto-beam-setting '(end * * 12 8) 3 8)
-  #(revert-auto-beam-setting '(end * * 12 8) 3 4)
-  #(revert-auto-beam-setting '(end * * 12 8) 9 8)
-  a8 a a a a a a a a a a a
-
   % Set new values for beam endings
-  #(override-auto-beam-setting '(end * * 12 8) 3 8)
-  #(override-auto-beam-setting '(end * * 12 8) 7 8)
-  #(override-auto-beam-setting '(end * * 12 8) 10 8)
+  \overrideBeamSettings #'Score #'(12 . 8) #'end
+    #'((* . (3 4 3 2)))
   a8 a a a a a a a a a a a
+
 }
 
index 12c8858e8f123766f7f095ac9993c4e1e67b3002..2a6315c717e1626dc16229e0f31a3f22bf17ce27 100644 (file)
@@ -1,10 +1,9 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.1
+\version "2.13.4"
 
 \header {
-  lsrtags = "rhythms, tweaks-and-overrides"
-
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
   texidoces = "
 Mediante la especificación del contexto, el efecto de
@@ -36,6 +35,40 @@ d'outrepasser les règles définies à un niveau supérieur.  La commande
 @code{\\set} destinée à en modifier les valeurs doit se placer après la 
 commande @code{\\time} :
 
+"
+  doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping"
+
+  lsrtags = "rhythms, tweaks-and-overrides"
+
+%% Translation of GIT committish: 5c26e815f2ed54e6c4d022bac10dcc87a9916a29
+  texidoces = "
+Mediante la especificación del contexto, el efecto de
+@code{beatGrouping} puede limitarse al contexto especificado, y
+sobreescribirse los valores establecidos en contextos de niveles más
+altos:
+
+"
+  doctitlees = "Especificar el contexto con beatGrouping"
+
+%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706
+  texidocde = "
+Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping}
+auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten
+auf höhrer Ebene angegeben wurden, können verändert werden.  Der
+@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben
+werden:
+"
+  doctitlede = "Den Kontext für beatGrouping angeben"
+
+
+%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079
+  texidocfr = "
+Le fait de spécifier un contexte à @code{beatGrouping} permet d'en
+limiter les effets.  Par voie de conséquence, il sera possible
+d'outrepasser les règles définies à un niveau supérieur.  La commande
+@code{\set} destinée à en modifier les valeurs doit se placer après la
+commande @code{\time} :
+
 "
   doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping"
 
@@ -49,21 +82,5 @@ commands must be placed after all @code{\\time} commands:
   doctitle = "Specifying context with beatGrouping"
 } % begin verbatim
 
-\score {
-  \new Staff <<
-    \time 7/8
-    \new Voice {
-      \relative c'' {
-        \set Staff.beatGrouping = #'(2 3 2)
-        a8 a a a a a a
-      }
-    }
-    \new Voice {
-      \relative c' {
-        \voiceTwo
-        \set beatGrouping = #'(1 3 3)
-        f8 f f f f f f
-      }
-    }
-  >>
-}
+
+\markup{This snippet has been deprecated and will be removed in 2.14}
index d2d4b3d5e7ee106aa8856fa46fbac59608fdb826..7decd06cde7eef2025d7fa58f6fbc737eeb3e884 100644 (file)
@@ -1,8 +1,46 @@
-%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.13.1"
+%% Note: this file works from version 2.13.4
+\version "2.13.4"
 
 \header {
+%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
+  texidoces = "
+La propiedad @code{measureLength} determina dónde se deben insertar
+líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo
+se deben generar las barras autoomáticas para las duraciones de barra
+y compases para los que no hay ninguna regla definida para los finales
+de barra. Este ejemplo muestra distintas dormas de controlar el
+barrado mediante el establecimiento de estas propiedades. Las
+explicaciones están en forma de comentarios dentro del código.
+
+"
+  doctitlees = "Utilización de beatLength y beatGrouping"
+
+%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d
+  texidocde = "
+Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt
+werden sollen und, zusammen mit @code{beatLength} und
+@code{beatGrouping}, wie automtische Balken für Notenlängen und
+Taktarten, für die keine definierten Regeln gefunden werden, gesetzt
+werden sollen.  Dieses Beispiel zeigt verschiedene Möglichkeiten,
+die Balken zu kontrollieren, indem man diese Eigenschaften
+beeinflusst.  Die Erklärungen werden als Kommentare im Quellcode
+gegeben.
+"
+  doctitlede = "beatLength und beatGrouping benutzen"
+
+%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079
+  texidocfr = "
+La propriété @code{measureLength} détermine la pulsation et, combinée à
+@code{beatLength} et @code{beatGrouping}, comment générer les ligatures
+automatiques selon les durées et la métrique lorsqu'aucune règle n'a été
+définie.  L'exemple commenté qui suit indique différentes façons de
+contrôler les ligatures à l'aide de ces propriétés. 
+
+"
+  doctitlefr = "Utilisation conjointe de beatLength et beatGrouping"
+
   lsrtags = "rhythms, tweaks-and-overrides"
 
 %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca
@@ -37,7 +75,7 @@ La propriété @code{measureLength} détermine la pulsation et, combinée à
 @code{beatLength} et @code{beatGrouping}, comment générer les ligatures
 automatiques selon les durées et la métrique lorsqu'aucune règle n'a été
 définie.  L'exemple commenté qui suit indique différentes façons de
-contrôler les ligatures à l'aide de ces propriétés. 
+contrôler les ligatures à l'aide de ces propriétés.
 
 "
   doctitlefr = "Utilisation conjointe de beatLength et beatGrouping"
@@ -47,44 +85,11 @@ The property @code{measureLength} determines where bar lines should be
 inserted and, with @code{beatLength} and @code{beatGrouping}, how
 automatic beams should be generated for beam durations and time
 signatures for which no beam-ending rules are defined.  This example
-shows several ways of controlling beaming by setting these properties. 
+shows several ways of controlling beaming by setting these properties.
 The explanations are shown as comments in the code.
 
 "
   doctitle = "Using beatLength and beatGrouping"
 } % begin verbatim
 
-\relative c'' {
-  \time 3/4
-  % The default in 3/4 time is to beam in three groups
-  % each of a quarter note length
-  a16 a a a a a a a a a a a
-
-  \time 12/16
-  % No auto-beaming is defined for 12/16
-  a16 a a a a a a a a a a a
-
-  \time 3/4
-  % Change time signature symbol, but retain underlying 3/4 beaming
-  \set Score.timeSignatureFraction = #'(12 . 16)
-  a16 a a a a a a a a a a a
-
-  % The 3/4 time default grouping of (1 1 1) and beatLength of 1/8
-  % are not consistent with a measureLength of 3/4, so the beams
-  % are grouped at beatLength intervals
-  \set Score.beatLength = #(ly:make-moment 1 8)
-  a16 a a a a a a a a a a a
-
-  % Specify beams in groups of (3 3 2 3) 1/16th notes
-  % 3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply,
-  % and beams are grouped at beatLength (1/16) intervals
-  \set Score.beatLength = #(ly:make-moment 1 16)
-  \set Score.beatGrouping = #'(3 3 2 3)
-  a16 a a a a a a a a a a a
-
-  % Specify beams in groups of (3 4 2 3) 1/16th notes
-  % 3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies
-  \set Score.beatLength = #(ly:make-moment 1 16)
-  \set Score.beatGrouping = #'(3 4 2 3)
-  a16 a a a a a a a a a a a
-}
+\markup{This snippet has been deprecated and will be removed in 2.14}
index dc97841f207bfdbb38644d0e0718c7914e78caee..f2d13ee0af77fbe2921a705d8217c3f740ed8cc9 100644 (file)
@@ -107,8 +107,9 @@ bass = \relative c {
   e,1 | % m. 4
   
   %% new section starts here in A minor
-  #(revert-auto-beam-setting '(end 1 12 4 4) 1 4)
-  #(revert-auto-beam-setting '(end 1 12 4 4) 3 4)
+  \overrideBeamSettings #'Score #'(4 . 4) #'end 
+    #'((* . (1 1 1 1))
+       ((1 . 12)  . (3 3 3 3)))
   \once \override TextScript #'staff-padding = #1.7
   \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
   
index 8edd91fedf7c2da29b6f1dd6d1145c1567aa2119..92a8f7351d83e1fa5ec5f80d969550cf1d83cff4 100644 (file)
@@ -275,7 +275,7 @@ stemme%s =  {
 sys.stdout.write (r"""
 <<
   \override Score.BarNumber  #'padding = #2.5
-  #(override-auto-beam-setting '(end * * * *) 1 4)
+  %#(override-auto-beam-setting '(end * * * *) 1 4)
   \set Score.skipBars = ##t
   \context StaffGroup <<
     \override StaffGroup.Stem #'direction = #UP
diff --git a/input/regression/auto-beam-beat-grouping.ly b/input/regression/auto-beam-beat-grouping.ly
deleted file mode 100644 (file)
index 1a9761d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-\version "2.12.0"
-\header {
-
-  texidoc = "Autobeaming will break beams according to beatGrouping
-if the total length of the beat groups is equal to measureLength.
-Otherwise, it will break beams according to beatLength."
-}
-
-{
-  \time 12/16
-
-  % default beatLength is 1/16; beatGrouping for this time is '()
-  b16 b b b b b b b b b b b % beatlength is used to breatk these beams
-  % use beatGrouping to get 1/8 groups
-  \set Timing.beatGrouping = #'(2 2 2 2 2 2) % 6*2 = 12 so beatGrouping applies
-  b16 b b b b b b b b b b b  %  beam groups are 1/8
-  % use beatLength to get 1/8 groups -- beatGrouping no longer applies
-  \set Score.beatLength = #(ly:make-moment 2 16 )  % 12*2/16 = 24/16
-                                                   % bad beatGrouping; use
-                                                   % beatLength (1/8 notes)
-  b16 b b b b b b b b b b b
-  % make custom beatGrouping
-  \set Timing.beatGrouping = #'(3 1 2)  % 6*2/16 = 12/16
-  b16 b b b b b b b b b b b
-  % change beatLength
-  \set Score.beatLength = #(ly:make-moment 3 16 )  % 6*3/16 = 18/16; use beatLength
-  b16 b b b b b b b b b b b
-  \set Score.beatLength = #(ly:make-moment 4 16 )  % 6*4/16 = 24/16; use beatLength
-  b16 b b b b b b b b b b b
-}
index e3af9219b52c7c851e42343dfdf0f43b2f86f18f..2be98d88bdf9fe0f89acb426031d3f23d33d606c 100644 (file)
@@ -1,18 +1,19 @@
 \header {
 
-  texidoc = "Beaming patterns obey the @code{beatGrouping} property. "
+  texidoc = "Default beaming patterns can be set for the current time
+signature by @code{\\setBeatGrouping}. "
   }
 
 \layout {
   ragged-right = ##t
   }
-\version "2.12.0"
+\version "2.13.4"
 
 
 \relative c'' {
   \time 5/16
-  \set beatGrouping = #'(2 3)
+  \setBeatGrouping  #'(2 3)
   c8[^"(2+3)" c16 c8]
-  \set beatGrouping = #'(3 2)
+  \setBeatGrouping  #'(3 2)
   c8[^"(3+2)" c16 c8]
 }
index 4c813a7038264d3fb0a30b14fbe29e1439a83aed..c44e59ccde8f4affab2148bb0020b60a69464ed3 100644 (file)
@@ -434,7 +434,7 @@ ADD_TRANSLATOR (Auto_beam_engraver,
 
                /* read */
                "autoBeaming "
-               "autoBeamSettings "
+               "beamSettings "
                "beatLength "
                "subdivideBeams ",
                
diff --git a/lily/beam-setting-scheme.cc b/lily/beam-setting-scheme.cc
new file mode 100644 (file)
index 0000000..9ac7020
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+  beam-setting-scheme.cc -- Retrieving beam settings
+
+  source file of the GNU LilyPond music typesetter
+
+  Copyright (c) 2009 Carl Sorensen <c_sorensen@byu.edu>
+*/
+
+#include "beam-settings.hh"
+#include "context.hh"
+#include "guile-compatibility.hh"
+
+LY_DEFINE (ly_grouping_rules, "ly:grouping-rules",
+          3, 0, 0, (SCM settings, SCM time_signature, SCM rule_type),
+          "Return grouping rules for @var{time-signature} and"
+           " @var{rule-type} from @var{settings}.")
+{
+  LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
+  LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
+  LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
+
+  SCM grouping_rules = SCM_EOL;
+  if (scm_is_pair (settings))
+    grouping_rules =
+        ly_assoc_get (scm_list_2 (time_signature, rule_type),
+                      settings,
+                      SCM_EOL);
+  return grouping_rules;
+}
+
+LY_DEFINE (ly_beam_grouping, "ly:beam-grouping",
+          4, 0, 0, (SCM settings, SCM time_signature, SCM rule_type,
+                     SCM beam_type),
+          "Return grouping for beams of @var{beam-type} in"
+           " @var{time-signature} for"
+           " @var{rule-type} from @var{settings}.")
+{
+  LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
+  LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
+  LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
+  SCM_ASSERT_TYPE (scm_is_symbol(beam_type) || scm_is_pair(beam_type),
+                   beam_type, SCM_ARG4, __FUNCTION__, "symbol or pair");
+  SCM beam_grouping =
+        ly_assoc_get (beam_type,
+                      ly_grouping_rules (settings,time_signature,rule_type),
+                      SCM_EOL);
+  return beam_grouping;
+}
+
+LY_DEFINE (ly_beat_grouping, "ly:beat-grouping",
+          1, 0, 0, (SCM context),
+          "Return default beat grouping currently active in @var{context}.")
+{
+  LY_ASSERT_SMOB (Context, context, 1);
+  Context *c = unsmob_context (context);
+  SCM time_signature =
+        c->get_property ("timeSignatureFraction");
+  SCM settings =
+        c->get_property("beamSettings");
+  SCM beat_grouping =
+        ly_beam_grouping (settings,
+                          time_signature,
+                          ly_symbol2scm ("end"),
+                          ly_symbol2scm ("*"));
+  return beat_grouping;
+}
+
index 251e65bb99461063cbb0ebb74604454d6635d703..5e6d29ca6816049d0005587be178c919294a43c3 100644 (file)
@@ -13,8 +13,9 @@
   (c) 1999--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
-#include "beaming-pattern.hh"
 #include "context.hh"
+#include "beam-settings.hh"
+#include "beaming-pattern.hh"
 
 /*
   Represents a stem belonging to a beam. Sometimes (for example, if the stem
@@ -52,7 +53,7 @@ Beam_rhythmic_element::de_grace ()
 {
   if (start_moment_.grace_part_)
     {
-      start_moment_.main_part_ = start_moment_.grace_part_; 
+      start_moment_.main_part_ = start_moment_.grace_part_;
       start_moment_.grace_part_ = 0;
     }
 }
@@ -150,7 +151,7 @@ Beaming_pattern::beamify (Beaming_options const &options)
 void
 Beaming_pattern::find_rhythmic_importance (Beaming_options const &options)
 {
-  Moment measure_pos (0);  
+  Moment measure_pos (0);
   SCM grouping = options.grouping_;
   vsize i = 0;
 
@@ -243,7 +244,7 @@ Beaming_pattern::beamlet_count (int i, Direction d) const
 void
 Beaming_options::from_context (Context *context)
 {
-  grouping_ = context->get_property ("beatGrouping");
+  grouping_ = ly_beat_grouping (context->self_scm ());
   subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams"));
   beat_length_ = robust_scm2moment (context->get_property ("beatLength"), Moment (1, 4));
   measure_length_ = robust_scm2moment (context->get_property ("measureLength"), Moment (4, 4));
diff --git a/lily/include/beam-settings.hh b/lily/include/beam-settings.hh
new file mode 100644 (file)
index 0000000..d660063
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+  beam-settings.hh -- Prototypes for retrieving beam settings
+
+  source file of the GNU LilyPond music typesetter
+
+  Copyright (c) 2009 Carl Sorensen <c_sorensen@byu.edu>
+*/
+
+#ifndef BEAM_SETTINGS_HH
+#define BEAM_SETTINGS_HH
+
+#include "lily-guile.hh"
+
+SCM ly_grouping_rules (SCM settings, SCM time_sig, SCM rule_type);
+SCM ly_beam_grouping (SCM settings, SCM time_sig, SCM rule_type,
+                      SCM beam_type);
+SCM ly_beat_grouping (SCM context);
+#endif // BEAM_SETTINGS_HH
index 03192a1defd611e1895b2e53cbe614a0437540bc..d77cf8d499e6384661c88571a25734839c54e472 100644 (file)
@@ -11,6 +11,7 @@
 #include "global-context.hh"
 #include "engraver.hh"
 #include "spanner.hh"
+#include "beam-settings.hh"
 
 #include "translator.icc"
 
@@ -61,7 +62,16 @@ Measure_grouping_engraver::process_music ()
   if (now.grace_part_)
     return;
 
-  SCM grouping = get_property ("beatGrouping");
+  SCM settings = get_property ("beamSettings");
+  SCM grouping = SCM_EOL;
+  if (scm_is_pair (settings))
+    {
+      SCM time_signature_fraction = get_property ("timeSignatureFraction");
+      grouping = ly_beam_grouping (settings,
+                                   time_signature_fraction,
+                                   ly_symbol2scm ("end"),
+                                   ly_symbol2scm ("*"));
+    }
   if (scm_is_pair (grouping))
     {
       Moment *measpos = unsmob_moment (get_property ("measurePosition"));
@@ -83,19 +93,21 @@ Measure_grouping_engraver::process_music ()
                  programming_error ("last grouping not finished yet");
                  continue;
                }
+              if (grouplen > 1)
+               {
+                grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
+                grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
 
-             grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
-             grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
-
-             stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length;
-             get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_));
+                stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length;
+                get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_));
 
-             if (grouplen == 3)
-               grouping_->set_property ("style", ly_symbol2scm ("triangle"));
-             else
-               grouping_->set_property ("style", ly_symbol2scm ("bracket"));
+                if (grouplen == 3)
+                  grouping_->set_property ("style", ly_symbol2scm ("triangle"));
+                else
+                  grouping_->set_property ("style", ly_symbol2scm ("bracket"));
 
-             break;
+                break;
+               }
            }
        }
     }
@@ -118,7 +130,7 @@ ADD_TRANSLATOR (Measure_grouping_engraver,
                "beatLength "
                "currentMusicalColumn "
                "measurePosition "
-               "beatGrouping ",
+               "beamSettings ",
 
                /* write */
                ""
index eabe1c7f88b649c4d8c6a35858441210e4e8a766..cfe1ec14506acdecc228ee75750ac3497a9382e5 100644 (file)
@@ -69,20 +69,16 @@ showKeySignature = {
 % Sets the autobeamer to span quarter notes only. Use for fast music.
 % TODO: Needs more tweaking
 quarterBeaming = {
-  #(override-auto-beam-setting '(end * * * *) 1 4 'Staff)
-  #(override-auto-beam-setting '(end * * * *) 1 2 'Staff)
-  #(override-auto-beam-setting '(end * * * *) 3 4 'Staff)
-  #(override-auto-beam-setting '(end * * * *) 4 4 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 2 4 ) 1 8 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 2 4 ) 3 8 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 4 4 ) 1 8 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 4 4 ) 3 8 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 4 4 ) 5 8 'Staff)
-  #(revert-auto-beam-setting '(end 1 32 4 4 ) 7 8 'Staff)
+  \overrideBeamSettings #'Staff #'(4 . 4) #'end
+    #'((* . (1 1 1 1)) ; could omit this and use beatLength
+       ((1 . 32) . (4 4 4 4 4 4 4 4)))
+  \overrideBeamSettings #'Staff #'(2 . 4) #'end
+    #'((* . (1 1))
+       ((1 . 32) . (4 4 4 4)))
 }
 halfBeaming = {
-  #(override-auto-beam-setting '(end * * 2 2) 1 2 'Staff)
-  #(override-auto-beam-setting '(end * * 2 2) 2 2 'Staff)
+  \overrideBeamSettings #'Staff #'(2 . 2) #'end
+    #'((* . (1 1))) % could omit this and use beatLength
 }
 % Reels are in allabreve time with half note beaming.
 reelTime = {
index d08b6f10edec742a397d6ffd020bab6eaf37f09e..9d19e92cdb5922243959925b399d9c7c4f88bc8d 100644 (file)
@@ -18,8 +18,8 @@
   \description "A context for displaying fret diagrams."
 
   \consists "Fretboard_engraver"
-  \consists "Rest_swallow_translator" 
-  \consists "Output_property_engraver" 
+  \consists "Rest_swallow_translator"
+  \consists "Output_property_engraver"
   \consists "Skip_event_swallow_translator"
   \consists "Hara_kiri_engraver"
   \consists "Separating_line_group_engraver"
 \context {
   \type "Engraver_group"
   \name "Staff"
-  
-  \consists "Output_property_engraver" 
+
+  \consists "Output_property_engraver"
   \consists "Bar_engraver"
   %% Bar_engraver must be first so default bars aren't overwritten
   %% with empty ones.
-  
+
   \consists "Font_size_engraver"
-  \consists "Separating_line_group_engraver"   
+  \consists "Separating_line_group_engraver"
   \consists "Dot_column_engraver"
   \consists "Staff_collecting_engraver"
 
@@ -48,7 +48,7 @@
   \consists "Clef_engraver"
   \consists "Key_engraver"
   \consists "Time_signature_engraver"
-  \consists "Ledger_line_engraver" 
+  \consists "Ledger_line_engraver"
   \consists "Staff_symbol_engraver"
   \consists "Collision_engraver"
   \consists "Grob_pq_engraver"
   createSpacing = ##t
   ignoreFiguredBassRest = ##t
   \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4)
-  
-  %% explicitly set instrument, so we don't get 
+
+  %% explicitly set instrument, so we don't get
   %% weird effects when doing instrument names for
   %% piano staves
 
   instrumentName = #'()
   shortInstrumentName = #'()
-  
+
   \defaultchild "Voice"
   \accepts "Voice"
   \accepts "CueVoice"
-  
+
   \description "Handles clefs, bar lines, keys, accidentals.  It can contain
 @code{Voice} contexts."
 
   \type "Engraver_group"
   \name "DrumStaff"
   \alias "Staff"
-  
+
   \remove "Accidental_engraver"
   \remove "Ottava_spanner_engraver"
-  \remove "Key_engraver" 
+  \remove "Key_engraver"
   \remove "Piano_pedal_engraver"
   \remove "String_number_engraver"
-  
+
   \description "Handles typesetting for percussion."
 
   \denies "Voice"
 
   clefGlyph = #"clefs.percussion"
   clefPosition = #0
-  \override Script #'staff-padding = #0.75 
+  \override Script #'staff-padding = #0.75
 }
 
 
@@ -135,7 +135,7 @@ contained staves are not connected vertically."
 
 \context{
   \type "Engraver_group"
-  
+
   \override VerticalAxisGroup #'minimum-Y-extent = ##f
   localKeySignature = #'()
   createSpacing = ##t
@@ -143,17 +143,17 @@ contained staves are not connected vertically."
   squashedPosition = #0
   \name RhythmicStaff
   \alias "Staff"
-  
+
   \override BarLine #'bar-size = #4
   \override VoltaBracket #'staff-padding = #3
-  \override StaffSymbol #'line-count = #1      
+  \override StaffSymbol #'line-count = #1
 
   \override Stem  #'neutral-direction = #UP
   \override Beam  #'neutral-direction = #UP
-  
+
   \consists "Output_property_engraver"
   \consists "Font_size_engraver"
-  \consists "Separating_line_group_engraver"   
+  \consists "Separating_line_group_engraver"
   \consists "Dot_column_engraver"
   \consists "Bar_engraver"
   \consists "Staff_symbol_engraver"
@@ -161,8 +161,8 @@ contained staves are not connected vertically."
   \consists "Time_signature_engraver"
   \consists "Instrument_name_engraver"
   \consists "Axis_group_engraver"
-  \consists "Ledger_line_engraver" 
-  
+  \consists "Ledger_line_engraver"
+
   \accepts "Voice"
   \accepts "CueVoice"
   \defaultchild "Voice"
@@ -187,7 +187,7 @@ multiple voices on the same staff."
   \consists "Font_size_engraver"
 
   \consists "Pitched_trill_engraver"
-  \consists "Output_property_engraver" 
+  \consists "Output_property_engraver"
   \consists "Arpeggio_engraver"
   \consists "Multi_measure_rest_engraver"
   \consists "Text_spanner_engraver"
@@ -204,7 +204,7 @@ multiple voices on the same staff."
   \consists "Dots_engraver"
   \consists "Rest_engraver"
   \consists "Tweak_engraver"
-  
+
   %% switch on to make stem directions interpolate for the
   %% center line.
   %  \consists "Melody_engraver"
@@ -216,7 +216,7 @@ multiple voices on the same staff."
 
   %% must come before Script_column_engraver.
   \consists "New_fingering_engraver"
-  
+
   \consists "Chord_tremolo_engraver"
   \consists "Percent_repeat_engraver"
   \consists "Slash_repeat_engraver"
@@ -246,7 +246,7 @@ multiple voices on the same staff."
 
 \context{
   \Voice
-  
+
   \name CueVoice
   \alias Voice
   fontSize = #-4
@@ -282,7 +282,7 @@ multiple voices on the same staff."
   \type "Engraver_group"
   \name GrandStaff
   localKeySignature = #'()
-  
+
   \description "A group of staves, with a brace on the left
 side, grouping the staves together.  The bar lines of the
 contained staves are connected vertically."
@@ -325,7 +325,7 @@ instrument names at the start of each system."
 
   \consists "Span_bar_engraver"
   \consists "Span_arpeggio_engraver"
-  \consists "Output_property_engraver" 
+  \consists "Output_property_engraver"
   systemStartDelimiter = #'SystemStartBracket
 
   \consists "System_start_delimiter_engraver"
@@ -336,13 +336,13 @@ instrument names at the start of each system."
   \accepts "DrumStaff"
   \accepts "GrandStaff"
   \accepts "PianoStaff"
-  \accepts "TabStaff"  
+  \accepts "TabStaff"
   \accepts "Lyrics"
   \accepts "ChordNames"
   \accepts "FiguredBass"
   \accepts "ChoirStaff"
   \accepts "StaffGroup"
-  
+
   \description "Groups staves while adding a bracket on the left
 side, grouping the staves together.  The bar lines of the contained
 staves are connected vertically.  @code{StaffGroup} only consists of
@@ -379,11 +379,11 @@ centered between the staves surrounding this context."
 
   \description "Corresponds to a voice with lyrics.  Handles the
 printing of a single line of lyrics."
-  
+
   \name "Lyrics"
   instrumentName = #'()
   shortInstrumentName = #'()
-  
+
   \consists "Lyric_engraver"
   \consists "Extender_engraver"
   \consists "Hyphen_engraver"
@@ -406,8 +406,8 @@ printing of a single line of lyrics."
 
   %% make sure that barlines aren't collapsed, when
   %% Bar_engraver is there.
-  \override BarLine #'bar-size = #0.1 
-  
+  \override BarLine #'bar-size = #0.1
+
 }
 
 \context {
@@ -420,8 +420,8 @@ printing of a single line of lyrics."
   % FIXME: not sure what the default should be here.
   \override VerticalAxisGroup #'staff-affinity = #DOWN
 
-  
-  \consists "Rest_swallow_translator" 
+
+  \consists "Rest_swallow_translator"
   \consists "Skip_event_swallow_translator"
   \consists "Tie_engraver"
   \consists "Note_name_engraver"
@@ -432,9 +432,9 @@ printing of a single line of lyrics."
   \type "Engraver_group"
   \name ChordNames
   \description "Typesets chord names."
-  
-  \consists "Rest_swallow_translator" 
-  \consists "Output_property_engraver" 
+
+  \consists "Rest_swallow_translator"
+  \consists "Output_property_engraver"
   \consists "Separating_line_group_engraver"
   \consists "Chord_name_engraver"
   \consists "Skip_event_swallow_translator"
@@ -457,7 +457,7 @@ RemoveEmptyStaffContext= \context {
 
 AncientRemoveEmptyStaffContext = \context {
 %% why not add by default?
-  
+
   \RemoveEmptyStaffContext
   \accepts "VaticanaVoice"
   \accepts "GregorianTranscriptionVoice"
@@ -467,7 +467,7 @@ AncientRemoveEmptyStaffContext = \context {
 \context {
   \type "Score_engraver"
   \name "Score"
-  
+
   \description "This is the top level notation context.  No
 other context can contain a @code{Score} context.  This context
 handles the administration of time signatures.  It also makes sure
@@ -492,7 +492,7 @@ automatically when an output definition (a @code{\score} or
   \consists "System_start_delimiter_engraver"
   \consists "Mark_engraver"
   \consists "Volta_engraver"
-  \consists "Metronome_mark_engraver"  
+  \consists "Metronome_mark_engraver"
   \consists "Break_align_engraver"
   \consists "Spacing_engraver"
   \consists "Grace_spacing_engraver"
@@ -500,7 +500,7 @@ automatically when an output definition (a @code{\score} or
   \consists "Stanza_number_align_engraver"
   \consists "Bar_number_engraver"
   \consists "Parenthesis_engraver"
-  
+
   \defaultchild "Staff"
 
   \accepts "FretBoards"
@@ -530,7 +530,7 @@ automatically when an output definition (a @code{\score} or
   systemStartDelimiter =#'SystemStartBar
 
   drumStyleTable = #drums-style
-  
+
   melismaBusyProperties = #default-melisma-properties
   tieWaitForNote = ##f
   clefGlyph = #"clefs.G"
@@ -541,19 +541,19 @@ automatically when an output definition (a @code{\score} or
 
   crescendoSpanner = #'hairpin
   decrescendoSpanner = #'hairpin
-  
+
   defaultBarType = #"|"
   doubleRepeatType = #":|:"
   barNumberVisibility = #first-bar-number-invisible
   automaticBars = ##t
-  
+
   explicitClefVisibility = #all-visible
   explicitKeySignatureVisibility = #all-visible
   implicitTimeSignatureVisibility = #end-of-line-invisible
-  
+
   repeatCountVisibility = #all-repeat-counts-visible
-  
-  autoBeamSettings = #default-auto-beam-settings
+
+  beamSettings = #default-beam-settings
   autoBeaming = ##t
   autoBeamCheck = #default-auto-beam-check
   scriptDefinitions = #default-script-alist
@@ -564,24 +564,24 @@ automatically when an output definition (a @code{\score} or
   pedalUnaCordaStyle = #'text
 
 %% These are in ordinary italic font, including the *,
-%% but they are unlikely to be used, 
+%% but they are unlikely to be used,
 %% as the default pedal-style for SostenutoPedal is 'mixed':
-%% i.e.  Sost. Ped_____________________ 
-  pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") 
+%% i.e.  Sost. Ped_____________________
+  pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*")
   pedalSostenutoStyle = #'mixed
 
-  harmonicAccidentals = ##t 
+  harmonicAccidentals = ##t
   fingeringOrientations = #'(up down)
   stringNumberOrientations = #'(up down)
   strokeFingerOrientations = #'(right)
-  
+
   lyricMelismaAlignment = #LEFT
   markFormatter = #format-mark-letters
   rehearsalMark = #1
   subdivideBeams = ##f
   extraNatural = ##t
   autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0))
-  autoCautionaries = #'()  
+  autoCautionaries = #'()
 
   printKeyCancellation = ##t
   keyAlterationOrder = #`(
@@ -592,7 +592,7 @@ automatically when an output definition (a @code{\score} or
   )
 
   barCheckSynchronize = ##f
-  
+
 %% chord names:
   chordNameFunction = #ignatzek-chord-names
   majorSevenSymbol = #whiteTriangleMarkup
@@ -647,7 +647,7 @@ automatically when an output definition (a @code{\score} or
     percent-repeat-item-interface
     percent-repeat-interface
 
-    ;; need this, as stanza numbers are items, and appear only once. 
+    ;; need this, as stanza numbers are items, and appear only once.
     stanza-number-interface
   )
   quotedEventTypes = #'(
@@ -659,8 +659,7 @@ automatically when an output definition (a @code{\score} or
   instrumentTransposition = #(ly:make-pitch 0 0 0)
 
   verticallySpacedContexts = #'(Staff)
-  topLevelAlignment = ##t
-  
+
   timing = ##t
 }
 
@@ -688,7 +687,7 @@ automatically when an output definition (a @code{\score} or
   \name "Devnull"
   \type "Engraver_group"
 
-%% don't want to route anything out of here: 
+%% don't want to route anything out of here:
   \alias "Staff"
   \alias "Voice"
   \consists "Swallow_engraver"
@@ -702,7 +701,7 @@ context."
   \alias "Voice"
   \consists "Tab_note_heads_engraver"
   \consists "Tab_harmonic_engraver"
-  
+
   \remove "Note_heads_engraver"
   \remove "Fingering_engraver"
   \remove "New_fingering_engraver"
@@ -731,18 +730,18 @@ context."
   \name "TabStaff"
   \denies "Voice"
   \consists "Tab_staff_symbol_engraver"
-  
+
   \description "Context for generating tablature. [DOCME]"
 
   \accepts "TabVoice"
   \defaultchild "TabVoice"
-  
+
   %% 6 strings
   \override StaffSymbol #'staff-space = #1.5
 
   %% Don't draw stems over the tablature figures !
   \override Stem #'avoid-note-head = ##t
-  
+
   %% No accidental in tablature !
   \remove "Accidental_engraver"
   \remove "Key_engraver"
index c8b0a84b18b886686fae3dc466e28c5879ed0cb0..3f3bdca54dd9632a539b27e18d24be757d39747d 100644 (file)
@@ -359,6 +359,30 @@ musicMap =
 #(define-music-function (parser location proc mus) (procedure? ly:music?)
             (music-map proc mus))
 
+overrideBeamSettings =
+#(define-music-function
+    (parser location
+     context time-signature rule-type grouping-rule)
+    (symbol? pair? symbol? pair?)
+
+ (_i "Override beamSettings in @var{context}
+for time signatures of @var{time-signature} and rules of type
+@var{rule-type} to have a grouping rule alist
+@var{grouping-rule}.
+@var{rule-type} can be @code{end} or @code{subdivide},
+with a potential future value of @code{begin}.
+@var{grouping-rule} is an alist of @var{(beam-type . grouping)}
+entries.  @var{grouping} is in units of @var{beam-type}.  If
+@var{beam-type} is @code{*}, grouping is in units of the denominator
+of @var{time-signature}.")
+
+ ;; TODO -- add warning if largest value of grouping is
+ ;;         greater than time-signature.
+
+#{
+#(override-beam-setting
+  $time-signature $rule-type $grouping-rule $context)
+#})
 
 overrideProperty =
 #(define-music-function (parser location name property value)
@@ -647,6 +671,19 @@ resetRelativeOctave  =
 
     reference-note))
 
+revertBeamSettings =
+#(define-music-function
+    (parser location
+     context time-signature rule-type)
+    (symbol? pair? symbol?)
+
+ (_i "Revert beam settings in @var{context} for time signatures of
+@var{time-signature} and groups of type
+@var{group-type}.  @var{group-type} can be @code{end}
+or @code{subdivide}.")
+#{
+  #(revert-beam-setting $time-signature $rule-type $context)
+#})
 
 scaleDurations =
 #(define-music-function (parser location fraction music) (number-pair? ly:music?)
@@ -654,6 +691,25 @@ scaleDurations =
    (ly:music-compress music
                      (ly:make-moment (car fraction) (cdr fraction))))
 
+setBeatGrouping =
+#(define-music-function (parser location grouping) (pair?)
+   (_i "Set the beat grouping in the current time signature to
+@var{grouping}.")
+   (define (default-group-setting c)
+    (let* ((context-time-signature
+            (ly:context-property c 'timeSignatureFraction))
+           (time-signature (if (null? context-time-signature)
+                               '(4 . 4)
+                               context-time-signature)))
+      (override-property-setting
+       c
+       'beamSettings
+       (list time-signature 'end)
+       (list  (cons '* grouping)))))
+
+   (context-spec-music
+     (make-apply-context default-group-setting)
+     'Score))
 
 
 shiftDurations =
index 8b35c95df6f889e94af5f866f7e712b98ae0112c..187dfdd09baab156342095fb1e7385de9e745593 100644 (file)
@@ -1187,7 +1187,7 @@ def text_markup (str):
     while match:
        result = result + str[:match.end (1)] + " \markup"
        str = str[match.end( 2):]
-       # Count matching parentheses to find the end of the 
+       # Count matching parentheses to find the end of the
        # current markup:
        nesting_level = 0
        pars = re.finditer(r"[()]",str)
@@ -1228,7 +1228,7 @@ def articulation_substitute (str):
 
 string_or_scheme = re.compile ('("(?:[^"\\\\]|\\\\.)*")|(#\\s*\'?\\s*\\()')
 
-# Only apply articulation_substitute () outside strings and 
+# Only apply articulation_substitute () outside strings and
 # Scheme expressions:
 def smarter_articulation_subst (str):
     result = ''
@@ -1242,7 +1242,7 @@ def smarter_articulation_subst (str):
            # Copy the string to output:
            result = result + match.group (1)
            str = str[match.end(1):]
-       else: # Found a Scheme expression. Count 
+       else: # Found a Scheme expression. Count
            # matching parentheses to find its end
            str = str[match.start ():]
            nesting_level = 0
@@ -1321,7 +1321,7 @@ def conv (str):
     return str
 
 
-@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + 
+@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") +
                          ", fingerHorizontalDirection -> fingeringOrientations")
 def conv (str):
     str = re.sub ('accacciatura',
@@ -2002,7 +2002,7 @@ def conv (str):
     str = re.sub ('soloADue', 'printPartCombineTexts', str)
     str = re.sub (r'\\applymusic\s*#notes-to-clusters',
                      '\\makeClusters', str)
-    
+
     str = re.sub (r'pagenumber\s*=', 'firstpagenumber = ', str)
     return str
 
@@ -2055,7 +2055,7 @@ with
 
     str = re.sub (r'#\(paper-set-staff-size', '%Use set-global-staff-size at toplevel\n% #(layout-set-staff-size', str)
     return str
-    
+
 
 @rule ((2, 3, 23), r'\context Foo = NOTENAME -> \context Foo = "NOTENAME"')
 def conv (str):
@@ -2240,7 +2240,7 @@ def conv (str):
 
 @rule ((2, 7, 0), 'ly:get-default-font -> ly:grob-default-font')
 def conv (str):
-    return re.sub('ly:get-default-font', 'ly:grob-default-font', str) 
+    return re.sub('ly:get-default-font', 'ly:grob-default-font', str)
 
 
 @rule ((2, 7, 1), '''ly:parser-define -> ly:parser-define!
@@ -2539,7 +2539,7 @@ def conv (str):
         while dur > 1 :
             dur /= 2
             log2 += 1
-        
+
         den = (1 << dots) * (1 << log2)
         num = ((1 << (dots+1))  - 1)
 
@@ -2552,7 +2552,7 @@ def conv (str):
     }
 
 """ % (num*count, den)
-    
+
     str = re.sub (r'\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*}', sub_tempo, str)
     return str
 
@@ -2595,10 +2595,10 @@ def conv (str):
 
 @rule ((2, 11, 6), _ ("Rename accidental glyphs, use glyph-name-alist."))
 def conv (str):
-    
+
     def sub_acc_name (m):
         idx = int (m.group (1).replace ('M','-'))
-        
+
         return ["accidentals.doublesharp",
                 "accidentals.sharp.slashslash.stemstemstem",
                 "accidentals.sharp",
@@ -2610,7 +2610,7 @@ def conv (str):
                 "accidentals.flatflat"][4-idx]
 
     str = re.sub (r"accidentals[.](M?[-0-9]+)",
-                  sub_acc_name, str) 
+                  sub_acc_name, str)
     str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)",
                   r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str)
     ## FIXME: standard vs default, alteration-FOO vs FOO-alteration
@@ -2669,15 +2669,15 @@ def conv (str):
                 context = m.group (2)
                 if not context:
                     context = ''
-                    
+
                 s += (r"%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }"
                       % (once, context, var, h))
 
                 s += '\n'
-            
+
         return s
-    
-                  
+
+
     str = re.sub (r"(\\once)?\s*\\override\s*([a-zA-Z]+\s*[.]\s*)?TextSpanner\s*#'edge-height\s*=\s*#'\(\s*([0-9.-]+)\s+[.]\s+([0-9.-]+)\s*\)", sub_edge_height, str)
     return str
 
@@ -2744,8 +2744,8 @@ def conv (str):
                           "\t(format-metronome-markup text dur count context)\n")
 
     ## warning 2/2: fret diagram properties moved to fret-diagram-details
-    fret_props = ['barre-type', 
-                'dot-color', 
+    fret_props = ['barre-type',
+                'dot-color',
                 'dot-radius',
                 'finger-code',
                 'fret-count',
@@ -2800,7 +2800,7 @@ def conv (str):
 
 @rule ((2, 11, 55), "#(set-octavation oct) -> \\ottava #oct,\n\
 \\put-adjacent markup axis dir markup -> \\put-adjacent axis dir markup markup")
-def conv (str):    
+def conv (str):
     str = re.sub (r"#\(set-octavation (-*[0-9]+)\)", r"\\ottava #\1", str)
     if re.search ('put-adjacent', str):
        stderr_write (NOT_SMART % _ ("\\put-adjacent argument order.\n"))
@@ -2907,8 +2907,28 @@ def conv(str):
         stderr_write (UPDATE_MANUALLY)
     return str
 
-@rule ((2, 13, 4), _("different settings for vertical layout"))
+@rule ((2, 13, 4),
+       _ ("Autobeaming rules have changed.  override-auto-beam-setting and\n\
+revert-auto-beam-setting have been eliminated.  \\overrideBeamSettings has been\n\
+added.  BeatGrouping has been eliminated.\n\
+Different settings for vertical layout."))
 def conv(str):
+    if re.search("override-auto-beam-setting", str):
+        stderr_write ("\n")
+        stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\
+   Autobeam settings are now overriden with \\overrideBeamSettings.\n"))
+        stderr_write (UPDATE_MANUALLY)
+    if re.search("revert-auto-beam-setting", str):
+        stderr_write ("\n")
+        stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\
+   Autobeam settings are now reverted with \\revertBeamSettings.\n"))
+        stderr_write (UPDATE_MANUALLY)
+    str = re.sub(r"\\set\s+#\'beatGrouping", r"\\setBeatGrouping", str)
+    if re.search(r"(\w+\.beatGrouping)", str):
+        stderr_write (NOT_SMART % _(".beatGrouping. \n\
+   beatGrouping with a specified context must now be accomplished with\n\
+   \\overrideBeamSettings.\n"))
+        stderr_write (UPDATE_MANUALLY)
     if re.search(r'alignment-offsets', str):
         stderr_write("\n")
         stderr_write(NOT_SMART % _("alignment-offsets has been changed to alignment-distances: \
@@ -2926,5 +2946,5 @@ you must now specify the distances between staves rather than the offset of stav
 # - write rule for bumping major stable version with
 #
 #     _ ("bump version for release")
-#  
+#
 # as exact description.
index 4f23d06198d21564a23de21a6d40d9bdeb655ca1..1e77399b06df0ceec87f7c774fdab2799f490a9b 100644 (file)
 ;;;;
 ;;;; (c) 2000--2009 Jan Nieuwenhuizen <janneke@gnu.org>
 
-;;; specify generic beam end times
-
-;;; format:
-;;;
-;;;   function shortest-duration-in-beam time-signature
-;;;
-;;; where
-;;;
-;;;     function = begin or end
-;;;     shortest-duration-in-beam = numerator denominator; e.g.: 1 16
-;;;     time-signature = numerator denominator, e.g.: 4 4
-;;;
-;;; unspecified or wildcard entries for duration or time-signature
-;;; are given by * *
-
-;;; maybe do:  '(end shortest-1 16 time-3 4) ?
-
-(define-public default-auto-beam-settings
-  `(
-    ;; in 2 2 time:
-    ;;   use beatLength for all except 32nd notes
-    ;;   end beams with 32nd notes each 1 4 beat
-
-    ((end 1 32 2 2) . ,(ly:make-moment 1 4))
-    ((end 1 32 2 2) . ,(ly:make-moment 2 4))
-    ((end 1 32 2 2) . ,(ly:make-moment 3 4))
-
-    ;; in 2 4, 2 8 and 2 16 time:
-    ;;   use beatLength
-
-    ;; in 3 2 time:
-    ;;   use beatLength for all except 32nd notes
-    ;;   end beams with 32nd notes each 1 4 beat
-
-    ((end 1 32 3 2) . ,(ly:make-moment 1 4))
-    ((end 1 32 3 2) . ,(ly:make-moment 2 4))
-    ((end 1 32 3 2) . ,(ly:make-moment 3 4))
-    ((end 1 32 3 2) . ,(ly:make-moment 4 4))
-    ((end 1 32 3 2) . ,(ly:make-moment 5 4))
-
-    ;; in 3 4, 3 8 and 3 16 time:
-    ;;   use beatLength
-
-    ;; in 4 2 time:
-    ;;   use beatLength for all except 16th and 32nd notes
-    ;;   end beams with 16th notes each 1 4 beat
-    ;;   end beams with 32nd notes each 1 8 beat
-
-    ((end 1 16 4 2) . ,(ly:make-moment 1 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 2 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 3 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 4 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 5 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 6 4))
-    ((end 1 16 4 2) . ,(ly:make-moment 7 4))
-
-    ((end 1 32 4 2) . ,(ly:make-moment 1 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 2 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 3 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 4 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 5 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 6 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 7 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 8 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 9 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 10 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 11 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 12 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 13 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 14 8))
-    ((end 1 32 4 2) . ,(ly:make-moment 15 8))
-
-    ;; in 4 4 (common) time:
-    ;;  use beatLength for all except 32nd notes:
-    ;;  end beams with 32nd notes each 1 8 beat
-
-    ((end 1 32 4 4) . ,(ly:make-moment 1 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 2 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 3 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 4 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 5 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 6 8))
-    ((end 1 32 4 4) . ,(ly:make-moment 7 8))
-
-    ;; in 4 8 and 4 16 time:
-    ;;   use beatLength
-
-    ;; in 6 4 time:
-    ;;   use beatGrouping for all except 16th, 32nd notes
-    ;;   end beams with 16th or 32nd notes each 1 4 beat
-
-
-    ((end 1 16 6 4) . ,(ly:make-moment 1 4))
-    ((end 1 16 6 4) . ,(ly:make-moment 2 4))
-    ((end 1 16 6 4) . ,(ly:make-moment 3 4))
-    ((end 1 16 6 4) . ,(ly:make-moment 4 4))
-    ((end 1 16 6 4) . ,(ly:make-moment 5 4))
-
-    ((end 1 32 6 4) . ,(ly:make-moment 1 4))
-    ((end 1 32 6 4) . ,(ly:make-moment 2 4))
-    ((end 1 32 6 4) . ,(ly:make-moment 3 4))
-    ((end 1 32 6 4) . ,(ly:make-moment 4 4))
-    ((end 1 32 6 4) . ,(ly:make-moment 5 4))
-
-    ;; in 6 8 time:
-    ;;   use beatGrouping for all except 32nd notes
-    ;;   end beams with 32nd notes each 1 8 beat
-
-    ((end 1 32 6 8) . ,(ly:make-moment 1 8))
-    ((end 1 32 6 8) . ,(ly:make-moment 2 8))
-    ((end 1 32 6 8) . ,(ly:make-moment 3 8))
-    ((end 1 32 6 8) . ,(ly:make-moment 4 8))
-    ((end 1 32 6 8) . ,(ly:make-moment 5 8))
-
-    ;; in 6 16 time:
-    ;;   use beatGrouping
-
-    ;; in 9 4 time:
-    ;;   use beatGrouping for all except 16th, 32nd notes
-    ;;   end beams with 16th or 32nd notes each 1 4 beat
-
-    ((end 1 16 9 4) . ,(ly:make-moment 1 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 2 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 3 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 4 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 5 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 6 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 7 4))
-    ((end 1 16 9 4) . ,(ly:make-moment 8 4))
-
-    ((end 1 32 9 4) . ,(ly:make-moment 1 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 2 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 3 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 4 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 5 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 6 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 7 4))
-    ((end 1 32 9 4) . ,(ly:make-moment 8 4))
-
-    ;; in 9 8 time:
-    ;;   use beatGrouping for all except 32nd notes
-    ;;   end beams with 32nd notes each 1 8 beat
-
-    ((end 1 32 9 8) . ,(ly:make-moment 1 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 2 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 3 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 4 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 5 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 6 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 7 8))
-    ((end 1 32 9 8) . ,(ly:make-moment 8 8))
-
-    ;; in 9 16 time
-    ;;   use beatGrouping
-
-    ;; in 12 4 time:
-    ;;   use beatGrouping for all except 16th, 32nd notes
-    ;;   end beams with 16th or 32nd notes each 1 4 beat
-
-    ((end 1 16 12 4) . ,(ly:make-moment 1 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 2 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 3 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 4 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 5 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 6 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 7 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 8 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 9 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 10 4))
-    ((end 1 16 12 4) . ,(ly:make-moment 11 4))
-
-    ((end 1 32 12 4) . ,(ly:make-moment 1 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 2 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 3 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 4 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 5 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 6 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 7 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 8 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 9 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 10 4))
-    ((end 1 32 12 4) . ,(ly:make-moment 11 4))
-
-    ;; in 12 8 time:
-    ;;   use beatGrouping for all except 32nd notes
-    ;;   end beams with 32nd notes each 1 8 beat
-
-    ((end 1 32 12 8) . ,(ly:make-moment 1 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 2 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 3 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 4 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 5 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 6 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 7 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 8 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 9 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 10 8))
-    ((end 1 32 12 8) . ,(ly:make-moment 11 8))
-
-    ;; in 12 16 time:
-    ;;   use beatGrouping
-
-    ))
-
-(define (override-property-setting context property setting value)
-  "Like the C++ code that executes \\override, but without type
-checking. "
-  (ly:context-set-property!
-   context property
-   (cons (cons setting value) (ly:context-property context property))))
-
-(define (revert-property-setting context property setting)
-  "Like the C++ code that executes \revert, but without type
-checking. "
-
-  (define (revert-member alist entry new)
-    "Return ALIST, with ENTRY removed.  ALIST is not modified, instead
-a fresh copy of the list-head is made."
-    (cond
-     ((null? alist) new)
-     ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
-     (else (revert-member (cdr alist) entry (cons (car alist) new)))))
-
-  (ly:context-set-property!
-   context property
-   (revert-member (ly:context-property context property) setting '())))
-
-(define-public (override-auto-beam-setting setting num den . rest)
-  (ly:export
-   (context-spec-music
-    (make-apply-context (lambda (c)
-        (override-property-setting
-         c 'autoBeamSettings
-         setting (ly:make-moment num den))))
-    (if (and (pair? rest) (symbol? (car rest)))
-        (car rest)
-        'Voice))))
-
-(define-public (score-override-auto-beam-setting setting num den)
-  (override-auto-beam-setting setting num den 'Score))
-
-(define-public (revert-auto-beam-setting setting num den . rest)
-  (ly:export
-   (context-spec-music
-    (make-apply-context
-      (lambda (c)
-        (revert-property-setting
-         c 'autoBeamSettings
-         (cons setting (ly:make-moment num den)))))
-    (if (and (pair? rest) (symbol? (car rest)))
-        (car rest)
-        'Voice))))
-
 ;;  Determine end moment for auto beaming (or begin moment, but mostly
-;;  0== anywhere).  In order of decreasing priority:
+;;  0== anywhere).  We only consider the current time signature.
+;;  In order of decreasing priority:
 ;;
-;;  1. end <type>   *     *
-;;  2. end   *      *     *
-;;  3. end <type> <num> <den>
-;;  4. end   *    <num> <den>
-;;  5. if 1-4 not specified, begin anywhere, end at time determined by
-;;          beatGrouping and beatLength:
-;;     if beatGrouping and beatLength are consistent with measureLength,
-;;        use beatGrouping to determine end of beams.
-;;     if beatGrouping and beatLength are inconsistent with measureLength,
-;;        use beatLength to determine end of beams.
+;;  1. end <type>
+;;  2. end   *
+;;  3. if 1-2 not specified, begin anywhere, end at beatLength intervals
 ;;
 ;;  Rationale:
 ;;
 ;;  [user override]
 ;;  1. override for specific duration type
-;;  2. generic override
+;;  2. override for all duration types in a time signature.
 ;;
-;;  [to be defined in config file]
-;;  3. exceptions for specific time signature, for specific duration type
-;;  4. exceptions for specific time signature
-;;  5. easy catch-all rule for non-specified measure types
+;;  defined in scm/beam-settings.scm:
+;;  1. Default grouping for common time signatures
+;;  2. exceptions for specific time signature, for specific duration type
 
 
-(define-public (default-auto-beam-check context dir test)
+(define-public (default-auto-beam-check context dir test-beam)
   (define (get name default)
     (let ((value (ly:context-property context name)))
       (if (not (null? value)) value default)))
@@ -295,69 +35,54 @@ a fresh copy of the list-head is made."
           (cons (ly:moment-mul (ly:make-moment new-start 1) beat-length)
                 (ending-moments (cdr group-list) new-start beat-length)))))
 
-  (define (make-end-settings time ending-list moment-den)
-    (if (null? ending-list)
-        '()
-        (cons (cons (append '(end * *) time)
-                    (ly:make-moment (car ending-list) moment-den))
-              (make-end-settings time (cdr ending-list) moment-den))))
-  
+  ;; Start of actual auto-beam test routine
+  ;;
+  ;;
   ;; Don't start auto beams on grace notes
   (if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0)
            (= dir START))
       #f
-      (let* ((beat-length (get 'beatLength (ly:make-moment 1 4)))
-             (measure-length (get 'measureLength (ly:make-moment 1 1)))
-             (measure-pos (get 'measurePosition ZERO-MOMENT))
-             (beat-grouping (get 'beatGrouping '()))
-             (settings (get 'autoBeamSettings '()))
-             (function (list (if (= dir START) 'begin 'end)))
-             ;; Calculate implied time signature based on measureLength
-             ;; and beatLength for default value in get
-             (num-mom (ly:moment-div measure-length beat-length))
-             (num (inexact->exact
-                    (round (/ (ly:moment-main-numerator num-mom)
-                              (ly:moment-main-denominator num-mom)))))
-             (den (ly:moment-main-denominator beat-length))
-             (time-signature-fraction 
-               (get 'timeSignatureFraction (cons num den)))
-             (time (list (car time-signature-fraction)
-                         (cdr time-signature-fraction)))
-             (type (list (ly:moment-main-numerator test)
-                         (ly:moment-main-denominator test)))
-             (pos (if (>= (ly:moment-main-numerator measure-pos) 0)
-                      measure-pos
-                      (ly:moment-add measure-length measure-pos)))
-             (grouping-moments (ending-moments beat-grouping 0 beat-length))
-             ;; Calculate implied measure length from beatGrouping
-             ;; and beatLength
-             (grouping-length (if (null? grouping-moments)
-                                  ZERO-MOMENT
-                                  (list-ref grouping-moments 
-                                            (1- (length grouping-moments)))))
-             (lst (list
-                    ;; Hmm, should junk user-override feature,
-                    ;; or split this in user-override and config section?
-                    (append function type '(* *))
-                    (append function '(* * * *))
-                    (append function type time)
-                    (append function '(* *) time)))
-             (predefined-setting (first-assoc lst settings)))
-         (if (or
-                ;; always begin or end beams at beginning/ending of measure
+      (if (= dir START)
+          ;; start anywhere is currently implemented
+          #t
+          (let* ((beat-length (get 'beatLength (ly:make-moment 1 4)))
+                 (measure-length (get 'measureLength (ly:make-moment 1 1)))
+                 (time-signature-fraction
+                   (get 'timeSignatureFraction '(4 . 4)))
+                 (measure-pos (get 'measurePosition ZERO-MOMENT))
+                 (settings (get 'beamSettings '()))
+                 (function (if (= dir START) 'begin 'end))
+                 (type (cons (ly:moment-main-numerator test-beam)
+                             (ly:moment-main-denominator test-beam)))
+                 (pos (if (>= (ly:moment-main-numerator measure-pos) 0)
+                        measure-pos
+                        (ly:moment-add measure-length measure-pos)))
+                 (type-grouping (ly:beam-grouping
+                                  settings
+                                  time-signature-fraction
+                                  function
+                                  type))
+                 (default-grouping (ly:beam-grouping
+                                     settings
+                                     time-signature-fraction
+                                     function
+                                     '*))
+                 (beat-grouping (if (null? type-grouping)
+                                  default-grouping
+                                  type-grouping))
+                 (grouping-moment (if (null? type-grouping)
+                                    beat-length
+                                    test-beam))
+                 (grouping-moments (ending-moments
+                                      beat-grouping 0 grouping-moment)))
+           (if (null? beat-grouping)
+               ;; no rule applies, so end at beatLength
+               (= (ly:moment-main-denominator
+                   (ly:moment-div pos beat-length)) 1)
+               ;; otherwise, end at beginning of measure or
+               ;; at specified moment
+               (or
+                ;; start/end at beginning of measure
                 (= (ly:moment-main-numerator pos) 0)
-                (first-member (map (lambda (x) (cons x pos)) lst) settings))
-             #t
-             (if (= dir START)
-                 ;; if no entry matches our function + time or type,
-                 ;; start anywhere
-                 (not predefined-setting)
-                 ;; if entry matches our function + time or type, check moment
-                 (if predefined-setting
-                    (equal? measure-pos (cdr predefined-setting))
-                    ;; if measure-length matches grouping-length, use
-                    ;; grouping moments, else use beat-length
-                    (if (equal? measure-length grouping-length)
-                        (member measure-pos grouping-moments)
-                        (= (ly:moment-main-denominator
-                           (ly:moment-div pos beat-length)) 1))))))))
+                ;; end if measure-pos matches a specified ending moment
+                (member measure-pos grouping-moments)))))))
diff --git a/scm/beam-settings.scm b/scm/beam-settings.scm
new file mode 100644 (file)
index 0000000..eaa9c24
--- /dev/null
@@ -0,0 +1,228 @@
+;;;; default-beam-settings.scm -- Default auto-beam and subdivide-beam settings
+;;;;
+;;;; source file of the GNU LilyPond music typesetter
+;;;;
+;;;; (c) 2009 Carl Sorensen <c_sorensen@byu.edu>
+
+;;; specify default beaming rules
+
+;;; format:
+;;;
+;;; alist of
+;;;   ((time-signature function) . (beam-type . grouping)) entries
+;;;
+;;; where
+;;;
+;;;     time-signature = time signature fraction (pair of numbers, (4 .4) )
+;;;     function = 'end or 'subdivide (possibly implement 'begin in the future)
+;;;     beam-type = '* or (numerator . denominator); e.g. (1 . 16)
+;;;       NOTE: numerator is kept in beam-type because of
+;;;             tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8)
+;;;             for eighth-note triplets.
+;;;     grouping = a list of groups, in units of time signature denominator
+;;;         (for default rules) or beam-type (for explicit rules)
+;;;
+
+(define-public default-beam-settings
+ `(
+   ;; in 2 2 time:
+   ;;   default: end beams on 1 2 note boundaries
+   ;;   end beams with 32nd notes each 1 4 beat
+   (((2 . 2) end) .
+    ((* . (1 1))
+    ((1 . 32) . (8 8 8 8))))
+
+   ;; in 2 4, 2 8 and 2 16 time:
+   ;;   default: end beams on beats
+   (((2 . 4) end) . ((* . (1 1))))
+   (((2 . 8) end) . ((* . (1 1))))
+   (((2 . 16) end) . ((* . (1 1))))
+
+   ;; in 3 2 time:
+   ;;   default: end beams on beats
+   ;;   end beams with 32nd notes each 1 4 beat
+   (((3 . 2) end) .
+    ((* . (1 1 1))
+     ((1 . 32) . (8 8 8 8 8 8))))
+
+    ;; in 3 4 time:
+    ;;   default: end beams on beats
+    ;;   group 1/8 note beams on measure
+   (((3 . 4) end) .((* . (3))
+                    ((1 16) . (4 4 4))
+                    ((1 32) . (8 8 8))
+                    ((1 64) . (16 16 16))
+                    ((1 128) . (32 32 32))))
+
+    ;; in 3 8 and 3 16 time time:
+    ;;   default: group on 3
+   (((3 . 8) end) . ((* . (3))))
+   (((3 . 16) end) . ((* . (3))))
+
+    ;; in 4 2 time:
+    ;;   default: end beams on beats
+    ;;   end beams with 16th notes each 1 4 beat
+    ;;   end beams with 32nd notes each 1 8 beat
+   (((4 . 2) end) .
+    ((* . (1 1 1 1))
+     ((1 . 16) . (4 4 4 4 4 4 4 4))
+     ((1 . 32) . (4 4 4 4
+                  4 4 4 4
+                  4 4 4 4
+                  4 4 4 4))))
+
+    ;; in 4 4 (common) time:
+    ;;   default: end beams on beats
+    ;;  use beatLength for all except 32nd notes:
+    ;;  end beams with 32nd notes each 1 8 beat
+   (((4 . 4) end) .
+    ((* . (2 2))
+     ((1 . 32) . (4 4 4 4
+                  4 4 4 4))))
+
+    ;; in 4 8 time:
+    ;;   default: group on 1 4 notes
+   (((4 . 8) end) . ((* . (2 2))))
+
+    ;; in 4 16 time:
+    ;;   default: group on beats
+   (((4 . 16) end) . ((* . (1 1 1 1))))
+
+    ;; in 6 4 time:
+    ;;   default group at 3 4
+    ;;   end beams with 16th or 32nd notes each 1 4 beat
+   (((6 . 4) end) .
+    ((* . (3 3))
+     ((1 . 16) . (4 4 4 4 4 4))
+     ((1 . 32) . (8 8 8 8 8 8))))
+
+    ;; in 6 8 time:
+    ;;   default: group at 3 8
+    ;;   end beams with 32nd notes each 1 8 beat
+   (((6 . 8) end) .
+    ((* . (3 3))
+     ((6 . 8) . (4 4 4 4 4 4))))
+
+    ;; in 6 16 time:
+    ;;   default: group at 3 16
+   (((6 . 16) end) . ((* . (3 3))))
+
+    ;; in 9 4 time:
+    ;;   default: group at 3 4
+    ;;   end beams with 16th or 32nd notes each 1 4 beat
+   (((9 . 4) end) .
+    ((* . (3 3 3))
+     ((1 . 16) . (4 4 4 4 4 4 4 4 4))
+     ((1 . 32) . (8 8 8 8 8 8 8 8 8))))
+
+    ;; in 9 8 time:
+    ;;   default: group at 3 8
+    ;;   use beatGrouping for all except 32nd notes
+    ;;   end beams with 32nd notes each 1 8 beat
+   (((9 . 8) end) .
+    ((* . (3 3 3))
+     ((1 . 32) . (4 4 4 4 4 4 4 4 4))))
+
+    ;; in 9 16 time
+    ;;   default: group at 3 8
+   (((9 . 16) end) . ((* . (3 3 3))))
+
+    ;; in 12 4 time:
+    ;;   default: group at 3 4
+    ;;   end beams with 16th or 32nd notes each 1 4 beat
+   (((12 . 4) end) .
+    ((* . (3 3 3 3))
+     ((1 . 16) . (4 4 4 4 4 4 4 4 4 4 4 4 4))
+     ((12 . 4) . (8 8 8 8 8 8 8 8 8 8 8 8 8))))
+
+    ;; in 12 8 time:
+    ;;   default: group at 3 8
+    ;;   end beams with 32nd notes each 1 8 beat
+   (((12 . 8) end) .
+    ((* . (3 3 3 3))
+     ((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4 4))))
+
+    ;; in 12 16 time:
+    ;;   default: group at 3 16
+   (((12 . 16) end) . ((* . (3 3 3 3))))
+
+    ;; in 5 8 time:
+    ;;   default: group (3 2)
+   (((5 . 8) end) . ((* . (3 2))))
+
+    ;; in 8 8 time:
+    ;;   default: group (3 3 2)
+   (((8 . 8) end) . ((* . (3 3 2))))
+  ))  ; end of alist definition
+
+;;; Functions for overriding beam settings
+;;;
+
+(define (overridden-property-alist context property setting value)
+  "Return an alist containing the current @{context} value of
+@code{property} overriden by @code{(setting . value)}. "
+  (cons (cons setting value) (ly:context-property context property)))
+
+(define-public (override-property-setting context property setting value)
+  "Like the C++ code that executes \\override, but without type
+checking. "
+  (ly:context-set-property!
+    context property
+    (overridden-property-alist context property setting value)))
+
+(define (revert-property-setting context property setting)
+  "Like the C++ code that executes \revert, but without type
+checking. "
+
+  (define (revert-member alist entry new)
+    "Return ALIST, with ENTRY removed.  ALIST is not modified, instead
+a fresh copy of the list-head is made."
+    (cond
+      ((null? alist) new)
+      ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
+      (else (revert-member (cdr alist) entry (cons (car alist) new)))))
+
+  (ly:context-set-property!
+    context property
+    (revert-member (ly:context-property context property) setting '())))
+
+(define-public (override-beam-setting
+                  time-signature rule-type rule . rest)
+  "Override the beam settings for the context in @var{rest},
+for @var{time-signature} and  @var{rule-type}, with the
+new rule alist @var{rule}. "
+  (define (make-setting c)
+    (let ((new-settings
+            (overridden-property-alist
+              c
+              'beamSettings
+              (list time-signature rule-type)
+              rule)))
+      (ly:context-set-property! c 'beamSettings new-settings)))
+
+  (let ((music-to-export
+          (context-spec-music
+            (make-apply-context make-setting)
+              (if (and (pair? rest) (symbol? (car rest)))
+                  (car rest)
+                  'Voice))))
+    (ly:export music-to-export)))
+
+(define-public (score-override-beam-setting
+                 time-signature rule-type rule)
+  (override-beam-setting
+    time-signature rule-type rule 'Score))
+
+(define-public (revert-beam-setting
+                  time-signature rule-type . rest)
+  (ly:export
+    (context-spec-music
+      (make-apply-context
+        (lambda (c)
+          (revert-property-setting
+            c
+            'beamSettings
+            (list time-signature rule-type))))
+      (if (and (pair? rest) (symbol? (car rest)))
+          (car rest)
+          'Voice))))
index b6ec6a4ee7602c31e8daca2ac365102bd64a12e7..8db8bb96c079185d54da0b887180e0545a094227 100644 (file)
@@ -1,7 +1,7 @@
 ;;;; c++.scm -- implement Scheme frontends to C++ functions
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
-;;;; 
+;;;;
 ;;;; (c) 1998--2009 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
@@ -41,7 +41,7 @@
 
 ;; moved list to end of lily.scm: then all type-predicates are
 ;; defined.
-(define type-p-name-alist '()) 
+(define type-p-name-alist '())
 
 (define (match-predicate obj alist)
   (if (null? alist)
index 63a447c99a36b5600d5660fc75b74c4318e76507..b6a5becfb56561fb2dca7bce283b26911d447379 100644 (file)
@@ -1,7 +1,7 @@
 ;;;; define-context-properties.scm -- part of backend documentation
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
-;;;; 
+;;;;
 ;;;; (c) 1998--2009  Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                  Jan Nieuwenhuizen <janneke@gnu.org>
 
            (procedure? type?)
            (string? description)))
       (throw 'init-format-error))
-          
-       
+
+
   (if (not (equal? #f (object-property symbol 'translation-doc)))
       (ly:error (_ "symbol ~S redefined" symbol)))
-  
+
   (set-object-property! symbol 'translation-type? type?)
   (set-object-property! symbol 'translation-doc description)
   (set! all-translation-properties (cons symbol all-translation-properties))
@@ -32,7 +32,7 @@
    `(
 
      ;; TODO FIXME
-   
+
      (aDueText ,markup? "Text to print at a unisono passage.")
      (alignAboveContext ,string? "Where to insert newly created context in
 vertical alignment.")
@@ -92,9 +92,6 @@ arguments, @var{context}, @var{dir} [start/stop (-1 or 1)], and
 starts or stops the auto beam.")
      (autoBeaming ,boolean? "If set to true then beams are generated
 automatically.")
-     (autoBeamSettings ,list? "Specifies when automatically generated
-beams should begin and end.  See @ruser{Setting automatic beam
-behavior} for more information.")
      (autoCautionaries ,list? "List similar to @code{autoAccidentals},
 but it controls cautionary accidentals rather than normal ones.  Both
 lists are tried, and the one giving the most accidentals wins.  In
@@ -105,7 +102,7 @@ be printed automatically; they must be explicitly created with a
 are still counted.  Bar line generation will resume according to that
 count if this property is unset.")
 
-     
+
      (barAlways ,boolean? "If set to true a bar line is drawn after
 each note.")
      (barCheckSynchronize ,boolean? "If true then reset
@@ -120,8 +117,10 @@ format.")
      (bassStaffProperties ,list? "An alist of property settings to
 apply for the down staff of @code{PianoStaff}.  Used by
 @code{\\autochange}.")
-     (beatGrouping ,list? "A list of beatgroups, e.g., in 5/8 time
-@code{'(2 3)}.")
+     (beamSettings ,list? "Specifies when automatically generated
+beams should begin and end, as well as beam subdivision behavior.
+See @ruser{Setting automatic beam
+behavior} for more information.")
      (beatLength ,ly:moment? "The length of one beat in this time
 signature.")
 
@@ -270,11 +269,11 @@ This is used to transpose the MIDI output, and @code{\\quote}s.")
      (internalBarNumber ,integer? "Contains the current barnumber.
 This property is used for internal timekeeping, among others by the
 @code{Accidental_engraver}.")
-     
+
 
      (keepAliveInterfaces ,list? "A list of symbols, signifying grob
 interfaces that are worth keeping a staff with @code{remove-empty} set
-around for.")   
+around for.")
      (keyAlterationOrder ,list? "An alist that defines in what order
 alterations should be printed.  The format is @code{(@var{step}
 . @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and
@@ -437,7 +436,7 @@ cautionary suggestions over the note.")
 of the system/staff?  Set to @code{SystemStartBrace},
 @code{SystemStartBracket} or @code{SystemStartBar}.")
      (systemStartDelimiterHierarchy ,pair? "A nested list, indicating
-the nesting of a start delimiters.") 
+the nesting of a start delimiters.")
 
 
      (tablatureFormat ,procedure? "A function formatting a tablature
@@ -484,7 +483,7 @@ setting this property, you can make brackets last shorter.
 
      (useBassFigureExtenders ,boolean? "Whether to use extender lines
 for repeated bass figures.")
-     
+
      (verticallySpacedContexts ,list? "List of symbols, containing
 context names whose vertical axis groups should be taken into account
 for vertical spacing of systems.")
index c0811990f72afd6496c99baa81797463228d4e55..10b1df3566e505e2dd656015af39e3a7b12d401b 100644 (file)
@@ -978,32 +978,37 @@ Otherwise, return #f."
 ;;; \time
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If `expr' is a time signature set, return \"\\time ...\".
-Otherwise, return #f."
-  (with-music-match (expr (music
-                          'ContextSpeccedMusic
-                          element (music
-                                   'ContextSpeccedMusic
-                                   context-type 'Timing
-                                   element (music
-                                            'SequentialMusic
-                                            elements ((music
-                                                       'PropertySet
-                                                       value ?num+den
-                                                       symbol 'timeSignatureFraction)
-                                                      (music
-                                                       'PropertySet
-                                                       symbol 'beatLength)
-                                                      (music
-                                                       'PropertySet
-                                                       symbol 'measureLength)
-                                                      (music
-                                                       'PropertySet
-                                                       value ?grouping
-                                                       symbol 'beatGrouping))))))
-    (if (null? ?grouping)
-       (format #f "\\time ~a/~a~a" (car ?num+den) (cdr ?num+den) (new-line->lily-string))
-       (format #f "#(set-time-signature ~a ~a '~s)~a"
-               (car ?num+den) (cdr ?num+den) ?grouping (new-line->lily-string)))))
+Otherwise, return #f.  Note: default grouping is not available."
+  (with-music-match
+   (expr (music
+           'ContextSpeccedMusic
+          element (music
+                   'ContextSpeccedMusic
+                   context-type 'Timing
+                   element (music
+                            'SequentialMusic
+                            elements ?elts))))
+   (and
+    (> (length ?elts) 2)
+    (with-music-match ((cadr ?elts)
+                       (music 'PropertySet
+                              symbol 'beatLength))
+       #t)
+    (with-music-match ((caddr ?elts)
+                       (music 'PropertySet
+                              symbol 'measureLength))
+       #t)
+    (with-music-match ((car ?elts)
+                       (music 'PropertySet
+                              value ?num+den
+                              symbol 'timeSignatureFraction))
+       (if (eq? (length ?elts) 3)
+           (format
+             #f "\\time ~a/~a~a"
+             (car ?num+den) (cdr ?num+den) (new-line->lily-string))
+           (format
+             #f "#(set-time-signature ~a ~a '(<grouping-specifier>))~a"
+             (car ?num+den) (cdr ?num+den)  (new-line->lily-string)))))))
 
 ;;; \bar
 (define-extra-display-method ContextSpeccedMusic (expr parser)
index 17063a9aef80eaccafd5cc31f49a083a6f534f28..7aa8c05c20f35563ed41b2510beda2b90867c0c4 100644 (file)
@@ -366,6 +366,7 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "part-combiner.scm"
     "autochange.scm"
     "define-music-properties.scm"
+    "beam-settings.scm"
     "auto-beam.scm"
     "chord-name.scm"
 
index c51a9667ad3fa9847ddfecaef36651e693125390..c5e6f2da0125fe661f03cd95d858b7de4d35b545 100644 (file)
@@ -1,11 +1,11 @@
 ;;;; music-functions.scm --
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
-;;;; 
+;;;;
 ;;;; (c) 1998--2009 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-;; (use-modules (ice-9 optargs)) 
+;; (use-modules (ice-9 optargs))
 
 ;;; ly:music-property with setter
 ;;; (ly:music-property my-music 'elements)
@@ -36,7 +36,7 @@ First it recurses over the children, then the function is applied to MUSIC.
 "
   (let ((es (ly:music-property music 'elements))
        (e (ly:music-property music 'element)))
-    (set! (ly:music-property music 'elements) 
+    (set! (ly:music-property music 'elements)
          (map (lambda (y) (music-map function y)) es))
     (if (ly:music? e)
        (set! (ly:music-property music 'element)
@@ -45,7 +45,7 @@ First it recurses over the children, then the function is applied to MUSIC.
 
 (define-public (music-filter pred? music)
   "Filter out music expressions that do not satisfy PRED."
-  
+
   (define (inner-music-filter pred? music)
     "Recursive function."
     (let* ((es (ly:music-property music 'elements))
@@ -76,7 +76,7 @@ First it recurses over the children, then the function is applied to MUSIC.
   "Display music, not done with music-map for clarity of presentation."
 
   (display music)
-  (display ": { ")  
+  (display ": { ")
   (let ((es (ly:music-property music 'elements))
        (e (ly:music-property music 'element)))
     (display (ly:music-mutable-properties music))
@@ -96,7 +96,7 @@ First it recurses over the children, then the function is applied to MUSIC.
 ;;;
 (define (markup-expression->make-markup markup-expression)
   "Transform `markup-expression' into an equivalent, hopefuly readable, scheme expression.
-For instance, 
+For instance,
   \\markup \\bold \\italic hello
 ==>
   (markup #:line (#:bold (#:italic (#:simple \"hello\"))))"
@@ -131,7 +131,7 @@ that is, for a music expression, a (make-music ...) form."
         (markup-expression->make-markup obj))
        (;; music expression
         (ly:music? obj)
-        `(make-music 
+        `(make-music
           ',(ly:music-property obj 'name)
           ,@(apply append (map (lambda (prop)
                                   `(',(car prop)
@@ -170,7 +170,7 @@ that is, for a music expression, a (make-music ...) form."
         `(list ,@(map music->make-music obj)))
        (;; a pair
         (pair? obj)
-        `(cons ,(music->make-music (car obj)) 
+        `(cons ,(music->make-music (car obj))
                ,(music->make-music (cdr obj))))
        (else
         obj)))
@@ -204,8 +204,8 @@ Returns `obj'.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (shift-one-duration-log music shift dot)
-  "  add SHIFT to duration-log of 'duration in music and optionally 
-  a dot to any note encountered. This scales the music up by a factor 
+  "  add SHIFT to duration-log of 'duration in music and optionally
+  a dot to any note encountered. This scales the music up by a factor
   2^shift * (2 - (1/2)^dot)"
   (let ((d (ly:music-property music 'duration)))
     (if (ly:duration? d)
@@ -316,15 +316,15 @@ This function replaces all repeats  with unfold repeats. "
 
                (if (= 0 -1)
                    (set! count (* 2 (quotient count 3))))
-               
+
                (shift-duration-log music (+ (if seq-arg? 1 0)
                                             (ly:intlog2 count)) dot-shift)
-               
+
                (if seq-arg?
                    (ly:music-compress e (ly:make-moment (length (ly:music-property
                                                                  e 'elements)) 1)))))))
-         
-    
+
+
     (if (pair? es)
        (set! (ly:music-property music 'elements)
              (map unfold-repeats es)))
@@ -394,9 +394,9 @@ i.e.  this is not an override"
                          (Voice Script font-size -3)
                          (Voice Fingering font-size -8)
                          (Voice StringNumber font-size -8)))
-    
+
      (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2))
-     (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) 
+     (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4))))))
 
 (define-safe-public (make-voice-props-revert)
   (make-sequential-music
@@ -473,7 +473,7 @@ i.e.  this is not an override"
     (define (ottava-modify context)
       "Either reset middleCPosition to the stored original, or remember
 old middleCPosition, add OCTAVATION to middleCPosition, and set
-OTTAVATION to `8va', or whatever appropriate."     
+OTTAVATION to `8va', or whatever appropriate."
       (if (number? (ly:context-property         context 'middleCOffset))
          (let ((where (ly:context-property-where-defined context 'middleCOffset)))
            (ly:context-unset-property where 'middleCOffset)
@@ -494,52 +494,50 @@ OTTAVATION to `8va', or whatever appropriate."
 (define-public (set-octavation ottavation)
   (ly:export (make-ottava-set ottavation)))
 
-(define-public (make-time-signature-set num den . rest)
-  "Set properties for time signature NUM/DEN.  Rest can contain a list
-of beat groupings "
-
-  (define (standard-beat-grouping num den)
+;;; Need to keep this definition for \time calls from parser
+(define-public (make-time-signature-set num den)
+  "Set properties for time signature NUM/DEN."
+  (make-beam-rule-time-signature-set num den '()))
 
-    "Some standard subdivisions for time signatures."
-    (let*
-       ((key (cons num den))
-        (entry (assoc key '(
-               ; Simple time signatures
-               (( 3 .  8) . (3))
-               (( 4 .  8) . (2 2))
-               ; Compound time signatures
-               (( 6 .  4) . (3 3))
-               (( 6 .  8) . (3 3))
-               (( 6 . 16) . (3 3))
-               (( 9 .  4) . (3 3 3))
-               (( 9 .  8) . (3 3 3))
-               (( 9 . 16) . (3 3 3))
-               ((12 .  4) . (3 3 3 3))
-               ((12 .  8) . (3 3 3 3))
-               ((12 . 16) . (3 3 3 3))
-               ; Some common irregular time signatures
-               (( 5 .  8) . (3 2))
-               (( 8 .  8) . (3 3 2))
-               ))))
-
-      (if entry
-         (cdr entry)
-         '())))
+;;; Used for calls that include beat-grouping setting
+(define-public (set-time-signature num den . rest)
+  "Set properties for time signature @var{num/den}.
+If @var{rest} is present, it is used to make a default
+@code{beamSetting} rule."
+ (ly:export (apply make-beam-rule-time-signature-set
+                    (list num den rest))))
+
+(define-public (make-beam-rule-time-signature-set num den rest)
+  "Implement settings for new time signature.  Can be
+called from either make-time-signature-set (used by \time
+in parser) or set-time-signature (called from scheme code
+included in .ly file."
+
+  (define (make-default-beaming-rule context)
+   (override-property-setting
+    context
+    'beamSettings
+    (list (cons num den) 'end)
+    (list (cons '* (car rest)))))
 
   (let* ((set1 (make-property-set 'timeSignatureFraction (cons num den)))
         (beat (ly:make-moment 1 den))
         (len  (ly:make-moment num den))
         (set2 (make-property-set 'beatLength beat))
         (set3 (make-property-set 'measureLength len))
-        (set4 (make-property-set 'beatGrouping (if (pair? rest)
-                                                   (car rest)
-                                                   (standard-beat-grouping num den))))
-        (basic  (list set1 set2 set3 set4)))
+         (beaming-rule
+          (if (null? rest)
+              '()
+              (list (make-apply-context make-default-beaming-rule))))
+         (output (cons* set1 set2 set3 beaming-rule)))
     (descend-to-context
-     (context-spec-music (make-sequential-music basic) 'Timing) 'Score)))
+     (context-spec-music
+      (make-sequential-music output)
+       'Timing)
+     'Score)))
 
 (define-public (make-mark-set label)
-  "Make the music for the \\mark command."  
+  "Make the music for the \\mark command."
   (let* ((set (if (integer? label)
                  (context-spec-music (make-property-set 'rehearsalMark label)
                                      'Score)
@@ -552,9 +550,6 @@ of beat groupings "
          (set! (ly:music-property ev 'label) label)
          ch))))
 
-(define-public (set-time-signature num den . rest)
-  (ly:export (apply make-time-signature-set `(,num ,den . ,rest))))
-
 (define-safe-public (make-articulation name)
   (make-music 'ArticulationEvent
              'articulation-type name))
@@ -569,7 +564,7 @@ of beat groupings "
              'span-direction span-dir))
 
 (define-public (set-mus-properties! m alist)
-  "Set all of ALIST as properties of M." 
+  "Set all of ALIST as properties of M."
   (if (pair? alist)
       (begin
        (set! (ly:music-property m (caar alist)) (cdar alist))
@@ -624,11 +619,9 @@ of beat groupings "
 (define-public (empty-music)
   (ly:export (make-music 'Music)))
 
-;; Make a function that checks score element for being of a specific type. 
+;; Make a function that checks score element for being of a specific type.
 (define-public (make-type-checker symbol)
   (lambda (elt)
-    ;;(display symbol)
-    ;;(eq? #t (ly:grob-property elt symbol))
     (not (eq? #f (memq symbol (ly:grob-property elt 'interfaces))))))
 
 (define-public ((outputproperty-compatibility func sym val) grob g-context ao-context)
@@ -649,7 +642,7 @@ of beat groupings "
 
 ;;
 (define-public (smart-bar-check n)
-  "Make         a bar check that checks for a specific bar number. 
+  "Make         a bar check that checks for a specific bar number.
 "
   (let ((m (make-music 'ApplyContext)))
     (define (checker tr)
@@ -744,11 +737,11 @@ SkipEvent. Useful for extracting parts from crowded scores"
   (define (delete-prop context)
     (let* ((where (ly:context-property-where-defined context 'graceSettings))
           (current (ly:context-property where 'graceSettings))
-           (prop-settings (filter 
+           (prop-settings (filter
                             (lambda(x) (sym-grob-context? x sym grob context-name))
-                            current)) 
+                            current))
           (new-settings current))
-      (for-each (lambda(x) 
+      (for-each (lambda(x)
                  (set! new-settings (delete x new-settings)))
                prop-settings)
       (ly:context-set-property! where 'graceSettings new-settings)))
@@ -791,7 +784,7 @@ Syntax:
 
 (define-public (cue-substitute quote-music)
   "Must happen after quote-substitute."
-  
+
   (if (vector? (ly:music-property quote-music 'quoted-events))
       (let* ((dir (ly:music-property quote-music 'quoted-voice-direction))
             (main-voice (if (eq? 1 dir) 1 0))
@@ -800,7 +793,7 @@ Syntax:
             (return-value quote-music))
 
        (if (or (eq? 1 dir) (eq? -1 dir))
-           
+
            ;; if we have stem dirs, change both quoted and main music
            ;; to have opposite stems.
            (begin
@@ -830,7 +823,7 @@ Syntax:
                            (hash-ref quote-tab quoted-name #f)
                            #f)))
 
-    
+
     (if (string? quoted-name)
        (if (vector? quoted-vector)
            (begin
@@ -857,7 +850,7 @@ Syntax:
     (if (and (ly:music? m)
             (eq? (ly:music-property m 'error-found) #t))
        (set! found #t)))
-  
+
   (for-each signal (ly:music-property music 'elements))
   (signal (ly:music-property music 'element))
 
@@ -967,10 +960,10 @@ Syntax:
    (lambda (music parser)
 
      (music-map (quote-substitute (ly:parser-lookup parser 'musicQuotes))  music))
-   
+
    ;; switch-on-debugging
    (lambda (x parser) (music-map cue-substitute x))
+
    (lambda (x parser)
      (skip-as-needed x parser)
    )))
@@ -989,14 +982,14 @@ Syntax:
 ;;;;;;;;;;;;;;;;;
 ;; lyrics
 
-(define (apply-durations lyric-music durations) 
+(define (apply-durations lyric-music durations)
   (define (apply-duration music)
     (if (and (not (equal? (ly:music-length music) ZERO-MOMENT))
             (ly:duration?  (ly:music-property music 'duration)))
        (begin
          (set! (ly:music-property music 'duration) (car durations))
          (set! durations (cdr durations)))))
-  
+
   (music-map apply-duration lyric-music))
 
 
@@ -1319,14 +1312,14 @@ use GrandStaff as a context. "
                                   pcontext))
 
       ;; same as modern, but cautionary accidentals are printed for all sharp or flat
-      ;; tones specified by the key signature.  
+      ;; tones specified by the key signature.
        ((equal? style 'teaching)
        (set-accidentals-properties #f
                                    `(Staff ,(make-accidental-rule 'same-octave 0))
                                    `(Staff ,(make-accidental-rule 'same-octave 1)
                                           ,teaching-accidental-rule)
                                   context))
-      
+
       ;; do not set localKeySignature when a note alterated differently from
       ;; localKeySignature is found.
       ;; Causes accidentals to be printed at every note instead of
@@ -1363,7 +1356,7 @@ use GrandStaff as a context. "
 
 (define-public (mmrest-of-length mus)
   "Create a mmrest of exactly the same length as MUS."
-  
+
   (let* ((skip
          (make-multi-measure-rest
           (ly:make-duration 0 0) '())))
@@ -1379,7 +1372,7 @@ use GrandStaff as a context. "
     (if (pair? evs)
        (ly:music-property (car evs) 'pitch)
        #f)))
-       
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (extract-named-music music music-name)
@@ -1395,7 +1388,7 @@ from @code{music}."
                         (extract-named-music elt music-name)
                         (if (null? elts)
                             '()
-                            (map (lambda(x) 
+                            (map (lambda(x)
                                     (extract-named-music x music-name ))
                              elts)))))
               '())))