[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