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

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

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

revision 697 by jonathan, Wed Apr 16 16:40:07 2003 UTC revision 892 by frank, Mon May 12 10:45:47 2003 UTC
# Line 23  import Thuban.Lib.fileutil Line 23  import Thuban.Lib.fileutil
23    
24  from Thuban.Model.color import Color  from Thuban.Model.color import Color
25    
26  from Thuban.Model.classification import *  from Thuban.Model.classification import \
27        ClassGroupDefault, ClassGroupSingleton, ClassGroupRange, ClassGroupMap
28    
29  #  #
30  # one level of indention  # one level of indention
# Line 52  def escape(data): Line 53  def escape(data):
53      data = string.replace(data, "'", "'")      data = string.replace(data, "'", "'")
54      return data      return data
55    
56  class XMLSaver:  class XMLWriter:
57      """Abstract XMLSaver.      """Abstract XMLWriter.
58    
59      Should be overridden to provide specific object saving functionality.      Should be overridden to provide specific object saving functionality.
60      """      """
# Line 139  class XMLSaver: Line 140  class XMLSaver:
140    
141      def __write_attribs(self, attrs):      def __write_attribs(self, attrs):
142          for name, value in attrs.items():          for name, value in attrs.items():
143              self.file.write(' %s="%s"' % (escape(name), escape(value)))              self.file.write(' %s="%s"' % (self.encode(name),
144                                              self.encode(value)))
145            
146  class SessionSaver(XMLSaver):      def encode(self, str):
147            """Assume that str is in Latin1, escape it, and encode it in UTF-8.
148            
149            If str is None, return None
150            """
151    
152            if str is not None:
153                return unicode(escape(str),'latin1').encode("utf8")
154                #return escape(str).encode("utf8")
155            else:
156                return None
157    
158    class SessionSaver(XMLWriter):
159    
160      """Class to serialize a session into an XML file.      """Class to serialize a session into an XML file.
161    
# Line 155  class SessionSaver(XMLSaver): Line 169  class SessionSaver(XMLSaver):
169    
170    
171      def __init__(self, session):      def __init__(self, session):
172          XMLSaver.__init__(self)          XMLWriter.__init__(self)
173          self.session = session          self.session = session
174    
175      def write(self, file_or_filename):      def write(self, file_or_filename):
176          XMLSaver.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
177    
178          self.write_header("session", "thuban.dtd")          self.write_header("session", "thuban.dtd")
179          self.write_session(self.session)          self.write_session(self.session)
# Line 199  class SessionSaver(XMLSaver): Line 213  class SessionSaver(XMLSaver):
213          element, call write_layer for each layer contained in the map          element, call write_layer for each layer contained in the map
214          and finally call write_label_layer to write the label layer.          and finally call write_label_layer to write the label layer.
215          """          """
216          self.open_element('map title="%s"' % escape(map.title))          self.open_element('map title="%s"' % self.encode(map.title))
217          self.write_projection(map.projection)          self.write_projection(map.projection)
218          for layer in map.Layers():          for layer in map.Layers():
219              self.write_layer(layer)              self.write_layer(layer)
# Line 210  class SessionSaver(XMLSaver): Line 224  class SessionSaver(XMLSaver):
224          """Write the projection.          """Write the projection.
225          """          """
226          if projection and len(projection.params) > 0:          if projection and len(projection.params) > 0:
227              self.open_element("projection")              self.open_element("projection", {"name": projection.GetName()})
228              for param in projection.params:              for param in projection.params:
229                  self.write_element('parameter value="%s"' % escape(param))                  self.write_element('parameter value="%s"' %
230                                       self.encode(param))
231              self.close_element("projection")              self.close_element("projection")
232    
233      def write_layer(self, layer, attrs = None):      def write_layer(self, layer, attrs = None):
# Line 232  class SessionSaver(XMLSaver): Line 247  class SessionSaver(XMLSaver):
247          attrs["stroke"]       = lc.GetDefaultLineColor().hex()          attrs["stroke"]       = lc.GetDefaultLineColor().hex()
248          attrs["stroke_width"] = str(lc.GetDefaultLineWidth())          attrs["stroke_width"] = str(lc.GetDefaultLineWidth())
249          attrs["fill"]         = lc.GetDefaultFill().hex()          attrs["fill"]         = lc.GetDefaultFill().hex()
250            attrs["visible"]      = ("false", "true")[int(layer.Visible())]
251    
252          self.open_element("layer", attrs)          self.open_element("layer", attrs)
253    
254            proj = layer.GetProjection()
255            if proj is not None:
256                self.write_projection(proj)
257    
258          self.write_classification(layer)          self.write_classification(layer)
259    
260          self.close_element("layer")          self.close_element("layer")
261    
262      def write_classification(self, layer, attrs = None):      def write_classification(self, layer, attrs = None):
# Line 256  class SessionSaver(XMLSaver): Line 278  class SessionSaver(XMLSaver):
278          self.open_element("classification", attrs)          self.open_element("classification", attrs)
279    
280    
281          types = [[lambda p: 'clnull label="%s"' % p.GetLabel(),          types = [[lambda p: 'clnull label="%s"' % self.encode(p.GetLabel()),
282                    lambda p: 'clnull'],                    lambda p: 'clnull'],
283                   [lambda p: 'clpoint label="%s" value="%s"' %                   [lambda p: 'clpoint label="%s" value="%s"' %
284                               (p.GetLabel(), str(p.GetValue())),                               (self.encode(p.GetLabel()), str(p.GetValue())),
285                    lambda p: 'clpoint'],                    lambda p: 'clpoint'],
286                   [lambda p: 'clrange label="%s" min="%s" max="%s"' %                   [lambda p: 'clrange label="%s" range="%s"' %
287                               (p.GetLabel(),                               (self.encode(p.GetLabel()),
288                                str(p.GetMin()), (str(p.GetMax()))),                                str(p.GetRange())),
289                    lambda p: 'clrange']]                    lambda p: 'clrange']]
290    
291          def write_class_group(group):          def write_class_group(group):
# Line 299  class SessionSaver(XMLSaver): Line 321  class SessionSaver(XMLSaver):
321              for label in labels:              for label in labels:
322                  self.write_element(('label x="%g" y="%g" text="%s"'                  self.write_element(('label x="%g" y="%g" text="%s"'
323                                      ' halign="%s" valign="%s"')                                      ' halign="%s" valign="%s"')
324                                  % (label.x, label.y, label.text, label.halign,                                  % (label.x, label.y,
325                                       self.encode(label.text),
326                                       label.halign,
327                                     label.valign))                                     label.valign))
328              self.close_element('labellayer')              self.close_element('labellayer')
329    

Legend:
Removed from v.697  
changed lines
  Added in v.892

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26