| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env python
- #
- # Script to sort the game controller database entries in SDL_gamecontroller.c
- import re
- filename = "SDL_gamecontrollerdb.h"
- input = open(filename)
- output = open(filename + ".new", "w")
- parsing_controllers = False
- controllers = []
- controller_guids = {}
- split_pattern = re.compile(r'([^"]*")([^,]*,)([^,]*,)([^"]*)(".*)')
- def save_controller(line):
- global controllers
- match = split_pattern.match(line)
- entry = [ match.group(1), match.group(2), match.group(3) ]
- bindings = sorted(match.group(4).split(","))
- if (bindings[0] == ""):
- bindings.pop(0)
- entry.extend(",".join(bindings) + ",")
- entry.append(match.group(5))
- controllers.append(entry)
- def write_controllers():
- global controllers
- global controller_guids
- for entry in sorted(controllers, key=lambda entry: entry[2]):
- line = "".join(entry) + "\n"
- if not line.endswith(",\n") and not line.endswith("*/\n"):
- print "Warning: '%s' is missing a comma at the end of the line" % (line)
- if (entry[1] in controller_guids):
- print "Warning: entry '%s' is duplicate of entry '%s'" % (entry[2], controller_guids[entry[1]][2])
- controller_guids[entry[1]] = entry
- output.write(line)
- controllers = []
- controller_guids = {}
- for line in input:
- if ( parsing_controllers ):
- if (line.startswith("{")):
- output.write(line)
- elif (line.startswith("#endif")):
- parsing_controllers = False
- write_controllers()
- output.write(line)
- elif (line.startswith("#")):
- print "Parsing " + line.strip()
- write_controllers()
- output.write(line)
- else:
- save_controller(line)
- else:
- if (line.startswith("static const char *s_ControllerMappings")):
- parsing_controllers = True
- output.write(line)
- output.close()
- print "Finished writing %s.new" % filename
|