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

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

Issue 227073006: Added a policy writer for iOS Plists. (Closed) Base URL: https://chromium.googlesource.com/external/grit-i18n.git@master
Patch Set: rebase Created 6 years, 8 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 unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 6
7 from xml.dom import minidom 7 from xml.dom import minidom
8 from grit import lazy_re 8 from grit import lazy_re
9 from grit.format.policy_templates.writers import xml_formatted_writer 9 from grit.format.policy_templates.writers import xml_formatted_writer
10 10
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 policy: The data structure of a policy. 227 policy: The data structure of a policy.
228 ''' 228 '''
229 examples = self._AddStyledElement(parent, 'dl', ['dd dl']) 229 examples = self._AddStyledElement(parent, 'dl', ['dd dl'])
230 if self.IsPolicySupportedOnPlatform(policy, 'win'): 230 if self.IsPolicySupportedOnPlatform(policy, 'win'):
231 self._AddListExampleWindows(examples, policy) 231 self._AddListExampleWindows(examples, policy)
232 if self.IsPolicySupportedOnPlatform(policy, 'linux'): 232 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
233 self._AddListExampleLinux(examples, policy) 233 self._AddListExampleLinux(examples, policy)
234 if self.IsPolicySupportedOnPlatform(policy, 'mac'): 234 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
235 self._AddListExampleMac(examples, policy) 235 self._AddListExampleMac(examples, policy)
236 236
237 def _PythonDictionaryToMacDictionary(self, dictionary, indent=''): 237 def _PythonObjectToPlist(self, obj, indent=''):
238 '''Converts a python dictionary to an equivalent XML plist. 238 '''Converts a python object to an equivalent XML plist.
239 239
240 Returns a list of lines, with one dictionary entry per line.''' 240 Returns a list of lines.'''
241 result = [indent + '<dict>'] 241 obj_type = type(obj)
242 indent += ' ' 242 if obj_type == bool:
243 for k in sorted(dictionary.keys()): 243 return [ '%s<%s/>' % (indent, 'true' if obj else 'false') ]
244 v = dictionary[k] 244 elif obj_type == int:
245 result.append('%s<key>%s</key>' % (indent, k)) 245 return [ '%s<integer>%s</integer>' % (indent, obj) ]
246 value_type = type(v) 246 elif obj_type == str:
247 if value_type == bool: 247 return [ '%s<string>%s</string>' % (indent, obj) ]
248 result.append('%s<%s/>' % (indent, 'true' if v else 'false')) 248 elif obj_type == list:
249 elif value_type == int: 249 result = [ '%s<array>' % indent ]
250 result.append('%s<integer>%s</integer>' % (indent, v)) 250 for item in obj:
251 elif value_type == str: 251 result += self._PythonObjectToPlist(item, indent + ' ')
252 result.append('%s<string>%s</string>' % (indent, v)) 252 result.append('%s</array>' % indent)
253 elif value_type == dict: 253 return result
254 result += self._PythonDictionaryToMacDictionary(v, indent) 254 elif obj_type == dict:
255 elif value_type == list: 255 result = [ '%s<dict>' % indent ]
256 array = [] 256 for key in sorted(obj.keys()):
257 if len(v) != 0: 257 result.append('%s<key>%s</key>' % (indent + ' ', key))
258 if type(v[0]) == str: 258 result += self._PythonObjectToPlist(obj[key], indent + ' ')
259 array = ['%s <string>%s</string>' % (indent, x) for x in v] 259 result.append('%s</dict>' % indent)
260 elif type(v[0]) == dict: 260 return result
261 for x in v: 261 else:
262 array += self._PythonDictionaryToMacDictionary(x, indent + ' ') 262 raise Exception('Invalid object to convert: %s' % obj)
263 else:
264 raise Exception('Must be list of string or dict.')
265 result.append('%s<array>' % indent)
266 result += array
267 result.append('%s</array>' % indent)
268 else:
269 raise Exception('Invalid example value type %s' % value_type)
270 result.append(indent[2:] + '</dict>')
271 return result
272 263
273 def _AddDictionaryExampleMac(self, parent, policy): 264 def _AddDictionaryExampleMac(self, parent, policy):
274 '''Adds an example value for Mac of a 'dict' policy to a DOM node. 265 '''Adds an example value for Mac of a 'dict' policy to a DOM node.
275 266
276 Args: 267 Args:
277 parent: The DOM node for which the example will be added. 268 parent: The DOM node for which the example will be added.
278 policy: A policy of type 'dict', for which the Mac example value 269 policy: A policy of type 'dict', for which the Mac example value
279 is generated. 270 is generated.
280 ''' 271 '''
281 example_value = policy['example_value'] 272 example_value = policy['example_value']
282 self.AddElement(parent, 'dt', {}, 'Mac:') 273 self.AddElement(parent, 'dt', {}, 'Mac:')
283 mac = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre']) 274 mac = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre'])
284 mac_text = ['<key>%s</key>' % (policy['name'])] 275 mac_text = ['<key>%s</key>' % (policy['name'])]
285 mac_text += self._PythonDictionaryToMacDictionary(example_value) 276 mac_text += self._PythonObjectToPlist(example_value)
286 self.AddText(mac, '\n'.join(mac_text)) 277 self.AddText(mac, '\n'.join(mac_text))
287 278
288 def _AddDictionaryExampleWindows(self, parent, policy): 279 def _AddDictionaryExampleWindows(self, parent, policy):
289 '''Adds an example value for Windows of a 'dict' policy to a DOM node. 280 '''Adds an example value for Windows of a 'dict' policy to a DOM node.
290 281
291 Args: 282 Args:
292 parent: The DOM node for which the example will be added. 283 parent: The DOM node for which the example will be added.
293 policy: A policy of type 'dict', for which the Windows example value 284 policy: A policy of type 'dict', for which the Windows example value
294 is generated. 285 is generated.
295 ''' 286 '''
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 } 673 }
683 674
684 # A simple regexp to search for URLs. It is enough for now. 675 # A simple regexp to search for URLs. It is enough for now.
685 self._url_matcher = lazy_re.compile('(http://[^\\s]*[^\\s\\.])') 676 self._url_matcher = lazy_re.compile('(http://[^\\s]*[^\\s\\.])')
686 677
687 def GetTemplateText(self): 678 def GetTemplateText(self):
688 # Return the text representation of the main <div> tag. 679 # Return the text representation of the main <div> tag.
689 return self._main_div.toxml() 680 return self._main_div.toxml()
690 # To get a complete HTML file, use the following. 681 # To get a complete HTML file, use the following.
691 # return self._doc.toxml() 682 # return self._doc.toxml()
OLDNEW
« no previous file with comments | « grit/format/policy_templates/writers/admx_writer_unittest.py ('k') | grit/format/policy_templates/writers/json_writer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698