2 input-translator.cc -- implement Input_translator
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 //#include "translator-admin.hh"
11 #include "engraver.hh"
12 #include "input-translator.hh"
14 #include "input-translator.hh"
15 #include "engraver-group.hh"
16 #include "performer-group-performer.hh"
19 Input_translator::is_name_b(String n)
21 for (int i=0; i < alias_str_arr_.size(); i++)
22 if (alias_str_arr_[i] == n)
28 Input_translator::print() const
31 mtor << base_str_ <<" " << type_str_<<" {\n";
32 mtor << "Consists of ";
33 for (int i=0; i< consists_str_arr_.size(); i++)
34 mtor << consists_str_arr_[i] << ',';
35 if (contains_itrans_p_list_.size())
36 mtor << "\nContains " ;
37 for (PCursor<Input_translator*> i(contains_itrans_p_list_.top()); i.ok(); i++)
46 Input_translator::recursive_find(String nm)
51 Input_translator * r =0;
53 PCursor<Input_translator*> i(contains_itrans_p_list_.top());
54 for (; !r &&i.ok(); i++) {
55 if (i->recursive_find(nm))
63 Input_translator::find_itrans_l(String nm)
65 for (PCursor<Input_translator*> i(contains_itrans_p_list_.top()); i.ok(); i++)
66 if (i->is_name_b( nm))
73 Engraver_group_engraver *
74 Input_translator::get_group_engraver_p()
76 assert (base_str_ == "Engraver");
77 Engraver_group_engraver * grav_p = (Engraver_group_engraver*)
78 get_engraver_p(type_str_);
80 for (int i=0; i < consists_str_arr_.size(); i++) {
81 grav_p->add( get_engraver_p( consists_str_arr_[i]) );
83 grav_p->itrans_l_ = this;
84 grav_p->id_str_ = default_id_str_;
88 Performer_group_performer*
89 Input_translator::get_group_performer_p()
91 assert (base_str_ == "Performer");
92 Performer_group_performer * perf_p = (Performer_group_performer*)
93 get_performer_p(type_str_);
95 for (int i=0; i < consists_str_arr_.size(); i++) {
96 perf_p->add( get_performer_p( consists_str_arr_[i]) );
98 perf_p->itrans_l_ = this;
99 perf_p->id_str_ = default_id_str_;
104 Input_translator::accept_req_b()
106 return ! contains_itrans_p_list_.size();
110 Input_translator::add(Input_translator *ip)
112 contains_itrans_p_list_.bottom().add(ip);
116 Input_translator::get_default_itrans_l()
118 if ( contains_itrans_p_list_.size() )
119 return contains_itrans_p_list_.top();
125 Input_translator_list::Input_translator_list(Input_translator_list const &s)
127 for (PCursor<Input_translator*> pc(s); pc.ok(); pc++) {
128 Input_translator *q = pc;
129 Input_translator *p=new Input_translator(*q) ;