Prusa-Firmware/lang/lib/charset.py

60 lines
1.5 KiB
Python

# Mapping from LCD source encoding to unicode characters
CUSTOM_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 None
def 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 buf
def trans_replace(buf):
for src, dst in TRANS_CHARS.items():
buf = buf.replace(src, dst)
return buf
def unicode_to_source(buf):
buf = trans_replace(buf)
for dst, src in CUSTOM_CHARS.items():
buf = buf.replace(src, dst)
return buf