import app.utils.utils as utils def char_width(char_matrix) -> int: """Berechnung der Bits für die Zeichenbreite Args: char_matrix (int): Zeichen als Array[int] Returns: int: Anzahl Bits für die Zeichenbreite """ max_val = max(char_matrix) val = max_val cw = 0 while 0xFFFFFFFF & val: """rechts shiften, bis alles Nullen da sind""" val >>= 1 cw += 1 return cw def font_height(font) -> int: """Höhe in Pixeln eines Fonts Args: font ([int]): der Font für den die Höhe bestimmt wird Returns: int: Höhe in Pixeln """ # wir nehmen uns ein Zeichen des Fonts # die Anzahl der Werte entspricht der Höhe in Pixeln return len(font['a']) def shift_letter_right(char, letter, debug=False) -> bool: """Prüfe ob das Zeichen auch komplett nach rechts gezogen ist Args: letter (_type_): Array[0..nBytes] Returns: bool: _description_ """ def isLetterRight(letter): def isByteRight(byte): return True if 1 & byte == 1 else False for byte in letter: if isByteRight(byte): return True return False def shiftLetterRight(letter): def shift(letter): return [byte >> 1 for byte in letter] shifted = letter for i in range(8): # max 1 Bit's shifted = shift(shifted) if isLetterRight(shifted): break return shifted if isLetterRight(letter): return letter # letter is not right shifted shifted = shiftLetterRight(letter) if debug: print('origin:') utils.show_byte_matrix(char, letter) print('shifted') utils.show_byte_matrix(char, shifted) return shifted def align_font(font): chars = [char for char in font] print(chars) # Print the dictionary print('font_pretty = {') for char in sorted(font.keys()): shifted = shift_letter_right(char=char, letter=font[char]) hex_values = [f'0x{val:02X}' for val in shifted] print(f"\t'{char}': [{', '.join(hex_values)}],") print('}') # return f'#keys: {len(list(font.keys()))}' return f'#keys: {len(font)}'