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)))
36 (define-public (scheme? x) #t)
38 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40 (define type-p-name-alist
42 (,ly:dir? . "direction")
43 (,scheme? . "any type")
44 (,number-pair? . "pair of numbers")
45 (,ly:input-location? . "input location")
46 (,ly:grob? . "grob (GRaphical OBject)")
47 (,grob-list? . "list of grobs")
48 (,ly:duration? . "duration")
50 (,integer? . "integer")
54 (,boolean? . "boolean")
55 (,ly:moment? . "moment")
56 (,ly:input-location? . "input location")
57 (,music-list? . "list of music")
58 (,ly:music? . "music")
61 (,input-port? . "input port")
62 (,output-port? . "output port")
64 (,procedure? . "procedure")
65 (,boolean-or-symbol? . "boolean or symbol")
66 (,number-or-string? . "number or string")
67 (,markup? . "markup (list or string)")
68 (,number-or-grob? . "number or grob")
73 (define (match-predicate obj alist)
76 (if (apply (caar alist) obj)
78 (match-predicate obj (cdr alist))
82 (define-public (object-type obj)
83 (match-predicate obj type-p-name-alist))
85 (define-public (type-name predicate)
86 (let ((entry (assoc predicate type-p-name-alist)))
87 (if (pair? entry) (cdr entry)