Rev 80015 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
require("tools")x <- Rd_db("base")system.time(y <- lapply(x, function(e)tryCatch(Rd2HTML(e, out = nullfile()), error = identity))) # 3-5 secstopifnot(!vapply(y, inherits, NA, "error"))## Gave error when "running" \Sexpr{.} DateTimeClasses.Rd## PR#18052: \dots must not be interpreted inside \preformattedRdsnippet <- tempfile()writeLines(r"(\preformatted{\item{\dots}{foo(arg = "\\\\dots", ...)}})", Rdsnippet)#file.show(Rdsnippet)stopifnot(exprs = {identical(capture.output(Rd2HTML(Rdsnippet, fragment = TRUE))[2L],r"(\item{\dots}{foo(arg = "\\dots", ...)})")identical(capture.output(Rd2txt(Rdsnippet, fragment = TRUE))[2L],r"(\item{\dots}{foo(arg = "\\dots", ...)})")identical(capture.output(Rd2latex(Rdsnippet, fragment = TRUE))[2L],r"(\bsl{}item\{\bsl{}dots\}\{foo(arg = "\bsl{}\bsl{}dots", ...)\})")}) # the last two failed in R < 4.1.0## also do not translate \dots in R code lines in \examplesRdsnippet <- tempfile()writeLines(r"(\examples{foo <- function(arg = "\\\\dots", ...) NULL # \dots})", Rdsnippet)#file.show(Rdsnippet)stopifnot(exprs = {identical(capture.output(Rd2ex(parse_Rd(Rdsnippet), fragment = TRUE))[5L],r"(foo <- function(arg = "\\dots", ...) NULL # \dots)")}) # failed in R < 4.1.0## \usage: keep quoted "\\\\dots", but _do_ translate formal \dots argRdsnippet <- tempfile()writeLines(r"(\name{foo}\title{foo}\usage{## keep this comment to ensure a newline at the endfoo(arg = "\\\\dots", \dots)})", Rdsnippet)Rdobj <- parse_Rd(Rdsnippet)check_dots_usage <- function(FUN) {out <- trimws(grep("foo(", capture.output(FUN(Rdobj)),value = TRUE, fixed = TRUE))if (!identical(out, r"(foo(arg = "\\dots", ...))"))stop("unexpected output: ", out)}check_dots_usage(Rd2HTML)check_dots_usage(Rd2txt)check_dots_usage(Rd2latex)## the last two failed in R < 4.1.0; output was foo(arg = "\...", ...)