1 ;;;; This file is part of LilyPond, the GNU music typesetter.
3 ;;;; Copyright (C) 2006--2015 Han-Wen Nienhuys <hanwen@lilypond.org>
5 ;;;; LilyPond is free software: you can redistribute it and/or modify
6 ;;;; it under the terms of the GNU General Public License as published by
7 ;;;; the Free Software Foundation, either version 3 of the License, or
8 ;;;; (at your option) any later version.
10 ;;;; LilyPond is distributed in the hope that it will be useful,
11 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ;;;; GNU General Public License for more details.
15 ;;;; You should have received a copy of the GNU General Public License
16 ;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
18 (use-modules (ice-9 format))
20 (define (document-music-function music-func-pair)
22 ((name-sym (car music-func-pair))
23 (music-func (cdr music-func-pair))
24 (func (ly:music-function-extract music-func))
25 (full-doc (procedure-documentation func))
26 (match-args (and full-doc (string-match "^\\([^)]*\\)\n" full-doc)))
27 (arg-names (if match-args
28 (with-input-from-string (match:string match-args) read)
29 (circular-list "arg")))
30 (doc (if match-args (match:suffix match-args) full-doc))
31 (sign (ly:music-function-signature music-func))
32 (type-names (map (lambda (pred)
34 (format #f "[~a]" (type-name (car pred)))
35 (format #f "(~a)" (type-name pred))))
39 (map (lambda (arg type) (format #f "@var{~a} ~a" arg type))
40 arg-names (cdr type-names)))))
42 "@item @code{~a} ~a ~a~a
46 name-sym (car type-names)
47 (if (string-null? signature-str) "" " - ") signature-str
49 (if (and doc (not (string-null? doc)))
52 (ly:warning "music function `~a' not documented." name-sym)
53 "(undocumented; fixme)")))))
56 (define (document-object obj-pair)
57 (and (ly:music-function? (cdr obj-pair))
58 (document-music-function obj-pair)))
60 (define-public (identifiers-doc-string)
70 (ly:module->alist (current-module))