X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Flily.scm;h=21c9599b66170838d0ac7b961a9b6a5e574fa451;hb=252ec5e71b5e121734a9c9897245137cb07e4a1f;hp=55d989e2d2ba7d8260f90955bbf86d0cc720a9c6;hpb=3f8a827aad721ed546b823e3f9f2605f61b90e20;p=lilypond.git diff --git a/scm/lily.scm b/scm/lily.scm index 55d989e2d2..21c9599b66 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2011 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2012 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; 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" @@ -459,6 +420,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,6 +488,7 @@ 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") ;; this is built on cheap-list (,list-or-symbol? . "list or symbol") @@ -533,6 +496,7 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (,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 +505,18 @@ 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:context? . "context") + (,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 +545,13 @@ 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") + (,ly:vsize? . "vsize") )) @@ -642,7 +612,7 @@ LilyPond safe mode. The syntax is the same as `define*-public'." ".scm")) (outfile (open-file out-file-name "w"))) (set! gc-dumping #t) - (format #t "Dumping GC statistics ~a...\n" out-file-name) + (ly:progress "Dumping GC statistics ~a...\n" out-file-name) (for-each (lambda (y) (let ((x (car y)) (c (cdr y))) @@ -662,16 +632,16 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (newline outfile) (if (defined? 'gc-live-object-stats) (let* ((stats #f)) - (display "Live object statistics: GC'ing\n") + (ly:progress "Live object statistics: GC'ing\n") (ly:reset-all-fonts) (gc) (gc) - (display "Asserting dead objects\n") + (ly:progress "Asserting dead objects\n") (ly:set-option 'debug-gc-assert-parsed-dead #t) (gc) (ly:set-option 'debug-gc-assert-parsed-dead #f) (set! stats (gc-live-object-stats)) - (display "Dumping live object statistics.\n") + (ly:progress "Dumping live object statistics.\n") (dump-live-object-stats outfile))) (newline outfile) (let* ((stats (gc-stats))) @@ -702,7 +672,8 @@ LilyPond safe mode. The syntax is the same as `define*-public'." (mem (string->number (match:substring (car interesting) 1)))) (format #t "VMDATA: ~a\n" mem) (display (gc-stats)) - (if (> mem 100000) + (newline) + (if (> mem 500000) (begin (dump-gc-protects) (raise 1))))) @@ -727,7 +698,7 @@ PIDs or the number of the process." "Exit function for lilypond" (if (not silently) (case status - ((0) (ly:success (_ "Compilation successfully completed"))) + ((0) (ly:basic-progress (_ "Success: compilation successfully completed"))) ((1) (ly:warning (_ "Compilation completed with warnings or errors"))) (else (ly:message "")))) (exit status)) @@ -847,6 +818,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) @@ -860,7 +832,8 @@ PIDs or the number of the process." (ly:set-option 'debug-gc-assert-parsed-dead #f) (if (ly:get-option 'debug-gc) (dump-gc-protects) - (ly:reset-all-fonts)))) + (ly:reset-all-fonts)) + (flush-all-ports))) files) ;; Ensure a notice re failed files is written to aggregate logfile.