* latex can take in tex commands (including '\nonstopmode', which is
useful), so do some... very bare-bones parsing of such so that we don't error if \nonstopmode + \input{foo} is used. * Have pdf-latex return a non-zero code to the shell if it fails instead of always returning 0. svn: r10559
This commit is contained in:
parent
f3559964fb
commit
17cd54a1ad
|
@ -10,9 +10,17 @@
|
|||
;; set up drag and drop
|
||||
(error 'slatex "pdf-slatex not supported under Mac OS Classic")]
|
||||
[(windows unix macosx)
|
||||
(when (eq? (vector) argv)
|
||||
(error 'slatex "expected a file on the command line~n"))
|
||||
(parameterize ([error-escape-handler exit])
|
||||
(pdf-slatex (vector-ref argv 0)))
|
||||
(exit)]))
|
||||
(when (equal? (vector) argv)
|
||||
(fprintf (current-error-port) "pdf-slatex: expected a file on the command line\n")
|
||||
(exit 1))
|
||||
(let-values ([(nonstop? file) (if (string=? "\\nonstopmode" (vector-ref argv 0))
|
||||
(values #t (vector-ref argv 1))
|
||||
(values #f (vector-ref argv 0)))])
|
||||
(let ([result
|
||||
(parameterize ([error-escape-handler exit]
|
||||
[nonstop-mode? nonstop?])
|
||||
(pdf-slatex file))])
|
||||
(if result
|
||||
(exit)
|
||||
(exit 1))))]))
|
||||
|
||||
|
|
|
@ -12,12 +12,16 @@
|
|||
|
||||
(for-each slatex (vector->list argv))]
|
||||
[(windows unix macosx)
|
||||
(when (eq? (vector) argv)
|
||||
(when (equal? (vector) argv)
|
||||
(fprintf (current-error-port) "slatex: expected a file on the command line\n")
|
||||
(exit 1))
|
||||
(let-values ([(nonstop? file) (if (string=? "\\nonstopmode" (vector-ref argv 0))
|
||||
(values #t (vector-ref argv 1))
|
||||
(values #f (vector-ref argv 0)))])
|
||||
(let ([result
|
||||
(parameterize ([error-escape-handler exit])
|
||||
(slatex (vector-ref argv 0)))])
|
||||
(parameterize ([error-escape-handler exit]
|
||||
[nonstop-mode? nonstop?])
|
||||
(slatex file))])
|
||||
(if result
|
||||
(exit)
|
||||
(exit 1)))]))
|
||||
(exit 1))))]))
|
||||
|
|
|
@ -1,33 +1,44 @@
|
|||
|
||||
(module slatex-wrapper mzscheme
|
||||
(module slatex-wrapper scheme/base
|
||||
(require mzlib/file
|
||||
mzlib/process
|
||||
mzlib/sendevent
|
||||
"slatex.ss")
|
||||
|
||||
(provide slatex latex pdf-slatex pdf-latex slatex/no-latex
|
||||
filename->latex-filename)
|
||||
|
||||
filename->latex-filename nonstop-mode?)
|
||||
|
||||
(define (add-suffix p s)
|
||||
(path->string
|
||||
(bytes->path
|
||||
(bytes-append
|
||||
(path->bytes (if (string? p) (string->path p) p)) s))))
|
||||
|
||||
(define (strip-input input-file)
|
||||
(cond
|
||||
[(regexp-match #rx"^\\\\input{(.*)}$" input-file) => cadr]
|
||||
[else input-file]))
|
||||
|
||||
(define (filename->latex-filename input-file)
|
||||
(let ([norm (normalize-path input-file)])
|
||||
(let* ([filename (strip-input input-file)]
|
||||
[norm (normalize-path filename)])
|
||||
(cond
|
||||
[(file-exists? norm) input-file]
|
||||
[(file-exists? norm) filename]
|
||||
[(file-exists? (add-suffix norm #".tex"))
|
||||
(add-suffix input-file #".tex")]
|
||||
(add-suffix filename #".tex")]
|
||||
[else
|
||||
(error 'filename->latex-filename "~e does not exist" input-file)])))
|
||||
(error 'filename->latex-filename "~e does not exist" filename)])))
|
||||
|
||||
(define nonstop-mode?
|
||||
(make-parameter #f))
|
||||
|
||||
(define (exec-latex exe file)
|
||||
(let ([latex-path (find-executable-path exe #f)])
|
||||
(unless latex-path
|
||||
(error 'latex "could not find latex binary: ~e" exe))
|
||||
(system* latex-path file)))
|
||||
(if (nonstop-mode?)
|
||||
(system* latex-path "\\nonstopmode" (string-append "\\input{" file "}"))
|
||||
(system* latex-path file))))
|
||||
|
||||
;; latex, pdf-latex : string -> boolean
|
||||
;; boolean result indicates success
|
||||
|
|
Loading…
Reference in New Issue
Block a user