#!/usr/bin/python
"""
String convert functions
"""
from __future__ import annotations
import re
[docs]
def camelcase(string:str) -> str:
if string is None or string == "":
return string
words: list = re.split(' |_', string.strip(' _'))
# Can't use Title function in str library as this lowers all but the first char: does not handle existing camelCased input
words_camel: list = [(words[0][0].lower() + words[0][1:])] + list(word[0].upper() + word[1:] for word in words[1:])
return "".join(words_camel)
[docs]
def capitalcase(string: str) -> str:
"""Convert string into capital case.
First letters will be uppercase.
Args:
string: String to convert.
Returns:
string: Capital case string.
"""
string = str(string)
if not string:
return string
return uppercase(string[0]) + string[1:]
[docs]
def constcase(string: str) -> str:
"""Convert string into upper snake case.
Join punctuation with underscore and convert letters into uppercase.
Args:
string: String to convert.
Returns:
string: Const cased string.
"""
return uppercase(snakecase(string))
[docs]
def lowercase(string: str) -> str:
"""Convert string into lower case.
Args:
string: String to convert.
Returns:
string: Lowercase case string.
"""
return str(string).lower()
[docs]
def pascalcase(string: str) -> str:
"""Convert string into pascal case.
Args:
string: String to convert.
Returns:
string: Pascal case string.
"""
return capitalcase(camelcase(string))
[docs]
def pathcase(string: str) -> str:
"""Convert string into path case.
Join punctuation with slash.
Args:
string: String to convert.
Returns:
string: Path cased string.
"""
string = snakecase(string)
if not string:
return string
return re.sub(r"_", "/", string)
[docs]
def backslashcase(string: str) -> str:
"""Convert string into spinal case.
Join punctuation with backslash.
Args:
string: String to convert.
Returns:
string: Spinal cased string.
"""
str1 = re.sub(r"_", r"\\", snakecase(string))
return str1
# return re.sub(r"\\n", "", str1)) # TODO: make regex fot \t ...
[docs]
def sentencecase(string: str) -> str:
"""Convert string into sentence case.
First letter capped and each punctuations are joined with space.
Args:
string: String to convert.
Returns:
string: Sentence cased string.
"""
joiner = ' '
string = re.sub(r"[\-_\.\s]", joiner, str(string))
if not string:
return string
return capitalcase(trimcase(
re.sub(r"[A-Z]", lambda matched: joiner + lowercase(matched.group(0)), string)))
[docs]
def snakecase(string):
if string is None or f"{string}" == "":
return string
word = re.sub(r"([A-Z]+)([A-Z][a-z])", r'\1_\2', string)
word = re.sub(r"([a-z\d])([A-Z])", r'\1_\2', word)
word = word.replace(" ", "_")
return word.lower()
[docs]
def spinalcase(string: str) -> str:
"""Convert string into spinal case.
Join punctuation with hyphen.
Args:
string: String to convert.
Returns:
string: Spinal cased string.
"""
return re.sub(r"_", "-", snakecase(string))
[docs]
def dotcase(string: str) -> str:
"""Convert string into dot case.
Join punctuation with dot.
Args:
string: String to convert.
Returns:
string: Dot cased string.
"""
return re.sub(r"_", ".", snakecase(string))
[docs]
def titlecase(string: str) -> str:
"""Convert string into sentence case.
First letter capped while each punctuations is capitalsed
and joined with space.
Args:
string: String to convert.
Returns:
string: Title cased string.
"""
return ' '.join(
[capitalcase(word) for word in snakecase(string).split("_")]
)
[docs]
def trimcase(string: str) -> str:
"""Convert string into trimmed string.
Args:
string: String to convert.
Returns:
string: Trimmed case string
"""
return str(string).strip()
[docs]
def uppercase(string: str) -> str:
"""Convert string into upper case.
Args:
string: String to convert.
Returns:
string: Uppercase case string.
"""
return str(string).upper()
[docs]
def alphanumcase(string: str) -> str:
"""Cuts all non-alphanumeric symbols,
i.e. cuts all expect except 0-9, a-z and A-Z.
Args:
string: String to convert.
Returns:
string: String with cutted non-alphanumeric symbols.
"""
return ''.join(filter(str.isalnum, str(string)))