一、开干
这篇文章是承接着《sublime上的JS代码提示2—api》这篇文章来的,主要生成的是cocos-js的代码提示。
和之前的不同主要是源文件还有正则表达式的匹配模式不同。
可以看到源文件是一些jsb开头的文件,这些文件位于cocos2d_js_bindings
工程下:
这个工程是cocos代码导入到js中的地方。
然后我们随便选择一个文件,就拿jsb_cocos2dx_auto.cpp
这个文件开刀吧,
打开这个文件后,我们选择如下的一块代码:
这里就是cocos转js的地方,所以我们的匹配也应该在这里下手,下面是我写的匹配模式:
m = re.match("^\s+JS_FN\(\"(\w+)",line)
二、工具代码
#!/usr/bin/env python # -*- coding: utf-8 -*- import os; import sys; import shutil; import re SOURCE_DIR = "source" GENERATE_DIR = "generate" snippetTemplate = """<snippet> <content><![CDATA[$content]]></content> <tabTrigger>$trigger</tabTrigger> <scope>source.js</scope> <description>$desc</description> </snippet> """ # 解析cpp def parseCpp(_src,_dst): for name in os.listdir(_src): __src_path = _src + "/" + name __dst_name = os.path.splitext(name)[0] __dst_path = _dst + "/" + __dst_name if os.path.isfile(__src_path): parseFile(__src_path,__dst_path) # 解析文件 def parseFile(_file,_dst): print "start parseFile name:"+_file print "generate dst:" + _dst if not os.path.exists(_dst): os.makedirs(_dst) f=open(_file,"r") for line in f.readlines(): # m = re.match("^\s+JS_FN\(\"(\w+)\"$",line) m = re.match("^\s+JS_FN\(\"(\w+)",line) if m: generateSnippetFile(_dst,m.group(1)) f.close() print "end parseFile name:"+_file print "\n" # 生成代码提示文件 def generateSnippetFile(_dst,_content): print "generateSnippetFile content:"+_content template=snippetTemplate.replace("$content",_content) template=template.replace("$trigger",_content) template=template.replace("$desc",_content) __save_name = _dst + "/" + _content + ".sublime-snippet" f=open(__save_name,"w+") f.write(template) f.close() # 清空保存目录下的文件 def deleteFiles(_path): print "start deleteFiles path:"+_path for name in os.listdir(_path): full_path = _path + "/" + name if os.path.isdir(full_path): shutil.rmtree(full_path) elif os.path.isfile(full_path): try: os.remove(full_path) except Exception,e: pass print "deleteFiles end!!!" if __name__ == '__main__': # 1.跳转到当前目录 os.chdir(sys.path[0]) # 2.清空生成目录 deleteFiles(GENERATE_DIR) # 3.开始解析生成js文件 parseCpp(SOURCE_DIR,GENERATE_DIR)