- ; if target is a procedure, we need to apply it to our grob to calculate
- ; values to offset.
- (vals
- (if (procedure? target)
- (target grob)
- target))
+ ;; if target is a procedure, we need to apply it to our
+ ;; grob to calculate values to offset.
+ (vals (cond ((procedure? target) (target grob))
+ ;; Argument lists for a pure procedure pulled
+ ;; from an unpure-pure-container may be
+ ;; different from a normal procedure, so we
+ ;; need a different code path and calling
+ ;; convention for procedures pulled from an
+ ;; container as opposed to from the property
+ ((ly:unpure-pure-container? target)
+ (let ((part (container-part target)))
+ (if (procedure? part)
+ (apply part grob rest)
+ part)))
+ (else target)))