Skip to content

Instantly share code, notes, and snippets.

@waterrmalann
Last active December 16, 2022 14:18
Show Gist options
  • Save waterrmalann/0f8b400bf64b0412ac895ad9fcf8f3e8 to your computer and use it in GitHub Desktop.
Save waterrmalann/0f8b400bf64b0412ac895ad9fcf8f3e8 to your computer and use it in GitHub Desktop.
A python module that allows you to create and play with unicode psuedofonts.
"""
Usage:
my_custom_font = PseudoFont('L33TSP34K', '@6cdef9h!jk1mnopqr5+uvwxy2', '48(D3FG#|JK1MN0PQR$7UVWXY2', '')
sample = my_custom_font("The Quick Brown Fox Jumps Over The Lazy Dog")
sample -> '7he Qu!ck 8rown Fox Jump5 0ver 7he 1@2y Do9'
"""
class PseudoFont:
def __init__(self, font_name: str, font_lower: str, font_upper: str, font_digits: str):
# The name of the defined font style.
self.name = font_name
# Custom unicode characters to translate to.
self.font_name = font_name
self.font_lower = font_lower
self.font_upper = font_upper
self.font_digits = font_digits
# Characters used as reference to translate from. (normal english alphabets as default)
# Note: Make sure length of reference and custom fonts are always equal.
# Change this only if you are changing the font assignment pattern or language.
self.reference_lower = 'abcdefghijklmnopqrstuvwxyz'
self.reference_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
self.reference_digits = '0123456789'
def __call__(self, text: str) -> str:
return self.convert(text)
def __str__(self) -> str:
return self.convert(self.name)
def convert(self, raw_text: str) -> str:
"""Convert normal text to styled text."""
t_converted = []
for char in raw_text:
if char in self.reference_lower: # if character is lowercase
t_converted.append(self.font_lower[self.reference_lower.find(char)])
elif char in self.reference_upper: # if char is uppercase
t_converted.append(self.font_upper[self.reference_upper.find(char)])
elif char in self.reference_digits: # if char is digit
t_converted.append(self.font_digits[self.reference_digits.find(char)])
else:
t_converted.append(char)
return ''.join(t_converted)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment