/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/load.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/load.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 706 by jonathan, Wed Apr 23 08:44:21 2003 UTC revision 772 by jonathan, Tue Apr 29 14:34:11 2003 UTC
# Line 1  Line 1 
1  # Copyright (C) 2001, 2002 by Intevation GmbH  # Copyright (C) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
# Line 13  Parser for thuban session files. Line 13  Parser for thuban session files.
13    
14  __version__ = "$Revision$"  __version__ = "$Revision$"
15    
16  import sys, string, os  import string, os
17    
18  import xml.sax  import xml.sax
19  import xml.sax.handler  import xml.sax.handler
# Line 76  class XMLReader(xml.sax.handler.ContentH Line 76  class XMLReader(xml.sax.handler.ContentH
76    
77      def __init__(self):      def __init__(self):
78          self.chars = ''          self.chars = ''
         self.__parser = None  
79          self.__directory = ""          self.__directory = ""
80          self.__dispatchers = {}          self.__dispatchers = {}
81    
82      def read(self, file_or_filename):      def read(self, file_or_filename):
83    
84          if hasattr(file_or_filename, "write"):          if hasattr(file_or_filename, "read"):
85              # it's a file object              # it's a file object
86              self.__directory = ""              self.__directory = ""
87              self.__file = file_or_filename              self.__file = file_or_filename
# Line 91  class XMLReader(xml.sax.handler.ContentH Line 90  class XMLReader(xml.sax.handler.ContentH
90              self.__directory = os.path.dirname(filename)              self.__directory = os.path.dirname(filename)
91              self.__file = open(filename)              self.__file = open(filename)
92    
93          if self.__parser is None:          parser = make_parser()
94              self.__parser = make_parser()          parser.setContentHandler(self)
95              self.__parser.setContentHandler(self)          parser.setErrorHandler(ErrorHandler())
96              self.__parser.setErrorHandler(ErrorHandler())          parser.setFeature(xml.sax.handler.feature_namespaces, 1)
97              self.__parser.setFeature(xml.sax.handler.feature_namespaces, 1)  
98            #
99              #          # Well, this isn't pretty, but it appears that if you
100              # Well, this isn't pretty, but it appears that if you          # use Python 2.2 without the site-package _xmlplus then
101              # use Python 2.2 without the site-package _xmlplus then          # the following will fail, and without them it will work.
102              # the following will fail, and without them it will work.          # However, if you do have the site-package and you don't
103              # However, if you do have the site-package and you don't          # call these functions, the reader raises an exception
104              # call these functions, the reader raises an exception          #
105              #          # The reason we set these to 0 in the first place is
106              # The reason we set these to 0 in the first place is          # because there is an unresolved issue with external
107              # because there is an unresolved issue with external          # entities causing an exception in the reader
108              # entities causing an exception in the reader          #
109              #          try:
110              try:              parser.setFeature(xml.sax.handler.feature_validation,0)
111                  self.__parser.setFeature(xml.sax.handler.feature_validation,0)              parser.setFeature(xml.sax.handler.feature_external_ges,0)
112                  self.__parser.setFeature(xml.sax.handler.feature_external_ges,0)              parser.setFeature(xml.sax.handler.feature_external_pes,0)
113                  self.__parser.setFeature(xml.sax.handler.feature_external_pes,0)          except SAXNotRecognizedException:
114              except SAXNotRecognizedException:              pass
                 pass  
115    
116          self.__parser.parse(self.__file)          parser.parse(self.__file)
117    
118          self.close()          self.close()
119    
120      def close(self):      def close(self):
121          self.__file.close()          self.__file.close()
122                    
123      def GetFileName(self):      def GetFilename(self):
124          if hasattr(self.__file, "name"):          if hasattr(self.__file, "name"):
125              return self.__file.name              return self.__file.name
126    
# Line 133  class XMLReader(xml.sax.handler.ContentH Line 131  class XMLReader(xml.sax.handler.ContentH
131    
132    
133      def AddDispatchers(self, dict):      def AddDispatchers(self, dict):
134          self.__dispatchers.update(dict)          """Add the function names that should be used to process XML tags.
135    
136          #for key, (start, end) in dict.iteritems():          dict -- a dictionary whose keys are XML tag strings and whose values
137              #if start is not None: self.start_dispatcher[key] = start                  are pairs of strings such that the first string is
138              #if end   is not None: self.end_dispatcher[key]   = end                  the name of the function that should be called when the
139                    XML tag opens and the second string is the name of the
140                    function that should be called when the XML tag closes.
141                    If a pair element is None, no function is called.
142            """
143    
144            self.__dispatchers.update(dict)
145    
146      def startElementNS(self, name, qname, attrs):      def startElementNS(self, name, qname, attrs):
147          """Call the method given for name in self.start_dispatcher          """Call the method given for name in self.start_dispatcher
148          """          """
149          if name[0] is None:          if name[0] is None:
150              method_name = self.__dispatchers.get(name[1])              method_name = self.__dispatchers.get(name[1])
             #method_name = self.start_dispatcher.get(name[1])  
151          else:          else:
152              # Dispatch with namespace              # Dispatch with namespace
153              method_name = self.__dispatchers.get(name)              method_name = self.__dispatchers.get(name)
154          if method_name is not None \          if method_name is not None and method_name[0] is not None:
             and method_name[0] is not None:  
155              getattr(self, method_name[0])(name, qname, attrs)              getattr(self, method_name[0])(name, qname, attrs)
156    
157      def endElementNS(self, name, qname):      def endElementNS(self, name, qname):
# Line 157  class XMLReader(xml.sax.handler.ContentH Line 159  class XMLReader(xml.sax.handler.ContentH
159          """          """
160          if name[0] is None:          if name[0] is None:
161              method_name = self.__dispatchers.get(name[1])              method_name = self.__dispatchers.get(name[1])
             #method_name = self.end_dispatcher.get(name[1])  
162          else:          else:
163              # Dispatch with namespace              # Dispatch with namespace
164              method_name = self.__dispatchers.get(name)              method_name = self.__dispatchers.get(name)
165          if method_name is not None \          if method_name is not None and method_name[1] is not None:
             and method_name[1] is not None:  
166              getattr(self, method_name[1])(name, qname)              getattr(self, method_name[1])(name, qname)
167    
168  class SessionLoader(XMLReader):  class SessionLoader(XMLReader):
# Line 199  class SessionLoader(XMLReader): Line 199  class SessionLoader(XMLReader):
199      def start_map(self, name, qname, attrs):      def start_map(self, name, qname, attrs):
200          """Start a map."""          """Start a map."""
201          self.aMap = Map(attrs.get((None, 'title'), None))          self.aMap = Map(attrs.get((None, 'title'), None))
202            self.__projReceiver = self.aMap
203    
204      def end_map(self, name, qname):      def end_map(self, name, qname):
205          self.theSession.AddMap(self.aMap)          self.theSession.AddMap(self.aMap)
206            self.__projReceiver = None
207    
208      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
209            self.ProjectionName = attrs.get((None, 'name'), None)
210          self.ProjectionParams = [ ]          self.ProjectionParams = [ ]
211    
212      def end_projection(self, name, qname):      def end_projection(self, name, qname):
213          self.aMap.SetProjection(Projection(self.ProjectionParams))          self.__projReceiver.SetProjection(
214                Projection(self.ProjectionParams, self.ProjectionName))
215    
216      def start_parameter(self, name, qname, attrs):      def start_parameter(self, name, qname, attrs):
217          s = attrs.get((None, 'value'))          s = attrs.get((None, 'value'))
# Line 224  class SessionLoader(XMLReader): Line 228  class SessionLoader(XMLReader):
228          title = attrs.get((None, 'title'), "")          title = attrs.get((None, 'title'), "")
229          filename = attrs.get((None, 'filename'), "")          filename = attrs.get((None, 'filename'), "")
230          filename = os.path.join(self.GetDirectory(), filename)          filename = os.path.join(self.GetDirectory(), filename)
231            visible  = attrs.get((None, 'visible'), "true")
232          fill = parse_color(attrs.get((None, 'fill'), "None"))          fill = parse_color(attrs.get((None, 'fill'), "None"))
233          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))
234          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))
235          self.aLayer = layer_class(title, filename, fill = fill,          self.aLayer = layer_class(title,
236                                    stroke = stroke, lineWidth = stroke_width)                                    self.theSession.OpenShapefile(filename),
237                                      fill = fill, stroke = stroke,
238                                      lineWidth = stroke_width,
239                                      visible = visible != "false")
240    
241            self.__projReceiver = self.aLayer
242    
243      def end_layer(self, name, qname):      def end_layer(self, name, qname):
244          self.aMap.AddLayer(self.aLayer)          self.aMap.AddLayer(self.aLayer)
245            self.__projReceiver = None
246    
247      def start_classification(self, name, qname, attrs):      def start_classification(self, name, qname, attrs):
248          field = attrs.get((None, 'field'), None)          field = attrs.get((None, 'field'), None)

Legend:
Removed from v.706  
changed lines
  Added in v.772

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26