2 Star 1 Fork 1

houzh/Miniwin

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
idgen.py 3.99 KB
一键复制 编辑 原始数据 按行查看 历史
houzh 提交于 2022-02-15 20:46 +08:00 . modify idgen ,sort xmlfiles
#!/usr/bin/python
import xml.sax
import os
import sys
import time
class CDROIDHandler( xml.sax.ContentHandler ):
def __init__(self):
self.idlist=[]
def startElement(self, tag, attributes):
for attr in attributes.getNames():
if ':id' in attr:
self.addID(attributes.get(attr))
def addID(self,name):
pos=name.find('/');
if pos<0:
return
name=name[pos+1:].strip()
if (name[0].isalpha() or (name[0]=='_')) and (name not in self.idlist) :
self.idlist.append(name)
def groupby(self):
new_ids = []
for id in self.idlist:
if id not in new_ids:
new_ids.append(id)
self.idlist=new_ids
print new_ids
return new_ids
class IDGenerater(object):
def __init__(self,idstart):
self.idstart=idstart
self.processDirs=['layout','drawable']
self.parser = xml.sax.make_parser()
self.parser.setFeature(xml.sax.handler.feature_namespaces, 0)
self.Handler = CDROIDHandler()
self.parser.setContentHandler( self.Handler )
def dict2RH(self,filepath,namespace):
fr=open(filepath,"w")
fr.write("#pragma once\n\n")
fr.write("/*Generated by machine ,Do not edit!!!*/\n\n")
fr.write("namespace %s{\n\n"%(namespace))
fr.write("class R{\npublic:\n")
fr.write("%4sclass id {\n%4spublic: enum{\n"%('',''))
dsize =len(self.Handler.idlist)
i=0
print self.Handler.idlist
for k in self.Handler.idlist:
fr.write("%8s %-24s= 0x%08X /*%10d*/"%('',k,self.idstart+i,self.idstart+i))
if (i<dsize-1):
fr.write(",")
fr.write("\n")
i+=1
fr.write("%4s};/*enum*/};/*class*/\n\n"%(''))
fr.write("};//endof class R\n\n")
fr.write("}//endof namespace\n\n")
fr.close()
def dict2ID(self,filepath):
fr=open(filepath,"w")
fr.write('<?xml version="1.0" encoding="utf-8"?>')
fr.write("<!--Generated by CDdroid's machine,Do not edit !!!-->\n")
fr.write("<resources xmlns:android=\"http://schemas.android.com/apk/res/android\">\n")
i=0;
for k in self.Handler.idlist:
fr.write(' <id name="%s">0x%08x</id>\n'%(k,self.idstart+i))
i+=1
fr.write("</resources>\n\n")
fr.close();
def dirHasId(self,path):
for dir in self.processDirs:
if path.find(dir)>=0:
return 1
return -1;
def scanxml(self,scanPath):
lastmodifytime=0
for top, dirs, nondirs in os.walk(scanPath):
dirs.sort()
nondirs.sort()
for item in nondirs:
fname=os.path.join(top, item)
if (not item.endswith('.xml')) or (self.dirHasId(fname)<0):
continue
newestdate=os.stat(fname);
if(lastmodifytime<newestdate.st_mtime):
lastmodifytime=newestdate.st_mtime
self.parser.parse(fname)
return lastmodifytime
if ( __name__ == "__main__"):
idstart=10000
if len(sys.argv)<3:
print sys.argv[0]#+'assetspath R.h_path ID.xml'
validassetsdir=['assets','res','resources']
segments=sys.argv[1].split('/')
for i in range(0,len(segments)):
if segments[i] in validassetsdir:
break
namespace=segments[i]
if sys.argv[2].find("widget/R.h")>=0 and (namespace=='gui'):
namespace='cdroid'
idstart=1000
print "namespace="+namespace
lastmodifytime=0
if os.path.exists(sys.argv[2]):
fstat=os.stat(sys.argv[2])
lastmodifytime=fstat.st_mtime
idgen=IDGenerater(idstart)
if not os.path.exists(sys.argv[1]+"/values"):
os.makedirs(sys.argv[1]+"/values")
if idgen.scanxml(sys.argv[1])>lastmodifytime:
idgen.dict2RH(sys.argv[2],namespace)
idgen.dict2ID(sys.argv[1]+"/values/ID.xml")
else:
print sys.argv[2]+" is latest ,skipped."
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/houstudio/Miniwin.git
git@gitee.com:houstudio/Miniwin.git
houstudio
Miniwin
Miniwin
master

搜索帮助