Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Unified Diff: grit/format/policy_templates/writers/xml_formatted_writer.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: grit/format/policy_templates/writers/xml_formatted_writer.py
===================================================================
--- grit/format/policy_templates/writers/xml_formatted_writer.py (revision 0)
+++ grit/format/policy_templates/writers/xml_formatted_writer.py (revision 0)
@@ -0,0 +1,88 @@
+# Copyright (c) 2011 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 xml.dom import minidom
+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 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 ToPrettyXml(self, doc):
+ # 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()
+ # 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 in range(len(lines)):
+ line = lines[i]
+ 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)
Property changes on: grit/format/policy_templates/writers/xml_formatted_writer.py
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698