| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | #!/usr/bin/env pythonimport sysimport re# XXX Could be something else, like a file.output = sys.stdoutdef get_indentation_level(s):	cnt = 0	for c in s:		if c != '\t':			return -1		cnt = cnt + 1	return cntdef fix(f):	modes = {}	trailing_comma = False	indentation_level = -1	for line in f.readlines():		# This regexp could be more precise, but it should be good		# enough		regexp = "((\s)*)\.modes\[(\d)+\](\s)*=(\s)*(.*)"		m = re.search(regexp, line)		if not m:			if modes:				output.write("".join(["\t" for i in range(indentation_level)]))				output.write(".modes = { ")				idx = 0				while modes.get(str(idx)):					if idx != 0:						output.write(", ")					output.write(modes[str(idx)])					idx = idx+1				if trailing_comma:					output.write(" },\n")				else:					output.write(" }\n")				# Resetting these..				modes.clear()				trailing_comma = False				indentation_level = -1			output.write(line)		else:			idx = m.group(3)			mode = m.group(6)			# Remove traling comma			if mode[-1] == ',':				mode = mode[:-1]				# This is the last mode for this 				# codelet. Was this also the last				# field ?				if int(idx) == 0:					trailing_comma = True			# Try and guess the level of indentation			if int(idx) == 0:				s = m.group(1)				indentation_level = get_indentation_level(s)			modes[idx] = modedef fix_file(filename):	with open(filename, 'r') as f:		fix(f)def usage():	print "%s <filename>" % sys.argv[0]	sys.exit(1)if __name__ == '__main__':	if len(sys.argv) != 2:		usage()		sys.exit(1)	fix_file(sys.argv[1])
 |