#!/usr/bin/env python # Makes things faster on 32-bit systems try: import psyco; psyco.full() except ImportError: pass import sys, os, re, glob import wesnoth.wmldata as wmldata import wesnoth.wmlparser as wmlparser import wesnoth.wmltools as wmltools def list_units(units_filename, text_to_parse, po_filename, campaign): # read translations gettext = file(po_filename).read() matches = re.compile("""(msgid|msgstr)((\s*".*?")+)""").findall(gettext) gettext = {} id = "" for match in matches: text = "".join(re.compile('"(.*?)"').findall(match[1].replace("\\n", ""))) if match[0] == "msgid": id = text else: gettext[id] = text # Create a new parser. parser = wmlparser.Parser(datadir) WML = wmldata.DataSub("WML") # First, parse through some macro definitions. parser.parse_text("{core/macros/}\n") parser.parse_top(None) # Now parse the actual text. if text_to_parse: parser.parse_text(text_to_parse) else: parser.parse_file(os.path.join(units_filename)) parser.parse_top(WML) units = WML.get_first("+units") doubles = {} races = {} for u in units.get_all("unit_type"): name = u.get_text_val("name") if name == None or name == "": sys.stderr.write("Empty name detected! (id = %s)\n" % u.get_text_val("id")) continue if not name in gettext: # Hm... sys.stderr.write("Unit %s has no translation (?)\n" % name) if name in doubles: sys.stderr.write("Unit %s found multiple times!\n" % name) continue doubles[name] = 1 r = u.get_text_val("race") or "unknown" r = r[0].upper() + r[1:] l = u.get_text_val("level") levels = races.get(r, {}) unitlist = levels.get(l, []) unitlist.append(u) levels[l] = unitlist races[r] = levels def poname(name): return name[name.find("^") + 1:] def place_units(race): if use_html: print "%s" % (race + campaign) print "
"
else: print "|",
if row < len(levels[i]):
u = levels[i][row]
name = u.get_text_val("name")
translated = gettext.get(name, "?")
if use_html:
print "%s" % translated
print " " print poname(name) else: print "'''%s''' " % translated, print poname(name), f = u.get_first("female") if f: name = f.get_text_val("name") translated = gettext.get(name, "?") if use_html: print " " print "%s" % translated print " " print poname(name) else: print " ", print "'''%s''' " % translated, print poname(name), if use_html: print " | "
else: print
if use_html: print "