---
title: "An Introduction to *document*"
author: "Andreas Dominik Cullmann"
date: 2022-08-17, 09:21:00
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{An Introduction to document}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

# Teaser
Have you ever been tempted to create roxygen2-style documentation comments for
one of your functions that was not part of one of your packages (yet)?

This is exactly what this package is about: running roxygen2 on (chunks of) a
single code file.

## Features
This package enables you to

 - create function documentation with roxygen2 
 - detect code/documentation mismatches  
 - save the documentation to disk
 - view the documentation in your interactive R session

It does so by creating a temporary package from (the chunks of) your single 
code file. It runs **R CMD check** to see if your code and
documentation match.
For the sake of cpu time on CRAN, I have disabled that check in all 
examples below by setting ```check_package = FALSE```. You should **always** 
stick with the default. This is what this package is about!

# Writing Documentation Files to Disk

## A Minimal Example


Suppose you have a script
```{r, comment = ""}
path <- system.file("files", "minimal.R", package = "document")
cat(readLines(path), sep = "\n")
```
Then
```{r, result = "hide", message = FALSE}
d <- document::document(file_name = path, check_package = FALSE)
```
creates a
Portable Document Format 
[(pdf)](https://en.wikipedia.org/wiki/Portable_Document_Format) file,
an Hypertext Markup Language
[(html)](https://en.wikipedia.org/wiki/HTML) file and a 
[plain text](https://en.wikipedia.org/wiki/Plain_text) file.
The plain text reads
```{r, comment = ""}
cat(readLines(d[["txt_path"]]), sep = "\n")
```

You can view a copy of the html file 
[here](http://htmlpreview.github.io/?https://github.com/fvafrCU/document/blob/master/inst/tests/files/minimal.html). 
The pdf file resembles a package's documentation pdf file.

### Checking the code with R CMD check
By default, ```document``` checks the temporary package it creates from your code file using 
**R CMD check**.
The corresponding call would be:

```
res <- document(file_name = system.file("files", "minimal.R",
                                        package = "document"),
                check_package = TRUE)
```
After that you could display the check results with:
```
cat(res[["check_result"]][["output"]][["stdout"]], sep = "\n")
cat(res[["check_result"]][["output"]][["stderr"]], sep = "\n")
```

## A Simple Example
Suppose you have a script

```{r, comment = ""}
path <- system.file("files", "simple.R", package = "document")
cat(readLines(path), sep = "\n")
```
Then you can write documentation using:
```{r, result = "hide", message = FALSE}
d <- document::document(file_name = path, check_package = FALSE)
```
```{r, comment = ""}
cat(readLines(d[["txt_path"]]), sep = "\n")
```

# Displaying Temporary Help Files
```{r, echo = FALSE}
# owing to Dason Kurkiewicz <dasonk@gmail.com>,
# https://github.com/Dasonk/docstring
# This is only needed for the vignette, you can skip the setting of the option
# in regular use.
pager_function <- function(x, ...) {
    x <- readLines(x)
    x <- gsub("_", "", x)
    cat(paste(x, collapse = "\n"), "\n")
}
options(pager = pager_function)
```
You can display the help page for one of the documented functions using
```{r, comment = "", message = FALSE, warning = FALSE}
path <- system.file("files", "minimal.R", package = "document")
document::man(x = path, topic = "foo")
```
