comparison tools/python-PE/graffleConfig/ParseGraffle.py @ 8:6c40056777be

Initial revision
author fuchita
date Sat, 16 Feb 2008 13:18:02 +0900
parents
children
comparison
equal deleted inserted replaced
7:1809e2b05824 8:6c40056777be
1 import re
2 import sys
3 import xml.sax
4
5 import PListReader
6
7 def parseFile(filep):
8 # parse the file
9 reader = PListReader.PListReader()
10 parser = xml.sax.make_parser()
11 for key, value in reader.getRecommendedFeatures().items():
12 parser.setFeature(key, value)
13 parser.setContentHandler(reader)
14 parser.parse(open(filep, 'r'))
15 return reader.getResult()
16
17 def getText(text):
18 parser = re.compile("(?<=\cf0 ).*(?=})")
19 return parser.search(text, re.I).group(0)
20
21 class NodeInfo:
22 def __init__(self, label = "", nid = None, tsid = None):
23 self.dstlist = []
24 self.label = label
25 self.id = nid
26 self.tsid = tsid
27
28 def getNodesEdges (parsedlist, nodelist = []):
29 nodes = {}
30 edges = {}
31 i = 0
32 for g in parsedlist["GraphicsList"]:
33 cls = g['Class']
34 if cls == "LineGraphic":
35 if g.has_key('Lables'):
36 label = getText(g['Labels'][0]['Label']['Text'])
37 else:
38 label = "Edge" + str(g['ID'])
39 if edges.has_key(g['Head']['ID']):
40 edges[g['Head']['ID']].append(g['Tail']['ID'])
41 else:
42 edges[g['Head']['ID']] = [(g['Tail']['ID'])]
43 if edges.has_key(g['Tail']['ID']):
44 edges[g['Tail']['ID']].append(g['Head']['ID'])
45 else:
46 edges[g['Tail']['ID']] = [(g['Head']['ID'])]
47 elif cls == "ShapedGraphic":
48 if g.has_key('Text'):
49 label = getText(g['Text']['Text'])
50 else:
51 label = "Node" + "%03d"%i #str(g['ID'])
52 i += 1
53 if len(nodelist) == 0:
54 ntsid = "localhost:%d" % i + 10000
55 print "Cannot get tsid from nodelist, Added", ntsid
56 else:
57 ntsid = nodelist.pop(0)
58 nodes[g['ID']] = NodeInfo(label, g['ID'], ntsid)
59 else:
60 print "ID >>", g['ID']
61
62 return (nodes, edges)
63
64 def getNodesEdgesPositions (parsedlist, nodelist = []):
65 nodes = {}
66 edges = {}
67 Positions = {}
68
69 i = 0
70 for g in parsedlist["GraphicsList"]:
71 cls = g['Class']
72 if cls == "LineGraphic":
73 if g.has_key('Lables'):
74 label = getText(g['Labels'][0]['Label']['Text'])
75 else:
76 label = "Edge" + str(g['ID'])
77 if edges.has_key(g['Head']['ID']):
78 edges[g['Head']['ID']].append(g['Tail']['ID'])
79 else:
80 edges[g['Head']['ID']] = [(g['Tail']['ID'])]
81 if edges.has_key(g['Tail']['ID']):
82 edges[g['Tail']['ID']].append(g['Head']['ID'])
83 else:
84 edges[g['Tail']['ID']] = [(g['Head']['ID'])]
85 elif cls == "ShapedGraphic":
86 if g.has_key('Text'):
87 label = getText(g['Text']['Text'])
88 else:
89 label = "Node" + "%03d"%i #str(g['ID'])
90 i += 1
91 if len(nodelist) == 0:
92 ntsid = "localhost:%d" % i + 10000
93 print "Cannot get tsid from nodelist, Added", ntsid
94 else:
95 ntsid = nodelist.pop(0)
96 nodes[g['ID']] = NodeInfo(label, g['ID'], ntsid)
97 else:
98 print "ID >>", g['ID']
99
100 return (nodes, edges)
101
102 if __name__ == "__main__":
103
104 if (len(sys.argv) > 2):
105 xmltext = sys.argv[1]
106 else:
107 xmltext = "example.graffle"
108
109 nodetxt = open(sys.argv[2],'r').read()
110 nodelist = re.findall("[-.\w]+:[0-9]+",nodetxt)
111 res = parseFile(xmltext)
112
113 nodes,edges = getNodesEdges(res, nodelist)
114 print nodes, edges
115
116