diff options
author | davidovski <david@sendula.com> | 2023-01-05 11:35:28 +0000 |
---|---|---|
committer | davidovski <david@sendula.com> | 2023-01-05 11:35:28 +0000 |
commit | b99dbb396c313f4b3130b566c0df42c10eec6084 (patch) | |
tree | ffd2bbebe47f66fd1c21000b371ebc897ef84e34 /font.py |
Diffstat (limited to 'font.py')
-rw-r--r-- | font.py | 342 |
1 files changed, 342 insertions, 0 deletions
@@ -0,0 +1,342 @@ +class Font: + """Convert a pixel font into photoimages""" + + FONT_SIZE = 5 + + # effective width of each character, including letter spacing + FONT_WIDTH = 6 + + CHARS = { + "\0": [ + " ", + " ", + " ", + " ", + " ", + ], + "0": [ + " xxx ", + "x xx", + "x x x", + "xx x", + " xxx ", + ], + "1": [ + " x ", + " xx ", + " x ", + " x ", + "xxxxx", + ], + "2": [ + "xxxx ", + " x", + " xxx ", + "x ", + "xxxxx", + ], + "3": [ + "xxxx ", + " x", + "xxxx ", + " x", + "xxxx ", + ], + "4": [ + "x x", + "x x", + "xxxxx", + " x", + " x", + ], + "5": [ + "xxxxx", + "x ", + " xxx ", + " x", + "xxxx ", + ], + "6": [ + " xxx ", + "x ", + "xxxx ", + "x x", + " xxx ", + ], + "7": [ + "xxxxx", + " x", + " x ", + " x ", + " x ", + ], + "8": [ + " xxx ", + "x x", + " xxx ", + "x x", + " xxx ", + ], + "9": [ + " xxx ", + "x x", + " xxxx", + " x", + " x", + ], + + "a": [ + " xxx ", + "x x", + "xxxxx", + "x x", + "x x", + ], + "b": [ + "xxxx ", + "x x", + "xxxx ", + "x x", + "xxxx ", + ], + "c": [ + " xxxx", + "x ", + "x ", + "x ", + " xxxx", + ], + "d": [ + "xxxx ", + "x x", + "x x", + "x x", + "xxxx ", + ], + "e": [ + "xxxxx", + "x ", + "xxxxx", + "x ", + "xxxxx", + ], + "f": [ + "xxxxx", + "x ", + "xxxxx", + "x ", + "x ", + ], + "g": [ + " xxxx", + "x ", + "x xx", + "x x", + " xxxx", + ], + "h": [ + "x x", + "x x", + "xxxxx", + "x x", + "x x", + ], + "i": [ + "xxxxx", + " x ", + " x ", + " x ", + "xxxxx", + ], + "j": [ + "xxxxx", + " x", + " x", + " x", + "xxxx ", + ], + "k": [ + "x x", + "x x ", + "xxx ", + "x x ", + "x x", + ], + "l": [ + "x ", + "x ", + "x ", + "x ", + "xxxxx", + ], + "m": [ + "x x", + "xx xx", + "x x x", + "x x", + "x x", + ], + "n": [ + "x x", + "xx x", + "x x x", + "x xx", + "x x", + ], + "o": [ + " xxx ", + "x x", + "x x", + "x x", + " xxx ", + ], + "p": [ + "xxxx ", + "x x", + "xxxx ", + "x ", + "x ", + ], + "q": [ + " xxx ", + "x x", + "x x", + "x x ", + " xx x", + ], + "r": [ + "xxxx ", + "x x", + "xxxx ", + "x x", + "x x", + ], + "s": [ + " xxxx", + "x ", + " xxx ", + " x", + "xxxx ", + ], + "t": [ + "xxxxx", + " x ", + " x ", + " x ", + " x ", + ], + "u": [ + "x x", + "x x", + "x x", + "x x", + " xxx ", + ], + "v": [ + "x x", + "x x", + "x x", + " x x ", + " x ", + ], + "w": [ + "x x", + "x x", + "x x x", + "x x x", + " x x ", + ], + "x": [ + "x x", + " x x ", + " x ", + " x x ", + "x x", + ], + "y": [ + "x x", + " x x ", + " x ", + " x ", + " x ", + ], + "z": [ + "xxxxx", + " x ", + " x ", + " x ", + "xxxxx", + ], + " ": [ + " ", + " ", + " ", + " ", + " ", + ], + ">": [ + " x ", + " x ", + " x ", + " x ", + " x ", + ], + "<": [ + " x ", + " x ", + " x ", + " x ", + " x ", + ], + } + + @staticmethod + def _create_font_texture(text, color="#fff", letter_space=1): + """Convert a font array into a game texture + + :param text: the characters used within the font + :param color: The colour to use + :param letter_space: The spacing between each letter to use + """ + string = Font._create_characters(text, letter_space) + return [ + [ + None if character == " " else color + for character in row + ] for row in string + ] + + @staticmethod + def _create_characters(text, letter_space): + """Concatenate font symbols + + :param text: The text of the font + :param letter_space: The spacing between each letter + """ + # create a list of all characters in the string + characters = [ + Font.CHARS[c] if c in Font.CHARS else Font.CHARS["\0"] + for c in text.lower() + ] + + # join each row of each character into one "character" + return [ + (" "*letter_space).join([c[row] for c in characters]) + for row in range(Font.FONT_SIZE) + ] + + @staticmethod + def load_text(texture_factory, text, color="#fff", letter_space=1): + """Create and load text into a photo image + + :param texture_factory: The texture factory used for processing + :param text: The text to convert + :param color: Color of the text + :param letter_space: Spacing between letters + """ + return texture_factory.load_texture(f"text:{text}", + Font._create_font_texture( + text, + color=color, + letter_space=letter_space) + ) |