/[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 920 by bh, Fri May 16 17:37:29 2003 UTC
# Line 13  Functions to save a session to a file Line 13  Functions to save a session to a file
13    
14  __version__ = "$Revision$"  __version__ = "$Revision$"
15    
 # fix for people using python2.1  
 from __future__ import nested_scopes  
   
16  import os  import os
17  import string  import string
18    
19  import Thuban.Lib.fileutil  import Thuban.Lib.fileutil
20    
21  from Thuban.Model.color import Color  from Thuban.Model.classification import \
22        ClassGroupDefault, ClassGroupSingleton, ClassGroupRange, ClassGroupMap
 from Thuban.Model.classification import *  
23    
24  #  #
25  # one level of indention  # one level of indention
# Line 52  def escape(data): Line 48  def escape(data):
48      data = string.replace(data, "'", "'")      data = string.replace(data, "'", "'")
49      return data      return data
50    
51  class XMLSaver:  class XMLWriter:
52      """Abstract XMLSaver.      """Abstract XMLWriter.
53    
54      Should be overridden to provide specific object saving functionality.      Should be overridden to provide specific object saving functionality.
55      """      """
# Line 139  class XMLSaver: Line 135  class XMLSaver:
135    
136      def __write_attribs(self, attrs):      def __write_attribs(self, attrs):
137          for name, value in attrs.items():          for name, value in attrs.items():
138              self.file.write(' %s="%s"' % (escape(name), escape(value)))              self.file.write(' %s="%s"' % (self.encode(name),
139                                                  self.encode(value)))
140  class SessionSaver(XMLSaver):  
141        def encode(self, str):
142            """Return an XML-escaped and UTF-8 encoded copy of the string str.
143    
144            Assume that the argument is a bytestring in Latin 1.
145            """
146            return unicode(escape(str),'latin1').encode("utf8")
147    
148    
149    class SessionSaver(XMLWriter):
150    
151      """Class to serialize a session into an XML file.      """Class to serialize a session into an XML file.
152    
# Line 155  class SessionSaver(XMLSaver): Line 160  class SessionSaver(XMLSaver):
160    
161    
162      def __init__(self, session):      def __init__(self, session):
163          XMLSaver.__init__(self)          XMLWriter.__init__(self)
164          self.session = session          self.session = session
165    
166      def write(self, file_or_filename):      def write(self, file_or_filename):
167          XMLSaver.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
168    
169          self.write_header("session", "thuban.dtd")          self.write_header("session", "thuban.dtd")
170          self.write_session(self.session)          self.write_session(self.session)
# Line 199  class SessionSaver(XMLSaver): Line 204  class SessionSaver(XMLSaver):
204          element, call write_layer for each layer contained in the map          element, call write_layer for each layer contained in the map
205          and finally call write_label_layer to write the label layer.          and finally call write_label_layer to write the label layer.
206          """          """
207          self.open_element('map title="%s"' % escape(map.title))          self.open_element('map title="%s"' % self.encode(map.title))
208          self.write_projection(map.projection)          self.write_projection(map.projection)
209          for layer in map.Layers():          for layer in map.Layers():
210              self.write_layer(layer)              self.write_layer(layer)
# Line 210  class SessionSaver(XMLSaver): Line 215  class SessionSaver(XMLSaver):
215          """Write the projection.          """Write the projection.
216          """          """
217          if projection and len(projection.params) > 0:          if projection and len(projection.params) > 0:
218              self.open_element("projection")              self.open_element("projection", {"name": projection.GetName()})
219              for param in projection.params:              for param in projection.params:
220                  self.write_element('parameter value="%s"' % escape(param))                  self.write_element('parameter value="%s"' %
221                                       self.encode(param))
222              self.close_element("projection")              self.close_element("projection")
223    
224      def write_layer(self, layer, attrs = None):      def write_layer(self, layer, attrs = None):
# Line 232  class SessionSaver(XMLSaver): Line 238  class SessionSaver(XMLSaver):
238          attrs["stroke"]       = lc.GetDefaultLineColor().hex()          attrs["stroke"]       = lc.GetDefaultLineColor().hex()
239          attrs["stroke_width"] = str(lc.GetDefaultLineWidth())          attrs["stroke_width"] = str(lc.GetDefaultLineWidth())
240          attrs["fill"]         = lc.GetDefaultFill().hex()          attrs["fill"]         = lc.GetDefaultFill().hex()
241            attrs["visible"]      = ("false", "true")[int(layer.Visible())]
242    
243          self.open_element("layer", attrs)          self.open_element("layer", attrs)
244    
245            proj = layer.GetProjection()
246            if proj is not None:
247                self.write_projection(proj)
248    
249          self.write_classification(layer)          self.write_classification(layer)
250    
251          self.close_element("layer")          self.close_element("layer")
252    
253      def write_classification(self, layer, attrs = None):      def write_classification(self, layer, attrs = None):
# Line 256  class SessionSaver(XMLSaver): Line 269  class SessionSaver(XMLSaver):
269          self.open_element("classification", attrs)          self.open_element("classification", attrs)
270    
271    
272          types = [[lambda p: 'clnull label="%s"' % p.GetLabel(),          types = [[lambda p: 'clnull label="%s"' % self.encode(p.GetLabel()),
273                    lambda p: 'clnull'],                    lambda p: 'clnull'],
274                   [lambda p: 'clpoint label="%s" value="%s"' %                   [lambda p: 'clpoint label="%s" value="%s"' %
275                               (p.GetLabel(), str(p.GetValue())),                               (self.encode(p.GetLabel()), str(p.GetValue())),
276                    lambda p: 'clpoint'],                    lambda p: 'clpoint'],
277                   [lambda p: 'clrange label="%s" min="%s" max="%s"' %                   [lambda p: 'clrange label="%s" range="%s"' %
278                               (p.GetLabel(),                               (self.encode(p.GetLabel()),
279                                str(p.GetMin()), (str(p.GetMax()))),                                str(p.GetRange())),
280                    lambda p: 'clrange']]                    lambda p: 'clrange']]
281    
282          def write_class_group(group):          def write_class_group(group):
# Line 299  class SessionSaver(XMLSaver): Line 312  class SessionSaver(XMLSaver):
312              for label in labels:              for label in labels:
313                  self.write_element(('label x="%g" y="%g" text="%s"'                  self.write_element(('label x="%g" y="%g" text="%s"'
314                                      ' halign="%s" valign="%s"')                                      ' halign="%s" valign="%s"')
315                                  % (label.x, label.y, label.text, label.halign,                                  % (label.x, label.y,
316                                       self.encode(label.text),
317                                       label.halign,
318                                     label.valign))                                     label.valign))
319              self.close_element('labellayer')              self.close_element('labellayer')
320    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26