mli.py
import string
from _pyrepl.readline import multiline_input
import _pyrepl.utils
def count_brackets(s: str) -> int:
return s.count("[") - s.count("]")
def more_lines(s: str) -> bool:
return count_brackets(s) > 0
reader = _pyrepl.readline._wrapper.get_reader()
original_after_command = reader.after_command
def after_command(self, cmd) -> None:
original_after_command(cmd)
if cmd.finish: return
buffer = "".join(self.buffer)
msg = repr(buffer)
if msg != self.msg:
self.msg = msg
self.dirty = True
reader.after_command = lambda cmd: after_command(reader, cmd) # fake instance method
if hasattr(_pyrepl.utils, 'ColorSpan'):
from _pyrepl.utils import ColorSpan, Span
import _pyrepl.readline
def gen_colors(s):
for i, c in enumerate(s):
if c in string.ascii_lowercase:
yield ColorSpan(Span(i, i), "string")
elif c in string.digits or c in string.ascii_uppercase:
yield ColorSpan(Span(i, i), "number")
else:
yield ColorSpan(Span(i, i), "reset")
if hasattr(reader, 'gen_colors'):
reader.gen_colors = gen_colors
else:
import _pyrepl.reader
_pyrepl.reader.gen_colors = gen_colors
ps1 = "pydc> "
ps2 = " ... "
while True:
try:
statement = multiline_input(more_lines, ps1, ps2)
except EOFError:
break
except KeyboardInterrupt:
print()
break
print(repr(statement))