editor (Jaap [de Vos]).
+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.
Richard Schoeller
Rob Platt
Roman Stöckl-Schmidt
+Russ Jorgensen
Stephen McCarthy
Sven Axelsson
Tapio Tuovila
"\""))
(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)
("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)
--- /dev/null
+;;;; 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)))))
(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)
(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))
(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))
+++ /dev/null
-#!@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')
--- /dev/null
+#!@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)))