File: RspExpression.R

package info (click to toggle)
r-cran-r.rsp 0.46.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,472 kB
  • sloc: javascript: 612; tcl: 304; sh: 18; makefile: 16
file content (129 lines) | stat: -rw-r--r-- 3,187 bytes parent folder | download
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
###########################################################################/**
# @RdocClass RspExpression
#
# @title "The RspExpression class"
#
# \description{
#  @classhierarchy
#
#  An RspExpression is an @see RspConstruct of format \code{<\% ... \%>}.
# }
#
# @synopsis
#
# \arguments{
#   \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
})