1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
dvips <- function(filename, path=NULL, opts=NULL, ..., force=FALSE, verbose=FALSE) {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate arguments
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Argument 'filename' & 'path':
pathname <- Arguments$getReadablePathname(filename, path=path, mustExist=TRUE)
# Argument 'opts':
opts <- Arguments$getCharacters(opts)
opts <- paste(opts, collapse=" ")
# Argument 'force':
force <- Arguments$getLogical(force)
# Argument 'verbose':
verbose <- Arguments$getVerbose(verbose)
if (verbose) {
pushState(verbose)
on.exit(popState(verbose))
}
verbose && enter(verbose, "dvips")
verbose && cat(verbose, "DVI pathname: ", pathname)
filename <- basename(pathname)
path <- dirname(pathname)
filename2 <- gsub("[.]dvi", ".ps", filename)
pathname2 <- Arguments$getWritablePathname(filename2, path=path)
verbose && cat(verbose, "PS pathname: ", pathname2)
# Is output file up to date?
isUpToDate <- FALSE
if (!force && isFile(pathname2)) {
date <- file.info(pathname)$mtime
verbose && cat(verbose, "Source file modified on: ", date)
outDate <- file.info(pathname2)$mtime
verbose && cat(verbose, "Output file modified on: ", outDate)
if (is.finite(date) && is.finite(outDate)) {
isUpToDate <- (outDate >= date)
}
verbose && printf(verbose, "Output file is %sup to date.\n", ifelse(isUpToDate, "", "not "))
}
if (!isUpToDate || !isFile(pathname2)) {
verbose && enter(verbose, "Calling dvips")
# Change working directory
opwd <- getwd()
on.exit(setwd(opwd))
setwd(path)
verbose && cat(verbose, "Working directory: ", getwd())
verbose && cat(verbose, "Filename: ", filename)
cmd <- sprintf("dvips %s %s", opts, filename)
system(cmd)
verbose && exit(verbose)
}
# Sanity check
pathname2 <- Arguments$getReadablePathname(pathname2, mustExist=TRUE)
verbose && exit(verbose)
invisible(pathname2)
} # dvips()
|