mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-30 23:15:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			153 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python3
 | |
| 
 | |
| import sys
 | |
| import re
 | |
| 
 | |
| # preprocess files for indent check
 | |
| 
 | |
| # Code processing:
 | |
| #
 | |
| # Tabs are kept.
 | |
| # Spaces after tabs are removed if indent is not smaller than in previous line.
 | |
| #
 | |
| # Example:
 | |
| #
 | |
| # <tab>a = 6;
 | |
| # <spc>b = 5;
 | |
| # <tab><spc>if (
 | |
| # <tab><tab><tab><spc><spc>) {
 | |
| # <tab><tab>c = 7;
 | |
| # <tab><spc>}
 | |
| #
 | |
| # Result:
 | |
| #
 | |
| # <tab>a = 6;
 | |
| # <spc>b = 5;
 | |
| # <tab>if (
 | |
| # <tab><tab><tab>) {
 | |
| # <tab><tab>c = 7;
 | |
| # <tab><spc>}
 | |
| 
 | |
| # Multiline comments processing:
 | |
| #
 | |
| # It is expected that tabs indent from comment begining is
 | |
| # used as indent on begining of every commented line.
 | |
| #
 | |
| # Example:
 | |
| #
 | |
| # <tab>/*
 | |
| # <spc><spc>A
 | |
| # <tab><tab>B
 | |
| # <tab><spc>C
 | |
| # D
 | |
| # <tab><spc>*/
 | |
| # <tab><tab>/*
 | |
| # <spc><tab><spc>R
 | |
| #	<tab><spc><tab>*/
 | |
| #
 | |
| # Result:
 | |
| #
 | |
| # <tab>/*
 | |
| # <spc>A
 | |
| # <tab>B
 | |
| # <tab>C
 | |
| # D
 | |
| # <tab>*/
 | |
| # <tab><tab>/*
 | |
| # <spc><tab>*R
 | |
| #	<tab><spc>*/
 | |
| 
 | |
| 
 | |
| def main():
 | |
| 	if len(sys.argv) != 4:
 | |
| 		#print("Bad arguments")
 | |
| 		#print(sys.argv)
 | |
| 		exit()
 | |
| 	# multiline comment begining and end from command line
 | |
| 	mlc_begin = sys.argv[1]
 | |
| 	mlc_end = sys.argv[2]
 | |
| 	file_name = sys.argv[3]
 | |
| 
 | |
| 	mlc_end_len = len(mlc_end)
 | |
| 	re_begin = re.escape(mlc_begin)
 | |
| 	re_end = re.escape(mlc_end)
 | |
| 
 | |
| 	re_mlc_begin = "^.*{}".format(re_begin)
 | |
| 	re_mlc_begin_end = "^.*{}.*{}".format(re_begin, re_end)
 | |
| 	re_mlc_end = "^.*{}".format(re_end)
 | |
| 
 | |
| 	file = open(file_name, "r")
 | |
| 
 | |
| 	lines = []
 | |
| 
 | |
| 	#print(re_mlc_begin)
 | |
| 	#print(re_mlc_begin_end)
 | |
| 	#print(re_mlc_end)
 | |
| 	#print(file)
 | |
| 
 | |
| 	# -1 means not in the multiline comment
 | |
| 	# other values mean multiline comment indent in the number of tabs
 | |
| 	limit = -1
 | |
| 	# this value stores the previous line indent in code mode (not in multiline comment)
 | |
| 	prev = 80
 | |
| 	for line in file:
 | |
| 		if limit == -1:
 | |
| 			find = re.search(re_mlc_begin, line)
 | |
| 			if find:
 | |
| 				if not re.search(re_mlc_begin_end, line):
 | |
| 					# enter in block comment mode
 | |
| 					find = re.search("^\\s*", line)
 | |
| 					limit = find.end()
 | |
| 			find = re.search("^\\t*", line)
 | |
| 			end = find.end()
 | |
| 			if end < prev:
 | |
| 				lines.append(line)
 | |
| 			else:
 | |
| 				# in this case, there can be allowed extra trailing whitespaces
 | |
| 				# up to 3 trailing whitespaces are allowed
 | |
| 				#find = re.search("^\\t+[ ]{0,3}", line)
 | |
| 				# unlimited number of trailng whitespaces are allowed
 | |
| 				find = re.search("^\\t+[ ]*", line)
 | |
| 				fend = find.end() if find else 0
 | |
| 				if fend >= end:
 | |
| 					find = re.search("^\\t*", line)
 | |
| 					lines.append(line[0:find.end()] + line[fend:])
 | |
| 				else:
 | |
| 					lines.append(line)
 | |
| 			prev = end
 | |
| 		else:
 | |
| 			# in block comment mode
 | |
| 			find = re.search(re_mlc_end, line)
 | |
| 			if find:
 | |
| 				# erase whitechars enabled for ignore, end in block comment mode
 | |
| 				begin = find.end() - mlc_end_len
 | |
| 				if begin > limit:
 | |
| 					lines.append(line[0:limit] + line[begin:])
 | |
| 				else:
 | |
| 					lines.append(line)
 | |
| 				limit = -1
 | |
| 			else:
 | |
| 				# erase whitechars enabled for ignore
 | |
| 				find = re.search("^$", line)
 | |
| 				if find:
 | |
| 					lines.append(line)
 | |
| 				else:
 | |
| 					find = re.search("^\\s*", line)
 | |
| 					if find:
 | |
| 						end = find.end()
 | |
| 						if end > limit:
 | |
| 							lines.append(line[0:limit] + line[end:])
 | |
| 						else:
 | |
| 							lines.append(line)
 | |
| 					else:
 | |
| 						lines.append(line)
 | |
| 
 | |
| 	file.close()
 | |
| 	file = open(file_name, "w")
 | |
| 	for line in lines:
 | |
| 		file.write(line)
 | |
| 	file.close()
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 	main()
 |