Automatically generate string-based resource IDs for all content.
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2864 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
The resmap tool is a set of utilities for generating subsidiary resource
|
||||||
|
index files based on the current system.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Currently available runnable files:
|
||||||
|
|
||||||
|
mastermap.py: Walks the content tree, finds all the .lst files, and
|
||||||
|
produces a master resource map mapping IDs to each file.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Currently available library files:
|
||||||
|
|
||||||
|
explorer.py: Provides routines for locating and parsing .lst files in
|
||||||
|
the content tree.
|
||||||
|
|
||||||
|
stridgen.py: This does most of the grunt work. It provides the
|
||||||
|
makeid() function, which, given a filename, produces a
|
||||||
|
suitable Resource ID string. This is handled with a huge
|
||||||
|
array of regular expressions at present; as the design
|
||||||
|
of the resource tree evolves, this script may be kept in
|
||||||
|
sync with it.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
def get_lists(d):
|
||||||
|
result = []
|
||||||
|
for (dirpath, dirnames, filenames) in os.walk(d):
|
||||||
|
for l in [f for f in filenames if f.endswith('.lst')]:
|
||||||
|
result.append(os.path.join(dirpath, l))
|
||||||
|
return result
|
||||||
|
|
||||||
|
def read_list(f):
|
||||||
|
result = []
|
||||||
|
for line in file(f):
|
||||||
|
parsed = line.split()
|
||||||
|
if len(parsed) == 4:
|
||||||
|
result.append(((int(parsed[0]), int(parsed[1]), int(parsed[2])),
|
||||||
|
parsed[3]))
|
||||||
|
return result
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print "This is a library and isn't intended to be run directly."
|
||||||
Executable
+43
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
import explorer
|
||||||
|
import stridgen
|
||||||
|
|
||||||
|
def process (res):
|
||||||
|
result = []
|
||||||
|
for line in res:
|
||||||
|
line = line.strip()
|
||||||
|
if len(line) == 0:
|
||||||
|
continue
|
||||||
|
mapline = stridgen.makeid(line)
|
||||||
|
if mapline is None:
|
||||||
|
toadd = "# NO MATCH FOR %s" % line
|
||||||
|
else:
|
||||||
|
toadd = "%s: %s" % (mapline, line)
|
||||||
|
if toadd not in result:
|
||||||
|
result.append(toadd)
|
||||||
|
result.sort()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_resources(d):
|
||||||
|
result = []
|
||||||
|
packages = [explorer.read_list(x) for x in explorer.get_lists(d)]
|
||||||
|
for package in packages:
|
||||||
|
for line in package:
|
||||||
|
if line[1] not in result:
|
||||||
|
result.append(line[1])
|
||||||
|
return result
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
d = os.path.join(os.path.pardir, os.path.pardir, "sc2", "content")
|
||||||
|
else:
|
||||||
|
d = sys.argv[1]
|
||||||
|
resources = get_resources(d)
|
||||||
|
resmap = process(resources)
|
||||||
|
for r in resmap:
|
||||||
|
print r
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
def stripdots(x):
|
||||||
|
while x.endswith('.'):
|
||||||
|
x = x[:-1]
|
||||||
|
while x.startswith('.'):
|
||||||
|
x = x[1:]
|
||||||
|
return x
|
||||||
|
|
||||||
|
patterns = [("comm/(.*)/(.*)\.mod", lambda m: "comm.%s.music" % m.group(1)),
|
||||||
|
("comm/(.*)/(.*)\.ogg", lambda m: "comm.%s.music" % m.group(2)),
|
||||||
|
("comm/(.*)/(.*)\.ani", lambda m: "comm.%s.graphics" % m.group(1)),
|
||||||
|
("comm/(.*)/(.*)\.ct", lambda m: "comm.%s.colortable" % m.group(1)),
|
||||||
|
("comm/(.*)/(.*)\.fon", lambda m: "comm.%s.font" % m.group(1)),
|
||||||
|
("comm/(.*)/(.*)\.txt", lambda m: "comm.%s.dialogue" % m.group(1)),
|
||||||
|
("comm/(.*)\.lst", lambda m: "comm.%s.resources" % m.group(1)),
|
||||||
|
("credits/(.*)\.fon", lambda m: "credits.font.%s" % m.group(1)),
|
||||||
|
("credits/credback\.ani", lambda m: "credits.background"),
|
||||||
|
("credits/(.*)\.txt", lambda m: "credits.%s" % m.group(1)),
|
||||||
|
("credits/(.*)\.ogg", lambda m: "credits.%smusic" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.txt", lambda m: "text.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.ani", lambda m: "graphics.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.ct", lambda m: "colortable.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.xlt", lambda m: "translate.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.fon", lambda m: "font.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.snd", lambda m: "sounds.%s" % m.group(1)),
|
||||||
|
("ipanims/(.*)\.mod", lambda m: "music.%s" % m.group(1)),
|
||||||
|
("lbm/(.*)\.ani", lambda m: "graphics.%s" % m.group(1)),
|
||||||
|
("lbm/(.*)\.mod", lambda m: "music.%s" % m.group(1)),
|
||||||
|
("lbm/(.*)\.ct", lambda m: "colortable.%s" % m.group(1)),
|
||||||
|
("lbm/(.*)\.fon", lambda m: "font.%s" % m.group(1)),
|
||||||
|
("lbm/(.*)\.txt", lambda m: "text.%s" % m.group(1)),
|
||||||
|
("lbm/mainmenu\.ogg", lambda m: "music.mainmenu"),
|
||||||
|
("melee/melemenu\.ogg", lambda m: "music.meleemenu"),
|
||||||
|
("melee/(.*)\.ani", lambda m: "graphics.%s" % m.group(1)),
|
||||||
|
("slides/ending/sis_skel.ani", lambda m: "graphics.sisskeleton"),
|
||||||
|
("(.*)/(.*)micon\.ani", lambda m: "ship.%s.meleeicons" % m.group(1)),
|
||||||
|
("(.*)/(.*)icons\.ani", lambda m: "ship.%s.icons" % m.group(1)),
|
||||||
|
("(.*)/(.*)\.cod", lambda m: "ship.%s.code" % m.group(1)),
|
||||||
|
("(.*)/(.*)\.snd", lambda m: "ship.%s.sounds" % m.group(1)),
|
||||||
|
("(.*)/(.*)\.mod", lambda m: "ship.%s.ditty" % m.group(1)),
|
||||||
|
("(.*)/(.*)\.txt", lambda m: "ship.%s.text" % m.group(1)),
|
||||||
|
("(.*)/(.*)cap\.ani", lambda m: "ship.%s.graphics.captain" % m.group(1)),
|
||||||
|
("(.*)/(.*)big.*", lambda m: "ship.%s.graphics.%s.large" % (m.group(1), stripdots(m.group(2)))),
|
||||||
|
("(.*)/(.*)med.*", lambda m: "ship.%s.graphics.%s.medium" % (m.group(1), stripdots(m.group(2)))),
|
||||||
|
("(.*)/(.*)sml.*", lambda m: "ship.%s.graphics.%s.small" % (m.group(1), stripdots(m.group(2)))),
|
||||||
|
("(.*)/(.*)\.ani", lambda m: "ship.%s.graphics.%s" % (m.group(1), m.group(2))),
|
||||||
|
("(.*).lst", lambda m: "ship.%s.resources" % m.group(1))]
|
||||||
|
|
||||||
|
def makeid (fname):
|
||||||
|
for (pattern, response) in patterns:
|
||||||
|
m = re.match(pattern, fname)
|
||||||
|
if m is not None:
|
||||||
|
return response(m)
|
||||||
|
return None
|
||||||
Reference in New Issue
Block a user