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_l_
->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
];
51 mtor
<< "Announcing " << info
.elem_l_
->name()<<"\n";
54 info
.req_l_
= &dummy_req
;
55 Register_group_register::acknowledge_element(info
);
57 announce_info_arr_
.set_size(0);
61 Walker_registers::typeset_element(Staff_elem
*elem_p
)
63 typeset_musical_item(elem_p
);
67 Walker_registers::typeset_musical_item(Staff_elem
* elem_p
)
69 walk_l_
->typeset_element(elem_p
);
73 Walker_registers::typeset_breakable_item(Item
* pre_p
, Item
* nobreak_p
,
77 prebreak_item_p_arr_
.push(pre_p
);
79 nobreak_item_p_arr_
.push(nobreak_p
);
81 postbreak_item_p_arr_
.push(post_p
);
85 Walker_registers::pre_move_processing()
87 // this generates all items.
88 Register_group_register::pre_move_processing();
89 walk_l_
->ptr()->typeset_breakable_items(prebreak_item_p_arr_
,
91 postbreak_item_p_arr_
);
94 Walker_registers::post_move_processing()
96 Register_group_register::post_move_processing();
101 Walker_registers::get_staff_info() return inf
;
103 if (walk_l_
->score_walk_l_
) // we get called ctors
104 inf
.break_allowed_b_
= walk_l_
->score_walk_l_
->break_allowed_b();
105 inf
.walk_l_
= walk_l_
;
106 inf
.time_C_
= &walk_l_
->time_
;
107 inf
.rhythmic_C_
= walk_l_
->default_grouping
;
111 Walker_registers::paper()const
113 return walk_l_
->staff_l_
->paper();