diff options
Diffstat (limited to 'alot/settings/manager.py')
-rw-r--r-- | alot/settings/manager.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/alot/settings/manager.py b/alot/settings/manager.py index 1be5a0cc..a1e2ab6d 100644 --- a/alot/settings/manager.py +++ b/alot/settings/manager.py @@ -2,8 +2,9 @@ # This file is released under the GNU GPL, version 3 or a later revision. # For further details see the COPYING file -from datetime import datetime, timedelta +from datetime import datetime, timedelta import email +from functools import cached_property import importlib.util import itertools import logging @@ -596,3 +597,36 @@ class SettingsManager: else: rep = _pretty_datetime(d) return rep + + def _make_trans_table(self, tab_width): + table = {} + + # remove C1 control codes + for i in range(0x80, 0xa0): + table[i] = None + + # replace C0 control codes with characters for their graphical + # representations i.e. "control pictures", which start at U+2400 + for i in range(ord(' ')): + table[i] = 0x2400 + i + + # "delete" character + table[0x7f] = 0x2421 + + # delete LF + table[ord('\r')] = None + + # handle CR normally + del table[ord('\n')] + + # expand tabs + table[ord('\t')] = ' ' * tab_width + + return table + + @cached_property + def sanitize_text_table(self): + return self._make_trans_table(self.get('tabwidth')) + @cached_property + def sanitize_header_table(self): + return self._make_trans_table(1) |