Files
AVSDevR.HTMLUtils/R/htmlSlugify.R

47 lines
1.2 KiB
R

slugify_charmap_env <- new.env()
#' Native(ish) R slugify
#'
#' @param x String to slugify
#' @param repl What to replace spaces with (default: -)
#' @param lower Lower case the output string
#'
#' @return The slugified output string
#' @export
#'
#' @examples
#' x <- c(
#' "A very short example",
#' "This has a $ symbol",
#' "user@example.com",
#' "~~ABC123~~",
#' "τυχαίος",
#' "file:///tmp/some/path"
#' )
#' htmlSlugify(x)
#' htmlSlugify(x, "_")
htmlSlugify <- function(x, repl = "-", lower = TRUE)
{
if (!exists("slugify_charmap", envir = slugify_charmap_env)){
assign(
"slugify_charmap",
jsonlite::fromJSON(
system.file("slugify_charmap.json", package = "AVSDevR.HTMLUtils")
),
envir = slugify_charmap_env
)
}
slugify_charmap <- get("slugify_charmap", envir = slugify_charmap_env)
x <- stringi::stri_replace_all_fixed(
x, names(slugify_charmap), slugify_charmap, vectorize_all = FALSE
)
x <- stringi::stri_replace_all_regex(x, "[^\\P{P}-]", "")
x <- stringi::stri_trim_both(x)
x <- stringi::stri_replace_all_regex(x, "[[:space:]]+", repl)
if (lower) {
x <- stringi::stri_trans_tolower(x)
}
x
}