|
- render_sass <- function(file, output = NULL, outdir = "dist") {
- if (is.null(output)) {
- output <- fs::path_file(file)
- fs::path_ext(output) <- "rstheme"
- }
- output <- fs::path(outdir, output)
- # cliapp::cli_alert_success("{path {fs::path_rel(file, getwd())}}")
- sass::sass(sass::sass_file(paste(file)), output = output)
- }
-
-
- get_theme_name <- function(file) {
- x <- readLines(file, warn = FALSE)
- x <- grep("rs-theme-name", x, value = TRUE)
- if (!length(x)) return("")
- x <- sub("^\\s*/\\*\\s*rs-theme-name:\\s", "", x)
- x <- sub("\\s*\\*/\\s*$", "", x)
- x
- }
-
- list_sassy_themes <- function(style = c("all", "light", "dark")) {
- if (!requireNamespace("rstudioapi", quietly = TRUE)) {
- stop("The {rstudioapi} package is required")
- }
- if (!rstudioapi::hasFun("getThemes")) {
- stop("Please upgrade RStudio to version 1.2+")
- }
- themes <- rstudioapi::getThemes()
- themes <- switch(
- match.arg(style),
- light = purrr::discard(themes, "isDark"),
- dark = purrr::keep(themes, "isDark"),
- themes
- )
- themes <- purrr::map_chr(themes, "name")
- themes <- themes[grepl("Sassy", themes)]
- unname(themes)
- }
-
- cp_to_rstudio <- function(file) {
- # cliapp::cli_alert("{arg \"{get_theme_name(file)}\"}")
- fs::file_copy(
- file,
- fs::path_home_r(".R", "rstudio", "themes", fs::path_file(file)),
- overwrite = TRUE
- )
- }
-
- base16_make_theme <- function(palette_file) {
- base16_palette <- fs::path_file(palette_file)
- base16_info <- base16_get_theme_info(palette_file)
- base16_attribution <- base16_info$attribution
- base16_name <- base16_info$name
- if (base16_info$isDark) base16_rstudio_style <- base16_info$rstudio_style
-
- base16_theme <- whisker::whisker.render(
- readLines(here::here("src/base16/base16_template.scss"), warn = FALSE)
- )
-
- base16_theme_file <- sub("^_", "", base16_palette)
- # cliapp::cli_alert("Creating src/{arg {base16_theme_file}}")
- writeLines(base16_theme, fs::path(here::here("src", base16_theme_file)))
- }
-
- base16_get_theme_info <- function(palette_file) {
- info <- list()
- base16_meta <- readLines(palette_file, n = 2)
- info$attribution <- base16_meta[1]
- info$rstudio_style <- base16_meta[2]
- info$isDark <- FALSE
- if (base16_meta[2] == "") {
- info$isDark <- TRUE
- info$rstudio_style <- "/* rs-theme-is-dark: TRUE */"
- }
- rgx_name <- "/\\*\\s*([[:alpha:][:punct:] ]+) by"
- info$name <- stringr::str_match(info$attribution, rgx_name)[1, 2]
- info
- }
|