X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Flily.scm;h=1f4f59c89eb5f6c93cfca8db2d6b061a05ee4458;hb=9091c04d20d3db4932ce023719973146ccc9d6ea;hp=6a6c8c64745673baaf50f17d75f535d0f0da7324;hpb=11bb2a121bdee78da22db2ce792f21d636411b3a;p=lilypond.git diff --git a/scm/lily.scm b/scm/lily.scm index 6a6c8c6474..1f4f59c89e 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -6,17 +6,50 @@ ;;;; Han-Wen Nienhuys +(define (define-scheme-options) + (for-each (lambda (x) + (ly:add-option (car x) (cadr x) (caddr x))) + + '((point-and-click #t "use point & click") + (midi-debug #f "generate human readable MIDI") + (internal-type-checking #f "check every property assignment for types") + (parse-protect #t "continue when finding errors in inline +scheme are caught in the parser. If off, halt +on errors, and print a stack trace.") + (old-relative #f + "relative for simultaneous music works +similar to chord syntax") + (object-keys #f + "experimental mechanism for remembering tweaks") + (resolution 101 "resolution for generating bitmaps") + (anti-alias-factor 1 "render at higher resolution and scale down result\nto prevent jaggies in PNG") + (preview-include-book-title #t "include book-titles in preview images.") + (gs-font-load #f + "load fonts via Ghostscript.") + (gui #f "running from gui; redirect stderr to log file") + (delete-intermediate-files #f + "delete unusable PostScript files") + (verbose #f "value for the --verbose flag") + (ttf-verbosity 0 + "how much verbosity for TTF font embedding?") + (debug-gc #f + "dump GC protection info")))) + +;; FIXME: stray statement +(define-scheme-options) + (if (defined? 'set-debug-cell-accesses!) (set-debug-cell-accesses! #f)) -;;(set-debug-cell-accesses! 5000) +;(set-debug-cell-accesses! 1000) (use-modules (ice-9 regex) (ice-9 safe) (ice-9 optargs) (oop goops) - (srfi srfi-1) ; lists - (srfi srfi-13)) ; strings + (srfi srfi-1) + (srfi srfi-13) + (srfi srfi-14)) ;; my display @@ -36,16 +69,6 @@ (debug-enable 'backtrace) (read-enable 'positions))) -(define-public (line-column-location file line col) - "Print an input location, including column number ." - (string-append (number->string line) ":" - (number->string col) " " file)) - -(define-public (line-location file line col) - "Print an input location, without column number ." - (string-append (number->string line) " " file)) - -(define-public point-and-click #f) (define-public tex-backend? (member (ly:output-backend) '("texstr" "tex"))) @@ -72,13 +95,61 @@ (define-public _ ly:gettext)) (define-public (ly:load x) - (let* ((fn (%search-load-path x))) + (let* ((file-name (%search-load-path x))) (if (ly:get-option 'verbose) - (format (current-error-port) "[~A]" fn)) - (primitive-load fn))) + (ly:progress "[~A" file-name)) + (primitive-load file-name) + (if (ly:get-option 'verbose) + (ly:progress "]")))) (define-public TEX_STRING_HASHLIMIT 10000000) +;; Cygwin +;; #(CYGWIN_NT-5.1 Hostname 1.5.12(0.116/4/2) 2004-11-10 08:34 i686) +;; +;; Debian +;; #(Linux hostname 2.4.27-1-686 #1 Fri Sep 3 06:28:00 UTC 2004 i686) +;; +;; Mingw +;; #(Windows XP HOSTNAME build 2600 5.01 Service Pack 1 i686) +;; + +;; ugh, code dup. +(define-public PLATFORM + (string->symbol + (string-downcase + (car (string-tokenize (vector-ref (uname) 0) char-set:letter))))) + +(define-public DOS + (let ((platform (string-tokenize + (vector-ref (uname) 0) char-set:letter+digit))) + (if (null? (cdr platform)) #f + (member (string-downcase (cadr platform)) '("95" "98" "me"))))) + +(case PLATFORM + ((windows) + (define native-getcwd getcwd) + (define (slashify x) + (if (string-index x #\\) + x + (string-regexp-substitute + "//*" "/" + (string-regexp-substitute "\\\\" "/" x)))) + ;; FIXME: this prints a warning. + (define-public (ly-getcwd) + (slashify (native-getcwd)))) + (else (define-public ly-getcwd getcwd))) + +(define-public (is-absolute? file-name) + (let ((file-name-length (string-length file-name))) + (if (= file-name-length 0) + #f + (or (eq? (string-ref file-name 0) #\/) + (and (eq? PLATFORM 'windows) + (> file-name-length 2) + (eq? (string-ref file-name 1) #\:) + (eq? (string-ref file-name 2) #\/)))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (type-check-list location signature arguments) @@ -117,47 +188,6 @@ predicates. Print a message at LOCATION if any predicate failed." (define-public (ps-output-expression expr port) (display (eval expr output-ps-module) port)) -;; TODO: generate this list by registering the stencil expressions -;; stencil expressions should have docstrings. -(define-public (ly:all-stencil-expressions) - "Return list of stencil expressions." - '(beam - bezier-sandwich - blank - bracket - char - dashed-line - dashed-slur - dot - draw-line - ez-ball - filledbox - glyph-string - horizontal-line - named-glyph - polygon - repeat-slash - round-filled-box - text - url-link - white-dot - white-text - embedded-ps - zigzag-line)) - -;; TODO: -;; - generate this list by registering the output-backend-commands -;; output-backend-commands should have docstrings. -;; - remove hard copies in output-ps output-tex -(define-public (ly:all-output-backend-commands) - "Return list of output backend commands." - '( - comment - grob-cause - no-origin - placebox - unknown)) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Safe definitions utility (define safe-objects (list)) @@ -192,10 +222,11 @@ The syntax is the same as `define*-public'." "chord-entry.scm" "chord-generic-names.scm" "stencil.scm" - "new-markup.scm" + "markup.scm" "bass-figure.scm" "music-functions.scm" "part-combiner.scm" + "autochange.scm" "define-music-properties.scm" "auto-beam.scm" "chord-name.scm" @@ -217,12 +248,15 @@ The syntax is the same as `define*-public'." "define-grob-properties.scm" "define-grobs.scm" "define-grob-interfaces.scm" + "define-stencil-commands.scm" "page-layout.scm" "titling.scm" "paper.scm" "backend-library.scm" - ; last: + "x11-color.scm" + + ;; must be after everything has been defined "safe-lily.scm")) @@ -273,12 +307,13 @@ The syntax is the same as `define*-public'." (lambda (a b) (< (object-address (car a)) (object-address (car b)))))) + (out-file-name (string-append "gcstat-" (number->string gc-protect-stat-count) ".scm")) (outfile (open-file out-file-name "w"))) - (display "Dumping gc protected objs to ...\n") + (display (format "Dumping gc protected objs to ~a...\n" out-file-name)) (display (filter (lambda (x) (not (symbol? x))) @@ -292,31 +327,112 @@ The syntax is the same as `define*-public'." " ") "\n"))) protects)) - outfile))) + outfile) + + (if (defined? 'gc-live-object-stats) + (let* ((stats #f)) + (display "Live object statistics: GC'ing\n") + (gc) + (gc) + + (set! stats (gc-live-object-stats)) + (display "Dumping live object statistics.\n") + + (for-each + (lambda (x) + (format outfile "~a: ~a\n" (car x) (cdr x))) + (sort (gc-live-object-stats) + (lambda (x y) + (string