From 486aefd98d8b10245a3f09de378be849e7559f14 Mon Sep 17 00:00:00 2001 From: Petr Pavlu Date: Sat, 25 Mar 2017 15:20:08 +0000 Subject: [PATCH] Add support for alternate character set in termex --- tests/termex.py | 38 ++++++++++++++++++++++++++++++++++++-- tests/termex.src | 3 +++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/tests/termex.py b/tests/termex.py index 8a55a16..b44e24d 100755 --- a/tests/termex.py +++ b/tests/termex.py @@ -209,6 +209,7 @@ class Term: self._fgcolor = COLOR_DEFAULT self._bgcolor = COLOR_DEFAULT self._charbuf = b'' + self._alt_charset_mode = False # Initialize the GUI if requested. if self._root: @@ -413,11 +414,36 @@ class Term: otherwise. """ + # Handle characters from the alternate set. + if self._alt_charset_mode: + uchars = { + b'q': '\N{BOX DRAWINGS LIGHT HORIZONTAL}', + b'x': '\N{BOX DRAWINGS LIGHT VERTICAL}', + b'm': '\N{BOX DRAWINGS LIGHT UP AND RIGHT}', + b'j': '\N{BOX DRAWINGS LIGHT UP AND LEFT}', + b'l': '\N{BOX DRAWINGS LIGHT DOWN AND RIGHT}', + b'k': '\N{BOX DRAWINGS LIGHT DOWN AND LEFT}', + b'v': '\N{BOX DRAWINGS LIGHT UP AND HORIZONTAL}', + b't': '\N{BOX DRAWINGS LIGHT VERTICAL AND RIGHT}', + b'u': '\N{BOX DRAWINGS LIGHT VERTICAL AND LEFT}', + b'w': '\N{BOX DRAWINGS LIGHT DOWN AND HORIZONTAL}', + b'.': '\N{DOWNWARDS ARROW}', + b',': '\N{LEFTWARDS ARROW}', + b'+': '\N{RIGHTWARDS ARROW}', + b'-': '\N{UPWARDS ARROW}', + b'~': '\N{MIDDLE DOT}'} + + if seq in uchars: + self._print_char(TermChar(uchars[seq], self._attr, + self._fgcolor, self._bgcolor)) + return True + + # Handle normal characters. if re.fullmatch(b'[^\x01-\x1f]+', seq): try: uchar = seq.decode('utf-8') - self._print_char( - TermChar(uchar, self._attr, self._fgcolor, self._bgcolor)) + self._print_char(TermChar(uchar, self._attr, self._fgcolor, + self._bgcolor)) return True except UnicodeError: # Continue on the assumption that it is not yet a complete @@ -444,6 +470,14 @@ class Term: return True # Controls beginning with ESC. + if seq == b'\x1b(0': + # Start alternate character set. + self._alt_charset_mode = True + return True + if seq == b'\x1b(B': + # End alternate character set. + self._alt_charset_mode = False + return True # Control sequences. match = re.fullmatch(b'\x1b\\[([0-9]+)@', seq) diff --git a/tests/termex.src b/tests/termex.src index 9665a93..541434f 100644 --- a/tests/termex.src +++ b/tests/termex.src @@ -1,4 +1,5 @@ termex|TK text widget terminal emulator, + acsc=qqxxmmjjllkkvvttuuww..\,\,++--~~, am, civis=\E[?25l, clear=\E[H\E[2J, @@ -24,6 +25,8 @@ termex|TK text widget terminal emulator, op=\E[39m\E[49m, pairs#64, rev=\E[7m, + rmacs=\E(B, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m, + smacs=\E(0, -- 2.11.4.GIT