1import re
2
3
4def camelcase_to_title(name: str) -> str:
5 """Convert CamelCase to a readable title.
6
7 Examples:
8 User -> User
9 ThisThing -> This thing
10 URLParser -> URL parser
11 """
12 # Insert space before:
13 # - capitals that follow lowercase letters or digits
14 # - a capital followed by lowercase (for acronyms like URLParser)
15 # - digits that follow letters
16 result = re.sub(
17 r"(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])",
18 " ",
19 name,
20 )
21 # Capitalize first letter, lowercase the rest of each word except acronyms
22 words = result.split()
23 if not words:
24 return name
25 # First word: capitalize first letter
26 # Remaining words: lowercase unless all caps (acronym)
27 processed = [words[0]]
28 for word in words[1:]:
29 if word.isupper() and len(word) > 1:
30 processed.append(word) # Keep acronyms uppercase
31 else:
32 processed.append(word.lower())
33 return " ".join(processed)