Mercurial > lcfOS
view applications/ide/project.py @ 60:b976546f5a60
Fixed code saving in XML
author | windel |
---|---|
date | Mon, 30 Apr 2012 17:40:04 +0200 |
parents | 600f48b74799 |
children |
line wrap: on
line source
""" 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 ProjectFile: def __init__(self, filename): self.filename = filename class Project: def __init__(self, filename, isnew=False): self.name = "" self.files = [] self.settings = {} self.filename = filename if not isnew: """ Load the project from the XML file """ parser = make_parser() handler = ProjectContentHandler(self) parser.setContentHandler(handler) parser.parse(filename) 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 loadProjectFile(self, filename): basedir = os.path.dirname(self.filename) filename = os.path.join(basedir, filename) with open(filename, 'r') as f: src = f.read() return src