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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
###########################################################################/**
# @RdocDefault rclean
# @alias rclean.RspString
# @alias rclean.RspDocument
#
# @title "Compiles an RSP document into a preprocessed and validated RSP document"
#
# \description{
# @get "title".
# }
#
# @synopsis
#
# \arguments{
# \item{...}{@character strings with RSP markup.}
# \item{file, path}{Alternatively, a file, a URL or a @connection from
# with the strings are read.
# If a file, the \code{path} is prepended to the file, iff given.}
# \item{envir}{The @environment in which the RSP string is preprocessed.}
# \item{args}{A named @list of arguments assigned to the environment
# in which the RSP document is parsed.
# See @see "R.utils::cmdArgs".}
# \item{verbose}{See @see "R.utils::Verbose".}
# }
#
# \value{
# Returns an @see "RspString".
# }
#
# @examples "../incl/rclean.Rex"
#
# @author
#
# \seealso{
# @see "rcat" and @see "rfile".
# }
#
# @keyword file
# @keyword IO
# @keyword internal
#*/###########################################################################
setMethodS3("rclean", "default", function(..., file=NULL, path=NULL, envir=parent.frame(), args="*", verbose=FALSE) {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate arguments
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Argument 'file' & 'path':
if (inherits(file, "connection")) {
} else if (is.character(file)) {
if (!is.null(path)) {
file <- file.path(path, file)
}
if (!isUrl(file)) {
file <- Arguments$getReadablePathname(file, absolute=TRUE)
}
}
# Argument 'verbose':
verbose <- Arguments$getVerbose(verbose)
if (verbose) {
pushState(verbose)
on.exit(popState(verbose))
}
verbose && enter(verbose, "rclean() for default")
if (is.null(file)) {
s <- RspString(...)
} else {
verbose && cat(verbose, "Input file: ", file)
s <- .readText(file)
s <- RspString(s, source=file, ...)
s <- setMetadata(s, name="source", value=file)
}
verbose && cat(verbose, "Length of RSP string: ", nchar(s))
res <- rclean(s, envir=envir, args=args, verbose=verbose)
verbose && exit(verbose)
res
}) # rclean()
setMethodS3("rclean", "RspString", function(object, envir=parent.frame(), args="*", ..., verbose=FALSE) {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate arguments
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Argument 'args':
args <- cmdArgs(args=args)
# Argument 'verbose':
verbose <- Arguments$getVerbose(verbose)
if (verbose) {
pushState(verbose)
on.exit(popState(verbose))
}
verbose && enter(verbose, "rclean() for ", class(object)[1L])
if (length(args) > 0L) {
verbose && enter(verbose, "Assigning RSP arguments to processing environment")
verbose && cat(verbose, "Environment: ", getName(envir))
verbose && cat(verbose, "RSP arguments:")
verbose && str(verbose, args)
# Assign arguments to the parse/evaluation environment
names <- attachLocally(args, envir=envir)
if (verbose) {
if (length(names) > 0L) {
printf(verbose, "Variables assigned: [%d] %s\n", length(names), hpaste(names))
member <- NULL; rm(list="member"); # To please R CMD check
ll <- subset(ll(envir=envir), member %in% names)
print(verbose, ll)
}
}
verbose && exit(verbose)
} else {
names <- NULL
}
if (verbose) {
enter(verbose, "Parse RSP string to RSP document")
cat(verbose, "Parse environment: ", getName(envir))
if (length(names) > 0L) {
ll <- subset(ll(envir=envir), member %in% names)
print(verbose, ll)
}
}
doc <- parseDocument(object, envir=envir, ..., verbose=verbose)
verbose && print(verbose, doc)
verbose && exit(verbose)
res <- rclean(doc, envir=envir, args=NULL, ..., verbose=verbose)
verbose && exit(verbose)
res
}) # rclean()
setMethodS3("rclean", "RspDocument", function(object, envir=parent.frame(), ..., verbose=FALSE) {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate arguments
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Argument 'verbose':
verbose <- Arguments$getVerbose(verbose)
if (verbose) {
pushState(verbose)
on.exit(popState(verbose))
}
verbose && enter(verbose, "rclean() for ", class(object)[1L])
verbose && enter(verbose, "Coerce RSP document to RSP string")
s <- asRspString(object)
verbose && exit(verbose)
verbose && exit(verbose)
s
}) # rclean()
|