- Articulation_req* l=script_req_l_arr_[i];
-
-
- SCM list = gh_eval_str (("(articulation-to-scriptdef \"" + l->articulation_str_ + "\")").ch_C());
-
- if (list == SCM_BOOL_F)
- {
- l->warning(_f("don't know how to interpret articulation `%s'\n",
- l->articulation_str_.ch_C()));
- continue;
- }
- Script *p =new Script;
- Stem_staff_side_item * ss =new Stem_staff_side_item;
- list = SCM_CDR (list);
-
- p->set_elt_property (molecule_scm_sym,
- SCM_CAR(list));
-
- list = SCM_CDR(list);
- bool follow_staff = gh_scm2bool (SCM_CAR(list));
- list = SCM_CDR(list);
- int relative_stem_dir = gh_scm2int (SCM_CAR(list));
- list = SCM_CDR(list);
- int force_dir =gh_scm2int (SCM_CAR(list));
- list = SCM_CDR(list);
- SCM priority = SCM_CAR(list);
-
- if (relative_stem_dir)
- ss->relative_dir_ = relative_stem_dir;
- else
- ss->dir_ = force_dir;
-
- Scalar dir_prop (get_property ("articulationScriptVerticalDirection", 0));
- if (dir_prop.isnum_b () && (int) dir_prop != CENTER)
- ss->dir_ = (int) dir_prop;
-
- if (l->dir_)
- ss->dir_ = l->dir_;
-
- Real padding = 1.0;
- Scalar paddingprop = get_property ("articulationScriptPadding", 0);
- if (paddingprop.length_i() && paddingprop.isnum_b ())
- {
- padding = (Real)paddingprop;
- }
-
- ss->staff_support_b_ = !follow_staff;
- p->set_staff_side (ss);
- ss->set_elt_property (script_priority_scm_sym, priority);
- ss->set_elt_property (padding_scm_sym, gh_double2scm(padding));
- script_p_arr_.push (p);
- staff_side_p_arr_.push (ss);
-
- announce_element (Score_element_info (p, l));
- announce_element (Score_element_info (ss, l));
+ /* FIXME: */
+ warning (_ ("do not know how to interpret articulation:"));
+ warning (_ (" scheme encoding: "));
+ scm_write (art_type, scm_current_error_port ());
+ message ("");
+ return;
+ }
+
+ art = scm_cdr (art);
+
+ bool priority_found = false;
+
+ for (SCM s = art; scm_is_pair (s); s = scm_cdr (s))
+ {
+ SCM sym = scm_caar (s);
+ SCM type = scm_object_property (sym, ly_symbol2scm ("backend-type?"));
+ if (!ly_is_procedure (type))
+ continue;
+
+ SCM val = scm_cdar (s);
+
+ if (sym == ly_symbol2scm ("script-priority"))
+ {
+ priority_found = true;
+ /* Make sure they're in order of user input by adding index i.
+ Don't use the direction in this priority. Smaller means closer
+ to the head. */
+ int prio = scm_to_int (val) + index;
+
+ val = scm_from_int (prio);
+ }
+
+ SCM preset = p->get_property_data (sym);
+ if (val == SCM_EOL
+ || scm_call_1 (type, preset) == SCM_BOOL_F)
+ p->set_property (sym, val);
+ }
+
+ if (!priority_found)
+ {
+ p->set_property ("script-priority",
+ scm_from_int (index));
+ }
+}
+
+void
+Script_engraver::process_music ()
+{
+ for (vsize i = 0; i < scripts_.size (); i++)
+ {
+ Stream_event *ev = scripts_[i].event_;
+
+ Grob *p = make_item ("Script", ev->self_scm ());
+
+ make_script_from_event (p, context (),
+ ev->get_property ("articulation-type"),
+ i);
+
+ scripts_[i].script_ = p;
+
+ SCM force_dir = ev->get_property ("direction");
+ if (is_direction (force_dir) && to_dir (force_dir))
+ p->set_property ("direction", force_dir);
+ }
+}
+
+void
+Script_engraver::acknowledge_stem (Grob_info info)
+{
+ int script_count = scripts_.size ();
+ for (int i = 0; i < script_count; i++)
+ {
+ Grob *e = scripts_[i].script_;
+
+ if (to_dir (e->get_property ("side-relative-direction")))
+ e->set_object ("direction-source", info.grob ()->self_scm ());
+
+ Side_position_interface::add_support (e, info.grob ());