195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python
295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be
401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file.
501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.format.policy_templates.writers import plist_helper
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.format.policy_templates.writers import template_writer
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef GetWriter(config):
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''Factory method for creating PListStringsWriter objects.
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  See the constructor of TemplateWriter for description of
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  arguments.
1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  return PListStringsWriter(['mac'], config)
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass PListStringsWriter(template_writer.TemplateWriter):
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''Outputs localized string table files for the Mac policy file.
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  These files are named Localizable.strings and they are in the
2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  [lang].lproj subdirectories of the manifest bundle.
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def _AddToStringTable(self, item_name, caption, desc):
2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''Add a title and a description of an item to the string table.
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    Args:
2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      item_name: The name of the item that will get the title and the
3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        description.
3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      title: The text of the title to add.
3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      desc: The text of the description to add.
3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''
3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    caption = caption.replace('"', '\\"')
3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    caption = caption.replace('\n', '\\n')
3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    desc = desc.replace('"', '\\"')
3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    desc = desc.replace('\n', '\\n')
3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._out.append('%s.pfm_title = \"%s\";' % (item_name, caption))
3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._out.append('%s.pfm_description = \"%s\";' % (item_name, desc))
4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def PreprocessPolicies(self, policy_list):
4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return self.FlattenGroupsAndSortPolicies(policy_list)
4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def WritePolicy(self, policy):
4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''Add strings to the stringtable corresponding a given policy.
4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    Args:
4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      policy: The policy for which the strings will be added to the
4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        string table.
5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''
5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    desc = policy['desc']
52e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org    if policy['type'] == 'external':
53e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org      # This type can only be set through cloud policy.
54e9f965b7a19bfc970bec100fb03e6aa269deb522joaodasilva@chromium.org      return
55786be15cb6c0f7d78f3eab9fda9d4266619ddbf0joaodasilva@chromium.org    elif policy['type'] in ('int-enum','string-enum', 'string-enum-list'):
5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      # Append the captions of enum items to the description string.
5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      item_descs = []
5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      for item in policy['items']:
5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        item_descs.append(str(item['value']) + ' - ' + item['caption'])
6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      desc = '\n'.join(item_descs) + '\n' + desc
6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._AddToStringTable(policy['name'], policy['label'], desc)
6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
6401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def BeginTemplate(self):
6501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    app_name = plist_helper.GetPlistFriendlyName(self.config['app_name'])
6601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._AddToStringTable(
6701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        app_name,
6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        self.config['app_name'],
6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org        self.messages['mac_chrome_preferences']['text'])
7001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
7101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def Init(self):
7201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    # A buffer for the lines of the string table being generated.
7301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self._out = []
7401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
7501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def GetTemplateText(self):
7601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return '\n'.join(self._out)
77