from .math_utils import show_byte_matrix def text_width(text: str, font: dict[str, list[int]]) -> int: text_width_overall: int = sum([char_width(font[char]) for char in text]) return text_width_overall + len(text) - 1 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 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:") show_byte_matrix(char, letter) print("shifted") show_byte_matrix(char, shifted) return shifted def align_font(font, debug=False): 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], debug=debug) 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)}" def find_first_mismatch(str1: str, str2: str) -> int: """ Compare two strings of equal length and return the position of first mismatch. Args: str1 (str): First string str2 (str): Second string (same length as str1) Returns: int: Position of first mismatch, or -1 if strings are identical """ for i in range(len(str1)): if str1[i] != str2[i]: return i return -1