def check(self, ctext: T) -> Optional[str]: logging.debug("Trying PyWhat checker") returned_regexes = self.id.identify(ctext, api=True) if len(returned_regexes["Regexes"]) > 0: matched_regex = returned_regexes["Regexes"][0]["Regex Pattern"] ret = f'The plaintext is a [yellow]{matched_regex["Name"]}[/yellow]' human = f'\nI think the plaintext is a [yellow]{matched_regex["Name"]}[/yellow]' if "Description" in matched_regex and matched_regex["Description"]: s = matched_regex['Description'] # lowercases first letter so it doesn't look weird s = f", which is {s[0].lower() + s[1:]}\n" ret += s human += s # if URL is attached, include that too. if "URL" in matched_regex: link = matched_regex['URL'] + ctext.replace(' ', '') ret += f"\nClick here to view in browser [#CAE4F1][link={link}]{link}[/link][/#CAE4F1]\n" # If greppable mode is on, don't print this if self.config.verbosity > 0: # Print with full stop console.print(human) return ret return None
def decode(self, ctext: T) -> Optional[U]: try: ctext = re.sub(r"[^\S \n]", " ", ctext, flags=re.UNICODE) ctext = ctext.replace("\n", " ") existing_split = self.try_split(ctext.split(" ")) if existing_split is not None: return existing_split # Now we try our own grouping # Remove final bit of whitespace ctext = ctext.replace(" ", "") # Split into bytes, and test return self.try_split([ctext[i : i + 8] for i in range(0, len(ctext), 8)]) # Catch bad octal chars except ValueError: return None
def decode(self, ctext: T) -> Optional[U]: """ Takes a string written in the 'Standard Galactic Alphabet' (aka Minecraft Enchanting Table Symbols) and translates it to ASCII text. """ logger.trace("Attempting Standard Galactic Alphabet Decoder") # To avoid complications, only move forward with the decoding if we can # reasonably assume that the input string is written in the galactic alphabet galactic_matches = 0 for symbol in self.GALACTIC_DICT.keys(): # These symbols are assumed to be frequent enough in regular # text to be skipped when counting the matches. All others are counted. if symbol in ctext and symbol not in ["!", "|"]: galactic_matches += 1 else: continue if galactic_matches == 0: logger.trace( "No matching galactic alphabet letters found. Skipping galactic decoder..." ) return None logger.trace(f"{galactic_matches} galactic alphabet letters found. ") result = "" ctext = (ctext.replace("||", "|").replace("/", "").replace("¡", "").replace( " ̣ ", "").replace(" ̇", " x")) logger.trace(f"Modified string is {ctext}") # Take out the problematic characters consisting of multiple symbols for letter in ctext: if letter in self.GALACTIC_DICT.keys(): # Match every letter of the input to its galactic counterpoint result += self.GALACTIC_DICT[letter] else: # If the current character is not in the defined alphabet, # just accept it as-is (useful for numbers, punctuation,...) result += letter result = result.replace("x ", "x") # Remove the trailing space (appearing as a leading space) # from the x that results from the diacritic replacement logger.trace(f"Decoded string is {result}") return result
def decode(self, ctext: T) -> Optional[U]: for src, dst in self.translate.items(): ctext = ctext.replace(src, dst) return ctext