Hi Kieren,
Here's another try:
#(define-markup-command
(curvedArrow layout props
arrow-length ;; any number >=0
height ;; any number >=0
strait-length ;; any number >=0
)(number? number? number?)
"Draw a curved arrow with variable length and height."
(interpret-markup layout props
(markup
(#:override (cons (quote filled) #t)
(#:path 0.15
`((curveto 0 ,(+ 0.1 height) ,(+ 2.8 arrow-length) ,(+ 3.3 height) ,(+ 11.3 arrow-length) ,(+ 3.3 height))
(rlineto ,strait-length 0)
(rcurveto 0 0.4 -0.2 0.4 -0.2 0.9)
(rcurveto 0 0.1 1.2 -0.5 1.8 -0.7)
(rcurveto 0.6 -0.2 1.5 -0.4 1.5 -0.6)
(rcurveto 0.0 -0.2 -0.9 -0.3 -1.5 -0.5)
(rcurveto -0.7 -0.2 -1.8 -0.8 -1.8 -0.7)
(rcurveto 0 0.5 0.2 0.5 0.2 0.9)
(rlineto ,(* -1 strait-length) 0)
(curveto ,(+ 3.1 arrow-length) ,(+ 2.6 height) 0 ,(+ -0.1 height) 0 0)
(closepath)))))))
%% Test:
{
c'^\markup\curvedArrow #0 #0 #0
c'^\markup\curvedArrow #2 #5 #0
c'_\markup\scale #'(-.5 . -.5)\curvedArrow #10 #10 #30
}