2 clef.cc -- implement Clef_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
7 Mats Bengtsson <matsb@s3.kth.se>
11 #include "clef-grav.hh"
12 #include "clef-item.hh"
14 #include "command-request.hh"
15 #include "time-description.hh"
17 Clef_engraver::Clef_engraver()
26 Ugh. Should have support for Dictionaries in mudela.
29 Clef_engraver::set_type (String s)
32 if (clef_type_str_ == "violin" || clef_type_str_ == "G" || clef_type_str_ == "G2")
34 else if (clef_type_str_ == "french")
36 else if (clef_type_str_ == "soprano")
38 else if (clef_type_str_ == "mezzosoprano")
40 else if (clef_type_str_ == "alto")
42 else if (clef_type_str_ == "tenor")
44 else if (clef_type_str_ == "baritone")
46 else if (clef_type_str_ == "varbaritone")
48 else if (clef_type_str_ == "bass" || clef_type_str_ == "F")
50 else if (clef_type_str_ == "subbass")
53 switch(clef_type_str_[0])
56 c0_position_i_ = 2 * (clef_type_str_[1] - '0') - 2;
59 c0_position_i_ = 2 * (clef_type_str_[1] - '0') - 10;
62 c0_position_i_ = 2 * (clef_type_str_[1] - '0') - 6;
72 Clef_engraver::fill_staff_info (Staff_info &i)
74 i.c0_position_i_l_ = &c0_position_i_;
78 Clef_engraver::read_req (Clef_change_req*c_l)
80 if (!set_type (c_l->clef_str_))
81 c_l->error (_("unknown clef type "));
86 Generate a clef at the start of a measure. (when you see a Bar,
90 Clef_engraver::acknowledge_element (Score_elem_info info)
92 if (info.elem_l_->is_type_b (Bar::static_name ())
93 && clef_type_str_.length_i())
97 clef_p_->default_b_ = true;
102 Clef_engraver::do_creation_processing()
104 Scalar def = get_property ("defaultclef");
105 if (def.operator bool ()) // egcs: Scalar to bool is ambiguous
107 if (clef_type_str_.length_i ())
109 clef_p_->default_b_ = false;
113 Clef_engraver::do_try_request (Request * r_l)
115 Command_req* creq_l= r_l->command();
116 if (!creq_l || !creq_l->clefchange())
119 clef_req_l_ = creq_l->clefchange();
120 read_req (clef_req_l_);
125 Clef_engraver::create_clef()
129 clef_p_ = new Clef_item;
130 clef_p_->break_priority_i_ = -2; // ugh
131 announce_element (Score_elem_info (clef_p_,clef_req_l_));
133 clef_p_->read (*this);
137 Clef_engraver::do_process_requests()
142 clef_p_->default_b_ = false;
147 Clef_engraver::do_pre_move_processing()
151 typeset_element (clef_p_);
156 Clef_engraver::do_post_move_processing()
162 Clef_engraver::do_removal_processing()
169 IMPLEMENT_IS_TYPE_B1(Clef_engraver,Engraver);
170 ADD_THIS_TRANSLATOR(Clef_engraver);