00001
00002
00003
00004
00005 import fnmatch, os, string
00006
00007
00008
00009 def Walk( root, recurse=0, pattern='*', return_folders=0 ):
00010
00011
00012
00013 result = []
00014
00015
00016 try:
00017 names = os.listdir(root)
00018 except os.error:
00019 return result
00020
00021
00022 pattern = pattern or '*'
00023 pat_list = string.splitfields( pattern , ';' )
00024
00025
00026 for name in names:
00027 fullname = os.path.normpath(os.path.join(root, name))
00028
00029
00030 for pat in pat_list:
00031 if fnmatch.fnmatch(name, pat):
00032 if os.path.isfile(fullname) or (return_folders and os.path.isdir(fullname)):
00033 result.append(fullname)
00034 continue
00035
00036
00037 if recurse:
00038 if os.path.isdir(fullname) and not os.path.islink(fullname):
00039 result = result + Walk( fullname, recurse, pattern, return_folders )
00040
00041 return result
00042
00043 def arch2xml(root,filename,xsl_file='cfarches.xsl'):
00044 files = Walk(root, 1, '*.arc', 1)
00045 print 'searching for arch files in %s' %root
00046 xml = open(filename,'w')
00047 xml.write('<?xml version="1.0"?>\n<?xml-stylesheet type="text/xsl" href="%s"?>\n<ARCHES>'%xsl_file)
00048 for file in files:
00049 arc = open(file,'r')
00050 contents = arc.read().split('\n')
00051 xml.write('<arch>\n')
00052 mess = 0
00053 for line in contents:
00054 xp = line.split()
00055 if mess == 1 and len(xp)>1:
00056 str = string.join(xp[0:])
00057 xml.write('%s\n' %str)
00058 elif len(xp) == 1:
00059 tag = string.lower(xp[0])
00060 if tag == 'end':
00061 tag = ' <END />\n'
00062 elif tag == 'more':
00063 tag = ' <MORE />\n'
00064 elif tag =='msg':
00065 tag = ' <message>\n'
00066 mess = 1
00067 elif tag =='endmsg':
00068 tag = ' </message>\n'
00069 mess = 0
00070 elif tag == 'anim':
00071 tag = ' <anim>\n'
00072 elif tag =='mina':
00073 tag = '\n </anim>\n'
00074 else:
00075 tag = '[%s]'%(tag)
00076 xml.write('%s' %(tag))
00077 elif len(xp)>1:
00078 tag = string.lower(xp[0])
00079 if (tag[0] == "#"):
00080 str = string.join(xp)[1:]
00081 xml.write(' <comment>%s</comment>\n' %(str))
00082 else:
00083 str = string.join(xp[1:])
00084 xml.write(' <%s>%s</%s>\n' %(tag,str,tag))
00085 xml.write('\n</arch>\n')
00086 arc.close()
00087 xml.write('\n</ARCHES>')
00088 xml.close()
00089 print "DONE"
00090
00091 if __name__ == '__main__':
00092 import sys
00093 if len(sys.argv) < 3:
00094 sys.stderr.write ('Converts arc files in a directory and all sub directories to an xml file\nUsage: arch2xml.py <directory> <XML-filename>\n')
00095 sys.exit()
00096 else:
00097 arch2xml(sys.argv[1],sys.argv[2])