/*
- 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--2008 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"
#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"
return dynamic_cast<Paper_column const *> (me)->rank_;
}
+void
+Paper_column::set_rank (int rank)
+{
+ rank_ = rank;
+}
+
System *
Paper_column::get_system () const
{
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"
/* 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 "