;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 2003--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
"
Internally markup is stored as lists, whose head is a function.
To add a function, use the def-markup-command utility.
- (def-markup-command (mycommand paper prop arg1 ...) (arg1-type? ...)
+ (def-markup-command (mycommand layout prop arg1 ...) (arg1-type? ...)
\"my command usage and description\"
...function body...)
* define a make-COMMAND-markup function.
Syntax:
- (def-markup-command (COMMAND paper props arg1 arg2 ...) (arg1-type? arg2-type? ...)
+ (def-markup-command (COMMAND layout props arg1 arg2 ...) (arg1-type? arg2-type? ...)
\"documentation string\"
...command body...)
or:
(let ((proc (markup-symbol-to-proc (string->symbol (string-append code "-markup")))))
(and proc (cons proc (markup-command-keyword proc)))))
+;;;;;;;;;;;;;;;;;;;;;;
+;;; used in parser.yy to map a list of markup commands on markup arguments
+(define-public (map-markup-command-list commands markups)
+ "`markups' being a list of markups, eg (markup1 markup2 markup3),
+and `commands' a list of commands with their scheme arguments, in reverse order,
+eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
+ ((bold (raise 4 (italic markup1)))
+ (bold (raise 4 (italic markup2)))
+ (bold (raise 4 (italic markup3))))
+"
+ (map-in-order (lambda (arg)
+ (let ((result arg))
+ (for-each (lambda (cmd)
+ (set! result (append cmd (list result))))
+ commands)
+ result))
+ markups))
+
;;;;;;;;;;;;;;;;;;;;;;
;;; markup type predicates
(not (not (markup-command-signature x))))
(define (markup-list? arg)
- (define (markup-list-inner? l)
- (or (null? l)
- (and (markup? (car l)) (markup-list-inner? (cdr l)))))
+ (define (markup-list-inner? lst)
+ (or (null? lst)
+ (and (markup? (car lst)) (markup-list-inner? (cdr lst)))))
(and (list? arg) (markup-list-inner? arg)))
(define (markup-argument-list? signature arguments)