X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FKML.py;h=3279c858f29d42c69f7e825529031f89b685f177;hb=b2537c605b2ad0e6b04bf1534d569f91f30f1594;hp=890021da4167d13b0e9f7f56ae984a3c76f50f51;hpb=18b00503e26e51db44a6b3d9b279162f8278b868;p=dead%2Fcensus-tools.git diff --git a/src/KML.py b/src/KML.py index 890021d..3279c85 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 = [] @@ -28,49 +32,56 @@ class KmlObject(object): def to_kml(self): - return self.render() + kml = self.OPEN_TAG + kml += self.render() + kml += self.CLOSE_TAG + "\n" + return kml def render(self): - kml = self.text + kml = escape(self.text) for c in self.children: kml += c.to_kml() - + 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