mirror of
https://git.code.sf.net/p/quake/nuq
synced 2024-11-22 12:11:36 +00:00
gotta put it somewhere safe :)
This commit is contained in:
parent
b39fa5ac8a
commit
0a132a2933
1 changed files with 123 additions and 0 deletions
123
source/cvar.py
Normal file
123
source/cvar.py
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import pprint
|
||||||
|
import StringIO
|
||||||
|
import os
|
||||||
|
|
||||||
|
cvar_def_re = re.compile(r'^cvar_t\s+(\w+)\s*=\s*\{\s*("[^"]*")\s*,\s*("[^"]*")(\s*,\s*(\w+)(\s*,\s*(\w+))?)?\s*\}\s*;(\s*//\s*(.*))?\n')
|
||||||
|
cvar_reg_re = re.compile(r'Cvar_RegisterVariable\s*\(\s*&\s*(\w+)\s*\)\s*;\s*')
|
||||||
|
cvar_val_re = re.compile(r'(\w+)\s*\.\s*(name|string|value)')
|
||||||
|
cvar_set_re = re.compile(r'(Cvar_Set|Cvar_SetValue)\s*\(\s*"(\w+)"\s*,\s*')
|
||||||
|
|
||||||
|
class cvar:
|
||||||
|
def __init__(self, cv_def):
|
||||||
|
(self.c_name,
|
||||||
|
self.name,
|
||||||
|
self.default,
|
||||||
|
self.arch,
|
||||||
|
self.serv,
|
||||||
|
self.desc) = cv_def
|
||||||
|
if self.arch==None or self.arch=='false' or self.arch=='0':
|
||||||
|
self.arch = 0
|
||||||
|
elif self.arch=='true' or self.arch=='1':
|
||||||
|
self.arch = 1
|
||||||
|
if self.serv==None or self.serv=='false' or self.serv=='0':
|
||||||
|
self.serv = 0
|
||||||
|
elif self.serv=='true' or self.serv=='1':
|
||||||
|
self.serv = 1
|
||||||
|
if self.desc==None:
|
||||||
|
self.desc='None'
|
||||||
|
def __repr__(self):
|
||||||
|
return 'cvar(('+`self.c_name`+','+\
|
||||||
|
`self.name`+','+\
|
||||||
|
`self.default`+','+\
|
||||||
|
`self.arch`+','+\
|
||||||
|
`self.serv`+','+\
|
||||||
|
`self.desc`+')'
|
||||||
|
def __str__(self):
|
||||||
|
return self.__repr__()
|
||||||
|
def get(self):
|
||||||
|
str=StringIO.StringIO()
|
||||||
|
str.write(self.c_name)
|
||||||
|
str.write(' = Cvar_Get(')
|
||||||
|
str.write(self.name)
|
||||||
|
str.write(', ')
|
||||||
|
str.write(self.default)
|
||||||
|
str.write(', ')
|
||||||
|
if self.arch and self.serv:
|
||||||
|
str.write('CVAR_ARCHIVE|CVAR_SERVERINFO')
|
||||||
|
elif self.arch:
|
||||||
|
str.write('CVAR_ARCHIVE')
|
||||||
|
elif self.serv:
|
||||||
|
str.write('CVAR_SERVERINFO')
|
||||||
|
else:
|
||||||
|
str.write('CVAR_NONE')
|
||||||
|
str.write(', "')
|
||||||
|
str.write(self.desc)
|
||||||
|
str.write('");')
|
||||||
|
return str.getvalue()
|
||||||
|
|
||||||
|
|
||||||
|
cvar_dict = {}
|
||||||
|
files = {}
|
||||||
|
|
||||||
|
def get_cvar_defs(fname):
|
||||||
|
fi=open(fname,'rt')
|
||||||
|
f=files[fname]=fi.readlines()
|
||||||
|
for i in range(len(f)):
|
||||||
|
cv=cvar_def_re.match(f[i])
|
||||||
|
if cv!=None:
|
||||||
|
cv=cv.groups()
|
||||||
|
cv_def=cvar(cv[:3]+(cv[4],)+(cv[6],)+(cv[8],))
|
||||||
|
if cvar_dict.has_key(cv_def.c_name):
|
||||||
|
x=cvar_dict[cv_def.c_name]
|
||||||
|
cv_def.arch = cv_def.arch or x.arch
|
||||||
|
cv_def.serv = cv_def.serv or x.serv
|
||||||
|
if cv_def.desc=='None':
|
||||||
|
cv_def.desc=x.desc
|
||||||
|
if `cv_def`!=`x`:
|
||||||
|
print 'old: '+`cvar_dict[cv_def.c_name]`
|
||||||
|
print 'new: '+`cv_def`
|
||||||
|
cvar_dict[cv_def.c_name]=cv_def
|
||||||
|
f[i]='cvar_t\t*'+cv_def.c_name+';'
|
||||||
|
fi.close()
|
||||||
|
|
||||||
|
for f in sys.argv[1:]:
|
||||||
|
get_cvar_defs(f)
|
||||||
|
for file in files.items():
|
||||||
|
fname,f=file
|
||||||
|
print fname
|
||||||
|
for i in range(len(f)):
|
||||||
|
reg=cvar_reg_re.search(f[i])
|
||||||
|
while reg:
|
||||||
|
cv=reg.groups(1)[0]
|
||||||
|
s,e=reg.start(0),reg.end(0)
|
||||||
|
try:
|
||||||
|
f[i]=f[i][:s]+cvar_dict[cv].get()+f[i][e:]
|
||||||
|
reg=cvar_reg_re.search(f[i])
|
||||||
|
except KeyError:
|
||||||
|
reg=None
|
||||||
|
if f[i][-1]!='\n':
|
||||||
|
f[i]=f[i]+'\n'
|
||||||
|
val=cvar_val_re.search(f[i])
|
||||||
|
while val:
|
||||||
|
cv,field=val.group(1,2)
|
||||||
|
s,e=val.start(0),val.end(0)
|
||||||
|
if cvar_dict.has_key(cv):
|
||||||
|
f[i]=f[i][:s]+cv+'->'+field+f[i][e:]
|
||||||
|
val=cvar_val_re.search(f[i],e)
|
||||||
|
else:
|
||||||
|
val=None
|
||||||
|
set=cvar_set_re.search(f[i])
|
||||||
|
while set:
|
||||||
|
func,cv=set.group(1,2)
|
||||||
|
s,e=set.start(0),set.end(0)
|
||||||
|
if cvar_dict.has_key(cv):
|
||||||
|
f[i]=f[i][:s]+func+'('+cv+', '+f[i][e:]
|
||||||
|
set=cvar_val_re.search(f[i],e)
|
||||||
|
else:
|
||||||
|
set=None
|
||||||
|
os.rename(fname,fname+'.bak')
|
||||||
|
fi=open(fname,'wt')
|
||||||
|
fi.writelines(f)
|
||||||
|
fi.close()
|
Loading…
Reference in a new issue