/[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 366 by jonathan, Mon Jan 27 11:48:17 2003 UTC revision 414 by jonathan, Wed Feb 19 16:52:23 2003 UTC
# Line 2  Line 2 
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
5    # Jonathan Coles <[email protected]>
6  #  #
7  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
8  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 77  class Saver: Line 78  class Saver:
78          filenames.          filenames.
79          """          """
80    
81          self.indent_level = 0          # keep track of how many levels of indentation to write
82            self.indent_level = 0
83            # track whether an element is currently open. see open_element().
84            self.element_open = 0
85    
86          if hasattr(file_or_filename, "write"):          if hasattr(file_or_filename, "write"):
87              # it's a file object              # it's a file object
# Line 102  class Saver: Line 106  class Saver:
106              self.file.write(' %s="%s"' % (escape(name), escape(value)))              self.file.write(' %s="%s"' % (escape(name), escape(value)))
107            
108      def open_element(self, element, attrs = {}):      def open_element(self, element, attrs = {}):
109    
110            #
111            # we note when an element is opened so that if two open_element()
112            # calls are made successively we can end the currently open
113            # tag and will later write a proper close tag. otherwise,
114            # if a close_element() call is made directly after an open_element()
115            # call we will close the tag with a />
116            #
117            if self.element_open == 1:
118                self.file.write(">\n")
119    
120            self.element_open = 1
121    
122          # Helper function to write an element open tag with attributes          # Helper function to write an element open tag with attributes
123          self.file.write("%s<%s" % (TAB*self.indent_level, element))          self.file.write("%s<%s" % (TAB*self.indent_level, element))
124          self.write_attribs(attrs)          self.write_attribs(attrs)
         self.file.write(">\n")  
125    
126          self.indent_level += 1          self.indent_level += 1
127    
# Line 113  class Saver: Line 129  class Saver:
129          self.indent_level -= 1          self.indent_level -= 1
130          if self.indent_level < 0:          if self.indent_level < 0:
131              raise ValueError("close_element called too many times!")              raise ValueError("close_element called too many times!")
132          self.file.write("%s</%s>\n" % (TAB*self.indent_level, element))  
133            # see open_element() for an explanation
134            if self.element_open == 1:
135                self.element_open = 0
136                self.file.write("/>\n")
137            else:
138                self.file.write("%s</%s>\n" % (TAB*self.indent_level, element))
139    
140      def write_element(self, element, attrs = {}):      def write_element(self, element, attrs = {}):
141          # Helper function to write an element open tag with attributes          """write an element that won't need a closing tag"""
142          self.file.write("%s<%s" % (TAB*self.indent_level, element))          self.open_element(element, attrs)
143          self.write_attribs(attrs)          self.close_element(element)
         self.file.write("/>\n")  
144    
145      def write_header(self):      def write_header(self):
146          """Write the XML header"""          """Write the XML header"""
# Line 184  class Saver: Line 205  class Saver:
205          given, should be a mapping from attribute names to attribute          given, should be a mapping from attribute names to attribute
206          values. The values should not be XML-escaped yet.          values. The values should not be XML-escaped yet.
207          """          """
208            lc = layer.GetClassification()
209    
210          if attrs is None:          if attrs is None:
211              attrs = {}              attrs = {}
212          attrs["title"] = layer.title          attrs["title"] = layer.title
213          attrs["filename"] = relative_filename(self.dir, layer.filename)          attrs["filename"] = relative_filename(self.dir, layer.filename)
214          attrs["stroke_width"] = str(layer.stroke_width)          attrs["stroke"] = lc.GetDefaultStroke().hex()
215          fill = layer.fill          attrs["stroke_width"] = str(lc.GetDefaultStrokeWidth())
216          if fill is None:          attrs["fill"] = lc.GetDefaultFill().hex()
217              attrs["fill"] = "None"  
218          else:          #fill = lc.GetDefaultFill()
219              attrs["fill"] = fill.hex()          #if fill is None:
220          stroke = layer.stroke              #attrs["fill"] = "None"
221          if stroke is None:          #else:
222              attrs["stroke"] = "None"              #attrs["fill"] = fill.hex()
223          else:  
224              attrs["stroke"] = stroke.hex()  
225            #stroke = lc.GetDefaultStroke()
226            #if stroke is None:
227                #attrs["stroke"] = "None"
228            #else:
229                #attrs["stroke"] = stroke.hex()
230    
231          self.open_element("layer", attrs)          self.open_element("layer", attrs)
232          self.write_classification(layer)          self.write_classification(layer)
# Line 208  class Saver: Line 236  class Saver:
236          if attrs is None:          if attrs is None:
237              attrs = {}              attrs = {}
238    
239          lc = layer.classification          lc = layer.GetClassification()
240    
241          field = lc.field          field = lc.field
242    
# Line 221  class Saver: Line 249  class Saver:
249          attrs["field"] = field          attrs["field"] = field
250          self.open_element("classification", attrs)          self.open_element("classification", attrs)
251    
252          if lc.NullData is not None:          def write_class_data(data):
253              self.open_element("clnull")              dict = {'stroke'      : data.GetStroke().hex(),
254              self.write_element("cldata", lc.NullData)                      'stroke_width': str(data.GetStrokeWidth()),
255              self.close_element("clnull")                      'fill'        : data.GetFill().hex()}
256                self.write_element("cldata", dict)
257    
258            self.open_element("clnull")
259            write_class_data(lc.GetDefaultData())
260            self.close_element("clnull")
261                
262          if lc.points != {}:          if lc.points != {}:
263              for value, data in lc.points.items():              for p in lc.points.values():
264                  self.open_element('clpoint value="%s"' % (escape(str(value))))                  self.open_element('clpoint value="%s"' %
265                  self.write_element("cldata", data)                      (escape(str(p.GetValue()))))
266                    write_class_data(p)
267                  self.close_element('clpoint')                  self.close_element('clpoint')
268                        
269          if lc.ranges != []:          if lc.ranges != []:
270              for p in lc.ranges:              for p in lc.ranges:
271                  self.open_element('clrange min="%s" max="%s"'                  self.open_element('clrange min="%s" max="%s"'
272                      % (escape(str(p[0])), escape(str(p[1]))))                      % (escape(str(p.GetMin())), escape(str(p.GetMax()))))
273                  self.write_element("cldata", p[2])                  write_class_data(p)
274                  self.close_element('clrange')                  self.close_element('clrange')
275    
276          self.close_element("classification")          self.close_element("classification")

Legend:
Removed from v.366  
changed lines
  Added in v.414

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26