ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/utils/arch2xml.py
Revision: 1.1
Committed: Fri Feb 3 07:14:46 2006 UTC (18 years, 3 months ago) by root
Content type: text/x-python
Branch point for: UPSTREAM, MAIN
Log Message:
Initial revision

File Contents

# User Rev Content
1 root 1.1 #arch2xml - Todd Mitchell - work in progress - use if you like
2     #usage : python arch2xml.py <directory> <xml file name>
3     #FYI - the Walk function is very useful for other python programs as well
4    
5     import fnmatch, os, string
6    
7     #Flexable Directory Walker from the Python CookBook
8    
9     def Walk( root, recurse=0, pattern='*', return_folders=0 ):
10    
11    
12     # initialize
13     result = []
14    
15     # must have at least root folder
16     try:
17     names = os.listdir(root)
18     except os.error:
19     return result
20    
21     # expand pattern
22     pattern = pattern or '*'
23     pat_list = string.splitfields( pattern , ';' )
24    
25     # check each file
26     for name in names:
27     fullname = os.path.normpath(os.path.join(root, name))
28    
29     # grab if it matches our pattern and entry type
30     for pat in pat_list:
31     if fnmatch.fnmatch(name, pat):
32     if os.path.isfile(fullname) or (return_folders and os.path.isdir(fullname)):
33     result.append(fullname)
34     continue
35    
36     # recursively scan other folders, appending results
37     if recurse:
38     if os.path.isdir(fullname) and not os.path.islink(fullname):
39     result = result + Walk( fullname, recurse, pattern, return_folders )
40    
41     return result
42    
43     def arch2xml(root,filename,xsl_file='cfarches.xsl'):
44     files = Walk(root, 1, '*.arc', 1)
45     print 'searching for arch files in %s' %root
46     xml = open(filename,'w')
47     xml.write('<?xml version="1.0"?>\n<?xml-stylesheet type="text/xsl" href="%s"?>\n<ARCHES>'%xsl_file)
48     for file in files:
49     arc = open(file,'r')
50     contents = arc.read().split('\n')
51     xml.write('<arch>\n')
52     mess = 0
53     for line in contents:
54     xp = line.split()
55     if mess == 1 and len(xp)>1:
56     str = string.join(xp[0:])
57     xml.write('%s\n' %str)
58     elif len(xp) == 1:
59     tag = string.lower(xp[0])
60     if tag == 'end':
61     tag = ' <END />\n'
62     elif tag == 'more':
63     tag = ' <MORE />\n'
64     elif tag =='msg':
65     tag = ' <message>\n'
66     mess = 1
67     elif tag =='endmsg':
68     tag = ' </message>\n'
69     mess = 0
70     elif tag == 'anim':
71     tag = ' <anim>\n'
72     elif tag =='mina':
73     tag = '\n </anim>\n'
74     else:
75     tag = '[%s]'%(tag)
76     xml.write('%s' %(tag))
77     elif len(xp)>1:
78     tag = string.lower(xp[0])
79     if (tag[0] == "#"):
80     str = string.join(xp)[1:]
81     xml.write(' <comment>%s</comment>\n' %(str))
82     else:
83     str = string.join(xp[1:])
84     xml.write(' <%s>%s</%s>\n' %(tag,str,tag))
85     xml.write('\n</arch>\n')
86     arc.close()
87     xml.write('\n</ARCHES>')
88     xml.close()
89     print "DONE"
90    
91     if __name__ == '__main__':
92     import sys
93     if len(sys.argv) < 3:
94     sys.stderr.write ('Converts arc files in a directory and all sub directories to an xml file\nUsage: arch2xml.py <directory> <XML-filename>\n')
95     sys.exit()
96     else:
97     arch2xml(sys.argv[1],sys.argv[2])
98