2 script-engraver.cc -- implement Script_engraver
4 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 #include "script-engraver.hh"
9 #include "musical-request.hh"
11 #include "staff-symbol.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 for (int i=0; i < script_p_arr_.size(); i++)
59 Script*script_p = script_p_arr_[i];
62 UGH. inside_b () for scripts broken for now.
64 if (!script_p->specs_p_->inside_b())
65 script_p->add_support (s_l);
68 if (Text_def*td_l = dynamic_cast<Text_def *> (script_p->specs_p_)) // UGH
70 if (!td_l->style_str_.length_i ())
72 Scalar style = get_property ("textstyle", 0);
74 td_l->style_str_= style;
77 // urg, what if this is already set? in-band signaling...
78 Scalar alignment = get_property ("textalignment", 0);
79 if (alignment.isnum_b())
81 td_l->align_dir_= (Direction)(int)alignment;
84 typeset_element (script_p);
86 script_p_arr_.clear();
90 Script_engraver::do_post_move_processing()
92 script_req_l_arr_.clear();
97 ADD_THIS_TRANSLATOR(Script_engraver);