diff --git a/scripts/cucholix/format_repo5.py b/scripts/cucholix/format_repo5.py index 93cbe3b..273c78e 100644 --- a/scripts/cucholix/format_repo5.py +++ b/scripts/cucholix/format_repo5.py @@ -1,12 +1,19 @@ import os import shutil -import re import unicodedata import sys def sanitize_name(name): + # Remove accents and unwanted characters normalized = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('ascii') - return normalized.replace("'", "").replace("’", "").replace("`", "").replace('"', '') + cleaned = normalized.replace("'", "").replace("’", "").replace("`", "").replace('"', '') + cleaned = cleaned.replace(" - ", " ") # Remove " - " to avoid duplication + cleaned = ' '.join(cleaned.split()) # Collapse multiple spaces + return cleaned.strip() + +def title_case_preserve_numbers(name): + # Title-case words but preserve numbers and basic formatting + return ' '.join(word.capitalize() if not word.isupper() else word for word in name.split()) def create_formatted_structure(root_folder): formatted_path = os.path.join(root_folder, 'formatted') @@ -18,10 +25,17 @@ def create_formatted_structure(root_folder): if file.endswith('.pchtxt'): version = file.replace('.pchtxt', '').strip() - # Determine game name: it's the folder just above the .pchtxt file + # Extract game name from parent folder game_name = os.path.basename(os.path.dirname(os.path.join(root, file))) game_name = sanitize_name(game_name) + # Remove trailing "Graphics" if it exists from old names + if game_name.endswith("Graphics"): + game_name = game_name[:-len("Graphics")].strip() + + # Apply proper title casing + game_name = title_case_preserve_numbers(game_name) + mod_name = "Graphics Mods" target_dir = os.path.join(formatted_path, f"{game_name} - {mod_name}") os.makedirs(target_dir, exist_ok=True)