Mercurial > lcfOS
comparison applications/ide/project.py @ 39:600f48b74799
Move ide
author | windel |
---|---|
date | Fri, 03 Feb 2012 18:40:43 +0100 |
parents | ide/project.py@de004f808e56 |
children |
comparison
equal
deleted
inserted
replaced
38:a1c9c2158e99 | 39:600f48b74799 |
---|---|
1 """ | |
2 Project that can be stored to and loaded from XML. | |
3 """ | |
4 | |
5 from xml.sax import ContentHandler, make_parser | |
6 import xml.dom.minidom as md | |
7 import os.path | |
8 | |
9 class ProjectContentHandler(ContentHandler): | |
10 def __init__(self, project): | |
11 self.project = project | |
12 self.inFiles = False | |
13 def startElement(self, name, attrs): | |
14 if name == 'Project': | |
15 self.project.name = attrs['name'] | |
16 if name == 'Files': | |
17 self.inFiles = True | |
18 if name == 'File' and self.inFiles: | |
19 self.project.files.append(attrs['Filename']) | |
20 def endElement(self, name): | |
21 if name == 'Files': | |
22 self.inFiles = False | |
23 | |
24 class ProjectFile: | |
25 def __init__(self, filename): | |
26 self.filename = filename | |
27 | |
28 class Project: | |
29 def __init__(self, filename, isnew=False): | |
30 self.name = "" | |
31 self.files = [] | |
32 self.settings = {} | |
33 self.filename = filename | |
34 | |
35 if not isnew: | |
36 """ Load the project from the XML file """ | |
37 parser = make_parser() | |
38 handler = ProjectContentHandler(self) | |
39 parser.setContentHandler(handler) | |
40 parser.parse(filename) | |
41 | |
42 def save(self, filename): | |
43 """ Save the project in XML format """ | |
44 # Create document: | |
45 doc = md.Document() | |
46 # Add project: | |
47 project = doc.createElement("Project") | |
48 project.setAttribute("name", self.name) | |
49 doc.appendChild(project) | |
50 | |
51 # Add project files: | |
52 filesNode = doc.createElement("Files") | |
53 project.appendChild(filesNode) | |
54 for f in self.files: | |
55 fe = doc.createElement("File") | |
56 fe.setAttribute("Filename", f) | |
57 filesNode.appendChild(fe) | |
58 | |
59 # Write the XML file: | |
60 xml = doc.toprettyxml() | |
61 with open(filename, 'w') as f: | |
62 f.write(xml) | |
63 | |
64 def loadProjectFile(self, filename): | |
65 basedir = os.path.dirname(self.filename) | |
66 filename = os.path.join(basedir, filename) | |
67 with open(filename, 'r') as f: | |
68 src = f.read() | |
69 return src | |
70 |