2 register.hh -- part of LilyPond
4 (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
13 struct Staff_elem_info {
16 const Voice * voice_l_;
17 Voice_group_registers * group_regs_l_;
19 Request_register * origin_reg_l_;
22 Staff_elem_info(Staff_elem*, Request*, Request_register*);
26 /// Hungarian postfix: reg
27 struct Request_register {
28 Complex_walker * walk_l_;
29 Array<Request*> accepted_req_arr_;
33 Request_register(Complex_walker*);
35 virtual ~Request_register(){}
37 /// take note of item/spaanner
38 virtual void acknowledge_element(Staff_elem_info){}
40 put item in spanner. Adjust local key; etc.
44 virtual bool try_request(Request *req_l) =0;
46 try to fit the request in this register
49 false: request noted, but not taken.
51 true: request swallowed. Don't try to put elsewhere
53 (may be we could use C++ exceptions.. :-)
56 /// make items/spanners with the requests you got
57 virtual void process_request()=0;
59 /// typeset any spanners. Empty accepted_req_arr_
60 void pre_move_processing();
61 void post_move_processing();
64 /// virtual, called by pre_move_process()
65 virtual void do_pre_move_process(){}
66 virtual void do_post_move_process(){}
69 a struct which processes requests, and creates the Staff_elems
72 struct Notehead_register : Request_register {
75 Notehead_register(Complex_walker*);
76 virtual bool try_request(Request *req_l) ;
77 virtual void process_request();
78 virtual void do_pre_move_process();
81 struct Slur_register : Request_register {
82 sstack<Slur_req*> requests_arr_;
83 sstack<Slur *> slur_l_stack_;
84 Array<Slur*> end_slur_l_arr_;
88 Slur_register(Complex_walker*);
89 virtual bool try_request(Request*);
90 virtual void process_request();
91 virtual void acknowledge_element(Staff_elem_info);
92 virtual void do_pre_move_process();
95 struct Stem_beam_register : Request_register {
98 Beam_req * beam_req_l_;
99 Stem_req * stem_req_l_;
100 Beam_req * start_req_l_;
102 Rhythmic_grouping *current_grouping;
106 Stem_beam_register(Complex_walker*);
107 ~Stem_beam_register();
108 void set_dir(int dir_i_);
109 virtual bool try_request(Request*);
110 virtual void process_request();
111 virtual void acknowledge_element(Staff_elem_info);
112 virtual void do_pre_move_process();
113 virtual void do_post_move_process();
116 struct Script_register : Request_register {
120 void set_dir(int dir_i_);
121 Script_register(Complex_walker*);
122 virtual bool try_request(Request*);
123 virtual void process_request();
124 virtual void acknowledge_element(Staff_elem_info);
125 virtual void do_pre_move_process();
128 struct Text_register : Request_register{
132 void set_dir(int dir_i_);
133 Text_register(Complex_walker*);
134 virtual bool try_request(Request*);
135 virtual void process_request();
136 virtual void do_pre_move_process();
140 struct Local_key_register : Request_register {
141 Local_key_item* key_item_p_;
145 virtual bool try_request(Request*);
146 virtual void process_request();
147 virtual void acknowledge_element(Staff_elem_info);
148 virtual void do_pre_move_process();
149 Local_key_register(Complex_walker*);
152 #endif // REGISTER_HH