1 ;;;; c++.scm -- implement Scheme frontends to C++ functions
3 ;;;; source file of the GNU LilyPond music typesetter
5 ;;;; (c) 1998--2002 Jan Nieuwenhuizen <janneke@gnu.org>
6 ;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 ;;; Note: this file can't be used without LilyPond executable
11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13 (define-public (number-pair? x)
15 (number? (car x)) (number? (cdr x))))
16 (define-public (number-or-grob? x)
17 (or (ly:grob? x) (number? x))
20 (define-public (grob-list? x)
23 (define-public (moment-pair? x)
25 (ly:moment? (car x)) (ly:moment? (cdr x))))
27 (define-public (boolean-or-symbol? x)
28 (or (boolean? x) (symbol? x)))
30 (define-public (number-or-string? x)
31 (or (number? x) (string? x)))
33 (define-public (markup? x)
34 (or (string? x) (list? x)
37 (define-public (scheme? x) #t)
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
41 (define type-p-name-alist
43 (,ly:dir? . "direction")
44 (,scheme? . "any type")
45 (,number-pair? . "pair of numbers")
46 (,ly:input-location? . "input location")
47 (,ly:grob? . "grob (GRaphical OBject)")
48 (,grob-list? . "list of grobs")
49 (,ly:duration? . "duration")
51 (,integer? . "integer")
55 (,boolean? . "boolean")
56 (,ly:moment? . "moment")
57 (,ly:input-location? . "input location")
58 (,music-list? . "list of music")
59 (,ly:music? . "music")
62 (,input-port? . "input port")
63 (,output-port? . "output port")
65 (,procedure? . "procedure")
66 (,boolean-or-symbol? . "boolean or symbol")
67 (,number-or-string? . "number or string")
68 (,markup? . "markup (list or string)")
69 (,number-or-grob? . "number or grob")
74 (define (match-predicate obj alist)
77 (if (apply (caar alist) obj)
79 (match-predicate obj (cdr alist))
83 (define-public (object-type obj)
84 (match-predicate obj type-p-name-alist))
86 (define-public (type-name predicate)
87 (let ((entry (assoc predicate type-p-name-alist)))
88 (if (pair? entry) (cdr entry)