]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/document-identifiers.scm
Add '-dcrop' option to ps and svg backends
[lilypond.git] / scm / document-identifiers.scm
index 838de55e558db9bad72d1fafc3972318dd2ce54a..39d428408817911c5b403c77537550b7e270594d 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys <hanwen@lilypond.org>
+;;;; Copyright (C) 2006--2015 Han-Wen Nienhuys <hanwen@lilypond.org>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
 ;;;; it under the terms of the GNU General Public License as published by
       ((name-sym (car music-func-pair))
        (music-func (cdr music-func-pair))
        (func (ly:music-function-extract music-func))
-       (arg-names
-       (map symbol->string
-            (cddr (cadr (procedure-source func)))))
-       (doc (procedure-documentation func))
-       (sign (object-property func 'music-function-signature))
-       (type-names (map type-name sign))
-
+       (full-doc (procedure-documentation func))
+       (match-args (and full-doc (string-match "^\\([^)]*\\)\n" full-doc)))
+       (arg-names (if match-args
+                      (with-input-from-string (match:string match-args) read)
+                      (circular-list "arg")))
+       (doc (if match-args (match:suffix match-args) full-doc))
+       (sign (ly:music-function-signature music-func))
+       (type-names (map (lambda (pred)
+                          (if (pair? pred)
+                              (format #f "[~a]" (type-name (car pred)))
+                              (format #f "(~a)" (type-name pred))))
+                        sign))
        (signature-str
-       (string-join
-        (map (lambda (x) (format #f "@var{~a} (~a)"
-                                 (car x)
-                                 (cadr x)))
-             (zip arg-names type-names)))))
+        (string-join
+         (map (lambda (arg type) (format #f "@var{~a} ~a" arg type))
+              arg-names (cdr type-names)))))
     (format #f
-     "@item @code{~a}~a~a
-@findex ~a
+            "@item @code{~a} ~a ~a~a
+@funindex ~a
 ~a
 "
-     name-sym (if (equal? "" signature-str) "" " - ") signature-str
-     name-sym
-     (if doc doc "(undocumented; fixme)"))))
+            name-sym (car type-names)
+            (if (string-null? signature-str) "" " - ") signature-str
+            name-sym
+            (if (and doc (not (string-null? doc)))
+                doc
+                (begin
+                  (ly:warning "music function `~a' not documented." name-sym)
+                  "(undocumented; fixme)")))))
 
 
 (define (document-object obj-pair)
-  (cond
-   ((ly:music-function? (cdr obj-pair))
-    (document-music-function obj-pair))
-   (else
-    #f)))
+  (and (ly:music-function? (cdr obj-pair))
+       (document-music-function obj-pair)))
 
 (define-public (identifiers-doc-string)
   (format #f
-   "@table @asis
+          "@table @asis
 ~a
 @end table
 "
-   (string-join
-    (filter
-     identity
-     (map
-      document-object
-      (sort
-       (ly:module->alist (current-module))
-       identifier<?)))
-    "")))
+          (string-join
+           (filter-map
+            document-object
+            (sort
+             (ly:module->alist (current-module))
+             identifier<?)))
+          ""))