| 
									
										
										
										
											2022-10-13 01:45:52 -04:00
										 |  |  |  | special_chars = { | 
					
						
							|  |  |  |  |     "PKMN": 0x4A, | 
					
						
							| 
									
										
										
										
											2023-03-13 18:40:55 -04:00
										 |  |  |  |     "LINE": 0x4F, | 
					
						
							|  |  |  |  |     "CONT": 0x55, | 
					
						
							|  |  |  |  |     "DONE": 0x57, | 
					
						
							|  |  |  |  |     "PROMPT": 0x58, | 
					
						
							| 
									
										
										
										
											2022-10-13 01:45:52 -04:00
										 |  |  |  |     "'d": 0xBB, | 
					
						
							|  |  |  |  |     "'l": 0xBC, | 
					
						
							|  |  |  |  |     "'t": 0xBE, | 
					
						
							|  |  |  |  |     "'v": 0xBF, | 
					
						
							|  |  |  |  |     "PK": 0xE1, | 
					
						
							|  |  |  |  |     "MN": 0xE2, | 
					
						
							|  |  |  |  |     "'r": 0xE4, | 
					
						
							|  |  |  |  |     "'m": 0xE5, | 
					
						
							|  |  |  |  |     "MALE": 0xEF, | 
					
						
							|  |  |  |  |     "FEMALE": 0xF5, | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | char_map = { | 
					
						
							|  |  |  |  |     "@": 0x50,  # String terminator | 
					
						
							|  |  |  |  |     "#": 0x54,  # Poké | 
					
						
							|  |  |  |  |     "‘": 0x70, | 
					
						
							|  |  |  |  |     "’": 0x71, | 
					
						
							|  |  |  |  |     "“": 0x72, | 
					
						
							|  |  |  |  |     "”": 0x73, | 
					
						
							|  |  |  |  |     "·": 0x74, | 
					
						
							|  |  |  |  |     "…": 0x75, | 
					
						
							|  |  |  |  |     " ": 0x7F, | 
					
						
							|  |  |  |  |     "A": 0x80, | 
					
						
							|  |  |  |  |     "B": 0x81, | 
					
						
							|  |  |  |  |     "C": 0x82, | 
					
						
							|  |  |  |  |     "D": 0x83, | 
					
						
							|  |  |  |  |     "E": 0x84, | 
					
						
							|  |  |  |  |     "F": 0x85, | 
					
						
							|  |  |  |  |     "G": 0x86, | 
					
						
							|  |  |  |  |     "H": 0x87, | 
					
						
							|  |  |  |  |     "I": 0x88, | 
					
						
							|  |  |  |  |     "J": 0x89, | 
					
						
							|  |  |  |  |     "K": 0x8A, | 
					
						
							|  |  |  |  |     "L": 0x8B, | 
					
						
							|  |  |  |  |     "M": 0x8C, | 
					
						
							|  |  |  |  |     "N": 0x8D, | 
					
						
							|  |  |  |  |     "O": 0x8E, | 
					
						
							|  |  |  |  |     "P": 0x8F, | 
					
						
							|  |  |  |  |     "Q": 0x90, | 
					
						
							|  |  |  |  |     "R": 0x91, | 
					
						
							|  |  |  |  |     "S": 0x92, | 
					
						
							|  |  |  |  |     "T": 0x93, | 
					
						
							|  |  |  |  |     "U": 0x94, | 
					
						
							|  |  |  |  |     "V": 0x95, | 
					
						
							|  |  |  |  |     "W": 0x96, | 
					
						
							|  |  |  |  |     "X": 0x97, | 
					
						
							|  |  |  |  |     "Y": 0x98, | 
					
						
							|  |  |  |  |     "Z": 0x99, | 
					
						
							|  |  |  |  |     "(": 0x9A, | 
					
						
							|  |  |  |  |     ")": 0x9B, | 
					
						
							|  |  |  |  |     ":": 0x9C, | 
					
						
							|  |  |  |  |     ";": 0x9D, | 
					
						
							|  |  |  |  |     "[": 0x9E, | 
					
						
							|  |  |  |  |     "]": 0x9F, | 
					
						
							|  |  |  |  |     "a": 0xA0, | 
					
						
							|  |  |  |  |     "b": 0xA1, | 
					
						
							|  |  |  |  |     "c": 0xA2, | 
					
						
							|  |  |  |  |     "d": 0xA3, | 
					
						
							|  |  |  |  |     "e": 0xA4, | 
					
						
							|  |  |  |  |     "f": 0xA5, | 
					
						
							|  |  |  |  |     "g": 0xA6, | 
					
						
							|  |  |  |  |     "h": 0xA7, | 
					
						
							|  |  |  |  |     "i": 0xA8, | 
					
						
							|  |  |  |  |     "j": 0xA9, | 
					
						
							|  |  |  |  |     "k": 0xAA, | 
					
						
							|  |  |  |  |     "l": 0xAB, | 
					
						
							|  |  |  |  |     "m": 0xAC, | 
					
						
							|  |  |  |  |     "n": 0xAD, | 
					
						
							|  |  |  |  |     "o": 0xAE, | 
					
						
							|  |  |  |  |     "p": 0xAF, | 
					
						
							|  |  |  |  |     "q": 0xB0, | 
					
						
							|  |  |  |  |     "r": 0xB1, | 
					
						
							|  |  |  |  |     "s": 0xB2, | 
					
						
							|  |  |  |  |     "t": 0xB3, | 
					
						
							|  |  |  |  |     "u": 0xB4, | 
					
						
							|  |  |  |  |     "v": 0xB5, | 
					
						
							|  |  |  |  |     "w": 0xB6, | 
					
						
							|  |  |  |  |     "x": 0xB7, | 
					
						
							|  |  |  |  |     "y": 0xB8, | 
					
						
							|  |  |  |  |     "z": 0xB9, | 
					
						
							|  |  |  |  |     "é": 0xBA, | 
					
						
							|  |  |  |  |     "'": 0xE0, | 
					
						
							|  |  |  |  |     "-": 0xE3, | 
					
						
							|  |  |  |  |     "?": 0xE6, | 
					
						
							|  |  |  |  |     "!": 0xE7, | 
					
						
							|  |  |  |  |     ".": 0xE8, | 
					
						
							|  |  |  |  |     "♂": 0xEF, | 
					
						
							|  |  |  |  |     "¥": 0xF0, | 
					
						
							|  |  |  |  |     "$": 0xF0, | 
					
						
							|  |  |  |  |     "×": 0xF1, | 
					
						
							|  |  |  |  |     "/": 0xF3, | 
					
						
							|  |  |  |  |     ",": 0xF4, | 
					
						
							|  |  |  |  |     "♀": 0xF5, | 
					
						
							|  |  |  |  |     "0": 0xF6, | 
					
						
							|  |  |  |  |     "1": 0xF7, | 
					
						
							|  |  |  |  |     "2": 0xF8, | 
					
						
							|  |  |  |  |     "3": 0xF9, | 
					
						
							|  |  |  |  |     "4": 0xFA, | 
					
						
							|  |  |  |  |     "5": 0xFB, | 
					
						
							|  |  |  |  |     "6": 0xFC, | 
					
						
							|  |  |  |  |     "7": 0xFD, | 
					
						
							|  |  |  |  |     "8": 0xFE, | 
					
						
							|  |  |  |  |     "9": 0xFF, | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-13 18:40:55 -04:00
										 |  |  |  | unsafe_chars = ["@", "#", "PKMN", "LINE", "DONE", "CONT", "PROMPT"] | 
					
						
							| 
									
										
										
										
											2022-10-13 01:45:52 -04:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | def encode_text(text: str, length: int=0, whitespace=False, force=False, safety=False): | 
					
						
							|  |  |  |  |     encoded_text = bytearray() | 
					
						
							|  |  |  |  |     spec_char = "" | 
					
						
							|  |  |  |  |     special = False | 
					
						
							|  |  |  |  |     for char in text: | 
					
						
							|  |  |  |  |         if char == ">": | 
					
						
							|  |  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2023-03-29 22:28:00 -04:00
										 |  |  |  |                 if spec_char in unsafe_chars and safety: | 
					
						
							|  |  |  |  |                     raise KeyError(f"Disallowed Pokemon text special character '<{spec_char}>'") | 
					
						
							| 
									
										
										
										
											2022-10-13 01:45:52 -04:00
										 |  |  |  |                 encoded_text.append(special_chars[spec_char]) | 
					
						
							|  |  |  |  |             except KeyError: | 
					
						
							|  |  |  |  |                 if force: | 
					
						
							|  |  |  |  |                     encoded_text.append(char_map[" "]) | 
					
						
							|  |  |  |  |                 else: | 
					
						
							|  |  |  |  |                     raise KeyError(f"Invalid Pokemon text special character '<{spec_char}>'") | 
					
						
							|  |  |  |  |             spec_char = "" | 
					
						
							|  |  |  |  |             special = False | 
					
						
							|  |  |  |  |         elif char == "<": | 
					
						
							|  |  |  |  |             spec_char = "" | 
					
						
							|  |  |  |  |             special = True | 
					
						
							|  |  |  |  |         elif special is True: | 
					
						
							|  |  |  |  |             spec_char += char | 
					
						
							|  |  |  |  |         else: | 
					
						
							|  |  |  |  |             try: | 
					
						
							|  |  |  |  |                 encoded_text.append(char_map[char]) | 
					
						
							| 
									
										
										
										
											2023-03-29 22:28:00 -04:00
										 |  |  |  |                 if char in unsafe_chars and safety: | 
					
						
							|  |  |  |  |                     raise KeyError(f"Disallowed Pokemon text character '{char}'") | 
					
						
							| 
									
										
										
										
											2022-10-13 01:45:52 -04:00
										 |  |  |  |             except KeyError: | 
					
						
							|  |  |  |  |                 if force: | 
					
						
							|  |  |  |  |                     encoded_text.append(char_map[" "]) | 
					
						
							|  |  |  |  |                 else: | 
					
						
							|  |  |  |  |                     raise KeyError(f"Invalid Pokemon text character '{char}'") | 
					
						
							|  |  |  |  |     if length > 0: | 
					
						
							|  |  |  |  |         encoded_text = encoded_text[:length] | 
					
						
							|  |  |  |  |     while whitespace and len(encoded_text) < length: | 
					
						
							|  |  |  |  |         encoded_text.append(char_map[" " if whitespace is True else whitespace]) | 
					
						
							|  |  |  |  |     return encoded_text |