X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=c6b7c9c85c1aec0f9f5f9957937bd2b785f6b495;hb=0387f04497978e37b335a8b99eec905499d6ad0f;hp=8c9e0aea4eec10a8607358dc777557f795834a72;hpb=2eb63c6977706ba261e4ee0674c734a34b3ee904;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 8c9e0aea4e..c6b7c9c85c 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -3,28 +3,30 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2007 Han-Wen Nienhuys + (c) 1997--2008 Han-Wen Nienhuys */ #include "paper-column.hh" -#include "break-align-interface.hh" -#include "moment.hh" -#include "paper-score.hh" -#include "warn.hh" #include "axis-group-interface.hh" -#include "spaceable-grob.hh" -#include "text-interface.hh" -#include "lookup.hh" +#include "break-align-interface.hh" #include "font-interface.hh" -#include "output-def.hh" -#include "pointer-group-interface.hh" #include "grob-array.hh" -#include "system.hh" -#include "spring.hh" #include "lookup.hh" +#include "lookup.hh" +#include "moment.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" +#include "spring.hh" #include "string-convert.hh" +#include "system.hh" +#include "text-interface.hh" +#include "warn.hh" Grob * Paper_column::clone () const @@ -312,6 +314,33 @@ 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 (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"