Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(parsermd)
## ----parse-document-----------------------------------------------------------
hw = system.file("examples/hw01.Rmd", package = "parsermd")
(rmd = parse_rmd(hw))
## ----modify-chunk-options-----------------------------------------------------
rmd_figs = rmd |>
rmd_modify(
# The function to apply to each selected node
.f = function(node) {
rmd_node_set_options(node, fig.width = 8, fig.height = 5)
},
# The selection criteria - chunks that already have figure options
has_type("rmd_chunk")
)
# Let's inspect the options of the original plot-dino chunk before modification
rmd_select(rmd, has_label("plot-dino"), keep_yaml = FALSE) |>
rmd_node_options() |>
str()
# and after modification
rmd_select(rmd_figs, has_label("plot-dino"), keep_yaml = FALSE) |>
rmd_node_options() |>
str()
## ----modify-text-content------------------------------------------------------
# Create a function to replace text in markdown nodes
replace_content = function(node) {
rmd_node_set_content(
node,
stringr::str_replace(
rmd_node_content(node),
"correlation",
"covariance"
)
)
}
# Apply this function to the "Exercise 2" section markdown nodes
rmd_text = rmd |>
rmd_modify(
.f = replace_content,
by_section("Exercise 2") & has_type("rmd_markdown")
)
# Let's see the modified text
rmd_text |>
rmd_select(by_section("Exercise 2")) |>
as_document() |>
cat(sep = "\n")
## ----create-setup-chunk-------------------------------------------------------
# Create a new setup chunk
setup = rmd_chunk(
engine = "r",
label = "setup",
options = list(include = FALSE),
code = "knitr::opts_chunk$set(echo = TRUE)"
)
setup
## ----insert-setup-chunk-------------------------------------------------------
# Insert the new chunk after the YAML node
rmd_setup = rmd |>
rmd_insert(
has_type("rmd_yaml"),
nodes = setup,
location = "after"
)
# Print the top of the document to see the new chunk
print(rmd_setup)
## ----wrap-in-callout----------------------------------------------------------
# Wrap the selected section in a warning callout
rmd_wrap = rmd |>
rmd_fenced_div_wrap(
by_section("Exercise 1"),
open = rmd_fenced_div_open(classes = ".callout-warning", id = "#note-callout")
)
# Let's view the new structure as a document
rmd_wrap |>
rmd_select(by_section("Exercise 1"))
## -----------------------------------------------------------------------------
rmd_select(
rmd_wrap,
by_fenced_div(class=".callout-warning"),
keep_yaml = FALSE
)
## -----------------------------------------------------------------------------
doc = c(
"---",
"title: My Video Collection",
"---",
"",
"# Introduction",
"",
"Here is my first video:",
"{{< video https://example.com/video1.mp4 >}}",
"",
"And here is another one with more options:",
"{{< video https://example.com/video2.mp4 title=\"Second Video\" >}}",
"",
"{{< pagebreak >}}",
"",
"That's all for now!"
)
# Parse the text
qmd = parse_qmd(doc)
## -----------------------------------------------------------------------------
# Select the markdown node containing the first shortcode
md = rmd_select(qmd, has_type("rmd_markdown") & has_shortcode(), keep_yaml = FALSE)
# Extract shortcodes from that node
(shortcodes = rmd_extract_shortcodes(md, flatten = TRUE))
## -----------------------------------------------------------------------------
replace_videos = function(node) {
# Check if the node contains a video shortcode
if (rmd_has_shortcode(node, "video")) {
rmd_node_set_content(
node,
stringr::str_replace_all(
rmd_node_content(node),
"\\{\\{< video .* >\\}\\}",
"[VIDEO PLACEHOLDER]"
)
)
} else {
# If not a video shortcode, return the node unchanged
node
}
}
# Apply the modification to the whole document
qmd_modified = rmd_modify(qmd, replace_videos)
# See the result
as_document(qmd_modified) |>
cat(sep="\n")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.