Index: grit/format/policy_templates/writers/xml_formatted_writer.py |
=================================================================== |
--- grit/format/policy_templates/writers/xml_formatted_writer.py (revision 202) |
+++ grit/format/policy_templates/writers/xml_formatted_writer.py (working copy) |
@@ -1,91 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
- |
-from grit.format.policy_templates.writers import template_writer |
- |
- |
-class XMLFormattedWriter(template_writer.TemplateWriter): |
- '''Helper class for generating XML-based templates. |
- ''' |
- |
- def AddElement(self, parent, name, attrs=None, text=None): |
- ''' |
- Adds a new XML Element as a child to an existing element or the Document. |
- |
- Args: |
- parent: An XML element or the document, where the new element will be |
- added. |
- name: The name of the new element. |
- attrs: A dictionary of the attributes' names and values for the new |
- element. |
- text: Text content for the new element. |
- |
- Returns: |
- The created new element. |
- ''' |
- if attrs == None: |
- attrs = {} |
- |
- doc = parent.ownerDocument |
- element = doc.createElement(name) |
- for key, value in sorted(attrs.iteritems()): |
- element.setAttribute(key, value) |
- if text: |
- element.appendChild(doc.createTextNode(text)) |
- parent.appendChild(element) |
- return element |
- |
- def AddText(self, parent, text): |
- '''Adds text to a parent node. |
- ''' |
- doc = parent.ownerDocument |
- parent.appendChild(doc.createTextNode(text)) |
- |
- def AddAttribute(self, parent, name, value): |
- '''Adds a new attribute to the parent Element. If an attribute with the |
- given name already exists then it will be replaced. |
- ''' |
- doc = parent.ownerDocument |
- attribute = doc.createAttribute(name) |
- attribute.value = value |
- parent.setAttributeNode(attribute) |
- |
- def AddComment(self, parent, comment): |
- '''Adds a comment node.''' |
- parent.appendChild(parent.ownerDocument.createComment(comment)) |
- |
- def ToPrettyXml(self, doc, **kwargs): |
- # return doc.toprettyxml(indent=' ') |
- # The above pretty-printer does not print the doctype and adds spaces |
- # around texts, e.g.: |
- # <string> |
- # value of the string |
- # </string> |
- # This is problematic both for the OSX Workgroup Manager (plist files) and |
- # the Windows Group Policy Editor (admx files). What they need instead: |
- # <string>value of string</string> |
- # So we use the poor man's pretty printer here. It assumes that there are |
- # no mixed-content nodes. |
- # Get all the XML content in a one-line string. |
- xml = doc.toxml(**kwargs) |
- # Determine where the line breaks will be. (They will only be between tags.) |
- lines = xml[1:len(xml) - 1].split('><') |
- indent = '' |
- res = '' |
- # Determine indent for each line. |
- for i, line in enumerate(lines): |
- if line[0] == '/': |
- # If the current line starts with a closing tag, decrease indent before |
- # printing. |
- indent = indent[2:] |
- lines[i] = indent + '<' + line + '>' |
- if (line[0] not in ['/', '?', '!'] and '</' not in line and |
- line[len(line) - 1] != '/'): |
- # If the current line starts with an opening tag and does not conatin a |
- # closing tag, increase indent after the line is printed. |
- indent += ' ' |
- # Reconstruct XML text from the lines. |
- return '\n'.join(lines) |