import sys import os sys.path.insert(1, os.path.join(sys.path[0], '..')) from parser import createLineData, parseLine def next(): # For blank lines, readline will return a newline. # For no result, readline will return a string of length 0. line = sys.stdin.readline() # Since we strip trailing newlines resulting in an empty string for empty lines, # return None if there actually is no result. return line.rstrip('\n') if len(line) > 0 else None def linedata_basic (): lineData = createLineData('') while (l := next()) != None: lineData['line'] = l parseLine(lineData) print("| level {level} | indent {indent} | offsetHead {offsetHead} | offsetTail {offsetTail} | line {line} |".format( level = lineData['level'], indent = lineData['indent'], offsetHead = lineData['offsetHead'], offsetTail = lineData['offsetTail'], line = lineData['line'] )) def linedata_tabs (): lineData = createLineData('', '\t') while (l := next()) != None: lineData['line'] = l parseLine(lineData) print("| level {level} | indent {indent} | offsetHead {offsetHead} | offsetTail {offsetTail} | line {line} |".format( level = lineData['level'], indent = lineData['indent'], offsetHead = lineData['offsetHead'], offsetTail = lineData['offsetTail'], line = lineData['line'] )) def linedata_head_tail (): lineData = createLineData('') while (l := next()) != None: lineData['line'] = l parseLine(lineData) head = lineData['line'][lineData['offsetHead']:lineData['offsetTail']] if len(lineData['line']) > lineData['offsetHead'] else '' tail = lineData['line'][lineData['offsetTail'] + 1:] if len(lineData['line']) > lineData['offsetTail'] + 1 else '' print("| head {head} | tail {tail} |".format( head = head, tail = tail )) tests = { 'linedata:basic': linedata_basic, 'linedata:tabs': linedata_tabs, 'linedata:head-tail': linedata_head_tail } def main(): testName = sys.argv[1] test = tests[testName] test() if __name__ == "__main__": main()