I'm attempting to write a markup command that, in addition to other
formatting, strips a trailing # or b character off the end of the text
argument and replaces it with the appropriate accidental markup. I think
I'm super-close but stuck on the proper syntax for passing a markup list to
the concat. Here's what I've got so far:

#(define-markup-command (page-header layout props text) (markup?)
    "Page header style including optional trailing accidental"
    (let* (
        (last-char (string-ref text (1- (string-length text))))
        (prefix (substring text 0 (1- (string-length text))))
        )
        (interpret-markup layout props
            (markup #:override '(font-name . "Avenir Heavy") #:fontsize 5
                (make-concat-markup (cond
                    ((char=? last-char #\#) (list prefix #:hspace 0.2
#:fontsize -2.5 #:raise 0.6 #:sharp))
                    ((char=? last-char #\b) (list prefix #:hspace 0.2
#:fontsize -2.5 #:raise 0.6 #:flat))
                    (else (list text))
                ))
            )
        )
    )
)

\markup \page-header "Key of Bb"

This works in the no-accidental case but otherwise generates an error like
this:

fatal error: make-concat-markup: Invalid argument in position 1.  Expect:
markup list, found: ("Key of B" #:hspace 0.2 #:fontsize -2.5 #:raise 0.6
#:flat).

Being new to scheme, I've tried various syntactical tweaks which all result
in different error messages. (Also I welcome any advice on alternate
approaches.)

Thanks,

Alec

Reply via email to