def __init__(self, handle, encoding): self.writer = XmlWriter(handle, encoding=encoding) self.indent = 0
def __init__(self, handle, encoding): self.writer = XmlWriter(handle, encoding = encoding) self.indent = 0
class PrettyWriter(object): '''Handle low-level details of writing pretty indented xml.''' def __init__(self, handle, encoding): self.writer = XmlWriter(handle, encoding=encoding) self.indent = 0 def start_document(self): '''Start the document.''' self.writer.startDocument() def end_document(self): '''End the document.''' self.writer.endDocument() def start_element(self, name, attributes): '''Start an element with children.''' self.tab() self.writer.startElement(name, attributes) self.newline() self.indent += 2 def end_element(self, name): '''End an element with children.''' self.indent -= 2 self.tab() self.writer.endElement(name) self.newline() def text_element(self, name, attributes, text): '''Start and end an element with no element children.''' self.tab() self.writer.startElement(name, attributes) for evil_char in '<&>': if evil_char in text: # we wish this wasn't buggy. We have to work around. #self.writer.handle_cdata(text) self.writer._check_pending_content() self.writer._write('<![CDATA[%s]]>' % text) break else: self.writer.characters(text, 0, len(text)) self.writer.endElement(name) self.newline() def pi(self, target, text): '''Handle inserting a processing instruction.''' self.tab() self.writer.processingInstruction(target, text) self.newline() def comment(self, text): '''Insert a comment.''' self.tab() # work around the python xml writer weirdness save_packing = self.writer._packing self.writer._packing = 0 self.writer.comment(text, 0, len(text)) self.writer._packing = save_packing # self.newline() def tab(self): '''Insert whitespace characters representing an indentation.''' self.writer.characters(self.indent * ' ', 0, self.indent) def newline(self): '''Insert a \\n to end a line.''' self.writer.characters('\n', 0, 1)
class PrettyWriter(object): '''Handle low-level details of writing pretty indented xml.''' def __init__(self, handle, encoding): self.writer = XmlWriter(handle, encoding = encoding) self.indent = 0 def start_document(self): '''Start the document.''' self.writer.startDocument() def end_document(self): '''End the document.''' self.writer.endDocument() def start_element(self, name, attributes): '''Start an element with children.''' self.tab() self.writer.startElement(name, attributes) self.newline() self.indent += 2 def end_element(self, name): '''End an element with children.''' self.indent -= 2 self.tab() self.writer.endElement(name) self.newline() def text_element(self, name, attributes, text): '''Start and end an element with no element children.''' self.tab() self.writer.startElement(name, attributes) for evil_char in '<&>': if evil_char in text: # we wish this wasn't buggy. We have to work around. #self.writer.handle_cdata(text) self.writer._check_pending_content() self.writer._write('<![CDATA[%s]]>' % text) break else: self.writer.characters(text, 0, len(text)) self.writer.endElement(name) self.newline() def pi(self, target, text): '''Handle inserting a processing instruction.''' self.tab() self.writer.processingInstruction(target, text) self.newline() def comment(self, text): '''Insert a comment.''' self.tab() # work around the python xml writer weirdness save_packing = self.writer._packing self.writer._packing = 0 self.writer.comment(text, 0, len(text)) self.writer._packing = save_packing # self.newline() def tab(self): '''Insert whitespace characters representing an indentation.''' self.writer.characters(self.indent * ' ', 0, self.indent) def newline(self): '''Insert a \\n to end a line.''' self.writer.characters('\n', 0, 1)