[Roxygen-commits] r226 - pkg/R

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Fri Jun 19 13:21:24 CEST 2009


Author: manuel
Date: 2009-06-19 13:21:24 +0200 (Fri, 19 Jun 2009)
New Revision: 226

Modified:
   pkg/R/collate.R
Log:
Fixed "usage of for() return value" in topological.sort(); [interesting that it originally worked (kind of tricky)].

Modified: pkg/R/collate.R
===================================================================
--- pkg/R/collate.R	2009-06-19 08:30:27 UTC (rev 225)
+++ pkg/R/collate.R	2009-06-19 11:21:24 UTC (rev 226)
@@ -1,165 +1,167 @@
-#' @include roxygen.R
-#' @include string.R
-#' @include functional.R
-#' @include roclet.R
-#' @include description.R
-#' @include parse.R
-roxygen()
-
-#' Collate value parser
-#' @name include
-#' @seealso make.collate.roclet
-register.preref.parsers(parse.value,
-                        'include')
-
-#' Make collate roclet which parses the given files; topologically
-#' sorting \code{@@include}s, and either merging the \code{Collate:}
-#' directive with a pre-existing \file{DESCRIPTION} or writing to
-#' standard out.
-#'
-#' Each \code{@@include} tag should specify the filename of one intrapackage
-#' dependency; multiple \code{@@include} tags may be given.
-#'
-#' Contains the member function \code{parse} which parses an arbitrary number
-#' of files, and \code{parse.dir} which recursively parses a directory tree.
-#'
-#' @param merge.file \file{DESCRIPTION} file with which to merge directive;
-#' or \code{NULL} for none
-#' @param target.file whither to \code{cat} directive (whether merged or
-#' not); blank line is standard out
-#' @param verbose whether to describe what we're doing with the
-#' target.file
-#' @return Rd roclet
-#' @seealso \code{\link{make.roclet}}
-#' @examples
-#' #' `example-a.R', `example-b.R' and `example-c.R' reside
-#' #' in the `example' directory, with dependencies
-#' #' a -> {b, c}. This is `example-a.R'.
-#' #' @@include example-b.R
-#' #' @@include example-c.R
-#' roxygen()
-#'
-#' roclet <- make.collate.roclet()
-#' \dontrun{roclet$parse.dir('example')}
-#' @export
-make.collate.roclet <- function(merge.file=NULL,
-                                target.file='',
-                                verbose=TRUE) {
-  vertices <- NULL
-
-  make.vertex <- function(file) {
-    vertex <- new.env(parent=emptyenv())
-    vertex$file <- trim(file)
-    vertex$discovered <- FALSE
-    vertex$ancestors <- NULL
-    vertex
-  }
-
-  maybe.append.vertex <- function(file)
-    if (is.null(vertices[[file]]))
-      assign.parent('vertices',
-                    append(vertices,
-                           as.list(structure(c(make.vertex(file)),
-                                             names=file))),
-                    environment())
-
-  member <- function(ancestor, ancestors) {
-    for (vertex in ancestors)
-      if (identical(ancestor, vertex))
-        TRUE
-    FALSE
-  }
-
-  maybe.append.ancestor <- function(predecessor, ancestor)
-    if (!member(ancestor, predecessor$ancestors))
-      predecessor$ancestors <-
-        append(ancestor, predecessor$ancestors)
-
-  current.predecessor <- NULL
-
-  parse.include <- function(key, file) {
-    file <- trim(file)
-    maybe.append.vertex(file)
-    ancestor <- vertices[[file]]
-    maybe.append.ancestor(current.predecessor,
-                          ancestor)
-  }
-  
-  pre.parse <- function(partitum) {
-    file <- partitum$srcref$filename
-    maybe.append.vertex(file)
-    vertex <- vertices[[file]]
-    assign.parent('current.predecessor',
-                  vertex,
-                  environment())
-  }
-
-  topological.sort <- function(vertices) {
-    sorted <- NULL
-    visit <- function(predecessor) {
-      predecessor$discovered <- TRUE
-      for (ancestor in predecessor$ancestors)
-        if (!ancestor$discovered)
-          visit(ancestor)
-      assign.parent('sorted',
-                    append(sorted, predecessor),
-                    environment())
-    }
-    for (vertex in vertices)
-      if (!vertex$discovered)
-        visit(vertex)
-  }
-
-  COLLATE.FIELD <- 'Collate:'
-
-  merge <- function(files) {
-    if (verbose && !is.null.string(target.file))
-      cat(sprintf('Merging collate directive with %s to %s',
-                  merge.file,
-                  target.file), '\n')
-    pre.parse <- function(parsed.fields) unlink(target.file)
-    post.parse <- function(parsed.fields)
-      cat.description('Collate', files, file=target.file)
-    parse.default <- Curry(cat.description, file=target.file)
-    parser <- make.description.parser(parse.default,
-                                      pre.parse=pre.parse,
-                                      post.parse=post.parse)
-    parser$register.parser('Collate', noop.description)
-    ## Force parse.description.file to be evaluated before
-    ## parser$parser (applicative order).
-    parsed.file <- parse.description.file(merge.file)
-    parser$parse(parsed.file)
-  }
-
-  post.files <- function() {
-    files <- do.call(paste, Map(function(vertex)
-                                sprintf("'%s'", vertex$file),
-                                topological.sort(vertices)))
-    if (!is.null(cwd))
-      setwd(cwd)
-    assign.parent('cwd', NULL, environment())
-    if (!is.null(merge.file))
-      merge(files)
-    else
-      cat.description('Collate', files, file=target.file)
-  }
-
-  roclet <- make.roclet(parse.include,
-                        pre.parse=pre.parse,
-                        post.files=post.files)
-
-  roclet$register.default.parser('include')
-
-  cwd <- NULL
-
-  roclet$parse.dir <- function(dir) {
-    assign.parent('cwd', getwd(), environment())
-    setwd(dir)
-    do.call(roclet$parse,
-            as.list(list.files('.',
-                               recursive=TRUE,
-                               full.names=FALSE)))
-  }
-
-  roclet
-}
+#' @include roxygen.R
+#' @include string.R
+#' @include functional.R
+#' @include roclet.R
+#' @include description.R
+#' @include parse.R
+roxygen()
+
+#' Collate value parser
+#' @name include
+#' @seealso make.collate.roclet
+register.preref.parsers(parse.value,
+                        'include')
+
+#' Make collate roclet which parses the given files; topologically
+#' sorting \code{@@include}s, and either merging the \code{Collate:}
+#' directive with a pre-existing \file{DESCRIPTION} or writing to
+#' standard out.
+#'
+#' Each \code{@@include} tag should specify the filename of one intrapackage
+#' dependency; multiple \code{@@include} tags may be given.
+#'
+#' Contains the member function \code{parse} which parses an arbitrary number
+#' of files, and \code{parse.dir} which recursively parses a directory tree.
+#'
+#' @param merge.file \file{DESCRIPTION} file with which to merge directive;
+#' or \code{NULL} for none
+#' @param target.file whither to \code{cat} directive (whether merged or
+#' not); blank line is standard out
+#' @param verbose whether to describe what we're doing with the
+#' target.file
+#' @return Rd roclet
+#' @seealso \code{\link{make.roclet}}
+#' @examples
+#' #' `example-a.R', `example-b.R' and `example-c.R' reside
+#' #' in the `example' directory, with dependencies
+#' #' a -> {b, c}. This is `example-a.R'.
+#' #' @@include example-b.R
+#' #' @@include example-c.R
+#' roxygen()
+#'
+#' roclet <- make.collate.roclet()
+#' \dontrun{roclet$parse.dir('example')}
+#' @export
+make.collate.roclet <- function(merge.file=NULL,
+                                target.file='',
+                                verbose=TRUE) {
+  vertices <- NULL
+
+  make.vertex <- function(file) {
+    vertex <- new.env(parent=emptyenv())
+    vertex$file <- trim(file)
+    vertex$discovered <- FALSE
+    vertex$ancestors <- NULL
+    vertex
+  }
+
+  maybe.append.vertex <- function(file)
+    if (is.null(vertices[[file]]))
+      assign.parent('vertices',
+                    append(vertices,
+                           as.list(structure(c(make.vertex(file)),
+                                             names=file))),
+                    environment())
+
+  member <- function(ancestor, ancestors) {
+    for (vertex in ancestors)
+      if (identical(ancestor, vertex))
+        TRUE
+    FALSE
+  }
+
+  maybe.append.ancestor <- function(predecessor, ancestor)
+    if (!member(ancestor, predecessor$ancestors))
+      predecessor$ancestors <-
+        append(ancestor, predecessor$ancestors)
+
+  current.predecessor <- NULL
+
+  parse.include <- function(key, file) {
+    file <- trim(file)
+    maybe.append.vertex(file)
+    ancestor <- vertices[[file]]
+    maybe.append.ancestor(current.predecessor,
+                          ancestor)
+  }
+  
+  pre.parse <- function(partitum) {
+    file <- partitum$srcref$filename
+    maybe.append.vertex(file)
+    vertex <- vertices[[file]]
+    assign.parent('current.predecessor',
+                  vertex,
+                  environment())
+  }
+
+  topological.sort <- function(vertices) {
+    sorted <- NULL
+    visit <- function(predecessor) {
+      predecessor$discovered <- TRUE
+      for (ancestor in predecessor$ancestors)
+        if (!ancestor$discovered)
+          visit(ancestor)
+      assign.parent('sorted',
+                    append(sorted, predecessor),
+                    environment())
+    }
+    for (vertex in vertices)
+      if (!vertex$discovered)
+        visit(vertex)
+
+    sorted
+  }
+
+  COLLATE.FIELD <- 'Collate:'
+
+  merge <- function(files) {
+    if (verbose && !is.null.string(target.file))
+      cat(sprintf('Merging collate directive with %s to %s',
+                  merge.file,
+                  target.file), '\n')
+    pre.parse <- function(parsed.fields) unlink(target.file)
+    post.parse <- function(parsed.fields)
+      cat.description('Collate', files, file=target.file)
+    parse.default <- Curry(cat.description, file=target.file)
+    parser <- make.description.parser(parse.default,
+                                      pre.parse=pre.parse,
+                                      post.parse=post.parse)
+    parser$register.parser('Collate', noop.description)
+    ## Force parse.description.file to be evaluated before
+    ## parser$parser (applicative order).
+    parsed.file <- parse.description.file(merge.file)
+    parser$parse(parsed.file)
+  }
+
+  post.files <- function() {
+    files <- do.call(paste, Map(function(vertex)
+                                sprintf("'%s'", vertex$file),
+                                topological.sort(vertices)))
+    if (!is.null(cwd))
+      setwd(cwd)
+    assign.parent('cwd', NULL, environment())
+    if (!is.null(merge.file))
+      merge(files)
+    else
+      cat.description('Collate', files, file=target.file)
+  }
+
+  roclet <- make.roclet(parse.include,
+                        pre.parse=pre.parse,
+                        post.files=post.files)
+
+  roclet$register.default.parser('include')
+
+  cwd <- NULL
+
+  roclet$parse.dir <- function(dir) {
+    assign.parent('cwd', getwd(), environment())
+    setwd(dir)
+    do.call(roclet$parse,
+            as.list(list.files('.',
+                               recursive=TRUE,
+                               full.names=FALSE)))
+  }
+
+  roclet
+}



More information about the Roxygen-commits mailing list