1#' Titlecase a string.
2#'
3#' Return a titlecased version of the string where words start with an uppercase character
4#' and the remaining characters are lowercase.
5#'
6#' @param str A character vector.
7#'
8#' @return A character vector.
9#'
10#' @references \url{https://docs.python.org/3/library/stdtypes.html#str.title}
11#'
12#' @examples
13#' pystr_title("make me pretty!")
14#'
15#' @export
16pystr_title <- function(str) {
17  return(vapply(str, pystr_title_, character(1), USE.NAMES = FALSE))
18}
19
20pystr_title_ <- function(str) {
21  titled = ""
22
23  for(i in 1:nchar(str)) {
24    letter = substr(str, i, i)
25
26    if(i == 1) {
27      titled = paste0(titled, toupper(letter))
28    } else {
29      previous_char = substr(str, i - 1, i - 1)
30
31      if(!pystr_isalpha(previous_char)) {
32        titled = paste0(titled, toupper(letter))
33      } else {
34        titled = paste0(titled, tolower(letter))
35      }
36    }
37  }
38
39  return(titled)
40}
41