- SCM sym = o->get_mus_property ("grob-property");
- SCM val = o->get_mus_property ("grob-value");
- inf.grob_->internal_set_grob_property (sym, val);
+ /*
+ should typecheck pred.
+ */
+ SCM result=scm_call_1 (pred, inf.grob_->self_scm ());
+ if (to_boolean (result))
+ {
+ SCM sym = o->get_property ("grob-property");
+ SCM val = o->get_property ("grob-value");
+ inf.grob_->internal_set_property (sym, val);
+ }
+ }
+ else
+ {
+ Context * d =
+ dynamic_cast<Context *> (inf.origin_trans_);
+
+ if (!d)
+ d = dynamic_cast<Context *> (inf.origin_trans_->daddy_context_);
+
+ SCM proc = o->get_property ("procedure");
+ scm_call_3 (proc,
+ inf.grob_->self_scm(),
+ d->self_scm(),
+ daddy_context_->self_scm());