2 walkregs.cc -- implement Walker_registers
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "walk-regs.hh"
10 #include "staff-regs.hh"
11 #include "staff-elem.hh"
13 #include "complex-walker.hh"
14 #include "staff-column.hh"
15 #include "score-walker.hh"
16 #include "bar.hh" // needed for Bar::static_name
17 #include "input-register.hh"
19 Walker_registers::Walker_registers(Complex_walker *w)
22 Input_register * ireg_l = w->staff_l_->ireg_p_;
23 if (ireg_l->name_str_ == "Staff_registers")
24 add(new Staff_registers(ireg_l));
26 add(ireg_l->get_nongroup_p_arr());
31 Walker_registers::announce_element(Staff_elem_info info)
33 if (info.elem_p_->name() == Bar::static_name()) {
34 walk_l_->allow_break();
36 announce_info_arr_.push(info);
40 Walker_registers::acknowledge_element(Staff_elem_info )
46 Walker_registers::do_announces()
49 for (int i = 0; i < announce_info_arr_.size(); i++){
50 Staff_elem_info info = announce_info_arr_[i];
53 info.req_l_ = &dummy_req;
54 Register_group_register::acknowledge_element(info);
56 announce_info_arr_.set_size(0);
60 Walker_registers::typeset_element(Staff_elem *elem_p)
62 typeset_musical_item(elem_p);
66 Walker_registers::typeset_musical_item(Staff_elem * elem_p)
68 walk_l_->typeset_element(elem_p);
72 Walker_registers::typeset_breakable_item(Item * pre_p , Item * nobreak_p,
76 prebreak_item_p_arr_.push(pre_p);
78 nobreak_item_p_arr_.push(nobreak_p);
80 postbreak_item_p_arr_.push(post_p);
84 Walker_registers::pre_move_processing()
86 // this generates all items.
87 Register_group_register::pre_move_processing();
88 walk_l_->ptr()->typeset_breakable_items(prebreak_item_p_arr_,
90 postbreak_item_p_arr_);
93 Walker_registers::post_move_processing()
95 Register_group_register::post_move_processing();
100 Walker_registers::get_staff_info() return inf;
102 if (walk_l_->score_walk_l_) // we get called ctors
103 inf.break_allowed_b_ = walk_l_->score_walk_l_->break_allowed_b();
104 inf.walk_l_ = walk_l_;
105 inf.time_C_ = &walk_l_->time_;
106 inf.rhythmic_C_ = walk_l_->default_grouping;
110 Walker_registers::paper()const
112 return walk_l_->staff_l_->paper();