58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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 (indent):
 | 
						|
  lineData = createLineData('', indent)
 | 
						|
 | 
						|
  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
 | 
						|
    ))
 | 
						|
 | 
						|
def main():
 | 
						|
  testName = sys.argv[1]
 | 
						|
 | 
						|
  if testName == 'linedata:basic': linedata_basic(' ')
 | 
						|
  if testName == 'linedata:tabs': linedata_basic('\t')
 | 
						|
  if testName == 'linedata:head-tail': linedata_head_tail()
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  main()
 |