(define-public interpret-markup ly:text-interface::interpret-markup)
(define-public (interpret-markup-list layout props markup-list)
- (let ((stencils (list)))
- (for-each (lambda (m)
- (set! stencils
- (if (markup-command-list? m)
- (append! (reverse! (apply (car m) layout props (cdr m)))
- stencils)
- (cons (interpret-markup layout props m) stencils))))
- markup-list)
- (reverse! stencils)))
+ ;; This relies on the markup list returned by a markup list command
+ ;; to be modifiable
+ (reverse!
+ (fold
+ (lambda (m prev)
+ (if (markup-command-list? m)
+ (reverse! (apply (car m) layout props (cdr m)) prev)
+ (cons (interpret-markup layout props m) prev)))
+ '()
+ markup-list)))
(define-public (prepend-alist-chain key val chain)
(cons (acons key val (car chain)) (cdr chain)))
(define-public (stack-stencil-line space stencils)
- "DOCME"
+ "Adjoin a list of STENCILS along the X axis, leaving SPACE between the
+ end of each stencil and the reference point of the following stencil."
(if (and (pair? stencils)
(ly:stencil? (car stencils)))
(ly:stencil? (cadr stencils)))
(let* ((tail (stack-stencil-line space (cdr stencils)))
(head (car stencils))
- (xoff (+ space (interval-length (ly:stencil-extent head X)))))
+ (xoff (+ space (interval-end (ly:stencil-extent head X)))))
(ly:stencil-add head
(ly:stencil-translate-axis tail xoff X)))
(car stencils))