Item *left_edge_;
void add_to_group (SCM, Item *);
+ void create_alignment (Grob_info);
protected:
void stop_translation_timestep ();
virtual void derived_mark () const;
public:
TRANSLATOR_DECLARATIONS (Break_align_engraver);
DECLARE_ACKNOWLEDGER (break_aligned);
+ DECLARE_ACKNOWLEDGER (break_alignable);
};
void
scm_gc_mark (column_alist_);
}
+void
+Break_align_engraver::acknowledge_break_alignable (Grob_info inf)
+{
+ if (!align_)
+ create_alignment (inf);
+
+ Grob *g = inf.grob ();
+
+ if (!g->get_parent (X_AXIS))
+ g->set_parent (align_, X_AXIS);
+}
+
void
Break_align_engraver::acknowledge_break_aligned (Grob_info inf)
{
return;
if (!align_)
- {
- align_ = make_item ("BreakAlignment", SCM_EOL);
+ create_alignment (inf);
+
+ add_to_group (align_name, item);
+ }
+}
- Context *origin = inf.origin_contexts (this)[0];
+void
+Break_align_engraver::create_alignment (Grob_info inf)
+{
+ align_ = make_item ("BreakAlignment", SCM_EOL);
- Translator_group *tg = origin->implementation ();
- Engraver *random_source = dynamic_cast<Engraver *> (unsmob_translator (scm_car (tg->get_simple_trans_list ())));
- if (!random_source)
- random_source = this;
+ Context *origin = inf.origin_contexts (this)[0];
- /*
- Make left edge appear to come from same context as clef/bar-line etc.
- */
- left_edge_ = random_source->make_item ("LeftEdge", SCM_EOL);
- add_to_group (left_edge_->get_property ("break-align-symbol"),
- left_edge_);
- }
+ Translator_group *tg = origin->implementation ();
+ Engraver *random_source = dynamic_cast<Engraver *> (unsmob_translator (scm_car (tg->get_simple_trans_list ())));
+ if (!random_source)
+ random_source = this;
- add_to_group (align_name, item);
- }
+ /*
+ Make left edge appear to come from same context as clef/bar-line etc.
+ */
+ left_edge_ = random_source->make_item ("LeftEdge", SCM_EOL);
+ add_to_group (left_edge_->get_property ("break-align-symbol"),
+ left_edge_);
}
void
Axis_group_interface::add_element (group, item);
}
ADD_ACKNOWLEDGER (Break_align_engraver, break_aligned);
+ADD_ACKNOWLEDGER (Break_align_engraver, break_alignable);
ADD_TRANSLATOR (Break_align_engraver,
"Align grobs with corresponding @code{break-align-symbols} into "
"groups, and order the groups according to @code{breakAlignOrder}. "
DECLARE_TRANSLATOR_LISTENER (mark);
DECLARE_ACKNOWLEDGER (break_alignment);
- DECLARE_ACKNOWLEDGER (break_aligned);
};
Mark_engraver::Mark_engraver ()
mark_ev_ = 0;
}
-/*
- This is a flawed approach, since various break-aligned objects may
- not appear depending on key signature etc.
-
- We keep it in case someone puts the engraver in a lower context than score.
- */
-void
-Mark_engraver::acknowledge_break_aligned (Grob_info inf)
-{
- Grob *s = inf.grob ();
- if (text_
- && !text_->get_parent (X_AXIS)
- && (text_->get_property_data ("break-align-symbol")
- == s->get_property_data ("break-align-symbol"))
- && Axis_group_interface::has_interface (s))
- {
- /*
- RehearsalMark cannot be break-aligned, since the width of the
- object should not be taken into alignment considerations.
- */
- text_->set_parent (s, X_AXIS);
- }
-}
-
void
Mark_engraver::acknowledge_break_alignment (Grob_info inf)
{
}
}
-ADD_ACKNOWLEDGER (Mark_engraver, break_aligned);
ADD_ACKNOWLEDGER (Mark_engraver, break_alignment);
ADD_TRANSLATOR (Mark_engraver,