60 lines
1.5 KiB
Python
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
|