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

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

Issue 865563002: Add a Policy template writer that generates Android resources which can be exposed through Android'… (Closed) Base URL: https://chromium.googlesource.com/external/grit-i18n.git@master
Patch Set: Rebase on r186 Created 5 years, 9 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 import json 7 import json
8 from xml.dom import minidom 8 from xml.dom import minidom
9 from grit import lazy_re 9 from grit import lazy_re
10 from grit.format.policy_templates.writers import xml_formatted_writer 10 from grit.format.policy_templates.writers import xml_formatted_writer
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 key_name = self.config['win_reg_recommended_key_name'] 200 key_name = self.config['win_reg_recommended_key_name']
201 else: 201 else:
202 key_name = self.config['win_reg_mandatory_key_name'] 202 key_name = self.config['win_reg_mandatory_key_name']
203 for item in example_value: 203 for item in example_value:
204 win_text.append( 204 win_text.append(
205 '%s\\%s\\%d = "%s"' % 205 '%s\\%s\\%d = "%s"' %
206 (key_name, policy['name'], cnt, item)) 206 (key_name, policy['name'], cnt, item))
207 cnt = cnt + 1 207 cnt = cnt + 1
208 self.AddText(win, '\n'.join(win_text)) 208 self.AddText(win, '\n'.join(win_text))
209 209
210 def _AddListExampleLinux(self, parent, policy): 210 def _AddListExampleAndroidLinux(self, parent, policy):
211 '''Adds an example value for Linux of a 'list' policy to a DOM node. 211 '''Adds an example value for Android/Linux of a 'list' policy to a DOM node.
212 212
213 Args: 213 Args:
214 parent: The DOM node for which the example will be added. 214 parent: The DOM node for which the example will be added.
215 policy: A policy of type 'list', for which the Linux example value 215 policy: A policy of type 'list', for which the Android/Linux example value
216 is generated. 216 is generated.
217 ''' 217 '''
218 example_value = policy['example_value'] 218 example_value = policy['example_value']
219 self.AddElement(parent, 'dt', {}, 'Linux:') 219 self.AddElement(parent, 'dt', {}, 'Android/Linux:')
220 linux = self._AddStyledElement(parent, 'dd', ['.monospace']) 220 element = self._AddStyledElement(parent, 'dd', ['.monospace'])
221 linux_text = [] 221 text = []
222 for item in example_value: 222 for item in example_value:
223 linux_text.append('"%s"' % item) 223 text.append('"%s"' % item)
224 self.AddText(linux, '[%s]' % ', '.join(linux_text)) 224 self.AddText(element, '[%s]' % ', '.join(text))
225 225
226 def _AddListExample(self, parent, policy): 226 def _AddListExample(self, parent, policy):
227 '''Adds the example value of a 'list' policy to a DOM node. Example output: 227 '''Adds the example value of a 'list' policy to a DOM node. Example output:
228 <dl> 228 <dl>
229 <dt>Windows:</dt> 229 <dt>Windows:</dt>
230 <dd> 230 <dd>
231 Software\Policies\Chromium\DisabledPlugins\0 = "Java" 231 Software\Policies\Chromium\DisabledPlugins\0 = "Java"
232 Software\Policies\Chromium\DisabledPlugins\1 = "Shockwave Flash" 232 Software\Policies\Chromium\DisabledPlugins\1 = "Shockwave Flash"
233 </dd> 233 </dd>
234 <dt>Linux:</dt> 234 <dt>Android/Linux:</dt>
235 <dd>["Java", "Shockwave Flash"]</dd> 235 <dd>["Java", "Shockwave Flash"]</dd>
236 <dt>Mac:</dt> 236 <dt>Mac:</dt>
237 <dd> 237 <dd>
238 <array> 238 <array>
239 <string>Java</string> 239 <string>Java</string>
240 <string>Shockwave Flash</string> 240 <string>Shockwave Flash</string>
241 </array> 241 </array>
242 </dd> 242 </dd>
243 </dl> 243 </dl>
244 244
245 Args: 245 Args:
246 parent: The DOM node for which the example will be added. 246 parent: The DOM node for which the example will be added.
247 policy: The data structure of a policy. 247 policy: The data structure of a policy.
248 ''' 248 '''
249 examples = self._AddStyledElement(parent, 'dl', ['dd dl']) 249 examples = self._AddStyledElement(parent, 'dl', ['dd dl'])
250 if self.IsPolicySupportedOnPlatform(policy, 'win'): 250 if self.IsPolicySupportedOnPlatform(policy, 'win'):
251 self._AddListExampleWindows(examples, policy) 251 self._AddListExampleWindows(examples, policy)
252 if self.IsPolicySupportedOnPlatform(policy, 'linux'): 252 if (self.IsPolicySupportedOnPlatform(policy, 'android') or
253 self._AddListExampleLinux(examples, policy) 253 self.IsPolicySupportedOnPlatform(policy, 'linux')):
254 self._AddListExampleAndroidLinux(examples, policy)
254 if self.IsPolicySupportedOnPlatform(policy, 'mac'): 255 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
255 self._AddListExampleMac(examples, policy) 256 self._AddListExampleMac(examples, policy)
256 257
257 def _PythonObjectToPlist(self, obj, indent=''): 258 def _PythonObjectToPlist(self, obj, indent=''):
258 '''Converts a python object to an equivalent XML plist. 259 '''Converts a python object to an equivalent XML plist.
259 260
260 Returns a list of lines.''' 261 Returns a list of lines.'''
261 obj_type = type(obj) 262 obj_type = type(obj)
262 if obj_type == bool: 263 if obj_type == bool:
263 return [ '%s<%s/>' % (indent, 'true' if obj else 'false') ] 264 return [ '%s<%s/>' % (indent, 'true' if obj else 'false') ]
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 ''' 307 '''
307 self.AddElement(parent, 'dt', {}, 'Windows:') 308 self.AddElement(parent, 'dt', {}, 'Windows:')
308 win = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre']) 309 win = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre'])
309 if self.CanBeRecommended(policy) and not self.CanBeMandatory(policy): 310 if self.CanBeRecommended(policy) and not self.CanBeMandatory(policy):
310 key_name = self.config['win_reg_recommended_key_name'] 311 key_name = self.config['win_reg_recommended_key_name']
311 else: 312 else:
312 key_name = self.config['win_reg_mandatory_key_name'] 313 key_name = self.config['win_reg_mandatory_key_name']
313 example = json.dumps(policy['example_value']) 314 example = json.dumps(policy['example_value'])
314 self.AddText(win, '%s\\%s = %s' % (key_name, policy['name'], example)) 315 self.AddText(win, '%s\\%s = %s' % (key_name, policy['name'], example))
315 316
316 def _AddDictionaryExampleLinux(self, parent, policy): 317 def _AddDictionaryExampleAndroidLinux(self, parent, policy):
317 '''Adds an example value for Linux of a 'dict' policy to a DOM node. 318 '''Adds an example value for Android/Linux of a 'dict' policy to a DOM node.
318 319
319 Args: 320 Args:
320 parent: The DOM node for which the example will be added. 321 parent: The DOM node for which the example will be added.
321 policy: A policy of type 'dict', for which the Linux example value 322 policy: A policy of type 'dict', for which the Android/Linux example value
322 is generated. 323 is generated.
323 ''' 324 '''
324 self.AddElement(parent, 'dt', {}, 'Linux:') 325 self.AddElement(parent, 'dt', {}, 'Android/Linux:')
325 linux = self._AddStyledElement(parent, 'dd', ['.monospace']) 326 element = self._AddStyledElement(parent, 'dd', ['.monospace'])
326 example = json.dumps(policy['example_value']) 327 example = json.dumps(policy['example_value'])
327 self.AddText(linux, '%s: %s' % (policy['name'], example)) 328 self.AddText(element, '%s: %s' % (policy['name'], example))
328 329
329 def _AddDictionaryExample(self, parent, policy): 330 def _AddDictionaryExample(self, parent, policy):
330 '''Adds the example value of a 'dict' policy to a DOM node. Example output: 331 '''Adds the example value of a 'dict' policy to a DOM node. Example output:
331 <dl> 332 <dl>
332 <dt>Windows:</dt> 333 <dt>Windows:</dt>
333 <dd> 334 <dd>
334 Software\Policies\Chromium\ProxySettings = "{ 'ProxyMode': 'direct' }" 335 Software\Policies\Chromium\ProxySettings = "{ 'ProxyMode': 'direct' }"
335 </dd> 336 </dd>
336 <dt>Linux:</dt> 337 <dt>Android/Linux:</dt>
337 <dd>"ProxySettings": { 338 <dd>"ProxySettings": {
338 "ProxyMode": "direct" 339 "ProxyMode": "direct"
339 } 340 }
340 </dd> 341 </dd>
341 <dt>Mac:</dt> 342 <dt>Mac:</dt>
342 <dd> 343 <dd>
343 <key>ProxySettings</key> 344 <key>ProxySettings</key>
344 <dict> 345 <dict>
345 <key>ProxyMode</key> 346 <key>ProxyMode</key>
346 <string>direct</string> 347 <string>direct</string>
347 </dict> 348 </dict>
348 </dd> 349 </dd>
349 </dl> 350 </dl>
350 351
351 Args: 352 Args:
352 parent: The DOM node for which the example will be added. 353 parent: The DOM node for which the example will be added.
353 policy: The data structure of a policy. 354 policy: The data structure of a policy.
354 ''' 355 '''
355 examples = self._AddStyledElement(parent, 'dl', ['dd dl']) 356 examples = self._AddStyledElement(parent, 'dl', ['dd dl'])
356 if self.IsPolicySupportedOnPlatform(policy, 'win'): 357 if self.IsPolicySupportedOnPlatform(policy, 'win'):
357 self._AddDictionaryExampleWindows(examples, policy) 358 self._AddDictionaryExampleWindows(examples, policy)
358 if self.IsPolicySupportedOnPlatform(policy, 'linux'): 359 if (self.IsPolicySupportedOnPlatform(policy, 'android') or
359 self._AddDictionaryExampleLinux(examples, policy) 360 self.IsPolicySupportedOnPlatform(policy, 'linux')):
361 self._AddDictionaryExampleAndroidLinux(examples, policy)
360 if self.IsPolicySupportedOnPlatform(policy, 'mac'): 362 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
361 self._AddDictionaryExampleMac(examples, policy) 363 self._AddDictionaryExampleMac(examples, policy)
362 364
363 def _AddExample(self, parent, policy): 365 def _AddExample(self, parent, policy):
364 '''Adds the HTML DOM representation of the example value of a policy to 366 '''Adds the HTML DOM representation of the example value of a policy to
365 a DOM node. It is simple text for boolean policies, like 367 a DOM node. It is simple text for boolean policies, like
366 '0x00000001 (Windows), true (Linux), <true /> (Mac)' in case of boolean 368 '0x00000001 (Windows), true (Linux), true (Android), <true /> (Mac)'
367 policies, but it may also contain other HTML elements. (See method 369 in case of boolean policies, but it may also contain other HTML elements.
368 _AddListExample.) 370 (See method _AddListExample.)
369 371
370 Args: 372 Args:
371 parent: The DOM node for which the example will be added. 373 parent: The DOM node for which the example will be added.
372 policy: The data structure of a policy. 374 policy: The data structure of a policy.
373 375
374 Raises: 376 Raises:
375 Exception: If the type of the policy is unknown or the example value 377 Exception: If the type of the policy is unknown or the example value
376 of the policy is out of its expected range. 378 of the policy is out of its expected range.
377 ''' 379 '''
378 example_value = policy['example_value'] 380 example_value = policy['example_value']
379 policy_type = policy['type'] 381 policy_type = policy['type']
380 if policy_type == 'main': 382 if policy_type == 'main':
381 pieces = [] 383 pieces = []
382 if self.IsPolicySupportedOnPlatform(policy, 'win'): 384 if self.IsPolicySupportedOnPlatform(policy, 'win'):
383 value = '0x00000001' if example_value else '0x00000000' 385 value = '0x00000001' if example_value else '0x00000000'
384 pieces.append(value + ' (Windows)') 386 pieces.append(value + ' (Windows)')
385 if self.IsPolicySupportedOnPlatform(policy, 'linux'): 387 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
386 value = 'true' if example_value else 'false' 388 value = 'true' if example_value else 'false'
387 pieces.append(value + ' (Linux)') 389 pieces.append(value + ' (Linux)')
390 if self.IsPolicySupportedOnPlatform(policy, 'android'):
391 value = 'true' if example_value else 'false'
392 pieces.append(value + ' (Android)')
388 if self.IsPolicySupportedOnPlatform(policy, 'mac'): 393 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
389 value = '<true />' if example_value else '<false />' 394 value = '<true />' if example_value else '<false />'
390 pieces.append(value + ' (Mac)') 395 pieces.append(value + ' (Mac)')
391 self.AddText(parent, ', '.join(pieces)) 396 self.AddText(parent, ', '.join(pieces))
392 elif policy_type == 'string': 397 elif policy_type == 'string':
393 self.AddText(parent, '"%s"' % example_value) 398 self.AddText(parent, '"%s"' % example_value)
394 elif policy_type in ('int', 'int-enum'): 399 elif policy_type in ('int', 'int-enum'):
395 pieces = [] 400 pieces = []
396 if self.IsPolicySupportedOnPlatform(policy, 'win'): 401 if self.IsPolicySupportedOnPlatform(policy, 'win'):
397 pieces.append('0x%08x (Windows)' % example_value) 402 pieces.append('0x%08x (Windows)' % example_value)
398 if self.IsPolicySupportedOnPlatform(policy, 'linux'): 403 if self.IsPolicySupportedOnPlatform(policy, 'linux'):
399 pieces.append('%d (Linux)' % example_value) 404 pieces.append('%d (Linux)' % example_value)
405 if self.IsPolicySupportedOnPlatform(policy, 'android'):
406 pieces.append('%d (Android)' % example_value)
400 if self.IsPolicySupportedOnPlatform(policy, 'mac'): 407 if self.IsPolicySupportedOnPlatform(policy, 'mac'):
401 pieces.append('%d (Mac)' % example_value) 408 pieces.append('%d (Mac)' % example_value)
402 self.AddText(parent, ', '.join(pieces)) 409 self.AddText(parent, ', '.join(pieces))
403 elif policy_type == 'string-enum': 410 elif policy_type == 'string-enum':
404 self.AddText(parent, '"%s"' % (example_value)) 411 self.AddText(parent, '"%s"' % (example_value))
405 elif policy_type in ('list', 'string-enum-list'): 412 elif policy_type in ('list', 'string-enum-list'):
406 self._AddListExample(parent, policy) 413 self._AddListExample(parent, policy)
407 elif policy_type == 'dict': 414 elif policy_type == 'dict':
408 self._AddDictionaryExample(parent, policy) 415 self._AddDictionaryExample(parent, policy)
409 else: 416 else:
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 <dt>Attribute:</dt><dd>Description</dd> 473 <dt>Attribute:</dt><dd>Description</dd>
467 ... 474 ...
468 </dl> 475 </dl>
469 476
470 Args: 477 Args:
471 parent: A DOM element for which the list will be added. 478 parent: A DOM element for which the list will be added.
472 policy: The data structure of the policy. 479 policy: The data structure of the policy.
473 ''' 480 '''
474 481
475 dl = self.AddElement(parent, 'dl') 482 dl = self.AddElement(parent, 'dl')
476 data_type = self._TYPE_MAP[policy['type']] 483 data_type = [self._TYPE_MAP[policy['type']]]
484 qualified_types = []
485 is_complex_policy = False
486 if (self.IsPolicySupportedOnPlatform(policy, 'android') and
487 self._RESTRICTION_TYPE_MAP.get(policy['type'], None)):
488 qualified_types.append('Android:%s' %
489 self._RESTRICTION_TYPE_MAP[policy['type']])
490 if policy['type'] in ('dict', 'list'):
491 is_complex_policy = True
477 if (self.IsPolicySupportedOnPlatform(policy, 'win') and 492 if (self.IsPolicySupportedOnPlatform(policy, 'win') and
478 self._REG_TYPE_MAP.get(policy['type'], None)): 493 self._REG_TYPE_MAP.get(policy['type'], None)):
479 data_type += ' (%s)' % self._REG_TYPE_MAP[policy['type']] 494 qualified_types.append('Windows:%s' % self._REG_TYPE_MAP[policy['type']])
480 self._AddPolicyAttribute(dl, 'data_type', data_type) 495 if policy['type'] == 'dict':
496 is_complex_policy = True
497 if qualified_types:
498 data_type.append('[%s]' % ', '.join(qualified_types))
499 if is_complex_policy:
500 data_type.append('(%s)' %
501 self._GetLocalizedMessage('complex_policies_on_windows'))
502 self._AddPolicyAttribute(dl, 'data_type', ' '.join(data_type))
481 if policy['type'] != 'external': 503 if policy['type'] != 'external':
482 # All types except 'external' can be set through platform policy. 504 # All types except 'external' can be set through platform policy.
483 if self.IsPolicySupportedOnPlatform(policy, 'win'): 505 if self.IsPolicySupportedOnPlatform(policy, 'win'):
484 if self.CanBeRecommended(policy) and not self.CanBeMandatory(policy): 506 if self.CanBeRecommended(policy) and not self.CanBeMandatory(policy):
485 key_name = self.config['win_reg_recommended_key_name'] 507 key_name = self.config['win_reg_recommended_key_name']
486 else: 508 else:
487 key_name = self.config['win_reg_mandatory_key_name'] 509 key_name = self.config['win_reg_mandatory_key_name']
488 self._AddPolicyAttribute( 510 self._AddPolicyAttribute(
489 dl, 511 dl,
490 'win_reg_loc', 512 'win_reg_loc',
491 key_name + '\\' + policy['name'], 513 key_name + '\\' + policy['name'],
492 ['.monospace']) 514 ['.monospace'])
493 if (self.IsPolicySupportedOnPlatform(policy, 'linux') or 515 if (self.IsPolicySupportedOnPlatform(policy, 'linux') or
494 self.IsPolicySupportedOnPlatform(policy, 'mac')): 516 self.IsPolicySupportedOnPlatform(policy, 'mac')):
495 self._AddPolicyAttribute( 517 self._AddPolicyAttribute(
496 dl, 518 dl,
497 'mac_linux_pref_name', 519 'mac_linux_pref_name',
498 policy['name'], 520 policy['name'],
499 ['.monospace']) 521 ['.monospace'])
522 if self.IsPolicySupportedOnPlatform(policy, 'android'):
523 self._AddPolicyAttribute(
524 dl,
525 'android_restriction_name',
526 policy['name'],
527 ['.monospace'])
500 dd = self._AddPolicyAttribute(dl, 'supported_on') 528 dd = self._AddPolicyAttribute(dl, 'supported_on')
501 self._AddSupportedOnList(dd, policy['supported_on']) 529 self._AddSupportedOnList(dd, policy['supported_on'])
502 dd = self._AddPolicyAttribute(dl, 'supported_features') 530 dd = self._AddPolicyAttribute(dl, 'supported_features')
503 self._AddFeatures(dd, policy) 531 self._AddFeatures(dd, policy)
504 dd = self._AddPolicyAttribute(dl, 'description') 532 dd = self._AddPolicyAttribute(dl, 'description')
505 self._AddDescription(dd, policy) 533 self._AddDescription(dd, policy)
506 if (self.IsPolicySupportedOnPlatform(policy, 'win') or 534 if (self.IsPolicySupportedOnPlatform(policy, 'win') or
507 self.IsPolicySupportedOnPlatform(policy, 'linux') or 535 self.IsPolicySupportedOnPlatform(policy, 'linux') or
536 self.IsPolicySupportedOnPlatform(policy, 'android') or
508 self.IsPolicySupportedOnPlatform(policy, 'mac')): 537 self.IsPolicySupportedOnPlatform(policy, 'mac')):
509 # Don't add an example for ChromeOS-only policies. 538 # Don't add an example for ChromeOS-only policies.
510 if policy['type'] != 'external': 539 if policy['type'] != 'external':
511 # All types except 'external' can be set through platform policy. 540 # All types except 'external' can be set through platform policy.
512 dd = self._AddPolicyAttribute(dl, 'example_value') 541 dd = self._AddPolicyAttribute(dl, 'example_value')
513 self._AddExample(dd, policy) 542 self._AddExample(dd, policy)
514 543
515 def _AddPolicyNote(self, parent, policy): 544 def _AddPolicyNote(self, parent, policy):
516 '''If a policy has an additional web page assigned with it, then add 545 '''If a policy has an additional web page assigned with it, then add
517 a link for that page. 546 a link for that page.
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 'string': 'String', 697 'string': 'String',
669 'int': 'Integer', 698 'int': 'Integer',
670 'main': 'Boolean', 699 'main': 'Boolean',
671 'int-enum': 'Integer', 700 'int-enum': 'Integer',
672 'string-enum': 'String', 701 'string-enum': 'String',
673 'list': 'List of strings', 702 'list': 'List of strings',
674 'string-enum-list': 'List of strings', 703 'string-enum-list': 'List of strings',
675 'dict': 'Dictionary', 704 'dict': 'Dictionary',
676 'external': 'External data reference', 705 'external': 'External data reference',
677 } 706 }
678 reg_dict = 'REG_SZ; %s' % self._GetLocalizedMessage(
679 'complex_policies_on_windows')
680 self._REG_TYPE_MAP = { 707 self._REG_TYPE_MAP = {
681 'string': 'REG_SZ', 708 'string': 'REG_SZ',
682 'int': 'REG_DWORD', 709 'int': 'REG_DWORD',
683 'main': 'REG_DWORD', 710 'main': 'REG_DWORD',
684 'int-enum': 'REG_DWORD', 711 'int-enum': 'REG_DWORD',
685 'string-enum': 'REG_SZ', 712 'string-enum': 'REG_SZ',
686 'dict': reg_dict, 713 'dict': 'REG_SZ',
714 }
715 self._RESTRICTION_TYPE_MAP = {
716 'int-enum': 'choice',
717 'string-enum': 'choice',
718 'list': 'string',
719 'string-enum-list': 'multi-select',
720 'dict': 'string',
687 } 721 }
688 # The CSS style-sheet used for the document. It will be used in Google 722 # The CSS style-sheet used for the document. It will be used in Google
689 # Sites, which strips class attributes from HTML tags. To work around this, 723 # Sites, which strips class attributes from HTML tags. To work around this,
690 # the style-sheet is a dictionary and the style attributes will be added 724 # the style-sheet is a dictionary and the style attributes will be added
691 # "by hand" for each element. 725 # "by hand" for each element.
692 self._STYLE = { 726 self._STYLE = {
693 'table': 'border-style: none; border-collapse: collapse;', 727 'table': 'border-style: none; border-collapse: collapse;',
694 'tr': 'height: 0px;', 728 'tr': 'height: 0px;',
695 'td': 'border: 1px dotted rgb(170, 170, 170); padding: 7px; ' 729 'td': 'border: 1px dotted rgb(170, 170, 170); padding: 7px; '
696 'vertical-align: top; width: 236px; height: 15px;', 730 'vertical-align: top; width: 236px; height: 15px;',
697 'thead td': 'font-weight: bold;', 731 'thead td': 'font-weight: bold;',
698 'td.left': 'width: 200px;', 732 'td.left': 'width: 200px;',
699 'td.right': 'width: 100%;', 733 'td.right': 'width: 100%;',
700 'dt': 'font-weight: bold;', 734 'dt': 'font-weight: bold;',
701 'dd dl': 'margin-top: 0px; margin-bottom: 0px;', 735 'dd dl': 'margin-top: 0px; margin-bottom: 0px;',
702 '.monospace': 'font-family: monospace;', 736 '.monospace': 'font-family: monospace;',
703 '.pre': 'white-space: pre;', 737 '.pre': 'white-space: pre;',
704 'div.note': 'border: 2px solid black; padding: 5px; margin: 5px;', 738 'div.note': 'border: 2px solid black; padding: 5px; margin: 5px;',
705 'div.group_desc': 'margin-top: 20px; margin-bottom: 20px;', 739 'div.group_desc': 'margin-top: 20px; margin-bottom: 20px;',
706 'ul': 'padding-left: 0px; margin-left: 0px;' 740 'ul': 'padding-left: 0px; margin-left: 0px;'
707 } 741 }
708 742
709 743
710 def GetTemplateText(self): 744 def GetTemplateText(self):
711 # Return the text representation of the main <div> tag. 745 # Return the text representation of the main <div> tag.
712 return self._main_div.toxml() 746 return self._main_div.toxml()
713 # To get a complete HTML file, use the following. 747 # To get a complete HTML file, use the following.
714 # return self._doc.toxml() 748 # return self._doc.toxml()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698