2013-03-21 7 views
68

C'è qualche meccanismo con cui posso trasformare i commenti che vede roxygen, preferibilmente prima che faccia la conversione roxygen-> rd?snippet di roxygen pre-processo o post-processo

Per esempio, supponiamo di avere:

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

Ora, supponiamo che io voglio fare un po 'di conversione del commento prima roxygen lo analizza, per esempio sostituendo tutte le istanze di cose in backticks con \code{}. Vale a dire:

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. 

Posso nutrire preprocess in roxygen in qualche modo che possa funzionare sulle doclet prima (o dopo avrebbe funzionato in questo caso) fa il suo roxygen generazione di documenti?

Non desidero eseguire una ricerca permanente nei miei file .r. Come si può intuire dal mio esempio, sto puntando a un rudimentale supporto per il markdown nei miei commenti su roxygen, e quindi desidero mantenere i miei file .r così com'è per preservare la leggibilità (e inserire le cose \code{..} a livello di codice).

devo solo scrivere la mia versione di roxygenise che gira preprocess su tutti i commenti roxygen stile rilevati nei miei file, li salva temporaneamente da qualche parte, e poi corre il realeroxygenise su quelli?

+1

Non l'ho provato prima, ma AFAIK è possibile scrivere i propri roclet e specificarli nella vostra chiamata di roxygen, ovvero specificare il nuovo 'roclet'. nell'argomento 'roxygenize (..., roclet = mc_roclet)' – Andrie

+3

Suggerirei di costruire in cima a https://github.com/hadley/roxygen3, e guardando gli interni del pacchetto markdown per farlo correttamente. Sarei felice di accettare una patch. – hadley

+0

@hadley cheers, ho già controllato una copia di roxygen3, volevo solo vedere se qualcuno avesse una soluzione compromessa prima di iniziare a scavare. Se riesco a codificare qualcosa che funziona, invierò una patch –

risposta

0

Rivisitando questo un paio di anni più tardi, sembra che Roxygen abbia una funzione register.preref.parsers che è possibile utilizzare per iniettare i propri parser in roxygen. Un tale uso di questo è il promettente maxygen package (mark-down + roxygen = Maxygen), che un'implementazione molto ordinato di trasformazione Markdown di commenti roxygen (anche se solo per le specifiche CommonMark), e si può vedere come viene utilizzato in quel pacchetto di macument function . Attendo con impazienza "pandoc + roxygen = pandoxygen" ... :)

Problemi correlati