% File src/library/tools/man/loadRdMacros.Rd
% Part of the R package, https://www.R-project.org
% Copyright 2016 R Core Team
% Distributed under GPL 2 or later

\name{loadRdMacros}
\alias{loadRdMacros}
\alias{loadPkgRdMacros}
\title{Load User-defined Rd Help System Macros}
\description{
  Loads macros from an \file{.Rd} file, or from several \file{.Rd}
  files contained in a package.
}
\usage{
loadRdMacros(file, macros = TRUE)
loadPkgRdMacros(pkgdir, macros)
}
\arguments{
  \item{file}{
    A file in Rd format containing macro definitions.
  }
  \item{macros}{
    \code{TRUE} or a previous set of macro definitions, in the format
    expected by the \code{\link{parse_Rd}} \code{macros} argument. 
  }
  \item{pkgdir}{
    The base directory of a source package or an installed package.
  }
}
\details{
  The files parsed by this function should contain only macro
  definitions; a warning will be issued if anything else other than
  comments or white space is found.

  The \code{macros} argument may be a filename of a base set of macros,
  or the result of a previous call to \code{loadRdMacros} or
  \code{loadPkgRdMacros} in the same session.  These results should be
  assumed to be valid only within the current session.

  The \code{loadPkgRdMacros} function first looks for an \code{"RdMacros"}
  entry in the package \file{DESCRIPTION} file.  If present, it should
  contain a comma-separated list of other package names; their macros
  will be loaded before those of the current package.  It will then look
  in the current package for \file{.Rd} files in the \file{man/macros}
  or \file{help/macros} subdirectories, and load those.
}
\value{
  These functions each return an environment containing objects with the
  names of the newly defined macros from the last file processed.  The
  parent environment will be macros from the previous file, and so on.
  The first file processed will have \code{\link{emptyenv}()} as its
  parent.
}
\references{
  See the \sQuote{Writing \R Extensions} manual for the syntax of Rd files,
  or \url{https://developer.r-project.org/parseRd.pdf} for a technical
  discussion.
}
\author{
Duncan Murdoch
}
\seealso{
\code{\link{parse_Rd}}
}
\examples{
\donttest{
f <- tempfile()
writeLines(paste0("\\\\newcommand{\\\\logo}{\\\\if{html}{\\\\figure{Rlogo.svg}{options: width=100}",
                  "\\\\if{latex}{\\\\figure{Rlogo.pdf}{options: width=0.5in}}}"),
	    f)
m <- loadRdMacros(f)
ls(m)
ls(parent.env(m))
ls(parent.env(parent.env(m)))
}
}
\keyword{ utilities }
\keyword{ documentation }
