]> git.donarmstrong.com Git - lilypond.git/commitdiff
(editor-command-template-alist): Add syn
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 6 Jun 2005 07:57:06 +0000 (07:57 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 6 Jun 2005 07:57:06 +0000 (07:57 +0000)
editor (Jaap [de Vos]).

ChangeLog
THANKS
scm/backend-library.scm
scm/editor.scm
scm/ps-to-png.scm [new file with mode: 0644]
scripts/lilypond-invoke-editor.scm
scripts/lilypond-ps2png.py [deleted file]
scripts/lilypond-ps2png.scm [new file with mode: 0644]

index f7a452c114ce0e4b0c9e42408459182435f95ccd..138faf9c01914c85c39d2b16eb8140f8e77105f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-06-06  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * scm/editor.scm (editor-command-template-alist): Add syn
+       editor (Jaap [de Vos]).
+
+2005-06-05  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * scripts/lilypond-ps2png.scm:
+       * scm/ps-to-png.scm: New file.
+
+       * scm/backend-library.scm (postscript->png): Use it.
+
+       * scripts/lilypond-ps-to-png.py: Remove file.
+
+       * python/lilylib.py (get_bbox, make_ps_images): Remove.
+
 2005-06-03  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
        * lily/auto-beam-engraver.cc (acknowledge_grob): remove dead code.
diff --git a/THANKS b/THANKS
index 733d932854942ad4fff3dc57635664649588a535..9f83f7a163a027447d7c99fe53b1226d3f62af4f 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -83,6 +83,7 @@ Paul Scott
 Richard Schoeller
 Rob Platt
 Roman Stöckl-Schmidt
+Russ Jorgensen
 Stephen McCarthy
 Sven Axelsson
 Tapio Tuovila
index c32c5b82e6f2c8c1de8e801c121b48624034f63d..c9d72d8f5d06fd2dda5a56b62c8af4f05102fabb 100644 (file)
@@ -33,7 +33,7 @@
    "\""))
 
 (define-public (postscript->pdf papersizename name)
-  (let* ((pdf-name (string-append (basename name ".ps") ".pdf" ))
+  (let* ((pdf-name (string-append (basename name ".ps") ".pdf"))
         (cmd (format #f
                      "gs\
  -dSAFER\
     (ly:system cmd)
     (if (running-from-gui?) (delete-file name))))
 
-(define-public (postscript->png resolution papersizename name)
-  (let* ((prefix (ly:effective-prefix))
-
-        ;; run the source, if  we are in the build-directory
-        (ps2png-source (if prefix
-                          (format "~a/scripts/lilypond-ps2png.py" prefix)
-                          "lilypond-ps2png"))
-        (cmd (format #f
-                     "~a --resolution=~S --papersize=~a~a ~S"
-                     (if (file-exists? ps2png-source)
-                         (format "python ~a" ps2png-source)
-                         "lilypond-ps2png")
-                     resolution
-                     (sanitize-command-option papersizename)
-                     (if (ly:get-option 'verbose) " --verbose " "")
-                     name)))
+(use-modules (scm ps-to-png))
+(define-public (postscript->png resolution paper-size-name name)
     ;; Do not try to guess the name of the png file,
     ;; GS produces PNG files like BASE-page%d.png.
     ;;(ly:message (_ "Converting to `~a'...")
     ;;     (string-append (basename name ".ps") "-page1.png" )))
+  (let ((paper-size (sanitize-command-option paper-size-name))
+       (verbose? (ly:get-option 'verbose))
+       (rename-page-1? #f))
     (ly:message (_ "Converting to ~a...") "PNG")
-    (ly:system cmd)
+    (make-ps-images name resolution paper-size rename-page-1? verbose?)
     (ly:progress "\n")))
 
 (define-public (postprocess-output paper-book module filename formats)
index 1d17b61d4bee555d64b3035b44f9735e99e8756f..5fdd7f4eb644fd0607417f8ad7caef488b0d98b0 100644 (file)
@@ -36,6 +36,7 @@
     ("nedit" . "nc -noask +%(line)s %(file)s")
     ("gedit" . "gedit +%(line)s %(file)s")
     ("jedit" . "jedit -reuseview %(file)s +line:%(line)s")
+    ("syn" . "syn -line %(line)s -col %(column)s %(file)s")
     ("lilypad" . "lilypad +%(line)s:%(column)s %(file)s")))
 
 (define (get-command-template alist editor)
diff --git a/scm/ps-to-png.scm b/scm/ps-to-png.scm
new file mode 100644 (file)
index 0000000..20c69b1
--- /dev/null
@@ -0,0 +1,117 @@
+;;;; ps-to-png.scm --
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 2005 Jan Nieuwenhuizen <janneke@gnu.org>
+
+(define-module (scm ps-to-png))
+
+(use-modules
+ (ice-9 optargs)
+ (ice-9 regex)
+ (ice-9 rdelim)
+ (srfi srfi-1))
+
+;; gettext wrapper for guile < 1.7.2
+(if (defined? 'gettext)
+    (define-public _ gettext)
+    (define-public (_ x) x))
+
+(define (re-sub re sub string)
+  (regexp-substitute/global #f re string 'pre sub 'post))
+
+(define (read port)
+  (let ((s (read-delimited "" port)))
+    (if (eof-object? s) "" s)))
+
+(define (dir-listing dir-name)
+  (define (dir-helper dir lst)
+    (let ((e (readdir dir)))
+      (if (eof-object? e) lst (dir-helper dir (cons e lst)))))
+  (reverse (dir-helper (opendir dir-name) '())))
+
+(define (dir-re dir re)
+  (filter (lambda (x) (string-match re x)) (dir-listing dir)))
+
+(define BOUNDING-BOX-RE
+  "^%%BoundingBox: (-?[0-9]+) (-?[0-9]+) (-?[0-9]+) (-?[0-9]+)")
+
+(define (get-bbox file-name)
+  (let* ((bbox (string-append file-name ".bbox"))
+        ;; -sOutputFile does not work with bbox?
+        (cmd (format #t "gs\
+ -sDEVICE=bbox\
+ -q\
+ -dNOPAUSE\
+ ~S\
+ -c showpage\
+ -c quit 2>~S"
+                         file-name bbox))
+        (status (system cmd))
+        (s (read (open-file bbox "r")))
+        (m (string-match BOUNDING_BOX_RE s)))
+    (display m)
+    (newline)
+    (if m
+       (list->vector
+        (map (lambda (x) (string->number (car x))) (vector->list m)))
+       #f)))
+
+(define-public (make-ps-images ps-name . rest)
+  (let-optional
+   rest ((resolution 90)
+        (paper-size "a4")
+        (rename-page-1? #f)
+        (verbose? #f))
+   (let* ((base (basename (re-sub "\.e?ps" "" ps-name)))
+         (header (read (open-file ps-name "r")))
+         (png1 (string-append base ".png"))
+         (pngn (string-append base "-page%d.png"))
+         (pngn-re (re-sub "%d" "[0-9]*" pngn))
+         (multi-page? (string-match "\n%%Pages: " header))
+         (output-file (if multi-page? pngn png1))
+         ;;png16m is because Lily produces color nowadays.
+         (cmd (format #f (if multi-page?
+                             "gs\
+ -dEPSCrop\
+ -dGraphicsAlphaBits=4\
+ -dNOPAUSE\
+ -dTextAlphaBits=4\
+ -sDEVICE=png16m\
+ -sOutputFile='~a'\
+ -sPAPERSIZE=~a\
+ -q\
+ -r~S\
+ '~a'\
+ -c showpage\
+ -c quit"
+                             "gs\
+ -s\
+ -dGraphicsAlphaBits=4\
+ -dNOPAUSE\
+ -dTextAlphaBits=4\
+ -sDEVICE=png16m\
+ -sOutputFile='~a'\
+ -sPAPERSIZE=~a\
+ -q\
+ -r~S\
+ '~a'\
+ -c quit")
+                      output-file paper-size resolution ps-name))
+         (foo (for-each delete-file (append (dir-re "." png1)
+                                            (dir-re "." pngn-re))))
+         (bar (if verbose?
+                  (begin
+                    (format (current-error-port) (_ "Invoking `~a'...") cmd)
+                    (newline (current-error-port)))))
+         (status (system cmd)))
+     (if (not (= status 0))
+        (begin
+          (map delete-file
+               (append (dir-re "." png1) (dir-re "." pngn-re)))
+          (format (current-error-port)
+                  (format #f (_ "~a exited with status: ~S") "GS" status))
+          (exit 1)))
+     (if (and rename-page-1? multi-page?)
+        (rename (re-sub "%d" "1" pngn) png1))
+     (append (dir-re "." png1) (dir-re "." pngn-re)))))
index a9cf32c2497c28543d69acef4879ff10f529fb95..18dff212e652a8616097d3e47408eba1226630a5 100755 (executable)
 (define (show-help port)
   (format port (_ "Usage: lilypond-invoke-editor [textedit://]FILE:LINE:COLUMN
 
-Visit a file and position the cursor
+Visit a file and position the cursor.
 
 Options:
-  -h,--help          show this help
-  -v,--version       show version
+  -h, --help          show this help
+  -v, --version       show version
 ")))
 
 (define (parse-options args)
@@ -66,9 +66,6 @@ Options:
     (show-version (current-error-port))
     files))
 
-;;(define (re-sub re sub string)
-;;  (let ((sub-string (if (string? sub) sub (sub re))))
-;;    (regexp-substitute/global #f re string 'pre sub-string 'post)))
 (define (re-sub re sub string)
   (regexp-substitute/global #f re string 'pre sub 'post))
 
@@ -120,7 +117,7 @@ Options:
     (if (not (= (length files) 1))
        (begin
          (show-help (current-error-port))
-         (exit 1)))
+         (exit 2)))
     (set! %load-path (cons LILYPONDPREFIX %load-path))
     (primitive-eval '(use-modules (scm editor)))
     (let* ((uri (car files))
diff --git a/scripts/lilypond-ps2png.py b/scripts/lilypond-ps2png.py
deleted file mode 100644 (file)
index 194af0b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#!@PYTHON@
-
-import getopt
-import glob
-import os
-import string
-import sys
-
-datadir = '@local_lilypond_datadir@'
-if not os.path.isdir (datadir):
-       datadir = '@lilypond_datadir@'
-if os.environ.has_key ('LILYPONDPREFIX') :
-       datadir = os.environ['LILYPONDPREFIX']
-       while datadir[-1] == os.sep:
-               datadir= datadir[:-1]
-
-sys.path.insert (0, os.path.join (datadir, 'python'))
-
-# Customize these
-#if __name__ == '__main__':
-
-import lilylib as ly
-global _;_=ly._
-global re;re = ly.re
-
-preview_resolution = 90
-# Use /etc/papersize?
-preview_papersize = "a4"
-
-# lilylib globals
-program_name = os.path.basename (sys.argv[0])
-verbose_p = 0
-program_version = '@TOPLEVEL_VERSION@'
-pseudo_filter_p = 0 # ugr.
-
-help_summary = _ ("Convert PostScript to PNG image.")
-copyright = ('Han-Wen Nienhuys <hanwen@cs.uu.nl',
-            'Jan Nieuwenhuizen <janneke@gnu.org')
-
-option_definitions = [
-       ('', 'h', 'help', _ ("print this help")),
-       ('', 'V', 'verbose', _ ("be verbose")),
-       (_ ('PAPER'), 'P', 'papersize', _ ("use papersize PAPER")),
-       (_ ('RES'), 'R', 'resolution', _ ("set the resolution of the preview to RES")),
-       ]
-
-(sh, long) = ly.getopt_args (option_definitions)
-try:
-       (options, files) = getopt.getopt (sys.argv[1:], sh, long)
-except getopt.error, s:
-       sys.stderr.write ('\n')
-       ly.error (_ ("getopt says: `%s\'" % s))
-       sys.stderr.write ('\n')
-       ly.help ()
-       ly.exit (2)
-       
-for opt in options:
-       o = opt[0]
-       a = opt[1]
-
-       if o == '--help' or o == '-h':
-               ly.identify (sys.stdout)
-               ly.help ()
-               sys.exit (0)
-       elif o == '--papersize' or o == '-P':
-               preview_papersize = a
-       elif o == '--resolution' or o == '-R':
-               preview_resolution = string.atoi (a)
-       elif o == '--verbose' or o == '-V':
-               verbose_p = 1
-
-ly.identify (sys.stderr)
-for f in files:
-       outfiles = ly.make_ps_images (f, resolution = preview_resolution,
-                                     papersize = preview_papersize)
-       sys.stderr.write (_ ("Wrote `%s'" % string.join (outfiles, ', ')))
-       sys.stderr.write ('\n')
diff --git a/scripts/lilypond-ps2png.scm b/scripts/lilypond-ps2png.scm
new file mode 100644 (file)
index 0000000..ecef3dd
--- /dev/null
@@ -0,0 +1,104 @@
+#!@GUILE@ \
+-e main -s
+!#
+;;;; lilypond-ps2png.scm -- Convert PostScript file to PNG images using GS
+;;;;
+;;;; source file of the GNU LilyPond music typesetter
+;;;;
+;;;; (c)  2005 Jan Nieuwenhuizen <janneke@gnu.org>
+
+(use-modules
+ (ice-9 getopt-long)
+ (ice-9 regex)
+ (srfi srfi-13))
+
+(define PROGRAM-NAME "lilypond-ps2png")
+(define TOPLEVEL-VERSION "@TOPLEVEL_VERSION@")
+(define DATADIR "@datadir@")
+(define COMPILE-TIME-PREFIX
+  (format #f "~a/lilypond/~a" DATADIR TOPLEVEL-VERSION))
+
+(define paper-size "a4")
+(define resolution 90)
+(define verbose? #f)
+(define rename-page-1 #f)
+
+;; argv0 relocation -- do in wrapper?
+(define LILYPONDPREFIX
+  (or (getenv "LILYPONDPREFIX")
+      (let* ((bindir (dirname (car (command-line))))
+            (prefix (dirname bindir))
+            (lilypond-prefix
+             (if (eq? prefix (dirname DATADIR)) COMPILE-TIME-PREFIX
+                 (format #f "~a/share/lilypond/~a"
+                         prefix TOPLEVEL-VERSION))))
+       lilypond-prefix)))
+
+;; gettext wrapper for guile < 1.7.2
+(if (defined? 'gettext)
+    (define-public _ gettext)
+    (define-public (_ x) x))
+
+(define (show-version port)
+  (format port "~a (GNU LilyPond) ~a \n" PROGRAM-NAME TOPLEVEL-VERSION))
+
+(define (show-help port)
+  (format port (_ "Usage: lilypond-ps2png FILE
+
+Convert PostScript file to PNG images.
+
+Options:
+  -h, --help              show this help
+  -P, --paper-size=PAPER  use paper size PAPER
+  -R, --resolution=RES    use resolution RES
+  -V, --verbose           be verbose
+  -v, --version           show version
+")))
+
+(define (parse-options args)
+  (let* ((options (getopt-long args
+                              '((help (single-char #\h))
+                                (verbose (single-char #\V))
+                                (version (single-char #\v))
+                                (paper-size (single-char #\P) (value #t))
+                                ;; compatibility
+                                (papersize (value #t))
+                                (resolution (single-char #\R) (value #t)))))
+        (files (cdr (assq '() options))))
+    (if (assq 'help options)
+       (begin
+         (show-version (current-output-port))
+         (show-help (current-output-port))
+       (exit 0)))
+    (if (assq 'version options)
+       (begin (show-version (current-output-port)) (exit 0)))
+    (if (assq 'verbose options)
+       (begin
+         (set! verbose? #t)
+         (debug-enable 'debug)
+         (debug-enable 'backtrace)))
+
+    (let ((o (or (assq-ref 'paper-size options)
+                (assq-ref 'papersize options))))
+         (if o (set! paper-size o)))
+    (let ((o (assq-ref 'resolution options)))
+         (if o (set! resolution o)))
+    (show-version (current-error-port))
+    files))
+
+(define (main args)
+  (let ((files (parse-options args)))
+    (if (= (length files) 0)
+       (begin
+         (show-help (current-error-port))
+         (exit 2)))
+    (set! %load-path (cons LILYPONDPREFIX %load-path))
+    (primitive-eval '(use-modules (scm ps-to-png)))
+    (for-each
+     (lambda
+      (x)
+      (let ((png-files
+            (make-ps-images x paper-size resolution rename-page-1 verbose?)))
+       (format (current-error-port) (_ "Wrote `~a'") (string-join png-files))
+       (newline (current-error-port))))
+     files)))