import os
import os.path
import sys
import codecs
import xlrd
import shutil
import re
import copy
from _ast import Or
lua_data_dir = "../lua"
ZONE = "vietnam"
dictDir = "..\dict"+"\\" +ZONE
dictDir = unicode(dictDir,'utf8')
csvDir = ".\client_csv_config"
#csvDir = "..\csv"
csvDir = unicode(csvDir,'utf8')
destCsvDir = "..\\..\\GameEditors\\UIEdit\\res\\ui_edit\\config\\"
#destCsvDir = "..\destCsv\\"
uiDir = "..\\..\\GameEditors\\UIEdit\\res\\ui_edit\\xmds_ui\\"
scenesDir = "..\\..\\GameEditors\\GameEditor\\data\\scenes\\"
itemDir = "..\\..\\GameEditors\\GameEditor\\data\\items\\"
uiPattern = "([tT]?ext=\".*?\")"
scenesPattern = "(showname=.*?)"
itemsPattern = "(.*?)"
translatedFile = dictDir + '\\translated.xls'
transDict = {}
unTransDict = {}
def isContainChinese(check_str):
for ch in check_str.decode('utf-8'):
if u'\u4e00' <= ch <= u'\u9fff':
return True
return False
def logUntranslatedStr(lgFile):
if len(unTransDict) > 0 :
type = sys.getfilesystemencoding()
lgFile.write(u"\r\n")
lgFile.write("===================Following words those can't find in dictionary=========================\r\n")
print "Warning!!! Can't find in dictionary, please check log file excelToLua.txt ========================="
for key in unTransDict.keys():
print key.decode('utf-8').encode(type)
lgFile.write(key)
lgFile.write(u"\r\n")
print "Warning!!! Can't find in dictionary, please check log file excelToLua.txt ========================="
return
def loadTranslatedDict():
data = xlrd.open_workbook(translatedFile)
print "Begin loadTranslatedDict : " + translatedFile
for table in data.sheets():
print " sheet : " + table.name
try:
nrows = table.nrows
ncols = table.ncols
if nrows <= 3:
return
for r in range(nrows):
if ncols<2:
continue
key = str(table.cell_value(r,0)).strip()
val = str(table.cell_value(r,1)).strip()
if len(key)>0 and len(val)>0 :
transDict[key] = val
except Exception,e:
print Exception,":",e
os.system('pause')
print "loadTranslatedDict OK"
return
def transCsv(srcCsv,destCsv,lgFile):
print 'begin convert csv: ' + srcCsv
lgFile.write('csv dir: ' + srcCsv)
lgFile.write(u"\r\n")
try:
dic = []
with open(srcCsv, "r") as csvfile:
reader = csvfile.readlines()
for strCellValue in reader:
line = strCellValue
if(isContainChinese(strCellValue)):
index = strCellValue.find(',')
if index > 0:
val1 = strCellValue[0:index]
val2 = strCellValue[index+1:len(strCellValue)]
#去除首尾空格、首尾双引号,末尾逗号
key = val2.strip()
key = key.rstrip(',')
key = key.strip('\"')
key = key.strip()
if transDict.has_key(key) :
reVal = transDict.get(key)
val2 = val2.replace(key,reVal)
else:
unTransDict[key] = ''
line = val1+','+val2
print line
dic.append(line)
csvfile.close()
print "---------dic size: " + str(len(dic))
#write back to the csvfile
with open(destCsv,"w") as csvfile:
csvfile.writelines(dic)
csvfile.close()
except Exception,e:
print Exception,":",e
os.system('pause')
lgFile.write(srcCsv)
lgFile.write(u" ......converted \r\n")
def FloatToString (aFloat):
if len(str(aFloat)) == 0:
return '0';
if type(aFloat) != float:
print aFloat+" - 数字类型格式错误"
os.system("pause")
return ""
strTemp = str(aFloat)
strList = strTemp.split(".")
if len(strList) == 1 :
return strTemp
else:
if strList[1] == "0" :
return strList[0]
else:
return strTemp
def StringToString (aStr):
if type(aStr) != float:
return str(aStr)
strTemp = str(aStr)
strList = strTemp.split(".")
if len(strList) == 1 :
return strTemp
else:
if strList[1] == "0" :
return strList[0]
else:
return strTemp
def haveNext(table, col, row, max_cols):
for c in range(col, max_cols):
objType = str(table.cell_value(row, c));
if(objType.find("@") == -1):
return 1
return 0
def table2lua(table, jsonfilename, main_key=None, con_str=None,uncon_str=None):
con_array = []
uncon_array = []
if con_str:
con_array = con_str.split('|')
if uncon_str:
uncon_array = uncon_str.split('|')
nrows = table.nrows
ncols = table.ncols
if os.path.exists(jsonfilename):
print 'error : ',jsonfilename,'already exist!'
exit(1)
f = codecs.open(jsonfilename,"w","utf-8")
f.write(u"return {\n")
for r in range(1,nrows):
if r == 2:
continue
line = u"{"
#f.write(u"\t{ ")
for c in range(ncols):
strCellValue = u""
objName = str(table.cell_value(1,c))
objType = str(table.cell_value(2,c))
objStr = table.cell_value(r,c)
if(objName.find("@") >= 0 or objType.find("@")>=0 ):
continue
if len(con_array) > 0:
check = False
for it in con_array:
if it == objName:
check = True
break
if not check:
continue
elif len(uncon_array) > 0:
check = True
for it in uncon_array:
if it == objName:
check = False
break
if not check:
continue
if r == 0 or r == 1:
if type(objStr) == float:
firstCol = str(table.cell_value(r,0))
print 'Type Error: (row:%s,col:%s)' % (firstCol,objName)
exit(1)
strCellValue = u"\"" + objStr + u"\""
else:
if cmp(objType, "NUMBER") == 0 or cmp(objType, "FLOAT") == 0:
strCellValue = FloatToString(objStr)
if strCellValue == '':
firstCol = str(table.cell_value(r,0))
print 'Type Error: (row:%s,col:%s)' % (firstCol,objName)
exit(1)
else:
keyStr = str(objStr).strip()
if isContainChinese(keyStr):
if transDict.has_key(keyStr):
objStr = transDict.get(keyStr)
else:
unTransDict[objStr] = ""
strvalue = StringToString(objStr).strip();
strvalue = "".join(strvalue.split("\n"))
strCellValue = u"\"" + strvalue + u"\""
if main_key and main_key == objName:
line = line + strCellValue
#key row
if r == 1:
line = u"[\"_key_\"] = " + line
else:
line = u"[" + strCellValue + u"] = " + line
else:
line = line + strCellValue
line += u","
# if c < ncols-1:
# isNext = haveNext(table, c+1, 1, ncols)
# if isNext != 0:
#f.write(strCellValue)
line = line + u"}"
f.write(line)
# f.write(u" }")
# if r < nrows-1:
# f.write(u",")
# f.write(u"\n")
f.write(u",\n")
f.write(u"}")
f.close()
print "Create ",jsonfilename," OK"
return
def excelTolua(key, main_key=None,con_str=None,uncon_str=None,dirstr=None):
print 'begin trans excel:' + key
data = xlrd.open_workbook(key.split(':')[0])
if not dirstr:
dirstr = lua_data_dir
for table in data.sheets():
if key.split(':')[1] == table.name:
#do
destfilename = os.path.join(dirstr, table.name + ".lua")
table2lua(table,destfilename,main_key,con_str,uncon_str)
return table.name
print 'error : ',key,'not exist!'
exit(1)
def tag2luaTable(tagname,taglist):
ret = u"{"
for name in taglist:
v = u"\"" + tagname + u"." + name + u"\","
ret = ret + v
ret = ret + u"}"
return ret
def xmlToDict(xmlFileName,destPattern,lgFile):
print 'begin trans xml:' + xmlFileName
lgFile.write('xml file:' + xmlFileName)
lgFile.write(u"\r\n")
data = open(xmlFileName,"rU")
try:
reader = data.read()
newContent = reader
dest = re.compile(destPattern)
res = dest.findall(reader)
for elem in res:
strCellValue = str(elem).strip()
print strCellValue
if len(strCellValue) > 0 and isContainChinese(strCellValue):
if transDict.has_key(strCellValue) :
dest = transDict.get(strCellValue)
newContent = newContent.replace(strCellValue, dest)
else:
unTransDict[strCellValue] = ''
data.close()
print "---------new xmlfile size: " + str(len(reader))
#write back to the xmlfile
newFile = codecs.open(xmlFileName,"wb","utf-8")
newFile.write(newContent.replace("\n","\r\n"))
newFile.close()
except Exception,e:
print Exception,":",e
os.system('pause')
print "trans xml OK"
def walkXmlDir(xmlDir,destPattern,lgFile):
print xmlDir
if not os.path.exists(xmlDir):
lgFile.write(xmlDir+' xml files dir not exist!!!')
lgFile.write(u"\r\n")
os.system('pause')
for parent,dirnames,filenames in os.walk(xmlDir):
for filename in filenames:
if filename.endswith(".xml") :
print 'filename : ' + filename
excelFileName = os.path.join(parent, filename)
xmlToDict(excelFileName,destPattern,lgFile)
def extractXml(lgFile):
walkXmlDir(uiDir, uiPattern, lgFile)
walkXmlDir(scenesDir, scenesPattern, lgFile)
walkXmlDir(itemDir, itemsPattern, lgFile)
if __name__ == '__main__':
reload(sys)
sys.setdefaultencoding( "utf-8" )
lgFile = codecs.open('..\excelToLua.txt',"w","utf-8")
try:
if os.path.exists(translatedFile):
loadTranslatedDict()
else:
print "Can't find dict file: " + translatedFile
os.system('pause')
print csvDir
if not os.path.exists(csvDir):
lgFile.write(csvDir+' csv files dir not exist!!!')
lgFile.write(u"\r\n")
os.system('pause')
lgFile.write('==========================Begin convert csv files==================')
lgFile.write(u"\r\n")
for parent,dirnames,filenames in os.walk(csvDir):
for filename in filenames:
print 'filename : ' + filename
srcCsvFileName = os.path.join(parent, filename)
destCsvFileName = destCsvDir+filename
print destCsvFileName
transCsv(srcCsvFileName,destCsvFileName,lgFile)
lgFile.write('==========================Begin extract xml files==================')
lgFile.write(u"\r\n")
extractXml(lgFile)
lgFile.write('==========================Convert xml files ended ==================')
os.system('pause')
except Exception,e:
print Exception,":",e
if os.path.isdir(lua_data_dir):
shutil.rmtree(lua_data_dir)
os.mkdir(lua_data_dir)
data = xlrd.open_workbook("LuaConfig.xlsm")
map_tag = dict()
for table in data.sheets():
if table.name == 'LuaConfig':
#lua
#Path Key Export Hide
for r in range(3,table.nrows):
key = table.cell_value(r,0)
main_key = table.cell_value(r,1)
con_str = table.cell_value(r,2)
uncon_str = table.cell_value(r,3)
tag_str = table.cell_value(r,4)
dir_str = None
if tag_str != '':
dir_str = os.path.join(lua_data_dir, tag_str)
if not os.path.isdir(dir_str):
os.mkdir(dir_str)
map_tag[tag_str] = []
tname = excelTolua(key,main_key,con_str,uncon_str,dir_str)
if dir_str:
map_tag[tag_str].append(tname)
if len(map_tag) > 0:
mfilename = os.path.join(lua_data_dir, "_merge_.lua")
f = codecs.open(mfilename,"w","utf-8")
f.write(u"return {\n")
for k,v in map_tag.items():
line = k + u" = " + tag2luaTable(k,v) + u",\n"
f.write(line)
f.write(u"}")
f.close()
logUntranslatedStr(lgFile)
lgFile.close()
#os.system('echo Explorer to lua path')
#os.system('exit')
#os.system('explorer ' + lua_data_dir)