展会信息港展会大全

正则式代码转换程序,用于cocos2d-x不同版本之间程序移植。
来源:互联网   发布日期:2015-09-26 18:09:29   浏览:1991次  

导读:如果开发环境没有反射功能,代码改名的工作量不小,下面代码实现了批量替换变量名称。修改可用于代码转换的许多情况。本文中用于cocos2d-x不同版本之间程序移植。代码主要功能:将注释和字符串...

如果开发环境没有反射功能,代码改名的工作量不小,下面代码实现了批量替换变量名称。修改可用于代码转换的许多情况。

本文中用于cocos2d-x不同版本之间程序移植。

代码主要功能:将注释和字符串排除在外,其他内容匹配变量名,用字典进行替换。点击打开链接

#!/usr/bin/env python

import os

import re

import sys

import codecs

#############################

dic={}

jiacc=["spriteWithFile","actionWithDuration","menuWithItem","itemWithLabel","transitionWithDuration","spriteWithFile","labelWithString","node"]#,"Object","Sprite","Point","Scene","Node","MoveTo","Director","Application","Size","Touch","Event"]

dic["CCMutableArray"]="CCArray"

dic["CGFloat"]="float"

dic["ccTime"]="float"

for one in jiacc:

dic[one]="create"

##############################

pattern = re.compile(r"""(//[^\r\n]*) # match a single line comment

| (/\*.*?\*/)# match a multi line comment

| ("[^"]*")# match a string literal

| ([a-zA-Z_][a-zA-Z_0-9]*) #identifier

"""

, re.X | re.S)

def translateValue(old):

new=dic.get(old)

if new!=None:

return new

return old

def func(match):

if match.group(1) or match.group(2) or match.group(3):

return match.group()

if match.group(4):

returntranslateValue(match.group())#

#raw_input()

else:

return match.group()

def translateStr(source):

return re.sub(pattern,func,source)

def translateFile(inputFileName):

s=codecs.open(inputFileName,"r","utf-8").read()

return translateStr(s)

def treatfile(inputFileName):

print inputFileName

#bak

cmd="cp %s %s" %(inputFileName,inputFileName+".bak")

os.system(cmd)

#translate

fc=translateFile(inputFileName)

#output

f=codecs.open(inputFileName,"w","utf-8")

f.write(fc)

f.close()

#dir##################

def mylistdir(p,f):

a=os.listdir(p)

fs=myfind(a,f)

return(fs)

def myfind(l,p):

lr=[];

#print p

p1=p.replace(".",r"\.")

p2=p1.replace("*",".*")

p2=p2+"$"

for a in l:

#print a

ifre.search(p2,a,re.IGNORECASE)==None :

pass

#print "pass"

else:

lr.append(a)

#print "append"

return lr

def translateDir(path):#

files=mylistdir(path,"*.cpp")

files2=mylistdir(path,"*.h")

for f in files2:

files.append(f)

for f infiles:

fn=path+"/"+f

treatfile(fn)

if __name__=="__main__":

translateDir(sys.argv[1])

赞助本站

人工智能实验室

相关热词: Cocos2d 游戏开发 教程

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港