#_*_coding:utf-8_*_
import os
# 遍历所有根目录文件
result = []
def get_all(cwd):
get_dir = os.listdir(cwd)
for path in get_dir:
sub_dir = os.path.join(cwd,path)
if os.path.isdir(sub_dir):
get_all(sub_dir)
else:
result.append(cwd + '/'+ path)
# 处理单个atlas
def handleAtlas(atlas):
lines = atlas.split('\n')
list = []
repeatName = {}
for index in range(len(lines)):
line = lines[index].replace(' ','').replace('\n','')
if line.find('.png') != -1:
list.append({'name': line})
continue
if line == '':
continue
if (line.find(':') == -1):
if repeatName.has_key(line):
repeatName[line] += 1
else:
repeatName[line] = 0
if repeatName[line] > 0:
line += '%d'%repeatName[line]
list.append({'name': line})
continue
if (len(list) == 0):
continue
if (line.find('size:') != -1):
dict = list[len(list) - 1]
dict['size'] = line.replace('size:','')
elif (line.find('rotate:') != -1):
dict = list[len(list) - 1]
dict['rotate'] = line.replace('rotate:','')
elif (line.find('xy:') != -1):
dict = list[len(list) - 1]
dict['xy'] = line.replace('xy:','')
elif (line.find('orig:') != -1):
dict = list[len(list) - 1]
dict['orig'] = line.replace('orig:','')
elif (line.find('offset:') != -1):
dict = list[len(list) - 1]
dict['offset'] = line.replace('offset:','')
data = list[0]
head = '<key>metadata</key>\n'
head += '<dict>\n'
head += '<key>format</key>\n'
head += '<integer>2</integer>\n'
head += '<key>realTextureFileName</key>\n'
head += '<string>{name}</string>\n'
head += '<key>size</key>\n'
head += '<string>{{{size}}}</string>\n'
head += '<key>textureFileName</key>\n'
head += '<string>{name}</string>\n'
head += '</dict>\n'
head = head.format(name=data['name'], size=data['size'])
name = data['name'].replace('.png','');
frames = ''
list.remove(data)
for data in list:
frame = '<key>{name}.png</key>\n'
frame += '<dict>\n'
frame += '<key>frame</key>\n'
frame += '<string>{{{{{xy}}},{{{size}}}}}</string>\n'
frame += '<key>offset</key>\n'
frame += '<string>{{{offset}}}</string>\n'
frame += '<key>rotated</key>\n'
frame += '<{rotate}/>\n'
frame += '<key>sourceColorRect</key>\n'
frame += '<string>{{{{{xy}}},{{{size}}}}}</string>\n'
frame += '<key>sourceSize</key>\n'
frame += '<string>{{{size}}}</string>\n'
frame += '</dict>\n'
frames += frame.format(name=data['name'], xy=data['xy'],size=data['size'],rotate=data['rotate'],offset=data['offset'])
plist = '<?xml version="1.0" encoding="UTF-8"?>\n'
plist += '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n'
plist += '<plist version="1.0">\n'
plist += '<dict>\n'
plist += '<key>frames</key>\n'
plist += '<dict>\n'
plist += frames
plist += '</dict>\n'
plist += head + '\n'
plist += '</dict>\n'
plist += '</plist>\n'
return {'plist': plist,'name': name}
# 处理单个altas文件
def handle(path):
f = open(path,"r")
atlasList = []
for line in f.readlines():
if line.find('.png') != -1:
atlasList.append(line);
elif len(atlasList) > 0:
atlasList[len(atlasList) - 1] += line
for atlas in atlasList:
data = handleAtlas(atlas)
fo = open(os.path.join(os.path.dirname(path) , data['name'] + ".plist"), "w")
fo.write(data['plist'])
# main
get_all('./')
for path in result:
if path.lower().endswith('.atlas'):
handle(path)