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