More robust parsing of ascii term codes.
This commit is contained in:
parent
79dee3f1b9
commit
0cdb5c3a37
2 changed files with 10 additions and 4 deletions
|
|
@ -162,6 +162,10 @@ class TermStr(collections.UserString):
|
||||||
codes = part[1:end_index].split(";")
|
codes = part[1:end_index].split(";")
|
||||||
previous_code = None
|
previous_code = None
|
||||||
for index, code in enumerate(codes):
|
for index, code in enumerate(codes):
|
||||||
|
try:
|
||||||
|
code_int = int(code)
|
||||||
|
except ValueError:
|
||||||
|
code_int = None
|
||||||
if code in ["", "0", "00"]: # Normal
|
if code in ["", "0", "00"]: # Normal
|
||||||
is_bold, is_italic, is_underlined = False, False, False
|
is_bold, is_italic, is_underlined = False, False, False
|
||||||
fg_color, bg_color = None, None
|
fg_color, bg_color = None, None
|
||||||
|
|
@ -171,13 +175,13 @@ class TermStr(collections.UserString):
|
||||||
is_italic = True
|
is_italic = True
|
||||||
elif code in ["04", "4"]: # underline
|
elif code in ["04", "4"]: # underline
|
||||||
is_underlined = True
|
is_underlined = True
|
||||||
elif 30 <= int(code) <= 37 : # dim fg color
|
elif code_int and 30 <= code_int <= 37 : # dim fg color
|
||||||
fg_color = int(code[1])
|
fg_color = int(code[1])
|
||||||
elif 40 <= int(code) <= 47: # dim bg color
|
elif code_int and 40 <= code_int <= 47: # dim bg color
|
||||||
bg_color = int(code[1])
|
bg_color = int(code[1])
|
||||||
elif 90 <= int(code) <= 97: # high fg color
|
elif code_int and 90 <= code_int <= 97: # high fg color
|
||||||
fg_color = int(code[1]) + 8
|
fg_color = int(code[1]) + 8
|
||||||
elif 100 <= int(code) <= 107: # high bg color
|
elif code_int and 100 <= code_int <= 107: # high bg color
|
||||||
bg_color = int(code[2]) + 8
|
bg_color = int(code[2]) + 8
|
||||||
elif code == "5" and previous_code == "38": # simple fg color
|
elif code == "5" and previous_code == "38": # simple fg color
|
||||||
fg_color = int(codes[index+1])
|
fg_color = int(codes[index+1])
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,8 @@ class TermStrTests(unittest.TestCase):
|
||||||
self.assertEqual(TermStr.from_term(eris.terminal.ESC + "(B" +
|
self.assertEqual(TermStr.from_term(eris.terminal.ESC + "(B" +
|
||||||
eris.terminal.ESC + "[mfoo"),
|
eris.terminal.ESC + "[mfoo"),
|
||||||
termstr.TermStr("foo"))
|
termstr.TermStr("foo"))
|
||||||
|
self.assertEqual(TermStr.from_term(eris.terminal.ESC + "39;49;00mfoo"),
|
||||||
|
termstr.TermStr("foo"))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue