+settingsFrom =
+#(define-scheme-function (parser location ctx music)
+ ((symbol?) ly:music?)
+ (_i "Take the layout instruction events from @var{music}, optionally
+restricted to those applying to context type @var{ctx}, and return
+a context modification duplicating their effect.")
+ (let ((mods (ly:make-context-mod)))
+ (define (musicop m)
+ (if (music-is-of-type? m 'layout-instruction-event)
+ (ly:add-context-mod
+ mods
+ (case (ly:music-property m 'name)
+ ((PropertySet)
+ (list 'assign
+ (ly:music-property m 'symbol)
+ (ly:music-property m 'value)))
+ ((PropertyUnset)
+ (list 'unset
+ (ly:music-property m 'symbol)))
+ ((OverrideProperty)
+ (cons* 'push
+ (ly:music-property m 'symbol)
+ (ly:music-property m 'grob-value)
+ (ly:music-property m 'grob-property-path)))
+ ((RevertProperty)
+ (cons* 'pop
+ (ly:music-property m 'symbol)
+ (ly:music-property m 'grob-property-path)))))
+ (case (ly:music-property m 'name)
+ ((ApplyContext)
+ (ly:add-context-mod mods
+ (list 'apply
+ (ly:music-property m 'procedure))))
+ ((ContextSpeccedMusic)
+ (if (or (not ctx)
+ (eq? ctx (ly:music-property m 'context-type)))
+ (musicop (ly:music-property m 'element))))
+ (else
+ (let ((callback (ly:music-property m 'elements-callback)))
+ (if (procedure? callback)
+ (for-each musicop (callback m))))))))
+ (musicop music)
+ mods))
+
+shape =
+#(define-music-function (parser location grob offsets)
+ (string? list?)
+ (_i "Offset control-points of @var{grob} by @var{offsets}. The argument
+is a list of number pairs or list of such lists. Each element of a pair
+represents an offset to one of the coordinates of a control-point.")
+ (define ((shape-curve offsets) grob)
+ (let* ((orig (ly:grob-original grob))
+ (siblings (if (ly:spanner? grob)
+ (ly:spanner-broken-into orig) '()))
+ (total-found (length siblings))
+ (function (assoc-get 'control-points
+ (reverse (ly:grob-basic-properties grob))))
+ (coords (function grob)))
+
+ (define (offset-control-points offsets)
+ (if (null? offsets)
+ coords
+ (map
+ (lambda (x y) (coord-translate x y))
+ coords offsets)))
+
+ (define (helper sibs offs)
+ (if (pair? offs)
+ (if (eq? (car sibs) grob)
+ (offset-control-points (car offs))
+ (helper (cdr sibs) (cdr offs)))
+ coords))
+
+ ;; we work with lists of lists
+ (if (or (null? offsets)
+ (not (list? (car offsets))))
+ (set! offsets (list offsets)))
+
+ (if (>= total-found 2)
+ (helper siblings offsets)
+ (offset-control-points (car offsets)))))
+
+ #{
+ \once \override $grob #'control-points = #(shape-curve offsets)
+ #})
+