X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-info.cc;h=a8f3f4c7b1c5320b1cfa34a2ddb9381fee193c5a;hb=7e0dab27123da5d52b90c81f70ac10669a34d45a;hp=d3a6378206ec04706d2b0c8561567be204ba62b2;hpb=7aabfb20c46e0a1de41698ddc6859ccd3a6dea85;p=lilypond.git diff --git a/lily/grob-info.cc b/lily/grob-info.cc index d3a6378206..a8f3f4c7b1 100644 --- a/lily/grob-info.cc +++ b/lily/grob-info.cc @@ -3,45 +3,80 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2003 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ -#include "grob.hh" #include "grob-info.hh" +#include "grob.hh" #include "music.hh" #include "translator-group.hh" +#include "context.hh" +#include "spanner.hh" +#include "item.hh" -Grob_info::Grob_info (Grob*s) +Grob_info::Grob_info (Translator *t, Grob *g) { - grob_ = s; - origin_trans_ = 0; + origin_trans_ = t; + grob_ = g; + start_end_ = START; } - Grob_info::Grob_info () { grob_ = 0; + start_end_ = START; origin_trans_ = 0; } -Music* -Grob_info::music_cause () - +Music * +Grob_info::music_cause () const { - SCM cause = grob_->get_grob_property ("cause"); + SCM cause = grob_->get_property ("cause"); return unsmob_music (cause); } -Link_array -Grob_info::origin_transes (Translator* end) const +vector +Grob_info::origin_contexts (Translator *end) const { - Translator * t = origin_trans_; - Link_array r; - do { - r.push (t); - t = t->daddy_trans_; - } while (t && t != end->daddy_trans_); - + Context *t = origin_trans_->context (); + vector r; + do + { + r.push_back (t); + t = t->get_parent_context (); + } + while (t && t != end->context ()); + return r; } - + +Context * +Grob_info::context () const +{ + return origin_trans_->context (); +} + +Spanner * +Grob_info::spanner () const +{ + return dynamic_cast (grob_); +} + +Item * +Grob_info::item () const +{ + return dynamic_cast (grob_); +} + +Music * +Grob_info::ultimate_music_cause () const +{ + SCM cause = grob_->self_scm (); + while (unsmob_grob (cause)) + { + cause = unsmob_grob (cause)->get_property ("cause"); + } + + return unsmob_music (cause); +} +