]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge remote branch 'origin' into release/unstable release/2.15.2-1
authorGraham Percival <graham@percival-music.ca>
Sun, 19 Jun 2011 09:28:44 +0000 (10:28 +0100)
committerGraham Percival <graham@percival-music.ca>
Sun, 19 Jun 2011 09:28:44 +0000 (10:28 +0100)
Documentation/notation/staff.itely
input/regression/breathing-sign-custom-staff.ly [new file with mode: 0644]
input/regression/stanza-number.ly
lily/breathing-sign.cc
lily/completion-note-heads-engraver.cc
lily/multi-measure-rest.cc
lily/parser.yy
ly/predefined-guitar-fretboards.ly

index 8b99a71d6608f69bdc08f4956e09a11bdd9275d6..56f493617d36022ac048837f9981d54f986bef60 100644 (file)
@@ -1191,49 +1191,112 @@ written entirely in lower-case letters: @code{\addquote}.
 @node Formatting cue notes
 @unnumberedsubsubsec Formatting cue notes
 
-@cindex cues
 @cindex cue notes
-@cindex cue notes, formatting
 @cindex fragments
-@cindex quoting other voices
-@cindex cues, formatting
+@cindex cue notes, formatting
+@cindex formatting, cue notes
+@cindex voices, quoting
+
 
 @funindex \cueDuring
 @funindex cueDuring
+@funindex \cueClef
+@funindex cueClef
 @funindex \cueDuringWithClef
 @funindex cueDuringWithClef
 @funindex \quoteDuring
 @funindex quoteDuring
 
-The previous section explains how to create quotations.  The
-@code{\cueDuring} command is a more specialized form of
-@code{\quoteDuring}, being particularly useful for inserting cue
-notes into a part.  The syntax is as follows:
+@cindex notes, smaller
+@cindex smaller notes
+@cindex CueVoice
+
+The simplest way to format cue notes is to explicitly create a
+@code{CueVoice} context within the part.
+
+@lilypond[verbatim,relative=1]
+R1
+<<
+  { e2\rest r4. e8 }
+  \new CueVoice {
+    \stemUp d'8^"flute" c d e fis2
+  }
+>>
+d,4 r a r
+@end lilypond
+
+The @code{\cueClef} command can also be used with an explict
+@code{CueVoice} context if a change of clef is required and will print
+an appropriately sized clef for the cue notes. The @code{\cueClefUnset}
+command can then be used to switch back to the original clef, again with
+an appropriately sized clef.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+<<
+  { e2\rest r4. \cueClefUnset e,8 }
+  \new CueVoice {
+    \cueClef "treble" \stemUp d''8^"flute" c d e fis2
+  }
+>>
+d,,4 r a r
+@end lilypond
+
+The @code{\cueClef} and @code{\cueClefUnset} command can also be used
+without a @code{CueVoice} if required.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+\cueClef "treble"
+d'8^"flute" c d e fis2
+\cueClefUnset
+d,,4 r a r
+@end lilypond
+
+For more complex cue note placement, e.g including transposition, or
+inserting cue notes from multiple music sources the @code{\cueDuring} or
+@code{\cueDuringWithClef} commands can be used. These are more
+specialized form of @code{\quoteDuring}, see @ref{Quoting other voices}
+in the previous section.
+
+The syntax is:
 
 @example
-\cueDuring #@var{partname} #@var{voice} @var{music}
+\cueDuring #@var{quotename} #@var{direction} #@var{music}
 @end example
 
-This command copies only the notes and rests from the
-corresponding measures from @code{@var{partname}} into a
-@code{CueVoice} context.  The @code{CueVoice} is created
-implicitly, and occurs simultaneously with @code{@var{music}},
-which creates a polyphonic situation.  The @code{@var{voice}}
-argument determines whether the cue notes should be notated as a
-first or second voice; @code{UP} corresponds to the first voice,
-and @code{DOWN} corresponds to the second.
+and
+
+@example
+\cueDuringWithClef #@var{quotename} #@var{direction} #@var{clef} #@var{music}
+@end example
+
+The music from the corresponding measures of the @code{@var{quote name}}
+is added as @code{CueVoice} context and occurs simultaneously with the
+@code{@var{music}}, which creates a polyphonic situation.  The
+@code{@var{direction}} takes the argument @code{UP} or @code{DOWN}, and
+corresponds to first and second voices respectively determining how
+the cue notes are printed in relation to the other voice.
 
 @lilypond[verbatim,quote]
-oboe = \relative c'' {
-  r2 r8 d16(\f f e g f a)
-  g8 g16 g g2.
+fluteNotes = \relative c'' {
+  r2. c4 | d8 c d e fis2 | g2 d |
 }
-\addQuote "oboe" { \oboe }
 
-\new Voice \relative c'' {
-  \cueDuring #"oboe" #UP { R1 }
+oboeNotes = \relative c'' {
+  R1
+  s1*0^\markup { \tiny "flute" }
+  \cueDuring #"flute" #UP { R1 }
   g2 c,
 }
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+  \oboeNotes
+}
 @end lilypond
 
 @noindent
@@ -1273,6 +1336,7 @@ notes.
 fluteNotes = \relative c'' {
   r2. c4 d8 c d e fis2 g2 d2
 }
+
 bassoonNotes = \relative c {
   \clef bass
   R1
@@ -1282,7 +1346,9 @@ bassoonNotes = \relative c {
   \clef bass
   g4. b8 d2
 }
+
 \addQuote "flute" { \fluteNotes }
+
 \new Staff {
   \bassoonNotes
 }
@@ -1297,6 +1363,7 @@ print the original clef once the cue notes have finished.
 fluteNotes = \relative c'' {
   r2. c4 d8 c d e fis2 g2 d2
 }
+
 bassoonNotes = \relative c {
   \clef bass
   R1
@@ -1304,7 +1371,9 @@ bassoonNotes = \relative c {
   \cueDuringWithClef #"flute" #UP #"treble" { R1 }
   g4. b8 d2
 }
+
 \addQuote "flute" { \fluteNotes }
+
 \new Staff {
   \bassoonNotes
 }
@@ -1331,6 +1400,7 @@ piccoloNotes = \relative c''' {
   c8 c c e g2
   c4 g g2
 }
+
 bassClarinetNotes = \relative c' {
   \key d \major
   \transposition bes,
@@ -1347,33 +1417,13 @@ bassClarinetNotes = \relative c' {
 >>
 @end lilypond
 
-@cindex notes, smaller
-@cindex smaller notes
-
-A @code{CueVoice} context may be created explicitly if notes of a
-smaller size are required, for example to set an alternative
-sequence of notes more suitable for a higher or lower voice.
-
-@lilypond[verbatim,relative=2]
-\time 12/8
-\key ees \major
-g4 ees8 f4 g8
-\stemDown
-<<
-  { d4. bes4 c8 }
-  \new CueVoice
-  { g'4. f4 ees8 }
->>
-\stemUp
-d2. d2.
-@end lilypond
-
-@cindex removing cues
 @cindex removing cue notes
 @cindex cue notes, removing
 
 @funindex \killCues
 @funindex killCues
+@funindex \addInstrumentDefinition
+@funindex addInstrumentDefinition
 
 The @code{\killCues} command removes cue notes from a music
 expression, so the same music expression can be used to produce
@@ -1387,6 +1437,7 @@ tagged for selective inclusion in the score; see @ref{Using tags}.
 fluteNotes = \relative c'' {
   r2. c4 d8 c d e fis2 g2 d2
 }
+
 bassoonNotes = \relative c {
   \clef bass
   R1
@@ -1398,11 +1449,13 @@ bassoonNotes = \relative c {
   \tag #'part \clef bass
   g4. b8 d2
 }
+
 \addQuote "flute" { \fluteNotes }
 
 \new Staff {
   \bassoonNotes
 }
+
 \new StaffGroup <<
   \new Staff {
     \fluteNotes
@@ -1415,12 +1468,12 @@ bassoonNotes = \relative c {
 
 Alternatively, Clef changes and instrument labels can be
 collected into an instrument definition for repeated use, using
-@code{\addInstrumentDefinition} described in
-@ref{Instrument names}.
+@code{\addInstrumentDefinition} described in @ref{Instrument names}.
 
 
 @seealso
 Notation Reference:
+@ref{Quoting other voices},
 @ref{Instrument transpositions},
 @ref{Instrument names},
 @ref{Musical cues},
diff --git a/input/regression/breathing-sign-custom-staff.ly b/input/regression/breathing-sign-custom-staff.ly
new file mode 100644 (file)
index 0000000..98305b0
--- /dev/null
@@ -0,0 +1,13 @@
+\version "2.15.2"
+
+\header {
+  texidoc = "Breathing signs are positioned correctly on custom staves
+which use @code{line-positions}."
+}
+
+\relative c' {
+  \override Staff.StaffSymbol #'line-positions = #'(-7 -5 -3 -1)
+  b2 \breathe b
+  \override BreathingSign #'direction = #DOWN
+  \breathe
+}
index 28ed6567b8bdcc9e838a478e9cb85c751d8471d7..cfde182339c1dc16d57c68468a81ab3b3572ae55 100644 (file)
@@ -1,9 +1,9 @@
-\version "2.14.0"
+\version "2.15.2"
 
-\header { texidoc = "Stanza numbers are put left of their lyric.  They
-are aligned in a column."  }
-
-\layout { ragged-right = ##t }
+\header {
+  texidoc = "Stanza numbers are put left of their lyric.  They
+are aligned in a column."
+}
 
 \relative c'' { r4 r4 c4 c4 }
 \addlyrics {
@@ -13,9 +13,6 @@ are aligned in a column."  }
 }
 \addlyrics {
   \skip 2
-  \set stanza = "2."
+  \set stanza = \markup { 2. }
   FFFooooo8
 }
-
-
-
index 09fd1d7c516e7b35cd1ce85f1e944d7b9869ebd1..a59bd650703fe2aafc2ea40e58b2e85492c78a6b 100644 (file)
 
 #include "breathing-sign.hh"
 
-#include "staff-symbol-referencer.hh"
-#include "directional-element-interface.hh"
-#include "output-def.hh"
-#include "lookup.hh"
 #include "dimensions.hh"
 #include "direction.hh"
-#include "text-interface.hh"
+#include "directional-element-interface.hh"
 #include "font-interface.hh"
 #include "grob.hh"
-
-/*
-  TODO: thickness should be a grob property (unit: linethickness)
-  rather than hardwired to (staff_space / 6).
-*/
+#include "lookup.hh"
+#include "output-def.hh"
+#include "staff-symbol.hh"
+#include "staff-symbol-referencer.hh"
+#include "text-interface.hh"
 
 /*
   UGH : this is full of C&P code. Consolidate!  --hwn
@@ -177,14 +173,20 @@ Breathing_sign::offset_callback (SCM smob)
       set_grob_direction (me, d);
     }
 
-  Real inter = Staff_symbol_referencer::staff_space (me) / 2;
-  int sz = Staff_symbol_referencer::line_count (me) - 1;
-  return scm_from_double (inter * sz * d);
+  Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+  if (staff)
+    {
+      Interval iv = Staff_symbol::line_span (staff);
+      Real inter = Staff_symbol::staff_space (me) / 2;
+      return scm_from_double (inter * iv[d]);
+    }
+
+  return scm_from_double (0.0);
 }
 
 ADD_INTERFACE (Breathing_sign,
               "A breathing sign.",
-              
+
               /* properties */
               "direction "
               );
index 3dfe32b0e3ec7531335476fe67fe53b9d75d1661..a2c606f472897c58c6c17d221aa806902114a9dc 100644 (file)
@@ -33,14 +33,11 @@ using namespace std;
 #include "staff-symbol-referencer.hh"
 #include "stream-event.hh"
 #include "tie.hh"
+#include "tie-column.hh"
 #include "warn.hh"
 
 #include "translator.icc"
 
-/*
-  TODO: make matching rest engraver.
-*/
-
 /*
   How does this work?
 
@@ -58,13 +55,14 @@ using namespace std;
 
 class Completion_heads_engraver : public Engraver
 {
-  vector<Item*> notes_;
-  vector<Item*> prev_notes_;
+  vector<Item *> notes_;
+  vector<Item *> prev_notes_;
   // Must remember notes for explicit ties.
-  vector<Item*> tie_note_candidates_;
-  vector<Stream_event*> tie_note_candidate_events_;
-  vector<Grob*> ties_;
-  vector<Stream_event*> note_events_;
+  vector<Item *> tie_note_candidates_;
+  vector<Stream_event *> tie_note_candidate_events_;
+  vector<Grob *> ties_;
+  vector<Stream_event *> note_events_;
+  Spanner *tie_column_;
   Moment note_end_mom_;
   bool is_first_;
   Rational left_to_do_;
@@ -72,7 +70,7 @@ class Completion_heads_engraver : public Engraver
   Rational factor_;
 
   Moment next_barline_moment ();
-  Item *make_note_head (Stream_event*);
+  Item *make_note_head (Stream_event *);
 
 public:
   TRANSLATOR_DECLARATIONS (Completion_heads_engraver);
@@ -97,7 +95,7 @@ void
 Completion_heads_engraver::listen_note (Stream_event *ev)
 {
   note_events_.push_back (ev);
-  
+
   is_first_ = true;
   Moment now = now_mom ();
   Moment musiclen = get_event_length (ev, now);
@@ -107,7 +105,7 @@ Completion_heads_engraver::listen_note (Stream_event *ev)
 }
 
 /*
-  The duration _until_ the next barline.
+  The duration _until_ the next bar line.
 */
 Moment
 Completion_heads_engraver::next_barline_moment ()
@@ -122,7 +120,7 @@ Completion_heads_engraver::next_barline_moment ()
   return (*l - *e);
 }
 
-Item*
+Item *
 Completion_heads_engraver::make_note_head (Stream_event *ev)
 {
   Item *note = make_item ("NoteHead", ev->self_scm ());
@@ -143,7 +141,7 @@ Completion_heads_engraver::process_music ()
 {
   if (!is_first_ && !left_to_do_)
     return;
-  
+
   is_first_ = false;
 
   Moment now = now_mom ();
@@ -209,16 +207,23 @@ Completion_heads_engraver::process_music ()
        event->unprotect ();
       notes_.push_back (note);
     }
-  
+
   if (prev_notes_.size () == notes_.size ())
     {
       for (vsize i = 0; i < notes_.size (); i++)
        make_tie (prev_notes_[i], notes_[i]);
     }
 
+  if (ties_.size () && !tie_column_)
+    tie_column_ = make_spanner ("TieColumn", ties_[0]->self_scm ());
+
+  if (tie_column_)
+    for (vsize i = ties_.size (); i--;)
+      Tie_column::add_tie (tie_column_, ties_[i]);
+
   left_to_do_ -= note_dur.get_length ();
   if (left_to_do_)
-    get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length());
+    get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length ());
   /*
     don't do complicated arithmetic with grace notes.
   */
@@ -234,11 +239,12 @@ Completion_heads_engraver::make_tie (Grob *left, Grob *right)
   Tie::set_head (p, RIGHT, right);
   ties_.push_back (p);
 }
-                                    
+
 void
 Completion_heads_engraver::stop_translation_timestep ()
 {
   ties_.clear ();
+  tie_column_ = 0;
 
   if (notes_.size ())
     prev_notes_ = notes_;
@@ -263,23 +269,26 @@ Completion_heads_engraver::start_translation_timestep ()
 
 Completion_heads_engraver::Completion_heads_engraver ()
 {
+  tie_column_ = 0;
 }
 
 ADD_TRANSLATOR (Completion_heads_engraver,
                /* doc */
                "This engraver replaces @code{Note_heads_engraver}.  It plays"
                " some trickery to break long notes and automatically tie them"
-               " into the next measure."
-               ,
+               " into the next measure.",
+
                /* create */
                "NoteHead "
                "Tie "
-               ,
+               "TieColumn ",
+
                /* read */
-               "middleCPosition "
-               "measurePosition "
                "measureLength "
-               ,
+               "measurePosition "
+               "middleCPosition "
+               "timing ",
+
                /* write */
                "completionBusy "
                );
index 69b71c9a3115f1a0a2d3c9aed395ad4ef746d8f1..1a9f5e11a7801d9f50cc57e5ad3bec1375be6b86 100644 (file)
@@ -127,7 +127,7 @@ measure_duration_log (Grob *me)
   bool round = to_boolean (me->get_property ("round-to-longer-rest"));
   Rational ml = (unsmob_moment (sml)) ? unsmob_moment (sml)->main_part_ : Rational (1);
 
-  double duration_log = -log2 (ml.Rational::to_double ());
+  double duration_log = -log_2 (ml.Rational::to_double ());
   int measure_duration_log = int (ceil (duration_log));
   if (round && duration_log - measure_duration_log < 0)
     measure_duration_log--;
index 0bb4c152f273455dd1e02f201803e66d8eeaa685..9b46bfe3cc3d16c1bd0e8ace4eae21c96c2ab9b1 100644 (file)
@@ -1447,7 +1447,7 @@ simple_string: STRING {
 scalar: string {
                $$ = $1;
        }
-       | LYRICS_STRING {
+       | lyric_element {
                $$ = $1;
        }
        | bare_number {
index 698cc6eadb80ba5ac408b95e09e0370b22ec652c..241b3cd56c8ff4b260915a50ef380df67fd4ad81 100644 (file)
                         #"x;x;4-3;3-2;4-4;1-1;"
 \storePredefinedDiagram #default-fret-table \chordmode {ees:aug}
                         #guitar-tuning
-                        #"3-3;2-2;1-1;o;o;3-4"
+                        #"3-3;2-2;1-1;o;o;3-4;"
 \storePredefinedDiagram #default-fret-table \chordmode {ees:dim}
                         #guitar-tuning
                         #(offset-fret 1 (chord-shape 'd:dim guitar-tuning))