]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/lily.scm
Fix multiread option
[lilypond.git] / scm / lily.scm
index bbea5afab996462f9eedb9a6ee3613f65581ce5a..b0b8173161ff46201c09f147e0eaa6c3ca52aa8e 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
@@ -120,6 +120,10 @@ jobs.")
     (log-file #f
 "If string FOO is given as argument, redirect
 output to log file `FOO.log'.")
+    (max-markup-depth 1024
+"Maximum depth for the markup tree. If a markup has more levels,
+assume it will not terminate on its own, print a warning and return a
+null markup instead.")
     (midi-extension ,(if (eq? PLATFORM 'windows)
                          "mid"
                          "midi")
@@ -215,7 +219,8 @@ messages into errors.")
              (srfi srfi-14)
              (scm clip-region)
              (scm memory-trace)
-             (scm coverage))
+             (scm coverage)
+            (scm safe-utility-defs))
 
 (define-public _ gettext)
 ;;; There are new modules defined in Guile V2.0 which we need to use.
@@ -340,50 +345,6 @@ messages into errors.")
                      (fresh-interface!))))
       (set-module-obarray! iface (module-obarray mod))))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define (type-check-list location signature arguments)
-  "Typecheck a list of arguments against a list of type predicates.
-Print a message at LOCATION if any predicate failed."
-  (define (recursion-helper signature arguments count)
-    (define (helper pred? arg count)
-      (if (not (pred? arg))
-          (begin
-            (ly:input-message
-             location
-             (format
-              #f (_ "wrong type for argument ~a.  Expecting ~a, found ~s")
-              count (type-name pred?) arg))
-            #f)
-          #t))
-
-    (if (null? signature)
-        #t
-        (and (helper (car signature) (car arguments) count)
-             (recursion-helper (cdr signature) (cdr arguments) (1+ count)))))
-  (recursion-helper signature arguments 1))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Safe definitions utility
-
-(define safe-objects
-  (list))
-
-(define-macro (define-safe-public arglist . body)
-  "Define a variable, export it, and mark it as safe, i.e. usable in
-LilyPond safe mode.  The syntax is the same as `define*-public'."
-  (define (get-symbol arg)
-    (if (pair? arg)
-        (get-symbol (car arg))
-        arg))
-
-  (let ((safe-symbol (get-symbol arglist)))
-    `(begin
-       (define*-public ,arglist
-         ,@body)
-       (set! safe-objects (cons (cons ',safe-symbol ,safe-symbol)
-                                safe-objects))
-       ,safe-symbol)))
 
 (define-safe-public (lilypond-version)
   (string-join
@@ -410,7 +371,8 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "output-lib.scm"))
 ;;  - Files containing definitions used later by other files later in load
 (define init-scheme-files-used
-  '("markup-macros.scm"))
+  '("markup-macros.scm"
+    "parser-ly-from-scheme.scm"))
 ;;  - Main body of files to be loaded
 (define init-scheme-files-body
   '("file-cache.scm"
@@ -434,7 +396,6 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "auto-beam.scm"
     "chord-name.scm"
     "bezier-tools.scm"
-    "parser-ly-from-scheme.scm"
     "ly-syntax-constructors.scm"
 
     "define-context-properties.scm"
@@ -447,6 +408,7 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "font.scm"
     "encoding.scm"
 
+    "bar-line.scm"
     "flag-styles.scm"
     "fret-diagrams.scm"
     "tablature.scm"
@@ -459,6 +421,7 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "define-grob-interfaces.scm"
     "define-stencil-commands.scm"
     "titling.scm"
+    "text.scm"
 
     "paper.scm"
     "backend-library.scm"
@@ -526,13 +489,16 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
   `((,boolean-or-symbol? . "boolean or symbol")
     (,color? . "color")
     (,cheap-list? . "list")
+    (,fraction? . "fraction, as pair")
     (,grob-list? . "list of grobs")
+    (,index? . "non-negative integer")
     ;; this is built on cheap-list
     (,list-or-symbol? . "list or symbol")
     (,markup? . "markup")
     (,markup-command-list? . "markup command list")
     (,markup-list? . "markup list")
     (,moment-pair? . "pair of moment objects")
+    (,number-list? . "number list")
     (,number-or-grob? . "number or grob")
     (,number-or-pair? . "number or pair")
     (,number-or-string? . "number or string")
@@ -541,15 +507,20 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     (,scheme? . "any type")
     (,string-or-pair? . "string or pair")
     (,string-or-symbol? . "string or symbol")
+    (,void? . "void")
     ))
 
 (define-public lilypond-exported-predicates
-  `((,ly:box? . "box")
+  `((,ly:book? . "book")
+    (,ly:box? . "box")
     (,ly:context? . "context")
+    (,ly:context-def? . "context definition")
+    (,ly:context-mod? . "context modification")
     (,ly:dimension? . "dimension, in staff space")
     (,ly:dir? . "direction")
     (,ly:dispatcher? . "dispatcher")
     (,ly:duration? . "duration")
+    (,ly:event? . "post event")
     (,ly:font-metric? . "font metric")
     (,ly:grob? . "graphical (layout) object")
     (,ly:grob-array? . "array of grobs")
@@ -578,10 +549,12 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     (,ly:skyline-pair? . "pair of skylines")
     (,ly:source-file? . "source file")
     (,ly:spanner? . "spanner")
+    (,ly:spring? . "spring")
     (,ly:stencil? . "stencil")
     (,ly:stream-event? . "stream event")
     (,ly:translator? . "translator")
     (,ly:translator-group? . "translator group")
+    (,ly:unpure-pure-container? . "unpure/pure container")
     ))
 
 
@@ -670,6 +643,10 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
           (ly:set-option 'debug-gc-assert-parsed-dead #t)
           (gc)
           (ly:set-option 'debug-gc-assert-parsed-dead #f)
+         (for-each
+          (lambda (x)
+            (ly:programming-error "Parsed object should be dead: ~a" x))
+          (ly:parsed-undead-list!))
           (set! stats (gc-live-object-stats))
           (ly:progress "Dumping live object statistics.\n")
           (dump-live-object-stats outfile)))
@@ -755,7 +732,7 @@ PIDs or the number of the process."
                       (> (string-length s) 0))
                     (apply append
                            (map (lambda (f)
-                                  (string-split (ly:gulp-file f) #\nl))
+                                  (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
                                 files)))))
   (if (and (number? (ly:get-option 'job-count))
            (>= (length files) (ly:get-option 'job-count)))
@@ -826,10 +803,11 @@ PIDs or the number of the process."
   (let* ((failed '())
          (separate-logs (ly:get-option 'separate-log-files))
          (ping-log
-          (if separate-logs
-              (open-file (if (string-or-symbol? (ly:get-option 'log-file))
-                             (format #f "~a.log" (ly:get-option 'log-file))
-                     "/dev/stderr") "a") #f))
+          (and separate-logs
+               (if (string-or-symbol? (ly:get-option 'log-file))
+                   (open-file (format #f "~a.log" (ly:get-option 'log-file))
+                              "a")
+                   (fdes->outport 2))))
          (do-measurements (ly:get-option 'dump-profile))
          (handler (lambda (key failed-file)
                     (set! failed (append (list failed-file) failed)))))
@@ -848,6 +826,7 @@ PIDs or the number of the process."
          (if (ly:get-option 'trace-memory-frequency)
              (mtrace:start-trace  (ly:get-option 'trace-memory-frequency)))
          (lilypond-file handler x)
+         (ly:check-expected-warnings)
          (if start-measurements
              (dump-profile x start-measurements (profile-measurements)))
          (if (ly:get-option 'trace-memory-frequency)
@@ -859,6 +838,10 @@ PIDs or the number of the process."
          (ly:set-option 'debug-gc-assert-parsed-dead #t)
          (gc)
          (ly:set-option 'debug-gc-assert-parsed-dead #f)
+        (for-each
+         (lambda (x)
+           (ly:programming-error "Parsed object should be dead: ~a" x))
+         (ly:parsed-undead-list!))
          (if (ly:get-option 'debug-gc)
              (dump-gc-protects)
              (ly:reset-all-fonts))
@@ -872,6 +855,8 @@ PIDs or the number of the process."
         (dump-profile "lily-run-total" '(0 0) (profile-measurements)))
     failed))
 
+(define-public lilypond-declarations '())
+
 (define (lilypond-file handler file-name)
   (catch 'ly-file-failed
          (lambda () (ly:parse-file file-name))