【问题标题】:Pre- or post-process roxygen snippets预处理或后处理 roxygen 片段
【发布时间】:2013-03-10 12:54:05
【问题描述】:

是否有某种机制可以转换 roxygen 看到的 cmets,最好是在它进行 roxygen->rd 转换之前?

例如,假设我有:

#' My function. Does stuff with numbers.
#'
#' This takes an input `x` and does something with it.
#' @param x a number.
myFunction <- function (x) {
}

现在,假设我想在 roxygen 解析之前对注释进行一些转换,例如用 \code{} 替换所有反引号中的事物实例。即:

preprocess <- function (txt) {
    gsub('`([^ ]+)`', '\\\\code{\\1}', txt)
}
# cat(preprocess('Takes an input `x` and does something with it'.))
# Takes an input \code{x} and does something with it.

我能否以某种方式将preprocess 输入到 roxygen 中,以便它在 roxygen 生成文档之前(或在这种情况下工作之后)在 doclet 上运行它?

我不想在我的.r 文件中进行永久查找替换。正如您可能从我的示例中猜到的那样,我的目标是在我的 roxygen cmets 中提供一些基本的降价支持,因此希望保持我的 .r 文件原样以保持可读性(并以编程方式插入 \code{..} 东西)。

我是否应该编写我自己的roxygenise 版本,在我的文件中所有检测到的 roxygen 样式 cmets 上运行 preprocess,将它们临时保存在某个地方,然后运行 ​​实际 roxygenise那些?

【问题讨论】:

  • 我以前没有尝试过这个,但是AFAIK你可以编写自己的roclets并在你的roxygen调用中指定这些,即你在参数roxygenize(..., roclet=mc_roclet)中指定你的新roclet
  • 我建议在github.com/hadley/roxygen3 之上构建,并查看markdown 包的内部结构以正确执行此操作。我很乐意接受补丁。
  • @hadley 欢呼,我已经检查了一个副本 roxygen3,只是想在我开始挖掘之前看看是否有人有一个黑客在一起的解决方案。如果我设法编写出可行的代码,我将提交一个补丁

标签: r roxygen2


【解决方案1】:

几年后重温一下,看起来 Roxygen 有一个函数 register.preref.parsers 可以用来将自己的解析器注入到 roxygen 中。 一个这样的用途是有前途的maxygen package (markdown + roxygen = maxygen),它是 roxygen cmets 的降价处理的一个非常巧妙的实现(尽管仅适用于 CommonMark 规范),你可以看到它是如何在该包的macument function。我热切地等待“pandoc + roxygen = pandoxygen”... :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多