]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/lily.scm
Add '-dcrop' option to ps and svg backends
[lilypond.git] / scm / lily.scm
index ce3486cf3f4e70f9479fa6b4ac91e8a596c5a490..5e727f1a5892cbb4de4d067f53e719ab3e9fcaf8 100644 (file)
       (ly:error (_ "call-after-session used after session start")))
   (add-hook! after-session-hook thunk #t))
 
-(defmacro-public define-session (name value)
+(define (make-session-variable name value)
+  (if (ly:undead? lilypond-declarations)
+      (ly:error (_ "define-session used after session start")))
+  (let ((var (module-make-local-var! (current-module) name)))
+    (if (variable-bound? var)
+        (ly:error (_ "symbol ~S redefined") name))
+    (variable-set! var value)
+    var))
+
+(defmacro define-session (name value)
   "This defines a variable @var{name} with the starting value
 @var{value} that is reinitialized at the start of each session.
 A@tie{}session basically corresponds to one LilyPond file on the
@@ -108,22 +117,23 @@ to their front or replacing them altogether, not by modifying parts of
 them.  It is an error to call @code{define-session} after the first
 session has started."
   (define (add-session-variable name value)
-    (if (ly:undead? lilypond-declarations)
-        (ly:error (_ "define-session used after session start")))
-    (let ((var (make-variable value)))
-      (module-add! (current-module) name var)
-      (set! lilypond-declarations (cons var lilypond-declarations))))
+    (set! lilypond-declarations
+          (cons (make-session-variable name value) lilypond-declarations)))
   `(,add-session-variable ',name ,value))
 
-(defmacro-public define-session-public (name value)
+(defmacro define-session-public (name value)
   "Like @code{define-session}, but also exports @var{name} into parser modules."
   (define (add-session-variable name value)
-    (if (ly:undead? lilypond-declarations)
-        (ly:error (_ "define-session-public used after session start")))
-    (let ((var (make-variable value)))
-      (module-add! (current-module) name var)
-      (set! lilypond-exports (acons name var lilypond-exports))))
-  `(,add-session-variable ',name ,value))
+    (set! lilypond-exports
+          (acons name (make-session-variable name value) lilypond-exports)))
+  `(begin
+     ;; this is a bit icky: we place the variable right into every
+     ;; parser module so that both set! and define will affect the
+     ;; original variable in the (lily) module.  However, we _also_
+     ;; export it normally from (lily) for the sake of other modules
+     ;; not sharing the name space of the parser.
+     (,add-session-variable ',name ,value)
+     (export ,name)))
 
 (define (session-terminate)
   (if (ly:undead? lilypond-declarations)
@@ -218,6 +228,9 @@ EPS backend.")
     (clip-systems
      #f
      "Generate cut-out snippets of a score.")
+    (crop
+     #f
+     "Match the size of the normal output to the typeset image.")
     (datadir
      #f
      "LilyPond prefix for data files (read-only).")
@@ -266,12 +279,18 @@ regression testing.")
      #f
      "Pad left edge of the output EPS bounding box by
 given amount (in mm).")
+    (font-export-dir
+     #f
+     "Directory for exporting fonts as PostScript files.")
     (gs-load-fonts
      #f
      "Load fonts via Ghostscript.")
     (gs-load-lily-fonts
      #f
      "Load only LilyPond fonts via Ghostscript.")
+    (gs-never-embed-fonts
+     #f
+     "Make Ghostscript embed only TrueType fonts and no other font format.")
     (gui
      #f
      "Run LilyPond from a GUI and redirect stderr to
@@ -947,7 +966,11 @@ PIDs or the number of the process."
             (remove string-null?
                     (append-map
                      (lambda (f)
-                       (string-split (string-delete (ly:gulp-file f) #\cr) #\nl))
+                       (string-split
+                         (if (guile-v2)
+                             (string-delete #\cr (ly:gulp-file f))
+                             (string-delete (ly:gulp-file f) #\cr))
+                         #\nl))
                      files))))
   (if (and (number? (ly:get-option 'job-count))
            (>= (length files) (ly:get-option 'job-count)))