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

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

Issue 91233003: Improve platform support indications for policy documentation. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 7 years 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
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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 <string>Shockwave Flash</string> 220 <string>Shockwave Flash</string>
221 </array> 221 </array>
222 </dd> 222 </dd>
223 </dl> 223 </dl>
224 224
225 Args: 225 Args:
226 parent: The DOM node for which the example will be added. 226 parent: The DOM node for which the example will be added.
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 self._AddListExampleWindows(examples, policy) 230 if self.IsPolicySupportedOnPlatform(policy, 'win'):
231 self._AddListExampleLinux(examples, policy) 231 self._AddListExampleWindows(examples, policy)
232 self._AddListExampleMac(examples, policy) 232 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
233 self._AddListExampleLinux(examples, policy)
234 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
235 self._AddListExampleMac(examples, policy)
233 236
234 def _PythonDictionaryToMacDictionary(self, dictionary, indent=''): 237 def _PythonDictionaryToMacDictionary(self, dictionary, indent=''):
235 '''Converts a python dictionary to an equivalent XML plist. 238 '''Converts a python dictionary to an equivalent XML plist.
236 239
237 Returns a list of lines, with one dictionary entry per line.''' 240 Returns a list of lines, with one dictionary entry per line.'''
238 result = [indent + '<dict>'] 241 result = [indent + '<dict>']
239 indent += ' ' 242 indent += ' '
240 for k in sorted(dictionary.keys()): 243 for k in sorted(dictionary.keys()):
241 v = dictionary[k] 244 v = dictionary[k]
242 result.append('%s<key>%s</key>' % (indent, k)) 245 result.append('%s<key>%s</key>' % (indent, k))
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 <string>direct</string> 332 <string>direct</string>
330 </dict> 333 </dict>
331 </dd> 334 </dd>
332 </dl> 335 </dl>
333 336
334 Args: 337 Args:
335 parent: The DOM node for which the example will be added. 338 parent: The DOM node for which the example will be added.
336 policy: The data structure of a policy. 339 policy: The data structure of a policy.
337 ''' 340 '''
338 examples = self._AddStyledElement(parent, 'dl', ['dd dl']) 341 examples = self._AddStyledElement(parent, 'dl', ['dd dl'])
339 self._AddDictionaryExampleWindows(examples, policy) 342 if self.IsPolicySupportedOnPlatform(policy, 'win'):
340 self._AddDictionaryExampleLinux(examples, policy) 343 self._AddDictionaryExampleWindows(examples, policy)
341 self._AddDictionaryExampleMac(examples, policy) 344 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
345 self._AddDictionaryExampleLinux(examples, policy)
346 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
347 self._AddDictionaryExampleMac(examples, policy)
342 348
343 def _AddExample(self, parent, policy): 349 def _AddExample(self, parent, policy):
344 '''Adds the HTML DOM representation of the example value of a policy to 350 '''Adds the HTML DOM representation of the example value of a policy to
345 a DOM node. It is simple text for boolean policies, like 351 a DOM node. It is simple text for boolean policies, like
346 '0x00000001 (Windows), true (Linux), <true /> (Mac)' in case of boolean 352 '0x00000001 (Windows), true (Linux), <true /> (Mac)' in case of boolean
347 policies, but it may also contain other HTML elements. (See method 353 policies, but it may also contain other HTML elements. (See method
348 _AddListExample.) 354 _AddListExample.)
349 355
350 Args: 356 Args:
351 parent: The DOM node for which the example will be added. 357 parent: The DOM node for which the example will be added.
352 policy: The data structure of a policy. 358 policy: The data structure of a policy.
353 359
354 Raises: 360 Raises:
355 Exception: If the type of the policy is unknown or the example value 361 Exception: If the type of the policy is unknown or the example value
356 of the policy is out of its expected range. 362 of the policy is out of its expected range.
357 ''' 363 '''
358 example_value = policy['example_value'] 364 example_value = policy['example_value']
359 policy_type = policy['type'] 365 policy_type = policy['type']
360 if policy_type == 'main': 366 if policy_type == 'main':
361 if example_value == True: 367 pieces = []
362 self.AddText( 368 if self.IsPolicySupportedOnPlatform(policy, 'win'):
363 parent, '0x00000001 (Windows), true (Linux), <true /> (Mac)') 369 value = '0x00000001' if example_value else '0x00000000'
364 elif example_value == False: 370 pieces.append(value + ' (Windows)')
365 self.AddText( 371 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
366 parent, '0x00000000 (Windows), false (Linux), <false /> (Mac)') 372 value = 'true' if example_value else 'false'
367 else: 373 pieces.append(value + ' (Linux)')
368 raise Exception('Expected boolean value.') 374 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
375 value = '<true />' if example_value else '<false />'
376 pieces.append(value + ' (Mac)')
377 self.AddText(parent, ', '.join(pieces))
369 elif policy_type == 'string': 378 elif policy_type == 'string':
370 self.AddText(parent, '"%s"' % example_value) 379 self.AddText(parent, '"%s"' % example_value)
371 elif policy_type in ('int', 'int-enum'): 380 elif policy_type in ('int', 'int-enum'):
372 self.AddText( 381 pieces = []
373 parent, 382 if self.IsPolicySupportedOnPlatform(policy, 'win'):
374 '0x%08x (Windows), %d (Linux/Mac)' % (example_value, example_value)) 383 pieces.append('0x%08x (Windows)' % example_value)
384 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
385 pieces.append('%d (Linux)' % example_value)
386 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
387 pieces.append('%d (Mac)' % example_value)
388 self.AddText(parent, ', '.join(pieces))
375 elif policy_type == 'string-enum': 389 elif policy_type == 'string-enum':
376 self.AddText(parent, '"%s"' % (example_value)) 390 self.AddText(parent, '"%s"' % (example_value))
377 elif policy_type == 'list': 391 elif policy_type == 'list':
378 self._AddListExample(parent, policy) 392 self._AddListExample(parent, policy)
379 elif policy_type == 'dict': 393 elif policy_type == 'dict':
380 self._AddDictionaryExample(parent, policy) 394 self._AddDictionaryExample(parent, policy)
381 else: 395 else:
382 raise Exception('Unknown policy type: ' + policy_type) 396 raise Exception('Unknown policy type: ' + policy_type)
383 397
384 def _AddPolicyAttribute(self, dl, term_id, 398 def _AddPolicyAttribute(self, dl, term_id,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 <dt>Attribute:</dt><dd>Description</dd> 452 <dt>Attribute:</dt><dd>Description</dd>
439 ... 453 ...
440 </dl> 454 </dl>
441 455
442 Args: 456 Args:
443 parent: A DOM element for which the list will be added. 457 parent: A DOM element for which the list will be added.
444 policy: The data structure of the policy. 458 policy: The data structure of the policy.
445 ''' 459 '''
446 460
447 dl = self.AddElement(parent, 'dl') 461 dl = self.AddElement(parent, 'dl')
448 self._AddPolicyAttribute( 462 data_type = self._TYPE_MAP[policy['type']]
449 dl, 463 if (self.IsPolicySupportedOnPlatform(policy, 'win') and
450 'data_type', 464 self._REG_TYPE_MAP.get(policy['type'], None)):
451 self._TYPE_MAP[policy['type']]) 465 data_type += ' (%s)' % self._REG_TYPE_MAP[policy['type']]
452 self._AddPolicyAttribute( 466 self._AddPolicyAttribute(dl, 'data_type', data_type)
453 dl, 467 if self.IsPolicySupportedOnPlatform(policy, 'win'):
454 'win_reg_loc', 468 self._AddPolicyAttribute(
455 self.config['win_reg_mandatory_key_name'] + '\\' + policy['name'], 469 dl,
456 ['.monospace']) 470 'win_reg_loc',
457 self._AddPolicyAttribute( 471 self.config['win_reg_mandatory_key_name'] + '\\' + policy['name'],
458 dl, 472 ['.monospace'])
459 'mac_linux_pref_name', 473 if (self.IsPolicySupportedOnPlatform(policy, 'linux') or
460 policy['name'], 474 self.IsPolicySupportedOnPlatform(policy, 'mac')):
461 ['.monospace']) 475 self._AddPolicyAttribute(
476 dl,
477 'mac_linux_pref_name',
478 policy['name'],
479 ['.monospace'])
462 dd = self._AddPolicyAttribute(dl, 'supported_on') 480 dd = self._AddPolicyAttribute(dl, 'supported_on')
463 self._AddSupportedOnList(dd, policy['supported_on']) 481 self._AddSupportedOnList(dd, policy['supported_on'])
464 dd = self._AddPolicyAttribute(dl, 'supported_features') 482 dd = self._AddPolicyAttribute(dl, 'supported_features')
465 self._AddFeatures(dd, policy) 483 self._AddFeatures(dd, policy)
466 dd = self._AddPolicyAttribute(dl, 'description') 484 dd = self._AddPolicyAttribute(dl, 'description')
467 self._AddDescription(dd, policy) 485 self._AddDescription(dd, policy)
468 dd = self._AddPolicyAttribute(dl, 'example_value') 486 if (self.IsPolicySupportedOnPlatform(policy, 'win') or
469 self._AddExample(dd, policy) 487 self.IsPolicySupportedOnPlatform(policy, 'linux') or
488 self.IsPolicySupportedOnPlatform(policy, 'mac')):
489 # Don't add an example for ChromeOS-only policies.
490 dd = self._AddPolicyAttribute(dl, 'example_value')
491 self._AddExample(dd, policy)
470 492
471 def _AddPolicyNote(self, parent, policy): 493 def _AddPolicyNote(self, parent, policy):
472 '''If a policy has an additional web page assigned with it, then add 494 '''If a policy has an additional web page assigned with it, then add
473 a link for that page. 495 a link for that page.
474 496
475 Args: 497 Args:
476 policy: The data structure of the policy. 498 policy: The data structure of the policy.
477 ''' 499 '''
478 if 'problem_href' not in policy: 500 if 'problem_href' not in policy:
479 return 501 return
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 'chrome_os': self.config['os_name'], 630 'chrome_os': self.config['os_name'],
609 } 631 }
610 # Human-readable names of supported features. Each supported feature has 632 # Human-readable names of supported features. Each supported feature has
611 # a 'doc_feature_X' entry in |self.messages|. 633 # a 'doc_feature_X' entry in |self.messages|.
612 self._FEATURE_MAP = {} 634 self._FEATURE_MAP = {}
613 for message in self.messages: 635 for message in self.messages:
614 if message.startswith('doc_feature_'): 636 if message.startswith('doc_feature_'):
615 self._FEATURE_MAP[message[12:]] = self.messages[message]['text'] 637 self._FEATURE_MAP[message[12:]] = self.messages[message]['text']
616 # Human-readable names of types. 638 # Human-readable names of types.
617 self._TYPE_MAP = { 639 self._TYPE_MAP = {
618 'string': 'String (REG_SZ)', 640 'string': 'String',
619 'int': 'Integer (REG_DWORD)', 641 'int': 'Integer',
620 'main': 'Boolean (REG_DWORD)', 642 'main': 'Boolean',
621 'int-enum': 'Integer (REG_DWORD)', 643 'int-enum': 'Integer',
622 'string-enum': 'String (REG_SZ)', 644 'string-enum': 'String',
623 'list': 'List of strings', 645 'list': 'List of strings',
624 'dict': 'Dictionary (REG_SZ, encoded as a JSON string)', 646 'dict': 'Dictionary',
647 }
648 self._REG_TYPE_MAP = {
649 'string': 'REG_SZ',
650 'int': 'REG_DWORD',
651 'main': 'REG_DWORD',
652 'int-enum': 'REG_DWORD',
653 'string-enum': 'REG_SZ',
654 'dict': 'REG_SZ, encoded as a JSON string',
625 } 655 }
626 # The CSS style-sheet used for the document. It will be used in Google 656 # The CSS style-sheet used for the document. It will be used in Google
627 # Sites, which strips class attributes from HTML tags. To work around this, 657 # Sites, which strips class attributes from HTML tags. To work around this,
628 # the style-sheet is a dictionary and the style attributes will be added 658 # the style-sheet is a dictionary and the style attributes will be added
629 # "by hand" for each element. 659 # "by hand" for each element.
630 self._STYLE = { 660 self._STYLE = {
631 'table': 'border-style: none; border-collapse: collapse;', 661 'table': 'border-style: none; border-collapse: collapse;',
632 'tr': 'height: 0px;', 662 'tr': 'height: 0px;',
633 'td': 'border: 1px dotted rgb(170, 170, 170); padding: 7px; ' 663 'td': 'border: 1px dotted rgb(170, 170, 170); padding: 7px; '
634 'vertical-align: top; width: 236px; height: 15px;', 664 'vertical-align: top; width: 236px; height: 15px;',
(...skipping 10 matching lines...) Expand all
645 } 675 }
646 676
647 # A simple regexp to search for URLs. It is enough for now. 677 # A simple regexp to search for URLs. It is enough for now.
648 self._url_matcher = lazy_re.compile('(http://[^\\s]*[^\\s\\.])') 678 self._url_matcher = lazy_re.compile('(http://[^\\s]*[^\\s\\.])')
649 679
650 def GetTemplateText(self): 680 def GetTemplateText(self):
651 # Return the text representation of the main <div> tag. 681 # Return the text representation of the main <div> tag.
652 return self._main_div.toxml() 682 return self._main_div.toxml()
653 # To get a complete HTML file, use the following. 683 # To get a complete HTML file, use the following.
654 # return self._doc.toxml() 684 # return self._doc.toxml()
OLDNEW
« no previous file with comments | « grit/format/policy_templates/policy_template_generator.py ('k') | grit/format/policy_templates/writers/doc_writer_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698