Mercurial > lcfOS
diff ide/project.py @ 7:2db4d2b362e6
Added xml project
author | windel |
---|---|
date | Sat, 15 Oct 2011 10:03:21 +0200 |
parents | |
children | edd70006d3e4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ide/project.py Sat Oct 15 10:03:21 2011 +0200 @@ -0,0 +1,60 @@ +""" + Project that can be stored to and loaded from XML. +""" + +from xml.sax import ContentHandler, make_parser +import xml.dom.minidom as md +import os.path + +class ProjectContentHandler(ContentHandler): + def __init__(self, project): + self.project = project + self.inFiles = False + def startElement(self, name, attrs): + if name == 'Project': + self.project.name = attrs['name'] + if name == 'Files': + self.inFiles = True + if name == 'File' and self.inFiles: + self.project.files.append(attrs['Filename']) + def endElement(self, name): + if name == 'Files': + self.inFiles = False + +class Project: + def __init__(self): + self.name = "" + self.files = [] + self.settings = {} + + def save(self, filename): + """ Save the project in XML format """ + # Create document: + doc = md.Document() + # Add project: + project = doc.createElement("Project") + project.setAttribute("name", self.name) + doc.appendChild(project) + + # Add project files: + filesNode = doc.createElement("Files") + project.appendChild(filesNode) + for f in self.files: + fe = doc.createElement("File") + fe.setAttribute("Filename", f) + filesNode.appendChild(fe) + + # Write the XML file: + xml = doc.toprettyxml() + with open(filename, 'w') as f: + f.write(xml) + + def load(self, filename): + """ Load the project from the XML file """ + if not os.path.exists(filename): + return + parser = make_parser() + handler = ProjectContentHandler(self) + parser.setContentHandler(handler) + parser.parse(filename) +