---
title: "mindr"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{mindr}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
# Overview
The **mindr** package provides two functions for generating mind maps or generating other things from mind maps.
1. The `mm()` function converts a character vector (input) into a desired format (output).
2. The `mmm()` function converts a file (input) into a desired format (output).
The input can be markdown, Freemind mindmap, R script, or directory. The output can be HTML widget, Freemind mindmap, markdown, R script, directory, Mermaid mindmap.
```{r setup, eval=TRUE}
library(mindr)
```
# From Markdown
## Convert
```{r}
input <- system.file('examples/mindr-md.Rmd', package = 'mindr')
input_txt <- readLines(input, encoding = 'UTF-8')
mm_output <- mm(input_txt, output_type = c('mindmap', 'markdown', 'R', 'widget', 'mermaid'))
```
## Markdown headings
```{r}
mm_output$markdown
```
## FreeMind mind map
```{r, eval=FALSE}
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".mm")
writeLines(mm_output$mindmap, output, useBytes = TRUE)
file.show(output) # Open the output file with the default program, if any
```
## Mermaid mind map
```{r, eval=FALSE}
cat(mm_output$mermaid, sep = '\n')
```
## R script comments
```{r, eval=FALSE}
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".R")
writeLines(mm_output$r, output, useBytes = TRUE)
```
## HTML widget
```{r}
mm_output$widget
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
```
## Generate nested directories
```{r, eval=FALSE}
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input_txt, output_type = 'dir', root = 'mindr',
md_list = TRUE, md_braces = TRUE, md_bookdown = TRUE,
dir_to = temp_dir)
system2('open', temp_dir) # Open the generated directory
```
# From FreeMind mind map
```{r, eval=FALSE}
## Source document ####
input <- system.file('examples/mindr-mm.mm', package = 'mindr')
## file.show(input) # Open the input file with the default program, if any
input_txt <- readLines(input, encoding = 'UTF-8')
## Convert markdown outline, R script, and HTML widget ####
mm_output <- mm(input_txt, output_type = c('markdown', 'R', 'widget'))
mm_output
## Save the output texts as files ####
### markdown outline ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R script ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".R")
writeLines(mm_output$r, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Generate directory according to the source document ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input_txt, output_type = 'dir', root = 'mindr',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generatecd directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directory
```
# From R script
```{r, eval=FALSE}
## Source document ####
input <- system.file('examples/mindr-r.R', package = 'mindr')
## file.show(input) # Open the input file with the default program, if any
input_txt <- readLines(input, encoding = 'UTF-8')
## Convert to mind map text, markdown text, and HTML widget ####
mm_output <- mm(input_txt, output_type = c('mindmap', 'markdown', 'widget'))
mm_output
## Save the output texts as files ####
### mind map ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".mm")
writeLines(mm_output$mindmap, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R markdown ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".Rmd")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Generate directory according to the source document ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input_txt, output_type = 'dir', root = 'mindr',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generated directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directory
```
# From directory
```{r, eval=FALSE}
## Source directory ####
input <- system.file(package = 'mindr')
## Convert to mind map text, markdown outline, R script, and HTML widget ####
mm_output <- mm(input, output_type = c('mindmap', 'markdown', 'R', 'widget'))
mm_output
## Save the output texts as files ####
### mind map ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".mm")
writeLines(mm_output$mindmap, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### markdown outline ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
writeLines(mm_output$markdown, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### R script ####
output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".R")
writeLines(mm_output$r, output, useBytes = TRUE)
# file.show(output) # Open the output file with the default program, if any
message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
### Widget ####
# output <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".html")
# htmlwidgets::saveWidget(mm_output$widget, file = output)
# file.show(output) # Open the output file with the default program, if any
# message('Input: ', input, '\nOutput: ', output)
# file.remove(output) # remove the output file
## Clone the source directory ####
temp_dir <- file.path(tempdir(), 'mindr')
mm_output <- mm(input, output_type = 'dir',
dir_to = temp_dir)
# system2('open', temp_dir) # Open the generated directory
# unlink(temp_dir, recursive = TRUE) # remove the generated directory
```
# From any format
With the help of pandoc, you can display the outline of any documents that pandoc can convert to Markdown.
```{r, eval=FALSE}
# HTML: here we use the R-FQA webpage
myurl <- 'https://cran.r-project.org/doc/FAQ/R-FAQ.html'
input <- tempfile(pattern = "file", tmpdir = tempdir())
markdown_temp <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
download.file(myurl, destfile = input, method = 'curl')
rmarkdown::pandoc_convert(input, from = 'html', to = "markdown", output = markdown_temp)
input_txt <- readLines(markdown_temp, encoding = 'UTF-8')
mindr::mm(input_txt)
# MS Word: here we use a .docx document shipped by the 'officer' package
input <- system.file('doc_examples/example.docx', package = 'officer')
markdown_temp <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
rmarkdown::pandoc_convert(input, to = "markdown", output = markdown_temp)
input_txt <- readLines(markdown_temp, encoding = 'UTF-8')
mindr::mm(input_txt, md_list = TRUE)
# pdf: here we use the pdf files in the R installation
input <- file.path(R.home(), 'doc/manual/R-intro.pdf')
mmm(input)
input <- file.path(R.home(), 'doc/manual/R-data.pdf')
mmm(input, root = 'R-data', md_maxlevel = 2)
# MS Word: here we use a .docx document shipped by the 'officer' package
input <- system.file('doc_examples/example.docx', package = 'officer')
mmm(input)
# HTML: here we use the R-FQA webpage
input <- file.path(R.home(), 'doc/html/rw-FAQ.html')
mmm(input)
```
# Mermaid mind map
Mermaid mind map is the best choice for using **mindr** in reproducible research.
## Yaml
Using it in a Quarto document:
``` yaml
---
format:
html:
mermaid:
theme: default # default, dark, forest, and neutral
execute:
echo: false
---
```
## Chunk
Use the chunk option `results='asis'`, and write R code in a chunk like:
```{r, eval=FALSE}
mdheadings <- c(
'# Heading 1',
'## Heading 1.1',
'## Heading 1.2',
'## Heading 1.3',
'# Heading 2',
'## Heading 2.1',
'## Heading 2.2',
'## Heading 2.3'
)
mmd <- mindr::mm(from = mdheadings,
input_type = 'markdown', output_type = 'mermaid',
mmd_shape = c('round', 'cloud'),
root = 'Demo')
cat(mmd$mermaid, sep = '\n')
```
```{r, eval=FALSE}
mmd <- mindr::mm(from = mdheadings,
input_type = 'markdown', output_type = 'mermaid',
root = 'Demo')
cat(mmd$mermaid, sep = '\n')
```
## Structure of a html book
```{r, eval=FALSE}
myurl <- 'https://yihui.org/litedown/index.html'
temphtml <- tempfile(pattern = "file", tmpdir = tempdir())
tempmd <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".md")
download.file(myurl, destfile = temphtml, method = 'curl')
rmarkdown::pandoc_convert(temphtml, from = 'html', to = "markdown", output = tempmd)
input_txt <- readLines(tempmd, encoding = 'UTF-8')
file.remove(temphtml, tempmd)
headings <- mindr::outline(input_txt[-c(1:(grep('^# Preface', input_txt) - 1))], md_maxlevel = 2, md_braces = TRUE, md_bookdown = TRUE)
headings <- gsub('^([#]+) .*\\}([^\\}]+) \\{.*\\}$', '\\1\\2', headings)
headings[(grep('# Appendix', headings) + 1) : length(headings)] <- paste0('#', headings[(grep('# Appendix', headings) + 1) : length(headings)])
mmd <- mindr::mm(from = headings, input_type = 'markdown', output_type = 'mermaid', root = 'litedown')
cat(mmd$mermaid, sep = '\n')
```
## Structure of a pdf book
```{r, eval=FALSE}
pdffile <- 'my-demo.pdf'
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid')
cat(mmd$mermaid, sep = '\n')
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid', md_maxlevel = 2)
cat(mmd$mermaid, sep = '\n')
mmd <- mindr::mmm(input_file = pdffile, output_type = 'mermaid', md_maxlevel = 1, mmd_shape = 'bang')
cat(mmd$mermaid, sep = '\n')
```
## Structure of a docx document
```{r, eval=FALSE}
infile <- 'my-demo.docx'
mmd <- mindr::mmm(input_file = infile, output_type = 'mermaid')
cat(mmd$mermaid, sep = '\n')
```
## Hyperlink
For hyperlink in mermaid mindmaps, insert a script anywhere in the Quarto document:
``` html
```
Then use the HTML as the text like `mindr`.