[rkward-cvs] SF.net SVN: rkward-code:[4938] trunk/rkward/packages/rkwarddev
m-eik at users.sf.net
m-eik at users.sf.net
Sun Oct 19 17:27:27 UTC 2014
Revision: 4938
http://sourceforge.net/p/rkward/code/4938
Author: m-eik
Date: 2014-10-19 17:27:27 +0000 (Sun, 19 Oct 2014)
Log Message:
-----------
rkwarddev: don't loop through an empty optionset body
Modified Paths:
--------------
trunk/rkward/packages/rkwarddev/R/rk-internal.R
trunk/rkward/packages/rkwarddev/R/rk.JS.optionset.R
trunk/rkward/packages/rkwarddev/R/rk.JS.vars.R
trunk/rkward/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf
trunk/rkward/packages/rkwarddev/man/rk.JS.optionset.Rd
Modified: trunk/rkward/packages/rkwarddev/R/rk-internal.R
===================================================================
--- trunk/rkward/packages/rkwarddev/R/rk-internal.R 2014-10-19 14:04:23 UTC (rev 4937)
+++ trunk/rkward/packages/rkwarddev/R/rk-internal.R 2014-10-19 17:27:27 UTC (rev 4938)
@@ -1163,28 +1163,33 @@
paste.vars <- c()
}
- ## the for loop body
- for.head <- paste0(main.indent, "for (var ", loopvar, " = 0; ", loopvar, " < ", id(columns[[1]]), ".length; ++", loopvar, "){")
+ # if there's no body, we don't need a loop
+ if(length(body) > 0){
+ ## the for loop body
+ for.head <- paste0(main.indent, "for (var ", loopvar, " = 0; ", loopvar, " < ", id(columns[[1]]), ".length; ++", loopvar, "){")
- paste.body <- sapply(body, function(bodyPart){
- rk.paste.JS(bodyPart, level=level, indent.by=scnd.indent)
- })
- # replace the column IDs with indexed ones
- for (thisCol in sapply(columns, id)){
- paste.body <- gsub(
- paste0("([^[:alnum:]]+|^)", thisCol, "([^[:alnum:]]+|$)"),
- paste0("\\1", thisCol, "[", loopvar, "]\\2"),
- paste.body, perl=TRUE)
+ paste.body <- sapply(body, function(bodyPart){
+ rk.paste.JS(bodyPart, level=level, indent.by=scnd.indent)
+ })
+ # replace the column IDs with indexed ones
+ for (thisCol in sapply(columns, id)){
+ paste.body <- gsub(
+ paste0("([^[:alnum:]]+|^)", thisCol, "([^[:alnum:]]+|$)"),
+ paste0("\\1", thisCol, "[", loopvar, "]\\2"),
+ paste.body, perl=TRUE)
+ }
+
+ for.foot <- paste0(
+ scnd.indent, "if(", loopvar, " + 1 < ", id(columns[[1]]), ".length) {\n",
+ thrd.indent, "echo(\"", collapse, "\");\n",
+ scnd.indent, "}\n",
+ main.indent, "}"
+ )
+
+ results <- paste(c(paste.vars, for.head, paste.body, for.foot), collapse="\n")
+ } else {
+ results <- paste.vars
}
-
- for.foot <- paste0(
- scnd.indent, "if(", loopvar, " + 1 < ", id(columns[[1]]), ".length) {\n",
- thrd.indent, "echo(\"", collapse, "\");\n",
- scnd.indent, "}\n",
- main.indent, "}"
- )
-
- results <- paste(c(paste.vars, for.head, paste.body, for.foot), collapse="\n")
return(results)
} ## end function paste.JS.optionsset()
Modified: trunk/rkward/packages/rkwarddev/R/rk.JS.optionset.R
===================================================================
--- trunk/rkward/packages/rkwarddev/R/rk.JS.optionset.R 2014-10-19 14:04:23 UTC (rev 4937)
+++ trunk/rkward/packages/rkwarddev/R/rk.JS.optionset.R 2014-10-19 17:27:27 UTC (rev 4938)
@@ -23,6 +23,9 @@
#' \code{\link[rkwarddev:rk.XML.optioncolumn]{rk.XML.optioncolumn}} to refer to the respective column,
#' \code{rk.JS.optionset} will use appropriate variables.
#'
+#' In case you simply want to define the variables, but not run the loop yet, set \code{vars=TRUE} and
+#' leave \code{...} empty.
+#'
#' @param optionset A XiMpLe.node object, the full \code{<optionset>} node.
#' @param ... The JavaScript code, optionally including the optioncolumn objects. This will become
#' the body of the for loop.
Modified: trunk/rkward/packages/rkwarddev/R/rk.JS.vars.R
===================================================================
--- trunk/rkward/packages/rkwarddev/R/rk.JS.vars.R 2014-10-19 14:04:23 UTC (rev 4937)
+++ trunk/rkward/packages/rkwarddev/R/rk.JS.vars.R 2014-10-19 17:27:27 UTC (rev 4938)
@@ -55,18 +55,19 @@
variables <- list(...)
JS.vars <- new("rk.JS.var",
- vars=sapply(child.list(variables), function(this.var){get.JS.vars(
- JS.var=this.var,
- XML.var=this.var,
- JS.prefix=var.prefix,
- modifiers=modifiers,
- default=default,
- join=join,
- check.modifiers=check.modifiers,
- getter=getter,
- guess.getter=guess.getter)
- })
- )
+ vars=sapply(child.list(variables), function(this.var){
+ get.JS.vars(
+ JS.var=this.var,
+ XML.var=this.var,
+ JS.prefix=var.prefix,
+ modifiers=modifiers,
+ default=default,
+ join=join,
+ check.modifiers=check.modifiers,
+ getter=getter,
+ guess.getter=guess.getter)
+ })
+ )
return(JS.vars)
}
Modified: trunk/rkward/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf
===================================================================
(Binary files differ)
Modified: trunk/rkward/packages/rkwarddev/man/rk.JS.optionset.Rd
===================================================================
--- trunk/rkward/packages/rkwarddev/man/rk.JS.optionset.Rd 2014-10-19 14:04:23 UTC (rev 4937)
+++ trunk/rkward/packages/rkwarddev/man/rk.JS.optionset.Rd 2014-10-19 17:27:27 UTC (rev 4938)
@@ -36,6 +36,11 @@
\code{\link[rkwarddev:rk.XML.optioncolumn]{rk.XML.optioncolumn}} to refer to the respective column,
\code{rk.JS.optionset} will use appropriate variables.
}
+\details{
+In case you simply want to define the variables, but not run the loop yet,
+ set \code{vars=TRUE} and
+leave \code{...} empty.
+}
\examples{
# this example is taken from the plugin skeleton script
# first set up an optionset object
More information about the rkward-tracker
mailing list