/[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 390 by jonathan, Mon Jan 27 11:48:17 2003 UTC revision 391 by jonathan, Mon Feb 10 15:26:11 2003 UTC
# Line 77  class Saver: Line 77  class Saver:
77          filenames.          filenames.
78          """          """
79    
80          self.indent_level = 0          # keep track of how many levels of indentation to write
81            self.indent_level = 0
82            # track whether an element is currently open. see open_element().
83            self.element_open = 0
84    
85          if hasattr(file_or_filename, "write"):          if hasattr(file_or_filename, "write"):
86              # it's a file object              # it's a file object
# Line 102  class Saver: Line 105  class Saver:
105              self.file.write(' %s="%s"' % (escape(name), escape(value)))              self.file.write(' %s="%s"' % (escape(name), escape(value)))
106            
107      def open_element(self, element, attrs = {}):      def open_element(self, element, attrs = {}):
108    
109            #
110            # we note when an element is opened so that if two open_element()
111            # calls are made successively we can end the currently open
112            # tag and will later write a proper close tag. otherwise,
113            # if a close_element() call is made directly after an open_element()
114            # call we will close the tag with a />
115            #
116            if self.element_open == 1:
117                self.file.write(">\n")
118    
119            self.element_open = 1
120    
121          # Helper function to write an element open tag with attributes          # Helper function to write an element open tag with attributes
122          self.file.write("%s<%s" % (TAB*self.indent_level, element))          self.file.write("%s<%s" % (TAB*self.indent_level, element))
123          self.write_attribs(attrs)          self.write_attribs(attrs)
         self.file.write(">\n")  
124    
125          self.indent_level += 1          self.indent_level += 1
126    
# Line 113  class Saver: Line 128  class Saver:
128          self.indent_level -= 1          self.indent_level -= 1
129          if self.indent_level < 0:          if self.indent_level < 0:
130              raise ValueError("close_element called too many times!")              raise ValueError("close_element called too many times!")
131          self.file.write("%s</%s>\n" % (TAB*self.indent_level, element))  
132            # see open_element() for an explanation
133            if self.element_open == 1:
134                self.element_open = 0
135                self.file.write("/>\n")
136            else:
137                self.file.write("%s</%s>\n" % (TAB*self.indent_level, element))
138    
139      def write_element(self, element, attrs = {}):      def write_element(self, element, attrs = {}):
140          # Helper function to write an element open tag with attributes          """write an element that won't need a closing tag"""
141          self.file.write("%s<%s" % (TAB*self.indent_level, element))          self.open_element(element, attrs)
142          self.write_attribs(attrs)          self.close_element(element)
         self.file.write("/>\n")  
143    
144      def write_header(self):      def write_header(self):
145          """Write the XML header"""          """Write the XML header"""
# Line 184  class Saver: Line 204  class Saver:
204          given, should be a mapping from attribute names to attribute          given, should be a mapping from attribute names to attribute
205          values. The values should not be XML-escaped yet.          values. The values should not be XML-escaped yet.
206          """          """
207            lc = layer.classification
208    
209          if attrs is None:          if attrs is None:
210              attrs = {}              attrs = {}
211          attrs["title"] = layer.title          attrs["title"] = layer.title
212          attrs["filename"] = relative_filename(self.dir, layer.filename)          attrs["filename"] = relative_filename(self.dir, layer.filename)
213          attrs["stroke_width"] = str(layer.stroke_width)          attrs["stroke_width"] = str(lc.GetDefaultStrokeWidth())
214          fill = layer.fill          fill = lc.GetDefaultFill()
215          if fill is None:          if fill is None:
216              attrs["fill"] = "None"              attrs["fill"] = "None"
217          else:          else:
218              attrs["fill"] = fill.hex()              attrs["fill"] = fill.hex()
219          stroke = layer.stroke          stroke = lc.GetDefaultStroke()
220          if stroke is None:          if stroke is None:
221              attrs["stroke"] = "None"              attrs["stroke"] = "None"
222          else:          else:
# Line 221  class Saver: Line 243  class Saver:
243          attrs["field"] = field          attrs["field"] = field
244          self.open_element("classification", attrs)          self.open_element("classification", attrs)
245    
246          if lc.NullData is not None:          def write_class_data(data):
247              self.open_element("clnull")              dict = {'stroke'      : data.GetStroke(),
248              self.write_element("cldata", lc.NullData)                      'stroke_width': data.GetStrokeWidth(),
249              self.close_element("clnull")                      'fill'        : data.GetFill()}
250                self.write_element("cldata", dict)
251    
252            self.open_element("clnull")
253            write_class_data(lc.GetDefaultData())
254            self.close_element("clnull")
255                
256          if lc.points != {}:          if lc.points != {}:
257              for value, data in lc.points.items():              for value, data in lc.points.items():
258                  self.open_element('clpoint value="%s"' % (escape(str(value))))                  self.open_element('clpoint value="%s"' % (escape(str(value))))
259                  self.write_element("cldata", data)                  write_class_data(data)
260                  self.close_element('clpoint')                  self.close_element('clpoint')
261                        
262          if lc.ranges != []:          if lc.ranges != []:
263              for p in lc.ranges:              for p in lc.ranges:
264                  self.open_element('clrange min="%s" max="%s"'                  self.open_element('clrange min="%s" max="%s"'
265                      % (escape(str(p[0])), escape(str(p[1]))))                      % (escape(str(p[0])), escape(str(p[1]))))
266                  self.write_element("cldata", p[2])                  write_class_data(p[2])
267                  self.close_element('clrange')                  self.close_element('clrange')
268    
269          self.close_element("classification")          self.close_element("classification")

Legend:
Removed from v.390  
changed lines
  Added in v.391

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26