Mercurial > hg > FederatedLinda
view tools/python-PE/graffleConfig/ParseGraffle.py @ 8:6c40056777be
Initial revision
author | fuchita |
---|---|
date | Sat, 16 Feb 2008 13:18:02 +0900 |
parents | |
children |
line wrap: on
line source
import re import sys import xml.sax import PListReader def parseFile(filep): # parse the file reader = PListReader.PListReader() parser = xml.sax.make_parser() for key, value in reader.getRecommendedFeatures().items(): parser.setFeature(key, value) parser.setContentHandler(reader) parser.parse(open(filep, 'r')) return reader.getResult() def getText(text): parser = re.compile("(?<=\cf0 ).*(?=})") return parser.search(text, re.I).group(0) class NodeInfo: def __init__(self, label = "", nid = None, tsid = None): self.dstlist = [] self.label = label self.id = nid self.tsid = tsid def getNodesEdges (parsedlist, nodelist = []): nodes = {} edges = {} i = 0 for g in parsedlist["GraphicsList"]: cls = g['Class'] if cls == "LineGraphic": if g.has_key('Lables'): label = getText(g['Labels'][0]['Label']['Text']) else: label = "Edge" + str(g['ID']) if edges.has_key(g['Head']['ID']): edges[g['Head']['ID']].append(g['Tail']['ID']) else: edges[g['Head']['ID']] = [(g['Tail']['ID'])] if edges.has_key(g['Tail']['ID']): edges[g['Tail']['ID']].append(g['Head']['ID']) else: edges[g['Tail']['ID']] = [(g['Head']['ID'])] elif cls == "ShapedGraphic": if g.has_key('Text'): label = getText(g['Text']['Text']) else: label = "Node" + "%03d"%i #str(g['ID']) i += 1 if len(nodelist) == 0: ntsid = "localhost:%d" % i + 10000 print "Cannot get tsid from nodelist, Added", ntsid else: ntsid = nodelist.pop(0) nodes[g['ID']] = NodeInfo(label, g['ID'], ntsid) else: print "ID >>", g['ID'] return (nodes, edges) def getNodesEdgesPositions (parsedlist, nodelist = []): nodes = {} edges = {} Positions = {} i = 0 for g in parsedlist["GraphicsList"]: cls = g['Class'] if cls == "LineGraphic": if g.has_key('Lables'): label = getText(g['Labels'][0]['Label']['Text']) else: label = "Edge" + str(g['ID']) if edges.has_key(g['Head']['ID']): edges[g['Head']['ID']].append(g['Tail']['ID']) else: edges[g['Head']['ID']] = [(g['Tail']['ID'])] if edges.has_key(g['Tail']['ID']): edges[g['Tail']['ID']].append(g['Head']['ID']) else: edges[g['Tail']['ID']] = [(g['Head']['ID'])] elif cls == "ShapedGraphic": if g.has_key('Text'): label = getText(g['Text']['Text']) else: label = "Node" + "%03d"%i #str(g['ID']) i += 1 if len(nodelist) == 0: ntsid = "localhost:%d" % i + 10000 print "Cannot get tsid from nodelist, Added", ntsid else: ntsid = nodelist.pop(0) nodes[g['ID']] = NodeInfo(label, g['ID'], ntsid) else: print "ID >>", g['ID'] return (nodes, edges) if __name__ == "__main__": if (len(sys.argv) > 2): xmltext = sys.argv[1] else: xmltext = "example.graffle" nodetxt = open(sys.argv[2],'r').read() nodelist = re.findall("[-.\w]+:[0-9]+",nodetxt) res = parseFile(xmltext) nodes,edges = getNodesEdges(res, nodelist) print nodes, edges