- Articulation_req* l=script_req_l_arr_[i];
-
- SCM list = ly_ch_C_eval_scm (("(articulation-to-scriptdef \"" + l->articulation_str_ + "\")").ch_C());
-
- if (list == SCM_BOOL_F)
- {
- l->warning (_f ("Don't know how to interpret articulation `%s'",
- 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_ = (Direction)relative_stem_dir;
- else
- ss->dir_ = (Direction)force_dir;
-
- SCM dir_prop (get_property ("articulationScriptVerticalDirection", 0));
- if (SCM_NUMBERP(dir_prop))
- ss->dir_ = to_dir (dir_prop);
-
- if (l->dir_)
- ss->dir_ = l->dir_;
-
- SCM paddingprop = get_property ("articulationScriptPadding", 0);
- if (SCM_NUMBERP(paddingprop))
- {
- ss->set_elt_property (padding_scm_sym, paddingprop);
- }
-
- SCM axisprop = get_property ("scriptHorizontal",0);
- if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop))
- ss->axis_ = X_AXIS;
-
- if (follow_staff && !gh_boolean_p (axisprop) && gh_scm2bool (axisprop))
- ss->set_elt_property (no_staff_support_scm_sym, SCM_BOOL_T);
-
- p->set_staff_side (ss);
- ss->set_elt_property (script_priority_scm_sym, priority);
- if (SCM_NUMBERP (paddingprop))
- ss->set_elt_property (padding_scm_sym, paddingprop);
-
-
- 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));
+ 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));