Thanks for looking into this, empty string is the natural solution indeed. Georgi
-----Original Message----- From: Tomas Kalibera [mailto:tomas.kalib...@gmail.com] Sent: 25 May 2018 10:05 To: Georgi Boshnakov; r-devel@r-project.org Subject: Re: [Rd] Rd parser throws error for user macros invoked with empty argument Thanks for the report and the examples - and they do not have to be that verbose, it is enough to just define and use a command, e.g. cat("\\newcommand{\\mac1}{MAC1:#1}\\mac1{}", file=f) rd <- tools::parse_Rd(f) Whenever you get an error message like "Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'NULL'", there is a bug (at least the error message should be relevant/informative). I am testing a patch that will allow empty arguments to macros (they will expand to an empty string, like in LaTeX). Best Tomas On 05/14/2018 11:23 PM, Georgi Boshnakov wrote: > Bug or feature? > > I get the following error from parse_Rd() when a user Rd macro (including > system ones) is invoked with empty argument {}, > eg \mymacro{}: > > Error in tools::parse_Rd(fn) : > Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'NULL' > > A full example is further below with the system macro \CRANpkg{}. In this > example it doesn't make sense to use empty argument but the error is not > specific to this particular macro. > > ------ > Georgi Boshnakov > > > Create an Rd file containing system macro \CRANpkg{bibtex}, parse_Rd() is ok: > > ================= > fn <- tempfile() > writeLines("\\name{dummyfun} > \\alias{dummyfun} > \\title{Dummy title} > \\description{Dummy description} > \\usage{ > dummyfun(x, ...) > } > \\arguments{ > \\item{x}{a value.} > \\item{\\dots}{further arguments.} > } > \\details{ > \\CRANpkg{bibtex} > } > ", fn) > >> tools::parse_Rd(fn) > ... > \details{ > \href{{https://CRAN.R-project.org/package=bibtex}{\pkg{bibtex}}} > } > > ================ > > With empty argument - \CRANpkg{} - Rd parser throws error. Of course it is > silly in this example but I have used it with other user defined macros > where it may make sense to have empty argument. > > ================ >> writeLines("\\name{dummyfun} > \\alias{dummyfun} > \\title{Dummy title} > \\description{Dummy description} > \\usage{ > dummyfun(x, ...) > } > \\arguments{ > \\item{x}{a value.} > \\item{\\dots}{further arguments.} > } > \\details{ > \\CRANpkg{} > } > ", fn) >> tools::parse_Rd(fn) > Error in tools::parse_Rd(fn) : > Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'NULL' > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel