;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Copyright (C) 1998--2015 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
(define-public PLATFORM
(string->symbol
(string-downcase
- (car (string-tokenize (utsname:sysname (uname)))))))
+ (car (string-tokenize (utsname:sysname (uname)) char-set:letter)))))
+
+;; We don't use (srfi srfi-39) (parameter objects) here because that
+;; does not give us a name/handle to the underlying fluids themselves.
+
+(define %parser (make-fluid))
+(define %location (make-fluid))
+;; No public setters: should not get overwritten in action
+(define-public (*parser*) (fluid-ref %parser))
+(define-public (*location*) (fluid-ref %location))
+;; but properly scoped location should be fine
+(defmacro-public with-location (loc . body)
+ `(with-fluids ((,%location ,loc)) ,@body))
+
+;; It would be nice to convert occurences of parser/location to
+;; (*parser*)/(*location*) using the syncase module but it is utterly
+;; broken in GUILE 1 and would require changing a lot of unrelated
+;; innocuous constructs which just happen to fall apart with
+;; inscrutable error messages.
;;
;; Session-handling variables and procedures.
(if (ly:get-option 'trace-scheme-coverage)
(coverage:enable))
-(define-public parser #f)
-
(define music-string-to-path-backends
'(svg))
"c++.scm"
"chord-entry.scm"
"skyline.scm"
- "stencil.scm"
- "define-markup-commands.scm"
"markup.scm"
+ "define-markup-commands.scm"
+ "stencil.scm"
"modal-transforms.scm"
"chord-generic-names.scm"
"chord-ignatzek-names.scm"
"part-combiner.scm"
"autochange.scm"
"define-music-properties.scm"
+ "time-signature.scm"
"time-signature-settings.scm"
"auto-beam.scm"
"chord-name.scm"
"bezier-tools.scm"
- "ly-syntax-constructors.scm"
"define-context-properties.scm"
"translation-functions.scm"
(,ly:font-metric? . "font metric")
(,ly:grob? . "graphical (layout) object")
(,ly:grob-array? . "array of grobs")
+ (,ly:grob-properties? . "grob properties")
(,ly:input-location? . "input location")
(,ly:item? . "item")
(,ly:iterator? . "iterator")
(,ly:pitch? . "pitch")
(,ly:prob? . "property object")
(,ly:score? . "score")
- (,ly:simple-closure? . "simple closure")
(,ly:skyline? . "skyline")
(,ly:skyline-pair? . "pair of skylines")
(,ly:source-file? . "source file")
(,ly:stream-event? . "stream event")
(,ly:translator? . "translator")
(,ly:translator-group? . "translator group")
+ (,ly:undead? . "undead container")
(,ly:unpure-pure-container? . "unpure/pure container")
))
(define (dump-profile base last this)
(let* ((outname (format #f "~a.profile" (dir-basename base ".ly")))
(diff (map - this last)))
- (ly:progress "\nWriting timing to ~a..." outname)
+ (ly:progress "\nWriting timing to ~a...\n" outname)
(format (open-file outname "w")
"time: ~a\ncells: ~a\n"
(if (ly:get-option 'dump-cpu-profile)