#!/usr/bin/env python """Parses Python block structure. Multiline string constants might breakt it...""" from string import find, strip, rstrip, replace def getIndent(line): if strip(line) == "": return -1 leading = line[:find(line,strip(line))] leading = replace(leading,'\t',' '*8) return len(leading) def parse(filename): file = open(filename) lines = file.readlines() file.close() result, lineNum = parseBlock(lines) return result def parseBlock(lines, lineNum=0, currentIndent=0): result = [] while lineNum < len(lines): line = rstrip(lines[lineNum]) indent = getIndent(line) if indent == -1 or indent == currentIndent: result.append(line) lineNum = lineNum+1 continue if indent > currentIndent: block, lineNum = parseBlock(lines, lineNum, indent) result.append(block) continue return result, lineNum return result, lineNum if __name__=="__main__": import sys, pprint pprint.pprint(parse(sys.argv[1]))