Mercurial > hg > FederatedLinda
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 |