Files
cobm/tools/script/scriptcheck.py
mcmartin 51cc09b081 Automatic .txt to XML converter
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@209 8092fc87-c524-0410-9efc-e669fe64eaf9
2002-11-14 02:47:15 +00:00

129 lines
4.2 KiB
Python
Executable File

#!/usr/bin/python
import string
import os.path
class Speech:
def __init__(self, id=None, audio=None):
self.id = id
self.audio = audio
self.lines = []
def add_line (self, line):
if len(line) != 0 and line[-1] == '\n': line = line[:-1]
self.lines.append(line)
def clean (self):
while self.lines != []:
if self.lines[-1].strip() != "": break
self.lines.pop()
def check (self):
# Check that non-first lines don't start with space
weird = 0
ever_weird = 0
for line in self.lines[1:]:
if len(line) != 0 and line[0] in string.whitespace:
if line.strip() != "": weird = 1
if weird:
print "Warning: "+self.id+" has whitespace preceding an internal line"
ever_weird = 1
# Now check for non-last lines ending with space
weird = 0
for line in self.lines[:-1]:
if len(line) != 0 and line[-1] in string.whitespace:
if line.strip() != "":
if line.strip()[-1] not in string.punctuation: weird = 1
if weird:
print "Warning: "+self.id+" has whitespace trailing an internal line"
ever_weird = 1
if ever_weird:
print_boring_style(self)
def print_old_style(speech):
header = "#("+speech.id+")"
if speech.audio is not None:
header += "\t"+speech.audio
print header
for line in speech.lines:
if line == "":
print " "
else:
print line
print ""
def print_boring_style(speech):
print 'ID is "'+speech.id+'"'
if speech.audio is not None:
print 'Audio is "'+speech.audio+'"'
for line in speech.lines:
print '\t"'+line+'"'
print ""
def read_old_file(filename):
current = None
speeches = []
for line in file(filename):
if line[0] == '#':
lparen = line.index('(')
rparen = line.rindex(')')
if (lparen > rparen): raise ValueError
id = line[(lparen+1):rparen]
if (lparen != 1):
print "Warning: Speech "+id+" in "+filename+" isn't flush left"
audio = line[rparen+1:].strip()
if audio == "": audio = None
current = Speech(id, audio)
speeches.append(current)
else:
current.add_line(line)
for speech in speeches:
speech.clean()
return speeches
def read_source_header(filename):
ids = []
active = 0
for line in file(filename):
if active == 0 and line.find('{') != -1:
active = 1
elif active == 1 and line.find('}') != -1:
active = 2
elif active == 1:
try:
id = line[:line.rindex(',')].strip()
if id[0] != "/": ids.append (id)
except ValueError:
id = line.strip()
if id != "": ids.append (id)
return ids
races = ['arilou', 'blackur', 'chmmr', 'comandr', 'druuge',
'ilwrath', 'melnorm', 'mycon', 'orz', 'pkunk', 'rebel',
'shofixt', 'slyhome', 'slyland', 'spahome', 'spathi',
'starbas', 'supox', 'syreen', 'talkpet', 'thradd',
'umgah', 'urquan', 'utwig', 'vux', 'yehat', 'zoqfot']
root = os.path.join('..','..','sc2')
for race in races:
try:
filename = os.path.join(root,'content','comm',race,race+'.txt')
source = os.path.join(root,'src','sc2code','comm',race,'strings.h')
print "Checking: "+race
data = read_old_file(filename)
id_seq = read_source_header(source)
for speech in data:
speech.check()
if id_seq[0] != "NULL_PHRASE":
print "Error! First element of enum not NULL_PHRASE!"
id_seq = id_seq[1:]
for x in map (None, data, id_seq):
if x[0] == None:
print "Error! enum "+x[1]+" has no partner!"
elif x[1] == None:
print "Warning! Data entry "+x[0].id+" is never referenced!"
elif x[0].id != x[1]:
print "Warning! text identifier "+x[0].id+" doesn't match enum constant "+x[1]+"!"
except ValueError:
print "Malformed header line"
except IOError:
print "I/O Error"