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
|
###########################################################################/**
# @RdocClass RspExpression
#
# @title "The RspExpression class"
#
# \description{
# @classhierarchy
#
# An RspExpression is an @see RspConstruct of format \code{<\% ... \%>}.
# }
#
# @synopsis
#
# \arguments{
# \item{object}{A R object.}
# \item{...}{Not used.}
# }
#
# \section{Fields and Methods}{
# @allmethods
# }
#
# @author
#
# @keyword internal
#*/###########################################################################
setConstructorS3("RspExpression", function(...) {
extend(RspConstruct(...), "RspExpression")
})
###########################################################################/**
# @RdocClass RspUnparsedExpression
#
# @title "The RspUnparsedExpression class"
#
# \description{
# @classhierarchy
#
# An RspUnparsedExpression is an @see RspExpression that still has not
# been parsed for its class and content. After @see "parse":ing such
# an object, the class of this RSP expression will be known.
# }
#
# @synopsis
#
# \arguments{
# \item{...}{Arguments passed to @see "RspExpression".}
# }
#
# \section{Fields and Methods}{
# @allmethods
# }
#
# @author
#
# @keyword internal
#*/###########################################################################
setConstructorS3("RspUnparsedExpression", function(...) {
extend(RspExpression(...), "RspUnparsedExpression")
})
#########################################################################/**
# @RdocMethod parseExpression
#
# @title "Parses the unknown RSP expression for its class"
#
# \description{
# @get "title".
# }
#
# @synopsis
#
# \arguments{
# \item{...}{Not used.}
# }
#
# \value{
# Returns an @see "RspExpression" of known class.
# }
#
# @author
#
# \seealso{
# @seeclass
# }
#*/#########################################################################
setMethodS3("parseExpression", "RspUnparsedExpression", function(expr, ...) {
suffixSpecs <- attr(expr, "suffixSpecs")
body <- expr
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# RSP Scripting Elements and Variables
#
# <%=[expression]%>
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pattern <- "^=(.*)$"
if (regexpr(pattern, body) != -1L) {
code <- gsub(pattern, "\\1", body)
code <- trim(code)
res <- RspCodeChunk(code, return=TRUE)
attr(res, "suffixSpecs") <- suffixSpecs
return(res)
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# RSP Scripting Elements and Variables
#
# <%:[expression]%>
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pattern <- "^:(|[ \t\v]*(\n|\r|\r\n))(.*)$"
if (regexpr(pattern, body) != -1L) {
code <- gsub(pattern, "\\3", body)
res <- RspCode(code, echo=TRUE)
attr(res, "suffixSpecs") <- suffixSpecs
return(res)
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# RSP Scripting Elements and Variables
#
# <% [expressions] %>
#
# This applies to anything not recognized above.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
res <- RspCode(trim(body))
attr(res, "suffixSpecs") <- suffixSpecs
res
})
|