| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | # Mapping from LCD source encoding to unicode charactersCUSTOM_CHARS = {    '\x04': '🔃',    '\xe4': 'µ',    '\xdf': '°',    '\xe1': 'ä',    '\xe4': 'μ',    '\xef': 'ö',    '\xf5': 'ü',}# Charaters to be remapped prior to source-encoding transformation# This transformation is applied to the translation prior to being converted to the final encoding,# and maps UTF8 to UTF8. It replaces unavailable symbols in the translation to a close# representation in the source encoding.TRANS_CHARS = {    'Ä': 'ä',    'Å': 'A',    'Ö': 'ö',    'Ü': 'ü',    'å': 'a',    'æ': 'ä',    'ø': 'ö',    'ß': 'ss',}def _character_check(buf, valid_chars):    for c in buf:        if (not c.isascii() or not c.isprintable()) and c not in valid_chars:            return c    return Nonedef source_check(buf):    valid_chars = set(CUSTOM_CHARS.values())    valid_chars.add('\n')    return _character_check(buf, valid_chars)def translation_check(buf):    valid_chars = set(CUSTOM_CHARS.keys())    valid_chars.add('\n')    return _character_check(buf, valid_chars)def source_to_unicode(buf):    for src, dst in CUSTOM_CHARS.items():        buf = buf.replace(src, dst)    return bufdef trans_replace(buf):    for src, dst in TRANS_CHARS.items():        buf = buf.replace(src, dst)    return bufdef unicode_to_source(buf):    buf = trans_replace(buf)    for dst, src in CUSTOM_CHARS.items():        buf = buf.replace(src, dst)    return buf
 |