Index: /issm/trunk/src/m/kml/kml_colorstyle.m
===================================================================
--- /issm/trunk/src/m/kml/kml_colorstyle.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_colorstyle.m	(revision 7297)
@@ -160,4 +160,40 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the colorstyles
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_colorstyle')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!ColorStyle id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!ColorStyle>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_substyle(kmli,sbuf,indent);
+                if ~isempty(kmli.color)
+                    sbuf=add(sbuf,sprintf('%s  <color>%s</color>\n',indent,kmli.color));
+                end
+                if ~isempty(kmli.colormode)
+                    sbuf=add(sbuf,sprintf('%s  <colorMode>%s</colorMode>\n',indent,kmli.colormode));
+                end
+                if strcmp(class(kml),'kml_colorstyle')
+                    sbuf=add(sbuf,sprintf('%s</!ColorStyle>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_container.m
===================================================================
--- /issm/trunk/src/m/kml/kml_container.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_container.m	(revision 7297)
@@ -150,4 +150,34 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the containers
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_container')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!Container id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!Container>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_feature(kmli,sbuf,indent);
+                if strcmp(class(kml),'kml_container')
+                    sbuf=add(sbuf,sprintf('%s<!/Container>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_document.m
===================================================================
--- /issm/trunk/src/m/kml/kml_document.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_document.m	(revision 7297)
@@ -162,4 +162,44 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the documents
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<Document id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<Document>\n',indent));
+                end
+                sbuf=kml_swrite@kml_container(kmli,sbuf,indent);
+
+%  loop over the features for each document
+
+                for j=1:numel(kmli.feature)
+                    if ~isempty(kmli.feature{j})
+                        if isa(kmli.feature{j},'kml_feature')
+                            sbuf=kml_swrite(kmli.feature{j},sbuf,[indent '  ']);
+                        else
+                            warning('kml(%d).feature{%d} is a ''%s'' class object, not ''%s''.',...
+                                i,j,class(kmli.feature{j}),'kml_feature');
+                        end
+                    end
+                end
+
+                sbuf=add(sbuf,sprintf('%s</Document>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_feature.m
===================================================================
--- /issm/trunk/src/m/kml/kml_feature.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_feature.m	(revision 7297)
@@ -204,4 +204,62 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the features
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_feature')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!Feature id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!Feature>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_object(kmli,sbuf,indent);
+                if ~isempty(kmli.name)
+                    sbuf=add(sbuf,sprintf('%s  <name>%s</name>\n',indent,kmli.name));
+                end
+                sbuf=add(sbuf,sprintf('%s  <visibility>%d</visibility>\n',indent,kmli.visibility));
+                sbuf=add(sbuf,sprintf('%s  <open>%d</open>\n',indent,kmli.open));
+                if ~isempty(kmli.snippet)
+                    sbuf=add(sbuf,sprintf('%s  <Snippet maxLines="2">%s</Snippet>\n',indent,kmli.snippet));
+                end
+                if ~isempty(kmli.descript)
+                    sbuf=add(sbuf,sprintf('%s  <description>%s</description>\n',indent,kmli.descript));
+                end
+                if ~isempty(kmli.styleurl)
+                    sbuf=add(sbuf,sprintf('%s  <styleUrl>%s</styleUrl>\n',indent,kmli.styleurl));
+                end
+
+%  loop over the styles for each feature
+
+                for j=1:numel(kmli.style)
+                    if ~isempty(kmli.style{j})
+                        if isa(kmli.style{j},'kml_styleselector')
+                            sbuf=kml_swrite(kmli.style{j},sbuf,[indent '  ']);
+                        else
+                            warning('kml(%d).style{%d} is a ''%s'' class object, not ''%s''.',...
+                                i,j,class(kmli.style{j}),'kml_styleselector');
+                        end
+                    end
+                end
+
+                if strcmp(class(kml),'kml_feature')
+                    sbuf=add(sbuf,sprintf('%s<!/Feature>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_folder.m
===================================================================
--- /issm/trunk/src/m/kml/kml_folder.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_folder.m	(revision 7297)
@@ -162,4 +162,44 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the folders
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<Folder id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<Folder>\n',indent));
+                end
+                sbuf=kml_swrite@kml_container(kmli,sbuf,indent);
+
+%  loop over the features for each folder
+
+                for j=1:numel(kmli.feature)
+                    if ~isempty(kmli.feature{j})
+                        if isa(kmli.feature{j},'kml_feature')
+                            sbuf=kml_swrite(kmli.feature{j},sbuf,[indent '  ']);
+                        else
+                            warning('kml(%d).feature{%d} is a ''%s'' class object, not ''%s''.',...
+                                i,j,class(kmli.feature{j}),'kml_feature');
+                        end
+                    end
+                end
+
+                sbuf=add(sbuf,sprintf('%s</Folder>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_geometry.m
===================================================================
--- /issm/trunk/src/m/kml/kml_geometry.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_geometry.m	(revision 7297)
@@ -143,4 +143,34 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the geometries
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_geometry')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!Geometry id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!Geometry>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_object(kmli,sbuf,indent);
+                if strcmp(class(kml),'kml_geometry')
+                    sbuf=add(sbuf,sprintf('%s</!Geometry>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_linearring.m
===================================================================
--- /issm/trunk/src/m/kml/kml_linearring.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_linearring.m	(revision 7297)
@@ -165,4 +165,42 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+            if ~exist('sbuf','var') || isempty(sbuf)
+                sbuf=string_buf;
+            end
+            if ~exist('indent','var') || isempty(indent)
+                indent='';
+            end
+
+%  loop over the linearrings
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<LinearRing id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<LinearRing>\n',indent));
+                end
+                sbuf=kml_swrite@kml_geometry(kmli,sbuf,indent);
+                sbuf=add(sbuf,sprintf('%s  <extrude>%d</extrude>\n',indent,kmli.extrude));
+                sbuf=add(sbuf,sprintf('%s  <tessellate>%d</tessellate>\n',indent,kmli.tessellate));
+                sbuf=add(sbuf,sprintf('%s  <altitudeMode>%s</altitudeMode>\n',indent,kmli.altmode));
+                sbuf=add(sbuf,sprintf('%s  <coordinates>\n',indent));
+
+%  loop over the coordinates for each linearring
+
+                for j=1:size(kmli.coords,1)
+                    sbuf=add(sbuf,sprintf('%s    %0.16g,%0.16g,%0.16g\n',indent,kmli.coords(j,:)));
+                end
+
+                sbuf=add(sbuf,sprintf('%s  </coordinates>\n',indent));
+                sbuf=add(sbuf,sprintf('%s</LinearRing>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_linestring.m
===================================================================
--- /issm/trunk/src/m/kml/kml_linestring.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_linestring.m	(revision 7297)
@@ -165,4 +165,42 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+            if ~exist('sbuf','var') || isempty(sbuf)
+                sbuf=string_buf;
+            end
+            if ~exist('indent','var') || isempty(indent)
+                indent='';
+            end
+
+%  loop over the linestrings
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<LineString id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<LineString>\n',indent));
+                end
+                sbuf=kml_swrite@kml_geometry(kmli,sbuf,indent);
+                sbuf=add(sbuf,sprintf('%s  <extrude>%d</extrude>\n',indent,kmli.extrude));
+                sbuf=add(sbuf,sprintf('%s  <tessellate>%d</tessellate>\n',indent,kmli.tessellate));
+                sbuf=add(sbuf,sprintf('%s  <altitudeMode>%s</altitudeMode>\n',indent,kmli.altmode));
+                sbuf=add(sbuf,sprintf('%s  <coordinates>\n',indent));
+
+%  loop over the coordinates for each linestring
+
+                for j=1:size(kmli.coords,1)
+                    sbuf=add(sbuf,sprintf('%s    %0.16g,%0.16g,%0.16g\n',indent,kmli.coords(j,:)));
+                end
+
+                sbuf=add(sbuf,sprintf('%s  </coordinates>\n',indent));
+                sbuf=add(sbuf,sprintf('%s</LineString>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_linestyle.m
===================================================================
--- /issm/trunk/src/m/kml/kml_linestyle.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_linestyle.m	(revision 7297)
@@ -143,4 +143,31 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the linestyles
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<LineStyle id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<LineStyle>\n',indent));
+                end
+                sbuf=kml_swrite@kml_colorstyle(kmli,sbuf,indent);
+                sbuf=add(sbuf,sprintf('%s  <width>%d</width>\n',indent,kmli.width));
+                sbuf=add(sbuf,sprintf('%s</LineStyle>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_mesh_write.m
===================================================================
--- /issm/trunk/src/m/kml/kml_mesh_write.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_mesh_write.m	(revision 7297)
@@ -241,6 +241,7 @@
 %%  write kml file
 
-kml_file_write(kdoc,filek);
-
-end
-
+% kml_file_write(kdoc,filek);
+kml_file_swrite(kdoc,filek);
+
+end
+
Index: /issm/trunk/src/m/kml/kml_multigeometry.m
===================================================================
--- /issm/trunk/src/m/kml/kml_multigeometry.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_multigeometry.m	(revision 7297)
@@ -155,4 +155,45 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the multigeometry
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<MultiGeometry id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<MultiGeometry>\n',indent));
+                end
+                sbuf=kml_swrite@kml_geometry(kmli,sbuf,indent);
+
+%  loop over the geometry elements for each multigeometry
+
+                for j=1:numel(kmli.geometry)
+                    kmlij=kmli.geometry{j};
+                    if ~isempty(kmlij)
+                        if isa(kmlij,'kml_geometry')
+                            sbuf=kml_swrite(kmlij,sbuf,[indent '  ']);
+                        else
+                            warning('kml(%d).geometry{%d} is a ''%s'' class object, not ''%s''.',...
+                                i,j,class(kmlij),'kml_geometry');
+                        end
+                    end
+                end
+
+                sbuf=add(sbuf,sprintf('%s</MultiGeometry>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_object.m
===================================================================
--- /issm/trunk/src/m/kml/kml_object.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_object.m	(revision 7297)
@@ -144,4 +144,34 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the objects
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_object')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!Object id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!Object>\n',indent));
+                    end
+                end
+
+                if strcmp(class(kml),'kml_object')
+                    sbuf=add(sbuf,sprintf('%s</!Object>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_placemark.m
===================================================================
--- /issm/trunk/src/m/kml/kml_placemark.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_placemark.m	(revision 7297)
@@ -162,4 +162,45 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the placemarks
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<Placemark id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<Placemark>\n',indent));
+                end
+                sbuf=kml_swrite@kml_feature(kmli,sbuf,indent);
+
+%  loop over the geometry elements for each placemark
+
+                for j=1:min(1,numel(kmli.geometry))
+                    kmlij=kmli.geometry(j);
+                    if ~isempty(kmlij)
+                        if isa(kmlij,'kml_geometry')
+                            sbuf=kml_swrite(kmlij,sbuf,[indent '  ']);
+                        else
+                            warning('kml(%d).geometry(%d) is a ''%s'' class object, not ''%s''.',...
+                                i,j,class(kmlij),'kml_geometry');
+                        end
+                    end
+                end
+
+                sbuf=add(sbuf,sprintf('%s</Placemark>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_polygon.m
===================================================================
--- /issm/trunk/src/m/kml/kml_polygon.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_polygon.m	(revision 7297)
@@ -183,4 +183,55 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the polygons
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<Polygon id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<Polygon>\n',indent));
+                end
+                sbuf=kml_swrite@kml_geometry(kmli,sbuf,indent);
+                sbuf=add(sbuf,sprintf('%s  <extrude>%d</extrude>\n',indent,kmli.extrude));
+                sbuf=add(sbuf,sprintf('%s  <tessellate>%d</tessellate>\n',indent,kmli.tessellate));
+                sbuf=add(sbuf,sprintf('%s  <altitudeMode>%s</altitudeMode>\n',indent,kmli.altmode));
+                sbuf=add(sbuf,sprintf('%s  <outerBoundaryIs>\n',indent));
+                if isa(kmli.outer,'kml_linearring')
+                    sbuf=kml_swrite(kmli.outer,sbuf,[indent '    ']);
+                else
+                    warning('kml(%d).outer is a ''%s'' class object, not ''%s''.',...
+                        i,class(kmli.outer),'kml_linearring');
+                end
+                sbuf=add(sbuf,sprintf('%s  </outerBoundaryIs>\n',indent));
+
+%  loop over any inner boundaries for each polygon
+
+                if isa(kmli.inner,'kml_linearring')
+                    for j=1:numel(kmli.inner)
+                        sbuf=add(sbuf,sprintf('%s  <innerBoundaryIs>\n',indent));
+                        sbuf=kml_swrite(kmli.inner(j),sbuf,[indent '    ']);
+                        sbuf=add(sbuf,sprintf('%s  </innerBoundaryIs>\n',indent));
+                    end
+                else
+                    warning('kml(%d).inner is a ''%s'' class object, not ''%s''.',...
+                        i,class(kmli.inner),'kml_linearring');
+                end
+
+                sbuf=add(sbuf,sprintf('%s</Polygon>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_polystyle.m
===================================================================
--- /issm/trunk/src/m/kml/kml_polystyle.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_polystyle.m	(revision 7297)
@@ -148,4 +148,32 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the polystyles
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<PolyStyle id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<PolyStyle>\n',indent));
+                end
+                sbuf=kml_swrite@kml_colorstyle(kmli,sbuf,indent);
+                sbuf=add(sbuf,sprintf('%s  <fill>%d</fill>\n',indent,kmli.fill));
+                sbuf=add(sbuf,sprintf('%s  <outline>%d</outline>\n',indent,kmli.outline));
+                sbuf=add(sbuf,sprintf('%s</PolyStyle>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_style.m
===================================================================
--- /issm/trunk/src/m/kml/kml_style.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_style.m	(revision 7297)
@@ -206,4 +206,66 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the styles
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if ~isempty(kmli.id)
+                    sbuf=add(sbuf,sprintf('%s<Style id="%s">\n',indent,kmli.id));
+                else
+                    sbuf=add(sbuf,sprintf('%s<Style>\n',indent));
+                end
+                sbuf=kml_swrite@kml_styleselector(kmli,sbuf,indent);
+%                 if isa(kmli.icon,'kml_iconstyle')
+%                     sbuf=kml_swrite(kmli.icon,sbuf,[indent '  ']);
+%                 else
+%                     warning('kml(%d).icon is a ''%s'' class object, not ''%s''.',...
+%                         i,class(kmli.icon),'kml_iconstyle');
+%                 end
+%                 if isa(kmli.label,'kml_labelstyle')
+%                     sbuf=kml_swrite(kmli.label,sbuf,[indent '  ']);
+%                 else
+%                     warning('kml(%d).label is a ''%s'' class object, not ''%s''.',...
+%                         i,class(kmli.label),'kml_labelstyle');
+%                 end
+                if isa(kmli.line,'kml_linestyle')
+                    sbuf=kml_swrite(kmli.line,sbuf,[indent '  ']);
+                else
+                    warning('kml(%d).line is a ''%s'' class object, not ''%s''.',...
+                        i,class(kmli.line),'kml_linestyle');
+                end
+                if isa(kmli.poly,'kml_polystyle')
+                    sbuf=kml_swrite(kmli.poly,sbuf,[indent '  ']);
+                else
+                    warning('kml(%d).poly is a ''%s'' class object, not ''%s''.',...
+                        i,class(kmli.poly),'kml_polystyle');
+                end
+%                 if isa(kmli.balloon,'kml_balloonstyle')
+%                     sbuf=kml_swrite(kmli.balloon,sbuf,[indent '  ']);
+%                 else
+%                     warning('kml(%d).balloon is a ''%s'' class object, not ''%s''.',...
+%                         i,class(kmli.balloon),'kml_balloonstyle');
+%                 end
+%                 if isa(kmli.list,'kml_liststyle')
+%                     sbuf=kml_swrite(kmli.list,sbuf,[indent '  ']);
+%                 else
+%                     warning('kml(%d).list is a ''%s'' class object, not ''%s''.',...
+%                         i,class(kmli.list),'kml_liststyle');
+%                 end
+                sbuf=add(sbuf,sprintf('%s</Style>\n',indent));
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_styleselector.m
===================================================================
--- /issm/trunk/src/m/kml/kml_styleselector.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_styleselector.m	(revision 7297)
@@ -143,4 +143,34 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the styleselectors
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_styleselector')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!StyleSelector id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!StyleSelector>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_object(kmli,sbuf,indent);
+                if strcmp(class(kml),'kml_styleselector')
+                    sbuf=add(sbuf,sprintf('%s</!StyleSelector>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/kml_substyle.m
===================================================================
--- /issm/trunk/src/m/kml/kml_substyle.m	(revision 7296)
+++ /issm/trunk/src/m/kml/kml_substyle.m	(revision 7297)
@@ -143,4 +143,34 @@
         end
         
+%  string write the object
+
+        function [sbuf]=kml_swrite(kml,sbuf,indent)
+
+           if ~exist('sbuf','var') || isempty(sbuf)
+               sbuf=string_buf;
+           end
+           if ~exist('indent','var') || isempty(indent)
+               indent='';
+           end
+
+%  loop over the substyles
+
+            for i=1:numel(kml)
+                kmli=kml(i);
+                if strcmp(class(kml),'kml_substyle')
+                    if ~isempty(kmli.id)
+                        sbuf=add(sbuf,sprintf('%s<!SubStyle id="%s">\n',indent,kmli.id));
+                    else
+                        sbuf=add(sbuf,sprintf('%s<!SubStyle>\n',indent));
+                    end
+                end
+                sbuf=kml_swrite@kml_object(kmli,sbuf,indent);
+                if strcmp(class(kml),'kml_substyle')
+                    sbuf=add(sbuf,sprintf('%s<!/SubStyle>\n',indent));
+                end
+            end
+
+        end
+        
     end
     
Index: /issm/trunk/src/m/kml/string_buf.m
===================================================================
--- /issm/trunk/src/m/kml/string_buf.m	(revision 7296)
+++ /issm/trunk/src/m/kml/string_buf.m	(revision 7297)
@@ -26,5 +26,5 @@
 %     properties (SetAccess = private, GetAccess = private)
     properties (SetAccess = private)
-        string    =[];
+        string    ='';
         size      =0;
         len       =0;
@@ -173,4 +173,14 @@
         end
         
+%  reset the object
+
+        function [sbuf]=reset(sbuf)
+
+            string    ='';
+            size      =0;
+            len       =0;
+
+        end
+        
     end
     
