racket/collects/slatex/slatex-wrapper.ss
Stevie Strickland 10767bacaf Strike my last commit -- we just want a way of running slatex without
running latex afterwards.

svn: r10563
2008-07-02 19:54:14 +00:00

102 lines
4.1 KiB
Scheme

(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)
(define (add-suffix p s)
(path->string
(bytes->path
(bytes-append
(path->bytes (if (string? p) (string->path p) p)) s))))
(define (filename->latex-filename input-file)
(let* ([norm (normalize-path input-file)])
(cond
[(file-exists? norm) input-file]
[(file-exists? (add-suffix norm #".tex"))
(add-suffix input-file #".tex")]
[else
(error 'filename->latex-filename "~e does not exist" input-file)])))
(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)))
;; latex, pdf-latex : string -> boolean
;; boolean result indicates success
(define-values (latex pdf-latex)
(letrec ([meta-latex
(lambda (pdf?)
(lambda (input-file)
(let ([file (filename->latex-filename input-file)]
[command-name (if pdf?
"pdflatex"
"latex")])
(case (system-type)
[(macos)
(when pdf?
(error 'latex "do not know how to run pdflatex on ~s" (system-type)))
(system "OTEX")
;; boy, wouldn't it be great if the "actv" appleevent worked for OTEX?
;;(send-event "OTEX" "misc" "acvt")
(let* ([build-oztex-locations
(list
(lambda (x)
(build-path x
"Applications"
"OzTeX"
"OzTeX"))
(lambda (x)
(build-path x
"Applications (Mac OS 9)"
"OzTeX"
"OzTeX")))]
[oztex-locations
(apply
append
(map (lambda (f) (map f (filesystem-root-list))) build-oztex-locations))]
[oztex-location (ormap (lambda (x) (if (file-exists? x) x #f)) oztex-locations)])
(when oztex-location
(with-handlers ([void void]) ;; mzscheme cannot handle result
(send-event "MACS" "aevt" "odoc" (vector 'file oztex-location)))))
(send-event "OTEX" "aevt" "odoc" (vector 'file file))
#t]
[(windows) (exec-latex (add-suffix command-name #".exe") file)]
[(unix macosx)
(exec-latex command-name file)]
[else
(error 'latex "do not know how to run ~s on ~s" command-name (system-type))]))))])
(values
(meta-latex #f)
(meta-latex #t))))
(define-values (slatex pdf-slatex)
(letrec ([meta-slatex
(lambda (latex-fun)
(lambda (filename)
(slatex/no-latex filename)
(latex-fun filename)))])
(values
(meta-slatex latex)
(meta-slatex pdf-latex))))
(define (slatex/no-latex input-file)
(let* ([fixed-file (filename->latex-filename input-file)]
[file (normalize-path fixed-file)])
(let-values ([(base name dir?) (split-path file)])
(parameterize ([current-directory
(if (string? base)
base
(current-directory))])
(slatex::process-main-tex-file (path->string name)))))))