]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-column.cc
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / paper-column.cc
index 0eb40d1b97a48c8297ff378de172d65de6cd5072..24d76a163abbacbafa63eabc06948b0a08da79b2 100644 (file)
@@ -1,9 +1,20 @@
 /*
-  paper-column.cc -- implement Paper_column
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 1997--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
-  (c) 1997--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 "paper-column.hh"
@@ -18,6 +29,7 @@
 #include "output-def.hh"
 #include "paper-score.hh"
 #include "pointer-group-interface.hh"
+#include "rhythmic-head.hh"
 #include "separation-item.hh"
 #include "skyline-pair.hh"
 #include "spaceable-grob.hh"
@@ -45,6 +57,12 @@ Paper_column::get_rank (Grob const *me)
   return dynamic_cast<Paper_column const *> (me)->rank_;
 }
 
+void
+Paper_column::set_rank (int rank)
+{
+  rank_ = rank;
+}
+
 System *
 Paper_column::get_system () const
 {
@@ -313,13 +331,40 @@ Paper_column::before_line_breaking (SCM grob)
   return SCM_UNSPECIFIED;
 }
 
+/* FIXME: This is a hack that we use to identify columns that used to
+   contain note-heads but whose note-heads were moved by one of the ligature
+   engravers. Once the ligature engravers are fixed to behave nicely, this
+   function can be removed.
+*/
+bool
+Paper_column::is_extraneous_column_from_ligature (Grob *me)
+{
+  if (!is_musical (me))
+    return false;
+
+  // If all the note-heads that I think are my children actually belong
+  // to another column, then I am extraneous.
+  extract_grob_set (me, "elements", elts);
+  bool has_notehead = false;
+  for (vsize i = 0; i < elts.size (); i++)
+    {
+      if (Rhythmic_head::has_interface (elts[i]))
+       {
+         has_notehead = true;
+         if (dynamic_cast<Item*> (elts[i])->get_column () == me)
+           return false;
+       }
+    }
+  return has_notehead;
+}
+
 
 ADD_INTERFACE (Paper_column,
               "@code{Paper_column} objects form the top-most X@tie{}parents"
-              " for items.  There are two types of columns: musical columns,"
-              " where are attached to, and non-musical columns, where"
-              " bar-lines, clefs, etc., are attached to.  The spacing engine"
-              " determines the X@tie{}positions of these objects.\n"
+              " for items.  There are two types of columns: musical and"
+              " non-musical, to which musical and non-musical objects are"
+              " attached respectively.  The spacing engine determines the"
+              " X@tie{}positions of these objects.\n"
               "\n"
               "They are numbered, the first (leftmost) is column@tie{}0."
               "  Numbering happens before line breaking, and columns are not"
@@ -331,11 +376,13 @@ ADD_INTERFACE (Paper_column,
               /* properties */
               "between-cols "
               "bounded-by-me "
+              "full-measure-extra-space "
               "grace-spacing "
               "labels "
               "line-break-system-details "
               "line-break-penalty "
               "line-break-permission "
+              "maybe-loose "
               "page-break-penalty "
               "page-break-permission "
               "page-turn-penalty "