from .data import pokemon_generations, main_line_games import unicodedata import re def format_pokemon_id(national_dex: int, region_code: int, form_index: int, gender_code: int) -> str: return f"{national_dex:04d}-{region_code:02d}-{form_index:03d}-{gender_code}" def parse_pfic(pfic): parts = pfic.split('-') return tuple(int(part) if part.isdigit() else part for part in parts) def compare_pokemon_forms(a, b): if a == None or b == None: return False if a == b: return True temp_a = a.lower().replace("forme", "").replace("form", "").replace("é", "e").strip() temp_b = b.lower().replace("forme", "").replace("form", "").replace("é", "e").strip() # Common spelling mistakes temp_a = temp_a.replace("deputante", "debutante").replace("p'au", "pa'u").replace("blood moon", "bloodmoon") temp_b = temp_b.replace("deputante", "debutante").replace("p'au", "pa'u").replace("blood moon", "bloodmoon") if temp_a == temp_b: return True return False def get_generation_from_national_dex(national_dex_number): generation = 1 for gen in pokemon_generations: if pokemon_generations[gen]["min"] <= national_dex_number <= pokemon_generations[gen]["max"]: generation = gen break return generation def sanitise_pokemon_name_for_url(pokemon_name): pokemon_url_name = pokemon_name.replace("♀", "-f").replace("♂", "-m").replace("'", "").replace(".", "").replace('é', 'e').replace(':', '') pokemon_url_name = pokemon_url_name.replace(" ", "-") return pokemon_url_name def remove_accents(input_str): nfkd_form = unicodedata.normalize('NFKD', input_str) return u"".join([c for c in nfkd_form if not unicodedata.combining(c)]) def find_game_generation(game_name: str) -> int: game_name = game_name.lower() for game in main_line_games: if game_name == game["Name"].lower() or game_name in (name.lower() for name in game["AltNames"]): return game["Generation"] return None def sanitize_filename(filename): # Define a dictionary of symbol replacements symbol_replacements = { '?': 'questionmark', '*': 'asterisk', ':': 'colon', '/': 'slash', '\\': 'backslash', '|': 'pipe', '<': 'lessthan', '>': 'greaterthan', '"': 'quote', ' ': '_' } # Replace symbols with their word equivalents for symbol, word in symbol_replacements.items(): filename = filename.replace(symbol, word) # Remove any remaining invalid characters return re.sub(r'[<>:"/\\|?*]', '', filename) def get_objects_by_number(array, target_number): return [obj for obj in array if obj['number'] == target_number] def get_display_name(pokemon, strip_gender = False): display_name = f"{pokemon["national_dex"]:04d} - {pokemon["name"]}" if pokemon["form_name"]: form = pokemon["form_name"] if strip_gender: form = form.replace("Female", "").replace("Male", "").strip() if form != "": display_name += f" ({form})" return display_name