]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/system-start-delimiter-engraver.cc
Doc-es: various updates.
[lilypond.git] / lily / system-start-delimiter-engraver.cc
index ee4bf6ef114a5265cbb595e91361c6c09647988b..b7a210e86956e01ed9a66f63d73dabcd60b7c4f7 100644 (file)
@@ -1,51 +1,60 @@
 /*
-  System-start-delimiter-engraver.cc -- implement
-  System_start_delimiter_engraver
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-  (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
 
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #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 "paper-column.hh"
+#include "pointer-group-interface.hh"
+#include "side-position-interface.hh"
 #include "spanner.hh"
+#include "staff-symbol.hh"
+#include "system-start-delimiter.hh"
+
+#include "translator.icc"
 
 struct Bracket_nesting_node
 {
 public:
-  virtual ~Bracket_nesting_node (){}
+  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) {}
+  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_;
-  vector<Bracket_nesting_node*> children_;
+  vector<Bracket_nesting_node *> children_;
   SCM symbol_;
 
-  void from_list (SCM ); 
+  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_nesting_support (Grob *);
   virtual void set_bound (Direction, Grob *grob);
-  virtual void create_grobs (Engraver*, SCM);
+  virtual void create_grobs (Engraver *, SCM);
   ~Bracket_nesting_group ();
   Bracket_nesting_group ();
 };
 
-
 struct Bracket_nesting_staff : public Bracket_nesting_node
 {
   Grob *staff_;
@@ -54,7 +63,6 @@ struct Bracket_nesting_staff : public Bracket_nesting_node
   virtual bool add_staff (Grob *);
 };
 
-
 Bracket_nesting_group::Bracket_nesting_group ()
 {
   symbol_ = SCM_EOL;
@@ -76,22 +84,19 @@ void
 Bracket_nesting_group::create_grobs (Engraver *engraver, SCM default_type)
 {
   SCM type = scm_is_symbol (symbol_) ? symbol_ : default_type;
-  delimiter_ = engraver->make_spanner (ly_symbol2string (type).c_str (), SCM_EOL);
+  delimiter_ = engraver->make_spanner (ly_symbol2string (type).c_str (),
+                                       SCM_EOL);
 
-  for (vsize i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->create_grobs (engraver, default_type);
-    }
+  for (vsize 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 (vsize i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->add_support (g);
-    }
+  for (vsize i = 0; i < children_.size (); i++)
+    children_[i]->add_support (g);
 }
 
 Bracket_nesting_group::~Bracket_nesting_group ()
@@ -103,10 +108,8 @@ void
 Bracket_nesting_group::set_bound (Direction d, Grob *g)
 {
   delimiter_->set_bound (d, g);
-  for (vsize i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->set_bound (d, g);
-    }
+  for (vsize i = 0; i < children_.size (); i++)
+    children_[i]->set_bound (d, g);
 }
 
 void
@@ -114,13 +117,10 @@ Bracket_nesting_group::set_nesting_support (Grob *parent)
 {
   if (parent)
     Side_position_interface::add_support (delimiter_, parent);
-  
-  for (vsize i = 0 ; i < children_.size (); i++)
-    {
-      children_[i]->set_nesting_support (delimiter_);
-    }
-}
 
+  for (vsize i = 0; i < children_.size (); i++)
+    children_[i]->set_nesting_support (delimiter_);
+}
 
 void
 Bracket_nesting_group::from_list (SCM x)
@@ -129,21 +129,18 @@ Bracket_nesting_group::from_list (SCM x)
     {
       SCM entry = scm_car (s);
       if (scm_is_pair (entry))
-       {
-         Bracket_nesting_group *node = new Bracket_nesting_group;
-         node->from_list (entry);
-         children_.push_back (node);
-       }
-      else if (entry == ly_symbol2scm ("SystemStartBrace")
-              || entry == ly_symbol2scm ("SystemStartBracket")
-              || entry == ly_symbol2scm ("SystemStartBar")
-              || entry == ly_symbol2scm ("SystemStartSquare")
-              )
-       symbol_ = entry;
+        {
+          Bracket_nesting_group *node = new Bracket_nesting_group;
+          node->from_list (entry);
+          children_.push_back (node);
+        }
+      else if (scm_is_eq (entry, ly_symbol2scm ("SystemStartBrace"))
+               || scm_is_eq (entry, ly_symbol2scm ("SystemStartBracket"))
+               || scm_is_eq (entry, ly_symbol2scm ("SystemStartBar"))
+               || scm_is_eq (entry, ly_symbol2scm ("SystemStartSquare")))
+        symbol_ = entry;
       else
-       {
-         children_.push_back (new Bracket_nesting_staff (0));
-       }
+        children_.push_back (new Bracket_nesting_staff (0));
     }
 }
 
@@ -153,18 +150,15 @@ Bracket_nesting_group::add_staff (Grob *grob)
   for (vsize i = 0; i < children_.size (); i++)
     {
       if (children_[i]->add_staff (grob))
-       {
-         Pointer_group_interface::add_grob (delimiter_, ly_symbol2scm ("elements"), grob);
-         return true;
-       }
+        {
+          Pointer_group_interface::add_grob (delimiter_,
+                                             ly_symbol2scm ("elements"), grob);
+          return true;
+        }
     }
-
   return false;
 }
 
-
-
-
 /****************/
 
 class System_start_delimiter_engraver : public Engraver
@@ -174,16 +168,16 @@ public:
 
 protected:
   Bracket_nesting_group *nesting_;
-  
-  DECLARE_ACKNOWLEDGER (system_start_delimiter);
-  DECLARE_ACKNOWLEDGER (system_start_text);
-  DECLARE_ACKNOWLEDGER (staff_symbol);
+
+  void acknowledge_system_start_delimiter (Grob_info);
+  void acknowledge_staff_symbol (Grob_info);
 
   void process_music ();
   virtual void finalize ();
 };
 
-System_start_delimiter_engraver::System_start_delimiter_engraver ()
+System_start_delimiter_engraver::System_start_delimiter_engraver (Context *c)
+  : Engraver (c)
 {
   nesting_ = 0;
 }
@@ -199,7 +193,8 @@ System_start_delimiter_engraver::process_music ()
 
       nesting_->from_list (hierarchy);
       nesting_->create_grobs (this, delimiter_name);
-      nesting_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
+      nesting_->set_bound (LEFT,
+                           unsmob<Grob> (get_property ("currentCommandColumn")));
     }
 }
 
@@ -209,7 +204,7 @@ System_start_delimiter_engraver::finalize ()
   if (nesting_)
     {
       nesting_->set_bound (RIGHT,
-                          unsmob_grob (get_property ("currentCommandColumn")));
+                           unsmob<Grob> (get_property ("currentCommandColumn")));
       nesting_->set_nesting_support (0);
 
       delete nesting_;
@@ -229,35 +224,38 @@ System_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf)
     }
 }
 
-
-
 void
-System_start_delimiter_engraver::acknowledge_system_start_text (Grob_info inf)
+System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
 {
   nesting_->add_support (inf.grob ());
 }
 
+
 void
-System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
+System_start_delimiter_engraver::boot ()
 {
-  nesting_->add_support (inf.grob ());
+  ADD_ACKNOWLEDGER (System_start_delimiter_engraver, staff_symbol);
+  ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter);
 }
 
-#include "translator.icc"
-
-ADD_ACKNOWLEDGER (System_start_delimiter_engraver, staff_symbol);
-ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter);
-ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_text);
-
 ADD_TRANSLATOR (System_start_delimiter_engraver,
-               /* doc */ "Creates a system start delimiter (ie. SystemStart@{Bar, Brace, Bracket@} spanner",
-               /* create */ "SystemStartSquare "
-               "SystemStartBrace "
-               "SystemStartBracket "
-               "SystemStartBar",
-               /* read */
-               "systemStartDelimiter "
-               "systemStartDelimiterHierarchy "
-               "currentCommandColumn",
-
-               /* write */ "");
+                /* doc */
+                "Create a system start delimiter (i.e., a"
+                " @code{SystemStartBar}, @code{SystemStartBrace},"
+                " @code{SystemStartBracket} or @code{SystemStartSquare}"
+                " spanner).",
+
+                /* create */
+                "SystemStartSquare "
+                "SystemStartBrace "
+                "SystemStartBracket "
+                "SystemStartBar ",
+
+                /* read */
+                "systemStartDelimiter "
+                "systemStartDelimiterHierarchy "
+                "currentCommandColumn ",
+
+                /* write */
+                ""
+               );