X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FKML.py;h=f96adb26272c56563ced80ef3636623e024db173;hb=ac32d9ecd4b797379528b5cb901003ba34d8f1c1;hp=890021da4167d13b0e9f7f56ae984a3c76f50f51;hpb=18b00503e26e51db44a6b3d9b279162f8278b868;p=dead%2Fcensus-tools.git
diff --git a/src/KML.py b/src/KML.py
index 890021d..f96adb2 100644
--- a/src/KML.py
+++ b/src/KML.py
@@ -3,6 +3,7 @@ Utility classes for working with the Keyhole Markup Language (KML).
"""
import sys
+from xml.sax.saxutils import escape
class KmlObject(object):
@@ -21,6 +22,9 @@ class KmlObject(object):
generate a closing tag. A call to render() generally returns the
element's text, and renders its children recursively.
"""
+
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
def __init__(self, initial_text=''):
self.children = []
@@ -32,45 +36,52 @@ class KmlObject(object):
def render(self):
- kml = self.text
+ kml = self.OPEN_TAG
+ kml += escape(self.text)
for c in self.children:
kml += c.to_kml()
+ kml += self.CLOSE_TAG + "\n"
+
return kml
+ def print_kml(self):
+ print self.OPEN_TAG
+ self.render_to_stdout()
+ print self.CLOSE_TAG
+
+
+ def render_to_stdout(self):
+ if (len(self.text) > 0):
+ print escape(self.text)
+
+ for c in self.children:
+ c.print_kml()
+
+
class Color(KmlObject):
- def to_kml(self):
- kml = ''
- kml += self.render()
- kml += "\n"
- return kml
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
-
class Document(KmlObject):
+
+ OPEN_TAG = """
+
+"""
+
+ CLOSE_TAG = """
+ """
def __init__(self, initial_text=''):
super(Document, self).__init__(initial_text)
self.styles = []
- def to_kml(self):
- kml = "\n"
- kml += "\n"
- kml += "\n"
-
- kml += self.render()
-
- kml += "\n"
- kml += "\n"
-
- return kml
-
-
def render(self):
kml = ''
@@ -83,78 +94,81 @@ class Document(KmlObject):
return kml
+ def render_to_stdout(self):
+ for s in self.styles:
+ s.print_kml()
+
+ for c in self.children:
+ c.print_kml()
+
+
class Description(KmlObject):
- def to_kml(self):
- kml = ''
- kml += self.render()
- kml += "\n"
- return kml
-
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
+
class Name(KmlObject):
- def to_kml(self):
- kml = ''
- kml += self.render()
- kml += "\n"
- return kml
-
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
+
class Placemark(KmlObject):
-
- def to_kml(self):
- kml = "\n"
- kml += self.render()
- kml += "\n"
- return kml
-
-
+
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
+
+
class PolyStyle(KmlObject):
-
- def to_kml(self):
- kml = "\n"
- kml += self.render()
- kml += "\n"
- return kml
-
+
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
+
class Style(KmlObject):
-
- def __init__(self, initial_text='', initial_id=None):
+
+ OPEN_TAG = "'
+
+ def __init__(self, initial_text='', initial_id=''):
super(Style, self).__init__(initial_text)
self.id = initial_id
def to_kml(self):
kml = ''
-
- if (self.id == None):
- kml += "\n"
+ kml += self.CLOSE_TAG + "\n"
return kml
+ def print_kml(self):
+ print (self.OPEN_TAG % self.id)
+ self.render_to_stdout()
+ print self.CLOSE_TAG
-class StyleUrl(KmlObject):
-
- def to_kml(self):
- kml = ''
- kml += self.render()
- kml += "\n"
- return kml
+
+class StyleUrl(KmlObject):
+
+ OPEN_TAG = ''
+ CLOSE_TAG = ''
+
class RawText(KmlObject):
- pass
+
+ def to_kml(self):
+ return self.text
+
+ def print_kml(self):
+ if (len(self.text) > 0):
+ print self.text