From e4e26a78f10d835966f51490ead4499ab5769934 Mon Sep 17 00:00:00 2001 From: Alice Date: Tue, 20 Mar 2018 16:49:06 +0100 Subject: [PATCH] Added overunder.py --- src/overunder.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/overunder.py diff --git a/src/overunder.py b/src/overunder.py new file mode 100644 index 0000000..ba2652e --- /dev/null +++ b/src/overunder.py @@ -0,0 +1,90 @@ +import linecache +import textwrap +import sys +from sys import exit + +class LeavingProgram(Exception): + pass + +def parse(program): + cmds = program.split(',') + splitted_cmds = [] + for cmd in cmds: + splitted = cmd.split() + splitted_cmds.append(splitted) + return splitted_cmds + + #return tokenize(program) +def tokenize(s): + return s.split() + +def repl(): + while True: + try: + val = eval(parse(input('> '))) + if val is not None: + print(val) + except LeavingProgram: + break + +text = None +line_number = 0 +last_index = 0 + + +def eval(cmds): + global text + global line_number + global last_index + + for cmd in cmds: + if cmd == []: + line_number += 1 + last_index = 0 + + elif cmd[0] == 'load': + contents = open('output.txt').read() + text = textwrap.wrap(contents, 40, break_long_words=True) + print('\n'.join(text)) + line_number = 0 + last_index = 0 + + elif cmd[0] == 'show': + print(text[line_number]) + + elif cmd[0] == 'under': + current_line = text[line_number] + char_number = int(cmd[1]) - 1 + char_list = list(current_line) + + x=range(last_index, char_number + last_index + 1) + for time in x: + if time < len(char_list): + char_list[time] = u'\u21e2' + + last_index += char_number + 1 + + joined = ''.join(char_list) + text[line_number] = joined + + elif cmd[0] == 'over': + last_index += int(cmd[1]) + + elif cmd[0] == 'pattern': + + pattern = text[0:line_number + 1] + print('\n'.join(pattern)) + + + elif cmd[0] == 'quit': + print('Come back soon!') + raise LeavingProgram() + else: + joined = ' '.join(cmd) + print('Did not understand command {}'.format(joined)) + + + + +if __name__ == '__main__': + repl()