2 new-system-start-delimiter-engraver.cc -- implement
3 Nested_system_start_delimiter_engraver
5 source file of the GNU LilyPond music typesetter
7 (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
11 #include "side-position-interface.hh"
12 #include "system-start-delimiter.hh"
13 #include "engraver.hh"
14 #include "staff-symbol.hh"
15 #include "pointer-group-interface.hh"
16 #include "paper-column.hh"
17 #include "output-def.hh"
20 class Nested_system_start_delimiter_engraver : public Engraver
23 TRANSLATOR_DECLARATIONS (Nested_system_start_delimiter_engraver);
28 DECLARE_ACKNOWLEDGER (system_start_delimiter);
29 DECLARE_ACKNOWLEDGER (staff_symbol);
31 void process_music ();
32 virtual void finalize ();
35 Nested_system_start_delimiter_engraver::Nested_system_start_delimiter_engraver ()
41 add_staff_to_hierarchy (SCM hierarchy, SCM grob)
43 for (SCM s = hierarchy; scm_is_pair (s); s = scm_cdr (s))
45 SCM entry = scm_car (s);
47 if (unsmob_grob (entry))
49 else if (scm_is_pair (entry))
51 bool success = add_staff_to_hierarchy (entry, grob);
57 scm_set_car_x (s, grob);
66 Nested_system_start_delimiter_engraver::process_music ()
70 delimiter_ = make_spanner ("NestedSystemStartDelimiter", SCM_EOL);
71 SCM hierarchy = get_property ("systemStartDelimiterHierarchy");
74 delimiter_->set_object ("staff-hierarchy", ly_deep_copy (hierarchy));
75 delimiter_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
80 Nested_system_start_delimiter_engraver::finalize ()
83 delimiter_->set_bound (RIGHT,
84 unsmob_grob (get_property ("currentCommandColumn")));
88 Nested_system_start_delimiter_engraver::acknowledge_staff_symbol (Grob_info inf)
90 Grob *staff = inf.grob();
91 SCM hier = delimiter_->get_object ("staff-hierarchy");
92 bool succ = add_staff_to_hierarchy (hier, staff->self_scm ());
96 hier = scm_append_x (scm_list_2 (hier,
97 scm_list_1 (staff->self_scm ())));
99 delimiter_->set_object ("staff-hierarchy", hier);
105 Nested_system_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info inf)
107 Side_position_interface::add_support (inf.grob (), delimiter_);
110 #include "translator.icc"
112 ADD_ACKNOWLEDGER (Nested_system_start_delimiter_engraver, staff_symbol);
113 ADD_ACKNOWLEDGER (Nested_system_start_delimiter_engraver, system_start_delimiter);
115 ADD_TRANSLATOR (Nested_system_start_delimiter_engraver,
116 /* doc */ "Creates a system start delimiter (ie. SystemStart@{Bar, Brace, Bracket@} spanner",
117 /* create */ "NestedSystemStartDelimiter",
119 /* read */ "systemStartDelimiterHierarchy",