47 lines
1.2 KiB
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
|
|
}
|