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

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