Files
cobm/tools/resmap/gen_resfiles.py
mcmartin bab2323019 Relegation of integer-based resources to history.
Documentation has been updated and header files have been re-sorted as a 
result of this.


git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3024 8092fc87-c524-0410-9efc-e669fe64eaf9
2008-06-06 13:08:47 +00:00

93 lines
2.6 KiB
Python

#!/usr/bin/python
import sys
import os
import os.path
basedir = os.path.join(os.path.pardir, os.path.pardir, "sc2")
contentdir = os.path.join (basedir, "content")
srcdir = os.path.join (basedir, "src")
class ResEntry(object):
def __init__(self, line_num, constant, res_id, hfile, res_type, res_file):
self.line_num = line_num
self.hfile = hfile
self.constant = constant
self.res_id = res_id
self.res_type = res_type
self.res_file = res_file
def csv_line(self):
return "%s,%s,%s,%s,%s" % (self.constant,self.res_id, self.hfile,
self.res_type, self.res_file)
def read_csv (fname="resources.csv"):
result = []
linenum = 0
for line in file(fname):
linenum += 1
# We allow hash comments, but it's not wise to have them in the official
# list, since it may interfere with CSV importers.
if '#' in line:
line = line[:line.index('#')]
line = line.strip()
if len(line) > 0:
data = [x.strip() for x in line.split (',')]
if len(data) == 5:
result.append(ResEntry(linenum, *data))
else:
print>>sys.strderr, "Warning: Incorrect number of fields in line %d" % linenum
return result
def get_headers(l):
result = {}
for res in l:
result[res.hfile]=True
names = result.keys()
names.sort()
return names
def rmp_text(vals):
result = []
in_index = [x for x in vals if x.res_file != "--"]
in_index.sort(lambda x,y: cmp(x.res_id, y.res_id))
for entry in in_index:
if x.res_type != "--":
result.append("%s = %s:%s" % (entry.res_id, entry.res_type, entry.res_file))
else:
print>>sys.stderr, "Warning: Resource ID %s (on line %d) has no associated type" % (entry.line_num, entry.res_id)
result.append("%s = UNKNOWNRES:%s" % (entry.res_id, entry.res_file))
return result
def header_text(header, vals):
result = ["/* This file was auto-generated by the gen_resfiles utility and",
" should not be edited directly. Modify the master resource list",
" instead and regenerate. */",
""]
in_index = [x for x in vals if x.hfile == header]
in_index.sort(lambda x,y: cmp(x.constant, y.constant))
for entry in in_index:
result.append("#define %s \"%s\"" % (entry.constant, entry.res_id))
return result
def dump_values(data):
keys = data.keys()
keys.sort()
for f in keys:
print "Writing ",f
outfile = file(f,"wt")
for l in data[f]:
print>>outfile, l
outfile.close()
def collate_data(data):
result = {}
headers = get_headers(data)
for header in headers:
result[os.path.join(srcdir, *(header.split('/')))] = header_text(header, data)
result[os.path.join(contentdir, 'uqm.rmp')] = rmp_text(data)
return result
if __name__=="__main__":
data = collate_data(read_csv())
dump_values(data)