| Index: grit/format/policy_templates/writers/reg_writer.py
|
| ===================================================================
|
| --- grit/format/policy_templates/writers/reg_writer.py (revision 0)
|
| +++ grit/format/policy_templates/writers/reg_writer.py (revision 0)
|
| @@ -0,0 +1,92 @@
|
| +# 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
|
| +
|
| +
|
| +def GetWriter(config):
|
| + '''Factory method for creating RegWriter objects.
|
| + See the constructor of TemplateWriter for description of
|
| + arguments.
|
| + '''
|
| + return RegWriter(['win'], config)
|
| +
|
| +
|
| +class RegWriter(template_writer.TemplateWriter):
|
| + '''Class for generating policy example files in .reg format (for Windows).
|
| + The generated files will define all the supported policies with example
|
| + values set for them. This class is used by PolicyTemplateGenerator to
|
| + write .reg files.
|
| + '''
|
| +
|
| + NEWLINE = '\r\n'
|
| +
|
| + def _EscapeRegString(self, string):
|
| + return string.replace('\\', '\\\\').replace('\"', '\\\"')
|
| +
|
| + def _StartBlock(self, suffix):
|
| + key = 'HKEY_LOCAL_MACHINE\\' + self.config['win_reg_key_name']
|
| + if suffix:
|
| + key = key + '\\' + suffix
|
| + if key != self._last_key:
|
| + self._out.append('')
|
| + self._out.append('[%s]' % key)
|
| + self._last_key = key
|
| +
|
| + def PreprocessPolicies(self, policy_list):
|
| + return self.FlattenGroupsAndSortPolicies(policy_list,
|
| + self.GetPolicySortingKey)
|
| +
|
| + def GetPolicySortingKey(self, policy):
|
| + '''Extracts a sorting key from a policy. These keys can be used for
|
| + list.sort() methods to sort policies.
|
| + See TemplateWriter.SortPoliciesGroupsFirst for usage.
|
| + '''
|
| + is_list = policy['type'] == 'list'
|
| + # Lists come after regular policies.
|
| + return (is_list, policy['name'])
|
| +
|
| + def WritePolicy(self, policy):
|
| + example_value = policy['example_value']
|
| +
|
| + if policy['type'] == 'list':
|
| + self._StartBlock(policy['name'])
|
| + i = 1
|
| + for item in example_value:
|
| + escaped_str = self._EscapeRegString(item)
|
| + self._out.append('"%d"="%s"' % (i, escaped_str))
|
| + i = i + 1
|
| + else:
|
| + self._StartBlock(None)
|
| + if policy['type'] == 'string':
|
| + escaped_str = self._EscapeRegString(example_value)
|
| + example_value_str = '"' + escaped_str + '"'
|
| + elif policy['type'] == 'main':
|
| + if example_value == True:
|
| + example_value_str = 'dword:00000001'
|
| + else:
|
| + example_value_str = 'dword:00000000'
|
| + elif policy['type'] in ('int', 'int-enum'):
|
| + example_value_str = 'dword:%08x' % example_value
|
| + elif policy['type'] == 'string-enum':
|
| + example_value_str = '"%s"' % example_value
|
| + else:
|
| + raise Exception('unknown policy type %s:' % policy['type'])
|
| +
|
| + self._out.append('"%s"=%s' % (policy['name'], example_value_str))
|
| +
|
| + def BeginTemplate(self):
|
| + pass
|
| +
|
| + def EndTemplate(self):
|
| + pass
|
| +
|
| + def Init(self):
|
| + self._out = ['Windows Registry Editor Version 5.00']
|
| + self._last_key = None
|
| +
|
| + def GetTemplateText(self):
|
| + return self.NEWLINE.join(self._out)
|
|
|
| Property changes on: grit/format/policy_templates/writers/reg_writer.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|