]> git.donarmstrong.com Git - lilypond.git/commitdiff
* Documentation/topdocs/NEWS.tely (Top): document new feature.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 5 May 2005 23:45:30 +0000 (23:45 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 5 May 2005 23:45:30 +0000 (23:45 +0000)
* Documentation/user/basic-notation.itely (Staff symbol): document
start/stop staff. Reference to ossia.ly

* input/test/ossia.ly: new example using stop and startStaff.

* lily/timing-engraver.cc: remove Timing_engraver::initialize(),
in other words, don't create "|" barline at start of the score.
(start_translation_timestep): don't set whichBar for start of score.

* input/regression/staff-halfway.ly: use new functionality.

* lily/staff-symbol-engraver.cc (try_music): take StaffSpanEvents,
start and stop staff based on events.

* scm/define-music-types.scm (music-descriptions): add StaffSpanEvent

* ly/declarations-init.ly (startStaff, stopStaff): new identifiers.

15 files changed:
ChangeLog
Documentation/topdocs/NEWS.tely
Documentation/user/basic-notation.itely
input/regression/staff-halfway.ly
input/test/ossia.ly
lily/clef-engraver.cc
lily/ledger-line-engraver.cc
lily/staff-symbol-engraver.cc
lily/system-start-delimiter.cc
lily/timing-engraver.cc
ly/declarations-init.ly
ly/engraver-init.ly
ly/property-init.ly
scm/define-context-properties.scm
scm/define-music-types.scm

index e404e8b53c76fd717f0a7f74b5320d432b9a2a95..00fa78aa6f6703b1d30993c74de91641511f46fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2005-05-06  Han-Wen Nienhuys  <hanwen@xs4all.nl>
+
+       * Documentation/topdocs/NEWS.tely (Top): document new feature.
+
+       * Documentation/user/basic-notation.itely (Staff symbol): document
+       start/stop staff. Reference to ossia.ly
+
+       * input/test/ossia.ly: new example using stop and startStaff.
+
+       * lily/timing-engraver.cc: remove Timing_engraver::initialize(),
+       in other words, don't create "|" barline at start of the score.
+       (start_translation_timestep): don't set whichBar for start of score.
+
+       * input/regression/staff-halfway.ly: use new functionality.
+
+       * lily/staff-symbol-engraver.cc (try_music): take StaffSpanEvents,
+       start and stop staff based on events.
+
+       * scm/define-music-types.scm (music-descriptions): add StaffSpanEvent
+
+       * ly/declarations-init.ly (startStaff, stopStaff): new identifiers.
+
 2005-05-05  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
        * Documentation/user/programming-interface.itely (How markups work
index 0fad6e2c9c5bdc664eca64d6c0c341682e57eb00..27e3a70d9d93bc47c360bd12a2e63a3f46ff4639 100644 (file)
@@ -33,6 +33,16 @@ See user manual, \NAME\
 
 @itemize @bullet
 
+@item
+Staves may be stopped and started halfway a line, e.g.
+
+@lilypond[relative=2,fragment,verbatim]
+b4 b \stopStaff b \startStaff b
+@end lilypond
+
+@noindent
+This feature has been sponsored by Hans Forbrich.
+
 @item
 Grid lines, vertical lines synchronized with notes, can be drawn across
 staves, by adding suitable engravers.
index 88f8588a6a008af6ccf42840f22adedd7ea871a3..1a765e23f169448196fca932b6a7ff6a9a184c3b 100644 (file)
@@ -766,6 +766,31 @@ with a set of horizontal lines, into a staff (plural `staves').  In our
 system, these lines are drawn using a separate layout object called
 staff symbol.
 
+The staff symbol may be tuned in the number, thickness and distannce
+of lines, using properties.  This is demonstrated in the example files
+@inputfileref{input/@/test,staff@/-lines@/.ly},
+@inputfileref{input/@/test,staff@/-size@/.ly}.
+
+In addition, staves may be started and stopped at will. This is done
+with @code{\startStaff} and @code{\stopStaff}.
+
+@lilypond[verbatim,relative=2,fragment]
+b4 b
+\override Staff.StaffSymbol #'line-count = 2
+\stopStaff  \startStaff
+b b
+\revert Staff.StaffSymbol #'line-count
+\stopStaff \startStaff
+b b  
+@end lilypond
+
+In combination with Frenched staves, this may be used to typeset ossia
+sections. An example is in @inputfileref{input/@/test@/,ossia.ly},
+shown here
+
+@cindex ossia
+
+@lilypondfile{ossia.ly}
 
 @cindex staff lines, setting number of
 @cindex staff lines, setting thickness of
@@ -774,16 +799,12 @@ staff symbol.
 
 @seealso
 
-Program reference: @internalsref{StaffSymbol}.
+Program reference: @internalsref{StaffSymbol}, @internalsref{StaffSpanEvent}.
 
 Examples: @inputfileref{input/@/test,staff@/-lines@/.ly},
+@inputfileref{input/@/test@/,ossia.ly},
 @inputfileref{input/@/test,staff@/-size@/.ly}.
 
-@refbugs
-
-If a staff is ended halfway a piece, the staff symbol may not end
-exactly on the bar line.
-
 
 @node Key signature
 @subsection Key signature
index 2c27b91155b7a46687b8dff98e2c3057f150bd70..ace3eebf7ec77c2aaeb14a9c6a546bb24f3a1bf5 100644 (file)
@@ -1,13 +1,15 @@
+\header {
+  texidoc = "Staves can be started and stopped at command. "
+}
 
-\header { texidoc = " Staves starting and ending halfway include clefs
-    and bar lines.  " }
+\version "2.5.23"
 
-\version "2.4.0"
+\paper {
+  raggedright = ##t
+}
 
-\score {
-    \new StaffGroup  \relative c''  <<
-       \new Staff { c4  c c c \bar "||" c c c c }
-       { \skip 4 \new Staff { c c c } }
-    >>
-       \layout {}             
-        }
+\relative c'' {
+  b b \stopStaff b b \startStaff
+  \clef bass
+  c,, c
+}
index bc7946472cdc0e69b69ec34a89d6c1ceeb32e78c..6f3ef1456f4a3af261c984ffa702de7358e6c267 100644 (file)
@@ -1,48 +1,36 @@
-\header { texidoc = "A temporary ossia in an instrumental part may
-    be printed using a separate, short staff. A simpler solution is 
-    also given: instantiate a full staff, and let 
-    @code{RemoveEmptyStaffContext} take out the unused parts.
-" }
 
-\version "2.4.0"
+\header { texidoc = "Ossia fragments can be done with starting and
+stopping staves. " }
 
-\score {
-    \relative c''
-    \new StaffGroup \with {
-       \remove "System_start_delimiter_engraver"
-       \override SpanBar #'glyph = #":"
-    } <<
+\version "2.5.23"
+\paper { raggedright = ##t }
 
-       %% solution 1
-       { c1 c1
-       <<
-           { c1 c1 } 
-           \new Staff \with {
-               \remove "Time_signature_engraver"
-               fontSize = #-2
-               \override StaffSymbol #'staff-space = #(magstep -2)  
-           } {
-               c,4^"ossia" es f fis g1
-           }
-       >>
-         c1 \break c c }
+<<
+  \new Staff \with
+  {
+    \remove "Time_signature_engraver"
+    fontSize = #-2
+    \override StaffSymbol #'staff-space = #(magstep -2)
+    firstClef = ##f
+  }
+  \relative c'' {
+    \stopStaff
+    \skip 2
 
-       %% solution 2
-       \new Staff \with {
-           fontSize = #-2
-           \override StaffSymbol #'staff-space = #(magstep -2)  
-         
-       } { R1*2 c,4^"ossia" es f fis g1 R1 * 3 }
-    >>
-    
+    \startStaff
+    \clef treble
+    bes8[^"ossia" g bes g]
+    \stopStaff
 
-    \layout {
-       raggedright= ##t
-       \context {\RemoveEmptyStaffContext}
-       \context {
-           \Score
-           \remove System_start_delimiter_engraver
-           }
-    }
-}
+    s2
 
+    \startStaff
+    f8 d g4 
+  }
+  \new Staff  \relative
+  {
+    \time 2/4
+    c4 c g' g a a g2
+  }
+
+>>
index da241a2d4b05c8ee58460919a297dcc4caff95d9..bed486a45e8b0bb12db2dd5bf8802e9d4e507f29 100644 (file)
@@ -131,16 +131,18 @@ Clef_engraver::inspect_clef_properties ()
   SCM octavation = get_property ("clefOctavation");
   SCM force_clef = get_property ("forceClef");
 
-  if (clefpos == SCM_EOL
-      || scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
-      || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
-      || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F
-      || to_boolean (force_clef))
+  if (clefpos == SCM_EOL 
+       || scm_equal_p (glyph, prev_glyph_) == SCM_BOOL_F
+       || scm_equal_p (clefpos, prev_cpos_) == SCM_BOOL_F
+       || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F
+       || to_boolean (force_clef))
     {
       set_glyph ();
-      create_clef ();
+      if (prev_cpos_ != SCM_BOOL_F || to_boolean (get_property ("firstClef")))
+       create_clef ();
 
-      clef_->set_property ("non-default", SCM_BOOL_T);
+      if (clef_)
+       clef_->set_property ("non-default", SCM_BOOL_T);
 
       prev_cpos_ = clefpos;
       prev_glyph_ = glyph;
index b077ff33799dab901439f4c28ae3fb4edac25367..c2a8335e6f9f639a9b8cbf8d1685c54d324707a7 100644 (file)
@@ -10,6 +10,9 @@
 #include "spanner.hh"
 #include "engraver.hh"
 
+/*
+  TODO: should sync with Staff_symbol_engraver.
+*/
 class Ledger_line_engraver : public Engraver
 {
   Spanner *span_;
index c3bc1c763cb0c246dfe14f3d602ad496ef4a7787..95c8ee9ab092e6a083704bab11fb224255c57dee 100644 (file)
@@ -6,29 +6,8 @@
   (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "score.hh"
-#include "paper-column.hh"
-#include "output-def.hh"
-#include "side-position-interface.hh"
-#include "engraver.hh"
-#include "moment.hh"
-
-/**
-   Manage the staff symbol.
-*/
-class Staff_symbol_engraver : public Engraver
-{
-public:
-  TRANSLATOR_DECLARATIONS (Staff_symbol_engraver);
-
-protected:
-  Spanner *span_;
-
-  virtual ~Staff_symbol_engraver ();
-  virtual void acknowledge_grob (Grob_info);
-  virtual void finalize ();
-  virtual void process_music ();
-};
+#include "staff-symbol-engraver.hh"
+#include "spanner.hh"
 
 Staff_symbol_engraver::~Staff_symbol_engraver ()
 {
@@ -37,77 +16,105 @@ Staff_symbol_engraver::~Staff_symbol_engraver ()
 
 Staff_symbol_engraver::Staff_symbol_engraver ()
 {
+  first_start_ = true; 
   span_ = 0;
+  span_events_[LEFT] = 0;
+  span_events_[RIGHT] = 0;
 }
 
-void
-Staff_symbol_engraver::process_music ()
+bool
+Staff_symbol_engraver::try_music (Music *music)
 {
-  if (!span_)
+  Direction d = to_dir (music->get_property ("span-direction"));
+  if (d)
     {
-      span_ = make_spanner ("StaffSymbol", SCM_EOL);
-
-      span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
+      span_events_[d] = music;
+      return true;
     }
+  
+  return false;
 }
 
 void
-Staff_symbol_engraver::finalize ()
+Staff_symbol_engraver::process_music ()
 {
-  if (span_)
+  if (span_events_[STOP])
     {
-      span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+      finished_span_ = span_;
+      span_ = 0;
     }
-  span_ = 0;
+
+  if (span_events_[START])
+    start_spanner ();
 }
 
+
 void
-Staff_symbol_engraver::acknowledge_grob (Grob_info s)
+Staff_symbol_engraver::initialize ()
 {
-  s.grob_->set_property ("staff-symbol", span_->self_scm ());
+  start_spanner ();
 }
 
-ADD_TRANSLATOR (Staff_symbol_engraver,
-               /* descr */ "Create the constellation of five (default) "
-               "staff lines.",
-               /* creats*/ "StaffSymbol",
-               /* accepts */ "",
-               /* acks  */ "grob-interface",
-               /* reads */ "",
-               /* write */ "");
-
-/****************************************************************/
+void
+Staff_symbol_engraver::start_spanner ()
+{
+  if (!span_)
+    {
+      span_ = make_spanner ("StaffSymbol", SCM_EOL);
+    }
+}
 
-class Tab_staff_symbol_engraver : public Staff_symbol_engraver
+void
+Staff_symbol_engraver::stop_spanner ()
 {
-public:
-  TRANSLATOR_DECLARATIONS (Tab_staff_symbol_engraver);
-protected:
-  virtual void process_music ();
-};
+  if (finished_span_ && !finished_span_->get_bound (RIGHT))
+    {
+      finished_span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+    }
+  finished_span_ = 0;
+}
 
 void
-Tab_staff_symbol_engraver::process_music ()
+Staff_symbol_engraver::stop_translation_timestep ()
 {
-  bool init = !span_;
-  Staff_symbol_engraver::process_music ();
-  if (init)
+  if ((span_events_[START] || first_start_)
+      && span_
+      && !span_->get_bound (LEFT))
     {
-      int k = scm_ilength (get_property ("stringTunings"));
-      if (k >= 0)
-       span_->set_property ("line-count", scm_int2num (k));
+      span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
+      first_start_ = false;
     }
+
+  span_events_[START] = 0;
+  span_events_[STOP] = 0;
+  stop_spanner ();
 }
 
-Tab_staff_symbol_engraver::Tab_staff_symbol_engraver ()
+void
+Staff_symbol_engraver::finalize ()
+{
+  finished_span_ = span_;
+  span_ = 0;
+  stop_spanner ();
+}
+
+void
+Staff_symbol_engraver::acknowledge_grob (Grob_info s)
 {
+
+  /*
+    Perhaps should try to take SeparationItem as bound of the staff
+    symbol?
+   */
+  if (span_)
+    s.grob_->set_property ("staff-symbol", span_->self_scm ());
 }
 
-ADD_TRANSLATOR (Tab_staff_symbol_engraver,
-               /* descr */ "Create a staff-symbol, but look at stringTunings for the number of lines."
+ADD_TRANSLATOR (Staff_symbol_engraver,
+               /* descr */ "Create the constellation of five (default) "
                "staff lines.",
                /* creats*/ "StaffSymbol",
-               /* accepts */ "",
+               /* accepts */ "staff-span-event",
                /* acks  */ "grob-interface",
-               /* reads */ "stringTunings",
+               /* reads */ "",
                /* write */ "");
index f079c7db13f94c7743ee8d1eed2b813463b237c7..972b264b5dd136225b52011d3f568fb288cf4a8a 100644 (file)
@@ -17,6 +17,7 @@
 #include "all-font-metrics.hh"
 #include "staff-symbol-referencer.hh"
 #include "lookup.hh"
+#include "item.hh"
 
 Stencil
 System_start_delimiter::staff_bracket (Grob *me, Real height)
@@ -71,11 +72,13 @@ MAKE_SCHEME_CALLBACK (System_start_delimiter, after_line_breaking, 1);
 SCM
 System_start_delimiter::after_line_breaking (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
+  Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (smob));
+  
   SCM gl = me->get_property ("glyph");
   if (ly_c_equal_p (gl, scm_makfrom0str ("bar-line")))
     {
       int count = 0;
+      Paper_column *left_column = me->get_bound (LEFT)->get_column ();  
 
       /*
        Get all coordinates, to trigger Hara kiri.
@@ -84,8 +87,13 @@ System_start_delimiter::after_line_breaking (SCM smob)
       Grob *common = common_refpoint_of_list (elts, me, Y_AXIS);
       for (SCM s = elts; scm_is_pair (s); s = scm_cdr (s))
        {
-         Interval v = unsmob_grob (scm_car (s))->extent (common, Y_AXIS);
-
+         Spanner *staff = dynamic_cast<Spanner*> (unsmob_grob (scm_car (s)));
+         if (!staff || 
+             staff->get_bound (LEFT)->get_column () != left_column)
+           continue;
+         
+         Interval v = staff->extent (common, Y_AXIS);
+         
          if (!v.is_empty ())
            count++;
        }
index 7660ba9a3e5166775b1456a1193ee6ee6b46d8ce..1dd76bc42d394551138e5724a7a52d28b5fe7a3e 100644 (file)
 #include "engraver.hh"
 #include "grob.hh"
 
-/**
-   Do time bookkeeping
-*/
+
+
 class Timing_engraver : public Timing_translator, public Engraver
 {
 protected:
-  /* Needed to know whether we're advancing in grace notes, or not. */
+  /* Need to know whether we're advancing in grace notes, or not. */
   Moment last_moment_;
 
   virtual void start_translation_timestep ();
-  virtual void initialize ();
   virtual void process_music ();
   virtual void stop_translation_timestep ();
 
@@ -30,27 +28,25 @@ public:
   TRANSLATOR_DECLARATIONS (Timing_engraver);
 };
 
+ADD_TRANSLATOR (Timing_engraver,
+               /* descr */ " Responsible for synchronizing timing information from staves.  "
+               "Normally in @code{Score}.  In order to create polyrhythmic music, "
+               "this engraver should be removed from @code{Score} and placed in "
+               "@code{Staff}. "
+               "\n\nThis engraver adds the alias @code{Timing} to its containing context.",
+               /* creats*/ "",
+               /* accepts */ "",
+               /* acks  */ "",
+               /* reads */ "automaticBars whichBar barAlways defaultBarType "
+               "skipBars timing measureLength measurePosition currentBarNumber",
+               /* write */ "");
+
+
 Timing_engraver::Timing_engraver ()
 {
   last_moment_.main_part_ = Rational (-1);
 }
 
-void
-Timing_engraver::initialize ()
-{
-  Timing_translator::initialize ();
-
-  SCM which = get_property ("whichBar");
-  Moment now = now_mom ();
-
-  /* Set the first bar of the score? */
-  if (!scm_is_string (which))
-    which = (now.main_part_ || now.main_part_ == last_moment_.main_part_)
-      ? SCM_EOL : scm_makfrom0str ("|");
-
-  context ()->set_property ("whichBar", which);
-}
-
 void
 Timing_engraver::process_music ()
 {
@@ -92,7 +88,8 @@ Timing_engraver::start_translation_timestep ()
     {
       SCM always = get_property ("barAlways");
 
-      if (start_of_measure || (to_boolean (always)))
+      if ((start_of_measure && last_moment_.main_part_ >= Moment (0))
+         || to_boolean (always))
        {
          /* should this work, or be junked?  See input/bugs/no-bars.ly */
          which = get_property ("defaultBarType");
@@ -109,15 +106,3 @@ Timing_engraver::stop_translation_timestep ()
   context ()->set_property ("whichBar", SCM_EOL);
   last_moment_ = now_mom ();
 }
-
-ADD_TRANSLATOR (Timing_engraver,
-               /* descr */ " Responsible for synchronizing timing information from staves.  "
-               "Normally in @code{Score}.  In order to create polyrhythmic music, "
-               "this engraver should be removed from @code{Score} and placed in "
-               "@code{Staff}. "
-               "\n\nThis engraver adds the alias @code{Timing} to its containing context.",
-               /* creats*/ "",
-               /* accepts */ "",
-               /* acks  */ "",
-               /* reads */ "automaticBars whichBar barAlways defaultBarType skipBars timing measureLength measurePosition currentBarNumber",
-               /* write */ "");
index a1379dcdf8780c21b57aba40aaa173e116abf2ed..598985e8d14952341545699463c999c9a6fc3730 100644 (file)
@@ -39,6 +39,8 @@ break = #(make-event-chord (list (make-penalty-music -10001 0)))
 noBreak = #(make-event-chord (list (make-penalty-music 10001 0)))
 pageBreak = #(make-event-chord (list (make-penalty-music -10001 -10001)))
 noPageBreak = #(make-event-chord (list (make-penalty-music 0 10001)))
+stopStaff = #(make-event-chord (list (make-span-event 'StaffSpanEvent STOP)))
+startStaff = #(make-event-chord (list (make-span-event 'StaffSpanEvent START)))
 
 
 %
index 0f5721ce4b87d0acb14b2f4507efe2403e7deaf2..300db4fabca16a8a2df41a0c1ae226c4c8b25628 100644 (file)
@@ -464,6 +464,7 @@ AncientRemoveEmptyStaffContext = \context {
   clefGlyph = #"clefs.G"
   clefPosition = #-2
   middleCPosition = #-6
+  firstClef = ##t
   
   defaultBarType = #"|"
   barNumberVisibility = #default-bar-number-visibility
index 49d6004b50371c9c2b66d914dada46d1cea72c0b..614fd0c9ec6b5b37ca29cb8b3f62f5d1de061ffd 100644 (file)
@@ -10,18 +10,18 @@ slurUp = \override Slur  #'direction = #1
 slurDown = \override Slur  #'direction = #-1
 slurNeutral = \revert Slur #'direction 
 
-% There's also dash, but setting dash period/length should be fixed.
+%% There's also dash, but setting dash period/length should be fixed.
 slurDashed = {
-       \override Slur #'dash-period = #0.75
-       \override Slur #'dash-fraction = #0.4
+  \override Slur #'dash-period = #0.75
+  \override Slur #'dash-fraction = #0.4
 }
 slurDotted = {
-       \override Slur  #'dash-period = #0.75
-       \override Slur #'dash-fraction = #0.1
+  \override Slur  #'dash-period = #0.75
+  \override Slur #'dash-fraction = #0.1
 }
 slurSolid = {
-       \revert Slur #'dash-period
-       \revert Slur #'dash-fraction
+  \revert Slur #'dash-period
+  \revert Slur #'dash-fraction
 }
 
 
@@ -42,9 +42,9 @@ tieDotted = \override Tie  #'dashed = #1
 tieSolid = \revert Tie #'dashed
 
 setEasyHeads = \sequential {
-       \override NoteHead #'print-function = #Note_head::brew_ez_stencil
-       \override NoteHead #'Y-extent-callback = #'()
-       \override NoteHead #'X-extent-callback = #'()
+  \override NoteHead #'print-function = #Note_head::brew_ez_stencil
+  \override NoteHead #'Y-extent-callback = #'()
+  \override NoteHead #'X-extent-callback = #'()
 }
 
 aikenHeads = \set shapeNoteStyles = ##(do re mi fa #f la ti)
@@ -91,22 +91,22 @@ voiceFour = #(context-spec-music (make-voice-props-set 3) 'Voice)
 
        
 tiny = 
-       \set fontSize = #-2
+\set fontSize = #-2
 
 small = 
-       \set fontSize = #-1
+\set fontSize = #-1
 
 normalsize = {
-       \set fontSize = #0
+  \set fontSize = #0
 }
 
 
-% End the incipit and print a ``normal line start''.
+%% End the incipit and print a ``normal line start''.
 endincipit =  \context Staff {
-    \partial 16 s16  % Hack to handle e.g. \bar ".|" \endincipit
-    \once \override Staff.Clef  #'full-size-change = ##t
-    \once \override Staff.Clef  #'non-default = ##t
-    \bar ""
+  \partial 16 s16  % Hack to handle e.g. \bar ".|" \endincipit
+  \once \override Staff.Clef  #'full-size-change = ##t
+  \once \override Staff.Clef  #'non-default = ##t
+  \bar ""
 }
 
 autoBeamOff = \set autoBeaming = ##f
index cac8840c94ced51c5a88c6595fa2681899033ded..5583927759a0d0d81b7e6954e8456f033b5c1198 100644 (file)
@@ -210,6 +210,8 @@ switches by a thin line")
 determines where fingerings are put relative to the chord being
 fingered.")
 
+     (firstClef ,boolean? "If true, create a new clef when starting a
+staff.")
      (forceClef ,boolean? "Show clef symbol, even if it has not
 changed. Only active for the first clef after the property is set, not
 for the full staff.")
index 6d8a2c8ea9bfb0caedfdde95a7f0ec3dd6e2112a..84feed3899ac75eb4f9fcd57d0c281d4202cee05 100644 (file)
@@ -176,6 +176,18 @@ Syntax: @var{note}\\cr
        (internal-class-name . "Event")
        (types . (general-music extender-event event))
        ))
+
+    
+    (EventChord
+     . (
+       (description .  "Internally used to group a set of events.")
+       (internal-class-name . "Music")
+       (iterator-ctor . ,Event_chord_iterator::constructor)
+       (length-callback . ,Music_sequence::maximum_length_callback)
+       (to-relative-callback . ,Music_sequence::event_chord_relative_callback)
+       (types . (general-music event-chord simultaneous-music))
+       ))
+
     (FingerEvent
      . (
        (description . "Specify what finger to use for this note.")
@@ -310,6 +322,19 @@ Syntax
        (types . (general-music event rhythmic-event multi-measure-rest-event))
        ))
     
+    (MultiMeasureRestMusicGroup
+     . (
+       (description .  "Like sequential-music, but specifically intended
+to group start-mmrest, skip, stop-mmrest sequence. 
+
+Syntax @code{R2.*5} for 5 measures in 3/4 time.")
+       (internal-class-name . "Music")
+       (length-callback . ,Music_sequence::cumulative_length_callback)
+       (start-callback . ,Music_sequence::first_start_callback)
+       (iterator-ctor . ,Sequential_music_iterator::constructor)
+       (types . (general-music sequential-music))
+       ))
+    
     (MultiMeasureTextEvent
      . (
        (description . "Texts on mm rests. 
@@ -335,6 +360,19 @@ Syntax
        (types . (general-music event note-event rhythmic-event melodic-event))
        ))
     
+    (OutputPropertySetMusic
+     . (
+       (description .  "Set grob properties in objects
+individually. 
+
+Syntax @code{\\outputproperty @var{predicate} @var{prop}
+= @var{val}}.")
+
+       (internal-class-name . "Music")
+       (iterator-ctor . ,Output_property_music_iterator::constructor)
+       (types . (general-music layout-instruction))
+       ))
+    
     (OverrideProperty
      . (
        (description .  "Extend the definition of a graphical object.
@@ -458,19 +496,6 @@ Syntax \\sequential @{..@} or simply @{..@} .")
        (iterator-ctor . ,Sequential_music_iterator::constructor)
        (types . (general-music sequential-music))
        ))
-    
-    (MultiMeasureRestMusicGroup
-     . (
-       (description .  "Like sequential-music, but specifically intended
-to group start-mmrest, skip, stop-mmrest sequence. 
-
-Syntax @code{R2.*5} for 5 measures in 3/4 time.")
-       (internal-class-name . "Music")
-       (length-callback . ,Music_sequence::cumulative_length_callback)
-       (start-callback . ,Music_sequence::first_start_callback)
-       (iterator-ctor . ,Sequential_music_iterator::constructor)
-       (types . (general-music sequential-music))
-       ))
 
     (SoloOneEvent
      . (
@@ -517,7 +542,13 @@ Syntax NOTE(        and )NOTE")
        (internal-class-name . "Event")
        (types . (general-music span-event slur-event))
        ))
-
+    
+    (StaffSpanEvent
+     . ((description . "Start or  stop a staff symbol.")
+       (internal-class-name . "Event")
+       (types . (general-music event span-event staff-span-event))
+     ))
+    
     (StartPlayingEvent
      . (
        (description .  "Used internally to signal beginning of notes.")
@@ -526,19 +557,6 @@ Syntax NOTE(        and )NOTE")
        (types . (general-music event start-playing-event))
        ))
     
-    (OutputPropertySetMusic
-     . (
-       (description .  "Set grob properties in objects
-individually. 
-
-Syntax @code{\\outputproperty @var{predicate} @var{prop}
-= @var{val}}.")
-
-       (internal-class-name . "Music")
-       (iterator-ctor . ,Output_property_music_iterator::constructor)
-       (types . (general-music layout-instruction))
-       ))
-    
     (TextSpanEvent
      . (
        (description . "Start a text spanner like 8va.....|")
@@ -598,17 +616,6 @@ For example, transposed music.")
        (internal-class-name . "Music_wrapper")
        (types . (music-wrapper-music general-music relative-octave-music))
        ))
-    
-    (EventChord
-     . (
-       (description .  "Internally used to group a set of events.")
-       (internal-class-name . "Music")
-       (iterator-ctor . ,Event_chord_iterator::constructor)
-       (length-callback . ,Music_sequence::maximum_length_callback)
-       (to-relative-callback . ,Music_sequence::event_chord_relative_callback)
-       (types . (general-music event-chord simultaneous-music))
-       ))
-    
     (ScriptEvent
      . (
        (description .  "Add an articulation mark to a note. ")