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

Side by Side Diff: grit/format/policy_templates/writers/xml_formatted_writer.py

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6
7 from grit.format.policy_templates.writers import template_writer
8
9
10 class XMLFormattedWriter(template_writer.TemplateWriter):
11 '''Helper class for generating XML-based templates.
12 '''
13
14 def AddElement(self, parent, name, attrs=None, text=None):
15 '''
16 Adds a new XML Element as a child to an existing element or the Document.
17
18 Args:
19 parent: An XML element or the document, where the new element will be
20 added.
21 name: The name of the new element.
22 attrs: A dictionary of the attributes' names and values for the new
23 element.
24 text: Text content for the new element.
25
26 Returns:
27 The created new element.
28 '''
29 if attrs == None:
30 attrs = {}
31
32 doc = parent.ownerDocument
33 element = doc.createElement(name)
34 for key, value in sorted(attrs.iteritems()):
35 element.setAttribute(key, value)
36 if text:
37 element.appendChild(doc.createTextNode(text))
38 parent.appendChild(element)
39 return element
40
41 def AddText(self, parent, text):
42 '''Adds text to a parent node.
43 '''
44 doc = parent.ownerDocument
45 parent.appendChild(doc.createTextNode(text))
46
47 def AddAttribute(self, parent, name, value):
48 '''Adds a new attribute to the parent Element. If an attribute with the
49 given name already exists then it will be replaced.
50 '''
51 doc = parent.ownerDocument
52 attribute = doc.createAttribute(name)
53 attribute.value = value
54 parent.setAttributeNode(attribute)
55
56 def AddComment(self, parent, comment):
57 '''Adds a comment node.'''
58 parent.appendChild(parent.ownerDocument.createComment(comment))
59
60 def ToPrettyXml(self, doc, **kwargs):
61 # return doc.toprettyxml(indent=' ')
62 # The above pretty-printer does not print the doctype and adds spaces
63 # around texts, e.g.:
64 # <string>
65 # value of the string
66 # </string>
67 # This is problematic both for the OSX Workgroup Manager (plist files) and
68 # the Windows Group Policy Editor (admx files). What they need instead:
69 # <string>value of string</string>
70 # So we use the poor man's pretty printer here. It assumes that there are
71 # no mixed-content nodes.
72 # Get all the XML content in a one-line string.
73 xml = doc.toxml(**kwargs)
74 # Determine where the line breaks will be. (They will only be between tags.)
75 lines = xml[1:len(xml) - 1].split('><')
76 indent = ''
77 res = ''
78 # Determine indent for each line.
79 for i, line in enumerate(lines):
80 if line[0] == '/':
81 # If the current line starts with a closing tag, decrease indent before
82 # printing.
83 indent = indent[2:]
84 lines[i] = indent + '<' + line + '>'
85 if (line[0] not in ['/', '?', '!'] and '</' not in line and
86 line[len(line) - 1] != '/'):
87 # If the current line starts with an opening tag and does not conatin a
88 # closing tag, increase indent after the line is printed.
89 indent += ' '
90 # Reconstruct XML text from the lines.
91 return '\n'.join(lines)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698