sort_controllers.py (1974B)
1#!/usr/bin/env python 2# 3# Script to sort the game controller database entries in SDL_gamecontroller.c 4 5import re 6 7 8filename = "SDL_gamecontrollerdb.h" 9input = open(filename) 10output = open(filename + ".new", "w") 11parsing_controllers = False 12controllers = [] 13controller_guids = {} 14split_pattern = re.compile(r'([^"]*")([^,]*,)([^,]*,)([^"]*)(".*)') 15 16def save_controller(line): 17 global controllers 18 match = split_pattern.match(line) 19 entry = [ match.group(1), match.group(2), match.group(3) ] 20 bindings = sorted(match.group(4).split(",")) 21 if (bindings[0] == ""): 22 bindings.pop(0) 23 entry.extend(",".join(bindings) + ",") 24 entry.append(match.group(5)) 25 controllers.append(entry) 26 27def write_controllers(): 28 global controllers 29 global controller_guids 30 for entry in sorted(controllers, key=lambda entry: entry[2]): 31 line = "".join(entry) + "\n" 32 if not line.endswith(",\n") and not line.endswith("*/\n"): 33 print "Warning: '%s' is missing a comma at the end of the line" % (line) 34 if (entry[1] in controller_guids): 35 print "Warning: entry '%s' is duplicate of entry '%s'" % (entry[2], controller_guids[entry[1]][2]) 36 controller_guids[entry[1]] = entry 37 38 output.write(line) 39 controllers = [] 40 controller_guids = {} 41 42for line in input: 43 if ( parsing_controllers ): 44 if (line.startswith("{")): 45 output.write(line) 46 elif (line.startswith("#endif")): 47 parsing_controllers = False 48 write_controllers() 49 output.write(line) 50 elif (line.startswith("#")): 51 print "Parsing " + line.strip() 52 write_controllers() 53 output.write(line) 54 else: 55 save_controller(line) 56 else: 57 if (line.startswith("static const char *s_ControllerMappings")): 58 parsing_controllers = True 59 60 output.write(line) 61 62output.close() 63print "Finished writing %s.new" % filename