;;;; 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
(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")
(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.
(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
"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"
"auto-beam.scm"
"chord-name.scm"
"bezier-tools.scm"
- "parser-ly-from-scheme.scm"
"ly-syntax-constructors.scm"
"define-context-properties.scm"
"define-grob-interfaces.scm"
"define-stencil-commands.scm"
"titling.scm"
+ "text.scm"
"paper.scm"
"backend-library.scm"
`((,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")
(,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")
(,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")
(,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")
))
".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)))
(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)))
(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)))))
"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))
(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)
(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.