/*
script-engraver.cc -- implement Script_engraver
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "script-engraver.hh"
+
#include "script.hh"
#include "side-position-interface.hh"
#include "musical-request.hh"
#include "rhythmic-head.hh"
#include "dimension-cache.hh"
+#include "engraver.hh"
+
+class Script_engraver : public Engraver {
+ Link_array<Script> script_p_arr_;
+ Link_array<Articulation_req> script_req_l_arr_;
+
+public:
+ VIRTUAL_COPY_CONS(Translator);
+
+ Script_engraver();
+protected:
+ virtual bool do_try_music (Music*);
+ virtual void do_process_music ();
+ virtual void do_pre_move_processing ();
+ virtual void do_post_move_processing ();
+ virtual void acknowledge_element (Score_element_info);
+};
+
+
Script_engraver::Script_engraver()
{
do_post_move_processing();
}
void
-Script_engraver::do_process_requests()
+Script_engraver::do_process_music()
{
for (int i=0; i < script_req_l_arr_.size(); i++)
{
Articulation_req* l=script_req_l_arr_[i];
- SCM list = ly_eval_str (("(articulation-to-scriptdef \"" + l->articulation_str_ + "\")").ch_C());
+ SCM list = scm_assoc (ly_str02scm (l->articulation_str_.ch_C ()),
+ scm_eval (ly_symbol2scm ("script-alist")));
if (list == SCM_BOOL_F)
{
l->articulation_str_.ch_C ()));
continue;
}
- Script *p =new Script;
+ // todo -> use result of articulation-to-scriptdef directly as basic prop list.
+ Script *p =new Script (get_property ("basicScriptProperties"));
Side_position_interface stafy (p);
if (l->get_direction ())
stafy.set_direction (l->get_direction ());
- SCM axisprop = get_property ("scriptHorizontal",0);
- bool xaxis = gh_boolean_p (axisprop) && gh_scm2bool (axisprop);
+ SCM axisprop = get_property ("scriptHorizontal");
+ bool xaxis = to_boolean (axisprop);
if (xaxis)
stafy.set_axis (X_AXIS);
else
void
Script_engraver::acknowledge_element (Score_element_info inf)
{
+ bool them_grace = to_boolean (inf.elem_l_->get_elt_property ("grace"));
+ bool us_grace = to_boolean (get_property ("weAreGraceContext"));
+
+ if (us_grace != them_grace)
+ return;
+
if (Stem *s = dynamic_cast<Stem*>(inf.elem_l_))
{
for (int i=0; i < script_p_arr_.size(); i++)
{
for (int i=0; i < script_p_arr_.size(); i++)
{
- typeset_element (script_p_arr_[i]);
+ Script * sc = script_p_arr_[i];
+ if (to_boolean (sc->remove_elt_property ("staff-support")))
+ {
+ Side_position_interface (sc).add_staff_support ();
+ }
+ typeset_element (sc);
}
script_p_arr_.clear();
}