]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/system-start-delimiter-engraver.cc: move from
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 25 Nov 2005 15:49:56 +0000 (15:49 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 25 Nov 2005 15:49:56 +0000 (15:49 +0000)
Nested_system_start_delimiter_engraver, rename
Nested_system_start_delimiter_engraver ->
System_start_delimiter_engraver.

* lily/nested-system-start-delimiter-engraver.cc (from_list): read
bracket type from hierarchy.

ChangeLog
Documentation/topdocs/NEWS.tely
input/regression/system-start-nesting.ly
lily/mark-engraver.cc
lily/nested-system-start-delimiter-engraver.cc [deleted file]
lily/system-start-delimiter-engraver.cc
ly/engraver-init.ly
scm/define-context-properties.scm

index 1fbc93882966f1ae7ad681acb2f6203666c5fd2b..9ad98a2b9d4797f06caf8b0fcfae539d28f61ff1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2005-11-25  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * lily/system-start-delimiter-engraver.cc: move from
+       Nested_system_start_delimiter_engraver, rename
+       Nested_system_start_delimiter_engraver ->
+       System_start_delimiter_engraver.
+
        * lily/nested-system-start-delimiter-engraver.cc (from_list): read
        bracket type from hierarchy.
 
index 8a4462a3e9e7195ca794078f69ef284593b3abca..0146cd0ec455cdd78329cf5cc4c5208422391887 100644 (file)
@@ -53,9 +53,8 @@ delimiters,
 @lilypond[raggedright]
 \new StaffGroup 
 \relative <<
-  \set StaffGroup.systemStartDelimiters
-     = #'(SystemStartSquare SystemStartBracket SystemStartSquare)
-  \set StaffGroup.systemStartDelimiterHierarchy = #'((a (b)) c)
+  \set StaffGroup.systemStartDelimiterHierarchy
+    = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
   \new Staff { c1 }
   \new Staff { c1 }
   \new Staff { c1 }
index 7c30e52c3b0fc21f8ef291577970e6157c97fc43..5f5ff48d24099281cfccd3db1e41f0ad106284b5 100644 (file)
@@ -9,15 +9,10 @@
   raggedright = ##t
 }
 
-\new StaffGroup \with {
-  \remove "System_start_delimiter_engraver"
-  \consists "Nested_system_start_delimiter_engraver"
-}
+\new StaffGroup
 \relative <<
-  \set StaffGroup.systemStartDelimiters =
-   #'(SystemStartSquare SystemStartBracket SystemStartSquare)
-  
-  \set StaffGroup.systemStartDelimiterHierarchy = #'((a (b)) c)
+  \set StaffGroup.systemStartDelimiterHierarchy
+    = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
   \new Staff { c1 }
   \new Staff { c1 }
   \new Staff { c1 }
index 0215ce4b8e42545c3a66a0c0fa80825487b55785..82fc31ba39acbaf25cadce9efe20271baaf104c4 100644 (file)
@@ -23,19 +23,20 @@ using namespace std;
 */
 class Mark_engraver : public Engraver
 {
+
+  void create_items (Music *);
+  Item *text_;
+  Music *mark_ev_;
+
 public:
   TRANSLATOR_DECLARATIONS (Mark_engraver);
+
 protected:
-  Item *text_;
-protected:
-  void stop_translation_timestep ();
-  DECLARE_ACKNOWLEDGER (bar_line);
-  void create_items (Music *);
   virtual bool try_music (Music *ev);
   void process_music ();
+  void stop_translation_timestep ();
 
-private:
-  Music *mark_ev_;
+  DECLARE_ACKNOWLEDGER (bar_line);
 };
 
 Mark_engraver::Mark_engraver ()
diff --git a/lily/nested-system-start-delimiter-engraver.cc b/lily/nested-system-start-delimiter-engraver.cc
deleted file mode 100644 (file)
index 4bed89d..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
-  new-system-start-delimiter-engraver.cc -- implement
-  Nested_system_start_delimiter_engraver
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#include "side-position-interface.hh"
-#include "system-start-delimiter.hh"
-#include "engraver.hh"
-#include "staff-symbol.hh"
-#include "pointer-group-interface.hh"
-#include "paper-column.hh"
-#include "output-def.hh"
-#include "spanner.hh"
-
-
-struct Bracket_nesting_node
-{
-public:
-  virtual ~Bracket_nesting_node(){}
-  virtual bool add_staff (Grob *) { return false; }
-  virtual void add_support (Grob *) { }
-  virtual void set_bound (Direction, Grob *){}
-  virtual void set_nesting_support (Grob*) {}
-  virtual void create_grobs (Engraver*, SCM) {}
-};
-
-struct Bracket_nesting_group : public Bracket_nesting_node
-{
-  Spanner *delimiter_;
-  Link_array<Bracket_nesting_node> children_;
-  SCM symbol_;
-
-  void from_list (SCM ); 
-  virtual void add_support (Grob *grob);
-  virtual bool add_staff (Grob *grob);
-  virtual void set_nesting_support (Grob*);
-  virtual void set_bound (Direction, Grob *grob);
-  virtual void create_grobs (Engraver*, SCM);
-  ~Bracket_nesting_group ();
-  Bracket_nesting_group ();
-};
-
-
-struct Bracket_nesting_staff : public Bracket_nesting_node
-{
-  Grob *staff_;
-
-  Bracket_nesting_staff (Grob *s) { staff_ = s; }
-  virtual bool add_staff (Grob *);
-};
-
-
-Bracket_nesting_group::Bracket_nesting_group ()
-{
-  symbol_ = SCM_EOL;
-  delimiter_ = 0;
-}
-
-bool
-Bracket_nesting_staff::add_staff (Grob *g)
-{
-  if (!staff_)
-    {
-      staff_ = g;
-      return true;
-    }
-  return false;
-}
-
-void
-Bracket_nesting_group::create_grobs (Engraver *engraver, SCM default_type)
-{
-  SCM type = scm_is_symbol (symbol_) ? symbol_ : default_type;
-  delimiter_ = make_spanner_from_properties (engraver, type,
-                                            SCM_EOL, ly_symbol2string (type).to_str0 ());
-
-  for (int i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->create_grobs (engraver, default_type);
-    }
-}
-
-void
-Bracket_nesting_group::add_support (Grob *g)
-{
-  Side_position_interface::add_support (g, delimiter_);
-  for (int i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->add_support (g);
-    }
-}
-
-Bracket_nesting_group::~Bracket_nesting_group ()
-{
-  for (int i = 0 ; i < children_.size (); i++)
-    delete children_[i];
-}
-
-void
-Bracket_nesting_group::set_bound (Direction d, Grob *g)
-{
-  delimiter_->set_bound (d, g);
-  for (int i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->set_bound (d, g);
-    }
-}
-
-void
-Bracket_nesting_group::set_nesting_support (Grob *parent)
-{
-  if (parent)
-    Side_position_interface::add_support (delimiter_, parent);
-  
-  for (int i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->set_nesting_support (delimiter_);
-    }
-}
-
-
-void
-Bracket_nesting_group::from_list (SCM x)
-{
-  for (SCM s = x; scm_is_pair (s); s = scm_cdr (s))
-    {
-      SCM entry = scm_car (s);
-      if (scm_is_pair (entry))
-       {
-         Bracket_nesting_group *node = new Bracket_nesting_group;
-         node->from_list (entry);
-         children_.push (node);
-       }
-      else
-       {
-         children_.push (new Bracket_nesting_staff (0));
-       }
-
-      if (scm_is_symbol (entry))
-       symbol_ = entry;
-    }
-}
-
-bool
-Bracket_nesting_group::add_staff (Grob *grob)
-{
-  for (int i = 0; i < children_.size (); i++)
-    {
-      if (children_[i]->add_staff (grob))
-       {
-         Pointer_group_interface::add_grob (delimiter_, ly_symbol2scm ("elements"), grob);
-         return true;
-       }
-    }
-
-  return false;
-}
-
-
-
-
-/****************/
-
-class Nested_system_start_delimiter_engraver : public Engraver
-{
-public:
-  TRANSLATOR_DECLARATIONS (Nested_system_start_delimiter_engraver);
-
-protected:
-  Bracket_nesting_group *nesting_;
-  
-  DECLARE_ACKNOWLEDGER (system_start_delimiter);
-  DECLARE_ACKNOWLEDGER (staff_symbol);
-
-  void process_music ();
-  virtual void finalize ();
-};
-
-Nested_system_start_delimiter_engraver::Nested_system_start_delimiter_engraver ()
-{
-  nesting_ = 0;
-}
-
-
-
-void
-Nested_system_start_delimiter_engraver::process_music ()
-{
-  if (!nesting_)
-    {
-      nesting_ = new Bracket_nesting_group ();
-      SCM hierarchy = get_property ("systemStartDelimiterHierarchy");
-      SCM delimiter_name = get_property ("systemStartDelimiter");
-
-      nesting_->from_list (hierarchy);
-      nesting_->create_grobs (this, delimiter_name);
-      nesting_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
-    }
-}
-
-void
-Nested_system_start_delimiter_engraver::finalize ()
-{
-  if (nesting_)
-    {
-      nesting_->set_bound (RIGHT,
-                          unsmob_grob (get_property ("currentCommandColumn")));
-      nesting_->set_nesting_support (0);
-    }
-}
-
-void
-Nested_system_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf)
-{
-  Grob *staff = inf.grob();
-  bool succ = nesting_->add_staff (staff);
-
-  if (!succ)
-    {
-      nesting_->children_.push  (new Bracket_nesting_staff (0));
-      nesting_->add_staff (staff);
-    }
-}
-
-
-void
-Nested_system_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
-{
-  nesting_->add_support (inf.grob ());
-}
-
-#include "translator.icc"
-
-ADD_ACKNOWLEDGER (Nested_system_start_delimiter_engraver, staff_symbol);
-ADD_ACKNOWLEDGER (Nested_system_start_delimiter_engraver, system_start_delimiter);
-
-ADD_TRANSLATOR (Nested_system_start_delimiter_engraver,
-               /* doc */ "Creates a system start delimiter (ie. SystemStart@{Bar, Brace, Bracket@} spanner",
-               /* create */ "SystemStartSquare SystemStartBrace SystemStartBracket SystemStartBar",
-               /* accept */ "",
-               /* read */ "systemStartDelimiter systemStartDelimiterHierarchy currentCommandColumn",
-               /* write */ "");
index 293006d9aa05db7f37dab54ae1ea5c1d753ebce2..a8414f932b5232603d3b225c943024c86c8e944e 100644 (file)
 /*
-  system-start-delimiter-engraver.cc -- implement System_start_delimiter_engraver
+  System-start-delimiter-engraver.cc -- implement
+  System_start_delimiter_engraver
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
 */
 
 #include "engraver.hh"
 
+#include "side-position-interface.hh"
 #include "system-start-delimiter.hh"
 #include "staff-symbol.hh"
 #include "pointer-group-interface.hh"
 #include "paper-column.hh"
 #include "output-def.hh"
 #include "spanner.hh"
-#include "side-position-interface.hh"
 
-class System_start_delimiter_engraver : public Engraver
+struct Bracket_nesting_node
 {
 public:
-  TRANSLATOR_DECLARATIONS (System_start_delimiter_engraver);
+  virtual ~Bracket_nesting_node(){}
+  virtual bool add_staff (Grob *) { return false; }
+  virtual void add_support (Grob *) { }
+  virtual void set_bound (Direction, Grob *){}
+  virtual void set_nesting_support (Grob*) {}
+  virtual void create_grobs (Engraver*, SCM) {}
+};
 
-protected:
+struct Bracket_nesting_group : public Bracket_nesting_node
+{
   Spanner *delimiter_;
-  DECLARE_ACKNOWLEDGER (system_start_delimiter);
-  DECLARE_ACKNOWLEDGER (staff_symbol);
+  Link_array<Bracket_nesting_node> children_;
+  SCM symbol_;
+
+  void from_list (SCM ); 
+  virtual void add_support (Grob *grob);
+  virtual bool add_staff (Grob *grob);
+  virtual void set_nesting_support (Grob*);
+  virtual void set_bound (Direction, Grob *grob);
+  virtual void create_grobs (Engraver*, SCM);
+  ~Bracket_nesting_group ();
+  Bracket_nesting_group ();
+};
 
-  void process_music ();
-  virtual void finalize ();
+
+struct Bracket_nesting_staff : public Bracket_nesting_node
+{
+  Grob *staff_;
+
+  Bracket_nesting_staff (Grob *s) { staff_ = s; }
+  virtual bool add_staff (Grob *);
 };
 
+
+Bracket_nesting_group::Bracket_nesting_group ()
+{
+  symbol_ = SCM_EOL;
+  delimiter_ = 0;
+}
+
+bool
+Bracket_nesting_staff::add_staff (Grob *g)
+{
+  if (!staff_)
+    {
+      staff_ = g;
+      return true;
+    }
+  return false;
+}
+
 void
-System_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf)
+Bracket_nesting_group::create_grobs (Engraver *engraver, SCM default_type)
 {
-  Pointer_group_interface::add_grob (delimiter_, ly_symbol2scm ("elements"), inf.grob ());
+  SCM type = scm_is_symbol (symbol_) ? symbol_ : default_type;
+  delimiter_ = make_spanner_from_properties (engraver, type,
+                                            SCM_EOL, ly_symbol2string (type).to_str0 ());
+
+  for (int i = 0 ; i < children_.size (); i++)
+    {
+      children_[i]->create_grobs (engraver, default_type);
+    }
 }
 
+void
+Bracket_nesting_group::add_support (Grob *g)
+{
+  Side_position_interface::add_support (g, delimiter_);
+  for (int i = 0 ; i < children_.size (); i++)
+    {
+      children_[i]->add_support (g);
+    }
+}
+
+Bracket_nesting_group::~Bracket_nesting_group ()
+{
+  for (int i = 0 ; i < children_.size (); i++)
+    delete children_[i];
+}
 
 void
-System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
+Bracket_nesting_group::set_bound (Direction d, Grob *g)
+{
+  delimiter_->set_bound (d, g);
+  for (int i = 0 ; i < children_.size (); i++)
+    {
+      children_[i]->set_bound (d, g);
+    }
+}
+
+void
+Bracket_nesting_group::set_nesting_support (Grob *parent)
 {
-  Side_position_interface::add_support (inf.grob (), delimiter_);
+  if (parent)
+    Side_position_interface::add_support (delimiter_, parent);
+  
+  for (int i = 0 ; i < children_.size (); i++)
+    {
+      children_[i]->set_nesting_support (delimiter_);
+    }
 }
 
+
+void
+Bracket_nesting_group::from_list (SCM x)
+{
+  for (SCM s = x; scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM entry = scm_car (s);
+      if (scm_is_pair (entry))
+       {
+         Bracket_nesting_group *node = new Bracket_nesting_group;
+         node->from_list (entry);
+         children_.push (node);
+       }
+      else if (entry == ly_symbol2scm ("SystemStartBrace")
+              || entry == ly_symbol2scm ("SystemStartBracket")
+              || entry == ly_symbol2scm ("SystemStartBar")
+              || entry == ly_symbol2scm ("SystemStartSquare")
+              )
+       symbol_ = entry;
+      else
+       {
+         children_.push (new Bracket_nesting_staff (0));
+       }
+    }
+}
+
+bool
+Bracket_nesting_group::add_staff (Grob *grob)
+{
+  for (int i = 0; i < children_.size (); i++)
+    {
+      if (children_[i]->add_staff (grob))
+       {
+         Pointer_group_interface::add_grob (delimiter_, ly_symbol2scm ("elements"), grob);
+         return true;
+       }
+    }
+
+  return false;
+}
+
+
+
+
+/****************/
+
+class System_start_delimiter_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS (System_start_delimiter_engraver);
+
+protected:
+  Bracket_nesting_group *nesting_;
+  
+  DECLARE_ACKNOWLEDGER (system_start_delimiter);
+  DECLARE_ACKNOWLEDGER (staff_symbol);
+
+  void process_music ();
+  virtual void finalize ();
+};
+
 System_start_delimiter_engraver::System_start_delimiter_engraver ()
 {
-  delimiter_ = 0;
+  nesting_ = 0;
 }
 
+
+
 void
 System_start_delimiter_engraver::process_music ()
 {
-  if (!delimiter_)
+  if (!nesting_)
     {
+      nesting_ = new Bracket_nesting_group ();
+      SCM hierarchy = get_property ("systemStartDelimiterHierarchy");
       SCM delimiter_name = get_property ("systemStartDelimiter");
-      delimiter_ = make_spanner_from_properties (this, delimiter_name, SCM_EOL,
-                                                ly_symbol2string (delimiter_name).to_str0 ());
 
-      delimiter_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
+      nesting_->from_list (hierarchy);
+      nesting_->create_grobs (this, delimiter_name);
+      nesting_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
     }
 }
+
 void
 System_start_delimiter_engraver::finalize ()
 {
-  if (delimiter_)
-    delimiter_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+  if (nesting_)
+    {
+      nesting_->set_bound (RIGHT,
+                          unsmob_grob (get_property ("currentCommandColumn")));
+      nesting_->set_nesting_support (0);
+    }
+}
+
+void
+System_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf)
+{
+  Grob *staff = inf.grob();
+  bool succ = nesting_->add_staff (staff);
+
+  if (!succ)
+    {
+      nesting_->children_.push  (new Bracket_nesting_staff (0));
+      nesting_->add_staff (staff);
+    }
+}
+
+
+void
+System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
+{
+  nesting_->add_support (inf.grob ());
 }
 
 #include "translator.icc"
 
-ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter);
 ADD_ACKNOWLEDGER (System_start_delimiter_engraver, staff_symbol);
+ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter);
 
 ADD_TRANSLATOR (System_start_delimiter_engraver,
                /* doc */ "Creates a system start delimiter (ie. SystemStart@{Bar, Brace, Bracket@} spanner",
-               /* create */ "SystemStartBar SystemStartBrace SystemStartBracket",
+               /* create */ "SystemStartSquare SystemStartBrace SystemStartBracket SystemStartBar",
                /* accept */ "",
-               /* read */ "systemStartDelimiter",
+               /* read */ "systemStartDelimiter systemStartDelimiterHierarchy currentCommandColumn",
                /* write */ "");
index efb04f5be9c0297dab27ac767771d4d865759757..90bfa08c87ee16b6323bd3c7b87245cc72f7d0a4 100644 (file)
@@ -87,7 +87,7 @@
 \context {
   \type "Engraver_group"
   \name InnerChoirStaff
-  \consists "Nested_system_start_delimiter_engraver"
+  \consists "System_start_delimiter_engraver"
   systemStartDelimiter = #'SystemStartBracket
 
   \accepts "Staff"
@@ -264,7 +264,7 @@ contained staves are not connected vertically."
 
   \consists "Span_bar_engraver"
   \consists "Span_arpeggio_engraver"
-  \consists "Nested_system_start_delimiter_engraver"
+  \consists "System_start_delimiter_engraver"
   systemStartDelimiter = #'SystemStartBrace
 
   \accepts "Staff"
@@ -298,7 +298,7 @@ contained staves are not connected vertically."
   \consists "Output_property_engraver" 
   systemStartDelimiter = #'SystemStartBracket
 
-  \consists "Nested_system_start_delimiter_engraver"
+  \consists "System_start_delimiter_engraver"
 
   \defaultchild "Staff"
   \accepts "Staff"
@@ -436,7 +436,7 @@ AncientRemoveEmptyStaffContext = \context {
   \consists "Timing_translator"
   \consists "Default_bar_line_engraver"
   \consists "Output_property_engraver"
-  \consists "Nested_system_start_delimiter_engraver"
+  \consists "System_start_delimiter_engraver"
   \consists "Mark_engraver"    
   \consists "Metronome_mark_engraver"  
   \consists "Break_align_engraver"
index 67f825cc6329d36d88a95075b2871b2366f381b1..a206a625a7ce3b4079194b832eca060d3e0ce9bf 100644 (file)
@@ -379,8 +379,6 @@ at beat positions by only drawing one beam over the beat.")
 
      (systemStartDelimiterHierarchy ,pair? "A nested list, indicating the nesting of a start delimiters.") 
 
-     (systemStartDelimiters ,list? "Grobs for nested system starts
-Overrides @code{systemStartDelimiter}.")
      (systemStartDelimiter ,symbol? "Which grob to make for the start of
 the system/staff? Set to @code{SystemStartBrace},
 @code{SystemStartBracket} or @code{SystemStartBar}.")