ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/utils/arch2xml.py
Revision: 1.1.1.1 (vendor branch)
Committed: Fri Feb 3 07:14:46 2006 UTC (18 years, 3 months ago) by root
Content type: text/x-python
Branch: UPSTREAM, MAIN
CVS Tags: LAST_C_VERSION, rel-2_82, rel-2_81, rel-2_80, UPSTREAM_2006_03_15, rel-3_1, rel-3_0, rel-2_6, rel-2_7, rel-2_4, rel-2_5, rel-2_2, rel-2_3, rel-2_0, rel-2_1, rel-2_72, rel-2_73, rel-2_71, rel-2_76, rel-2_77, rel-2_74, rel-2_75, rel-2_54, rel-2_55, rel-2_56, rel-2_79, rel-2_52, rel-2_53, rel-2_32, UPSTREAM_2006_02_22, rel-2_90, rel-2_92, rel-2_93, rel-2_78, rel-2_61, UPSTREAM_2006_02_03, difficulty_fix_merge_060810_2300, rel-2_43, rel-2_42, rel-2_41, HEAD
Branch point for: difficulty_fix
Changes since 1.1: +0 -0 lines
Log Message:
initial import

File Contents

# Content
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