1#' Swap the case of a string.
2#'
3#' Return a copy of the string with uppercase characters converted to lowercase and vice versa.
4#'
5#' @param str A string.
6#'
7#' @return A string.
8#'
9#' @references \url{https://docs.python.org/3/library/stdtypes.html#str.swapcase}
10#'
11#' @examples
12#' pystr_swapcase("Swap Me!")
13#'
14#' @export
15pystr_swapcase <- function(str) {
16  return(vapply(str, pystr_swapcase_, character(1), USE.NAMES = FALSE))
17}
18
19pystr_swapcase_ <- function(str) {
20  swapped = ""
21
22  for(i in 1:nchar(str)) {
23    letter = substr(str, i, i)
24
25    if(pystr_isupper(letter)) {
26      swapped = paste0(swapped, pystr_lower(letter))
27    } else if(pystr_islower(letter)) {
28      swapped = paste0(swapped, pystr_upper(letter))
29    } else {
30      swapped = paste0(swapped, letter)
31    }
32  }
33
34  return(swapped)
35}
36