2 script-engraver.cc -- implement Script_engraver
4 (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 #include "script-engraver.hh"
9 #include "musical-request.hh"
11 #include "staff-sym.hh"
12 #include "general-script-def.hh"
13 #include "text-def.hh"
16 Script_engraver::Script_engraver()
18 do_post_move_processing();
22 Script_engraver::do_try_music (Music *r_l)
24 if (Musical_script_req *mr = dynamic_cast <Musical_script_req *> (r_l))
26 for (int i=0; i < script_req_l_arr_.size(); i++)
28 if (script_req_l_arr_[i]->equal_b (mr))
31 script_req_l_arr_.push (mr);
38 Script_engraver::do_process_requests()
40 if (script_p_arr_.size ())
43 for (int i=0; i < script_req_l_arr_.size(); i++)
45 Script_req* l=script_req_l_arr_[i];
46 Script *p =new Script;
48 p->specs_p_ = l->scriptdef_p_->clone ();
49 script_p_arr_.push (p);
50 announce_element (Score_element_info (p, l));
55 Script_engraver::do_pre_move_processing()
57 Staff_symbol* s_l = get_staff_info().staff_sym_l_;
58 for (int i=0; i < script_p_arr_.size(); i++)
60 Script*script_p = script_p_arr_[i];
61 if (!script_p->specs_p_->inside_b())
62 script_p->add_support (s_l);
64 if (dynamic_cast<Text_def *> (script_p->specs_p_)) // UGH
66 Text_def * td_l = (Text_def*)script_p->specs_p_;
67 if (!td_l->style_str_.length_i ())
69 Scalar style = get_property ("textstyle", 0);
71 td_l->style_str_= style;
73 // urg, what if this is already set? in-band signaling...
74 Scalar alignment = get_property ("textalignment", 0);
75 if (alignment.isnum_b())
77 td_l->align_dir_= (Direction)(int)alignment;
80 typeset_element (script_p);
82 script_p_arr_.clear();
86 Script_engraver::do_post_move_processing()
88 script_req_l_arr_.clear();
93 ADD_THIS_TRANSLATOR(Script_engraver);