|
- source(here::here("R/utils_theme-gen.R"))
- load(here::here("R/sysdata.rda"))
- # R/theme_settings.R contains element_description() and plural_elements()
-
- setup_theme_function <- function(
- f_name = "style_xaringan",
- template = template_variables,
- ...,
- file = "",
- body = " eval(parse(text = call_style_xaringan()))",
- theme_colors = NULL
- ) {
- if (file == "clip" && !requireNamespace("clipr", quietly = TRUE)) file <- ""
- f_body_theme_colors <- include_theme_colors(theme_colors)
- f_body <- c(
- " # DO NOT EDIT - Generated from inst/scripts/generate_theme_functions.R",
- f_body_theme_colors,
- body
- )
- tv <- template
- f_def <- c(
- "# Generated by inst/scripts/generate_theme_functions.R: do not edit by hand\n",
- as.character(
- glue::glue_data(
- tv,
- "#' @param {variable} {description}. ",
- "Defaults to {gsub('[{{}}]', '`', default)}. ",
- "{element_description(element)}",
- "{describe_css_property(css_property)}",
- "{describe_css_variable(css_variable)}"
- )
- ),
- "#' @template theme_params",
- "#' @template style-usage",
- ...,
- glue::glue("{f_name} <- function("),
- as.character(
- glue::glue_data(
- tv,
- " {variable} = {ifelse(!grepl('^[{].+[}]$', default), paste0('\"', default, '\"'), gsub('[{}]', '', default))},"
- )
- ),
- " colors = NULL,",
- " extra_css = NULL,",
- " extra_fonts = NULL,",
- " outfile = \"xaringan-themer.css\"",
- ") {"
- )
- if (!is.null(f_body)) f_def <- c(f_def, f_body, "}")
- if (file == "clip") {
- clipr::write_clip(f_def)
- message("Wrote ", f_name, " function signature to clipboard.")
- } else {
- cat(reflow_roxygen(f_def), sep = "\n", file = file)
- message("Wrote ", f_name, " to ", file)
- }
- invisible()
- }
-
- reflow_roxygen <- function(x) {
- is_roxy_tag <- grepl("^#' @", x)
- roxy_tags <- x[is_roxy_tag]
- roxy_tags <- sub("^#' ", "", roxy_tags)
- roxy_tags <- purrr::map_chr(
- roxy_tags,
- ~ paste(
- "#'", strwrap(
- pack_inline_code(.x),
- width = 77,
- exdent = 2
- ), collapse = "\n")
- )
- roxy_tags <- gsub("\u00A0", " ", roxy_tags)
- x[is_roxy_tag] <- roxy_tags
- x
- }
-
- pack_inline_code <- function(x) {
- stopifnot(length(x) == 1, is.character(x))
- x <- strsplit(x, "")[[1]]
- inline_code <- FALSE
- for (i in seq_along(x)) {
- if (identical(x[i], "`")) {
- inline_code <- !inline_code
- } else if (inline_code && identical(x[i], " ")) {
- x[i] <- "\u00A0"
- }
- }
- paste(x, collapse = "")
- }
-
- include_theme_colors <- function(theme_colors = NULL) {
- if (is.null(theme_colors)) return(NULL)
- unname <- glue::glue("{theme_colors} <- unname({theme_colors})")
- unname <- paste(unname, collapse = "\n ")
- x <- glue::glue('{names(theme_colors)} = {theme_colors}')
- x <- paste(x, collapse = ", ")
- glue::glue(" {unname}\n colors <- c({x}, colors)", .trim = FALSE)
- }
-
- # ---- Write Xaringan Theme Function ----
- setup_theme_function(
- "style_xaringan",
- template_variables,
- "#' @template style_xaringan",
- "#' @export",
- body = paste0(" ", readLines(here::here("inst/scripts/style_xaringan_body.R"))),
- file = here::here("R/style_xaringan.R")
- )
-
- # ---- Monotone Light ----
- setup_theme_function(
- "style_mono_light",
- template_mono_light,
- "#' @template style_mono_light",
- "#' @family Monotone themes",
- "#' @export",
- file = here::here("R/style_mono_light.R"),
- theme_colors = c(base = "base_color", white = "white_color", black = "black_color")
- )
-
- # ---- Monotone Dark ----
- setup_theme_function(
- "style_mono_dark",
- template_mono_dark,
- "#' @template style_mono_dark",
- "#' @family Monotone themes",
- "#' @export",
- file = here::here("R/style_mono_dark.R"),
- theme_colors = c(base = "base_color", white = "white_color", black = "black_color")
- )
-
- # ---- Monotone Accent ----
- setup_theme_function(
- "style_mono_accent",
- template_mono_accent,
- "#' @template style_mono_accent",
- "#' @family Monotone themes",
- "#' @export",
- file = here::here("R/style_mono_accent.R"),
- theme_colors = c(base = "base_color", white = "white_color", black = "black_color")
- )
-
- # ---- Monotone Accent Inverse ----
- setup_theme_function(
- "style_mono_accent_inverse",
- template_mono_accent_inverse,
- "#' @template style_mono_accent_inverse",
- "#' @family Monotone themes",
- "#' @export",
- file = here::here("R/style_mono_accent_inverse.R"),
- theme_colors = c(base = "base_color", white = "white_color", black = "black_color")
- )
-
- # ---- Duotone ----
- setup_theme_function(
- "style_duo",
- template_duo,
- "#' @template style_duo",
- "#' @family Duotone themes",
- "#' @export",
- file = here::here("R/style_duo.R"),
- theme_colors = c(primary = "primary_color", secondary = "secondary_color")
- )
-
- # ---- Duotone Accent ----
- setup_theme_function(
- "style_duo_accent",
- template_duo_accent,
- "#' @template style_duo_accent",
- "#' @family Duotone themes",
- "#' @export",
- file = here::here("R/style_duo_accent.R"),
- theme_colors = c(primary = "primary_color", secondary = "secondary_color",
- white = "white_color", black = "black_color")
- )
-
- # ---- Duotone Accent Inverse ----
- setup_theme_function(
- "style_duo_accent_inverse",
- template_duo_accent_inverse,
- "#' @template style_duo_accent_inverse",
- "#' @family Duotone themes",
- "#' @export",
- file = here::here("R/style_duo_accent_inverse.R"),
- theme_colors = c(primary = "primary_color", secondary = "secondary_color",
- white = "white_color", black = "black_color")
- )
-
- # ---- Solarized Light ----
- setup_theme_function(
- "style_solarized_light",
- template_solarized_light,
- "#' @template style_solarized_light",
- "#' @family Solarized themes",
- "#' @export",
- file = here::here("R/style_solarized_light.R")
- )
-
- # ---- Solarized Dark ----
- setup_theme_function(
- "style_solarized_dark",
- template_solarized_dark,
- "#' @template style_solarized_dark",
- "#' @family Solarized themes",
- "#' @export",
- file = here::here("R/style_solarized_dark.R")
- )
|